##// END OF EJS Templates
Replace the plain dictionaries used for keymaps with a custom class...
walter.doerwald -
Show More
@@ -1,1626 +1,1646 b''
1 # -*- coding: iso-8859-1 -*-
1 # -*- coding: iso-8859-1 -*-
2
2
3 import curses, fcntl, signal, struct, tty, textwrap
3 import curses, fcntl, signal, struct, tty, textwrap
4
4
5 import astyle, ipipe
5 import astyle, ipipe
6
6
7
7
8 # Python 2.3 compatibility
8 # Python 2.3 compatibility
9 try:
9 try:
10 set
10 set
11 except NameError:
11 except NameError:
12 import sets
12 import sets
13 set = sets.Set
13 set = sets.Set
14
14
15
15
16 _ibrowse_help = """
16 _ibrowse_help = """
17 down
17 down
18 Move the cursor to the next line.
18 Move the cursor to the next line.
19
19
20 up
20 up
21 Move the cursor to the previous line.
21 Move the cursor to the previous line.
22
22
23 pagedown
23 pagedown
24 Move the cursor down one page (minus overlap).
24 Move the cursor down one page (minus overlap).
25
25
26 pageup
26 pageup
27 Move the cursor up one page (minus overlap).
27 Move the cursor up one page (minus overlap).
28
28
29 left
29 left
30 Move the cursor left.
30 Move the cursor left.
31
31
32 right
32 right
33 Move the cursor right.
33 Move the cursor right.
34
34
35 home
35 home
36 Move the cursor to the first column.
36 Move the cursor to the first column.
37
37
38 end
38 end
39 Move the cursor to the last column.
39 Move the cursor to the last column.
40
40
41 prevattr
41 prevattr
42 Move the cursor one attribute column to the left.
42 Move the cursor one attribute column to the left.
43
43
44 nextattr
44 nextattr
45 Move the cursor one attribute column to the right.
45 Move the cursor one attribute column to the right.
46
46
47 pick
47 pick
48 'Pick' the object under the cursor (i.e. the row the cursor is on). This
48 'Pick' the object under the cursor (i.e. the row the cursor is on). This
49 leaves the browser and returns the picked object to the caller. (In IPython
49 leaves the browser and returns the picked object to the caller. (In IPython
50 this object will be available as the '_' variable.)
50 this object will be available as the '_' variable.)
51
51
52 pickattr
52 pickattr
53 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on).
53 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on).
54
54
55 pickallattrs
55 pickallattrs
56 Pick' the complete column under the cursor (i.e. the attribute under the
56 Pick' the complete column under the cursor (i.e. the attribute under the
57 cursor) from all currently fetched objects. These attributes will be returned
57 cursor) from all currently fetched objects. These attributes will be returned
58 as a list.
58 as a list.
59
59
60 tooglemark
60 tooglemark
61 Mark/unmark the object under the cursor. Marked objects have a '!' after the
61 Mark/unmark the object under the cursor. Marked objects have a '!' after the
62 row number).
62 row number).
63
63
64 pickmarked
64 pickmarked
65 'Pick' marked objects. Marked objects will be returned as a list.
65 'Pick' marked objects. Marked objects will be returned as a list.
66
66
67 pickmarkedattr
67 pickmarkedattr
68 'Pick' the attribute under the cursor from all marked objects (This returns a
68 'Pick' the attribute under the cursor from all marked objects (This returns a
69 list).
69 list).
70
70
71 enterdefault
71 enterdefault
72 Enter the object under the cursor. (what this mean depends on the object
72 Enter the object under the cursor. (what this mean depends on the object
73 itself (i.e. how it implements the '__xiter__' method). This opens a new
73 itself (i.e. how it implements the '__xiter__' method). This opens a new
74 browser 'level'.
74 browser 'level'.
75
75
76 enter
76 enter
77 Enter the object under the cursor. If the object provides different enter
77 Enter the object under the cursor. If the object provides different enter
78 modes a menu of all modes will be presented; choose one and enter it (via the
78 modes a menu of all modes will be presented; choose one and enter it (via the
79 'enter' or 'enterdefault' command).
79 'enter' or 'enterdefault' command).
80
80
81 enterattr
81 enterattr
82 Enter the attribute under the cursor.
82 Enter the attribute under the cursor.
83
83
84 leave
84 leave
85 Leave the current browser level and go back to the previous one.
85 Leave the current browser level and go back to the previous one.
86
86
87 detail
87 detail
88 Show a detail view of the object under the cursor. This shows the name, type,
88 Show a detail view of the object under the cursor. This shows the name, type,
89 doc string and value of the object attributes (and it might show more
89 doc string and value of the object attributes (and it might show more
90 attributes than in the list view, depending on the object).
90 attributes than in the list view, depending on the object).
91
91
92 detailattr
92 detailattr
93 Show a detail view of the attribute under the cursor.
93 Show a detail view of the attribute under the cursor.
94
94
95 markrange
95 markrange
96 Mark all objects from the last marked object before the current cursor
96 Mark all objects from the last marked object before the current cursor
97 position to the cursor position.
97 position to the cursor position.
98
98
99 sortattrasc
99 sortattrasc
100 Sort the objects (in ascending order) using the attribute under the cursor as
100 Sort the objects (in ascending order) using the attribute under the cursor as
101 the sort key.
101 the sort key.
102
102
103 sortattrdesc
103 sortattrdesc
104 Sort the objects (in descending order) using the attribute under the cursor as
104 Sort the objects (in descending order) using the attribute under the cursor as
105 the sort key.
105 the sort key.
106
106
107 hideattr
107 hideattr
108 Hide the attribute under the cursor.
108 Hide the attribute under the cursor.
109
109
110 unhideattrs
110 unhideattrs
111 Make all attributes visible again.
111 Make all attributes visible again.
112
112
113 goto
113 goto
114 Jump to a row. The row number can be entered at the bottom of the screen.
114 Jump to a row. The row number can be entered at the bottom of the screen.
115
115
116 find
116 find
117 Search forward for a row. At the bottom of the screen the condition can be
117 Search forward for a row. At the bottom of the screen the condition can be
118 entered.
118 entered.
119
119
120 findbackwards
120 findbackwards
121 Search backward for a row. At the bottom of the screen the condition can be
121 Search backward for a row. At the bottom of the screen the condition can be
122 entered.
122 entered.
123
123
124 help
124 help
125 This screen.
125 This screen.
126 """
126 """
127
127
128
128
129 class UnassignedKeyError(Exception):
129 class UnassignedKeyError(Exception):
130 """
130 """
131 Exception that is used for reporting unassigned keys.
131 Exception that is used for reporting unassigned keys.
132 """
132 """
133
133
134
134
135 class UnknownCommandError(Exception):
135 class UnknownCommandError(Exception):
136 """
136 """
137 Exception that is used for reporting unknown command (this should never
137 Exception that is used for reporting unknown command (this should never
138 happen).
138 happen).
139 """
139 """
140
140
141
141
142 class CommandError(Exception):
142 class CommandError(Exception):
143 """
143 """
144 Exception that is used for reporting that a command can't be executed.
144 Exception that is used for reporting that a command can't be executed.
145 """
145 """
146
146
147
147
148 class Keymap(dict):
149 """
150 Stores mapping of keys to commands.
151 """
152 def __init__(self):
153 self._keymap = {}
154
155 def __setitem__(self, key, command):
156 if isinstance(key, str):
157 for c in key:
158 dict.__setitem__(self, ord(c), command)
159 else:
160 dict.__setitem__(self, key, command)
161
162 def register(self, command, *keys):
163 for key in keys:
164 self[key] = command
165
166 def __getitem__(self, key):
167 if isinstance(key, str):
168 key = ord(key)
169 return dict.__getitem__(self, key)
170
171 def get(self, key, default=None):
172 if isinstance(key, str):
173 key = ord(key)
174 return dict.get(self, key, default)
175
176 def findkey(self, command, default=ipipe.noitem):
177 for (key, commandcandidate) in self.iteritems():
178 if commandcandidate == command:
179 return key
180 if default is ipipe.noitem:
181 raise KeyError(command)
182 return default
183
184
148 class _BrowserCachedItem(object):
185 class _BrowserCachedItem(object):
149 # This is used internally by ``ibrowse`` to store a item together with its
186 # This is used internally by ``ibrowse`` to store a item together with its
150 # marked status.
187 # marked status.
151 __slots__ = ("item", "marked")
188 __slots__ = ("item", "marked")
152
189
153 def __init__(self, item):
190 def __init__(self, item):
154 self.item = item
191 self.item = item
155 self.marked = False
192 self.marked = False
156
193
157
194
158 class _BrowserHelp(object):
195 class _BrowserHelp(object):
159 style_header = astyle.Style.fromstr("red:blacK")
196 style_header = astyle.Style.fromstr("red:blacK")
160 # This is used internally by ``ibrowse`` for displaying the help screen.
197 # This is used internally by ``ibrowse`` for displaying the help screen.
161 def __init__(self, browser):
198 def __init__(self, browser):
162 self.browser = browser
199 self.browser = browser
163
200
164 def __xrepr__(self, mode):
201 def __xrepr__(self, mode):
165 yield (-1, True)
202 yield (-1, True)
166 if mode == "header" or mode == "footer":
203 if mode == "header" or mode == "footer":
167 yield (astyle.style_default, "ibrowse help screen")
204 yield (astyle.style_default, "ibrowse help screen")
168 else:
205 else:
169 yield (astyle.style_default, repr(self))
206 yield (astyle.style_default, repr(self))
170
207
171 def __xiter__(self, mode):
208 def __xiter__(self, mode):
172 # Get reverse key mapping
209 # Get reverse key mapping
173 allkeys = {}
210 allkeys = {}
174 for (key, cmd) in self.browser.keymap.iteritems():
211 for (key, cmd) in self.browser.keymap.iteritems():
175 allkeys.setdefault(cmd, []).append(key)
212 allkeys.setdefault(cmd, []).append(key)
176
213
177 fields = ("key", "description")
214 fields = ("key", "description")
178
215
179 for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")):
216 for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")):
180 if i:
217 if i:
181 yield ipipe.Fields(fields, key="", description="")
218 yield ipipe.Fields(fields, key="", description="")
182
219
183 (name, description) = command.split("\n", 1)
220 (name, description) = command.split("\n", 1)
184 keys = allkeys.get(name, [])
221 keys = allkeys.get(name, [])
185 lines = textwrap.wrap(description, 60)
222 lines = textwrap.wrap(description, 60)
186
223
187 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
224 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
188 for i in xrange(max(len(keys), len(lines))):
225 for i in xrange(max(len(keys), len(lines))):
189 try:
226 try:
190 key = self.browser.keylabel(keys[i])
227 key = self.browser.keylabel(keys[i])
191 except IndexError:
228 except IndexError:
192 key = ""
229 key = ""
193 try:
230 try:
194 line = lines[i]
231 line = lines[i]
195 except IndexError:
232 except IndexError:
196 line = ""
233 line = ""
197 yield ipipe.Fields(fields, key=key, description=line)
234 yield ipipe.Fields(fields, key=key, description=line)
198
235
199
236
200 class _BrowserLevel(object):
237 class _BrowserLevel(object):
201 # This is used internally to store the state (iterator, fetch items,
238 # This is used internally to store the state (iterator, fetch items,
202 # position of cursor and screen, etc.) of one browser level
239 # position of cursor and screen, etc.) of one browser level
203 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
240 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
204 # a stack.
241 # a stack.
205 def __init__(self, browser, input, iterator, mainsizey, *attrs):
242 def __init__(self, browser, input, iterator, mainsizey, *attrs):
206 self.browser = browser
243 self.browser = browser
207 self.input = input
244 self.input = input
208 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
245 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
209 # iterator for the input
246 # iterator for the input
210 self.iterator = iterator
247 self.iterator = iterator
211
248
212 # is the iterator exhausted?
249 # is the iterator exhausted?
213 self.exhausted = False
250 self.exhausted = False
214
251
215 # attributes to be display (autodetected if empty)
252 # attributes to be display (autodetected if empty)
216 self.attrs = attrs
253 self.attrs = attrs
217
254
218 # fetched items (+ marked flag)
255 # fetched items (+ marked flag)
219 self.items = ipipe.deque()
256 self.items = ipipe.deque()
220
257
221 # Number of marked objects
258 # Number of marked objects
222 self.marked = 0
259 self.marked = 0
223
260
224 # Vertical cursor position
261 # Vertical cursor position
225 self.cury = 0
262 self.cury = 0
226
263
227 # Horizontal cursor position
264 # Horizontal cursor position
228 self.curx = 0
265 self.curx = 0
229
266
230 # Index of first data column
267 # Index of first data column
231 self.datastartx = 0
268 self.datastartx = 0
232
269
233 # Index of first data line
270 # Index of first data line
234 self.datastarty = 0
271 self.datastarty = 0
235
272
236 # height of the data display area
273 # height of the data display area
237 self.mainsizey = mainsizey
274 self.mainsizey = mainsizey
238
275
239 # width of the data display area (changes when scrolling)
276 # width of the data display area (changes when scrolling)
240 self.mainsizex = 0
277 self.mainsizex = 0
241
278
242 # Size of row number (changes when scrolling)
279 # Size of row number (changes when scrolling)
243 self.numbersizex = 0
280 self.numbersizex = 0
244
281
245 # Attribute names to display (in this order)
282 # Attribute names to display (in this order)
246 self.displayattrs = []
283 self.displayattrs = []
247
284
248 # index and name of attribute under the cursor
285 # index and name of attribute under the cursor
249 self.displayattr = (None, ipipe.noitem)
286 self.displayattr = (None, ipipe.noitem)
250
287
251 # Maps attribute names to column widths
288 # Maps attribute names to column widths
252 self.colwidths = {}
289 self.colwidths = {}
253
290
254 # Set of hidden attributes
291 # Set of hidden attributes
255 self.hiddenattrs = set()
292 self.hiddenattrs = set()
256
293
257 # This takes care of all the caches etc.
294 # This takes care of all the caches etc.
258 self.moveto(0, 0, refresh=True)
295 self.moveto(0, 0, refresh=True)
259
296
260 def fetch(self, count):
297 def fetch(self, count):
261 # Try to fill ``self.items`` with at least ``count`` objects.
298 # Try to fill ``self.items`` with at least ``count`` objects.
262 have = len(self.items)
299 have = len(self.items)
263 while not self.exhausted and have < count:
300 while not self.exhausted and have < count:
264 try:
301 try:
265 item = self.iterator.next()
302 item = self.iterator.next()
266 except StopIteration:
303 except StopIteration:
267 self.exhausted = True
304 self.exhausted = True
268 break
305 break
269 else:
306 else:
270 have += 1
307 have += 1
271 self.items.append(_BrowserCachedItem(item))
308 self.items.append(_BrowserCachedItem(item))
272
309
273 def calcdisplayattrs(self):
310 def calcdisplayattrs(self):
274 # Calculate which attributes are available from the objects that are
311 # Calculate which attributes are available from the objects that are
275 # currently visible on screen (and store it in ``self.displayattrs``)
312 # currently visible on screen (and store it in ``self.displayattrs``)
276
313
277 attrnames = set()
314 attrnames = set()
278 self.displayattrs = []
315 self.displayattrs = []
279 if self.attrs:
316 if self.attrs:
280 # If the browser object specifies a fixed list of attributes,
317 # If the browser object specifies a fixed list of attributes,
281 # simply use it (removing hidden attributes).
318 # simply use it (removing hidden attributes).
282 for attrname in self.attrs:
319 for attrname in self.attrs:
283 if attrname not in attrnames and attrname not in self.hiddenattrs:
320 if attrname not in attrnames and attrname not in self.hiddenattrs:
284 self.displayattrs.append(attrname)
321 self.displayattrs.append(attrname)
285 attrnames.add(attrname)
322 attrnames.add(attrname)
286 else:
323 else:
287 endy = min(self.datastarty+self.mainsizey, len(self.items))
324 endy = min(self.datastarty+self.mainsizey, len(self.items))
288 for i in xrange(self.datastarty, endy):
325 for i in xrange(self.datastarty, endy):
289 for attrname in ipipe.xattrs(self.items[i].item, "default"):
326 for attrname in ipipe.xattrs(self.items[i].item, "default"):
290 if attrname not in attrnames and attrname not in self.hiddenattrs:
327 if attrname not in attrnames and attrname not in self.hiddenattrs:
291 self.displayattrs.append(attrname)
328 self.displayattrs.append(attrname)
292 attrnames.add(attrname)
329 attrnames.add(attrname)
293
330
294 def getrow(self, i):
331 def getrow(self, i):
295 # Return a dictinary with the attributes for the object
332 # Return a dictinary with the attributes for the object
296 # ``self.items[i]``. Attribute names are taken from
333 # ``self.items[i]``. Attribute names are taken from
297 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
334 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
298 # called before.
335 # called before.
299 row = {}
336 row = {}
300 item = self.items[i].item
337 item = self.items[i].item
301 for attrname in self.displayattrs:
338 for attrname in self.displayattrs:
302 try:
339 try:
303 value = ipipe._getattr(item, attrname, ipipe.noitem)
340 value = ipipe._getattr(item, attrname, ipipe.noitem)
304 except (KeyboardInterrupt, SystemExit):
341 except (KeyboardInterrupt, SystemExit):
305 raise
342 raise
306 except Exception, exc:
343 except Exception, exc:
307 value = exc
344 value = exc
308 # only store attribute if it exists (or we got an exception)
345 # only store attribute if it exists (or we got an exception)
309 if value is not ipipe.noitem:
346 if value is not ipipe.noitem:
310 # remember alignment, length and colored text
347 # remember alignment, length and colored text
311 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
348 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
312 return row
349 return row
313
350
314 def calcwidths(self):
351 def calcwidths(self):
315 # Recalculate the displayed fields and their widths.
352 # Recalculate the displayed fields and their widths.
316 # ``calcdisplayattrs()'' must have been called and the cache
353 # ``calcdisplayattrs()'' must have been called and the cache
317 # for attributes of the objects on screen (``self.displayrows``)
354 # for attributes of the objects on screen (``self.displayrows``)
318 # must have been filled. This returns a dictionary mapping
355 # must have been filled. This returns a dictionary mapping
319 # column names to widths.
356 # column names to widths.
320 self.colwidths = {}
357 self.colwidths = {}
321 for row in self.displayrows:
358 for row in self.displayrows:
322 for attrname in self.displayattrs:
359 for attrname in self.displayattrs:
323 try:
360 try:
324 length = row[attrname][1]
361 length = row[attrname][1]
325 except KeyError:
362 except KeyError:
326 length = 0
363 length = 0
327 # always add attribute to colwidths, even if it doesn't exist
364 # always add attribute to colwidths, even if it doesn't exist
328 if attrname not in self.colwidths:
365 if attrname not in self.colwidths:
329 self.colwidths[attrname] = len(ipipe._attrname(attrname))
366 self.colwidths[attrname] = len(ipipe._attrname(attrname))
330 newwidth = max(self.colwidths[attrname], length)
367 newwidth = max(self.colwidths[attrname], length)
331 self.colwidths[attrname] = newwidth
368 self.colwidths[attrname] = newwidth
332
369
333 # How many characters do we need to paint the largest item number?
370 # How many characters do we need to paint the largest item number?
334 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
371 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
335 # How must space have we got to display data?
372 # How must space have we got to display data?
336 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
373 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
337 # width of all columns
374 # width of all columns
338 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
375 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
339
376
340 def calcdisplayattr(self):
377 def calcdisplayattr(self):
341 # Find out which attribute the cursor is on and store this
378 # Find out which attribute the cursor is on and store this
342 # information in ``self.displayattr``.
379 # information in ``self.displayattr``.
343 pos = 0
380 pos = 0
344 for (i, attrname) in enumerate(self.displayattrs):
381 for (i, attrname) in enumerate(self.displayattrs):
345 if pos+self.colwidths[attrname] >= self.curx:
382 if pos+self.colwidths[attrname] >= self.curx:
346 self.displayattr = (i, attrname)
383 self.displayattr = (i, attrname)
347 break
384 break
348 pos += self.colwidths[attrname]+1
385 pos += self.colwidths[attrname]+1
349 else:
386 else:
350 self.displayattr = (None, ipipe.noitem)
387 self.displayattr = (None, ipipe.noitem)
351
388
352 def moveto(self, x, y, refresh=False):
389 def moveto(self, x, y, refresh=False):
353 # Move the cursor to the position ``(x,y)`` (in data coordinates,
390 # Move the cursor to the position ``(x,y)`` (in data coordinates,
354 # not in screen coordinates). If ``refresh`` is true, all cached
391 # not in screen coordinates). If ``refresh`` is true, all cached
355 # values will be recalculated (e.g. because the list has been
392 # values will be recalculated (e.g. because the list has been
356 # resorted, so screen positions etc. are no longer valid).
393 # resorted, so screen positions etc. are no longer valid).
357 olddatastarty = self.datastarty
394 olddatastarty = self.datastarty
358 oldx = self.curx
395 oldx = self.curx
359 oldy = self.cury
396 oldy = self.cury
360 x = int(x+0.5)
397 x = int(x+0.5)
361 y = int(y+0.5)
398 y = int(y+0.5)
362 newx = x # remember where we wanted to move
399 newx = x # remember where we wanted to move
363 newy = y # remember where we wanted to move
400 newy = y # remember where we wanted to move
364
401
365 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
402 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
366 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
403 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
367
404
368 # Make sure that the cursor didn't leave the main area vertically
405 # Make sure that the cursor didn't leave the main area vertically
369 if y < 0:
406 if y < 0:
370 y = 0
407 y = 0
371 # try to get enough items to fill the screen
408 # try to get enough items to fill the screen
372 self.fetch(max(y+scrollbordery+1, self.mainsizey))
409 self.fetch(max(y+scrollbordery+1, self.mainsizey))
373 if y >= len(self.items):
410 if y >= len(self.items):
374 y = max(0, len(self.items)-1)
411 y = max(0, len(self.items)-1)
375
412
376 # Make sure that the cursor stays on screen vertically
413 # Make sure that the cursor stays on screen vertically
377 if y < self.datastarty+scrollbordery:
414 if y < self.datastarty+scrollbordery:
378 self.datastarty = max(0, y-scrollbordery)
415 self.datastarty = max(0, y-scrollbordery)
379 elif y >= self.datastarty+self.mainsizey-scrollbordery:
416 elif y >= self.datastarty+self.mainsizey-scrollbordery:
380 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
417 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
381 len(self.items)-self.mainsizey))
418 len(self.items)-self.mainsizey))
382
419
383 if refresh: # Do we need to refresh the complete display?
420 if refresh: # Do we need to refresh the complete display?
384 self.calcdisplayattrs()
421 self.calcdisplayattrs()
385 endy = min(self.datastarty+self.mainsizey, len(self.items))
422 endy = min(self.datastarty+self.mainsizey, len(self.items))
386 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
423 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
387 self.calcwidths()
424 self.calcwidths()
388 # Did we scroll vertically => update displayrows
425 # Did we scroll vertically => update displayrows
389 # and various other attributes
426 # and various other attributes
390 elif self.datastarty != olddatastarty:
427 elif self.datastarty != olddatastarty:
391 # Recalculate which attributes we have to display
428 # Recalculate which attributes we have to display
392 olddisplayattrs = self.displayattrs
429 olddisplayattrs = self.displayattrs
393 self.calcdisplayattrs()
430 self.calcdisplayattrs()
394 # If there are new attributes, recreate the cache
431 # If there are new attributes, recreate the cache
395 if self.displayattrs != olddisplayattrs:
432 if self.displayattrs != olddisplayattrs:
396 endy = min(self.datastarty+self.mainsizey, len(self.items))
433 endy = min(self.datastarty+self.mainsizey, len(self.items))
397 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
434 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
398 elif self.datastarty<olddatastarty: # we did scroll up
435 elif self.datastarty<olddatastarty: # we did scroll up
399 # drop rows from the end
436 # drop rows from the end
400 del self.displayrows[self.datastarty-olddatastarty:]
437 del self.displayrows[self.datastarty-olddatastarty:]
401 # fetch new items
438 # fetch new items
402 for i in xrange(olddatastarty-1,
439 for i in xrange(olddatastarty-1,
403 self.datastarty-1, -1):
440 self.datastarty-1, -1):
404 try:
441 try:
405 row = self.getrow(i)
442 row = self.getrow(i)
406 except IndexError:
443 except IndexError:
407 # we didn't have enough objects to fill the screen
444 # we didn't have enough objects to fill the screen
408 break
445 break
409 self.displayrows.insert(0, row)
446 self.displayrows.insert(0, row)
410 else: # we did scroll down
447 else: # we did scroll down
411 # drop rows from the start
448 # drop rows from the start
412 del self.displayrows[:self.datastarty-olddatastarty]
449 del self.displayrows[:self.datastarty-olddatastarty]
413 # fetch new items
450 # fetch new items
414 for i in xrange(olddatastarty+self.mainsizey,
451 for i in xrange(olddatastarty+self.mainsizey,
415 self.datastarty+self.mainsizey):
452 self.datastarty+self.mainsizey):
416 try:
453 try:
417 row = self.getrow(i)
454 row = self.getrow(i)
418 except IndexError:
455 except IndexError:
419 # we didn't have enough objects to fill the screen
456 # we didn't have enough objects to fill the screen
420 break
457 break
421 self.displayrows.append(row)
458 self.displayrows.append(row)
422 self.calcwidths()
459 self.calcwidths()
423
460
424 # Make sure that the cursor didn't leave the data area horizontally
461 # Make sure that the cursor didn't leave the data area horizontally
425 if x < 0:
462 if x < 0:
426 x = 0
463 x = 0
427 elif x >= self.datasizex:
464 elif x >= self.datasizex:
428 x = max(0, self.datasizex-1)
465 x = max(0, self.datasizex-1)
429
466
430 # Make sure that the cursor stays on screen horizontally
467 # Make sure that the cursor stays on screen horizontally
431 if x < self.datastartx+scrollborderx:
468 if x < self.datastartx+scrollborderx:
432 self.datastartx = max(0, x-scrollborderx)
469 self.datastartx = max(0, x-scrollborderx)
433 elif x >= self.datastartx+self.mainsizex-scrollborderx:
470 elif x >= self.datastartx+self.mainsizex-scrollborderx:
434 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
471 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
435 self.datasizex-self.mainsizex))
472 self.datasizex-self.mainsizex))
436
473
437 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
474 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
438 self.browser.beep()
475 self.browser.beep()
439 else:
476 else:
440 self.curx = x
477 self.curx = x
441 self.cury = y
478 self.cury = y
442 self.calcdisplayattr()
479 self.calcdisplayattr()
443
480
444 def sort(self, key, reverse=False):
481 def sort(self, key, reverse=False):
445 """
482 """
446 Sort the currently list of items using the key function ``key``. If
483 Sort the currently list of items using the key function ``key``. If
447 ``reverse`` is true the sort order is reversed.
484 ``reverse`` is true the sort order is reversed.
448 """
485 """
449 curitem = self.items[self.cury] # Remember where the cursor is now
486 curitem = self.items[self.cury] # Remember where the cursor is now
450
487
451 # Sort items
488 # Sort items
452 def realkey(item):
489 def realkey(item):
453 return key(item.item)
490 return key(item.item)
454 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
491 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
455
492
456 # Find out where the object under the cursor went
493 # Find out where the object under the cursor went
457 cury = self.cury
494 cury = self.cury
458 for (i, item) in enumerate(self.items):
495 for (i, item) in enumerate(self.items):
459 if item is curitem:
496 if item is curitem:
460 cury = i
497 cury = i
461 break
498 break
462
499
463 self.moveto(self.curx, cury, refresh=True)
500 self.moveto(self.curx, cury, refresh=True)
464
501
465
502
466 class _CommandInput(object):
503 class _CommandInput(object):
467 keymap = {
504 keymap = Keymap()
468 curses.KEY_LEFT: "left",
505 keymap.register("left", curses.KEY_LEFT)
469 curses.KEY_RIGHT: "right",
506 keymap.register("right", curses.KEY_RIGHT)
470 curses.KEY_HOME: "home",
507 keymap.register("home", curses.KEY_HOME, "\x01") # Ctrl-A
471 1: "home",
508 keymap.register("end", curses.KEY_END, "\x05") # Ctrl-E
472 curses.KEY_END: "end",
509 # FIXME: What's happening here?
473 5: "end",
510 keymap.register("backspace", curses.KEY_BACKSPACE, "x\x08\x7f")
474 # FIXME: What's happening here?
511 keymap.register("delete", curses.KEY_DC)
475 8: "backspace",
512 keymap.register("delend", 0x0b) # Ctrl-K
476 127: "backspace",
513 keymap.register("execute", "\r\n")
477 curses.KEY_BACKSPACE: "backspace",
514 keymap.register("up", curses.KEY_UP)
478 curses.KEY_DC: "delete",
515 keymap.register("down", curses.KEY_DOWN)
479 # CTRL-K
516 keymap.register("incsearchup", curses.KEY_PPAGE)
480 0x0B: "delend",
517 keymap.register("incsearchdown", curses.KEY_NPAGE)
481 ord("\n"): "execute",
518 keymap.register("exit", "\x18"), # Ctrl-X
482 ord("\r"): "execute",
483 curses.KEY_UP: "up",
484 curses.KEY_DOWN: "down",
485 curses.KEY_PPAGE: "incsearchup",
486 curses.KEY_NPAGE: "incsearchdown",
487 # CTRL-X
488 0x18: "exit",
489 }
490
519
491 def __init__(self, prompt):
520 def __init__(self, prompt):
492 self.prompt = prompt
521 self.prompt = prompt
493 self.history = []
522 self.history = []
494 self.maxhistory = 100
523 self.maxhistory = 100
495 self.input = ""
524 self.input = ""
496 self.curx = 0
525 self.curx = 0
497 self.cury = -1 # blank line
526 self.cury = -1 # blank line
498
527
499 def start(self):
528 def start(self):
500 self.input = ""
529 self.input = ""
501 self.curx = 0
530 self.curx = 0
502 self.cury = -1 # blank line
531 self.cury = -1 # blank line
503
532
504 def handlekey(self, browser, key):
533 def handlekey(self, browser, key):
505 cmdname = self.keymap.get(key, None)
534 cmdname = self.keymap.get(key, None)
506 if cmdname is not None:
535 if cmdname is not None:
507 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
536 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
508 if cmdfunc is not None:
537 if cmdfunc is not None:
509 return cmdfunc(browser)
538 return cmdfunc(browser)
510 curses.beep()
539 curses.beep()
511 elif key != -1:
540 elif key != -1:
512 try:
541 try:
513 char = chr(key)
542 char = chr(key)
514 except ValueError:
543 except ValueError:
515 curses.beep()
544 curses.beep()
516 else:
545 else:
517 return self.handlechar(browser, char)
546 return self.handlechar(browser, char)
518
547
519 def handlechar(self, browser, char):
548 def handlechar(self, browser, char):
520 self.input = self.input[:self.curx] + char + self.input[self.curx:]
549 self.input = self.input[:self.curx] + char + self.input[self.curx:]
521 self.curx += 1
550 self.curx += 1
522 return True
551 return True
523
552
524 def dohistory(self):
553 def dohistory(self):
525 self.history.insert(0, self.input)
554 self.history.insert(0, self.input)
526 del self.history[:-self.maxhistory]
555 del self.history[:-self.maxhistory]
527
556
528 def cmd_backspace(self, browser):
557 def cmd_backspace(self, browser):
529 if self.curx:
558 if self.curx:
530 self.input = self.input[:self.curx-1] + self.input[self.curx:]
559 self.input = self.input[:self.curx-1] + self.input[self.curx:]
531 self.curx -= 1
560 self.curx -= 1
532 return True
561 return True
533 else:
562 else:
534 curses.beep()
563 curses.beep()
535
564
536 def cmd_delete(self, browser):
565 def cmd_delete(self, browser):
537 if self.curx<len(self.input):
566 if self.curx<len(self.input):
538 self.input = self.input[:self.curx] + self.input[self.curx+1:]
567 self.input = self.input[:self.curx] + self.input[self.curx+1:]
539 return True
568 return True
540 else:
569 else:
541 curses.beep()
570 curses.beep()
542
571
543 def cmd_delend(self, browser):
572 def cmd_delend(self, browser):
544 if self.curx<len(self.input):
573 if self.curx<len(self.input):
545 self.input = self.input[:self.curx]
574 self.input = self.input[:self.curx]
546 return True
575 return True
547
576
548 def cmd_left(self, browser):
577 def cmd_left(self, browser):
549 if self.curx:
578 if self.curx:
550 self.curx -= 1
579 self.curx -= 1
551 return True
580 return True
552 else:
581 else:
553 curses.beep()
582 curses.beep()
554
583
555 def cmd_right(self, browser):
584 def cmd_right(self, browser):
556 if self.curx < len(self.input):
585 if self.curx < len(self.input):
557 self.curx += 1
586 self.curx += 1
558 return True
587 return True
559 else:
588 else:
560 curses.beep()
589 curses.beep()
561
590
562 def cmd_home(self, browser):
591 def cmd_home(self, browser):
563 if self.curx:
592 if self.curx:
564 self.curx = 0
593 self.curx = 0
565 return True
594 return True
566 else:
595 else:
567 curses.beep()
596 curses.beep()
568
597
569 def cmd_end(self, browser):
598 def cmd_end(self, browser):
570 if self.curx < len(self.input):
599 if self.curx < len(self.input):
571 self.curx = len(self.input)
600 self.curx = len(self.input)
572 return True
601 return True
573 else:
602 else:
574 curses.beep()
603 curses.beep()
575
604
576 def cmd_up(self, browser):
605 def cmd_up(self, browser):
577 if self.cury < len(self.history)-1:
606 if self.cury < len(self.history)-1:
578 self.cury += 1
607 self.cury += 1
579 self.input = self.history[self.cury]
608 self.input = self.history[self.cury]
580 self.curx = len(self.input)
609 self.curx = len(self.input)
581 return True
610 return True
582 else:
611 else:
583 curses.beep()
612 curses.beep()
584
613
585 def cmd_down(self, browser):
614 def cmd_down(self, browser):
586 if self.cury >= 0:
615 if self.cury >= 0:
587 self.cury -= 1
616 self.cury -= 1
588 if self.cury>=0:
617 if self.cury>=0:
589 self.input = self.history[self.cury]
618 self.input = self.history[self.cury]
590 else:
619 else:
591 self.input = ""
620 self.input = ""
592 self.curx = len(self.input)
621 self.curx = len(self.input)
593 return True
622 return True
594 else:
623 else:
595 curses.beep()
624 curses.beep()
596
625
597 def cmd_incsearchup(self, browser):
626 def cmd_incsearchup(self, browser):
598 prefix = self.input[:self.curx]
627 prefix = self.input[:self.curx]
599 cury = self.cury
628 cury = self.cury
600 while True:
629 while True:
601 cury += 1
630 cury += 1
602 if cury >= len(self.history):
631 if cury >= len(self.history):
603 break
632 break
604 if self.history[cury].startswith(prefix):
633 if self.history[cury].startswith(prefix):
605 self.input = self.history[cury]
634 self.input = self.history[cury]
606 self.cury = cury
635 self.cury = cury
607 return True
636 return True
608 curses.beep()
637 curses.beep()
609
638
610 def cmd_incsearchdown(self, browser):
639 def cmd_incsearchdown(self, browser):
611 prefix = self.input[:self.curx]
640 prefix = self.input[:self.curx]
612 cury = self.cury
641 cury = self.cury
613 while True:
642 while True:
614 cury -= 1
643 cury -= 1
615 if cury <= 0:
644 if cury <= 0:
616 break
645 break
617 if self.history[cury].startswith(prefix):
646 if self.history[cury].startswith(prefix):
618 self.input = self.history[self.cury]
647 self.input = self.history[self.cury]
619 self.cury = cury
648 self.cury = cury
620 return True
649 return True
621 curses.beep()
650 curses.beep()
622
651
623 def cmd_exit(self, browser):
652 def cmd_exit(self, browser):
624 browser.mode = "default"
653 browser.mode = "default"
625 return True
654 return True
626
655
627 def cmd_execute(self, browser):
656 def cmd_execute(self, browser):
628 raise NotImplementedError
657 raise NotImplementedError
629
658
630
659
631 class _CommandGoto(_CommandInput):
660 class _CommandGoto(_CommandInput):
632 def __init__(self):
661 def __init__(self):
633 _CommandInput.__init__(self, "goto object #")
662 _CommandInput.__init__(self, "goto object #")
634
663
635 def handlechar(self, browser, char):
664 def handlechar(self, browser, char):
636 # Only accept digits
665 # Only accept digits
637 if not "0" <= char <= "9":
666 if not "0" <= char <= "9":
638 curses.beep()
667 curses.beep()
639 else:
668 else:
640 return _CommandInput.handlechar(self, browser, char)
669 return _CommandInput.handlechar(self, browser, char)
641
670
642 def cmd_execute(self, browser):
671 def cmd_execute(self, browser):
643 level = browser.levels[-1]
672 level = browser.levels[-1]
644 if self.input:
673 if self.input:
645 self.dohistory()
674 self.dohistory()
646 level.moveto(level.curx, int(self.input))
675 level.moveto(level.curx, int(self.input))
647 browser.mode = "default"
676 browser.mode = "default"
648 return True
677 return True
649
678
650
679
651 class _CommandFind(_CommandInput):
680 class _CommandFind(_CommandInput):
652 def __init__(self):
681 def __init__(self):
653 _CommandInput.__init__(self, "find expression")
682 _CommandInput.__init__(self, "find expression")
654
683
655 def cmd_execute(self, browser):
684 def cmd_execute(self, browser):
656 level = browser.levels[-1]
685 level = browser.levels[-1]
657 if self.input:
686 if self.input:
658 self.dohistory()
687 self.dohistory()
659 while True:
688 while True:
660 cury = level.cury
689 cury = level.cury
661 level.moveto(level.curx, cury+1)
690 level.moveto(level.curx, cury+1)
662 if cury == level.cury:
691 if cury == level.cury:
663 curses.beep()
692 curses.beep()
664 break # hit end
693 break # hit end
665 item = level.items[level.cury].item
694 item = level.items[level.cury].item
666 try:
695 try:
667 globals = ipipe.getglobals(None)
696 globals = ipipe.getglobals(None)
668 if eval(self.input, globals, ipipe.AttrNamespace(item)):
697 if eval(self.input, globals, ipipe.AttrNamespace(item)):
669 break # found something
698 break # found something
670 except (KeyboardInterrupt, SystemExit):
699 except (KeyboardInterrupt, SystemExit):
671 raise
700 raise
672 except Exception, exc:
701 except Exception, exc:
673 browser.report(exc)
702 browser.report(exc)
674 curses.beep()
703 curses.beep()
675 break # break on error
704 break # break on error
676 browser.mode = "default"
705 browser.mode = "default"
677 return True
706 return True
678
707
679
708
680 class _CommandFindBackwards(_CommandInput):
709 class _CommandFindBackwards(_CommandInput):
681 def __init__(self):
710 def __init__(self):
682 _CommandInput.__init__(self, "find backwards expression")
711 _CommandInput.__init__(self, "find backwards expression")
683
712
684 def cmd_execute(self, browser):
713 def cmd_execute(self, browser):
685 level = browser.levels[-1]
714 level = browser.levels[-1]
686 if self.input:
715 if self.input:
687 self.dohistory()
716 self.dohistory()
688 while level.cury:
717 while level.cury:
689 level.moveto(level.curx, level.cury-1)
718 level.moveto(level.curx, level.cury-1)
690 item = level.items[level.cury].item
719 item = level.items[level.cury].item
691 try:
720 try:
692 globals = ipipe.getglobals(None)
721 globals = ipipe.getglobals(None)
693 if eval(self.input, globals, ipipe.AttrNamespace(item)):
722 if eval(self.input, globals, ipipe.AttrNamespace(item)):
694 break # found something
723 break # found something
695 except (KeyboardInterrupt, SystemExit):
724 except (KeyboardInterrupt, SystemExit):
696 raise
725 raise
697 except Exception, exc:
726 except Exception, exc:
698 browser.report(exc)
727 browser.report(exc)
699 curses.beep()
728 curses.beep()
700 break # break on error
729 break # break on error
701 else:
730 else:
702 curses.beep()
731 curses.beep()
703 browser.mode = "default"
732 browser.mode = "default"
704 return True
733 return True
705
734
706
735
707 class ibrowse(ipipe.Display):
736 class ibrowse(ipipe.Display):
708 # Show this many lines from the previous screen when paging horizontally
737 # Show this many lines from the previous screen when paging horizontally
709 pageoverlapx = 1
738 pageoverlapx = 1
710
739
711 # Show this many lines from the previous screen when paging vertically
740 # Show this many lines from the previous screen when paging vertically
712 pageoverlapy = 1
741 pageoverlapy = 1
713
742
714 # Start scrolling when the cursor is less than this number of columns
743 # Start scrolling when the cursor is less than this number of columns
715 # away from the left or right screen edge
744 # away from the left or right screen edge
716 scrollborderx = 10
745 scrollborderx = 10
717
746
718 # Start scrolling when the cursor is less than this number of lines
747 # Start scrolling when the cursor is less than this number of lines
719 # away from the top or bottom screen edge
748 # away from the top or bottom screen edge
720 scrollbordery = 5
749 scrollbordery = 5
721
750
722 # Accelerate by this factor when scrolling horizontally
751 # Accelerate by this factor when scrolling horizontally
723 acceleratex = 1.05
752 acceleratex = 1.05
724
753
725 # Accelerate by this factor when scrolling vertically
754 # Accelerate by this factor when scrolling vertically
726 acceleratey = 1.05
755 acceleratey = 1.05
727
756
728 # The maximum horizontal scroll speed
757 # The maximum horizontal scroll speed
729 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
758 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
730 maxspeedx = 0.5
759 maxspeedx = 0.5
731
760
732 # The maximum vertical scroll speed
761 # The maximum vertical scroll speed
733 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
762 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
734 maxspeedy = 0.5
763 maxspeedy = 0.5
735
764
736 # The maximum number of header lines for browser level
765 # The maximum number of header lines for browser level
737 # if the nesting is deeper, only the innermost levels are displayed
766 # if the nesting is deeper, only the innermost levels are displayed
738 maxheaders = 5
767 maxheaders = 5
739
768
740 # The approximate maximum length of a column entry
769 # The approximate maximum length of a column entry
741 maxattrlength = 200
770 maxattrlength = 200
742
771
743 # Styles for various parts of the GUI
772 # Styles for various parts of the GUI
744 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
773 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
745 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
774 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
746 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
775 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
747 style_colheader = astyle.Style.fromstr("blue:white:reverse")
776 style_colheader = astyle.Style.fromstr("blue:white:reverse")
748 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
777 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
749 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
778 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
750 style_number = astyle.Style.fromstr("blue:white:reverse")
779 style_number = astyle.Style.fromstr("blue:white:reverse")
751 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
780 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
752 style_sep = astyle.Style.fromstr("blue:black")
781 style_sep = astyle.Style.fromstr("blue:black")
753 style_data = astyle.Style.fromstr("white:black")
782 style_data = astyle.Style.fromstr("white:black")
754 style_datapad = astyle.Style.fromstr("blue:black:bold")
783 style_datapad = astyle.Style.fromstr("blue:black:bold")
755 style_footer = astyle.Style.fromstr("black:white")
784 style_footer = astyle.Style.fromstr("black:white")
756 style_report = astyle.Style.fromstr("white:black")
785 style_report = astyle.Style.fromstr("white:black")
757
786
758 # Column separator in header
787 # Column separator in header
759 headersepchar = "|"
788 headersepchar = "|"
760
789
761 # Character for padding data cell entries
790 # Character for padding data cell entries
762 datapadchar = "."
791 datapadchar = "."
763
792
764 # Column separator in data area
793 # Column separator in data area
765 datasepchar = "|"
794 datasepchar = "|"
766
795
767 # Character to use for "empty" cell (i.e. for non-existing attributes)
796 # Character to use for "empty" cell (i.e. for non-existing attributes)
768 nodatachar = "-"
797 nodatachar = "-"
769
798
770 # Prompts for modes that require keyboard input
799 # Prompts for modes that require keyboard input
771 prompts = {
800 prompts = {
772 "goto": _CommandGoto(),
801 "goto": _CommandGoto(),
773 "find": _CommandFind(),
802 "find": _CommandFind(),
774 "findbackwards": _CommandFindBackwards()
803 "findbackwards": _CommandFindBackwards()
775 }
804 }
776
805
777 # Maps curses key codes to "function" names
806 # Maps curses key codes to "function" names
778 keymap = {
807 keymap = Keymap()
779 ord("q"): "quit",
808 keymap.register("quit", "q")
780 curses.KEY_UP: "up",
809 keymap.register("up", curses.KEY_UP)
781 curses.KEY_DOWN: "down",
810 keymap.register("down", curses.KEY_DOWN)
782 curses.KEY_PPAGE: "pageup",
811 keymap.register("pageup", curses.KEY_PPAGE)
783 curses.KEY_NPAGE: "pagedown",
812 keymap.register("pagedown", curses.KEY_NPAGE)
784 curses.KEY_LEFT: "left",
813 keymap.register("left", curses.KEY_LEFT)
785 curses.KEY_RIGHT: "right",
814 keymap.register("right", curses.KEY_RIGHT)
786 curses.KEY_HOME: "home",
815 keymap.register("home", curses.KEY_HOME, "\x01")
787 1: "home",
816 keymap.register("end", curses.KEY_END, "\x05")
788 curses.KEY_END: "end",
817 keymap.register("prevattr", "<\x1b")
789 5: "end",
818 keymap.register("nextattr", ">\t")
790 ord("<"): "prevattr",
819 keymap.register("pick", "p")
791 0x1b: "prevattr", # SHIFT-TAB
820 keymap.register("pickattr", "P")
792 ord(">"): "nextattr",
821 keymap.register("pickallattrs", "C")
793 ord("\t"):"nextattr", # TAB
822 keymap.register("pickmarked", "m")
794 ord("p"): "pick",
823 keymap.register("pickmarkedattr", "M")
795 ord("P"): "pickattr",
824 keymap.register("enterdefault", "\r\n")
796 ord("C"): "pickallattrs",
825 # FIXME: What's happening here?
797 ord("m"): "pickmarked",
826 keymap.register("leave", curses.KEY_BACKSPACE, "x\x08\x7f")
798 ord("M"): "pickmarkedattr",
827 keymap.register("hideattr", "h")
799 ord("\n"): "enterdefault",
828 keymap.register("unhideattrs", "H")
800 ord("\r"): "enterdefault",
829 keymap.register("help", "?")
801 # FIXME: What's happening here?
830 keymap.register("enter", "e")
802 8: "leave",
831 keymap.register("enterattr", "E")
803 127: "leave",
832 keymap.register("detail", "d")
804 curses.KEY_BACKSPACE: "leave",
833 keymap.register("detailattr", "D")
805 ord("x"): "leave",
834 keymap.register("tooglemark", " ")
806 ord("h"): "hideattr",
835 keymap.register("markrange", "r")
807 ord("H"): "unhideattrs",
836 keymap.register("sortattrasc", "v")
808 ord("?"): "help",
837 keymap.register("sortattrdesc", "V")
809 ord("e"): "enter",
838 keymap.register("goto", "g")
810 ord("E"): "enterattr",
839 keymap.register("find", "f")
811 ord("d"): "detail",
840 keymap.register("findbackwards", "b")
812 ord("D"): "detailattr",
813 ord(" "): "tooglemark",
814 ord("r"): "markrange",
815 ord("v"): "sortattrasc",
816 ord("V"): "sortattrdesc",
817 ord("g"): "goto",
818 ord("f"): "find",
819 ord("b"): "findbackwards",
820 }
821
841
822 def __init__(self, *attrs):
842 def __init__(self, *attrs):
823 """
843 """
824 Create a new browser. If ``attrs`` is not empty, it is the list
844 Create a new browser. If ``attrs`` is not empty, it is the list
825 of attributes that will be displayed in the browser, otherwise
845 of attributes that will be displayed in the browser, otherwise
826 these will be determined by the objects on screen.
846 these will be determined by the objects on screen.
827 """
847 """
828 self.attrs = attrs
848 self.attrs = attrs
829
849
830 # Stack of browser levels
850 # Stack of browser levels
831 self.levels = []
851 self.levels = []
832 # how many colums to scroll (Changes when accelerating)
852 # how many colums to scroll (Changes when accelerating)
833 self.stepx = 1.
853 self.stepx = 1.
834
854
835 # how many rows to scroll (Changes when accelerating)
855 # how many rows to scroll (Changes when accelerating)
836 self.stepy = 1.
856 self.stepy = 1.
837
857
838 # Beep on the edges of the data area? (Will be set to ``False``
858 # Beep on the edges of the data area? (Will be set to ``False``
839 # once the cursor hits the edge of the screen, so we don't get
859 # once the cursor hits the edge of the screen, so we don't get
840 # multiple beeps).
860 # multiple beeps).
841 self._dobeep = True
861 self._dobeep = True
842
862
843 # Cache for registered ``curses`` colors and styles.
863 # Cache for registered ``curses`` colors and styles.
844 self._styles = {}
864 self._styles = {}
845 self._colors = {}
865 self._colors = {}
846 self._maxcolor = 1
866 self._maxcolor = 1
847
867
848 # How many header lines do we want to paint (the numbers of levels
868 # How many header lines do we want to paint (the numbers of levels
849 # we have, but with an upper bound)
869 # we have, but with an upper bound)
850 self._headerlines = 1
870 self._headerlines = 1
851
871
852 # Index of first header line
872 # Index of first header line
853 self._firstheaderline = 0
873 self._firstheaderline = 0
854
874
855 # curses window
875 # curses window
856 self.scr = None
876 self.scr = None
857 # report in the footer line (error, executed command etc.)
877 # report in the footer line (error, executed command etc.)
858 self._report = None
878 self._report = None
859
879
860 # value to be returned to the caller (set by commands)
880 # value to be returned to the caller (set by commands)
861 self.returnvalue = None
881 self.returnvalue = None
862
882
863 # The mode the browser is in
883 # The mode the browser is in
864 # e.g. normal browsing or entering an argument for a command
884 # e.g. normal browsing or entering an argument for a command
865 self.mode = "default"
885 self.mode = "default"
866
886
867 # set by the SIGWINCH signal handler
887 # set by the SIGWINCH signal handler
868 self.resized = False
888 self.resized = False
869
889
870 def nextstepx(self, step):
890 def nextstepx(self, step):
871 """
891 """
872 Accelerate horizontally.
892 Accelerate horizontally.
873 """
893 """
874 return max(1., min(step*self.acceleratex,
894 return max(1., min(step*self.acceleratex,
875 self.maxspeedx*self.levels[-1].mainsizex))
895 self.maxspeedx*self.levels[-1].mainsizex))
876
896
877 def nextstepy(self, step):
897 def nextstepy(self, step):
878 """
898 """
879 Accelerate vertically.
899 Accelerate vertically.
880 """
900 """
881 return max(1., min(step*self.acceleratey,
901 return max(1., min(step*self.acceleratey,
882 self.maxspeedy*self.levels[-1].mainsizey))
902 self.maxspeedy*self.levels[-1].mainsizey))
883
903
884 def getstyle(self, style):
904 def getstyle(self, style):
885 """
905 """
886 Register the ``style`` with ``curses`` or get it from the cache,
906 Register the ``style`` with ``curses`` or get it from the cache,
887 if it has been registered before.
907 if it has been registered before.
888 """
908 """
889 try:
909 try:
890 return self._styles[style.fg, style.bg, style.attrs]
910 return self._styles[style.fg, style.bg, style.attrs]
891 except KeyError:
911 except KeyError:
892 attrs = 0
912 attrs = 0
893 for b in astyle.A2CURSES:
913 for b in astyle.A2CURSES:
894 if style.attrs & b:
914 if style.attrs & b:
895 attrs |= astyle.A2CURSES[b]
915 attrs |= astyle.A2CURSES[b]
896 try:
916 try:
897 color = self._colors[style.fg, style.bg]
917 color = self._colors[style.fg, style.bg]
898 except KeyError:
918 except KeyError:
899 curses.init_pair(
919 curses.init_pair(
900 self._maxcolor,
920 self._maxcolor,
901 astyle.COLOR2CURSES[style.fg],
921 astyle.COLOR2CURSES[style.fg],
902 astyle.COLOR2CURSES[style.bg]
922 astyle.COLOR2CURSES[style.bg]
903 )
923 )
904 color = curses.color_pair(self._maxcolor)
924 color = curses.color_pair(self._maxcolor)
905 self._colors[style.fg, style.bg] = color
925 self._colors[style.fg, style.bg] = color
906 self._maxcolor += 1
926 self._maxcolor += 1
907 c = color | attrs
927 c = color | attrs
908 self._styles[style.fg, style.bg, style.attrs] = c
928 self._styles[style.fg, style.bg, style.attrs] = c
909 return c
929 return c
910
930
911 def addstr(self, y, x, begx, endx, text, style):
931 def addstr(self, y, x, begx, endx, text, style):
912 """
932 """
913 A version of ``curses.addstr()`` that can handle ``x`` coordinates
933 A version of ``curses.addstr()`` that can handle ``x`` coordinates
914 that are outside the screen.
934 that are outside the screen.
915 """
935 """
916 text2 = text[max(0, begx-x):max(0, endx-x)]
936 text2 = text[max(0, begx-x):max(0, endx-x)]
917 if text2:
937 if text2:
918 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
938 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
919 return len(text)
939 return len(text)
920
940
921 def addchr(self, y, x, begx, endx, c, l, style):
941 def addchr(self, y, x, begx, endx, c, l, style):
922 x0 = max(x, begx)
942 x0 = max(x, begx)
923 x1 = min(x+l, endx)
943 x1 = min(x+l, endx)
924 if x1>x0:
944 if x1>x0:
925 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
945 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
926 return l
946 return l
927
947
928 def _calcheaderlines(self, levels):
948 def _calcheaderlines(self, levels):
929 # Calculate how many headerlines do we have to display, if we have
949 # Calculate how many headerlines do we have to display, if we have
930 # ``levels`` browser levels
950 # ``levels`` browser levels
931 if levels is None:
951 if levels is None:
932 levels = len(self.levels)
952 levels = len(self.levels)
933 self._headerlines = min(self.maxheaders, levels)
953 self._headerlines = min(self.maxheaders, levels)
934 self._firstheaderline = levels-self._headerlines
954 self._firstheaderline = levels-self._headerlines
935
955
936 def getstylehere(self, style):
956 def getstylehere(self, style):
937 """
957 """
938 Return a style for displaying the original style ``style``
958 Return a style for displaying the original style ``style``
939 in the row the cursor is on.
959 in the row the cursor is on.
940 """
960 """
941 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
961 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
942
962
943 def report(self, msg):
963 def report(self, msg):
944 """
964 """
945 Store the message ``msg`` for display below the footer line. This
965 Store the message ``msg`` for display below the footer line. This
946 will be displayed as soon as the screen is redrawn.
966 will be displayed as soon as the screen is redrawn.
947 """
967 """
948 self._report = msg
968 self._report = msg
949
969
950 def enter(self, item, mode, *attrs):
970 def enter(self, item, mode, *attrs):
951 """
971 """
952 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
972 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
953 specified, it will be used as a fixed list of attributes to display.
973 specified, it will be used as a fixed list of attributes to display.
954 """
974 """
955 try:
975 try:
956 iterator = ipipe.xiter(item, mode)
976 iterator = ipipe.xiter(item, mode)
957 except (KeyboardInterrupt, SystemExit):
977 except (KeyboardInterrupt, SystemExit):
958 raise
978 raise
959 except Exception, exc:
979 except Exception, exc:
960 curses.beep()
980 curses.beep()
961 self.report(exc)
981 self.report(exc)
962 else:
982 else:
963 self._calcheaderlines(len(self.levels)+1)
983 self._calcheaderlines(len(self.levels)+1)
964 level = _BrowserLevel(
984 level = _BrowserLevel(
965 self,
985 self,
966 item,
986 item,
967 iterator,
987 iterator,
968 self.scrsizey-1-self._headerlines-2,
988 self.scrsizey-1-self._headerlines-2,
969 *attrs
989 *attrs
970 )
990 )
971 self.levels.append(level)
991 self.levels.append(level)
972
992
973 def startkeyboardinput(self, mode):
993 def startkeyboardinput(self, mode):
974 """
994 """
975 Enter mode ``mode``, which requires keyboard input.
995 Enter mode ``mode``, which requires keyboard input.
976 """
996 """
977 self.mode = mode
997 self.mode = mode
978 self.prompts[mode].start()
998 self.prompts[mode].start()
979
999
980 def keylabel(self, keycode):
1000 def keylabel(self, keycode):
981 """
1001 """
982 Return a pretty name for the ``curses`` key ``keycode`` (used in the
1002 Return a pretty name for the ``curses`` key ``keycode`` (used in the
983 help screen and in reports about unassigned keys).
1003 help screen and in reports about unassigned keys).
984 """
1004 """
985 if keycode <= 0xff:
1005 if keycode <= 0xff:
986 specialsnames = {
1006 specialsnames = {
987 ord("\n"): "RETURN",
1007 ord("\n"): "RETURN",
988 ord(" "): "SPACE",
1008 ord(" "): "SPACE",
989 ord("\t"): "TAB",
1009 ord("\t"): "TAB",
990 ord("\x7f"): "DELETE",
1010 ord("\x7f"): "DELETE",
991 ord("\x08"): "BACKSPACE",
1011 ord("\x08"): "BACKSPACE",
992 }
1012 }
993 if keycode in specialsnames:
1013 if keycode in specialsnames:
994 return specialsnames[keycode]
1014 return specialsnames[keycode]
995 elif 0x00 < keycode < 0x20:
1015 elif 0x00 < keycode < 0x20:
996 return "CTRL-%s" % chr(keycode + 64)
1016 return "CTRL-%s" % chr(keycode + 64)
997 return repr(chr(keycode))
1017 return repr(chr(keycode))
998 for name in dir(curses):
1018 for name in dir(curses):
999 if name.startswith("KEY_") and getattr(curses, name) == keycode:
1019 if name.startswith("KEY_") and getattr(curses, name) == keycode:
1000 return name
1020 return name
1001 return str(keycode)
1021 return str(keycode)
1002
1022
1003 def beep(self, force=False):
1023 def beep(self, force=False):
1004 if force or self._dobeep:
1024 if force or self._dobeep:
1005 curses.beep()
1025 curses.beep()
1006 # don't beep again (as long as the same key is pressed)
1026 # don't beep again (as long as the same key is pressed)
1007 self._dobeep = False
1027 self._dobeep = False
1008
1028
1009 def cmd_quit(self):
1029 def cmd_quit(self):
1010 self.returnvalue = None
1030 self.returnvalue = None
1011 return True
1031 return True
1012
1032
1013 def cmd_up(self):
1033 def cmd_up(self):
1014 level = self.levels[-1]
1034 level = self.levels[-1]
1015 self.report("up")
1035 self.report("up")
1016 level.moveto(level.curx, level.cury-self.stepy)
1036 level.moveto(level.curx, level.cury-self.stepy)
1017
1037
1018 def cmd_down(self):
1038 def cmd_down(self):
1019 level = self.levels[-1]
1039 level = self.levels[-1]
1020 self.report("down")
1040 self.report("down")
1021 level.moveto(level.curx, level.cury+self.stepy)
1041 level.moveto(level.curx, level.cury+self.stepy)
1022
1042
1023 def cmd_pageup(self):
1043 def cmd_pageup(self):
1024 level = self.levels[-1]
1044 level = self.levels[-1]
1025 self.report("page up")
1045 self.report("page up")
1026 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
1046 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
1027
1047
1028 def cmd_pagedown(self):
1048 def cmd_pagedown(self):
1029 level = self.levels[-1]
1049 level = self.levels[-1]
1030 self.report("page down")
1050 self.report("page down")
1031 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
1051 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
1032
1052
1033 def cmd_left(self):
1053 def cmd_left(self):
1034 level = self.levels[-1]
1054 level = self.levels[-1]
1035 self.report("left")
1055 self.report("left")
1036 level.moveto(level.curx-self.stepx, level.cury)
1056 level.moveto(level.curx-self.stepx, level.cury)
1037
1057
1038 def cmd_right(self):
1058 def cmd_right(self):
1039 level = self.levels[-1]
1059 level = self.levels[-1]
1040 self.report("right")
1060 self.report("right")
1041 level.moveto(level.curx+self.stepx, level.cury)
1061 level.moveto(level.curx+self.stepx, level.cury)
1042
1062
1043 def cmd_home(self):
1063 def cmd_home(self):
1044 level = self.levels[-1]
1064 level = self.levels[-1]
1045 self.report("home")
1065 self.report("home")
1046 level.moveto(0, level.cury)
1066 level.moveto(0, level.cury)
1047
1067
1048 def cmd_end(self):
1068 def cmd_end(self):
1049 level = self.levels[-1]
1069 level = self.levels[-1]
1050 self.report("end")
1070 self.report("end")
1051 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
1071 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
1052
1072
1053 def cmd_prevattr(self):
1073 def cmd_prevattr(self):
1054 level = self.levels[-1]
1074 level = self.levels[-1]
1055 if level.displayattr[0] is None or level.displayattr[0] == 0:
1075 if level.displayattr[0] is None or level.displayattr[0] == 0:
1056 self.beep()
1076 self.beep()
1057 else:
1077 else:
1058 self.report("prevattr")
1078 self.report("prevattr")
1059 pos = 0
1079 pos = 0
1060 for (i, attrname) in enumerate(level.displayattrs):
1080 for (i, attrname) in enumerate(level.displayattrs):
1061 if i == level.displayattr[0]-1:
1081 if i == level.displayattr[0]-1:
1062 break
1082 break
1063 pos += level.colwidths[attrname] + 1
1083 pos += level.colwidths[attrname] + 1
1064 level.moveto(pos, level.cury)
1084 level.moveto(pos, level.cury)
1065
1085
1066 def cmd_nextattr(self):
1086 def cmd_nextattr(self):
1067 level = self.levels[-1]
1087 level = self.levels[-1]
1068 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1088 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1069 self.beep()
1089 self.beep()
1070 else:
1090 else:
1071 self.report("nextattr")
1091 self.report("nextattr")
1072 pos = 0
1092 pos = 0
1073 for (i, attrname) in enumerate(level.displayattrs):
1093 for (i, attrname) in enumerate(level.displayattrs):
1074 if i == level.displayattr[0]+1:
1094 if i == level.displayattr[0]+1:
1075 break
1095 break
1076 pos += level.colwidths[attrname] + 1
1096 pos += level.colwidths[attrname] + 1
1077 level.moveto(pos, level.cury)
1097 level.moveto(pos, level.cury)
1078
1098
1079 def cmd_pick(self):
1099 def cmd_pick(self):
1080 level = self.levels[-1]
1100 level = self.levels[-1]
1081 self.returnvalue = level.items[level.cury].item
1101 self.returnvalue = level.items[level.cury].item
1082 return True
1102 return True
1083
1103
1084 def cmd_pickattr(self):
1104 def cmd_pickattr(self):
1085 level = self.levels[-1]
1105 level = self.levels[-1]
1086 attrname = level.displayattr[1]
1106 attrname = level.displayattr[1]
1087 if attrname is ipipe.noitem:
1107 if attrname is ipipe.noitem:
1088 curses.beep()
1108 curses.beep()
1089 self.report(AttributeError(ipipe._attrname(attrname)))
1109 self.report(AttributeError(ipipe._attrname(attrname)))
1090 return
1110 return
1091 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1111 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1092 if attr is ipipe.noitem:
1112 if attr is ipipe.noitem:
1093 curses.beep()
1113 curses.beep()
1094 self.report(AttributeError(ipipe._attrname(attrname)))
1114 self.report(AttributeError(ipipe._attrname(attrname)))
1095 else:
1115 else:
1096 self.returnvalue = attr
1116 self.returnvalue = attr
1097 return True
1117 return True
1098
1118
1099 def cmd_pickallattrs(self):
1119 def cmd_pickallattrs(self):
1100 level = self.levels[-1]
1120 level = self.levels[-1]
1101 attrname = level.displayattr[1]
1121 attrname = level.displayattr[1]
1102 if attrname is ipipe.noitem:
1122 if attrname is ipipe.noitem:
1103 curses.beep()
1123 curses.beep()
1104 self.report(AttributeError(ipipe._attrname(attrname)))
1124 self.report(AttributeError(ipipe._attrname(attrname)))
1105 return
1125 return
1106 result = []
1126 result = []
1107 for cache in level.items:
1127 for cache in level.items:
1108 attr = ipipe._getattr(cache.item, attrname)
1128 attr = ipipe._getattr(cache.item, attrname)
1109 if attr is not ipipe.noitem:
1129 if attr is not ipipe.noitem:
1110 result.append(attr)
1130 result.append(attr)
1111 self.returnvalue = result
1131 self.returnvalue = result
1112 return True
1132 return True
1113
1133
1114 def cmd_pickmarked(self):
1134 def cmd_pickmarked(self):
1115 level = self.levels[-1]
1135 level = self.levels[-1]
1116 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1136 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1117 return True
1137 return True
1118
1138
1119 def cmd_pickmarkedattr(self):
1139 def cmd_pickmarkedattr(self):
1120 level = self.levels[-1]
1140 level = self.levels[-1]
1121 attrname = level.displayattr[1]
1141 attrname = level.displayattr[1]
1122 if attrname is ipipe.noitem:
1142 if attrname is ipipe.noitem:
1123 curses.beep()
1143 curses.beep()
1124 self.report(AttributeError(ipipe._attrname(attrname)))
1144 self.report(AttributeError(ipipe._attrname(attrname)))
1125 return
1145 return
1126 result = []
1146 result = []
1127 for cache in level.items:
1147 for cache in level.items:
1128 if cache.marked:
1148 if cache.marked:
1129 attr = ipipe._getattr(cache.item, attrname)
1149 attr = ipipe._getattr(cache.item, attrname)
1130 if attr is not ipipe.noitem:
1150 if attr is not ipipe.noitem:
1131 result.append(attr)
1151 result.append(attr)
1132 self.returnvalue = result
1152 self.returnvalue = result
1133 return True
1153 return True
1134
1154
1135 def cmd_markrange(self):
1155 def cmd_markrange(self):
1136 level = self.levels[-1]
1156 level = self.levels[-1]
1137 self.report("markrange")
1157 self.report("markrange")
1138 start = None
1158 start = None
1139 if level.items:
1159 if level.items:
1140 for i in xrange(level.cury, -1, -1):
1160 for i in xrange(level.cury, -1, -1):
1141 if level.items[i].marked:
1161 if level.items[i].marked:
1142 start = i
1162 start = i
1143 break
1163 break
1144 if start is None:
1164 if start is None:
1145 self.report(CommandError("no mark before cursor"))
1165 self.report(CommandError("no mark before cursor"))
1146 curses.beep()
1166 curses.beep()
1147 else:
1167 else:
1148 for i in xrange(start, level.cury+1):
1168 for i in xrange(start, level.cury+1):
1149 cache = level.items[i]
1169 cache = level.items[i]
1150 if not cache.marked:
1170 if not cache.marked:
1151 cache.marked = True
1171 cache.marked = True
1152 level.marked += 1
1172 level.marked += 1
1153
1173
1154 def cmd_enterdefault(self):
1174 def cmd_enterdefault(self):
1155 level = self.levels[-1]
1175 level = self.levels[-1]
1156 try:
1176 try:
1157 item = level.items[level.cury].item
1177 item = level.items[level.cury].item
1158 except IndexError:
1178 except IndexError:
1159 self.report(CommandError("No object"))
1179 self.report(CommandError("No object"))
1160 curses.beep()
1180 curses.beep()
1161 else:
1181 else:
1162 self.report("entering object (default mode)...")
1182 self.report("entering object (default mode)...")
1163 self.enter(item, "default")
1183 self.enter(item, "default")
1164
1184
1165 def cmd_leave(self):
1185 def cmd_leave(self):
1166 self.report("leave")
1186 self.report("leave")
1167 if len(self.levels) > 1:
1187 if len(self.levels) > 1:
1168 self._calcheaderlines(len(self.levels)-1)
1188 self._calcheaderlines(len(self.levels)-1)
1169 self.levels.pop(-1)
1189 self.levels.pop(-1)
1170 else:
1190 else:
1171 self.report(CommandError("This is the last level"))
1191 self.report(CommandError("This is the last level"))
1172 curses.beep()
1192 curses.beep()
1173
1193
1174 def cmd_enter(self):
1194 def cmd_enter(self):
1175 level = self.levels[-1]
1195 level = self.levels[-1]
1176 try:
1196 try:
1177 item = level.items[level.cury].item
1197 item = level.items[level.cury].item
1178 except IndexError:
1198 except IndexError:
1179 self.report(CommandError("No object"))
1199 self.report(CommandError("No object"))
1180 curses.beep()
1200 curses.beep()
1181 else:
1201 else:
1182 self.report("entering object...")
1202 self.report("entering object...")
1183 self.enter(item, None)
1203 self.enter(item, None)
1184
1204
1185 def cmd_enterattr(self):
1205 def cmd_enterattr(self):
1186 level = self.levels[-1]
1206 level = self.levels[-1]
1187 attrname = level.displayattr[1]
1207 attrname = level.displayattr[1]
1188 if attrname is ipipe.noitem:
1208 if attrname is ipipe.noitem:
1189 curses.beep()
1209 curses.beep()
1190 self.report(AttributeError(ipipe._attrname(attrname)))
1210 self.report(AttributeError(ipipe._attrname(attrname)))
1191 return
1211 return
1192 try:
1212 try:
1193 item = level.items[level.cury].item
1213 item = level.items[level.cury].item
1194 except IndexError:
1214 except IndexError:
1195 self.report(CommandError("No object"))
1215 self.report(CommandError("No object"))
1196 curses.beep()
1216 curses.beep()
1197 else:
1217 else:
1198 attr = ipipe._getattr(item, attrname)
1218 attr = ipipe._getattr(item, attrname)
1199 if attr is ipipe.noitem:
1219 if attr is ipipe.noitem:
1200 self.report(AttributeError(ipipe._attrname(attrname)))
1220 self.report(AttributeError(ipipe._attrname(attrname)))
1201 else:
1221 else:
1202 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1222 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1203 self.enter(attr, None)
1223 self.enter(attr, None)
1204
1224
1205 def cmd_detail(self):
1225 def cmd_detail(self):
1206 level = self.levels[-1]
1226 level = self.levels[-1]
1207 try:
1227 try:
1208 item = level.items[level.cury].item
1228 item = level.items[level.cury].item
1209 except IndexError:
1229 except IndexError:
1210 self.report(CommandError("No object"))
1230 self.report(CommandError("No object"))
1211 curses.beep()
1231 curses.beep()
1212 else:
1232 else:
1213 self.report("entering detail view for object...")
1233 self.report("entering detail view for object...")
1214 self.enter(item, "detail")
1234 self.enter(item, "detail")
1215
1235
1216 def cmd_detailattr(self):
1236 def cmd_detailattr(self):
1217 level = self.levels[-1]
1237 level = self.levels[-1]
1218 attrname = level.displayattr[1]
1238 attrname = level.displayattr[1]
1219 if attrname is ipipe.noitem:
1239 if attrname is ipipe.noitem:
1220 curses.beep()
1240 curses.beep()
1221 self.report(AttributeError(ipipe._attrname(attrname)))
1241 self.report(AttributeError(ipipe._attrname(attrname)))
1222 return
1242 return
1223 try:
1243 try:
1224 item = level.items[level.cury].item
1244 item = level.items[level.cury].item
1225 except IndexError:
1245 except IndexError:
1226 self.report(CommandError("No object"))
1246 self.report(CommandError("No object"))
1227 curses.beep()
1247 curses.beep()
1228 else:
1248 else:
1229 attr = ipipe._getattr(item, attrname)
1249 attr = ipipe._getattr(item, attrname)
1230 if attr is ipipe.noitem:
1250 if attr is ipipe.noitem:
1231 self.report(AttributeError(ipipe._attrname(attrname)))
1251 self.report(AttributeError(ipipe._attrname(attrname)))
1232 else:
1252 else:
1233 self.report("entering detail view for attribute...")
1253 self.report("entering detail view for attribute...")
1234 self.enter(attr, "detail")
1254 self.enter(attr, "detail")
1235
1255
1236 def cmd_tooglemark(self):
1256 def cmd_tooglemark(self):
1237 level = self.levels[-1]
1257 level = self.levels[-1]
1238 self.report("toggle mark")
1258 self.report("toggle mark")
1239 try:
1259 try:
1240 item = level.items[level.cury]
1260 item = level.items[level.cury]
1241 except IndexError: # no items?
1261 except IndexError: # no items?
1242 pass
1262 pass
1243 else:
1263 else:
1244 if item.marked:
1264 if item.marked:
1245 item.marked = False
1265 item.marked = False
1246 level.marked -= 1
1266 level.marked -= 1
1247 else:
1267 else:
1248 item.marked = True
1268 item.marked = True
1249 level.marked += 1
1269 level.marked += 1
1250
1270
1251 def cmd_sortattrasc(self):
1271 def cmd_sortattrasc(self):
1252 level = self.levels[-1]
1272 level = self.levels[-1]
1253 attrname = level.displayattr[1]
1273 attrname = level.displayattr[1]
1254 if attrname is ipipe.noitem:
1274 if attrname is ipipe.noitem:
1255 curses.beep()
1275 curses.beep()
1256 self.report(AttributeError(ipipe._attrname(attrname)))
1276 self.report(AttributeError(ipipe._attrname(attrname)))
1257 return
1277 return
1258 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1278 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1259 def key(item):
1279 def key(item):
1260 try:
1280 try:
1261 return ipipe._getattr(item, attrname, None)
1281 return ipipe._getattr(item, attrname, None)
1262 except (KeyboardInterrupt, SystemExit):
1282 except (KeyboardInterrupt, SystemExit):
1263 raise
1283 raise
1264 except Exception:
1284 except Exception:
1265 return None
1285 return None
1266 level.sort(key)
1286 level.sort(key)
1267
1287
1268 def cmd_sortattrdesc(self):
1288 def cmd_sortattrdesc(self):
1269 level = self.levels[-1]
1289 level = self.levels[-1]
1270 attrname = level.displayattr[1]
1290 attrname = level.displayattr[1]
1271 if attrname is ipipe.noitem:
1291 if attrname is ipipe.noitem:
1272 curses.beep()
1292 curses.beep()
1273 self.report(AttributeError(ipipe._attrname(attrname)))
1293 self.report(AttributeError(ipipe._attrname(attrname)))
1274 return
1294 return
1275 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1295 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1276 def key(item):
1296 def key(item):
1277 try:
1297 try:
1278 return ipipe._getattr(item, attrname, None)
1298 return ipipe._getattr(item, attrname, None)
1279 except (KeyboardInterrupt, SystemExit):
1299 except (KeyboardInterrupt, SystemExit):
1280 raise
1300 raise
1281 except Exception:
1301 except Exception:
1282 return None
1302 return None
1283 level.sort(key, reverse=True)
1303 level.sort(key, reverse=True)
1284
1304
1285 def cmd_goto(self):
1305 def cmd_goto(self):
1286 self.startkeyboardinput("goto")
1306 self.startkeyboardinput("goto")
1287
1307
1288 def cmd_find(self):
1308 def cmd_find(self):
1289 self.startkeyboardinput("find")
1309 self.startkeyboardinput("find")
1290
1310
1291 def cmd_findbackwards(self):
1311 def cmd_findbackwards(self):
1292 self.startkeyboardinput("findbackwards")
1312 self.startkeyboardinput("findbackwards")
1293
1313
1294 def cmd_help(self):
1314 def cmd_help(self):
1295 """
1315 """
1296 The help command
1316 The help command
1297 """
1317 """
1298 for level in self.levels:
1318 for level in self.levels:
1299 if isinstance(level.input, _BrowserHelp):
1319 if isinstance(level.input, _BrowserHelp):
1300 curses.beep()
1320 curses.beep()
1301 self.report(CommandError("help already active"))
1321 self.report(CommandError("help already active"))
1302 return
1322 return
1303
1323
1304 self.enter(_BrowserHelp(self), "default")
1324 self.enter(_BrowserHelp(self), "default")
1305
1325
1306 def sigwinchhandler(self, signal, frame):
1326 def sigwinchhandler(self, signal, frame):
1307 self.resized = True
1327 self.resized = True
1308
1328
1309 def cmd_hideattr(self):
1329 def cmd_hideattr(self):
1310 level = self.levels[-1]
1330 level = self.levels[-1]
1311 if level.displayattr[0] is None:
1331 if level.displayattr[0] is None:
1312 self.beep()
1332 self.beep()
1313 else:
1333 else:
1314 self.report("hideattr")
1334 self.report("hideattr")
1315 level.hiddenattrs.add(level.displayattr[1])
1335 level.hiddenattrs.add(level.displayattr[1])
1316 level.moveto(level.curx, level.cury, refresh=True)
1336 level.moveto(level.curx, level.cury, refresh=True)
1317
1337
1318 def cmd_unhideattrs(self):
1338 def cmd_unhideattrs(self):
1319 level = self.levels[-1]
1339 level = self.levels[-1]
1320 self.report("unhideattrs")
1340 self.report("unhideattrs")
1321 level.hiddenattrs.clear()
1341 level.hiddenattrs.clear()
1322 level.moveto(level.curx, level.cury, refresh=True)
1342 level.moveto(level.curx, level.cury, refresh=True)
1323
1343
1324 def _dodisplay(self, scr):
1344 def _dodisplay(self, scr):
1325 """
1345 """
1326 This method is the workhorse of the browser. It handles screen
1346 This method is the workhorse of the browser. It handles screen
1327 drawing and the keyboard.
1347 drawing and the keyboard.
1328 """
1348 """
1329 self.scr = scr
1349 self.scr = scr
1330 curses.halfdelay(1)
1350 curses.halfdelay(1)
1331 footery = 2
1351 footery = 2
1332
1352
1333 keys = []
1353 keys = []
1334 for (key, cmd) in self.keymap.iteritems():
1354 quitkey = self.keymap.findkey("quit", None)
1335 if cmd == "quit":
1355 if quitkey is not None:
1336 keys.append("%s=%s" % (self.keylabel(key), cmd))
1356 keys.append("%s=quit" % self.keylabel(quitkey))
1337 for (key, cmd) in self.keymap.iteritems():
1357 helpkey = self.keymap.findkey("help", None)
1338 if cmd == "help":
1358 if helpkey is not None:
1339 keys.append("%s=%s" % (self.keylabel(key), cmd))
1359 keys.append("%s=help" % self.keylabel(helpkey))
1340 helpmsg = " | %s" % " ".join(keys)
1360 helpmsg = " | %s" % " ".join(keys)
1341
1361
1342 scr.clear()
1362 scr.clear()
1343 msg = "Fetching first batch of objects..."
1363 msg = "Fetching first batch of objects..."
1344 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1364 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1345 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1365 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1346 scr.refresh()
1366 scr.refresh()
1347
1367
1348 lastc = -1
1368 lastc = -1
1349
1369
1350 self.levels = []
1370 self.levels = []
1351 # enter the first level
1371 # enter the first level
1352 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1372 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1353
1373
1354 self._calcheaderlines(None)
1374 self._calcheaderlines(None)
1355
1375
1356 while True:
1376 while True:
1357 level = self.levels[-1]
1377 level = self.levels[-1]
1358 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1378 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1359 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1379 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1360
1380
1361 # Paint object header
1381 # Paint object header
1362 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1382 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1363 lv = self.levels[i]
1383 lv = self.levels[i]
1364 posx = 0
1384 posx = 0
1365 posy = i-self._firstheaderline
1385 posy = i-self._firstheaderline
1366 endx = self.scrsizex
1386 endx = self.scrsizex
1367 if i: # not the first level
1387 if i: # not the first level
1368 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1388 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1369 if not self.levels[i-1].exhausted:
1389 if not self.levels[i-1].exhausted:
1370 msg += "+"
1390 msg += "+"
1371 msg += ") "
1391 msg += ") "
1372 endx -= len(msg)+1
1392 endx -= len(msg)+1
1373 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1393 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1374 for (style, text) in lv.header:
1394 for (style, text) in lv.header:
1375 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1395 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1376 if posx >= endx:
1396 if posx >= endx:
1377 break
1397 break
1378 if i:
1398 if i:
1379 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1399 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1380 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1400 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1381
1401
1382 if not level.items:
1402 if not level.items:
1383 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1403 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1384 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1404 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1385 scr.clrtobot()
1405 scr.clrtobot()
1386 else:
1406 else:
1387 # Paint column headers
1407 # Paint column headers
1388 scr.move(self._headerlines, 0)
1408 scr.move(self._headerlines, 0)
1389 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1409 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1390 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1410 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1391 begx = level.numbersizex+3
1411 begx = level.numbersizex+3
1392 posx = begx-level.datastartx
1412 posx = begx-level.datastartx
1393 for attrname in level.displayattrs:
1413 for attrname in level.displayattrs:
1394 strattrname = ipipe._attrname(attrname)
1414 strattrname = ipipe._attrname(attrname)
1395 cwidth = level.colwidths[attrname]
1415 cwidth = level.colwidths[attrname]
1396 header = strattrname.ljust(cwidth)
1416 header = strattrname.ljust(cwidth)
1397 if attrname == level.displayattr[1]:
1417 if attrname == level.displayattr[1]:
1398 style = self.style_colheaderhere
1418 style = self.style_colheaderhere
1399 else:
1419 else:
1400 style = self.style_colheader
1420 style = self.style_colheader
1401 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1421 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1402 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1422 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1403 if posx >= self.scrsizex:
1423 if posx >= self.scrsizex:
1404 break
1424 break
1405 else:
1425 else:
1406 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1426 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1407
1427
1408 # Paint rows
1428 # Paint rows
1409 posy = self._headerlines+1+level.datastarty
1429 posy = self._headerlines+1+level.datastarty
1410 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1430 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1411 cache = level.items[i]
1431 cache = level.items[i]
1412 if i == level.cury:
1432 if i == level.cury:
1413 style = self.style_numberhere
1433 style = self.style_numberhere
1414 else:
1434 else:
1415 style = self.style_number
1435 style = self.style_number
1416
1436
1417 posy = self._headerlines+1+i-level.datastarty
1437 posy = self._headerlines+1+i-level.datastarty
1418 posx = begx-level.datastartx
1438 posx = begx-level.datastartx
1419
1439
1420 scr.move(posy, 0)
1440 scr.move(posy, 0)
1421 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1441 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1422 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1442 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1423
1443
1424 for attrname in level.displayattrs:
1444 for attrname in level.displayattrs:
1425 cwidth = level.colwidths[attrname]
1445 cwidth = level.colwidths[attrname]
1426 try:
1446 try:
1427 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1447 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1428 except KeyError:
1448 except KeyError:
1429 align = 2
1449 align = 2
1430 style = astyle.style_nodata
1450 style = astyle.style_nodata
1431 padstyle = self.style_datapad
1451 padstyle = self.style_datapad
1432 sepstyle = self.style_sep
1452 sepstyle = self.style_sep
1433 if i == level.cury:
1453 if i == level.cury:
1434 padstyle = self.getstylehere(padstyle)
1454 padstyle = self.getstylehere(padstyle)
1435 sepstyle = self.getstylehere(sepstyle)
1455 sepstyle = self.getstylehere(sepstyle)
1436 if align == 2:
1456 if align == 2:
1437 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1457 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1438 else:
1458 else:
1439 if align == 1:
1459 if align == 1:
1440 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1460 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1441 elif align == 0:
1461 elif align == 0:
1442 pad1 = (cwidth-length)//2
1462 pad1 = (cwidth-length)//2
1443 pad2 = cwidth-length-len(pad1)
1463 pad2 = cwidth-length-len(pad1)
1444 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1464 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1445 for (style, text) in parts:
1465 for (style, text) in parts:
1446 if i == level.cury:
1466 if i == level.cury:
1447 style = self.getstylehere(style)
1467 style = self.getstylehere(style)
1448 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1468 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1449 if posx >= self.scrsizex:
1469 if posx >= self.scrsizex:
1450 break
1470 break
1451 if align == -1:
1471 if align == -1:
1452 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1472 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1453 elif align == 0:
1473 elif align == 0:
1454 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1474 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1455 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1475 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1456 else:
1476 else:
1457 scr.clrtoeol()
1477 scr.clrtoeol()
1458
1478
1459 # Add blank row headers for the rest of the screen
1479 # Add blank row headers for the rest of the screen
1460 for posy in xrange(posy+1, self.scrsizey-2):
1480 for posy in xrange(posy+1, self.scrsizey-2):
1461 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1481 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1462 scr.clrtoeol()
1482 scr.clrtoeol()
1463
1483
1464 posy = self.scrsizey-footery
1484 posy = self.scrsizey-footery
1465 # Display footer
1485 # Display footer
1466 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1486 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1467
1487
1468 if level.exhausted:
1488 if level.exhausted:
1469 flag = ""
1489 flag = ""
1470 else:
1490 else:
1471 flag = "+"
1491 flag = "+"
1472
1492
1473 endx = self.scrsizex-len(helpmsg)-1
1493 endx = self.scrsizex-len(helpmsg)-1
1474 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1494 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1475
1495
1476 posx = 0
1496 posx = 0
1477 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1497 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1478 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1498 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1479 try:
1499 try:
1480 item = level.items[level.cury].item
1500 item = level.items[level.cury].item
1481 except IndexError: # empty
1501 except IndexError: # empty
1482 pass
1502 pass
1483 else:
1503 else:
1484 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1504 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1485 if not isinstance(nostyle, int):
1505 if not isinstance(nostyle, int):
1486 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1506 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1487 if posx >= endx:
1507 if posx >= endx:
1488 break
1508 break
1489
1509
1490 attrstyle = [(astyle.style_default, "no attribute")]
1510 attrstyle = [(astyle.style_default, "no attribute")]
1491 attrname = level.displayattr[1]
1511 attrname = level.displayattr[1]
1492 if attrname is not ipipe.noitem and attrname is not None:
1512 if attrname is not ipipe.noitem and attrname is not None:
1493 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1513 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1494 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1514 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1495 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1515 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1496 try:
1516 try:
1497 attr = ipipe._getattr(item, attrname)
1517 attr = ipipe._getattr(item, attrname)
1498 except (SystemExit, KeyboardInterrupt):
1518 except (SystemExit, KeyboardInterrupt):
1499 raise
1519 raise
1500 except Exception, exc:
1520 except Exception, exc:
1501 attr = exc
1521 attr = exc
1502 if attr is not ipipe.noitem:
1522 if attr is not ipipe.noitem:
1503 attrstyle = ipipe.xrepr(attr, "footer")
1523 attrstyle = ipipe.xrepr(attr, "footer")
1504 for (nostyle, text) in attrstyle:
1524 for (nostyle, text) in attrstyle:
1505 if not isinstance(nostyle, int):
1525 if not isinstance(nostyle, int):
1506 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1526 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1507 if posx >= endx:
1527 if posx >= endx:
1508 break
1528 break
1509
1529
1510 try:
1530 try:
1511 # Display input prompt
1531 # Display input prompt
1512 if self.mode in self.prompts:
1532 if self.mode in self.prompts:
1513 history = self.prompts[self.mode]
1533 history = self.prompts[self.mode]
1514 posx = 0
1534 posx = 0
1515 posy = self.scrsizey-1
1535 posy = self.scrsizey-1
1516 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1536 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1517 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1537 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1518 if history.cury==-1:
1538 if history.cury==-1:
1519 text = "new"
1539 text = "new"
1520 else:
1540 else:
1521 text = str(history.cury+1)
1541 text = str(history.cury+1)
1522 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1542 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1523 if history.history:
1543 if history.history:
1524 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1544 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1525 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1545 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1526 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1546 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1527 inputstartx = posx
1547 inputstartx = posx
1528 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1548 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1529 # Display report
1549 # Display report
1530 else:
1550 else:
1531 if self._report is not None:
1551 if self._report is not None:
1532 if isinstance(self._report, Exception):
1552 if isinstance(self._report, Exception):
1533 style = self.getstyle(astyle.style_error)
1553 style = self.getstyle(astyle.style_error)
1534 if self._report.__class__.__module__ == "exceptions":
1554 if self._report.__class__.__module__ == "exceptions":
1535 msg = "%s: %s" % \
1555 msg = "%s: %s" % \
1536 (self._report.__class__.__name__, self._report)
1556 (self._report.__class__.__name__, self._report)
1537 else:
1557 else:
1538 msg = "%s.%s: %s" % \
1558 msg = "%s.%s: %s" % \
1539 (self._report.__class__.__module__,
1559 (self._report.__class__.__module__,
1540 self._report.__class__.__name__, self._report)
1560 self._report.__class__.__name__, self._report)
1541 else:
1561 else:
1542 style = self.getstyle(self.style_report)
1562 style = self.getstyle(self.style_report)
1543 msg = self._report
1563 msg = self._report
1544 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1564 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1545 self._report = None
1565 self._report = None
1546 else:
1566 else:
1547 scr.move(self.scrsizey-1, 0)
1567 scr.move(self.scrsizey-1, 0)
1548 except curses.error:
1568 except curses.error:
1549 # Protect against errors from writing to the last line
1569 # Protect against errors from writing to the last line
1550 pass
1570 pass
1551 scr.clrtoeol()
1571 scr.clrtoeol()
1552
1572
1553 # Position cursor
1573 # Position cursor
1554 if self.mode in self.prompts:
1574 if self.mode in self.prompts:
1555 history = self.prompts[self.mode]
1575 history = self.prompts[self.mode]
1556 scr.move(self.scrsizey-1, inputstartx+history.curx)
1576 scr.move(self.scrsizey-1, inputstartx+history.curx)
1557 else:
1577 else:
1558 scr.move(
1578 scr.move(
1559 1+self._headerlines+level.cury-level.datastarty,
1579 1+self._headerlines+level.cury-level.datastarty,
1560 level.numbersizex+3+level.curx-level.datastartx
1580 level.numbersizex+3+level.curx-level.datastartx
1561 )
1581 )
1562 scr.refresh()
1582 scr.refresh()
1563
1583
1564 # Check keyboard
1584 # Check keyboard
1565 while True:
1585 while True:
1566 c = scr.getch()
1586 c = scr.getch()
1567 if self.resized:
1587 if self.resized:
1568 size = fcntl.ioctl(0, tty.TIOCGWINSZ, "12345678")
1588 size = fcntl.ioctl(0, tty.TIOCGWINSZ, "12345678")
1569 size = struct.unpack("4H", size)
1589 size = struct.unpack("4H", size)
1570 oldsize = scr.getmaxyx()
1590 oldsize = scr.getmaxyx()
1571 scr.erase()
1591 scr.erase()
1572 curses.resize_term(size[0], size[1])
1592 curses.resize_term(size[0], size[1])
1573 newsize = scr.getmaxyx()
1593 newsize = scr.getmaxyx()
1574 scr.erase()
1594 scr.erase()
1575 for l in self.levels:
1595 for l in self.levels:
1576 l.mainsizey += newsize[0]-oldsize[0]
1596 l.mainsizey += newsize[0]-oldsize[0]
1577 l.moveto(l.curx, l.cury, refresh=True)
1597 l.moveto(l.curx, l.cury, refresh=True)
1578 scr.refresh()
1598 scr.refresh()
1579 self.resized = False
1599 self.resized = False
1580 break # Redisplay
1600 break # Redisplay
1581 if self.mode in self.prompts:
1601 if self.mode in self.prompts:
1582 if self.prompts[self.mode].handlekey(self, c):
1602 if self.prompts[self.mode].handlekey(self, c):
1583 break # Redisplay
1603 break # Redisplay
1584 else:
1604 else:
1585 # if no key is pressed slow down and beep again
1605 # if no key is pressed slow down and beep again
1586 if c == -1:
1606 if c == -1:
1587 self.stepx = 1.
1607 self.stepx = 1.
1588 self.stepy = 1.
1608 self.stepy = 1.
1589 self._dobeep = True
1609 self._dobeep = True
1590 else:
1610 else:
1591 # if a different key was pressed slow down and beep too
1611 # if a different key was pressed slow down and beep too
1592 if c != lastc:
1612 if c != lastc:
1593 lastc = c
1613 lastc = c
1594 self.stepx = 1.
1614 self.stepx = 1.
1595 self.stepy = 1.
1615 self.stepy = 1.
1596 self._dobeep = True
1616 self._dobeep = True
1597 cmdname = self.keymap.get(c, None)
1617 cmdname = self.keymap.get(c, None)
1598 if cmdname is None:
1618 if cmdname is None:
1599 self.report(
1619 self.report(
1600 UnassignedKeyError("Unassigned key %s" %
1620 UnassignedKeyError("Unassigned key %s" %
1601 self.keylabel(c)))
1621 self.keylabel(c)))
1602 else:
1622 else:
1603 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1623 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1604 if cmdfunc is None:
1624 if cmdfunc is None:
1605 self.report(
1625 self.report(
1606 UnknownCommandError("Unknown command %r" %
1626 UnknownCommandError("Unknown command %r" %
1607 (cmdname,)))
1627 (cmdname,)))
1608 elif cmdfunc():
1628 elif cmdfunc():
1609 returnvalue = self.returnvalue
1629 returnvalue = self.returnvalue
1610 self.returnvalue = None
1630 self.returnvalue = None
1611 return returnvalue
1631 return returnvalue
1612 self.stepx = self.nextstepx(self.stepx)
1632 self.stepx = self.nextstepx(self.stepx)
1613 self.stepy = self.nextstepy(self.stepy)
1633 self.stepy = self.nextstepy(self.stepy)
1614 curses.flushinp() # get rid of type ahead
1634 curses.flushinp() # get rid of type ahead
1615 break # Redisplay
1635 break # Redisplay
1616 self.scr = None
1636 self.scr = None
1617
1637
1618 def display(self):
1638 def display(self):
1619 if hasattr(curses, "resize_term"):
1639 if hasattr(curses, "resize_term"):
1620 oldhandler = signal.signal(signal.SIGWINCH, self.sigwinchhandler)
1640 oldhandler = signal.signal(signal.SIGWINCH, self.sigwinchhandler)
1621 try:
1641 try:
1622 return curses.wrapper(self._dodisplay)
1642 return curses.wrapper(self._dodisplay)
1623 finally:
1643 finally:
1624 signal.signal(signal.SIGWINCH, oldhandler)
1644 signal.signal(signal.SIGWINCH, oldhandler)
1625 else:
1645 else:
1626 return curses.wrapper(self._dodisplay)
1646 return curses.wrapper(self._dodisplay)
@@ -1,5603 +1,5608 b''
1 2006-06-22 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
4 for keymaps with a custom class that simplifies handling.
5
1 2006-06-19 Walter Doerwald <walter@livinglogic.de>
6 2006-06-19 Walter Doerwald <walter@livinglogic.de>
2
7
3 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
8 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
4 resizing. This requires Python 2.5 to word.
9 resizing. This requires Python 2.5 to work.
5
10
6 2006-06-16 Walter Doerwald <walter@livinglogic.de>
11 2006-06-16 Walter Doerwald <walter@livinglogic.de>
7
12
8 * IPython/Extensions/ibrowse.py: Add two new commands to
13 * IPython/Extensions/ibrowse.py: Add two new commands to
9 ibrowse: "hideattr" (mapped to "h") hides the attribute under
14 ibrowse: "hideattr" (mapped to "h") hides the attribute under
10 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
15 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
11 attributes again. Remapped the help command to "?". Display
16 attributes again. Remapped the help command to "?". Display
12 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
17 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
13 as keys for the "home" and "end" commands. Add three new commands
18 as keys for the "home" and "end" commands. Add three new commands
14 to the input mode for "find" and friends: "delend" (CTRL-K)
19 to the input mode for "find" and friends: "delend" (CTRL-K)
15 deletes to the end of line. "incsearchup" searches upwards in the
20 deletes to the end of line. "incsearchup" searches upwards in the
16 command history for an input that starts with the text before the cursor.
21 command history for an input that starts with the text before the cursor.
17 "incsearchdown" does the same downwards. Removed a bogus mapping of
22 "incsearchdown" does the same downwards. Removed a bogus mapping of
18 the x key to "delete".
23 the x key to "delete".
19
24
20 2006-06-15 Ville Vainio <vivainio@gmail.com>
25 2006-06-15 Ville Vainio <vivainio@gmail.com>
21
26
22 * iplib.py, hooks.py: Added new generate_prompt hook that can be
27 * iplib.py, hooks.py: Added new generate_prompt hook that can be
23 used to create prompts dynamically, instead of the "old" way of
28 used to create prompts dynamically, instead of the "old" way of
24 assigning "magic" strings to prompt_in1 and prompt_in2. The old
29 assigning "magic" strings to prompt_in1 and prompt_in2. The old
25 way still works (it's invoked by the default hook), of course.
30 way still works (it's invoked by the default hook), of course.
26
31
27 * Prompts.py: added generate_output_prompt hook for altering output
32 * Prompts.py: added generate_output_prompt hook for altering output
28 prompt
33 prompt
29
34
30 * Release.py: Changed version string to 0.7.3.svn.
35 * Release.py: Changed version string to 0.7.3.svn.
31
36
32 2006-06-15 Walter Doerwald <walter@livinglogic.de>
37 2006-06-15 Walter Doerwald <walter@livinglogic.de>
33
38
34 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
39 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
35 the call to fetch() always tries to fetch enough data for at least one
40 the call to fetch() always tries to fetch enough data for at least one
36 full screen. This makes it possible to simply call moveto(0,0,True) in
41 full screen. This makes it possible to simply call moveto(0,0,True) in
37 the constructor. Fix typos and removed the obsolete goto attribute.
42 the constructor. Fix typos and removed the obsolete goto attribute.
38
43
39 2006-06-12 Ville Vainio <vivainio@gmail.com>
44 2006-06-12 Ville Vainio <vivainio@gmail.com>
40
45
41 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
46 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
42 allowing $variable interpolation within multiline statements,
47 allowing $variable interpolation within multiline statements,
43 though so far only with "sh" profile for a testing period.
48 though so far only with "sh" profile for a testing period.
44 The patch also enables splitting long commands with \ but it
49 The patch also enables splitting long commands with \ but it
45 doesn't work properly yet.
50 doesn't work properly yet.
46
51
47 2006-06-12 Walter Doerwald <walter@livinglogic.de>
52 2006-06-12 Walter Doerwald <walter@livinglogic.de>
48
53
49 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
54 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
50 input history and the position of the cursor in the input history for
55 input history and the position of the cursor in the input history for
51 the find, findbackwards and goto command.
56 the find, findbackwards and goto command.
52
57
53 2006-06-10 Walter Doerwald <walter@livinglogic.de>
58 2006-06-10 Walter Doerwald <walter@livinglogic.de>
54
59
55 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
60 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
56 implements the basic functionality of browser commands that require
61 implements the basic functionality of browser commands that require
57 input. Reimplement the goto, find and findbackwards commands as
62 input. Reimplement the goto, find and findbackwards commands as
58 subclasses of _CommandInput. Add an input history and keymaps to those
63 subclasses of _CommandInput. Add an input history and keymaps to those
59 commands. Add "\r" as a keyboard shortcut for the enterdefault and
64 commands. Add "\r" as a keyboard shortcut for the enterdefault and
60 execute commands.
65 execute commands.
61
66
62 2006-06-07 Ville Vainio <vivainio@gmail.com>
67 2006-06-07 Ville Vainio <vivainio@gmail.com>
63
68
64 * iplib.py: ipython mybatch.ipy exits ipython immediately after
69 * iplib.py: ipython mybatch.ipy exits ipython immediately after
65 running the batch files instead of leaving the session open.
70 running the batch files instead of leaving the session open.
66
71
67 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
72 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
68
73
69 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
74 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
70 the original fix was incomplete. Patch submitted by W. Maier.
75 the original fix was incomplete. Patch submitted by W. Maier.
71
76
72 2006-06-07 Ville Vainio <vivainio@gmail.com>
77 2006-06-07 Ville Vainio <vivainio@gmail.com>
73
78
74 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
79 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
75 Confirmation prompts can be supressed by 'quiet' option.
80 Confirmation prompts can be supressed by 'quiet' option.
76 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
81 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
77
82
78 2006-06-06 *** Released version 0.7.2
83 2006-06-06 *** Released version 0.7.2
79
84
80 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
85 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
81
86
82 * IPython/Release.py (version): Made 0.7.2 final for release.
87 * IPython/Release.py (version): Made 0.7.2 final for release.
83 Repo tagged and release cut.
88 Repo tagged and release cut.
84
89
85 2006-06-05 Ville Vainio <vivainio@gmail.com>
90 2006-06-05 Ville Vainio <vivainio@gmail.com>
86
91
87 * Magic.py (magic_rehashx): Honor no_alias list earlier in
92 * Magic.py (magic_rehashx): Honor no_alias list earlier in
88 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
93 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
89
94
90 * upgrade_dir.py: try import 'path' module a bit harder
95 * upgrade_dir.py: try import 'path' module a bit harder
91 (for %upgrade)
96 (for %upgrade)
92
97
93 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
98 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
94
99
95 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
100 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
96 instead of looping 20 times.
101 instead of looping 20 times.
97
102
98 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
103 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
99 correctly at initialization time. Bug reported by Krishna Mohan
104 correctly at initialization time. Bug reported by Krishna Mohan
100 Gundu <gkmohan-AT-gmail.com> on the user list.
105 Gundu <gkmohan-AT-gmail.com> on the user list.
101
106
102 * IPython/Release.py (version): Mark 0.7.2 version to start
107 * IPython/Release.py (version): Mark 0.7.2 version to start
103 testing for release on 06/06.
108 testing for release on 06/06.
104
109
105 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
110 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
106
111
107 * scripts/irunner: thin script interface so users don't have to
112 * scripts/irunner: thin script interface so users don't have to
108 find the module and call it as an executable, since modules rarely
113 find the module and call it as an executable, since modules rarely
109 live in people's PATH.
114 live in people's PATH.
110
115
111 * IPython/irunner.py (InteractiveRunner.__init__): added
116 * IPython/irunner.py (InteractiveRunner.__init__): added
112 delaybeforesend attribute to control delays with newer versions of
117 delaybeforesend attribute to control delays with newer versions of
113 pexpect. Thanks to detailed help from pexpect's author, Noah
118 pexpect. Thanks to detailed help from pexpect's author, Noah
114 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
119 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
115 correctly (it works in NoColor mode).
120 correctly (it works in NoColor mode).
116
121
117 * IPython/iplib.py (handle_normal): fix nasty crash reported on
122 * IPython/iplib.py (handle_normal): fix nasty crash reported on
118 SAGE list, from improper log() calls.
123 SAGE list, from improper log() calls.
119
124
120 2006-05-31 Ville Vainio <vivainio@gmail.com>
125 2006-05-31 Ville Vainio <vivainio@gmail.com>
121
126
122 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
127 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
123 with args in parens to work correctly with dirs that have spaces.
128 with args in parens to work correctly with dirs that have spaces.
124
129
125 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
130 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
126
131
127 * IPython/Logger.py (Logger.logstart): add option to log raw input
132 * IPython/Logger.py (Logger.logstart): add option to log raw input
128 instead of the processed one. A -r flag was added to the
133 instead of the processed one. A -r flag was added to the
129 %logstart magic used for controlling logging.
134 %logstart magic used for controlling logging.
130
135
131 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
136 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
132
137
133 * IPython/iplib.py (InteractiveShell.__init__): add check for the
138 * IPython/iplib.py (InteractiveShell.__init__): add check for the
134 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
139 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
135 recognize the option. After a bug report by Will Maier. This
140 recognize the option. After a bug report by Will Maier. This
136 closes #64 (will do it after confirmation from W. Maier).
141 closes #64 (will do it after confirmation from W. Maier).
137
142
138 * IPython/irunner.py: New module to run scripts as if manually
143 * IPython/irunner.py: New module to run scripts as if manually
139 typed into an interactive environment, based on pexpect. After a
144 typed into an interactive environment, based on pexpect. After a
140 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
145 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
141 ipython-user list. Simple unittests in the tests/ directory.
146 ipython-user list. Simple unittests in the tests/ directory.
142
147
143 * tools/release: add Will Maier, OpenBSD port maintainer, to
148 * tools/release: add Will Maier, OpenBSD port maintainer, to
144 recepients list. We are now officially part of the OpenBSD ports:
149 recepients list. We are now officially part of the OpenBSD ports:
145 http://www.openbsd.org/ports.html ! Many thanks to Will for the
150 http://www.openbsd.org/ports.html ! Many thanks to Will for the
146 work.
151 work.
147
152
148 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
153 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
149
154
150 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
155 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
151 so that it doesn't break tkinter apps.
156 so that it doesn't break tkinter apps.
152
157
153 * IPython/iplib.py (_prefilter): fix bug where aliases would
158 * IPython/iplib.py (_prefilter): fix bug where aliases would
154 shadow variables when autocall was fully off. Reported by SAGE
159 shadow variables when autocall was fully off. Reported by SAGE
155 author William Stein.
160 author William Stein.
156
161
157 * IPython/OInspect.py (Inspector.__init__): add a flag to control
162 * IPython/OInspect.py (Inspector.__init__): add a flag to control
158 at what detail level strings are computed when foo? is requested.
163 at what detail level strings are computed when foo? is requested.
159 This allows users to ask for example that the string form of an
164 This allows users to ask for example that the string form of an
160 object is only computed when foo?? is called, or even never, by
165 object is only computed when foo?? is called, or even never, by
161 setting the object_info_string_level >= 2 in the configuration
166 setting the object_info_string_level >= 2 in the configuration
162 file. This new option has been added and documented. After a
167 file. This new option has been added and documented. After a
163 request by SAGE to be able to control the printing of very large
168 request by SAGE to be able to control the printing of very large
164 objects more easily.
169 objects more easily.
165
170
166 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
171 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
167
172
168 * IPython/ipmaker.py (make_IPython): remove the ipython call path
173 * IPython/ipmaker.py (make_IPython): remove the ipython call path
169 from sys.argv, to be 100% consistent with how Python itself works
174 from sys.argv, to be 100% consistent with how Python itself works
170 (as seen for example with python -i file.py). After a bug report
175 (as seen for example with python -i file.py). After a bug report
171 by Jeffrey Collins.
176 by Jeffrey Collins.
172
177
173 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
178 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
174 nasty bug which was preventing custom namespaces with -pylab,
179 nasty bug which was preventing custom namespaces with -pylab,
175 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
180 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
176 compatibility (long gone from mpl).
181 compatibility (long gone from mpl).
177
182
178 * IPython/ipapi.py (make_session): name change: create->make. We
183 * IPython/ipapi.py (make_session): name change: create->make. We
179 use make in other places (ipmaker,...), it's shorter and easier to
184 use make in other places (ipmaker,...), it's shorter and easier to
180 type and say, etc. I'm trying to clean things before 0.7.2 so
185 type and say, etc. I'm trying to clean things before 0.7.2 so
181 that I can keep things stable wrt to ipapi in the chainsaw branch.
186 that I can keep things stable wrt to ipapi in the chainsaw branch.
182
187
183 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
188 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
184 python-mode recognizes our debugger mode. Add support for
189 python-mode recognizes our debugger mode. Add support for
185 autoindent inside (X)emacs. After a patch sent in by Jin Liu
190 autoindent inside (X)emacs. After a patch sent in by Jin Liu
186 <m.liu.jin-AT-gmail.com> originally written by
191 <m.liu.jin-AT-gmail.com> originally written by
187 doxgen-AT-newsmth.net (with minor modifications for xemacs
192 doxgen-AT-newsmth.net (with minor modifications for xemacs
188 compatibility)
193 compatibility)
189
194
190 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
195 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
191 tracebacks when walking the stack so that the stack tracking system
196 tracebacks when walking the stack so that the stack tracking system
192 in emacs' python-mode can identify the frames correctly.
197 in emacs' python-mode can identify the frames correctly.
193
198
194 * IPython/ipmaker.py (make_IPython): make the internal (and
199 * IPython/ipmaker.py (make_IPython): make the internal (and
195 default config) autoedit_syntax value false by default. Too many
200 default config) autoedit_syntax value false by default. Too many
196 users have complained to me (both on and off-list) about problems
201 users have complained to me (both on and off-list) about problems
197 with this option being on by default, so I'm making it default to
202 with this option being on by default, so I'm making it default to
198 off. It can still be enabled by anyone via the usual mechanisms.
203 off. It can still be enabled by anyone via the usual mechanisms.
199
204
200 * IPython/completer.py (Completer.attr_matches): add support for
205 * IPython/completer.py (Completer.attr_matches): add support for
201 PyCrust-style _getAttributeNames magic method. Patch contributed
206 PyCrust-style _getAttributeNames magic method. Patch contributed
202 by <mscott-AT-goldenspud.com>. Closes #50.
207 by <mscott-AT-goldenspud.com>. Closes #50.
203
208
204 * IPython/iplib.py (InteractiveShell.__init__): remove the
209 * IPython/iplib.py (InteractiveShell.__init__): remove the
205 deletion of exit/quit from __builtin__, which can break
210 deletion of exit/quit from __builtin__, which can break
206 third-party tools like the Zope debugging console. The
211 third-party tools like the Zope debugging console. The
207 %exit/%quit magics remain. In general, it's probably a good idea
212 %exit/%quit magics remain. In general, it's probably a good idea
208 not to delete anything from __builtin__, since we never know what
213 not to delete anything from __builtin__, since we never know what
209 that will break. In any case, python now (for 2.5) will support
214 that will break. In any case, python now (for 2.5) will support
210 'real' exit/quit, so this issue is moot. Closes #55.
215 'real' exit/quit, so this issue is moot. Closes #55.
211
216
212 * IPython/genutils.py (with_obj): rename the 'with' function to
217 * IPython/genutils.py (with_obj): rename the 'with' function to
213 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
218 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
214 becomes a language keyword. Closes #53.
219 becomes a language keyword. Closes #53.
215
220
216 * IPython/FakeModule.py (FakeModule.__init__): add a proper
221 * IPython/FakeModule.py (FakeModule.__init__): add a proper
217 __file__ attribute to this so it fools more things into thinking
222 __file__ attribute to this so it fools more things into thinking
218 it is a real module. Closes #59.
223 it is a real module. Closes #59.
219
224
220 * IPython/Magic.py (magic_edit): add -n option to open the editor
225 * IPython/Magic.py (magic_edit): add -n option to open the editor
221 at a specific line number. After a patch by Stefan van der Walt.
226 at a specific line number. After a patch by Stefan van der Walt.
222
227
223 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
228 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
224
229
225 * IPython/iplib.py (edit_syntax_error): fix crash when for some
230 * IPython/iplib.py (edit_syntax_error): fix crash when for some
226 reason the file could not be opened. After automatic crash
231 reason the file could not be opened. After automatic crash
227 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
232 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
228 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
233 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
229 (_should_recompile): Don't fire editor if using %bg, since there
234 (_should_recompile): Don't fire editor if using %bg, since there
230 is no file in the first place. From the same report as above.
235 is no file in the first place. From the same report as above.
231 (raw_input): protect against faulty third-party prefilters. After
236 (raw_input): protect against faulty third-party prefilters. After
232 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
237 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
233 while running under SAGE.
238 while running under SAGE.
234
239
235 2006-05-23 Ville Vainio <vivainio@gmail.com>
240 2006-05-23 Ville Vainio <vivainio@gmail.com>
236
241
237 * ipapi.py: Stripped down ip.to_user_ns() to work only as
242 * ipapi.py: Stripped down ip.to_user_ns() to work only as
238 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
243 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
239 now returns None (again), unless dummy is specifically allowed by
244 now returns None (again), unless dummy is specifically allowed by
240 ipapi.get(allow_dummy=True).
245 ipapi.get(allow_dummy=True).
241
246
242 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
247 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
243
248
244 * IPython: remove all 2.2-compatibility objects and hacks from
249 * IPython: remove all 2.2-compatibility objects and hacks from
245 everywhere, since we only support 2.3 at this point. Docs
250 everywhere, since we only support 2.3 at this point. Docs
246 updated.
251 updated.
247
252
248 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
253 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
249 Anything requiring extra validation can be turned into a Python
254 Anything requiring extra validation can be turned into a Python
250 property in the future. I used a property for the db one b/c
255 property in the future. I used a property for the db one b/c
251 there was a nasty circularity problem with the initialization
256 there was a nasty circularity problem with the initialization
252 order, which right now I don't have time to clean up.
257 order, which right now I don't have time to clean up.
253
258
254 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
259 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
255 another locking bug reported by Jorgen. I'm not 100% sure though,
260 another locking bug reported by Jorgen. I'm not 100% sure though,
256 so more testing is needed...
261 so more testing is needed...
257
262
258 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
263 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
259
264
260 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
265 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
261 local variables from any routine in user code (typically executed
266 local variables from any routine in user code (typically executed
262 with %run) directly into the interactive namespace. Very useful
267 with %run) directly into the interactive namespace. Very useful
263 when doing complex debugging.
268 when doing complex debugging.
264 (IPythonNotRunning): Changed the default None object to a dummy
269 (IPythonNotRunning): Changed the default None object to a dummy
265 whose attributes can be queried as well as called without
270 whose attributes can be queried as well as called without
266 exploding, to ease writing code which works transparently both in
271 exploding, to ease writing code which works transparently both in
267 and out of ipython and uses some of this API.
272 and out of ipython and uses some of this API.
268
273
269 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
274 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
270
275
271 * IPython/hooks.py (result_display): Fix the fact that our display
276 * IPython/hooks.py (result_display): Fix the fact that our display
272 hook was using str() instead of repr(), as the default python
277 hook was using str() instead of repr(), as the default python
273 console does. This had gone unnoticed b/c it only happened if
278 console does. This had gone unnoticed b/c it only happened if
274 %Pprint was off, but the inconsistency was there.
279 %Pprint was off, but the inconsistency was there.
275
280
276 2006-05-15 Ville Vainio <vivainio@gmail.com>
281 2006-05-15 Ville Vainio <vivainio@gmail.com>
277
282
278 * Oinspect.py: Only show docstring for nonexisting/binary files
283 * Oinspect.py: Only show docstring for nonexisting/binary files
279 when doing object??, closing ticket #62
284 when doing object??, closing ticket #62
280
285
281 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
286 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
282
287
283 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
288 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
284 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
289 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
285 was being released in a routine which hadn't checked if it had
290 was being released in a routine which hadn't checked if it had
286 been the one to acquire it.
291 been the one to acquire it.
287
292
288 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
293 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
289
294
290 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
295 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
291
296
292 2006-04-11 Ville Vainio <vivainio@gmail.com>
297 2006-04-11 Ville Vainio <vivainio@gmail.com>
293
298
294 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
299 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
295 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
300 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
296 prefilters, allowing stuff like magics and aliases in the file.
301 prefilters, allowing stuff like magics and aliases in the file.
297
302
298 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
303 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
299 added. Supported now are "%clear in" and "%clear out" (clear input and
304 added. Supported now are "%clear in" and "%clear out" (clear input and
300 output history, respectively). Also fixed CachedOutput.flush to
305 output history, respectively). Also fixed CachedOutput.flush to
301 properly flush the output cache.
306 properly flush the output cache.
302
307
303 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
308 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
304 half-success (and fail explicitly).
309 half-success (and fail explicitly).
305
310
306 2006-03-28 Ville Vainio <vivainio@gmail.com>
311 2006-03-28 Ville Vainio <vivainio@gmail.com>
307
312
308 * iplib.py: Fix quoting of aliases so that only argless ones
313 * iplib.py: Fix quoting of aliases so that only argless ones
309 are quoted
314 are quoted
310
315
311 2006-03-28 Ville Vainio <vivainio@gmail.com>
316 2006-03-28 Ville Vainio <vivainio@gmail.com>
312
317
313 * iplib.py: Quote aliases with spaces in the name.
318 * iplib.py: Quote aliases with spaces in the name.
314 "c:\program files\blah\bin" is now legal alias target.
319 "c:\program files\blah\bin" is now legal alias target.
315
320
316 * ext_rehashdir.py: Space no longer allowed as arg
321 * ext_rehashdir.py: Space no longer allowed as arg
317 separator, since space is legal in path names.
322 separator, since space is legal in path names.
318
323
319 2006-03-16 Ville Vainio <vivainio@gmail.com>
324 2006-03-16 Ville Vainio <vivainio@gmail.com>
320
325
321 * upgrade_dir.py: Take path.py from Extensions, correcting
326 * upgrade_dir.py: Take path.py from Extensions, correcting
322 %upgrade magic
327 %upgrade magic
323
328
324 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
329 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
325
330
326 * hooks.py: Only enclose editor binary in quotes if legal and
331 * hooks.py: Only enclose editor binary in quotes if legal and
327 necessary (space in the name, and is an existing file). Fixes a bug
332 necessary (space in the name, and is an existing file). Fixes a bug
328 reported by Zachary Pincus.
333 reported by Zachary Pincus.
329
334
330 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
335 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
331
336
332 * Manual: thanks to a tip on proper color handling for Emacs, by
337 * Manual: thanks to a tip on proper color handling for Emacs, by
333 Eric J Haywiser <ejh1-AT-MIT.EDU>.
338 Eric J Haywiser <ejh1-AT-MIT.EDU>.
334
339
335 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
340 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
336 by applying the provided patch. Thanks to Liu Jin
341 by applying the provided patch. Thanks to Liu Jin
337 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
342 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
338 XEmacs/Linux, I'm trusting the submitter that it actually helps
343 XEmacs/Linux, I'm trusting the submitter that it actually helps
339 under win32/GNU Emacs. Will revisit if any problems are reported.
344 under win32/GNU Emacs. Will revisit if any problems are reported.
340
345
341 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
346 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
342
347
343 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
348 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
344 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
349 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
345
350
346 2006-03-12 Ville Vainio <vivainio@gmail.com>
351 2006-03-12 Ville Vainio <vivainio@gmail.com>
347
352
348 * Magic.py (magic_timeit): Added %timeit magic, contributed by
353 * Magic.py (magic_timeit): Added %timeit magic, contributed by
349 Torsten Marek.
354 Torsten Marek.
350
355
351 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
356 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
352
357
353 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
358 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
354 line ranges works again.
359 line ranges works again.
355
360
356 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
361 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
357
362
358 * IPython/iplib.py (showtraceback): add back sys.last_traceback
363 * IPython/iplib.py (showtraceback): add back sys.last_traceback
359 and friends, after a discussion with Zach Pincus on ipython-user.
364 and friends, after a discussion with Zach Pincus on ipython-user.
360 I'm not 100% sure, but after thinking about it quite a bit, it may
365 I'm not 100% sure, but after thinking about it quite a bit, it may
361 be OK. Testing with the multithreaded shells didn't reveal any
366 be OK. Testing with the multithreaded shells didn't reveal any
362 problems, but let's keep an eye out.
367 problems, but let's keep an eye out.
363
368
364 In the process, I fixed a few things which were calling
369 In the process, I fixed a few things which were calling
365 self.InteractiveTB() directly (like safe_execfile), which is a
370 self.InteractiveTB() directly (like safe_execfile), which is a
366 mistake: ALL exception reporting should be done by calling
371 mistake: ALL exception reporting should be done by calling
367 self.showtraceback(), which handles state and tab-completion and
372 self.showtraceback(), which handles state and tab-completion and
368 more.
373 more.
369
374
370 2006-03-01 Ville Vainio <vivainio@gmail.com>
375 2006-03-01 Ville Vainio <vivainio@gmail.com>
371
376
372 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
377 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
373 To use, do "from ipipe import *".
378 To use, do "from ipipe import *".
374
379
375 2006-02-24 Ville Vainio <vivainio@gmail.com>
380 2006-02-24 Ville Vainio <vivainio@gmail.com>
376
381
377 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
382 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
378 "cleanly" and safely than the older upgrade mechanism.
383 "cleanly" and safely than the older upgrade mechanism.
379
384
380 2006-02-21 Ville Vainio <vivainio@gmail.com>
385 2006-02-21 Ville Vainio <vivainio@gmail.com>
381
386
382 * Magic.py: %save works again.
387 * Magic.py: %save works again.
383
388
384 2006-02-15 Ville Vainio <vivainio@gmail.com>
389 2006-02-15 Ville Vainio <vivainio@gmail.com>
385
390
386 * Magic.py: %Pprint works again
391 * Magic.py: %Pprint works again
387
392
388 * Extensions/ipy_sane_defaults.py: Provide everything provided
393 * Extensions/ipy_sane_defaults.py: Provide everything provided
389 in default ipythonrc, to make it possible to have a completely empty
394 in default ipythonrc, to make it possible to have a completely empty
390 ipythonrc (and thus completely rc-file free configuration)
395 ipythonrc (and thus completely rc-file free configuration)
391
396
392 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
397 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
393
398
394 * IPython/hooks.py (editor): quote the call to the editor command,
399 * IPython/hooks.py (editor): quote the call to the editor command,
395 to allow commands with spaces in them. Problem noted by watching
400 to allow commands with spaces in them. Problem noted by watching
396 Ian Oswald's video about textpad under win32 at
401 Ian Oswald's video about textpad under win32 at
397 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
402 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
398
403
399 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
404 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
400 describing magics (we haven't used @ for a loong time).
405 describing magics (we haven't used @ for a loong time).
401
406
402 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
407 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
403 contributed by marienz to close
408 contributed by marienz to close
404 http://www.scipy.net/roundup/ipython/issue53.
409 http://www.scipy.net/roundup/ipython/issue53.
405
410
406 2006-02-10 Ville Vainio <vivainio@gmail.com>
411 2006-02-10 Ville Vainio <vivainio@gmail.com>
407
412
408 * genutils.py: getoutput now works in win32 too
413 * genutils.py: getoutput now works in win32 too
409
414
410 * completer.py: alias and magic completion only invoked
415 * completer.py: alias and magic completion only invoked
411 at the first "item" in the line, to avoid "cd %store"
416 at the first "item" in the line, to avoid "cd %store"
412 nonsense.
417 nonsense.
413
418
414 2006-02-09 Ville Vainio <vivainio@gmail.com>
419 2006-02-09 Ville Vainio <vivainio@gmail.com>
415
420
416 * test/*: Added a unit testing framework (finally).
421 * test/*: Added a unit testing framework (finally).
417 '%run runtests.py' to run test_*.
422 '%run runtests.py' to run test_*.
418
423
419 * ipapi.py: Exposed runlines and set_custom_exc
424 * ipapi.py: Exposed runlines and set_custom_exc
420
425
421 2006-02-07 Ville Vainio <vivainio@gmail.com>
426 2006-02-07 Ville Vainio <vivainio@gmail.com>
422
427
423 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
428 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
424 instead use "f(1 2)" as before.
429 instead use "f(1 2)" as before.
425
430
426 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
431 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
427
432
428 * IPython/demo.py (IPythonDemo): Add new classes to the demo
433 * IPython/demo.py (IPythonDemo): Add new classes to the demo
429 facilities, for demos processed by the IPython input filter
434 facilities, for demos processed by the IPython input filter
430 (IPythonDemo), and for running a script one-line-at-a-time as a
435 (IPythonDemo), and for running a script one-line-at-a-time as a
431 demo, both for pure Python (LineDemo) and for IPython-processed
436 demo, both for pure Python (LineDemo) and for IPython-processed
432 input (IPythonLineDemo). After a request by Dave Kohel, from the
437 input (IPythonLineDemo). After a request by Dave Kohel, from the
433 SAGE team.
438 SAGE team.
434 (Demo.edit): added an edit() method to the demo objects, to edit
439 (Demo.edit): added an edit() method to the demo objects, to edit
435 the in-memory copy of the last executed block.
440 the in-memory copy of the last executed block.
436
441
437 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
442 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
438 processing to %edit, %macro and %save. These commands can now be
443 processing to %edit, %macro and %save. These commands can now be
439 invoked on the unprocessed input as it was typed by the user
444 invoked on the unprocessed input as it was typed by the user
440 (without any prefilters applied). After requests by the SAGE team
445 (without any prefilters applied). After requests by the SAGE team
441 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
446 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
442
447
443 2006-02-01 Ville Vainio <vivainio@gmail.com>
448 2006-02-01 Ville Vainio <vivainio@gmail.com>
444
449
445 * setup.py, eggsetup.py: easy_install ipython==dev works
450 * setup.py, eggsetup.py: easy_install ipython==dev works
446 correctly now (on Linux)
451 correctly now (on Linux)
447
452
448 * ipy_user_conf,ipmaker: user config changes, removed spurious
453 * ipy_user_conf,ipmaker: user config changes, removed spurious
449 warnings
454 warnings
450
455
451 * iplib: if rc.banner is string, use it as is.
456 * iplib: if rc.banner is string, use it as is.
452
457
453 * Magic: %pycat accepts a string argument and pages it's contents.
458 * Magic: %pycat accepts a string argument and pages it's contents.
454
459
455
460
456 2006-01-30 Ville Vainio <vivainio@gmail.com>
461 2006-01-30 Ville Vainio <vivainio@gmail.com>
457
462
458 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
463 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
459 Now %store and bookmarks work through PickleShare, meaning that
464 Now %store and bookmarks work through PickleShare, meaning that
460 concurrent access is possible and all ipython sessions see the
465 concurrent access is possible and all ipython sessions see the
461 same database situation all the time, instead of snapshot of
466 same database situation all the time, instead of snapshot of
462 the situation when the session was started. Hence, %bookmark
467 the situation when the session was started. Hence, %bookmark
463 results are immediately accessible from othes sessions. The database
468 results are immediately accessible from othes sessions. The database
464 is also available for use by user extensions. See:
469 is also available for use by user extensions. See:
465 http://www.python.org/pypi/pickleshare
470 http://www.python.org/pypi/pickleshare
466
471
467 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
472 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
468
473
469 * aliases can now be %store'd
474 * aliases can now be %store'd
470
475
471 * path.py moved to Extensions so that pickleshare does not need
476 * path.py moved to Extensions so that pickleshare does not need
472 IPython-specific import. Extensions added to pythonpath right
477 IPython-specific import. Extensions added to pythonpath right
473 at __init__.
478 at __init__.
474
479
475 * iplib.py: ipalias deprecated/redundant; aliases are converted and
480 * iplib.py: ipalias deprecated/redundant; aliases are converted and
476 called with _ip.system and the pre-transformed command string.
481 called with _ip.system and the pre-transformed command string.
477
482
478 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
483 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
479
484
480 * IPython/iplib.py (interact): Fix that we were not catching
485 * IPython/iplib.py (interact): Fix that we were not catching
481 KeyboardInterrupt exceptions properly. I'm not quite sure why the
486 KeyboardInterrupt exceptions properly. I'm not quite sure why the
482 logic here had to change, but it's fixed now.
487 logic here had to change, but it's fixed now.
483
488
484 2006-01-29 Ville Vainio <vivainio@gmail.com>
489 2006-01-29 Ville Vainio <vivainio@gmail.com>
485
490
486 * iplib.py: Try to import pyreadline on Windows.
491 * iplib.py: Try to import pyreadline on Windows.
487
492
488 2006-01-27 Ville Vainio <vivainio@gmail.com>
493 2006-01-27 Ville Vainio <vivainio@gmail.com>
489
494
490 * iplib.py: Expose ipapi as _ip in builtin namespace.
495 * iplib.py: Expose ipapi as _ip in builtin namespace.
491 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
496 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
492 and ip_set_hook (-> _ip.set_hook) redundant. % and !
497 and ip_set_hook (-> _ip.set_hook) redundant. % and !
493 syntax now produce _ip.* variant of the commands.
498 syntax now produce _ip.* variant of the commands.
494
499
495 * "_ip.options().autoedit_syntax = 2" automatically throws
500 * "_ip.options().autoedit_syntax = 2" automatically throws
496 user to editor for syntax error correction without prompting.
501 user to editor for syntax error correction without prompting.
497
502
498 2006-01-27 Ville Vainio <vivainio@gmail.com>
503 2006-01-27 Ville Vainio <vivainio@gmail.com>
499
504
500 * ipmaker.py: Give "realistic" sys.argv for scripts (without
505 * ipmaker.py: Give "realistic" sys.argv for scripts (without
501 'ipython' at argv[0]) executed through command line.
506 'ipython' at argv[0]) executed through command line.
502 NOTE: this DEPRECATES calling ipython with multiple scripts
507 NOTE: this DEPRECATES calling ipython with multiple scripts
503 ("ipython a.py b.py c.py")
508 ("ipython a.py b.py c.py")
504
509
505 * iplib.py, hooks.py: Added configurable input prefilter,
510 * iplib.py, hooks.py: Added configurable input prefilter,
506 named 'input_prefilter'. See ext_rescapture.py for example
511 named 'input_prefilter'. See ext_rescapture.py for example
507 usage.
512 usage.
508
513
509 * ext_rescapture.py, Magic.py: Better system command output capture
514 * ext_rescapture.py, Magic.py: Better system command output capture
510 through 'var = !ls' (deprecates user-visible %sc). Same notation
515 through 'var = !ls' (deprecates user-visible %sc). Same notation
511 applies for magics, 'var = %alias' assigns alias list to var.
516 applies for magics, 'var = %alias' assigns alias list to var.
512
517
513 * ipapi.py: added meta() for accessing extension-usable data store.
518 * ipapi.py: added meta() for accessing extension-usable data store.
514
519
515 * iplib.py: added InteractiveShell.getapi(). New magics should be
520 * iplib.py: added InteractiveShell.getapi(). New magics should be
516 written doing self.getapi() instead of using the shell directly.
521 written doing self.getapi() instead of using the shell directly.
517
522
518 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
523 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
519 %store foo >> ~/myfoo.txt to store variables to files (in clean
524 %store foo >> ~/myfoo.txt to store variables to files (in clean
520 textual form, not a restorable pickle).
525 textual form, not a restorable pickle).
521
526
522 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
527 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
523
528
524 * usage.py, Magic.py: added %quickref
529 * usage.py, Magic.py: added %quickref
525
530
526 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
531 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
527
532
528 * GetoptErrors when invoking magics etc. with wrong args
533 * GetoptErrors when invoking magics etc. with wrong args
529 are now more helpful:
534 are now more helpful:
530 GetoptError: option -l not recognized (allowed: "qb" )
535 GetoptError: option -l not recognized (allowed: "qb" )
531
536
532 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
537 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
533
538
534 * IPython/demo.py (Demo.show): Flush stdout after each block, so
539 * IPython/demo.py (Demo.show): Flush stdout after each block, so
535 computationally intensive blocks don't appear to stall the demo.
540 computationally intensive blocks don't appear to stall the demo.
536
541
537 2006-01-24 Ville Vainio <vivainio@gmail.com>
542 2006-01-24 Ville Vainio <vivainio@gmail.com>
538
543
539 * iplib.py, hooks.py: 'result_display' hook can return a non-None
544 * iplib.py, hooks.py: 'result_display' hook can return a non-None
540 value to manipulate resulting history entry.
545 value to manipulate resulting history entry.
541
546
542 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
547 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
543 to instance methods of IPApi class, to make extending an embedded
548 to instance methods of IPApi class, to make extending an embedded
544 IPython feasible. See ext_rehashdir.py for example usage.
549 IPython feasible. See ext_rehashdir.py for example usage.
545
550
546 * Merged 1071-1076 from branches/0.7.1
551 * Merged 1071-1076 from branches/0.7.1
547
552
548
553
549 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
554 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
550
555
551 * tools/release (daystamp): Fix build tools to use the new
556 * tools/release (daystamp): Fix build tools to use the new
552 eggsetup.py script to build lightweight eggs.
557 eggsetup.py script to build lightweight eggs.
553
558
554 * Applied changesets 1062 and 1064 before 0.7.1 release.
559 * Applied changesets 1062 and 1064 before 0.7.1 release.
555
560
556 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
561 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
557 see the raw input history (without conversions like %ls ->
562 see the raw input history (without conversions like %ls ->
558 ipmagic("ls")). After a request from W. Stein, SAGE
563 ipmagic("ls")). After a request from W. Stein, SAGE
559 (http://modular.ucsd.edu/sage) developer. This information is
564 (http://modular.ucsd.edu/sage) developer. This information is
560 stored in the input_hist_raw attribute of the IPython instance, so
565 stored in the input_hist_raw attribute of the IPython instance, so
561 developers can access it if needed (it's an InputList instance).
566 developers can access it if needed (it's an InputList instance).
562
567
563 * Versionstring = 0.7.2.svn
568 * Versionstring = 0.7.2.svn
564
569
565 * eggsetup.py: A separate script for constructing eggs, creates
570 * eggsetup.py: A separate script for constructing eggs, creates
566 proper launch scripts even on Windows (an .exe file in
571 proper launch scripts even on Windows (an .exe file in
567 \python24\scripts).
572 \python24\scripts).
568
573
569 * ipapi.py: launch_new_instance, launch entry point needed for the
574 * ipapi.py: launch_new_instance, launch entry point needed for the
570 egg.
575 egg.
571
576
572 2006-01-23 Ville Vainio <vivainio@gmail.com>
577 2006-01-23 Ville Vainio <vivainio@gmail.com>
573
578
574 * Added %cpaste magic for pasting python code
579 * Added %cpaste magic for pasting python code
575
580
576 2006-01-22 Ville Vainio <vivainio@gmail.com>
581 2006-01-22 Ville Vainio <vivainio@gmail.com>
577
582
578 * Merge from branches/0.7.1 into trunk, revs 1052-1057
583 * Merge from branches/0.7.1 into trunk, revs 1052-1057
579
584
580 * Versionstring = 0.7.2.svn
585 * Versionstring = 0.7.2.svn
581
586
582 * eggsetup.py: A separate script for constructing eggs, creates
587 * eggsetup.py: A separate script for constructing eggs, creates
583 proper launch scripts even on Windows (an .exe file in
588 proper launch scripts even on Windows (an .exe file in
584 \python24\scripts).
589 \python24\scripts).
585
590
586 * ipapi.py: launch_new_instance, launch entry point needed for the
591 * ipapi.py: launch_new_instance, launch entry point needed for the
587 egg.
592 egg.
588
593
589 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
594 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
590
595
591 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
596 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
592 %pfile foo would print the file for foo even if it was a binary.
597 %pfile foo would print the file for foo even if it was a binary.
593 Now, extensions '.so' and '.dll' are skipped.
598 Now, extensions '.so' and '.dll' are skipped.
594
599
595 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
600 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
596 bug, where macros would fail in all threaded modes. I'm not 100%
601 bug, where macros would fail in all threaded modes. I'm not 100%
597 sure, so I'm going to put out an rc instead of making a release
602 sure, so I'm going to put out an rc instead of making a release
598 today, and wait for feedback for at least a few days.
603 today, and wait for feedback for at least a few days.
599
604
600 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
605 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
601 it...) the handling of pasting external code with autoindent on.
606 it...) the handling of pasting external code with autoindent on.
602 To get out of a multiline input, the rule will appear for most
607 To get out of a multiline input, the rule will appear for most
603 users unchanged: two blank lines or change the indent level
608 users unchanged: two blank lines or change the indent level
604 proposed by IPython. But there is a twist now: you can
609 proposed by IPython. But there is a twist now: you can
605 add/subtract only *one or two spaces*. If you add/subtract three
610 add/subtract only *one or two spaces*. If you add/subtract three
606 or more (unless you completely delete the line), IPython will
611 or more (unless you completely delete the line), IPython will
607 accept that line, and you'll need to enter a second one of pure
612 accept that line, and you'll need to enter a second one of pure
608 whitespace. I know it sounds complicated, but I can't find a
613 whitespace. I know it sounds complicated, but I can't find a
609 different solution that covers all the cases, with the right
614 different solution that covers all the cases, with the right
610 heuristics. Hopefully in actual use, nobody will really notice
615 heuristics. Hopefully in actual use, nobody will really notice
611 all these strange rules and things will 'just work'.
616 all these strange rules and things will 'just work'.
612
617
613 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
618 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
614
619
615 * IPython/iplib.py (interact): catch exceptions which can be
620 * IPython/iplib.py (interact): catch exceptions which can be
616 triggered asynchronously by signal handlers. Thanks to an
621 triggered asynchronously by signal handlers. Thanks to an
617 automatic crash report, submitted by Colin Kingsley
622 automatic crash report, submitted by Colin Kingsley
618 <tercel-AT-gentoo.org>.
623 <tercel-AT-gentoo.org>.
619
624
620 2006-01-20 Ville Vainio <vivainio@gmail.com>
625 2006-01-20 Ville Vainio <vivainio@gmail.com>
621
626
622 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
627 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
623 (%rehashdir, very useful, try it out) of how to extend ipython
628 (%rehashdir, very useful, try it out) of how to extend ipython
624 with new magics. Also added Extensions dir to pythonpath to make
629 with new magics. Also added Extensions dir to pythonpath to make
625 importing extensions easy.
630 importing extensions easy.
626
631
627 * %store now complains when trying to store interactively declared
632 * %store now complains when trying to store interactively declared
628 classes / instances of those classes.
633 classes / instances of those classes.
629
634
630 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
635 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
631 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
636 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
632 if they exist, and ipy_user_conf.py with some defaults is created for
637 if they exist, and ipy_user_conf.py with some defaults is created for
633 the user.
638 the user.
634
639
635 * Startup rehashing done by the config file, not InterpreterExec.
640 * Startup rehashing done by the config file, not InterpreterExec.
636 This means system commands are available even without selecting the
641 This means system commands are available even without selecting the
637 pysh profile. It's the sensible default after all.
642 pysh profile. It's the sensible default after all.
638
643
639 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
644 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
640
645
641 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
646 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
642 multiline code with autoindent on working. But I am really not
647 multiline code with autoindent on working. But I am really not
643 sure, so this needs more testing. Will commit a debug-enabled
648 sure, so this needs more testing. Will commit a debug-enabled
644 version for now, while I test it some more, so that Ville and
649 version for now, while I test it some more, so that Ville and
645 others may also catch any problems. Also made
650 others may also catch any problems. Also made
646 self.indent_current_str() a method, to ensure that there's no
651 self.indent_current_str() a method, to ensure that there's no
647 chance of the indent space count and the corresponding string
652 chance of the indent space count and the corresponding string
648 falling out of sync. All code needing the string should just call
653 falling out of sync. All code needing the string should just call
649 the method.
654 the method.
650
655
651 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
656 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
652
657
653 * IPython/Magic.py (magic_edit): fix check for when users don't
658 * IPython/Magic.py (magic_edit): fix check for when users don't
654 save their output files, the try/except was in the wrong section.
659 save their output files, the try/except was in the wrong section.
655
660
656 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
661 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
657
662
658 * IPython/Magic.py (magic_run): fix __file__ global missing from
663 * IPython/Magic.py (magic_run): fix __file__ global missing from
659 script's namespace when executed via %run. After a report by
664 script's namespace when executed via %run. After a report by
660 Vivian.
665 Vivian.
661
666
662 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
667 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
663 when using python 2.4. The parent constructor changed in 2.4, and
668 when using python 2.4. The parent constructor changed in 2.4, and
664 we need to track it directly (we can't call it, as it messes up
669 we need to track it directly (we can't call it, as it messes up
665 readline and tab-completion inside our pdb would stop working).
670 readline and tab-completion inside our pdb would stop working).
666 After a bug report by R. Bernstein <rocky-AT-panix.com>.
671 After a bug report by R. Bernstein <rocky-AT-panix.com>.
667
672
668 2006-01-16 Ville Vainio <vivainio@gmail.com>
673 2006-01-16 Ville Vainio <vivainio@gmail.com>
669
674
670 * Ipython/magic.py: Reverted back to old %edit functionality
675 * Ipython/magic.py: Reverted back to old %edit functionality
671 that returns file contents on exit.
676 that returns file contents on exit.
672
677
673 * IPython/path.py: Added Jason Orendorff's "path" module to
678 * IPython/path.py: Added Jason Orendorff's "path" module to
674 IPython tree, http://www.jorendorff.com/articles/python/path/.
679 IPython tree, http://www.jorendorff.com/articles/python/path/.
675 You can get path objects conveniently through %sc, and !!, e.g.:
680 You can get path objects conveniently through %sc, and !!, e.g.:
676 sc files=ls
681 sc files=ls
677 for p in files.paths: # or files.p
682 for p in files.paths: # or files.p
678 print p,p.mtime
683 print p,p.mtime
679
684
680 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
685 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
681 now work again without considering the exclusion regexp -
686 now work again without considering the exclusion regexp -
682 hence, things like ',foo my/path' turn to 'foo("my/path")'
687 hence, things like ',foo my/path' turn to 'foo("my/path")'
683 instead of syntax error.
688 instead of syntax error.
684
689
685
690
686 2006-01-14 Ville Vainio <vivainio@gmail.com>
691 2006-01-14 Ville Vainio <vivainio@gmail.com>
687
692
688 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
693 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
689 ipapi decorators for python 2.4 users, options() provides access to rc
694 ipapi decorators for python 2.4 users, options() provides access to rc
690 data.
695 data.
691
696
692 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
697 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
693 as path separators (even on Linux ;-). Space character after
698 as path separators (even on Linux ;-). Space character after
694 backslash (as yielded by tab completer) is still space;
699 backslash (as yielded by tab completer) is still space;
695 "%cd long\ name" works as expected.
700 "%cd long\ name" works as expected.
696
701
697 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
702 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
698 as "chain of command", with priority. API stays the same,
703 as "chain of command", with priority. API stays the same,
699 TryNext exception raised by a hook function signals that
704 TryNext exception raised by a hook function signals that
700 current hook failed and next hook should try handling it, as
705 current hook failed and next hook should try handling it, as
701 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
706 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
702 requested configurable display hook, which is now implemented.
707 requested configurable display hook, which is now implemented.
703
708
704 2006-01-13 Ville Vainio <vivainio@gmail.com>
709 2006-01-13 Ville Vainio <vivainio@gmail.com>
705
710
706 * IPython/platutils*.py: platform specific utility functions,
711 * IPython/platutils*.py: platform specific utility functions,
707 so far only set_term_title is implemented (change terminal
712 so far only set_term_title is implemented (change terminal
708 label in windowing systems). %cd now changes the title to
713 label in windowing systems). %cd now changes the title to
709 current dir.
714 current dir.
710
715
711 * IPython/Release.py: Added myself to "authors" list,
716 * IPython/Release.py: Added myself to "authors" list,
712 had to create new files.
717 had to create new files.
713
718
714 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
719 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
715 shell escape; not a known bug but had potential to be one in the
720 shell escape; not a known bug but had potential to be one in the
716 future.
721 future.
717
722
718 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
723 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
719 extension API for IPython! See the module for usage example. Fix
724 extension API for IPython! See the module for usage example. Fix
720 OInspect for docstring-less magic functions.
725 OInspect for docstring-less magic functions.
721
726
722
727
723 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
728 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
724
729
725 * IPython/iplib.py (raw_input): temporarily deactivate all
730 * IPython/iplib.py (raw_input): temporarily deactivate all
726 attempts at allowing pasting of code with autoindent on. It
731 attempts at allowing pasting of code with autoindent on. It
727 introduced bugs (reported by Prabhu) and I can't seem to find a
732 introduced bugs (reported by Prabhu) and I can't seem to find a
728 robust combination which works in all cases. Will have to revisit
733 robust combination which works in all cases. Will have to revisit
729 later.
734 later.
730
735
731 * IPython/genutils.py: remove isspace() function. We've dropped
736 * IPython/genutils.py: remove isspace() function. We've dropped
732 2.2 compatibility, so it's OK to use the string method.
737 2.2 compatibility, so it's OK to use the string method.
733
738
734 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
739 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
735
740
736 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
741 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
737 matching what NOT to autocall on, to include all python binary
742 matching what NOT to autocall on, to include all python binary
738 operators (including things like 'and', 'or', 'is' and 'in').
743 operators (including things like 'and', 'or', 'is' and 'in').
739 Prompted by a bug report on 'foo & bar', but I realized we had
744 Prompted by a bug report on 'foo & bar', but I realized we had
740 many more potential bug cases with other operators. The regexp is
745 many more potential bug cases with other operators. The regexp is
741 self.re_exclude_auto, it's fairly commented.
746 self.re_exclude_auto, it's fairly commented.
742
747
743 2006-01-12 Ville Vainio <vivainio@gmail.com>
748 2006-01-12 Ville Vainio <vivainio@gmail.com>
744
749
745 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
750 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
746 Prettified and hardened string/backslash quoting with ipsystem(),
751 Prettified and hardened string/backslash quoting with ipsystem(),
747 ipalias() and ipmagic(). Now even \ characters are passed to
752 ipalias() and ipmagic(). Now even \ characters are passed to
748 %magics, !shell escapes and aliases exactly as they are in the
753 %magics, !shell escapes and aliases exactly as they are in the
749 ipython command line. Should improve backslash experience,
754 ipython command line. Should improve backslash experience,
750 particularly in Windows (path delimiter for some commands that
755 particularly in Windows (path delimiter for some commands that
751 won't understand '/'), but Unix benefits as well (regexps). %cd
756 won't understand '/'), but Unix benefits as well (regexps). %cd
752 magic still doesn't support backslash path delimiters, though. Also
757 magic still doesn't support backslash path delimiters, though. Also
753 deleted all pretense of supporting multiline command strings in
758 deleted all pretense of supporting multiline command strings in
754 !system or %magic commands. Thanks to Jerry McRae for suggestions.
759 !system or %magic commands. Thanks to Jerry McRae for suggestions.
755
760
756 * doc/build_doc_instructions.txt added. Documentation on how to
761 * doc/build_doc_instructions.txt added. Documentation on how to
757 use doc/update_manual.py, added yesterday. Both files contributed
762 use doc/update_manual.py, added yesterday. Both files contributed
758 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
763 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
759 doc/*.sh for deprecation at a later date.
764 doc/*.sh for deprecation at a later date.
760
765
761 * /ipython.py Added ipython.py to root directory for
766 * /ipython.py Added ipython.py to root directory for
762 zero-installation (tar xzvf ipython.tgz; cd ipython; python
767 zero-installation (tar xzvf ipython.tgz; cd ipython; python
763 ipython.py) and development convenience (no need to keep doing
768 ipython.py) and development convenience (no need to keep doing
764 "setup.py install" between changes).
769 "setup.py install" between changes).
765
770
766 * Made ! and !! shell escapes work (again) in multiline expressions:
771 * Made ! and !! shell escapes work (again) in multiline expressions:
767 if 1:
772 if 1:
768 !ls
773 !ls
769 !!ls
774 !!ls
770
775
771 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
776 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
772
777
773 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
778 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
774 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
779 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
775 module in case-insensitive installation. Was causing crashes
780 module in case-insensitive installation. Was causing crashes
776 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
781 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
777
782
778 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
783 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
779 <marienz-AT-gentoo.org>, closes
784 <marienz-AT-gentoo.org>, closes
780 http://www.scipy.net/roundup/ipython/issue51.
785 http://www.scipy.net/roundup/ipython/issue51.
781
786
782 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
787 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
783
788
784 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
789 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
785 problem of excessive CPU usage under *nix and keyboard lag under
790 problem of excessive CPU usage under *nix and keyboard lag under
786 win32.
791 win32.
787
792
788 2006-01-10 *** Released version 0.7.0
793 2006-01-10 *** Released version 0.7.0
789
794
790 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
795 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
791
796
792 * IPython/Release.py (revision): tag version number to 0.7.0,
797 * IPython/Release.py (revision): tag version number to 0.7.0,
793 ready for release.
798 ready for release.
794
799
795 * IPython/Magic.py (magic_edit): Add print statement to %edit so
800 * IPython/Magic.py (magic_edit): Add print statement to %edit so
796 it informs the user of the name of the temp. file used. This can
801 it informs the user of the name of the temp. file used. This can
797 help if you decide later to reuse that same file, so you know
802 help if you decide later to reuse that same file, so you know
798 where to copy the info from.
803 where to copy the info from.
799
804
800 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
805 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
801
806
802 * setup_bdist_egg.py: little script to build an egg. Added
807 * setup_bdist_egg.py: little script to build an egg. Added
803 support in the release tools as well.
808 support in the release tools as well.
804
809
805 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
810 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
806
811
807 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
812 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
808 version selection (new -wxversion command line and ipythonrc
813 version selection (new -wxversion command line and ipythonrc
809 parameter). Patch contributed by Arnd Baecker
814 parameter). Patch contributed by Arnd Baecker
810 <arnd.baecker-AT-web.de>.
815 <arnd.baecker-AT-web.de>.
811
816
812 * IPython/iplib.py (embed_mainloop): fix tab-completion in
817 * IPython/iplib.py (embed_mainloop): fix tab-completion in
813 embedded instances, for variables defined at the interactive
818 embedded instances, for variables defined at the interactive
814 prompt of the embedded ipython. Reported by Arnd.
819 prompt of the embedded ipython. Reported by Arnd.
815
820
816 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
821 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
817 it can be used as a (stateful) toggle, or with a direct parameter.
822 it can be used as a (stateful) toggle, or with a direct parameter.
818
823
819 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
824 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
820 could be triggered in certain cases and cause the traceback
825 could be triggered in certain cases and cause the traceback
821 printer not to work.
826 printer not to work.
822
827
823 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
828 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
824
829
825 * IPython/iplib.py (_should_recompile): Small fix, closes
830 * IPython/iplib.py (_should_recompile): Small fix, closes
826 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
831 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
827
832
828 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
833 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
829
834
830 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
835 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
831 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
836 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
832 Moad for help with tracking it down.
837 Moad for help with tracking it down.
833
838
834 * IPython/iplib.py (handle_auto): fix autocall handling for
839 * IPython/iplib.py (handle_auto): fix autocall handling for
835 objects which support BOTH __getitem__ and __call__ (so that f [x]
840 objects which support BOTH __getitem__ and __call__ (so that f [x]
836 is left alone, instead of becoming f([x]) automatically).
841 is left alone, instead of becoming f([x]) automatically).
837
842
838 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
843 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
839 Ville's patch.
844 Ville's patch.
840
845
841 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
846 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
842
847
843 * IPython/iplib.py (handle_auto): changed autocall semantics to
848 * IPython/iplib.py (handle_auto): changed autocall semantics to
844 include 'smart' mode, where the autocall transformation is NOT
849 include 'smart' mode, where the autocall transformation is NOT
845 applied if there are no arguments on the line. This allows you to
850 applied if there are no arguments on the line. This allows you to
846 just type 'foo' if foo is a callable to see its internal form,
851 just type 'foo' if foo is a callable to see its internal form,
847 instead of having it called with no arguments (typically a
852 instead of having it called with no arguments (typically a
848 mistake). The old 'full' autocall still exists: for that, you
853 mistake). The old 'full' autocall still exists: for that, you
849 need to set the 'autocall' parameter to 2 in your ipythonrc file.
854 need to set the 'autocall' parameter to 2 in your ipythonrc file.
850
855
851 * IPython/completer.py (Completer.attr_matches): add
856 * IPython/completer.py (Completer.attr_matches): add
852 tab-completion support for Enthoughts' traits. After a report by
857 tab-completion support for Enthoughts' traits. After a report by
853 Arnd and a patch by Prabhu.
858 Arnd and a patch by Prabhu.
854
859
855 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
860 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
856
861
857 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
862 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
858 Schmolck's patch to fix inspect.getinnerframes().
863 Schmolck's patch to fix inspect.getinnerframes().
859
864
860 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
865 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
861 for embedded instances, regarding handling of namespaces and items
866 for embedded instances, regarding handling of namespaces and items
862 added to the __builtin__ one. Multiple embedded instances and
867 added to the __builtin__ one. Multiple embedded instances and
863 recursive embeddings should work better now (though I'm not sure
868 recursive embeddings should work better now (though I'm not sure
864 I've got all the corner cases fixed, that code is a bit of a brain
869 I've got all the corner cases fixed, that code is a bit of a brain
865 twister).
870 twister).
866
871
867 * IPython/Magic.py (magic_edit): added support to edit in-memory
872 * IPython/Magic.py (magic_edit): added support to edit in-memory
868 macros (automatically creates the necessary temp files). %edit
873 macros (automatically creates the necessary temp files). %edit
869 also doesn't return the file contents anymore, it's just noise.
874 also doesn't return the file contents anymore, it's just noise.
870
875
871 * IPython/completer.py (Completer.attr_matches): revert change to
876 * IPython/completer.py (Completer.attr_matches): revert change to
872 complete only on attributes listed in __all__. I realized it
877 complete only on attributes listed in __all__. I realized it
873 cripples the tab-completion system as a tool for exploring the
878 cripples the tab-completion system as a tool for exploring the
874 internals of unknown libraries (it renders any non-__all__
879 internals of unknown libraries (it renders any non-__all__
875 attribute off-limits). I got bit by this when trying to see
880 attribute off-limits). I got bit by this when trying to see
876 something inside the dis module.
881 something inside the dis module.
877
882
878 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
883 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
879
884
880 * IPython/iplib.py (InteractiveShell.__init__): add .meta
885 * IPython/iplib.py (InteractiveShell.__init__): add .meta
881 namespace for users and extension writers to hold data in. This
886 namespace for users and extension writers to hold data in. This
882 follows the discussion in
887 follows the discussion in
883 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
888 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
884
889
885 * IPython/completer.py (IPCompleter.complete): small patch to help
890 * IPython/completer.py (IPCompleter.complete): small patch to help
886 tab-completion under Emacs, after a suggestion by John Barnard
891 tab-completion under Emacs, after a suggestion by John Barnard
887 <barnarj-AT-ccf.org>.
892 <barnarj-AT-ccf.org>.
888
893
889 * IPython/Magic.py (Magic.extract_input_slices): added support for
894 * IPython/Magic.py (Magic.extract_input_slices): added support for
890 the slice notation in magics to use N-M to represent numbers N...M
895 the slice notation in magics to use N-M to represent numbers N...M
891 (closed endpoints). This is used by %macro and %save.
896 (closed endpoints). This is used by %macro and %save.
892
897
893 * IPython/completer.py (Completer.attr_matches): for modules which
898 * IPython/completer.py (Completer.attr_matches): for modules which
894 define __all__, complete only on those. After a patch by Jeffrey
899 define __all__, complete only on those. After a patch by Jeffrey
895 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
900 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
896 speed up this routine.
901 speed up this routine.
897
902
898 * IPython/Logger.py (Logger.log): fix a history handling bug. I
903 * IPython/Logger.py (Logger.log): fix a history handling bug. I
899 don't know if this is the end of it, but the behavior now is
904 don't know if this is the end of it, but the behavior now is
900 certainly much more correct. Note that coupled with macros,
905 certainly much more correct. Note that coupled with macros,
901 slightly surprising (at first) behavior may occur: a macro will in
906 slightly surprising (at first) behavior may occur: a macro will in
902 general expand to multiple lines of input, so upon exiting, the
907 general expand to multiple lines of input, so upon exiting, the
903 in/out counters will both be bumped by the corresponding amount
908 in/out counters will both be bumped by the corresponding amount
904 (as if the macro's contents had been typed interactively). Typing
909 (as if the macro's contents had been typed interactively). Typing
905 %hist will reveal the intermediate (silently processed) lines.
910 %hist will reveal the intermediate (silently processed) lines.
906
911
907 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
912 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
908 pickle to fail (%run was overwriting __main__ and not restoring
913 pickle to fail (%run was overwriting __main__ and not restoring
909 it, but pickle relies on __main__ to operate).
914 it, but pickle relies on __main__ to operate).
910
915
911 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
916 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
912 using properties, but forgot to make the main InteractiveShell
917 using properties, but forgot to make the main InteractiveShell
913 class a new-style class. Properties fail silently, and
918 class a new-style class. Properties fail silently, and
914 mysteriously, with old-style class (getters work, but
919 mysteriously, with old-style class (getters work, but
915 setters don't do anything).
920 setters don't do anything).
916
921
917 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
922 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
918
923
919 * IPython/Magic.py (magic_history): fix history reporting bug (I
924 * IPython/Magic.py (magic_history): fix history reporting bug (I
920 know some nasties are still there, I just can't seem to find a
925 know some nasties are still there, I just can't seem to find a
921 reproducible test case to track them down; the input history is
926 reproducible test case to track them down; the input history is
922 falling out of sync...)
927 falling out of sync...)
923
928
924 * IPython/iplib.py (handle_shell_escape): fix bug where both
929 * IPython/iplib.py (handle_shell_escape): fix bug where both
925 aliases and system accesses where broken for indented code (such
930 aliases and system accesses where broken for indented code (such
926 as loops).
931 as loops).
927
932
928 * IPython/genutils.py (shell): fix small but critical bug for
933 * IPython/genutils.py (shell): fix small but critical bug for
929 win32 system access.
934 win32 system access.
930
935
931 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
936 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
932
937
933 * IPython/iplib.py (showtraceback): remove use of the
938 * IPython/iplib.py (showtraceback): remove use of the
934 sys.last_{type/value/traceback} structures, which are non
939 sys.last_{type/value/traceback} structures, which are non
935 thread-safe.
940 thread-safe.
936 (_prefilter): change control flow to ensure that we NEVER
941 (_prefilter): change control flow to ensure that we NEVER
937 introspect objects when autocall is off. This will guarantee that
942 introspect objects when autocall is off. This will guarantee that
938 having an input line of the form 'x.y', where access to attribute
943 having an input line of the form 'x.y', where access to attribute
939 'y' has side effects, doesn't trigger the side effect TWICE. It
944 'y' has side effects, doesn't trigger the side effect TWICE. It
940 is important to note that, with autocall on, these side effects
945 is important to note that, with autocall on, these side effects
941 can still happen.
946 can still happen.
942 (ipsystem): new builtin, to complete the ip{magic/alias/system}
947 (ipsystem): new builtin, to complete the ip{magic/alias/system}
943 trio. IPython offers these three kinds of special calls which are
948 trio. IPython offers these three kinds of special calls which are
944 not python code, and it's a good thing to have their call method
949 not python code, and it's a good thing to have their call method
945 be accessible as pure python functions (not just special syntax at
950 be accessible as pure python functions (not just special syntax at
946 the command line). It gives us a better internal implementation
951 the command line). It gives us a better internal implementation
947 structure, as well as exposing these for user scripting more
952 structure, as well as exposing these for user scripting more
948 cleanly.
953 cleanly.
949
954
950 * IPython/macro.py (Macro.__init__): moved macros to a standalone
955 * IPython/macro.py (Macro.__init__): moved macros to a standalone
951 file. Now that they'll be more likely to be used with the
956 file. Now that they'll be more likely to be used with the
952 persistance system (%store), I want to make sure their module path
957 persistance system (%store), I want to make sure their module path
953 doesn't change in the future, so that we don't break things for
958 doesn't change in the future, so that we don't break things for
954 users' persisted data.
959 users' persisted data.
955
960
956 * IPython/iplib.py (autoindent_update): move indentation
961 * IPython/iplib.py (autoindent_update): move indentation
957 management into the _text_ processing loop, not the keyboard
962 management into the _text_ processing loop, not the keyboard
958 interactive one. This is necessary to correctly process non-typed
963 interactive one. This is necessary to correctly process non-typed
959 multiline input (such as macros).
964 multiline input (such as macros).
960
965
961 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
966 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
962 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
967 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
963 which was producing problems in the resulting manual.
968 which was producing problems in the resulting manual.
964 (magic_whos): improve reporting of instances (show their class,
969 (magic_whos): improve reporting of instances (show their class,
965 instead of simply printing 'instance' which isn't terribly
970 instead of simply printing 'instance' which isn't terribly
966 informative).
971 informative).
967
972
968 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
973 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
969 (minor mods) to support network shares under win32.
974 (minor mods) to support network shares under win32.
970
975
971 * IPython/winconsole.py (get_console_size): add new winconsole
976 * IPython/winconsole.py (get_console_size): add new winconsole
972 module and fixes to page_dumb() to improve its behavior under
977 module and fixes to page_dumb() to improve its behavior under
973 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
978 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
974
979
975 * IPython/Magic.py (Macro): simplified Macro class to just
980 * IPython/Magic.py (Macro): simplified Macro class to just
976 subclass list. We've had only 2.2 compatibility for a very long
981 subclass list. We've had only 2.2 compatibility for a very long
977 time, yet I was still avoiding subclassing the builtin types. No
982 time, yet I was still avoiding subclassing the builtin types. No
978 more (I'm also starting to use properties, though I won't shift to
983 more (I'm also starting to use properties, though I won't shift to
979 2.3-specific features quite yet).
984 2.3-specific features quite yet).
980 (magic_store): added Ville's patch for lightweight variable
985 (magic_store): added Ville's patch for lightweight variable
981 persistence, after a request on the user list by Matt Wilkie
986 persistence, after a request on the user list by Matt Wilkie
982 <maphew-AT-gmail.com>. The new %store magic's docstring has full
987 <maphew-AT-gmail.com>. The new %store magic's docstring has full
983 details.
988 details.
984
989
985 * IPython/iplib.py (InteractiveShell.post_config_initialization):
990 * IPython/iplib.py (InteractiveShell.post_config_initialization):
986 changed the default logfile name from 'ipython.log' to
991 changed the default logfile name from 'ipython.log' to
987 'ipython_log.py'. These logs are real python files, and now that
992 'ipython_log.py'. These logs are real python files, and now that
988 we have much better multiline support, people are more likely to
993 we have much better multiline support, people are more likely to
989 want to use them as such. Might as well name them correctly.
994 want to use them as such. Might as well name them correctly.
990
995
991 * IPython/Magic.py: substantial cleanup. While we can't stop
996 * IPython/Magic.py: substantial cleanup. While we can't stop
992 using magics as mixins, due to the existing customizations 'out
997 using magics as mixins, due to the existing customizations 'out
993 there' which rely on the mixin naming conventions, at least I
998 there' which rely on the mixin naming conventions, at least I
994 cleaned out all cross-class name usage. So once we are OK with
999 cleaned out all cross-class name usage. So once we are OK with
995 breaking compatibility, the two systems can be separated.
1000 breaking compatibility, the two systems can be separated.
996
1001
997 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1002 * IPython/Logger.py: major cleanup. This one is NOT a mixin
998 anymore, and the class is a fair bit less hideous as well. New
1003 anymore, and the class is a fair bit less hideous as well. New
999 features were also introduced: timestamping of input, and logging
1004 features were also introduced: timestamping of input, and logging
1000 of output results. These are user-visible with the -t and -o
1005 of output results. These are user-visible with the -t and -o
1001 options to %logstart. Closes
1006 options to %logstart. Closes
1002 http://www.scipy.net/roundup/ipython/issue11 and a request by
1007 http://www.scipy.net/roundup/ipython/issue11 and a request by
1003 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1008 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1004
1009
1005 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1010 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1006
1011
1007 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1012 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1008 better handle backslashes in paths. See the thread 'More Windows
1013 better handle backslashes in paths. See the thread 'More Windows
1009 questions part 2 - \/ characters revisited' on the iypthon user
1014 questions part 2 - \/ characters revisited' on the iypthon user
1010 list:
1015 list:
1011 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1016 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1012
1017
1013 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1018 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1014
1019
1015 (InteractiveShell.__init__): change threaded shells to not use the
1020 (InteractiveShell.__init__): change threaded shells to not use the
1016 ipython crash handler. This was causing more problems than not,
1021 ipython crash handler. This was causing more problems than not,
1017 as exceptions in the main thread (GUI code, typically) would
1022 as exceptions in the main thread (GUI code, typically) would
1018 always show up as a 'crash', when they really weren't.
1023 always show up as a 'crash', when they really weren't.
1019
1024
1020 The colors and exception mode commands (%colors/%xmode) have been
1025 The colors and exception mode commands (%colors/%xmode) have been
1021 synchronized to also take this into account, so users can get
1026 synchronized to also take this into account, so users can get
1022 verbose exceptions for their threaded code as well. I also added
1027 verbose exceptions for their threaded code as well. I also added
1023 support for activating pdb inside this exception handler as well,
1028 support for activating pdb inside this exception handler as well,
1024 so now GUI authors can use IPython's enhanced pdb at runtime.
1029 so now GUI authors can use IPython's enhanced pdb at runtime.
1025
1030
1026 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1031 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1027 true by default, and add it to the shipped ipythonrc file. Since
1032 true by default, and add it to the shipped ipythonrc file. Since
1028 this asks the user before proceeding, I think it's OK to make it
1033 this asks the user before proceeding, I think it's OK to make it
1029 true by default.
1034 true by default.
1030
1035
1031 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1036 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1032 of the previous special-casing of input in the eval loop. I think
1037 of the previous special-casing of input in the eval loop. I think
1033 this is cleaner, as they really are commands and shouldn't have
1038 this is cleaner, as they really are commands and shouldn't have
1034 a special role in the middle of the core code.
1039 a special role in the middle of the core code.
1035
1040
1036 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1041 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1037
1042
1038 * IPython/iplib.py (edit_syntax_error): added support for
1043 * IPython/iplib.py (edit_syntax_error): added support for
1039 automatically reopening the editor if the file had a syntax error
1044 automatically reopening the editor if the file had a syntax error
1040 in it. Thanks to scottt who provided the patch at:
1045 in it. Thanks to scottt who provided the patch at:
1041 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1046 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1042 version committed).
1047 version committed).
1043
1048
1044 * IPython/iplib.py (handle_normal): add suport for multi-line
1049 * IPython/iplib.py (handle_normal): add suport for multi-line
1045 input with emtpy lines. This fixes
1050 input with emtpy lines. This fixes
1046 http://www.scipy.net/roundup/ipython/issue43 and a similar
1051 http://www.scipy.net/roundup/ipython/issue43 and a similar
1047 discussion on the user list.
1052 discussion on the user list.
1048
1053
1049 WARNING: a behavior change is necessarily introduced to support
1054 WARNING: a behavior change is necessarily introduced to support
1050 blank lines: now a single blank line with whitespace does NOT
1055 blank lines: now a single blank line with whitespace does NOT
1051 break the input loop, which means that when autoindent is on, by
1056 break the input loop, which means that when autoindent is on, by
1052 default hitting return on the next (indented) line does NOT exit.
1057 default hitting return on the next (indented) line does NOT exit.
1053
1058
1054 Instead, to exit a multiline input you can either have:
1059 Instead, to exit a multiline input you can either have:
1055
1060
1056 - TWO whitespace lines (just hit return again), or
1061 - TWO whitespace lines (just hit return again), or
1057 - a single whitespace line of a different length than provided
1062 - a single whitespace line of a different length than provided
1058 by the autoindent (add or remove a space).
1063 by the autoindent (add or remove a space).
1059
1064
1060 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1065 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1061 module to better organize all readline-related functionality.
1066 module to better organize all readline-related functionality.
1062 I've deleted FlexCompleter and put all completion clases here.
1067 I've deleted FlexCompleter and put all completion clases here.
1063
1068
1064 * IPython/iplib.py (raw_input): improve indentation management.
1069 * IPython/iplib.py (raw_input): improve indentation management.
1065 It is now possible to paste indented code with autoindent on, and
1070 It is now possible to paste indented code with autoindent on, and
1066 the code is interpreted correctly (though it still looks bad on
1071 the code is interpreted correctly (though it still looks bad on
1067 screen, due to the line-oriented nature of ipython).
1072 screen, due to the line-oriented nature of ipython).
1068 (MagicCompleter.complete): change behavior so that a TAB key on an
1073 (MagicCompleter.complete): change behavior so that a TAB key on an
1069 otherwise empty line actually inserts a tab, instead of completing
1074 otherwise empty line actually inserts a tab, instead of completing
1070 on the entire global namespace. This makes it easier to use the
1075 on the entire global namespace. This makes it easier to use the
1071 TAB key for indentation. After a request by Hans Meine
1076 TAB key for indentation. After a request by Hans Meine
1072 <hans_meine-AT-gmx.net>
1077 <hans_meine-AT-gmx.net>
1073 (_prefilter): add support so that typing plain 'exit' or 'quit'
1078 (_prefilter): add support so that typing plain 'exit' or 'quit'
1074 does a sensible thing. Originally I tried to deviate as little as
1079 does a sensible thing. Originally I tried to deviate as little as
1075 possible from the default python behavior, but even that one may
1080 possible from the default python behavior, but even that one may
1076 change in this direction (thread on python-dev to that effect).
1081 change in this direction (thread on python-dev to that effect).
1077 Regardless, ipython should do the right thing even if CPython's
1082 Regardless, ipython should do the right thing even if CPython's
1078 '>>>' prompt doesn't.
1083 '>>>' prompt doesn't.
1079 (InteractiveShell): removed subclassing code.InteractiveConsole
1084 (InteractiveShell): removed subclassing code.InteractiveConsole
1080 class. By now we'd overridden just about all of its methods: I've
1085 class. By now we'd overridden just about all of its methods: I've
1081 copied the remaining two over, and now ipython is a standalone
1086 copied the remaining two over, and now ipython is a standalone
1082 class. This will provide a clearer picture for the chainsaw
1087 class. This will provide a clearer picture for the chainsaw
1083 branch refactoring.
1088 branch refactoring.
1084
1089
1085 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1090 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1086
1091
1087 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1092 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1088 failures for objects which break when dir() is called on them.
1093 failures for objects which break when dir() is called on them.
1089
1094
1090 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1095 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1091 distinct local and global namespaces in the completer API. This
1096 distinct local and global namespaces in the completer API. This
1092 change allows us to properly handle completion with distinct
1097 change allows us to properly handle completion with distinct
1093 scopes, including in embedded instances (this had never really
1098 scopes, including in embedded instances (this had never really
1094 worked correctly).
1099 worked correctly).
1095
1100
1096 Note: this introduces a change in the constructor for
1101 Note: this introduces a change in the constructor for
1097 MagicCompleter, as a new global_namespace parameter is now the
1102 MagicCompleter, as a new global_namespace parameter is now the
1098 second argument (the others were bumped one position).
1103 second argument (the others were bumped one position).
1099
1104
1100 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1105 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1101
1106
1102 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1107 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1103 embedded instances (which can be done now thanks to Vivian's
1108 embedded instances (which can be done now thanks to Vivian's
1104 frame-handling fixes for pdb).
1109 frame-handling fixes for pdb).
1105 (InteractiveShell.__init__): Fix namespace handling problem in
1110 (InteractiveShell.__init__): Fix namespace handling problem in
1106 embedded instances. We were overwriting __main__ unconditionally,
1111 embedded instances. We were overwriting __main__ unconditionally,
1107 and this should only be done for 'full' (non-embedded) IPython;
1112 and this should only be done for 'full' (non-embedded) IPython;
1108 embedded instances must respect the caller's __main__. Thanks to
1113 embedded instances must respect the caller's __main__. Thanks to
1109 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1114 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1110
1115
1111 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1116 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1112
1117
1113 * setup.py: added download_url to setup(). This registers the
1118 * setup.py: added download_url to setup(). This registers the
1114 download address at PyPI, which is not only useful to humans
1119 download address at PyPI, which is not only useful to humans
1115 browsing the site, but is also picked up by setuptools (the Eggs
1120 browsing the site, but is also picked up by setuptools (the Eggs
1116 machinery). Thanks to Ville and R. Kern for the info/discussion
1121 machinery). Thanks to Ville and R. Kern for the info/discussion
1117 on this.
1122 on this.
1118
1123
1119 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1124 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1120
1125
1121 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1126 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1122 This brings a lot of nice functionality to the pdb mode, which now
1127 This brings a lot of nice functionality to the pdb mode, which now
1123 has tab-completion, syntax highlighting, and better stack handling
1128 has tab-completion, syntax highlighting, and better stack handling
1124 than before. Many thanks to Vivian De Smedt
1129 than before. Many thanks to Vivian De Smedt
1125 <vivian-AT-vdesmedt.com> for the original patches.
1130 <vivian-AT-vdesmedt.com> for the original patches.
1126
1131
1127 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1132 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1128
1133
1129 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1134 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1130 sequence to consistently accept the banner argument. The
1135 sequence to consistently accept the banner argument. The
1131 inconsistency was tripping SAGE, thanks to Gary Zablackis
1136 inconsistency was tripping SAGE, thanks to Gary Zablackis
1132 <gzabl-AT-yahoo.com> for the report.
1137 <gzabl-AT-yahoo.com> for the report.
1133
1138
1134 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1139 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1135
1140
1136 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1141 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1137 Fix bug where a naked 'alias' call in the ipythonrc file would
1142 Fix bug where a naked 'alias' call in the ipythonrc file would
1138 cause a crash. Bug reported by Jorgen Stenarson.
1143 cause a crash. Bug reported by Jorgen Stenarson.
1139
1144
1140 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1145 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1141
1146
1142 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1147 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1143 startup time.
1148 startup time.
1144
1149
1145 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1150 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1146 instances had introduced a bug with globals in normal code. Now
1151 instances had introduced a bug with globals in normal code. Now
1147 it's working in all cases.
1152 it's working in all cases.
1148
1153
1149 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1154 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1150 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1155 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1151 has been introduced to set the default case sensitivity of the
1156 has been introduced to set the default case sensitivity of the
1152 searches. Users can still select either mode at runtime on a
1157 searches. Users can still select either mode at runtime on a
1153 per-search basis.
1158 per-search basis.
1154
1159
1155 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1160 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1156
1161
1157 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1162 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1158 attributes in wildcard searches for subclasses. Modified version
1163 attributes in wildcard searches for subclasses. Modified version
1159 of a patch by Jorgen.
1164 of a patch by Jorgen.
1160
1165
1161 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1166 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1162
1167
1163 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1168 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1164 embedded instances. I added a user_global_ns attribute to the
1169 embedded instances. I added a user_global_ns attribute to the
1165 InteractiveShell class to handle this.
1170 InteractiveShell class to handle this.
1166
1171
1167 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1172 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1168
1173
1169 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1174 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1170 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1175 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1171 (reported under win32, but may happen also in other platforms).
1176 (reported under win32, but may happen also in other platforms).
1172 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1177 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1173
1178
1174 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1179 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1175
1180
1176 * IPython/Magic.py (magic_psearch): new support for wildcard
1181 * IPython/Magic.py (magic_psearch): new support for wildcard
1177 patterns. Now, typing ?a*b will list all names which begin with a
1182 patterns. Now, typing ?a*b will list all names which begin with a
1178 and end in b, for example. The %psearch magic has full
1183 and end in b, for example. The %psearch magic has full
1179 docstrings. Many thanks to JΓΆrgen Stenarson
1184 docstrings. Many thanks to JΓΆrgen Stenarson
1180 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1185 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1181 implementing this functionality.
1186 implementing this functionality.
1182
1187
1183 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1188 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1184
1189
1185 * Manual: fixed long-standing annoyance of double-dashes (as in
1190 * Manual: fixed long-standing annoyance of double-dashes (as in
1186 --prefix=~, for example) being stripped in the HTML version. This
1191 --prefix=~, for example) being stripped in the HTML version. This
1187 is a latex2html bug, but a workaround was provided. Many thanks
1192 is a latex2html bug, but a workaround was provided. Many thanks
1188 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1193 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1189 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1194 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1190 rolling. This seemingly small issue had tripped a number of users
1195 rolling. This seemingly small issue had tripped a number of users
1191 when first installing, so I'm glad to see it gone.
1196 when first installing, so I'm glad to see it gone.
1192
1197
1193 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1198 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1194
1199
1195 * IPython/Extensions/numeric_formats.py: fix missing import,
1200 * IPython/Extensions/numeric_formats.py: fix missing import,
1196 reported by Stephen Walton.
1201 reported by Stephen Walton.
1197
1202
1198 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1203 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1199
1204
1200 * IPython/demo.py: finish demo module, fully documented now.
1205 * IPython/demo.py: finish demo module, fully documented now.
1201
1206
1202 * IPython/genutils.py (file_read): simple little utility to read a
1207 * IPython/genutils.py (file_read): simple little utility to read a
1203 file and ensure it's closed afterwards.
1208 file and ensure it's closed afterwards.
1204
1209
1205 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1210 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1206
1211
1207 * IPython/demo.py (Demo.__init__): added support for individually
1212 * IPython/demo.py (Demo.__init__): added support for individually
1208 tagging blocks for automatic execution.
1213 tagging blocks for automatic execution.
1209
1214
1210 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1215 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1211 syntax-highlighted python sources, requested by John.
1216 syntax-highlighted python sources, requested by John.
1212
1217
1213 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1218 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1214
1219
1215 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1220 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1216 finishing.
1221 finishing.
1217
1222
1218 * IPython/genutils.py (shlex_split): moved from Magic to here,
1223 * IPython/genutils.py (shlex_split): moved from Magic to here,
1219 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1224 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1220
1225
1221 * IPython/demo.py (Demo.__init__): added support for silent
1226 * IPython/demo.py (Demo.__init__): added support for silent
1222 blocks, improved marks as regexps, docstrings written.
1227 blocks, improved marks as regexps, docstrings written.
1223 (Demo.__init__): better docstring, added support for sys.argv.
1228 (Demo.__init__): better docstring, added support for sys.argv.
1224
1229
1225 * IPython/genutils.py (marquee): little utility used by the demo
1230 * IPython/genutils.py (marquee): little utility used by the demo
1226 code, handy in general.
1231 code, handy in general.
1227
1232
1228 * IPython/demo.py (Demo.__init__): new class for interactive
1233 * IPython/demo.py (Demo.__init__): new class for interactive
1229 demos. Not documented yet, I just wrote it in a hurry for
1234 demos. Not documented yet, I just wrote it in a hurry for
1230 scipy'05. Will docstring later.
1235 scipy'05. Will docstring later.
1231
1236
1232 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1237 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1233
1238
1234 * IPython/Shell.py (sigint_handler): Drastic simplification which
1239 * IPython/Shell.py (sigint_handler): Drastic simplification which
1235 also seems to make Ctrl-C work correctly across threads! This is
1240 also seems to make Ctrl-C work correctly across threads! This is
1236 so simple, that I can't beleive I'd missed it before. Needs more
1241 so simple, that I can't beleive I'd missed it before. Needs more
1237 testing, though.
1242 testing, though.
1238 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1243 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1239 like this before...
1244 like this before...
1240
1245
1241 * IPython/genutils.py (get_home_dir): add protection against
1246 * IPython/genutils.py (get_home_dir): add protection against
1242 non-dirs in win32 registry.
1247 non-dirs in win32 registry.
1243
1248
1244 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1249 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1245 bug where dict was mutated while iterating (pysh crash).
1250 bug where dict was mutated while iterating (pysh crash).
1246
1251
1247 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1252 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1248
1253
1249 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1254 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1250 spurious newlines added by this routine. After a report by
1255 spurious newlines added by this routine. After a report by
1251 F. Mantegazza.
1256 F. Mantegazza.
1252
1257
1253 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1258 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1254
1259
1255 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1260 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1256 calls. These were a leftover from the GTK 1.x days, and can cause
1261 calls. These were a leftover from the GTK 1.x days, and can cause
1257 problems in certain cases (after a report by John Hunter).
1262 problems in certain cases (after a report by John Hunter).
1258
1263
1259 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1264 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1260 os.getcwd() fails at init time. Thanks to patch from David Remahl
1265 os.getcwd() fails at init time. Thanks to patch from David Remahl
1261 <chmod007-AT-mac.com>.
1266 <chmod007-AT-mac.com>.
1262 (InteractiveShell.__init__): prevent certain special magics from
1267 (InteractiveShell.__init__): prevent certain special magics from
1263 being shadowed by aliases. Closes
1268 being shadowed by aliases. Closes
1264 http://www.scipy.net/roundup/ipython/issue41.
1269 http://www.scipy.net/roundup/ipython/issue41.
1265
1270
1266 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1271 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1267
1272
1268 * IPython/iplib.py (InteractiveShell.complete): Added new
1273 * IPython/iplib.py (InteractiveShell.complete): Added new
1269 top-level completion method to expose the completion mechanism
1274 top-level completion method to expose the completion mechanism
1270 beyond readline-based environments.
1275 beyond readline-based environments.
1271
1276
1272 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1277 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1273
1278
1274 * tools/ipsvnc (svnversion): fix svnversion capture.
1279 * tools/ipsvnc (svnversion): fix svnversion capture.
1275
1280
1276 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1281 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1277 attribute to self, which was missing. Before, it was set by a
1282 attribute to self, which was missing. Before, it was set by a
1278 routine which in certain cases wasn't being called, so the
1283 routine which in certain cases wasn't being called, so the
1279 instance could end up missing the attribute. This caused a crash.
1284 instance could end up missing the attribute. This caused a crash.
1280 Closes http://www.scipy.net/roundup/ipython/issue40.
1285 Closes http://www.scipy.net/roundup/ipython/issue40.
1281
1286
1282 2005-08-16 Fernando Perez <fperez@colorado.edu>
1287 2005-08-16 Fernando Perez <fperez@colorado.edu>
1283
1288
1284 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1289 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1285 contains non-string attribute. Closes
1290 contains non-string attribute. Closes
1286 http://www.scipy.net/roundup/ipython/issue38.
1291 http://www.scipy.net/roundup/ipython/issue38.
1287
1292
1288 2005-08-14 Fernando Perez <fperez@colorado.edu>
1293 2005-08-14 Fernando Perez <fperez@colorado.edu>
1289
1294
1290 * tools/ipsvnc: Minor improvements, to add changeset info.
1295 * tools/ipsvnc: Minor improvements, to add changeset info.
1291
1296
1292 2005-08-12 Fernando Perez <fperez@colorado.edu>
1297 2005-08-12 Fernando Perez <fperez@colorado.edu>
1293
1298
1294 * IPython/iplib.py (runsource): remove self.code_to_run_src
1299 * IPython/iplib.py (runsource): remove self.code_to_run_src
1295 attribute. I realized this is nothing more than
1300 attribute. I realized this is nothing more than
1296 '\n'.join(self.buffer), and having the same data in two different
1301 '\n'.join(self.buffer), and having the same data in two different
1297 places is just asking for synchronization bugs. This may impact
1302 places is just asking for synchronization bugs. This may impact
1298 people who have custom exception handlers, so I need to warn
1303 people who have custom exception handlers, so I need to warn
1299 ipython-dev about it (F. Mantegazza may use them).
1304 ipython-dev about it (F. Mantegazza may use them).
1300
1305
1301 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1306 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1302
1307
1303 * IPython/genutils.py: fix 2.2 compatibility (generators)
1308 * IPython/genutils.py: fix 2.2 compatibility (generators)
1304
1309
1305 2005-07-18 Fernando Perez <fperez@colorado.edu>
1310 2005-07-18 Fernando Perez <fperez@colorado.edu>
1306
1311
1307 * IPython/genutils.py (get_home_dir): fix to help users with
1312 * IPython/genutils.py (get_home_dir): fix to help users with
1308 invalid $HOME under win32.
1313 invalid $HOME under win32.
1309
1314
1310 2005-07-17 Fernando Perez <fperez@colorado.edu>
1315 2005-07-17 Fernando Perez <fperez@colorado.edu>
1311
1316
1312 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1317 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1313 some old hacks and clean up a bit other routines; code should be
1318 some old hacks and clean up a bit other routines; code should be
1314 simpler and a bit faster.
1319 simpler and a bit faster.
1315
1320
1316 * IPython/iplib.py (interact): removed some last-resort attempts
1321 * IPython/iplib.py (interact): removed some last-resort attempts
1317 to survive broken stdout/stderr. That code was only making it
1322 to survive broken stdout/stderr. That code was only making it
1318 harder to abstract out the i/o (necessary for gui integration),
1323 harder to abstract out the i/o (necessary for gui integration),
1319 and the crashes it could prevent were extremely rare in practice
1324 and the crashes it could prevent were extremely rare in practice
1320 (besides being fully user-induced in a pretty violent manner).
1325 (besides being fully user-induced in a pretty violent manner).
1321
1326
1322 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1327 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1323 Nothing major yet, but the code is simpler to read; this should
1328 Nothing major yet, but the code is simpler to read; this should
1324 make it easier to do more serious modifications in the future.
1329 make it easier to do more serious modifications in the future.
1325
1330
1326 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1331 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1327 which broke in .15 (thanks to a report by Ville).
1332 which broke in .15 (thanks to a report by Ville).
1328
1333
1329 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1334 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1330 be quite correct, I know next to nothing about unicode). This
1335 be quite correct, I know next to nothing about unicode). This
1331 will allow unicode strings to be used in prompts, amongst other
1336 will allow unicode strings to be used in prompts, amongst other
1332 cases. It also will prevent ipython from crashing when unicode
1337 cases. It also will prevent ipython from crashing when unicode
1333 shows up unexpectedly in many places. If ascii encoding fails, we
1338 shows up unexpectedly in many places. If ascii encoding fails, we
1334 assume utf_8. Currently the encoding is not a user-visible
1339 assume utf_8. Currently the encoding is not a user-visible
1335 setting, though it could be made so if there is demand for it.
1340 setting, though it could be made so if there is demand for it.
1336
1341
1337 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1342 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1338
1343
1339 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1344 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1340
1345
1341 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1346 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1342
1347
1343 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1348 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1344 code can work transparently for 2.2/2.3.
1349 code can work transparently for 2.2/2.3.
1345
1350
1346 2005-07-16 Fernando Perez <fperez@colorado.edu>
1351 2005-07-16 Fernando Perez <fperez@colorado.edu>
1347
1352
1348 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1353 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1349 out of the color scheme table used for coloring exception
1354 out of the color scheme table used for coloring exception
1350 tracebacks. This allows user code to add new schemes at runtime.
1355 tracebacks. This allows user code to add new schemes at runtime.
1351 This is a minimally modified version of the patch at
1356 This is a minimally modified version of the patch at
1352 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1357 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1353 for the contribution.
1358 for the contribution.
1354
1359
1355 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1360 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1356 slightly modified version of the patch in
1361 slightly modified version of the patch in
1357 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1362 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1358 to remove the previous try/except solution (which was costlier).
1363 to remove the previous try/except solution (which was costlier).
1359 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1364 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1360
1365
1361 2005-06-08 Fernando Perez <fperez@colorado.edu>
1366 2005-06-08 Fernando Perez <fperez@colorado.edu>
1362
1367
1363 * IPython/iplib.py (write/write_err): Add methods to abstract all
1368 * IPython/iplib.py (write/write_err): Add methods to abstract all
1364 I/O a bit more.
1369 I/O a bit more.
1365
1370
1366 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1371 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1367 warning, reported by Aric Hagberg, fix by JD Hunter.
1372 warning, reported by Aric Hagberg, fix by JD Hunter.
1368
1373
1369 2005-06-02 *** Released version 0.6.15
1374 2005-06-02 *** Released version 0.6.15
1370
1375
1371 2005-06-01 Fernando Perez <fperez@colorado.edu>
1376 2005-06-01 Fernando Perez <fperez@colorado.edu>
1372
1377
1373 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1378 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1374 tab-completion of filenames within open-quoted strings. Note that
1379 tab-completion of filenames within open-quoted strings. Note that
1375 this requires that in ~/.ipython/ipythonrc, users change the
1380 this requires that in ~/.ipython/ipythonrc, users change the
1376 readline delimiters configuration to read:
1381 readline delimiters configuration to read:
1377
1382
1378 readline_remove_delims -/~
1383 readline_remove_delims -/~
1379
1384
1380
1385
1381 2005-05-31 *** Released version 0.6.14
1386 2005-05-31 *** Released version 0.6.14
1382
1387
1383 2005-05-29 Fernando Perez <fperez@colorado.edu>
1388 2005-05-29 Fernando Perez <fperez@colorado.edu>
1384
1389
1385 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1390 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1386 with files not on the filesystem. Reported by Eliyahu Sandler
1391 with files not on the filesystem. Reported by Eliyahu Sandler
1387 <eli@gondolin.net>
1392 <eli@gondolin.net>
1388
1393
1389 2005-05-22 Fernando Perez <fperez@colorado.edu>
1394 2005-05-22 Fernando Perez <fperez@colorado.edu>
1390
1395
1391 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1396 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1392 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1397 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1393
1398
1394 2005-05-19 Fernando Perez <fperez@colorado.edu>
1399 2005-05-19 Fernando Perez <fperez@colorado.edu>
1395
1400
1396 * IPython/iplib.py (safe_execfile): close a file which could be
1401 * IPython/iplib.py (safe_execfile): close a file which could be
1397 left open (causing problems in win32, which locks open files).
1402 left open (causing problems in win32, which locks open files).
1398 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1403 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1399
1404
1400 2005-05-18 Fernando Perez <fperez@colorado.edu>
1405 2005-05-18 Fernando Perez <fperez@colorado.edu>
1401
1406
1402 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1407 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1403 keyword arguments correctly to safe_execfile().
1408 keyword arguments correctly to safe_execfile().
1404
1409
1405 2005-05-13 Fernando Perez <fperez@colorado.edu>
1410 2005-05-13 Fernando Perez <fperez@colorado.edu>
1406
1411
1407 * ipython.1: Added info about Qt to manpage, and threads warning
1412 * ipython.1: Added info about Qt to manpage, and threads warning
1408 to usage page (invoked with --help).
1413 to usage page (invoked with --help).
1409
1414
1410 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1415 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1411 new matcher (it goes at the end of the priority list) to do
1416 new matcher (it goes at the end of the priority list) to do
1412 tab-completion on named function arguments. Submitted by George
1417 tab-completion on named function arguments. Submitted by George
1413 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1418 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1414 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1419 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1415 for more details.
1420 for more details.
1416
1421
1417 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1422 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1418 SystemExit exceptions in the script being run. Thanks to a report
1423 SystemExit exceptions in the script being run. Thanks to a report
1419 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1424 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1420 producing very annoying behavior when running unit tests.
1425 producing very annoying behavior when running unit tests.
1421
1426
1422 2005-05-12 Fernando Perez <fperez@colorado.edu>
1427 2005-05-12 Fernando Perez <fperez@colorado.edu>
1423
1428
1424 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1429 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1425 which I'd broken (again) due to a changed regexp. In the process,
1430 which I'd broken (again) due to a changed regexp. In the process,
1426 added ';' as an escape to auto-quote the whole line without
1431 added ';' as an escape to auto-quote the whole line without
1427 splitting its arguments. Thanks to a report by Jerry McRae
1432 splitting its arguments. Thanks to a report by Jerry McRae
1428 <qrs0xyc02-AT-sneakemail.com>.
1433 <qrs0xyc02-AT-sneakemail.com>.
1429
1434
1430 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1435 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1431 possible crashes caused by a TokenError. Reported by Ed Schofield
1436 possible crashes caused by a TokenError. Reported by Ed Schofield
1432 <schofield-AT-ftw.at>.
1437 <schofield-AT-ftw.at>.
1433
1438
1434 2005-05-06 Fernando Perez <fperez@colorado.edu>
1439 2005-05-06 Fernando Perez <fperez@colorado.edu>
1435
1440
1436 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1441 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1437
1442
1438 2005-04-29 Fernando Perez <fperez@colorado.edu>
1443 2005-04-29 Fernando Perez <fperez@colorado.edu>
1439
1444
1440 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1445 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1441 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1446 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1442 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1447 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1443 which provides support for Qt interactive usage (similar to the
1448 which provides support for Qt interactive usage (similar to the
1444 existing one for WX and GTK). This had been often requested.
1449 existing one for WX and GTK). This had been often requested.
1445
1450
1446 2005-04-14 *** Released version 0.6.13
1451 2005-04-14 *** Released version 0.6.13
1447
1452
1448 2005-04-08 Fernando Perez <fperez@colorado.edu>
1453 2005-04-08 Fernando Perez <fperez@colorado.edu>
1449
1454
1450 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1455 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1451 from _ofind, which gets called on almost every input line. Now,
1456 from _ofind, which gets called on almost every input line. Now,
1452 we only try to get docstrings if they are actually going to be
1457 we only try to get docstrings if they are actually going to be
1453 used (the overhead of fetching unnecessary docstrings can be
1458 used (the overhead of fetching unnecessary docstrings can be
1454 noticeable for certain objects, such as Pyro proxies).
1459 noticeable for certain objects, such as Pyro proxies).
1455
1460
1456 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1461 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1457 for completers. For some reason I had been passing them the state
1462 for completers. For some reason I had been passing them the state
1458 variable, which completers never actually need, and was in
1463 variable, which completers never actually need, and was in
1459 conflict with the rlcompleter API. Custom completers ONLY need to
1464 conflict with the rlcompleter API. Custom completers ONLY need to
1460 take the text parameter.
1465 take the text parameter.
1461
1466
1462 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1467 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1463 work correctly in pysh. I've also moved all the logic which used
1468 work correctly in pysh. I've also moved all the logic which used
1464 to be in pysh.py here, which will prevent problems with future
1469 to be in pysh.py here, which will prevent problems with future
1465 upgrades. However, this time I must warn users to update their
1470 upgrades. However, this time I must warn users to update their
1466 pysh profile to include the line
1471 pysh profile to include the line
1467
1472
1468 import_all IPython.Extensions.InterpreterExec
1473 import_all IPython.Extensions.InterpreterExec
1469
1474
1470 because otherwise things won't work for them. They MUST also
1475 because otherwise things won't work for them. They MUST also
1471 delete pysh.py and the line
1476 delete pysh.py and the line
1472
1477
1473 execfile pysh.py
1478 execfile pysh.py
1474
1479
1475 from their ipythonrc-pysh.
1480 from their ipythonrc-pysh.
1476
1481
1477 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1482 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1478 robust in the face of objects whose dir() returns non-strings
1483 robust in the face of objects whose dir() returns non-strings
1479 (which it shouldn't, but some broken libs like ITK do). Thanks to
1484 (which it shouldn't, but some broken libs like ITK do). Thanks to
1480 a patch by John Hunter (implemented differently, though). Also
1485 a patch by John Hunter (implemented differently, though). Also
1481 minor improvements by using .extend instead of + on lists.
1486 minor improvements by using .extend instead of + on lists.
1482
1487
1483 * pysh.py:
1488 * pysh.py:
1484
1489
1485 2005-04-06 Fernando Perez <fperez@colorado.edu>
1490 2005-04-06 Fernando Perez <fperez@colorado.edu>
1486
1491
1487 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1492 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1488 by default, so that all users benefit from it. Those who don't
1493 by default, so that all users benefit from it. Those who don't
1489 want it can still turn it off.
1494 want it can still turn it off.
1490
1495
1491 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1496 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1492 config file, I'd forgotten about this, so users were getting it
1497 config file, I'd forgotten about this, so users were getting it
1493 off by default.
1498 off by default.
1494
1499
1495 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1500 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1496 consistency. Now magics can be called in multiline statements,
1501 consistency. Now magics can be called in multiline statements,
1497 and python variables can be expanded in magic calls via $var.
1502 and python variables can be expanded in magic calls via $var.
1498 This makes the magic system behave just like aliases or !system
1503 This makes the magic system behave just like aliases or !system
1499 calls.
1504 calls.
1500
1505
1501 2005-03-28 Fernando Perez <fperez@colorado.edu>
1506 2005-03-28 Fernando Perez <fperez@colorado.edu>
1502
1507
1503 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1508 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1504 expensive string additions for building command. Add support for
1509 expensive string additions for building command. Add support for
1505 trailing ';' when autocall is used.
1510 trailing ';' when autocall is used.
1506
1511
1507 2005-03-26 Fernando Perez <fperez@colorado.edu>
1512 2005-03-26 Fernando Perez <fperez@colorado.edu>
1508
1513
1509 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1514 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1510 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1515 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1511 ipython.el robust against prompts with any number of spaces
1516 ipython.el robust against prompts with any number of spaces
1512 (including 0) after the ':' character.
1517 (including 0) after the ':' character.
1513
1518
1514 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1519 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1515 continuation prompt, which misled users to think the line was
1520 continuation prompt, which misled users to think the line was
1516 already indented. Closes debian Bug#300847, reported to me by
1521 already indented. Closes debian Bug#300847, reported to me by
1517 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1522 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1518
1523
1519 2005-03-23 Fernando Perez <fperez@colorado.edu>
1524 2005-03-23 Fernando Perez <fperez@colorado.edu>
1520
1525
1521 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1526 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1522 properly aligned if they have embedded newlines.
1527 properly aligned if they have embedded newlines.
1523
1528
1524 * IPython/iplib.py (runlines): Add a public method to expose
1529 * IPython/iplib.py (runlines): Add a public method to expose
1525 IPython's code execution machinery, so that users can run strings
1530 IPython's code execution machinery, so that users can run strings
1526 as if they had been typed at the prompt interactively.
1531 as if they had been typed at the prompt interactively.
1527 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1532 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1528 methods which can call the system shell, but with python variable
1533 methods which can call the system shell, but with python variable
1529 expansion. The three such methods are: __IPYTHON__.system,
1534 expansion. The three such methods are: __IPYTHON__.system,
1530 .getoutput and .getoutputerror. These need to be documented in a
1535 .getoutput and .getoutputerror. These need to be documented in a
1531 'public API' section (to be written) of the manual.
1536 'public API' section (to be written) of the manual.
1532
1537
1533 2005-03-20 Fernando Perez <fperez@colorado.edu>
1538 2005-03-20 Fernando Perez <fperez@colorado.edu>
1534
1539
1535 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1540 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1536 for custom exception handling. This is quite powerful, and it
1541 for custom exception handling. This is quite powerful, and it
1537 allows for user-installable exception handlers which can trap
1542 allows for user-installable exception handlers which can trap
1538 custom exceptions at runtime and treat them separately from
1543 custom exceptions at runtime and treat them separately from
1539 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1544 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1540 Mantegazza <mantegazza-AT-ill.fr>.
1545 Mantegazza <mantegazza-AT-ill.fr>.
1541 (InteractiveShell.set_custom_completer): public API function to
1546 (InteractiveShell.set_custom_completer): public API function to
1542 add new completers at runtime.
1547 add new completers at runtime.
1543
1548
1544 2005-03-19 Fernando Perez <fperez@colorado.edu>
1549 2005-03-19 Fernando Perez <fperez@colorado.edu>
1545
1550
1546 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1551 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1547 allow objects which provide their docstrings via non-standard
1552 allow objects which provide their docstrings via non-standard
1548 mechanisms (like Pyro proxies) to still be inspected by ipython's
1553 mechanisms (like Pyro proxies) to still be inspected by ipython's
1549 ? system.
1554 ? system.
1550
1555
1551 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1556 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1552 automatic capture system. I tried quite hard to make it work
1557 automatic capture system. I tried quite hard to make it work
1553 reliably, and simply failed. I tried many combinations with the
1558 reliably, and simply failed. I tried many combinations with the
1554 subprocess module, but eventually nothing worked in all needed
1559 subprocess module, but eventually nothing worked in all needed
1555 cases (not blocking stdin for the child, duplicating stdout
1560 cases (not blocking stdin for the child, duplicating stdout
1556 without blocking, etc). The new %sc/%sx still do capture to these
1561 without blocking, etc). The new %sc/%sx still do capture to these
1557 magical list/string objects which make shell use much more
1562 magical list/string objects which make shell use much more
1558 conveninent, so not all is lost.
1563 conveninent, so not all is lost.
1559
1564
1560 XXX - FIX MANUAL for the change above!
1565 XXX - FIX MANUAL for the change above!
1561
1566
1562 (runsource): I copied code.py's runsource() into ipython to modify
1567 (runsource): I copied code.py's runsource() into ipython to modify
1563 it a bit. Now the code object and source to be executed are
1568 it a bit. Now the code object and source to be executed are
1564 stored in ipython. This makes this info accessible to third-party
1569 stored in ipython. This makes this info accessible to third-party
1565 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1570 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1566 Mantegazza <mantegazza-AT-ill.fr>.
1571 Mantegazza <mantegazza-AT-ill.fr>.
1567
1572
1568 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1573 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1569 history-search via readline (like C-p/C-n). I'd wanted this for a
1574 history-search via readline (like C-p/C-n). I'd wanted this for a
1570 long time, but only recently found out how to do it. For users
1575 long time, but only recently found out how to do it. For users
1571 who already have their ipythonrc files made and want this, just
1576 who already have their ipythonrc files made and want this, just
1572 add:
1577 add:
1573
1578
1574 readline_parse_and_bind "\e[A": history-search-backward
1579 readline_parse_and_bind "\e[A": history-search-backward
1575 readline_parse_and_bind "\e[B": history-search-forward
1580 readline_parse_and_bind "\e[B": history-search-forward
1576
1581
1577 2005-03-18 Fernando Perez <fperez@colorado.edu>
1582 2005-03-18 Fernando Perez <fperez@colorado.edu>
1578
1583
1579 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1584 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1580 LSString and SList classes which allow transparent conversions
1585 LSString and SList classes which allow transparent conversions
1581 between list mode and whitespace-separated string.
1586 between list mode and whitespace-separated string.
1582 (magic_r): Fix recursion problem in %r.
1587 (magic_r): Fix recursion problem in %r.
1583
1588
1584 * IPython/genutils.py (LSString): New class to be used for
1589 * IPython/genutils.py (LSString): New class to be used for
1585 automatic storage of the results of all alias/system calls in _o
1590 automatic storage of the results of all alias/system calls in _o
1586 and _e (stdout/err). These provide a .l/.list attribute which
1591 and _e (stdout/err). These provide a .l/.list attribute which
1587 does automatic splitting on newlines. This means that for most
1592 does automatic splitting on newlines. This means that for most
1588 uses, you'll never need to do capturing of output with %sc/%sx
1593 uses, you'll never need to do capturing of output with %sc/%sx
1589 anymore, since ipython keeps this always done for you. Note that
1594 anymore, since ipython keeps this always done for you. Note that
1590 only the LAST results are stored, the _o/e variables are
1595 only the LAST results are stored, the _o/e variables are
1591 overwritten on each call. If you need to save their contents
1596 overwritten on each call. If you need to save their contents
1592 further, simply bind them to any other name.
1597 further, simply bind them to any other name.
1593
1598
1594 2005-03-17 Fernando Perez <fperez@colorado.edu>
1599 2005-03-17 Fernando Perez <fperez@colorado.edu>
1595
1600
1596 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1601 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1597 prompt namespace handling.
1602 prompt namespace handling.
1598
1603
1599 2005-03-16 Fernando Perez <fperez@colorado.edu>
1604 2005-03-16 Fernando Perez <fperez@colorado.edu>
1600
1605
1601 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1606 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1602 classic prompts to be '>>> ' (final space was missing, and it
1607 classic prompts to be '>>> ' (final space was missing, and it
1603 trips the emacs python mode).
1608 trips the emacs python mode).
1604 (BasePrompt.__str__): Added safe support for dynamic prompt
1609 (BasePrompt.__str__): Added safe support for dynamic prompt
1605 strings. Now you can set your prompt string to be '$x', and the
1610 strings. Now you can set your prompt string to be '$x', and the
1606 value of x will be printed from your interactive namespace. The
1611 value of x will be printed from your interactive namespace. The
1607 interpolation syntax includes the full Itpl support, so
1612 interpolation syntax includes the full Itpl support, so
1608 ${foo()+x+bar()} is a valid prompt string now, and the function
1613 ${foo()+x+bar()} is a valid prompt string now, and the function
1609 calls will be made at runtime.
1614 calls will be made at runtime.
1610
1615
1611 2005-03-15 Fernando Perez <fperez@colorado.edu>
1616 2005-03-15 Fernando Perez <fperez@colorado.edu>
1612
1617
1613 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1618 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1614 avoid name clashes in pylab. %hist still works, it just forwards
1619 avoid name clashes in pylab. %hist still works, it just forwards
1615 the call to %history.
1620 the call to %history.
1616
1621
1617 2005-03-02 *** Released version 0.6.12
1622 2005-03-02 *** Released version 0.6.12
1618
1623
1619 2005-03-02 Fernando Perez <fperez@colorado.edu>
1624 2005-03-02 Fernando Perez <fperez@colorado.edu>
1620
1625
1621 * IPython/iplib.py (handle_magic): log magic calls properly as
1626 * IPython/iplib.py (handle_magic): log magic calls properly as
1622 ipmagic() function calls.
1627 ipmagic() function calls.
1623
1628
1624 * IPython/Magic.py (magic_time): Improved %time to support
1629 * IPython/Magic.py (magic_time): Improved %time to support
1625 statements and provide wall-clock as well as CPU time.
1630 statements and provide wall-clock as well as CPU time.
1626
1631
1627 2005-02-27 Fernando Perez <fperez@colorado.edu>
1632 2005-02-27 Fernando Perez <fperez@colorado.edu>
1628
1633
1629 * IPython/hooks.py: New hooks module, to expose user-modifiable
1634 * IPython/hooks.py: New hooks module, to expose user-modifiable
1630 IPython functionality in a clean manner. For now only the editor
1635 IPython functionality in a clean manner. For now only the editor
1631 hook is actually written, and other thigns which I intend to turn
1636 hook is actually written, and other thigns which I intend to turn
1632 into proper hooks aren't yet there. The display and prefilter
1637 into proper hooks aren't yet there. The display and prefilter
1633 stuff, for example, should be hooks. But at least now the
1638 stuff, for example, should be hooks. But at least now the
1634 framework is in place, and the rest can be moved here with more
1639 framework is in place, and the rest can be moved here with more
1635 time later. IPython had had a .hooks variable for a long time for
1640 time later. IPython had had a .hooks variable for a long time for
1636 this purpose, but I'd never actually used it for anything.
1641 this purpose, but I'd never actually used it for anything.
1637
1642
1638 2005-02-26 Fernando Perez <fperez@colorado.edu>
1643 2005-02-26 Fernando Perez <fperez@colorado.edu>
1639
1644
1640 * IPython/ipmaker.py (make_IPython): make the default ipython
1645 * IPython/ipmaker.py (make_IPython): make the default ipython
1641 directory be called _ipython under win32, to follow more the
1646 directory be called _ipython under win32, to follow more the
1642 naming peculiarities of that platform (where buggy software like
1647 naming peculiarities of that platform (where buggy software like
1643 Visual Sourcesafe breaks with .named directories). Reported by
1648 Visual Sourcesafe breaks with .named directories). Reported by
1644 Ville Vainio.
1649 Ville Vainio.
1645
1650
1646 2005-02-23 Fernando Perez <fperez@colorado.edu>
1651 2005-02-23 Fernando Perez <fperez@colorado.edu>
1647
1652
1648 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1653 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1649 auto_aliases for win32 which were causing problems. Users can
1654 auto_aliases for win32 which were causing problems. Users can
1650 define the ones they personally like.
1655 define the ones they personally like.
1651
1656
1652 2005-02-21 Fernando Perez <fperez@colorado.edu>
1657 2005-02-21 Fernando Perez <fperez@colorado.edu>
1653
1658
1654 * IPython/Magic.py (magic_time): new magic to time execution of
1659 * IPython/Magic.py (magic_time): new magic to time execution of
1655 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1660 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1656
1661
1657 2005-02-19 Fernando Perez <fperez@colorado.edu>
1662 2005-02-19 Fernando Perez <fperez@colorado.edu>
1658
1663
1659 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1664 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1660 into keys (for prompts, for example).
1665 into keys (for prompts, for example).
1661
1666
1662 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1667 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1663 prompts in case users want them. This introduces a small behavior
1668 prompts in case users want them. This introduces a small behavior
1664 change: ipython does not automatically add a space to all prompts
1669 change: ipython does not automatically add a space to all prompts
1665 anymore. To get the old prompts with a space, users should add it
1670 anymore. To get the old prompts with a space, users should add it
1666 manually to their ipythonrc file, so for example prompt_in1 should
1671 manually to their ipythonrc file, so for example prompt_in1 should
1667 now read 'In [\#]: ' instead of 'In [\#]:'.
1672 now read 'In [\#]: ' instead of 'In [\#]:'.
1668 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1673 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1669 file) to control left-padding of secondary prompts.
1674 file) to control left-padding of secondary prompts.
1670
1675
1671 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1676 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1672 the profiler can't be imported. Fix for Debian, which removed
1677 the profiler can't be imported. Fix for Debian, which removed
1673 profile.py because of License issues. I applied a slightly
1678 profile.py because of License issues. I applied a slightly
1674 modified version of the original Debian patch at
1679 modified version of the original Debian patch at
1675 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1680 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1676
1681
1677 2005-02-17 Fernando Perez <fperez@colorado.edu>
1682 2005-02-17 Fernando Perez <fperez@colorado.edu>
1678
1683
1679 * IPython/genutils.py (native_line_ends): Fix bug which would
1684 * IPython/genutils.py (native_line_ends): Fix bug which would
1680 cause improper line-ends under win32 b/c I was not opening files
1685 cause improper line-ends under win32 b/c I was not opening files
1681 in binary mode. Bug report and fix thanks to Ville.
1686 in binary mode. Bug report and fix thanks to Ville.
1682
1687
1683 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1688 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1684 trying to catch spurious foo[1] autocalls. My fix actually broke
1689 trying to catch spurious foo[1] autocalls. My fix actually broke
1685 ',/' autoquote/call with explicit escape (bad regexp).
1690 ',/' autoquote/call with explicit escape (bad regexp).
1686
1691
1687 2005-02-15 *** Released version 0.6.11
1692 2005-02-15 *** Released version 0.6.11
1688
1693
1689 2005-02-14 Fernando Perez <fperez@colorado.edu>
1694 2005-02-14 Fernando Perez <fperez@colorado.edu>
1690
1695
1691 * IPython/background_jobs.py: New background job management
1696 * IPython/background_jobs.py: New background job management
1692 subsystem. This is implemented via a new set of classes, and
1697 subsystem. This is implemented via a new set of classes, and
1693 IPython now provides a builtin 'jobs' object for background job
1698 IPython now provides a builtin 'jobs' object for background job
1694 execution. A convenience %bg magic serves as a lightweight
1699 execution. A convenience %bg magic serves as a lightweight
1695 frontend for starting the more common type of calls. This was
1700 frontend for starting the more common type of calls. This was
1696 inspired by discussions with B. Granger and the BackgroundCommand
1701 inspired by discussions with B. Granger and the BackgroundCommand
1697 class described in the book Python Scripting for Computational
1702 class described in the book Python Scripting for Computational
1698 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1703 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1699 (although ultimately no code from this text was used, as IPython's
1704 (although ultimately no code from this text was used, as IPython's
1700 system is a separate implementation).
1705 system is a separate implementation).
1701
1706
1702 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1707 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1703 to control the completion of single/double underscore names
1708 to control the completion of single/double underscore names
1704 separately. As documented in the example ipytonrc file, the
1709 separately. As documented in the example ipytonrc file, the
1705 readline_omit__names variable can now be set to 2, to omit even
1710 readline_omit__names variable can now be set to 2, to omit even
1706 single underscore names. Thanks to a patch by Brian Wong
1711 single underscore names. Thanks to a patch by Brian Wong
1707 <BrianWong-AT-AirgoNetworks.Com>.
1712 <BrianWong-AT-AirgoNetworks.Com>.
1708 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1713 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1709 be autocalled as foo([1]) if foo were callable. A problem for
1714 be autocalled as foo([1]) if foo were callable. A problem for
1710 things which are both callable and implement __getitem__.
1715 things which are both callable and implement __getitem__.
1711 (init_readline): Fix autoindentation for win32. Thanks to a patch
1716 (init_readline): Fix autoindentation for win32. Thanks to a patch
1712 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1717 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1713
1718
1714 2005-02-12 Fernando Perez <fperez@colorado.edu>
1719 2005-02-12 Fernando Perez <fperez@colorado.edu>
1715
1720
1716 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1721 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1717 which I had written long ago to sort out user error messages which
1722 which I had written long ago to sort out user error messages which
1718 may occur during startup. This seemed like a good idea initially,
1723 may occur during startup. This seemed like a good idea initially,
1719 but it has proven a disaster in retrospect. I don't want to
1724 but it has proven a disaster in retrospect. I don't want to
1720 change much code for now, so my fix is to set the internal 'debug'
1725 change much code for now, so my fix is to set the internal 'debug'
1721 flag to true everywhere, whose only job was precisely to control
1726 flag to true everywhere, whose only job was precisely to control
1722 this subsystem. This closes issue 28 (as well as avoiding all
1727 this subsystem. This closes issue 28 (as well as avoiding all
1723 sorts of strange hangups which occur from time to time).
1728 sorts of strange hangups which occur from time to time).
1724
1729
1725 2005-02-07 Fernando Perez <fperez@colorado.edu>
1730 2005-02-07 Fernando Perez <fperez@colorado.edu>
1726
1731
1727 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1732 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1728 previous call produced a syntax error.
1733 previous call produced a syntax error.
1729
1734
1730 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1735 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1731 classes without constructor.
1736 classes without constructor.
1732
1737
1733 2005-02-06 Fernando Perez <fperez@colorado.edu>
1738 2005-02-06 Fernando Perez <fperez@colorado.edu>
1734
1739
1735 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1740 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1736 completions with the results of each matcher, so we return results
1741 completions with the results of each matcher, so we return results
1737 to the user from all namespaces. This breaks with ipython
1742 to the user from all namespaces. This breaks with ipython
1738 tradition, but I think it's a nicer behavior. Now you get all
1743 tradition, but I think it's a nicer behavior. Now you get all
1739 possible completions listed, from all possible namespaces (python,
1744 possible completions listed, from all possible namespaces (python,
1740 filesystem, magics...) After a request by John Hunter
1745 filesystem, magics...) After a request by John Hunter
1741 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1746 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1742
1747
1743 2005-02-05 Fernando Perez <fperez@colorado.edu>
1748 2005-02-05 Fernando Perez <fperez@colorado.edu>
1744
1749
1745 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1750 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1746 the call had quote characters in it (the quotes were stripped).
1751 the call had quote characters in it (the quotes were stripped).
1747
1752
1748 2005-01-31 Fernando Perez <fperez@colorado.edu>
1753 2005-01-31 Fernando Perez <fperez@colorado.edu>
1749
1754
1750 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1755 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1751 Itpl.itpl() to make the code more robust against psyco
1756 Itpl.itpl() to make the code more robust against psyco
1752 optimizations.
1757 optimizations.
1753
1758
1754 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1759 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1755 of causing an exception. Quicker, cleaner.
1760 of causing an exception. Quicker, cleaner.
1756
1761
1757 2005-01-28 Fernando Perez <fperez@colorado.edu>
1762 2005-01-28 Fernando Perez <fperez@colorado.edu>
1758
1763
1759 * scripts/ipython_win_post_install.py (install): hardcode
1764 * scripts/ipython_win_post_install.py (install): hardcode
1760 sys.prefix+'python.exe' as the executable path. It turns out that
1765 sys.prefix+'python.exe' as the executable path. It turns out that
1761 during the post-installation run, sys.executable resolves to the
1766 during the post-installation run, sys.executable resolves to the
1762 name of the binary installer! I should report this as a distutils
1767 name of the binary installer! I should report this as a distutils
1763 bug, I think. I updated the .10 release with this tiny fix, to
1768 bug, I think. I updated the .10 release with this tiny fix, to
1764 avoid annoying the lists further.
1769 avoid annoying the lists further.
1765
1770
1766 2005-01-27 *** Released version 0.6.10
1771 2005-01-27 *** Released version 0.6.10
1767
1772
1768 2005-01-27 Fernando Perez <fperez@colorado.edu>
1773 2005-01-27 Fernando Perez <fperez@colorado.edu>
1769
1774
1770 * IPython/numutils.py (norm): Added 'inf' as optional name for
1775 * IPython/numutils.py (norm): Added 'inf' as optional name for
1771 L-infinity norm, included references to mathworld.com for vector
1776 L-infinity norm, included references to mathworld.com for vector
1772 norm definitions.
1777 norm definitions.
1773 (amin/amax): added amin/amax for array min/max. Similar to what
1778 (amin/amax): added amin/amax for array min/max. Similar to what
1774 pylab ships with after the recent reorganization of names.
1779 pylab ships with after the recent reorganization of names.
1775 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1780 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1776
1781
1777 * ipython.el: committed Alex's recent fixes and improvements.
1782 * ipython.el: committed Alex's recent fixes and improvements.
1778 Tested with python-mode from CVS, and it looks excellent. Since
1783 Tested with python-mode from CVS, and it looks excellent. Since
1779 python-mode hasn't released anything in a while, I'm temporarily
1784 python-mode hasn't released anything in a while, I'm temporarily
1780 putting a copy of today's CVS (v 4.70) of python-mode in:
1785 putting a copy of today's CVS (v 4.70) of python-mode in:
1781 http://ipython.scipy.org/tmp/python-mode.el
1786 http://ipython.scipy.org/tmp/python-mode.el
1782
1787
1783 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1788 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1784 sys.executable for the executable name, instead of assuming it's
1789 sys.executable for the executable name, instead of assuming it's
1785 called 'python.exe' (the post-installer would have produced broken
1790 called 'python.exe' (the post-installer would have produced broken
1786 setups on systems with a differently named python binary).
1791 setups on systems with a differently named python binary).
1787
1792
1788 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1793 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1789 references to os.linesep, to make the code more
1794 references to os.linesep, to make the code more
1790 platform-independent. This is also part of the win32 coloring
1795 platform-independent. This is also part of the win32 coloring
1791 fixes.
1796 fixes.
1792
1797
1793 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1798 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1794 lines, which actually cause coloring bugs because the length of
1799 lines, which actually cause coloring bugs because the length of
1795 the line is very difficult to correctly compute with embedded
1800 the line is very difficult to correctly compute with embedded
1796 escapes. This was the source of all the coloring problems under
1801 escapes. This was the source of all the coloring problems under
1797 Win32. I think that _finally_, Win32 users have a properly
1802 Win32. I think that _finally_, Win32 users have a properly
1798 working ipython in all respects. This would never have happened
1803 working ipython in all respects. This would never have happened
1799 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1804 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1800
1805
1801 2005-01-26 *** Released version 0.6.9
1806 2005-01-26 *** Released version 0.6.9
1802
1807
1803 2005-01-25 Fernando Perez <fperez@colorado.edu>
1808 2005-01-25 Fernando Perez <fperez@colorado.edu>
1804
1809
1805 * setup.py: finally, we have a true Windows installer, thanks to
1810 * setup.py: finally, we have a true Windows installer, thanks to
1806 the excellent work of Viktor Ransmayr
1811 the excellent work of Viktor Ransmayr
1807 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1812 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1808 Windows users. The setup routine is quite a bit cleaner thanks to
1813 Windows users. The setup routine is quite a bit cleaner thanks to
1809 this, and the post-install script uses the proper functions to
1814 this, and the post-install script uses the proper functions to
1810 allow a clean de-installation using the standard Windows Control
1815 allow a clean de-installation using the standard Windows Control
1811 Panel.
1816 Panel.
1812
1817
1813 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1818 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1814 environment variable under all OSes (including win32) if
1819 environment variable under all OSes (including win32) if
1815 available. This will give consistency to win32 users who have set
1820 available. This will give consistency to win32 users who have set
1816 this variable for any reason. If os.environ['HOME'] fails, the
1821 this variable for any reason. If os.environ['HOME'] fails, the
1817 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1822 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1818
1823
1819 2005-01-24 Fernando Perez <fperez@colorado.edu>
1824 2005-01-24 Fernando Perez <fperez@colorado.edu>
1820
1825
1821 * IPython/numutils.py (empty_like): add empty_like(), similar to
1826 * IPython/numutils.py (empty_like): add empty_like(), similar to
1822 zeros_like() but taking advantage of the new empty() Numeric routine.
1827 zeros_like() but taking advantage of the new empty() Numeric routine.
1823
1828
1824 2005-01-23 *** Released version 0.6.8
1829 2005-01-23 *** Released version 0.6.8
1825
1830
1826 2005-01-22 Fernando Perez <fperez@colorado.edu>
1831 2005-01-22 Fernando Perez <fperez@colorado.edu>
1827
1832
1828 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1833 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1829 automatic show() calls. After discussing things with JDH, it
1834 automatic show() calls. After discussing things with JDH, it
1830 turns out there are too many corner cases where this can go wrong.
1835 turns out there are too many corner cases where this can go wrong.
1831 It's best not to try to be 'too smart', and simply have ipython
1836 It's best not to try to be 'too smart', and simply have ipython
1832 reproduce as much as possible the default behavior of a normal
1837 reproduce as much as possible the default behavior of a normal
1833 python shell.
1838 python shell.
1834
1839
1835 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1840 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1836 line-splitting regexp and _prefilter() to avoid calling getattr()
1841 line-splitting regexp and _prefilter() to avoid calling getattr()
1837 on assignments. This closes
1842 on assignments. This closes
1838 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1843 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1839 readline uses getattr(), so a simple <TAB> keypress is still
1844 readline uses getattr(), so a simple <TAB> keypress is still
1840 enough to trigger getattr() calls on an object.
1845 enough to trigger getattr() calls on an object.
1841
1846
1842 2005-01-21 Fernando Perez <fperez@colorado.edu>
1847 2005-01-21 Fernando Perez <fperez@colorado.edu>
1843
1848
1844 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1849 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1845 docstring under pylab so it doesn't mask the original.
1850 docstring under pylab so it doesn't mask the original.
1846
1851
1847 2005-01-21 *** Released version 0.6.7
1852 2005-01-21 *** Released version 0.6.7
1848
1853
1849 2005-01-21 Fernando Perez <fperez@colorado.edu>
1854 2005-01-21 Fernando Perez <fperez@colorado.edu>
1850
1855
1851 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1856 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1852 signal handling for win32 users in multithreaded mode.
1857 signal handling for win32 users in multithreaded mode.
1853
1858
1854 2005-01-17 Fernando Perez <fperez@colorado.edu>
1859 2005-01-17 Fernando Perez <fperez@colorado.edu>
1855
1860
1856 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1861 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1857 instances with no __init__. After a crash report by Norbert Nemec
1862 instances with no __init__. After a crash report by Norbert Nemec
1858 <Norbert-AT-nemec-online.de>.
1863 <Norbert-AT-nemec-online.de>.
1859
1864
1860 2005-01-14 Fernando Perez <fperez@colorado.edu>
1865 2005-01-14 Fernando Perez <fperez@colorado.edu>
1861
1866
1862 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1867 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1863 names for verbose exceptions, when multiple dotted names and the
1868 names for verbose exceptions, when multiple dotted names and the
1864 'parent' object were present on the same line.
1869 'parent' object were present on the same line.
1865
1870
1866 2005-01-11 Fernando Perez <fperez@colorado.edu>
1871 2005-01-11 Fernando Perez <fperez@colorado.edu>
1867
1872
1868 * IPython/genutils.py (flag_calls): new utility to trap and flag
1873 * IPython/genutils.py (flag_calls): new utility to trap and flag
1869 calls in functions. I need it to clean up matplotlib support.
1874 calls in functions. I need it to clean up matplotlib support.
1870 Also removed some deprecated code in genutils.
1875 Also removed some deprecated code in genutils.
1871
1876
1872 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1877 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1873 that matplotlib scripts called with %run, which don't call show()
1878 that matplotlib scripts called with %run, which don't call show()
1874 themselves, still have their plotting windows open.
1879 themselves, still have their plotting windows open.
1875
1880
1876 2005-01-05 Fernando Perez <fperez@colorado.edu>
1881 2005-01-05 Fernando Perez <fperez@colorado.edu>
1877
1882
1878 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1883 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1879 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1884 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1880
1885
1881 2004-12-19 Fernando Perez <fperez@colorado.edu>
1886 2004-12-19 Fernando Perez <fperez@colorado.edu>
1882
1887
1883 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1888 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1884 parent_runcode, which was an eyesore. The same result can be
1889 parent_runcode, which was an eyesore. The same result can be
1885 obtained with Python's regular superclass mechanisms.
1890 obtained with Python's regular superclass mechanisms.
1886
1891
1887 2004-12-17 Fernando Perez <fperez@colorado.edu>
1892 2004-12-17 Fernando Perez <fperez@colorado.edu>
1888
1893
1889 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1894 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1890 reported by Prabhu.
1895 reported by Prabhu.
1891 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1896 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1892 sys.stderr) instead of explicitly calling sys.stderr. This helps
1897 sys.stderr) instead of explicitly calling sys.stderr. This helps
1893 maintain our I/O abstractions clean, for future GUI embeddings.
1898 maintain our I/O abstractions clean, for future GUI embeddings.
1894
1899
1895 * IPython/genutils.py (info): added new utility for sys.stderr
1900 * IPython/genutils.py (info): added new utility for sys.stderr
1896 unified info message handling (thin wrapper around warn()).
1901 unified info message handling (thin wrapper around warn()).
1897
1902
1898 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1903 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1899 composite (dotted) names on verbose exceptions.
1904 composite (dotted) names on verbose exceptions.
1900 (VerboseTB.nullrepr): harden against another kind of errors which
1905 (VerboseTB.nullrepr): harden against another kind of errors which
1901 Python's inspect module can trigger, and which were crashing
1906 Python's inspect module can trigger, and which were crashing
1902 IPython. Thanks to a report by Marco Lombardi
1907 IPython. Thanks to a report by Marco Lombardi
1903 <mlombard-AT-ma010192.hq.eso.org>.
1908 <mlombard-AT-ma010192.hq.eso.org>.
1904
1909
1905 2004-12-13 *** Released version 0.6.6
1910 2004-12-13 *** Released version 0.6.6
1906
1911
1907 2004-12-12 Fernando Perez <fperez@colorado.edu>
1912 2004-12-12 Fernando Perez <fperez@colorado.edu>
1908
1913
1909 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1914 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1910 generated by pygtk upon initialization if it was built without
1915 generated by pygtk upon initialization if it was built without
1911 threads (for matplotlib users). After a crash reported by
1916 threads (for matplotlib users). After a crash reported by
1912 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1917 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1913
1918
1914 * IPython/ipmaker.py (make_IPython): fix small bug in the
1919 * IPython/ipmaker.py (make_IPython): fix small bug in the
1915 import_some parameter for multiple imports.
1920 import_some parameter for multiple imports.
1916
1921
1917 * IPython/iplib.py (ipmagic): simplified the interface of
1922 * IPython/iplib.py (ipmagic): simplified the interface of
1918 ipmagic() to take a single string argument, just as it would be
1923 ipmagic() to take a single string argument, just as it would be
1919 typed at the IPython cmd line.
1924 typed at the IPython cmd line.
1920 (ipalias): Added new ipalias() with an interface identical to
1925 (ipalias): Added new ipalias() with an interface identical to
1921 ipmagic(). This completes exposing a pure python interface to the
1926 ipmagic(). This completes exposing a pure python interface to the
1922 alias and magic system, which can be used in loops or more complex
1927 alias and magic system, which can be used in loops or more complex
1923 code where IPython's automatic line mangling is not active.
1928 code where IPython's automatic line mangling is not active.
1924
1929
1925 * IPython/genutils.py (timing): changed interface of timing to
1930 * IPython/genutils.py (timing): changed interface of timing to
1926 simply run code once, which is the most common case. timings()
1931 simply run code once, which is the most common case. timings()
1927 remains unchanged, for the cases where you want multiple runs.
1932 remains unchanged, for the cases where you want multiple runs.
1928
1933
1929 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1934 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1930 bug where Python2.2 crashes with exec'ing code which does not end
1935 bug where Python2.2 crashes with exec'ing code which does not end
1931 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1936 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1932 before.
1937 before.
1933
1938
1934 2004-12-10 Fernando Perez <fperez@colorado.edu>
1939 2004-12-10 Fernando Perez <fperez@colorado.edu>
1935
1940
1936 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1941 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1937 -t to -T, to accomodate the new -t flag in %run (the %run and
1942 -t to -T, to accomodate the new -t flag in %run (the %run and
1938 %prun options are kind of intermixed, and it's not easy to change
1943 %prun options are kind of intermixed, and it's not easy to change
1939 this with the limitations of python's getopt).
1944 this with the limitations of python's getopt).
1940
1945
1941 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1946 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1942 the execution of scripts. It's not as fine-tuned as timeit.py,
1947 the execution of scripts. It's not as fine-tuned as timeit.py,
1943 but it works from inside ipython (and under 2.2, which lacks
1948 but it works from inside ipython (and under 2.2, which lacks
1944 timeit.py). Optionally a number of runs > 1 can be given for
1949 timeit.py). Optionally a number of runs > 1 can be given for
1945 timing very short-running code.
1950 timing very short-running code.
1946
1951
1947 * IPython/genutils.py (uniq_stable): new routine which returns a
1952 * IPython/genutils.py (uniq_stable): new routine which returns a
1948 list of unique elements in any iterable, but in stable order of
1953 list of unique elements in any iterable, but in stable order of
1949 appearance. I needed this for the ultraTB fixes, and it's a handy
1954 appearance. I needed this for the ultraTB fixes, and it's a handy
1950 utility.
1955 utility.
1951
1956
1952 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1957 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1953 dotted names in Verbose exceptions. This had been broken since
1958 dotted names in Verbose exceptions. This had been broken since
1954 the very start, now x.y will properly be printed in a Verbose
1959 the very start, now x.y will properly be printed in a Verbose
1955 traceback, instead of x being shown and y appearing always as an
1960 traceback, instead of x being shown and y appearing always as an
1956 'undefined global'. Getting this to work was a bit tricky,
1961 'undefined global'. Getting this to work was a bit tricky,
1957 because by default python tokenizers are stateless. Saved by
1962 because by default python tokenizers are stateless. Saved by
1958 python's ability to easily add a bit of state to an arbitrary
1963 python's ability to easily add a bit of state to an arbitrary
1959 function (without needing to build a full-blown callable object).
1964 function (without needing to build a full-blown callable object).
1960
1965
1961 Also big cleanup of this code, which had horrendous runtime
1966 Also big cleanup of this code, which had horrendous runtime
1962 lookups of zillions of attributes for colorization. Moved all
1967 lookups of zillions of attributes for colorization. Moved all
1963 this code into a few templates, which make it cleaner and quicker.
1968 this code into a few templates, which make it cleaner and quicker.
1964
1969
1965 Printout quality was also improved for Verbose exceptions: one
1970 Printout quality was also improved for Verbose exceptions: one
1966 variable per line, and memory addresses are printed (this can be
1971 variable per line, and memory addresses are printed (this can be
1967 quite handy in nasty debugging situations, which is what Verbose
1972 quite handy in nasty debugging situations, which is what Verbose
1968 is for).
1973 is for).
1969
1974
1970 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1975 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1971 the command line as scripts to be loaded by embedded instances.
1976 the command line as scripts to be loaded by embedded instances.
1972 Doing so has the potential for an infinite recursion if there are
1977 Doing so has the potential for an infinite recursion if there are
1973 exceptions thrown in the process. This fixes a strange crash
1978 exceptions thrown in the process. This fixes a strange crash
1974 reported by Philippe MULLER <muller-AT-irit.fr>.
1979 reported by Philippe MULLER <muller-AT-irit.fr>.
1975
1980
1976 2004-12-09 Fernando Perez <fperez@colorado.edu>
1981 2004-12-09 Fernando Perez <fperez@colorado.edu>
1977
1982
1978 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1983 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1979 to reflect new names in matplotlib, which now expose the
1984 to reflect new names in matplotlib, which now expose the
1980 matlab-compatible interface via a pylab module instead of the
1985 matlab-compatible interface via a pylab module instead of the
1981 'matlab' name. The new code is backwards compatible, so users of
1986 'matlab' name. The new code is backwards compatible, so users of
1982 all matplotlib versions are OK. Patch by J. Hunter.
1987 all matplotlib versions are OK. Patch by J. Hunter.
1983
1988
1984 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1989 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1985 of __init__ docstrings for instances (class docstrings are already
1990 of __init__ docstrings for instances (class docstrings are already
1986 automatically printed). Instances with customized docstrings
1991 automatically printed). Instances with customized docstrings
1987 (indep. of the class) are also recognized and all 3 separate
1992 (indep. of the class) are also recognized and all 3 separate
1988 docstrings are printed (instance, class, constructor). After some
1993 docstrings are printed (instance, class, constructor). After some
1989 comments/suggestions by J. Hunter.
1994 comments/suggestions by J. Hunter.
1990
1995
1991 2004-12-05 Fernando Perez <fperez@colorado.edu>
1996 2004-12-05 Fernando Perez <fperez@colorado.edu>
1992
1997
1993 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1998 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1994 warnings when tab-completion fails and triggers an exception.
1999 warnings when tab-completion fails and triggers an exception.
1995
2000
1996 2004-12-03 Fernando Perez <fperez@colorado.edu>
2001 2004-12-03 Fernando Perez <fperez@colorado.edu>
1997
2002
1998 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2003 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1999 be triggered when using 'run -p'. An incorrect option flag was
2004 be triggered when using 'run -p'. An incorrect option flag was
2000 being set ('d' instead of 'D').
2005 being set ('d' instead of 'D').
2001 (manpage): fix missing escaped \- sign.
2006 (manpage): fix missing escaped \- sign.
2002
2007
2003 2004-11-30 *** Released version 0.6.5
2008 2004-11-30 *** Released version 0.6.5
2004
2009
2005 2004-11-30 Fernando Perez <fperez@colorado.edu>
2010 2004-11-30 Fernando Perez <fperez@colorado.edu>
2006
2011
2007 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2012 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2008 setting with -d option.
2013 setting with -d option.
2009
2014
2010 * setup.py (docfiles): Fix problem where the doc glob I was using
2015 * setup.py (docfiles): Fix problem where the doc glob I was using
2011 was COMPLETELY BROKEN. It was giving the right files by pure
2016 was COMPLETELY BROKEN. It was giving the right files by pure
2012 accident, but failed once I tried to include ipython.el. Note:
2017 accident, but failed once I tried to include ipython.el. Note:
2013 glob() does NOT allow you to do exclusion on multiple endings!
2018 glob() does NOT allow you to do exclusion on multiple endings!
2014
2019
2015 2004-11-29 Fernando Perez <fperez@colorado.edu>
2020 2004-11-29 Fernando Perez <fperez@colorado.edu>
2016
2021
2017 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2022 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2018 the manpage as the source. Better formatting & consistency.
2023 the manpage as the source. Better formatting & consistency.
2019
2024
2020 * IPython/Magic.py (magic_run): Added new -d option, to run
2025 * IPython/Magic.py (magic_run): Added new -d option, to run
2021 scripts under the control of the python pdb debugger. Note that
2026 scripts under the control of the python pdb debugger. Note that
2022 this required changing the %prun option -d to -D, to avoid a clash
2027 this required changing the %prun option -d to -D, to avoid a clash
2023 (since %run must pass options to %prun, and getopt is too dumb to
2028 (since %run must pass options to %prun, and getopt is too dumb to
2024 handle options with string values with embedded spaces). Thanks
2029 handle options with string values with embedded spaces). Thanks
2025 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2030 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2026 (magic_who_ls): added type matching to %who and %whos, so that one
2031 (magic_who_ls): added type matching to %who and %whos, so that one
2027 can filter their output to only include variables of certain
2032 can filter their output to only include variables of certain
2028 types. Another suggestion by Matthew.
2033 types. Another suggestion by Matthew.
2029 (magic_whos): Added memory summaries in kb and Mb for arrays.
2034 (magic_whos): Added memory summaries in kb and Mb for arrays.
2030 (magic_who): Improve formatting (break lines every 9 vars).
2035 (magic_who): Improve formatting (break lines every 9 vars).
2031
2036
2032 2004-11-28 Fernando Perez <fperez@colorado.edu>
2037 2004-11-28 Fernando Perez <fperez@colorado.edu>
2033
2038
2034 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2039 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2035 cache when empty lines were present.
2040 cache when empty lines were present.
2036
2041
2037 2004-11-24 Fernando Perez <fperez@colorado.edu>
2042 2004-11-24 Fernando Perez <fperez@colorado.edu>
2038
2043
2039 * IPython/usage.py (__doc__): document the re-activated threading
2044 * IPython/usage.py (__doc__): document the re-activated threading
2040 options for WX and GTK.
2045 options for WX and GTK.
2041
2046
2042 2004-11-23 Fernando Perez <fperez@colorado.edu>
2047 2004-11-23 Fernando Perez <fperez@colorado.edu>
2043
2048
2044 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2049 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2045 the -wthread and -gthread options, along with a new -tk one to try
2050 the -wthread and -gthread options, along with a new -tk one to try
2046 and coordinate Tk threading with wx/gtk. The tk support is very
2051 and coordinate Tk threading with wx/gtk. The tk support is very
2047 platform dependent, since it seems to require Tcl and Tk to be
2052 platform dependent, since it seems to require Tcl and Tk to be
2048 built with threads (Fedora1/2 appears NOT to have it, but in
2053 built with threads (Fedora1/2 appears NOT to have it, but in
2049 Prabhu's Debian boxes it works OK). But even with some Tk
2054 Prabhu's Debian boxes it works OK). But even with some Tk
2050 limitations, this is a great improvement.
2055 limitations, this is a great improvement.
2051
2056
2052 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2057 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2053 info in user prompts. Patch by Prabhu.
2058 info in user prompts. Patch by Prabhu.
2054
2059
2055 2004-11-18 Fernando Perez <fperez@colorado.edu>
2060 2004-11-18 Fernando Perez <fperez@colorado.edu>
2056
2061
2057 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2062 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2058 EOFErrors and bail, to avoid infinite loops if a non-terminating
2063 EOFErrors and bail, to avoid infinite loops if a non-terminating
2059 file is fed into ipython. Patch submitted in issue 19 by user,
2064 file is fed into ipython. Patch submitted in issue 19 by user,
2060 many thanks.
2065 many thanks.
2061
2066
2062 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2067 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2063 autoquote/parens in continuation prompts, which can cause lots of
2068 autoquote/parens in continuation prompts, which can cause lots of
2064 problems. Closes roundup issue 20.
2069 problems. Closes roundup issue 20.
2065
2070
2066 2004-11-17 Fernando Perez <fperez@colorado.edu>
2071 2004-11-17 Fernando Perez <fperez@colorado.edu>
2067
2072
2068 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2073 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2069 reported as debian bug #280505. I'm not sure my local changelog
2074 reported as debian bug #280505. I'm not sure my local changelog
2070 entry has the proper debian format (Jack?).
2075 entry has the proper debian format (Jack?).
2071
2076
2072 2004-11-08 *** Released version 0.6.4
2077 2004-11-08 *** Released version 0.6.4
2073
2078
2074 2004-11-08 Fernando Perez <fperez@colorado.edu>
2079 2004-11-08 Fernando Perez <fperez@colorado.edu>
2075
2080
2076 * IPython/iplib.py (init_readline): Fix exit message for Windows
2081 * IPython/iplib.py (init_readline): Fix exit message for Windows
2077 when readline is active. Thanks to a report by Eric Jones
2082 when readline is active. Thanks to a report by Eric Jones
2078 <eric-AT-enthought.com>.
2083 <eric-AT-enthought.com>.
2079
2084
2080 2004-11-07 Fernando Perez <fperez@colorado.edu>
2085 2004-11-07 Fernando Perez <fperez@colorado.edu>
2081
2086
2082 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2087 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2083 sometimes seen by win2k/cygwin users.
2088 sometimes seen by win2k/cygwin users.
2084
2089
2085 2004-11-06 Fernando Perez <fperez@colorado.edu>
2090 2004-11-06 Fernando Perez <fperez@colorado.edu>
2086
2091
2087 * IPython/iplib.py (interact): Change the handling of %Exit from
2092 * IPython/iplib.py (interact): Change the handling of %Exit from
2088 trying to propagate a SystemExit to an internal ipython flag.
2093 trying to propagate a SystemExit to an internal ipython flag.
2089 This is less elegant than using Python's exception mechanism, but
2094 This is less elegant than using Python's exception mechanism, but
2090 I can't get that to work reliably with threads, so under -pylab
2095 I can't get that to work reliably with threads, so under -pylab
2091 %Exit was hanging IPython. Cross-thread exception handling is
2096 %Exit was hanging IPython. Cross-thread exception handling is
2092 really a bitch. Thaks to a bug report by Stephen Walton
2097 really a bitch. Thaks to a bug report by Stephen Walton
2093 <stephen.walton-AT-csun.edu>.
2098 <stephen.walton-AT-csun.edu>.
2094
2099
2095 2004-11-04 Fernando Perez <fperez@colorado.edu>
2100 2004-11-04 Fernando Perez <fperez@colorado.edu>
2096
2101
2097 * IPython/iplib.py (raw_input_original): store a pointer to the
2102 * IPython/iplib.py (raw_input_original): store a pointer to the
2098 true raw_input to harden against code which can modify it
2103 true raw_input to harden against code which can modify it
2099 (wx.py.PyShell does this and would otherwise crash ipython).
2104 (wx.py.PyShell does this and would otherwise crash ipython).
2100 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2105 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2101
2106
2102 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2107 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2103 Ctrl-C problem, which does not mess up the input line.
2108 Ctrl-C problem, which does not mess up the input line.
2104
2109
2105 2004-11-03 Fernando Perez <fperez@colorado.edu>
2110 2004-11-03 Fernando Perez <fperez@colorado.edu>
2106
2111
2107 * IPython/Release.py: Changed licensing to BSD, in all files.
2112 * IPython/Release.py: Changed licensing to BSD, in all files.
2108 (name): lowercase name for tarball/RPM release.
2113 (name): lowercase name for tarball/RPM release.
2109
2114
2110 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2115 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2111 use throughout ipython.
2116 use throughout ipython.
2112
2117
2113 * IPython/Magic.py (Magic._ofind): Switch to using the new
2118 * IPython/Magic.py (Magic._ofind): Switch to using the new
2114 OInspect.getdoc() function.
2119 OInspect.getdoc() function.
2115
2120
2116 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2121 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2117 of the line currently being canceled via Ctrl-C. It's extremely
2122 of the line currently being canceled via Ctrl-C. It's extremely
2118 ugly, but I don't know how to do it better (the problem is one of
2123 ugly, but I don't know how to do it better (the problem is one of
2119 handling cross-thread exceptions).
2124 handling cross-thread exceptions).
2120
2125
2121 2004-10-28 Fernando Perez <fperez@colorado.edu>
2126 2004-10-28 Fernando Perez <fperez@colorado.edu>
2122
2127
2123 * IPython/Shell.py (signal_handler): add signal handlers to trap
2128 * IPython/Shell.py (signal_handler): add signal handlers to trap
2124 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2129 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2125 report by Francesc Alted.
2130 report by Francesc Alted.
2126
2131
2127 2004-10-21 Fernando Perez <fperez@colorado.edu>
2132 2004-10-21 Fernando Perez <fperez@colorado.edu>
2128
2133
2129 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2134 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2130 to % for pysh syntax extensions.
2135 to % for pysh syntax extensions.
2131
2136
2132 2004-10-09 Fernando Perez <fperez@colorado.edu>
2137 2004-10-09 Fernando Perez <fperez@colorado.edu>
2133
2138
2134 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2139 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2135 arrays to print a more useful summary, without calling str(arr).
2140 arrays to print a more useful summary, without calling str(arr).
2136 This avoids the problem of extremely lengthy computations which
2141 This avoids the problem of extremely lengthy computations which
2137 occur if arr is large, and appear to the user as a system lockup
2142 occur if arr is large, and appear to the user as a system lockup
2138 with 100% cpu activity. After a suggestion by Kristian Sandberg
2143 with 100% cpu activity. After a suggestion by Kristian Sandberg
2139 <Kristian.Sandberg@colorado.edu>.
2144 <Kristian.Sandberg@colorado.edu>.
2140 (Magic.__init__): fix bug in global magic escapes not being
2145 (Magic.__init__): fix bug in global magic escapes not being
2141 correctly set.
2146 correctly set.
2142
2147
2143 2004-10-08 Fernando Perez <fperez@colorado.edu>
2148 2004-10-08 Fernando Perez <fperez@colorado.edu>
2144
2149
2145 * IPython/Magic.py (__license__): change to absolute imports of
2150 * IPython/Magic.py (__license__): change to absolute imports of
2146 ipython's own internal packages, to start adapting to the absolute
2151 ipython's own internal packages, to start adapting to the absolute
2147 import requirement of PEP-328.
2152 import requirement of PEP-328.
2148
2153
2149 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2154 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2150 files, and standardize author/license marks through the Release
2155 files, and standardize author/license marks through the Release
2151 module instead of having per/file stuff (except for files with
2156 module instead of having per/file stuff (except for files with
2152 particular licenses, like the MIT/PSF-licensed codes).
2157 particular licenses, like the MIT/PSF-licensed codes).
2153
2158
2154 * IPython/Debugger.py: remove dead code for python 2.1
2159 * IPython/Debugger.py: remove dead code for python 2.1
2155
2160
2156 2004-10-04 Fernando Perez <fperez@colorado.edu>
2161 2004-10-04 Fernando Perez <fperez@colorado.edu>
2157
2162
2158 * IPython/iplib.py (ipmagic): New function for accessing magics
2163 * IPython/iplib.py (ipmagic): New function for accessing magics
2159 via a normal python function call.
2164 via a normal python function call.
2160
2165
2161 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2166 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2162 from '@' to '%', to accomodate the new @decorator syntax of python
2167 from '@' to '%', to accomodate the new @decorator syntax of python
2163 2.4.
2168 2.4.
2164
2169
2165 2004-09-29 Fernando Perez <fperez@colorado.edu>
2170 2004-09-29 Fernando Perez <fperez@colorado.edu>
2166
2171
2167 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2172 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2168 matplotlib.use to prevent running scripts which try to switch
2173 matplotlib.use to prevent running scripts which try to switch
2169 interactive backends from within ipython. This will just crash
2174 interactive backends from within ipython. This will just crash
2170 the python interpreter, so we can't allow it (but a detailed error
2175 the python interpreter, so we can't allow it (but a detailed error
2171 is given to the user).
2176 is given to the user).
2172
2177
2173 2004-09-28 Fernando Perez <fperez@colorado.edu>
2178 2004-09-28 Fernando Perez <fperez@colorado.edu>
2174
2179
2175 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2180 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2176 matplotlib-related fixes so that using @run with non-matplotlib
2181 matplotlib-related fixes so that using @run with non-matplotlib
2177 scripts doesn't pop up spurious plot windows. This requires
2182 scripts doesn't pop up spurious plot windows. This requires
2178 matplotlib >= 0.63, where I had to make some changes as well.
2183 matplotlib >= 0.63, where I had to make some changes as well.
2179
2184
2180 * IPython/ipmaker.py (make_IPython): update version requirement to
2185 * IPython/ipmaker.py (make_IPython): update version requirement to
2181 python 2.2.
2186 python 2.2.
2182
2187
2183 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2188 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2184 banner arg for embedded customization.
2189 banner arg for embedded customization.
2185
2190
2186 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2191 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2187 explicit uses of __IP as the IPython's instance name. Now things
2192 explicit uses of __IP as the IPython's instance name. Now things
2188 are properly handled via the shell.name value. The actual code
2193 are properly handled via the shell.name value. The actual code
2189 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2194 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2190 is much better than before. I'll clean things completely when the
2195 is much better than before. I'll clean things completely when the
2191 magic stuff gets a real overhaul.
2196 magic stuff gets a real overhaul.
2192
2197
2193 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2198 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2194 minor changes to debian dir.
2199 minor changes to debian dir.
2195
2200
2196 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2201 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2197 pointer to the shell itself in the interactive namespace even when
2202 pointer to the shell itself in the interactive namespace even when
2198 a user-supplied dict is provided. This is needed for embedding
2203 a user-supplied dict is provided. This is needed for embedding
2199 purposes (found by tests with Michel Sanner).
2204 purposes (found by tests with Michel Sanner).
2200
2205
2201 2004-09-27 Fernando Perez <fperez@colorado.edu>
2206 2004-09-27 Fernando Perez <fperez@colorado.edu>
2202
2207
2203 * IPython/UserConfig/ipythonrc: remove []{} from
2208 * IPython/UserConfig/ipythonrc: remove []{} from
2204 readline_remove_delims, so that things like [modname.<TAB> do
2209 readline_remove_delims, so that things like [modname.<TAB> do
2205 proper completion. This disables [].TAB, but that's a less common
2210 proper completion. This disables [].TAB, but that's a less common
2206 case than module names in list comprehensions, for example.
2211 case than module names in list comprehensions, for example.
2207 Thanks to a report by Andrea Riciputi.
2212 Thanks to a report by Andrea Riciputi.
2208
2213
2209 2004-09-09 Fernando Perez <fperez@colorado.edu>
2214 2004-09-09 Fernando Perez <fperez@colorado.edu>
2210
2215
2211 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2216 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2212 blocking problems in win32 and osx. Fix by John.
2217 blocking problems in win32 and osx. Fix by John.
2213
2218
2214 2004-09-08 Fernando Perez <fperez@colorado.edu>
2219 2004-09-08 Fernando Perez <fperez@colorado.edu>
2215
2220
2216 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2221 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2217 for Win32 and OSX. Fix by John Hunter.
2222 for Win32 and OSX. Fix by John Hunter.
2218
2223
2219 2004-08-30 *** Released version 0.6.3
2224 2004-08-30 *** Released version 0.6.3
2220
2225
2221 2004-08-30 Fernando Perez <fperez@colorado.edu>
2226 2004-08-30 Fernando Perez <fperez@colorado.edu>
2222
2227
2223 * setup.py (isfile): Add manpages to list of dependent files to be
2228 * setup.py (isfile): Add manpages to list of dependent files to be
2224 updated.
2229 updated.
2225
2230
2226 2004-08-27 Fernando Perez <fperez@colorado.edu>
2231 2004-08-27 Fernando Perez <fperez@colorado.edu>
2227
2232
2228 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2233 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2229 for now. They don't really work with standalone WX/GTK code
2234 for now. They don't really work with standalone WX/GTK code
2230 (though matplotlib IS working fine with both of those backends).
2235 (though matplotlib IS working fine with both of those backends).
2231 This will neeed much more testing. I disabled most things with
2236 This will neeed much more testing. I disabled most things with
2232 comments, so turning it back on later should be pretty easy.
2237 comments, so turning it back on later should be pretty easy.
2233
2238
2234 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2239 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2235 autocalling of expressions like r'foo', by modifying the line
2240 autocalling of expressions like r'foo', by modifying the line
2236 split regexp. Closes
2241 split regexp. Closes
2237 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2242 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2238 Riley <ipythonbugs-AT-sabi.net>.
2243 Riley <ipythonbugs-AT-sabi.net>.
2239 (InteractiveShell.mainloop): honor --nobanner with banner
2244 (InteractiveShell.mainloop): honor --nobanner with banner
2240 extensions.
2245 extensions.
2241
2246
2242 * IPython/Shell.py: Significant refactoring of all classes, so
2247 * IPython/Shell.py: Significant refactoring of all classes, so
2243 that we can really support ALL matplotlib backends and threading
2248 that we can really support ALL matplotlib backends and threading
2244 models (John spotted a bug with Tk which required this). Now we
2249 models (John spotted a bug with Tk which required this). Now we
2245 should support single-threaded, WX-threads and GTK-threads, both
2250 should support single-threaded, WX-threads and GTK-threads, both
2246 for generic code and for matplotlib.
2251 for generic code and for matplotlib.
2247
2252
2248 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2253 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2249 -pylab, to simplify things for users. Will also remove the pylab
2254 -pylab, to simplify things for users. Will also remove the pylab
2250 profile, since now all of matplotlib configuration is directly
2255 profile, since now all of matplotlib configuration is directly
2251 handled here. This also reduces startup time.
2256 handled here. This also reduces startup time.
2252
2257
2253 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2258 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2254 shell wasn't being correctly called. Also in IPShellWX.
2259 shell wasn't being correctly called. Also in IPShellWX.
2255
2260
2256 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2261 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2257 fine-tune banner.
2262 fine-tune banner.
2258
2263
2259 * IPython/numutils.py (spike): Deprecate these spike functions,
2264 * IPython/numutils.py (spike): Deprecate these spike functions,
2260 delete (long deprecated) gnuplot_exec handler.
2265 delete (long deprecated) gnuplot_exec handler.
2261
2266
2262 2004-08-26 Fernando Perez <fperez@colorado.edu>
2267 2004-08-26 Fernando Perez <fperez@colorado.edu>
2263
2268
2264 * ipython.1: Update for threading options, plus some others which
2269 * ipython.1: Update for threading options, plus some others which
2265 were missing.
2270 were missing.
2266
2271
2267 * IPython/ipmaker.py (__call__): Added -wthread option for
2272 * IPython/ipmaker.py (__call__): Added -wthread option for
2268 wxpython thread handling. Make sure threading options are only
2273 wxpython thread handling. Make sure threading options are only
2269 valid at the command line.
2274 valid at the command line.
2270
2275
2271 * scripts/ipython: moved shell selection into a factory function
2276 * scripts/ipython: moved shell selection into a factory function
2272 in Shell.py, to keep the starter script to a minimum.
2277 in Shell.py, to keep the starter script to a minimum.
2273
2278
2274 2004-08-25 Fernando Perez <fperez@colorado.edu>
2279 2004-08-25 Fernando Perez <fperez@colorado.edu>
2275
2280
2276 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2281 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2277 John. Along with some recent changes he made to matplotlib, the
2282 John. Along with some recent changes he made to matplotlib, the
2278 next versions of both systems should work very well together.
2283 next versions of both systems should work very well together.
2279
2284
2280 2004-08-24 Fernando Perez <fperez@colorado.edu>
2285 2004-08-24 Fernando Perez <fperez@colorado.edu>
2281
2286
2282 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2287 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2283 tried to switch the profiling to using hotshot, but I'm getting
2288 tried to switch the profiling to using hotshot, but I'm getting
2284 strange errors from prof.runctx() there. I may be misreading the
2289 strange errors from prof.runctx() there. I may be misreading the
2285 docs, but it looks weird. For now the profiling code will
2290 docs, but it looks weird. For now the profiling code will
2286 continue to use the standard profiler.
2291 continue to use the standard profiler.
2287
2292
2288 2004-08-23 Fernando Perez <fperez@colorado.edu>
2293 2004-08-23 Fernando Perez <fperez@colorado.edu>
2289
2294
2290 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2295 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2291 threaded shell, by John Hunter. It's not quite ready yet, but
2296 threaded shell, by John Hunter. It's not quite ready yet, but
2292 close.
2297 close.
2293
2298
2294 2004-08-22 Fernando Perez <fperez@colorado.edu>
2299 2004-08-22 Fernando Perez <fperez@colorado.edu>
2295
2300
2296 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2301 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2297 in Magic and ultraTB.
2302 in Magic and ultraTB.
2298
2303
2299 * ipython.1: document threading options in manpage.
2304 * ipython.1: document threading options in manpage.
2300
2305
2301 * scripts/ipython: Changed name of -thread option to -gthread,
2306 * scripts/ipython: Changed name of -thread option to -gthread,
2302 since this is GTK specific. I want to leave the door open for a
2307 since this is GTK specific. I want to leave the door open for a
2303 -wthread option for WX, which will most likely be necessary. This
2308 -wthread option for WX, which will most likely be necessary. This
2304 change affects usage and ipmaker as well.
2309 change affects usage and ipmaker as well.
2305
2310
2306 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2311 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2307 handle the matplotlib shell issues. Code by John Hunter
2312 handle the matplotlib shell issues. Code by John Hunter
2308 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2313 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2309 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2314 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2310 broken (and disabled for end users) for now, but it puts the
2315 broken (and disabled for end users) for now, but it puts the
2311 infrastructure in place.
2316 infrastructure in place.
2312
2317
2313 2004-08-21 Fernando Perez <fperez@colorado.edu>
2318 2004-08-21 Fernando Perez <fperez@colorado.edu>
2314
2319
2315 * ipythonrc-pylab: Add matplotlib support.
2320 * ipythonrc-pylab: Add matplotlib support.
2316
2321
2317 * matplotlib_config.py: new files for matplotlib support, part of
2322 * matplotlib_config.py: new files for matplotlib support, part of
2318 the pylab profile.
2323 the pylab profile.
2319
2324
2320 * IPython/usage.py (__doc__): documented the threading options.
2325 * IPython/usage.py (__doc__): documented the threading options.
2321
2326
2322 2004-08-20 Fernando Perez <fperez@colorado.edu>
2327 2004-08-20 Fernando Perez <fperez@colorado.edu>
2323
2328
2324 * ipython: Modified the main calling routine to handle the -thread
2329 * ipython: Modified the main calling routine to handle the -thread
2325 and -mpthread options. This needs to be done as a top-level hack,
2330 and -mpthread options. This needs to be done as a top-level hack,
2326 because it determines which class to instantiate for IPython
2331 because it determines which class to instantiate for IPython
2327 itself.
2332 itself.
2328
2333
2329 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2334 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2330 classes to support multithreaded GTK operation without blocking,
2335 classes to support multithreaded GTK operation without blocking,
2331 and matplotlib with all backends. This is a lot of still very
2336 and matplotlib with all backends. This is a lot of still very
2332 experimental code, and threads are tricky. So it may still have a
2337 experimental code, and threads are tricky. So it may still have a
2333 few rough edges... This code owes a lot to
2338 few rough edges... This code owes a lot to
2334 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2339 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2335 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2340 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2336 to John Hunter for all the matplotlib work.
2341 to John Hunter for all the matplotlib work.
2337
2342
2338 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2343 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2339 options for gtk thread and matplotlib support.
2344 options for gtk thread and matplotlib support.
2340
2345
2341 2004-08-16 Fernando Perez <fperez@colorado.edu>
2346 2004-08-16 Fernando Perez <fperez@colorado.edu>
2342
2347
2343 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2348 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2344 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2349 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2345 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2350 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2346
2351
2347 2004-08-11 Fernando Perez <fperez@colorado.edu>
2352 2004-08-11 Fernando Perez <fperez@colorado.edu>
2348
2353
2349 * setup.py (isfile): Fix build so documentation gets updated for
2354 * setup.py (isfile): Fix build so documentation gets updated for
2350 rpms (it was only done for .tgz builds).
2355 rpms (it was only done for .tgz builds).
2351
2356
2352 2004-08-10 Fernando Perez <fperez@colorado.edu>
2357 2004-08-10 Fernando Perez <fperez@colorado.edu>
2353
2358
2354 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2359 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2355
2360
2356 * iplib.py : Silence syntax error exceptions in tab-completion.
2361 * iplib.py : Silence syntax error exceptions in tab-completion.
2357
2362
2358 2004-08-05 Fernando Perez <fperez@colorado.edu>
2363 2004-08-05 Fernando Perez <fperez@colorado.edu>
2359
2364
2360 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2365 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2361 'color off' mark for continuation prompts. This was causing long
2366 'color off' mark for continuation prompts. This was causing long
2362 continuation lines to mis-wrap.
2367 continuation lines to mis-wrap.
2363
2368
2364 2004-08-01 Fernando Perez <fperez@colorado.edu>
2369 2004-08-01 Fernando Perez <fperez@colorado.edu>
2365
2370
2366 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2371 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2367 for building ipython to be a parameter. All this is necessary
2372 for building ipython to be a parameter. All this is necessary
2368 right now to have a multithreaded version, but this insane
2373 right now to have a multithreaded version, but this insane
2369 non-design will be cleaned up soon. For now, it's a hack that
2374 non-design will be cleaned up soon. For now, it's a hack that
2370 works.
2375 works.
2371
2376
2372 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2377 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2373 args in various places. No bugs so far, but it's a dangerous
2378 args in various places. No bugs so far, but it's a dangerous
2374 practice.
2379 practice.
2375
2380
2376 2004-07-31 Fernando Perez <fperez@colorado.edu>
2381 2004-07-31 Fernando Perez <fperez@colorado.edu>
2377
2382
2378 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2383 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2379 fix completion of files with dots in their names under most
2384 fix completion of files with dots in their names under most
2380 profiles (pysh was OK because the completion order is different).
2385 profiles (pysh was OK because the completion order is different).
2381
2386
2382 2004-07-27 Fernando Perez <fperez@colorado.edu>
2387 2004-07-27 Fernando Perez <fperez@colorado.edu>
2383
2388
2384 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2389 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2385 keywords manually, b/c the one in keyword.py was removed in python
2390 keywords manually, b/c the one in keyword.py was removed in python
2386 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2391 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2387 This is NOT a bug under python 2.3 and earlier.
2392 This is NOT a bug under python 2.3 and earlier.
2388
2393
2389 2004-07-26 Fernando Perez <fperez@colorado.edu>
2394 2004-07-26 Fernando Perez <fperez@colorado.edu>
2390
2395
2391 * IPython/ultraTB.py (VerboseTB.text): Add another
2396 * IPython/ultraTB.py (VerboseTB.text): Add another
2392 linecache.checkcache() call to try to prevent inspect.py from
2397 linecache.checkcache() call to try to prevent inspect.py from
2393 crashing under python 2.3. I think this fixes
2398 crashing under python 2.3. I think this fixes
2394 http://www.scipy.net/roundup/ipython/issue17.
2399 http://www.scipy.net/roundup/ipython/issue17.
2395
2400
2396 2004-07-26 *** Released version 0.6.2
2401 2004-07-26 *** Released version 0.6.2
2397
2402
2398 2004-07-26 Fernando Perez <fperez@colorado.edu>
2403 2004-07-26 Fernando Perez <fperez@colorado.edu>
2399
2404
2400 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2405 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2401 fail for any number.
2406 fail for any number.
2402 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2407 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2403 empty bookmarks.
2408 empty bookmarks.
2404
2409
2405 2004-07-26 *** Released version 0.6.1
2410 2004-07-26 *** Released version 0.6.1
2406
2411
2407 2004-07-26 Fernando Perez <fperez@colorado.edu>
2412 2004-07-26 Fernando Perez <fperez@colorado.edu>
2408
2413
2409 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2414 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2410
2415
2411 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2416 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2412 escaping '()[]{}' in filenames.
2417 escaping '()[]{}' in filenames.
2413
2418
2414 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2419 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2415 Python 2.2 users who lack a proper shlex.split.
2420 Python 2.2 users who lack a proper shlex.split.
2416
2421
2417 2004-07-19 Fernando Perez <fperez@colorado.edu>
2422 2004-07-19 Fernando Perez <fperez@colorado.edu>
2418
2423
2419 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2424 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2420 for reading readline's init file. I follow the normal chain:
2425 for reading readline's init file. I follow the normal chain:
2421 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2426 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2422 report by Mike Heeter. This closes
2427 report by Mike Heeter. This closes
2423 http://www.scipy.net/roundup/ipython/issue16.
2428 http://www.scipy.net/roundup/ipython/issue16.
2424
2429
2425 2004-07-18 Fernando Perez <fperez@colorado.edu>
2430 2004-07-18 Fernando Perez <fperez@colorado.edu>
2426
2431
2427 * IPython/iplib.py (__init__): Add better handling of '\' under
2432 * IPython/iplib.py (__init__): Add better handling of '\' under
2428 Win32 for filenames. After a patch by Ville.
2433 Win32 for filenames. After a patch by Ville.
2429
2434
2430 2004-07-17 Fernando Perez <fperez@colorado.edu>
2435 2004-07-17 Fernando Perez <fperez@colorado.edu>
2431
2436
2432 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2437 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2433 autocalling would be triggered for 'foo is bar' if foo is
2438 autocalling would be triggered for 'foo is bar' if foo is
2434 callable. I also cleaned up the autocall detection code to use a
2439 callable. I also cleaned up the autocall detection code to use a
2435 regexp, which is faster. Bug reported by Alexander Schmolck.
2440 regexp, which is faster. Bug reported by Alexander Schmolck.
2436
2441
2437 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2442 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2438 '?' in them would confuse the help system. Reported by Alex
2443 '?' in them would confuse the help system. Reported by Alex
2439 Schmolck.
2444 Schmolck.
2440
2445
2441 2004-07-16 Fernando Perez <fperez@colorado.edu>
2446 2004-07-16 Fernando Perez <fperez@colorado.edu>
2442
2447
2443 * IPython/GnuplotInteractive.py (__all__): added plot2.
2448 * IPython/GnuplotInteractive.py (__all__): added plot2.
2444
2449
2445 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2450 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2446 plotting dictionaries, lists or tuples of 1d arrays.
2451 plotting dictionaries, lists or tuples of 1d arrays.
2447
2452
2448 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2453 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2449 optimizations.
2454 optimizations.
2450
2455
2451 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2456 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2452 the information which was there from Janko's original IPP code:
2457 the information which was there from Janko's original IPP code:
2453
2458
2454 03.05.99 20:53 porto.ifm.uni-kiel.de
2459 03.05.99 20:53 porto.ifm.uni-kiel.de
2455 --Started changelog.
2460 --Started changelog.
2456 --make clear do what it say it does
2461 --make clear do what it say it does
2457 --added pretty output of lines from inputcache
2462 --added pretty output of lines from inputcache
2458 --Made Logger a mixin class, simplifies handling of switches
2463 --Made Logger a mixin class, simplifies handling of switches
2459 --Added own completer class. .string<TAB> expands to last history
2464 --Added own completer class. .string<TAB> expands to last history
2460 line which starts with string. The new expansion is also present
2465 line which starts with string. The new expansion is also present
2461 with Ctrl-r from the readline library. But this shows, who this
2466 with Ctrl-r from the readline library. But this shows, who this
2462 can be done for other cases.
2467 can be done for other cases.
2463 --Added convention that all shell functions should accept a
2468 --Added convention that all shell functions should accept a
2464 parameter_string This opens the door for different behaviour for
2469 parameter_string This opens the door for different behaviour for
2465 each function. @cd is a good example of this.
2470 each function. @cd is a good example of this.
2466
2471
2467 04.05.99 12:12 porto.ifm.uni-kiel.de
2472 04.05.99 12:12 porto.ifm.uni-kiel.de
2468 --added logfile rotation
2473 --added logfile rotation
2469 --added new mainloop method which freezes first the namespace
2474 --added new mainloop method which freezes first the namespace
2470
2475
2471 07.05.99 21:24 porto.ifm.uni-kiel.de
2476 07.05.99 21:24 porto.ifm.uni-kiel.de
2472 --added the docreader classes. Now there is a help system.
2477 --added the docreader classes. Now there is a help system.
2473 -This is only a first try. Currently it's not easy to put new
2478 -This is only a first try. Currently it's not easy to put new
2474 stuff in the indices. But this is the way to go. Info would be
2479 stuff in the indices. But this is the way to go. Info would be
2475 better, but HTML is every where and not everybody has an info
2480 better, but HTML is every where and not everybody has an info
2476 system installed and it's not so easy to change html-docs to info.
2481 system installed and it's not so easy to change html-docs to info.
2477 --added global logfile option
2482 --added global logfile option
2478 --there is now a hook for object inspection method pinfo needs to
2483 --there is now a hook for object inspection method pinfo needs to
2479 be provided for this. Can be reached by two '??'.
2484 be provided for this. Can be reached by two '??'.
2480
2485
2481 08.05.99 20:51 porto.ifm.uni-kiel.de
2486 08.05.99 20:51 porto.ifm.uni-kiel.de
2482 --added a README
2487 --added a README
2483 --bug in rc file. Something has changed so functions in the rc
2488 --bug in rc file. Something has changed so functions in the rc
2484 file need to reference the shell and not self. Not clear if it's a
2489 file need to reference the shell and not self. Not clear if it's a
2485 bug or feature.
2490 bug or feature.
2486 --changed rc file for new behavior
2491 --changed rc file for new behavior
2487
2492
2488 2004-07-15 Fernando Perez <fperez@colorado.edu>
2493 2004-07-15 Fernando Perez <fperez@colorado.edu>
2489
2494
2490 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2495 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2491 cache was falling out of sync in bizarre manners when multi-line
2496 cache was falling out of sync in bizarre manners when multi-line
2492 input was present. Minor optimizations and cleanup.
2497 input was present. Minor optimizations and cleanup.
2493
2498
2494 (Logger): Remove old Changelog info for cleanup. This is the
2499 (Logger): Remove old Changelog info for cleanup. This is the
2495 information which was there from Janko's original code:
2500 information which was there from Janko's original code:
2496
2501
2497 Changes to Logger: - made the default log filename a parameter
2502 Changes to Logger: - made the default log filename a parameter
2498
2503
2499 - put a check for lines beginning with !@? in log(). Needed
2504 - put a check for lines beginning with !@? in log(). Needed
2500 (even if the handlers properly log their lines) for mid-session
2505 (even if the handlers properly log their lines) for mid-session
2501 logging activation to work properly. Without this, lines logged
2506 logging activation to work properly. Without this, lines logged
2502 in mid session, which get read from the cache, would end up
2507 in mid session, which get read from the cache, would end up
2503 'bare' (with !@? in the open) in the log. Now they are caught
2508 'bare' (with !@? in the open) in the log. Now they are caught
2504 and prepended with a #.
2509 and prepended with a #.
2505
2510
2506 * IPython/iplib.py (InteractiveShell.init_readline): added check
2511 * IPython/iplib.py (InteractiveShell.init_readline): added check
2507 in case MagicCompleter fails to be defined, so we don't crash.
2512 in case MagicCompleter fails to be defined, so we don't crash.
2508
2513
2509 2004-07-13 Fernando Perez <fperez@colorado.edu>
2514 2004-07-13 Fernando Perez <fperez@colorado.edu>
2510
2515
2511 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2516 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2512 of EPS if the requested filename ends in '.eps'.
2517 of EPS if the requested filename ends in '.eps'.
2513
2518
2514 2004-07-04 Fernando Perez <fperez@colorado.edu>
2519 2004-07-04 Fernando Perez <fperez@colorado.edu>
2515
2520
2516 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2521 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2517 escaping of quotes when calling the shell.
2522 escaping of quotes when calling the shell.
2518
2523
2519 2004-07-02 Fernando Perez <fperez@colorado.edu>
2524 2004-07-02 Fernando Perez <fperez@colorado.edu>
2520
2525
2521 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2526 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2522 gettext not working because we were clobbering '_'. Fixes
2527 gettext not working because we were clobbering '_'. Fixes
2523 http://www.scipy.net/roundup/ipython/issue6.
2528 http://www.scipy.net/roundup/ipython/issue6.
2524
2529
2525 2004-07-01 Fernando Perez <fperez@colorado.edu>
2530 2004-07-01 Fernando Perez <fperez@colorado.edu>
2526
2531
2527 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2532 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2528 into @cd. Patch by Ville.
2533 into @cd. Patch by Ville.
2529
2534
2530 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2535 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2531 new function to store things after ipmaker runs. Patch by Ville.
2536 new function to store things after ipmaker runs. Patch by Ville.
2532 Eventually this will go away once ipmaker is removed and the class
2537 Eventually this will go away once ipmaker is removed and the class
2533 gets cleaned up, but for now it's ok. Key functionality here is
2538 gets cleaned up, but for now it's ok. Key functionality here is
2534 the addition of the persistent storage mechanism, a dict for
2539 the addition of the persistent storage mechanism, a dict for
2535 keeping data across sessions (for now just bookmarks, but more can
2540 keeping data across sessions (for now just bookmarks, but more can
2536 be implemented later).
2541 be implemented later).
2537
2542
2538 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2543 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2539 persistent across sections. Patch by Ville, I modified it
2544 persistent across sections. Patch by Ville, I modified it
2540 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2545 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2541 added a '-l' option to list all bookmarks.
2546 added a '-l' option to list all bookmarks.
2542
2547
2543 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2548 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2544 center for cleanup. Registered with atexit.register(). I moved
2549 center for cleanup. Registered with atexit.register(). I moved
2545 here the old exit_cleanup(). After a patch by Ville.
2550 here the old exit_cleanup(). After a patch by Ville.
2546
2551
2547 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2552 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2548 characters in the hacked shlex_split for python 2.2.
2553 characters in the hacked shlex_split for python 2.2.
2549
2554
2550 * IPython/iplib.py (file_matches): more fixes to filenames with
2555 * IPython/iplib.py (file_matches): more fixes to filenames with
2551 whitespace in them. It's not perfect, but limitations in python's
2556 whitespace in them. It's not perfect, but limitations in python's
2552 readline make it impossible to go further.
2557 readline make it impossible to go further.
2553
2558
2554 2004-06-29 Fernando Perez <fperez@colorado.edu>
2559 2004-06-29 Fernando Perez <fperez@colorado.edu>
2555
2560
2556 * IPython/iplib.py (file_matches): escape whitespace correctly in
2561 * IPython/iplib.py (file_matches): escape whitespace correctly in
2557 filename completions. Bug reported by Ville.
2562 filename completions. Bug reported by Ville.
2558
2563
2559 2004-06-28 Fernando Perez <fperez@colorado.edu>
2564 2004-06-28 Fernando Perez <fperez@colorado.edu>
2560
2565
2561 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2566 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2562 the history file will be called 'history-PROFNAME' (or just
2567 the history file will be called 'history-PROFNAME' (or just
2563 'history' if no profile is loaded). I was getting annoyed at
2568 'history' if no profile is loaded). I was getting annoyed at
2564 getting my Numerical work history clobbered by pysh sessions.
2569 getting my Numerical work history clobbered by pysh sessions.
2565
2570
2566 * IPython/iplib.py (InteractiveShell.__init__): Internal
2571 * IPython/iplib.py (InteractiveShell.__init__): Internal
2567 getoutputerror() function so that we can honor the system_verbose
2572 getoutputerror() function so that we can honor the system_verbose
2568 flag for _all_ system calls. I also added escaping of #
2573 flag for _all_ system calls. I also added escaping of #
2569 characters here to avoid confusing Itpl.
2574 characters here to avoid confusing Itpl.
2570
2575
2571 * IPython/Magic.py (shlex_split): removed call to shell in
2576 * IPython/Magic.py (shlex_split): removed call to shell in
2572 parse_options and replaced it with shlex.split(). The annoying
2577 parse_options and replaced it with shlex.split(). The annoying
2573 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2578 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2574 to backport it from 2.3, with several frail hacks (the shlex
2579 to backport it from 2.3, with several frail hacks (the shlex
2575 module is rather limited in 2.2). Thanks to a suggestion by Ville
2580 module is rather limited in 2.2). Thanks to a suggestion by Ville
2576 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2581 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2577 problem.
2582 problem.
2578
2583
2579 (Magic.magic_system_verbose): new toggle to print the actual
2584 (Magic.magic_system_verbose): new toggle to print the actual
2580 system calls made by ipython. Mainly for debugging purposes.
2585 system calls made by ipython. Mainly for debugging purposes.
2581
2586
2582 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2587 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2583 doesn't support persistence. Reported (and fix suggested) by
2588 doesn't support persistence. Reported (and fix suggested) by
2584 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2589 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2585
2590
2586 2004-06-26 Fernando Perez <fperez@colorado.edu>
2591 2004-06-26 Fernando Perez <fperez@colorado.edu>
2587
2592
2588 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2593 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2589 continue prompts.
2594 continue prompts.
2590
2595
2591 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2596 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2592 function (basically a big docstring) and a few more things here to
2597 function (basically a big docstring) and a few more things here to
2593 speedup startup. pysh.py is now very lightweight. We want because
2598 speedup startup. pysh.py is now very lightweight. We want because
2594 it gets execfile'd, while InterpreterExec gets imported, so
2599 it gets execfile'd, while InterpreterExec gets imported, so
2595 byte-compilation saves time.
2600 byte-compilation saves time.
2596
2601
2597 2004-06-25 Fernando Perez <fperez@colorado.edu>
2602 2004-06-25 Fernando Perez <fperez@colorado.edu>
2598
2603
2599 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2604 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2600 -NUM', which was recently broken.
2605 -NUM', which was recently broken.
2601
2606
2602 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2607 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2603 in multi-line input (but not !!, which doesn't make sense there).
2608 in multi-line input (but not !!, which doesn't make sense there).
2604
2609
2605 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2610 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2606 It's just too useful, and people can turn it off in the less
2611 It's just too useful, and people can turn it off in the less
2607 common cases where it's a problem.
2612 common cases where it's a problem.
2608
2613
2609 2004-06-24 Fernando Perez <fperez@colorado.edu>
2614 2004-06-24 Fernando Perez <fperez@colorado.edu>
2610
2615
2611 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2616 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2612 special syntaxes (like alias calling) is now allied in multi-line
2617 special syntaxes (like alias calling) is now allied in multi-line
2613 input. This is still _very_ experimental, but it's necessary for
2618 input. This is still _very_ experimental, but it's necessary for
2614 efficient shell usage combining python looping syntax with system
2619 efficient shell usage combining python looping syntax with system
2615 calls. For now it's restricted to aliases, I don't think it
2620 calls. For now it's restricted to aliases, I don't think it
2616 really even makes sense to have this for magics.
2621 really even makes sense to have this for magics.
2617
2622
2618 2004-06-23 Fernando Perez <fperez@colorado.edu>
2623 2004-06-23 Fernando Perez <fperez@colorado.edu>
2619
2624
2620 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2625 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2621 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2626 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2622
2627
2623 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2628 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2624 extensions under Windows (after code sent by Gary Bishop). The
2629 extensions under Windows (after code sent by Gary Bishop). The
2625 extensions considered 'executable' are stored in IPython's rc
2630 extensions considered 'executable' are stored in IPython's rc
2626 structure as win_exec_ext.
2631 structure as win_exec_ext.
2627
2632
2628 * IPython/genutils.py (shell): new function, like system() but
2633 * IPython/genutils.py (shell): new function, like system() but
2629 without return value. Very useful for interactive shell work.
2634 without return value. Very useful for interactive shell work.
2630
2635
2631 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2636 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2632 delete aliases.
2637 delete aliases.
2633
2638
2634 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2639 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2635 sure that the alias table doesn't contain python keywords.
2640 sure that the alias table doesn't contain python keywords.
2636
2641
2637 2004-06-21 Fernando Perez <fperez@colorado.edu>
2642 2004-06-21 Fernando Perez <fperez@colorado.edu>
2638
2643
2639 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2644 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2640 non-existent items are found in $PATH. Reported by Thorsten.
2645 non-existent items are found in $PATH. Reported by Thorsten.
2641
2646
2642 2004-06-20 Fernando Perez <fperez@colorado.edu>
2647 2004-06-20 Fernando Perez <fperez@colorado.edu>
2643
2648
2644 * IPython/iplib.py (complete): modified the completer so that the
2649 * IPython/iplib.py (complete): modified the completer so that the
2645 order of priorities can be easily changed at runtime.
2650 order of priorities can be easily changed at runtime.
2646
2651
2647 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2652 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2648 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2653 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2649
2654
2650 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2655 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2651 expand Python variables prepended with $ in all system calls. The
2656 expand Python variables prepended with $ in all system calls. The
2652 same was done to InteractiveShell.handle_shell_escape. Now all
2657 same was done to InteractiveShell.handle_shell_escape. Now all
2653 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2658 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2654 expansion of python variables and expressions according to the
2659 expansion of python variables and expressions according to the
2655 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2660 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2656
2661
2657 Though PEP-215 has been rejected, a similar (but simpler) one
2662 Though PEP-215 has been rejected, a similar (but simpler) one
2658 seems like it will go into Python 2.4, PEP-292 -
2663 seems like it will go into Python 2.4, PEP-292 -
2659 http://www.python.org/peps/pep-0292.html.
2664 http://www.python.org/peps/pep-0292.html.
2660
2665
2661 I'll keep the full syntax of PEP-215, since IPython has since the
2666 I'll keep the full syntax of PEP-215, since IPython has since the
2662 start used Ka-Ping Yee's reference implementation discussed there
2667 start used Ka-Ping Yee's reference implementation discussed there
2663 (Itpl), and I actually like the powerful semantics it offers.
2668 (Itpl), and I actually like the powerful semantics it offers.
2664
2669
2665 In order to access normal shell variables, the $ has to be escaped
2670 In order to access normal shell variables, the $ has to be escaped
2666 via an extra $. For example:
2671 via an extra $. For example:
2667
2672
2668 In [7]: PATH='a python variable'
2673 In [7]: PATH='a python variable'
2669
2674
2670 In [8]: !echo $PATH
2675 In [8]: !echo $PATH
2671 a python variable
2676 a python variable
2672
2677
2673 In [9]: !echo $$PATH
2678 In [9]: !echo $$PATH
2674 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2679 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2675
2680
2676 (Magic.parse_options): escape $ so the shell doesn't evaluate
2681 (Magic.parse_options): escape $ so the shell doesn't evaluate
2677 things prematurely.
2682 things prematurely.
2678
2683
2679 * IPython/iplib.py (InteractiveShell.call_alias): added the
2684 * IPython/iplib.py (InteractiveShell.call_alias): added the
2680 ability for aliases to expand python variables via $.
2685 ability for aliases to expand python variables via $.
2681
2686
2682 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2687 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2683 system, now there's a @rehash/@rehashx pair of magics. These work
2688 system, now there's a @rehash/@rehashx pair of magics. These work
2684 like the csh rehash command, and can be invoked at any time. They
2689 like the csh rehash command, and can be invoked at any time. They
2685 build a table of aliases to everything in the user's $PATH
2690 build a table of aliases to everything in the user's $PATH
2686 (@rehash uses everything, @rehashx is slower but only adds
2691 (@rehash uses everything, @rehashx is slower but only adds
2687 executable files). With this, the pysh.py-based shell profile can
2692 executable files). With this, the pysh.py-based shell profile can
2688 now simply call rehash upon startup, and full access to all
2693 now simply call rehash upon startup, and full access to all
2689 programs in the user's path is obtained.
2694 programs in the user's path is obtained.
2690
2695
2691 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2696 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2692 functionality is now fully in place. I removed the old dynamic
2697 functionality is now fully in place. I removed the old dynamic
2693 code generation based approach, in favor of a much lighter one
2698 code generation based approach, in favor of a much lighter one
2694 based on a simple dict. The advantage is that this allows me to
2699 based on a simple dict. The advantage is that this allows me to
2695 now have thousands of aliases with negligible cost (unthinkable
2700 now have thousands of aliases with negligible cost (unthinkable
2696 with the old system).
2701 with the old system).
2697
2702
2698 2004-06-19 Fernando Perez <fperez@colorado.edu>
2703 2004-06-19 Fernando Perez <fperez@colorado.edu>
2699
2704
2700 * IPython/iplib.py (__init__): extended MagicCompleter class to
2705 * IPython/iplib.py (__init__): extended MagicCompleter class to
2701 also complete (last in priority) on user aliases.
2706 also complete (last in priority) on user aliases.
2702
2707
2703 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2708 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2704 call to eval.
2709 call to eval.
2705 (ItplNS.__init__): Added a new class which functions like Itpl,
2710 (ItplNS.__init__): Added a new class which functions like Itpl,
2706 but allows configuring the namespace for the evaluation to occur
2711 but allows configuring the namespace for the evaluation to occur
2707 in.
2712 in.
2708
2713
2709 2004-06-18 Fernando Perez <fperez@colorado.edu>
2714 2004-06-18 Fernando Perez <fperez@colorado.edu>
2710
2715
2711 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2716 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2712 better message when 'exit' or 'quit' are typed (a common newbie
2717 better message when 'exit' or 'quit' are typed (a common newbie
2713 confusion).
2718 confusion).
2714
2719
2715 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2720 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2716 check for Windows users.
2721 check for Windows users.
2717
2722
2718 * IPython/iplib.py (InteractiveShell.user_setup): removed
2723 * IPython/iplib.py (InteractiveShell.user_setup): removed
2719 disabling of colors for Windows. I'll test at runtime and issue a
2724 disabling of colors for Windows. I'll test at runtime and issue a
2720 warning if Gary's readline isn't found, as to nudge users to
2725 warning if Gary's readline isn't found, as to nudge users to
2721 download it.
2726 download it.
2722
2727
2723 2004-06-16 Fernando Perez <fperez@colorado.edu>
2728 2004-06-16 Fernando Perez <fperez@colorado.edu>
2724
2729
2725 * IPython/genutils.py (Stream.__init__): changed to print errors
2730 * IPython/genutils.py (Stream.__init__): changed to print errors
2726 to sys.stderr. I had a circular dependency here. Now it's
2731 to sys.stderr. I had a circular dependency here. Now it's
2727 possible to run ipython as IDLE's shell (consider this pre-alpha,
2732 possible to run ipython as IDLE's shell (consider this pre-alpha,
2728 since true stdout things end up in the starting terminal instead
2733 since true stdout things end up in the starting terminal instead
2729 of IDLE's out).
2734 of IDLE's out).
2730
2735
2731 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2736 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2732 users who haven't # updated their prompt_in2 definitions. Remove
2737 users who haven't # updated their prompt_in2 definitions. Remove
2733 eventually.
2738 eventually.
2734 (multiple_replace): added credit to original ASPN recipe.
2739 (multiple_replace): added credit to original ASPN recipe.
2735
2740
2736 2004-06-15 Fernando Perez <fperez@colorado.edu>
2741 2004-06-15 Fernando Perez <fperez@colorado.edu>
2737
2742
2738 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2743 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2739 list of auto-defined aliases.
2744 list of auto-defined aliases.
2740
2745
2741 2004-06-13 Fernando Perez <fperez@colorado.edu>
2746 2004-06-13 Fernando Perez <fperez@colorado.edu>
2742
2747
2743 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2748 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2744 install was really requested (so setup.py can be used for other
2749 install was really requested (so setup.py can be used for other
2745 things under Windows).
2750 things under Windows).
2746
2751
2747 2004-06-10 Fernando Perez <fperez@colorado.edu>
2752 2004-06-10 Fernando Perez <fperez@colorado.edu>
2748
2753
2749 * IPython/Logger.py (Logger.create_log): Manually remove any old
2754 * IPython/Logger.py (Logger.create_log): Manually remove any old
2750 backup, since os.remove may fail under Windows. Fixes bug
2755 backup, since os.remove may fail under Windows. Fixes bug
2751 reported by Thorsten.
2756 reported by Thorsten.
2752
2757
2753 2004-06-09 Fernando Perez <fperez@colorado.edu>
2758 2004-06-09 Fernando Perez <fperez@colorado.edu>
2754
2759
2755 * examples/example-embed.py: fixed all references to %n (replaced
2760 * examples/example-embed.py: fixed all references to %n (replaced
2756 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2761 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2757 for all examples and the manual as well.
2762 for all examples and the manual as well.
2758
2763
2759 2004-06-08 Fernando Perez <fperez@colorado.edu>
2764 2004-06-08 Fernando Perez <fperez@colorado.edu>
2760
2765
2761 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2766 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2762 alignment and color management. All 3 prompt subsystems now
2767 alignment and color management. All 3 prompt subsystems now
2763 inherit from BasePrompt.
2768 inherit from BasePrompt.
2764
2769
2765 * tools/release: updates for windows installer build and tag rpms
2770 * tools/release: updates for windows installer build and tag rpms
2766 with python version (since paths are fixed).
2771 with python version (since paths are fixed).
2767
2772
2768 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2773 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2769 which will become eventually obsolete. Also fixed the default
2774 which will become eventually obsolete. Also fixed the default
2770 prompt_in2 to use \D, so at least new users start with the correct
2775 prompt_in2 to use \D, so at least new users start with the correct
2771 defaults.
2776 defaults.
2772 WARNING: Users with existing ipythonrc files will need to apply
2777 WARNING: Users with existing ipythonrc files will need to apply
2773 this fix manually!
2778 this fix manually!
2774
2779
2775 * setup.py: make windows installer (.exe). This is finally the
2780 * setup.py: make windows installer (.exe). This is finally the
2776 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2781 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2777 which I hadn't included because it required Python 2.3 (or recent
2782 which I hadn't included because it required Python 2.3 (or recent
2778 distutils).
2783 distutils).
2779
2784
2780 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2785 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2781 usage of new '\D' escape.
2786 usage of new '\D' escape.
2782
2787
2783 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2788 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2784 lacks os.getuid())
2789 lacks os.getuid())
2785 (CachedOutput.set_colors): Added the ability to turn coloring
2790 (CachedOutput.set_colors): Added the ability to turn coloring
2786 on/off with @colors even for manually defined prompt colors. It
2791 on/off with @colors even for manually defined prompt colors. It
2787 uses a nasty global, but it works safely and via the generic color
2792 uses a nasty global, but it works safely and via the generic color
2788 handling mechanism.
2793 handling mechanism.
2789 (Prompt2.__init__): Introduced new escape '\D' for continuation
2794 (Prompt2.__init__): Introduced new escape '\D' for continuation
2790 prompts. It represents the counter ('\#') as dots.
2795 prompts. It represents the counter ('\#') as dots.
2791 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2796 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2792 need to update their ipythonrc files and replace '%n' with '\D' in
2797 need to update their ipythonrc files and replace '%n' with '\D' in
2793 their prompt_in2 settings everywhere. Sorry, but there's
2798 their prompt_in2 settings everywhere. Sorry, but there's
2794 otherwise no clean way to get all prompts to properly align. The
2799 otherwise no clean way to get all prompts to properly align. The
2795 ipythonrc shipped with IPython has been updated.
2800 ipythonrc shipped with IPython has been updated.
2796
2801
2797 2004-06-07 Fernando Perez <fperez@colorado.edu>
2802 2004-06-07 Fernando Perez <fperez@colorado.edu>
2798
2803
2799 * setup.py (isfile): Pass local_icons option to latex2html, so the
2804 * setup.py (isfile): Pass local_icons option to latex2html, so the
2800 resulting HTML file is self-contained. Thanks to
2805 resulting HTML file is self-contained. Thanks to
2801 dryice-AT-liu.com.cn for the tip.
2806 dryice-AT-liu.com.cn for the tip.
2802
2807
2803 * pysh.py: I created a new profile 'shell', which implements a
2808 * pysh.py: I created a new profile 'shell', which implements a
2804 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2809 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2805 system shell, nor will it become one anytime soon. It's mainly
2810 system shell, nor will it become one anytime soon. It's mainly
2806 meant to illustrate the use of the new flexible bash-like prompts.
2811 meant to illustrate the use of the new flexible bash-like prompts.
2807 I guess it could be used by hardy souls for true shell management,
2812 I guess it could be used by hardy souls for true shell management,
2808 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2813 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2809 profile. This uses the InterpreterExec extension provided by
2814 profile. This uses the InterpreterExec extension provided by
2810 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2815 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2811
2816
2812 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2817 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2813 auto-align itself with the length of the previous input prompt
2818 auto-align itself with the length of the previous input prompt
2814 (taking into account the invisible color escapes).
2819 (taking into account the invisible color escapes).
2815 (CachedOutput.__init__): Large restructuring of this class. Now
2820 (CachedOutput.__init__): Large restructuring of this class. Now
2816 all three prompts (primary1, primary2, output) are proper objects,
2821 all three prompts (primary1, primary2, output) are proper objects,
2817 managed by the 'parent' CachedOutput class. The code is still a
2822 managed by the 'parent' CachedOutput class. The code is still a
2818 bit hackish (all prompts share state via a pointer to the cache),
2823 bit hackish (all prompts share state via a pointer to the cache),
2819 but it's overall far cleaner than before.
2824 but it's overall far cleaner than before.
2820
2825
2821 * IPython/genutils.py (getoutputerror): modified to add verbose,
2826 * IPython/genutils.py (getoutputerror): modified to add verbose,
2822 debug and header options. This makes the interface of all getout*
2827 debug and header options. This makes the interface of all getout*
2823 functions uniform.
2828 functions uniform.
2824 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2829 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2825
2830
2826 * IPython/Magic.py (Magic.default_option): added a function to
2831 * IPython/Magic.py (Magic.default_option): added a function to
2827 allow registering default options for any magic command. This
2832 allow registering default options for any magic command. This
2828 makes it easy to have profiles which customize the magics globally
2833 makes it easy to have profiles which customize the magics globally
2829 for a certain use. The values set through this function are
2834 for a certain use. The values set through this function are
2830 picked up by the parse_options() method, which all magics should
2835 picked up by the parse_options() method, which all magics should
2831 use to parse their options.
2836 use to parse their options.
2832
2837
2833 * IPython/genutils.py (warn): modified the warnings framework to
2838 * IPython/genutils.py (warn): modified the warnings framework to
2834 use the Term I/O class. I'm trying to slowly unify all of
2839 use the Term I/O class. I'm trying to slowly unify all of
2835 IPython's I/O operations to pass through Term.
2840 IPython's I/O operations to pass through Term.
2836
2841
2837 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2842 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2838 the secondary prompt to correctly match the length of the primary
2843 the secondary prompt to correctly match the length of the primary
2839 one for any prompt. Now multi-line code will properly line up
2844 one for any prompt. Now multi-line code will properly line up
2840 even for path dependent prompts, such as the new ones available
2845 even for path dependent prompts, such as the new ones available
2841 via the prompt_specials.
2846 via the prompt_specials.
2842
2847
2843 2004-06-06 Fernando Perez <fperez@colorado.edu>
2848 2004-06-06 Fernando Perez <fperez@colorado.edu>
2844
2849
2845 * IPython/Prompts.py (prompt_specials): Added the ability to have
2850 * IPython/Prompts.py (prompt_specials): Added the ability to have
2846 bash-like special sequences in the prompts, which get
2851 bash-like special sequences in the prompts, which get
2847 automatically expanded. Things like hostname, current working
2852 automatically expanded. Things like hostname, current working
2848 directory and username are implemented already, but it's easy to
2853 directory and username are implemented already, but it's easy to
2849 add more in the future. Thanks to a patch by W.J. van der Laan
2854 add more in the future. Thanks to a patch by W.J. van der Laan
2850 <gnufnork-AT-hetdigitalegat.nl>
2855 <gnufnork-AT-hetdigitalegat.nl>
2851 (prompt_specials): Added color support for prompt strings, so
2856 (prompt_specials): Added color support for prompt strings, so
2852 users can define arbitrary color setups for their prompts.
2857 users can define arbitrary color setups for their prompts.
2853
2858
2854 2004-06-05 Fernando Perez <fperez@colorado.edu>
2859 2004-06-05 Fernando Perez <fperez@colorado.edu>
2855
2860
2856 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2861 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2857 code to load Gary Bishop's readline and configure it
2862 code to load Gary Bishop's readline and configure it
2858 automatically. Thanks to Gary for help on this.
2863 automatically. Thanks to Gary for help on this.
2859
2864
2860 2004-06-01 Fernando Perez <fperez@colorado.edu>
2865 2004-06-01 Fernando Perez <fperez@colorado.edu>
2861
2866
2862 * IPython/Logger.py (Logger.create_log): fix bug for logging
2867 * IPython/Logger.py (Logger.create_log): fix bug for logging
2863 with no filename (previous fix was incomplete).
2868 with no filename (previous fix was incomplete).
2864
2869
2865 2004-05-25 Fernando Perez <fperez@colorado.edu>
2870 2004-05-25 Fernando Perez <fperez@colorado.edu>
2866
2871
2867 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2872 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2868 parens would get passed to the shell.
2873 parens would get passed to the shell.
2869
2874
2870 2004-05-20 Fernando Perez <fperez@colorado.edu>
2875 2004-05-20 Fernando Perez <fperez@colorado.edu>
2871
2876
2872 * IPython/Magic.py (Magic.magic_prun): changed default profile
2877 * IPython/Magic.py (Magic.magic_prun): changed default profile
2873 sort order to 'time' (the more common profiling need).
2878 sort order to 'time' (the more common profiling need).
2874
2879
2875 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2880 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2876 so that source code shown is guaranteed in sync with the file on
2881 so that source code shown is guaranteed in sync with the file on
2877 disk (also changed in psource). Similar fix to the one for
2882 disk (also changed in psource). Similar fix to the one for
2878 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2883 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2879 <yann.ledu-AT-noos.fr>.
2884 <yann.ledu-AT-noos.fr>.
2880
2885
2881 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2886 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2882 with a single option would not be correctly parsed. Closes
2887 with a single option would not be correctly parsed. Closes
2883 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2888 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2884 introduced in 0.6.0 (on 2004-05-06).
2889 introduced in 0.6.0 (on 2004-05-06).
2885
2890
2886 2004-05-13 *** Released version 0.6.0
2891 2004-05-13 *** Released version 0.6.0
2887
2892
2888 2004-05-13 Fernando Perez <fperez@colorado.edu>
2893 2004-05-13 Fernando Perez <fperez@colorado.edu>
2889
2894
2890 * debian/: Added debian/ directory to CVS, so that debian support
2895 * debian/: Added debian/ directory to CVS, so that debian support
2891 is publicly accessible. The debian package is maintained by Jack
2896 is publicly accessible. The debian package is maintained by Jack
2892 Moffit <jack-AT-xiph.org>.
2897 Moffit <jack-AT-xiph.org>.
2893
2898
2894 * Documentation: included the notes about an ipython-based system
2899 * Documentation: included the notes about an ipython-based system
2895 shell (the hypothetical 'pysh') into the new_design.pdf document,
2900 shell (the hypothetical 'pysh') into the new_design.pdf document,
2896 so that these ideas get distributed to users along with the
2901 so that these ideas get distributed to users along with the
2897 official documentation.
2902 official documentation.
2898
2903
2899 2004-05-10 Fernando Perez <fperez@colorado.edu>
2904 2004-05-10 Fernando Perez <fperez@colorado.edu>
2900
2905
2901 * IPython/Logger.py (Logger.create_log): fix recently introduced
2906 * IPython/Logger.py (Logger.create_log): fix recently introduced
2902 bug (misindented line) where logstart would fail when not given an
2907 bug (misindented line) where logstart would fail when not given an
2903 explicit filename.
2908 explicit filename.
2904
2909
2905 2004-05-09 Fernando Perez <fperez@colorado.edu>
2910 2004-05-09 Fernando Perez <fperez@colorado.edu>
2906
2911
2907 * IPython/Magic.py (Magic.parse_options): skip system call when
2912 * IPython/Magic.py (Magic.parse_options): skip system call when
2908 there are no options to look for. Faster, cleaner for the common
2913 there are no options to look for. Faster, cleaner for the common
2909 case.
2914 case.
2910
2915
2911 * Documentation: many updates to the manual: describing Windows
2916 * Documentation: many updates to the manual: describing Windows
2912 support better, Gnuplot updates, credits, misc small stuff. Also
2917 support better, Gnuplot updates, credits, misc small stuff. Also
2913 updated the new_design doc a bit.
2918 updated the new_design doc a bit.
2914
2919
2915 2004-05-06 *** Released version 0.6.0.rc1
2920 2004-05-06 *** Released version 0.6.0.rc1
2916
2921
2917 2004-05-06 Fernando Perez <fperez@colorado.edu>
2922 2004-05-06 Fernando Perez <fperez@colorado.edu>
2918
2923
2919 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2924 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2920 operations to use the vastly more efficient list/''.join() method.
2925 operations to use the vastly more efficient list/''.join() method.
2921 (FormattedTB.text): Fix
2926 (FormattedTB.text): Fix
2922 http://www.scipy.net/roundup/ipython/issue12 - exception source
2927 http://www.scipy.net/roundup/ipython/issue12 - exception source
2923 extract not updated after reload. Thanks to Mike Salib
2928 extract not updated after reload. Thanks to Mike Salib
2924 <msalib-AT-mit.edu> for pinning the source of the problem.
2929 <msalib-AT-mit.edu> for pinning the source of the problem.
2925 Fortunately, the solution works inside ipython and doesn't require
2930 Fortunately, the solution works inside ipython and doesn't require
2926 any changes to python proper.
2931 any changes to python proper.
2927
2932
2928 * IPython/Magic.py (Magic.parse_options): Improved to process the
2933 * IPython/Magic.py (Magic.parse_options): Improved to process the
2929 argument list as a true shell would (by actually using the
2934 argument list as a true shell would (by actually using the
2930 underlying system shell). This way, all @magics automatically get
2935 underlying system shell). This way, all @magics automatically get
2931 shell expansion for variables. Thanks to a comment by Alex
2936 shell expansion for variables. Thanks to a comment by Alex
2932 Schmolck.
2937 Schmolck.
2933
2938
2934 2004-04-04 Fernando Perez <fperez@colorado.edu>
2939 2004-04-04 Fernando Perez <fperez@colorado.edu>
2935
2940
2936 * IPython/iplib.py (InteractiveShell.interact): Added a special
2941 * IPython/iplib.py (InteractiveShell.interact): Added a special
2937 trap for a debugger quit exception, which is basically impossible
2942 trap for a debugger quit exception, which is basically impossible
2938 to handle by normal mechanisms, given what pdb does to the stack.
2943 to handle by normal mechanisms, given what pdb does to the stack.
2939 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2944 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2940
2945
2941 2004-04-03 Fernando Perez <fperez@colorado.edu>
2946 2004-04-03 Fernando Perez <fperez@colorado.edu>
2942
2947
2943 * IPython/genutils.py (Term): Standardized the names of the Term
2948 * IPython/genutils.py (Term): Standardized the names of the Term
2944 class streams to cin/cout/cerr, following C++ naming conventions
2949 class streams to cin/cout/cerr, following C++ naming conventions
2945 (I can't use in/out/err because 'in' is not a valid attribute
2950 (I can't use in/out/err because 'in' is not a valid attribute
2946 name).
2951 name).
2947
2952
2948 * IPython/iplib.py (InteractiveShell.interact): don't increment
2953 * IPython/iplib.py (InteractiveShell.interact): don't increment
2949 the prompt if there's no user input. By Daniel 'Dang' Griffith
2954 the prompt if there's no user input. By Daniel 'Dang' Griffith
2950 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2955 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2951 Francois Pinard.
2956 Francois Pinard.
2952
2957
2953 2004-04-02 Fernando Perez <fperez@colorado.edu>
2958 2004-04-02 Fernando Perez <fperez@colorado.edu>
2954
2959
2955 * IPython/genutils.py (Stream.__init__): Modified to survive at
2960 * IPython/genutils.py (Stream.__init__): Modified to survive at
2956 least importing in contexts where stdin/out/err aren't true file
2961 least importing in contexts where stdin/out/err aren't true file
2957 objects, such as PyCrust (they lack fileno() and mode). However,
2962 objects, such as PyCrust (they lack fileno() and mode). However,
2958 the recovery facilities which rely on these things existing will
2963 the recovery facilities which rely on these things existing will
2959 not work.
2964 not work.
2960
2965
2961 2004-04-01 Fernando Perez <fperez@colorado.edu>
2966 2004-04-01 Fernando Perez <fperez@colorado.edu>
2962
2967
2963 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2968 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2964 use the new getoutputerror() function, so it properly
2969 use the new getoutputerror() function, so it properly
2965 distinguishes stdout/err.
2970 distinguishes stdout/err.
2966
2971
2967 * IPython/genutils.py (getoutputerror): added a function to
2972 * IPython/genutils.py (getoutputerror): added a function to
2968 capture separately the standard output and error of a command.
2973 capture separately the standard output and error of a command.
2969 After a comment from dang on the mailing lists. This code is
2974 After a comment from dang on the mailing lists. This code is
2970 basically a modified version of commands.getstatusoutput(), from
2975 basically a modified version of commands.getstatusoutput(), from
2971 the standard library.
2976 the standard library.
2972
2977
2973 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2978 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2974 '!!' as a special syntax (shorthand) to access @sx.
2979 '!!' as a special syntax (shorthand) to access @sx.
2975
2980
2976 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2981 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2977 command and return its output as a list split on '\n'.
2982 command and return its output as a list split on '\n'.
2978
2983
2979 2004-03-31 Fernando Perez <fperez@colorado.edu>
2984 2004-03-31 Fernando Perez <fperez@colorado.edu>
2980
2985
2981 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2986 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2982 method to dictionaries used as FakeModule instances if they lack
2987 method to dictionaries used as FakeModule instances if they lack
2983 it. At least pydoc in python2.3 breaks for runtime-defined
2988 it. At least pydoc in python2.3 breaks for runtime-defined
2984 functions without this hack. At some point I need to _really_
2989 functions without this hack. At some point I need to _really_
2985 understand what FakeModule is doing, because it's a gross hack.
2990 understand what FakeModule is doing, because it's a gross hack.
2986 But it solves Arnd's problem for now...
2991 But it solves Arnd's problem for now...
2987
2992
2988 2004-02-27 Fernando Perez <fperez@colorado.edu>
2993 2004-02-27 Fernando Perez <fperez@colorado.edu>
2989
2994
2990 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2995 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2991 mode would behave erratically. Also increased the number of
2996 mode would behave erratically. Also increased the number of
2992 possible logs in rotate mod to 999. Thanks to Rod Holland
2997 possible logs in rotate mod to 999. Thanks to Rod Holland
2993 <rhh@StructureLABS.com> for the report and fixes.
2998 <rhh@StructureLABS.com> for the report and fixes.
2994
2999
2995 2004-02-26 Fernando Perez <fperez@colorado.edu>
3000 2004-02-26 Fernando Perez <fperez@colorado.edu>
2996
3001
2997 * IPython/genutils.py (page): Check that the curses module really
3002 * IPython/genutils.py (page): Check that the curses module really
2998 has the initscr attribute before trying to use it. For some
3003 has the initscr attribute before trying to use it. For some
2999 reason, the Solaris curses module is missing this. I think this
3004 reason, the Solaris curses module is missing this. I think this
3000 should be considered a Solaris python bug, but I'm not sure.
3005 should be considered a Solaris python bug, but I'm not sure.
3001
3006
3002 2004-01-17 Fernando Perez <fperez@colorado.edu>
3007 2004-01-17 Fernando Perez <fperez@colorado.edu>
3003
3008
3004 * IPython/genutils.py (Stream.__init__): Changes to try to make
3009 * IPython/genutils.py (Stream.__init__): Changes to try to make
3005 ipython robust against stdin/out/err being closed by the user.
3010 ipython robust against stdin/out/err being closed by the user.
3006 This is 'user error' (and blocks a normal python session, at least
3011 This is 'user error' (and blocks a normal python session, at least
3007 the stdout case). However, Ipython should be able to survive such
3012 the stdout case). However, Ipython should be able to survive such
3008 instances of abuse as gracefully as possible. To simplify the
3013 instances of abuse as gracefully as possible. To simplify the
3009 coding and maintain compatibility with Gary Bishop's Term
3014 coding and maintain compatibility with Gary Bishop's Term
3010 contributions, I've made use of classmethods for this. I think
3015 contributions, I've made use of classmethods for this. I think
3011 this introduces a dependency on python 2.2.
3016 this introduces a dependency on python 2.2.
3012
3017
3013 2004-01-13 Fernando Perez <fperez@colorado.edu>
3018 2004-01-13 Fernando Perez <fperez@colorado.edu>
3014
3019
3015 * IPython/numutils.py (exp_safe): simplified the code a bit and
3020 * IPython/numutils.py (exp_safe): simplified the code a bit and
3016 removed the need for importing the kinds module altogether.
3021 removed the need for importing the kinds module altogether.
3017
3022
3018 2004-01-06 Fernando Perez <fperez@colorado.edu>
3023 2004-01-06 Fernando Perez <fperez@colorado.edu>
3019
3024
3020 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3025 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3021 a magic function instead, after some community feedback. No
3026 a magic function instead, after some community feedback. No
3022 special syntax will exist for it, but its name is deliberately
3027 special syntax will exist for it, but its name is deliberately
3023 very short.
3028 very short.
3024
3029
3025 2003-12-20 Fernando Perez <fperez@colorado.edu>
3030 2003-12-20 Fernando Perez <fperez@colorado.edu>
3026
3031
3027 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3032 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3028 new functionality, to automagically assign the result of a shell
3033 new functionality, to automagically assign the result of a shell
3029 command to a variable. I'll solicit some community feedback on
3034 command to a variable. I'll solicit some community feedback on
3030 this before making it permanent.
3035 this before making it permanent.
3031
3036
3032 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3037 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3033 requested about callables for which inspect couldn't obtain a
3038 requested about callables for which inspect couldn't obtain a
3034 proper argspec. Thanks to a crash report sent by Etienne
3039 proper argspec. Thanks to a crash report sent by Etienne
3035 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3040 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3036
3041
3037 2003-12-09 Fernando Perez <fperez@colorado.edu>
3042 2003-12-09 Fernando Perez <fperez@colorado.edu>
3038
3043
3039 * IPython/genutils.py (page): patch for the pager to work across
3044 * IPython/genutils.py (page): patch for the pager to work across
3040 various versions of Windows. By Gary Bishop.
3045 various versions of Windows. By Gary Bishop.
3041
3046
3042 2003-12-04 Fernando Perez <fperez@colorado.edu>
3047 2003-12-04 Fernando Perez <fperez@colorado.edu>
3043
3048
3044 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3049 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3045 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3050 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3046 While I tested this and it looks ok, there may still be corner
3051 While I tested this and it looks ok, there may still be corner
3047 cases I've missed.
3052 cases I've missed.
3048
3053
3049 2003-12-01 Fernando Perez <fperez@colorado.edu>
3054 2003-12-01 Fernando Perez <fperez@colorado.edu>
3050
3055
3051 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3056 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3052 where a line like 'p,q=1,2' would fail because the automagic
3057 where a line like 'p,q=1,2' would fail because the automagic
3053 system would be triggered for @p.
3058 system would be triggered for @p.
3054
3059
3055 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3060 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3056 cleanups, code unmodified.
3061 cleanups, code unmodified.
3057
3062
3058 * IPython/genutils.py (Term): added a class for IPython to handle
3063 * IPython/genutils.py (Term): added a class for IPython to handle
3059 output. In most cases it will just be a proxy for stdout/err, but
3064 output. In most cases it will just be a proxy for stdout/err, but
3060 having this allows modifications to be made for some platforms,
3065 having this allows modifications to be made for some platforms,
3061 such as handling color escapes under Windows. All of this code
3066 such as handling color escapes under Windows. All of this code
3062 was contributed by Gary Bishop, with minor modifications by me.
3067 was contributed by Gary Bishop, with minor modifications by me.
3063 The actual changes affect many files.
3068 The actual changes affect many files.
3064
3069
3065 2003-11-30 Fernando Perez <fperez@colorado.edu>
3070 2003-11-30 Fernando Perez <fperez@colorado.edu>
3066
3071
3067 * IPython/iplib.py (file_matches): new completion code, courtesy
3072 * IPython/iplib.py (file_matches): new completion code, courtesy
3068 of Jeff Collins. This enables filename completion again under
3073 of Jeff Collins. This enables filename completion again under
3069 python 2.3, which disabled it at the C level.
3074 python 2.3, which disabled it at the C level.
3070
3075
3071 2003-11-11 Fernando Perez <fperez@colorado.edu>
3076 2003-11-11 Fernando Perez <fperez@colorado.edu>
3072
3077
3073 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3078 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3074 for Numeric.array(map(...)), but often convenient.
3079 for Numeric.array(map(...)), but often convenient.
3075
3080
3076 2003-11-05 Fernando Perez <fperez@colorado.edu>
3081 2003-11-05 Fernando Perez <fperez@colorado.edu>
3077
3082
3078 * IPython/numutils.py (frange): Changed a call from int() to
3083 * IPython/numutils.py (frange): Changed a call from int() to
3079 int(round()) to prevent a problem reported with arange() in the
3084 int(round()) to prevent a problem reported with arange() in the
3080 numpy list.
3085 numpy list.
3081
3086
3082 2003-10-06 Fernando Perez <fperez@colorado.edu>
3087 2003-10-06 Fernando Perez <fperez@colorado.edu>
3083
3088
3084 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3089 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3085 prevent crashes if sys lacks an argv attribute (it happens with
3090 prevent crashes if sys lacks an argv attribute (it happens with
3086 embedded interpreters which build a bare-bones sys module).
3091 embedded interpreters which build a bare-bones sys module).
3087 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3092 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3088
3093
3089 2003-09-24 Fernando Perez <fperez@colorado.edu>
3094 2003-09-24 Fernando Perez <fperez@colorado.edu>
3090
3095
3091 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3096 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3092 to protect against poorly written user objects where __getattr__
3097 to protect against poorly written user objects where __getattr__
3093 raises exceptions other than AttributeError. Thanks to a bug
3098 raises exceptions other than AttributeError. Thanks to a bug
3094 report by Oliver Sander <osander-AT-gmx.de>.
3099 report by Oliver Sander <osander-AT-gmx.de>.
3095
3100
3096 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3101 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3097 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3102 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3098
3103
3099 2003-09-09 Fernando Perez <fperez@colorado.edu>
3104 2003-09-09 Fernando Perez <fperez@colorado.edu>
3100
3105
3101 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3106 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3102 unpacking a list whith a callable as first element would
3107 unpacking a list whith a callable as first element would
3103 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3108 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3104 Collins.
3109 Collins.
3105
3110
3106 2003-08-25 *** Released version 0.5.0
3111 2003-08-25 *** Released version 0.5.0
3107
3112
3108 2003-08-22 Fernando Perez <fperez@colorado.edu>
3113 2003-08-22 Fernando Perez <fperez@colorado.edu>
3109
3114
3110 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3115 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3111 improperly defined user exceptions. Thanks to feedback from Mark
3116 improperly defined user exceptions. Thanks to feedback from Mark
3112 Russell <mrussell-AT-verio.net>.
3117 Russell <mrussell-AT-verio.net>.
3113
3118
3114 2003-08-20 Fernando Perez <fperez@colorado.edu>
3119 2003-08-20 Fernando Perez <fperez@colorado.edu>
3115
3120
3116 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3121 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3117 printing so that it would print multi-line string forms starting
3122 printing so that it would print multi-line string forms starting
3118 with a new line. This way the formatting is better respected for
3123 with a new line. This way the formatting is better respected for
3119 objects which work hard to make nice string forms.
3124 objects which work hard to make nice string forms.
3120
3125
3121 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3126 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3122 autocall would overtake data access for objects with both
3127 autocall would overtake data access for objects with both
3123 __getitem__ and __call__.
3128 __getitem__ and __call__.
3124
3129
3125 2003-08-19 *** Released version 0.5.0-rc1
3130 2003-08-19 *** Released version 0.5.0-rc1
3126
3131
3127 2003-08-19 Fernando Perez <fperez@colorado.edu>
3132 2003-08-19 Fernando Perez <fperez@colorado.edu>
3128
3133
3129 * IPython/deep_reload.py (load_tail): single tiny change here
3134 * IPython/deep_reload.py (load_tail): single tiny change here
3130 seems to fix the long-standing bug of dreload() failing to work
3135 seems to fix the long-standing bug of dreload() failing to work
3131 for dotted names. But this module is pretty tricky, so I may have
3136 for dotted names. But this module is pretty tricky, so I may have
3132 missed some subtlety. Needs more testing!.
3137 missed some subtlety. Needs more testing!.
3133
3138
3134 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3139 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3135 exceptions which have badly implemented __str__ methods.
3140 exceptions which have badly implemented __str__ methods.
3136 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3141 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3137 which I've been getting reports about from Python 2.3 users. I
3142 which I've been getting reports about from Python 2.3 users. I
3138 wish I had a simple test case to reproduce the problem, so I could
3143 wish I had a simple test case to reproduce the problem, so I could
3139 either write a cleaner workaround or file a bug report if
3144 either write a cleaner workaround or file a bug report if
3140 necessary.
3145 necessary.
3141
3146
3142 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3147 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3143 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3148 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3144 a bug report by Tjabo Kloppenburg.
3149 a bug report by Tjabo Kloppenburg.
3145
3150
3146 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3151 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3147 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3152 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3148 seems rather unstable. Thanks to a bug report by Tjabo
3153 seems rather unstable. Thanks to a bug report by Tjabo
3149 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3154 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3150
3155
3151 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3156 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3152 this out soon because of the critical fixes in the inner loop for
3157 this out soon because of the critical fixes in the inner loop for
3153 generators.
3158 generators.
3154
3159
3155 * IPython/Magic.py (Magic.getargspec): removed. This (and
3160 * IPython/Magic.py (Magic.getargspec): removed. This (and
3156 _get_def) have been obsoleted by OInspect for a long time, I
3161 _get_def) have been obsoleted by OInspect for a long time, I
3157 hadn't noticed that they were dead code.
3162 hadn't noticed that they were dead code.
3158 (Magic._ofind): restored _ofind functionality for a few literals
3163 (Magic._ofind): restored _ofind functionality for a few literals
3159 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3164 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3160 for things like "hello".capitalize?, since that would require a
3165 for things like "hello".capitalize?, since that would require a
3161 potentially dangerous eval() again.
3166 potentially dangerous eval() again.
3162
3167
3163 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3168 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3164 logic a bit more to clean up the escapes handling and minimize the
3169 logic a bit more to clean up the escapes handling and minimize the
3165 use of _ofind to only necessary cases. The interactive 'feel' of
3170 use of _ofind to only necessary cases. The interactive 'feel' of
3166 IPython should have improved quite a bit with the changes in
3171 IPython should have improved quite a bit with the changes in
3167 _prefilter and _ofind (besides being far safer than before).
3172 _prefilter and _ofind (besides being far safer than before).
3168
3173
3169 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3174 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3170 obscure, never reported). Edit would fail to find the object to
3175 obscure, never reported). Edit would fail to find the object to
3171 edit under some circumstances.
3176 edit under some circumstances.
3172 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3177 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3173 which were causing double-calling of generators. Those eval calls
3178 which were causing double-calling of generators. Those eval calls
3174 were _very_ dangerous, since code with side effects could be
3179 were _very_ dangerous, since code with side effects could be
3175 triggered. As they say, 'eval is evil'... These were the
3180 triggered. As they say, 'eval is evil'... These were the
3176 nastiest evals in IPython. Besides, _ofind is now far simpler,
3181 nastiest evals in IPython. Besides, _ofind is now far simpler,
3177 and it should also be quite a bit faster. Its use of inspect is
3182 and it should also be quite a bit faster. Its use of inspect is
3178 also safer, so perhaps some of the inspect-related crashes I've
3183 also safer, so perhaps some of the inspect-related crashes I've
3179 seen lately with Python 2.3 might be taken care of. That will
3184 seen lately with Python 2.3 might be taken care of. That will
3180 need more testing.
3185 need more testing.
3181
3186
3182 2003-08-17 Fernando Perez <fperez@colorado.edu>
3187 2003-08-17 Fernando Perez <fperez@colorado.edu>
3183
3188
3184 * IPython/iplib.py (InteractiveShell._prefilter): significant
3189 * IPython/iplib.py (InteractiveShell._prefilter): significant
3185 simplifications to the logic for handling user escapes. Faster
3190 simplifications to the logic for handling user escapes. Faster
3186 and simpler code.
3191 and simpler code.
3187
3192
3188 2003-08-14 Fernando Perez <fperez@colorado.edu>
3193 2003-08-14 Fernando Perez <fperez@colorado.edu>
3189
3194
3190 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3195 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3191 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3196 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3192 but it should be quite a bit faster. And the recursive version
3197 but it should be quite a bit faster. And the recursive version
3193 generated O(log N) intermediate storage for all rank>1 arrays,
3198 generated O(log N) intermediate storage for all rank>1 arrays,
3194 even if they were contiguous.
3199 even if they were contiguous.
3195 (l1norm): Added this function.
3200 (l1norm): Added this function.
3196 (norm): Added this function for arbitrary norms (including
3201 (norm): Added this function for arbitrary norms (including
3197 l-infinity). l1 and l2 are still special cases for convenience
3202 l-infinity). l1 and l2 are still special cases for convenience
3198 and speed.
3203 and speed.
3199
3204
3200 2003-08-03 Fernando Perez <fperez@colorado.edu>
3205 2003-08-03 Fernando Perez <fperez@colorado.edu>
3201
3206
3202 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3207 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3203 exceptions, which now raise PendingDeprecationWarnings in Python
3208 exceptions, which now raise PendingDeprecationWarnings in Python
3204 2.3. There were some in Magic and some in Gnuplot2.
3209 2.3. There were some in Magic and some in Gnuplot2.
3205
3210
3206 2003-06-30 Fernando Perez <fperez@colorado.edu>
3211 2003-06-30 Fernando Perez <fperez@colorado.edu>
3207
3212
3208 * IPython/genutils.py (page): modified to call curses only for
3213 * IPython/genutils.py (page): modified to call curses only for
3209 terminals where TERM=='xterm'. After problems under many other
3214 terminals where TERM=='xterm'. After problems under many other
3210 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3215 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3211
3216
3212 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3217 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3213 would be triggered when readline was absent. This was just an old
3218 would be triggered when readline was absent. This was just an old
3214 debugging statement I'd forgotten to take out.
3219 debugging statement I'd forgotten to take out.
3215
3220
3216 2003-06-20 Fernando Perez <fperez@colorado.edu>
3221 2003-06-20 Fernando Perez <fperez@colorado.edu>
3217
3222
3218 * IPython/genutils.py (clock): modified to return only user time
3223 * IPython/genutils.py (clock): modified to return only user time
3219 (not counting system time), after a discussion on scipy. While
3224 (not counting system time), after a discussion on scipy. While
3220 system time may be a useful quantity occasionally, it may much
3225 system time may be a useful quantity occasionally, it may much
3221 more easily be skewed by occasional swapping or other similar
3226 more easily be skewed by occasional swapping or other similar
3222 activity.
3227 activity.
3223
3228
3224 2003-06-05 Fernando Perez <fperez@colorado.edu>
3229 2003-06-05 Fernando Perez <fperez@colorado.edu>
3225
3230
3226 * IPython/numutils.py (identity): new function, for building
3231 * IPython/numutils.py (identity): new function, for building
3227 arbitrary rank Kronecker deltas (mostly backwards compatible with
3232 arbitrary rank Kronecker deltas (mostly backwards compatible with
3228 Numeric.identity)
3233 Numeric.identity)
3229
3234
3230 2003-06-03 Fernando Perez <fperez@colorado.edu>
3235 2003-06-03 Fernando Perez <fperez@colorado.edu>
3231
3236
3232 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3237 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3233 arguments passed to magics with spaces, to allow trailing '\' to
3238 arguments passed to magics with spaces, to allow trailing '\' to
3234 work normally (mainly for Windows users).
3239 work normally (mainly for Windows users).
3235
3240
3236 2003-05-29 Fernando Perez <fperez@colorado.edu>
3241 2003-05-29 Fernando Perez <fperez@colorado.edu>
3237
3242
3238 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3243 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3239 instead of pydoc.help. This fixes a bizarre behavior where
3244 instead of pydoc.help. This fixes a bizarre behavior where
3240 printing '%s' % locals() would trigger the help system. Now
3245 printing '%s' % locals() would trigger the help system. Now
3241 ipython behaves like normal python does.
3246 ipython behaves like normal python does.
3242
3247
3243 Note that if one does 'from pydoc import help', the bizarre
3248 Note that if one does 'from pydoc import help', the bizarre
3244 behavior returns, but this will also happen in normal python, so
3249 behavior returns, but this will also happen in normal python, so
3245 it's not an ipython bug anymore (it has to do with how pydoc.help
3250 it's not an ipython bug anymore (it has to do with how pydoc.help
3246 is implemented).
3251 is implemented).
3247
3252
3248 2003-05-22 Fernando Perez <fperez@colorado.edu>
3253 2003-05-22 Fernando Perez <fperez@colorado.edu>
3249
3254
3250 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3255 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3251 return [] instead of None when nothing matches, also match to end
3256 return [] instead of None when nothing matches, also match to end
3252 of line. Patch by Gary Bishop.
3257 of line. Patch by Gary Bishop.
3253
3258
3254 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3259 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3255 protection as before, for files passed on the command line. This
3260 protection as before, for files passed on the command line. This
3256 prevents the CrashHandler from kicking in if user files call into
3261 prevents the CrashHandler from kicking in if user files call into
3257 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3262 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3258 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3263 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3259
3264
3260 2003-05-20 *** Released version 0.4.0
3265 2003-05-20 *** Released version 0.4.0
3261
3266
3262 2003-05-20 Fernando Perez <fperez@colorado.edu>
3267 2003-05-20 Fernando Perez <fperez@colorado.edu>
3263
3268
3264 * setup.py: added support for manpages. It's a bit hackish b/c of
3269 * setup.py: added support for manpages. It's a bit hackish b/c of
3265 a bug in the way the bdist_rpm distutils target handles gzipped
3270 a bug in the way the bdist_rpm distutils target handles gzipped
3266 manpages, but it works. After a patch by Jack.
3271 manpages, but it works. After a patch by Jack.
3267
3272
3268 2003-05-19 Fernando Perez <fperez@colorado.edu>
3273 2003-05-19 Fernando Perez <fperez@colorado.edu>
3269
3274
3270 * IPython/numutils.py: added a mockup of the kinds module, since
3275 * IPython/numutils.py: added a mockup of the kinds module, since
3271 it was recently removed from Numeric. This way, numutils will
3276 it was recently removed from Numeric. This way, numutils will
3272 work for all users even if they are missing kinds.
3277 work for all users even if they are missing kinds.
3273
3278
3274 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3279 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3275 failure, which can occur with SWIG-wrapped extensions. After a
3280 failure, which can occur with SWIG-wrapped extensions. After a
3276 crash report from Prabhu.
3281 crash report from Prabhu.
3277
3282
3278 2003-05-16 Fernando Perez <fperez@colorado.edu>
3283 2003-05-16 Fernando Perez <fperez@colorado.edu>
3279
3284
3280 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3285 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3281 protect ipython from user code which may call directly
3286 protect ipython from user code which may call directly
3282 sys.excepthook (this looks like an ipython crash to the user, even
3287 sys.excepthook (this looks like an ipython crash to the user, even
3283 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3288 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3284 This is especially important to help users of WxWindows, but may
3289 This is especially important to help users of WxWindows, but may
3285 also be useful in other cases.
3290 also be useful in other cases.
3286
3291
3287 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3292 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3288 an optional tb_offset to be specified, and to preserve exception
3293 an optional tb_offset to be specified, and to preserve exception
3289 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3294 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3290
3295
3291 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3296 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3292
3297
3293 2003-05-15 Fernando Perez <fperez@colorado.edu>
3298 2003-05-15 Fernando Perez <fperez@colorado.edu>
3294
3299
3295 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3300 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3296 installing for a new user under Windows.
3301 installing for a new user under Windows.
3297
3302
3298 2003-05-12 Fernando Perez <fperez@colorado.edu>
3303 2003-05-12 Fernando Perez <fperez@colorado.edu>
3299
3304
3300 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3305 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3301 handler for Emacs comint-based lines. Currently it doesn't do
3306 handler for Emacs comint-based lines. Currently it doesn't do
3302 much (but importantly, it doesn't update the history cache). In
3307 much (but importantly, it doesn't update the history cache). In
3303 the future it may be expanded if Alex needs more functionality
3308 the future it may be expanded if Alex needs more functionality
3304 there.
3309 there.
3305
3310
3306 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3311 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3307 info to crash reports.
3312 info to crash reports.
3308
3313
3309 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3314 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3310 just like Python's -c. Also fixed crash with invalid -color
3315 just like Python's -c. Also fixed crash with invalid -color
3311 option value at startup. Thanks to Will French
3316 option value at startup. Thanks to Will French
3312 <wfrench-AT-bestweb.net> for the bug report.
3317 <wfrench-AT-bestweb.net> for the bug report.
3313
3318
3314 2003-05-09 Fernando Perez <fperez@colorado.edu>
3319 2003-05-09 Fernando Perez <fperez@colorado.edu>
3315
3320
3316 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3321 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3317 to EvalDict (it's a mapping, after all) and simplified its code
3322 to EvalDict (it's a mapping, after all) and simplified its code
3318 quite a bit, after a nice discussion on c.l.py where Gustavo
3323 quite a bit, after a nice discussion on c.l.py where Gustavo
3319 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3324 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3320
3325
3321 2003-04-30 Fernando Perez <fperez@colorado.edu>
3326 2003-04-30 Fernando Perez <fperez@colorado.edu>
3322
3327
3323 * IPython/genutils.py (timings_out): modified it to reduce its
3328 * IPython/genutils.py (timings_out): modified it to reduce its
3324 overhead in the common reps==1 case.
3329 overhead in the common reps==1 case.
3325
3330
3326 2003-04-29 Fernando Perez <fperez@colorado.edu>
3331 2003-04-29 Fernando Perez <fperez@colorado.edu>
3327
3332
3328 * IPython/genutils.py (timings_out): Modified to use the resource
3333 * IPython/genutils.py (timings_out): Modified to use the resource
3329 module, which avoids the wraparound problems of time.clock().
3334 module, which avoids the wraparound problems of time.clock().
3330
3335
3331 2003-04-17 *** Released version 0.2.15pre4
3336 2003-04-17 *** Released version 0.2.15pre4
3332
3337
3333 2003-04-17 Fernando Perez <fperez@colorado.edu>
3338 2003-04-17 Fernando Perez <fperez@colorado.edu>
3334
3339
3335 * setup.py (scriptfiles): Split windows-specific stuff over to a
3340 * setup.py (scriptfiles): Split windows-specific stuff over to a
3336 separate file, in an attempt to have a Windows GUI installer.
3341 separate file, in an attempt to have a Windows GUI installer.
3337 That didn't work, but part of the groundwork is done.
3342 That didn't work, but part of the groundwork is done.
3338
3343
3339 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3344 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3340 indent/unindent with 4 spaces. Particularly useful in combination
3345 indent/unindent with 4 spaces. Particularly useful in combination
3341 with the new auto-indent option.
3346 with the new auto-indent option.
3342
3347
3343 2003-04-16 Fernando Perez <fperez@colorado.edu>
3348 2003-04-16 Fernando Perez <fperez@colorado.edu>
3344
3349
3345 * IPython/Magic.py: various replacements of self.rc for
3350 * IPython/Magic.py: various replacements of self.rc for
3346 self.shell.rc. A lot more remains to be done to fully disentangle
3351 self.shell.rc. A lot more remains to be done to fully disentangle
3347 this class from the main Shell class.
3352 this class from the main Shell class.
3348
3353
3349 * IPython/GnuplotRuntime.py: added checks for mouse support so
3354 * IPython/GnuplotRuntime.py: added checks for mouse support so
3350 that we don't try to enable it if the current gnuplot doesn't
3355 that we don't try to enable it if the current gnuplot doesn't
3351 really support it. Also added checks so that we don't try to
3356 really support it. Also added checks so that we don't try to
3352 enable persist under Windows (where Gnuplot doesn't recognize the
3357 enable persist under Windows (where Gnuplot doesn't recognize the
3353 option).
3358 option).
3354
3359
3355 * IPython/iplib.py (InteractiveShell.interact): Added optional
3360 * IPython/iplib.py (InteractiveShell.interact): Added optional
3356 auto-indenting code, after a patch by King C. Shu
3361 auto-indenting code, after a patch by King C. Shu
3357 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3362 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3358 get along well with pasting indented code. If I ever figure out
3363 get along well with pasting indented code. If I ever figure out
3359 how to make that part go well, it will become on by default.
3364 how to make that part go well, it will become on by default.
3360
3365
3361 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3366 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3362 crash ipython if there was an unmatched '%' in the user's prompt
3367 crash ipython if there was an unmatched '%' in the user's prompt
3363 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3368 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3364
3369
3365 * IPython/iplib.py (InteractiveShell.interact): removed the
3370 * IPython/iplib.py (InteractiveShell.interact): removed the
3366 ability to ask the user whether he wants to crash or not at the
3371 ability to ask the user whether he wants to crash or not at the
3367 'last line' exception handler. Calling functions at that point
3372 'last line' exception handler. Calling functions at that point
3368 changes the stack, and the error reports would have incorrect
3373 changes the stack, and the error reports would have incorrect
3369 tracebacks.
3374 tracebacks.
3370
3375
3371 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3376 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3372 pass through a peger a pretty-printed form of any object. After a
3377 pass through a peger a pretty-printed form of any object. After a
3373 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3378 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3374
3379
3375 2003-04-14 Fernando Perez <fperez@colorado.edu>
3380 2003-04-14 Fernando Perez <fperez@colorado.edu>
3376
3381
3377 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3382 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3378 all files in ~ would be modified at first install (instead of
3383 all files in ~ would be modified at first install (instead of
3379 ~/.ipython). This could be potentially disastrous, as the
3384 ~/.ipython). This could be potentially disastrous, as the
3380 modification (make line-endings native) could damage binary files.
3385 modification (make line-endings native) could damage binary files.
3381
3386
3382 2003-04-10 Fernando Perez <fperez@colorado.edu>
3387 2003-04-10 Fernando Perez <fperez@colorado.edu>
3383
3388
3384 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3389 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3385 handle only lines which are invalid python. This now means that
3390 handle only lines which are invalid python. This now means that
3386 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3391 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3387 for the bug report.
3392 for the bug report.
3388
3393
3389 2003-04-01 Fernando Perez <fperez@colorado.edu>
3394 2003-04-01 Fernando Perez <fperez@colorado.edu>
3390
3395
3391 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3396 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3392 where failing to set sys.last_traceback would crash pdb.pm().
3397 where failing to set sys.last_traceback would crash pdb.pm().
3393 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3398 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3394 report.
3399 report.
3395
3400
3396 2003-03-25 Fernando Perez <fperez@colorado.edu>
3401 2003-03-25 Fernando Perez <fperez@colorado.edu>
3397
3402
3398 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3403 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3399 before printing it (it had a lot of spurious blank lines at the
3404 before printing it (it had a lot of spurious blank lines at the
3400 end).
3405 end).
3401
3406
3402 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3407 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3403 output would be sent 21 times! Obviously people don't use this
3408 output would be sent 21 times! Obviously people don't use this
3404 too often, or I would have heard about it.
3409 too often, or I would have heard about it.
3405
3410
3406 2003-03-24 Fernando Perez <fperez@colorado.edu>
3411 2003-03-24 Fernando Perez <fperez@colorado.edu>
3407
3412
3408 * setup.py (scriptfiles): renamed the data_files parameter from
3413 * setup.py (scriptfiles): renamed the data_files parameter from
3409 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3414 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3410 for the patch.
3415 for the patch.
3411
3416
3412 2003-03-20 Fernando Perez <fperez@colorado.edu>
3417 2003-03-20 Fernando Perez <fperez@colorado.edu>
3413
3418
3414 * IPython/genutils.py (error): added error() and fatal()
3419 * IPython/genutils.py (error): added error() and fatal()
3415 functions.
3420 functions.
3416
3421
3417 2003-03-18 *** Released version 0.2.15pre3
3422 2003-03-18 *** Released version 0.2.15pre3
3418
3423
3419 2003-03-18 Fernando Perez <fperez@colorado.edu>
3424 2003-03-18 Fernando Perez <fperez@colorado.edu>
3420
3425
3421 * setupext/install_data_ext.py
3426 * setupext/install_data_ext.py
3422 (install_data_ext.initialize_options): Class contributed by Jack
3427 (install_data_ext.initialize_options): Class contributed by Jack
3423 Moffit for fixing the old distutils hack. He is sending this to
3428 Moffit for fixing the old distutils hack. He is sending this to
3424 the distutils folks so in the future we may not need it as a
3429 the distutils folks so in the future we may not need it as a
3425 private fix.
3430 private fix.
3426
3431
3427 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3432 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3428 changes for Debian packaging. See his patch for full details.
3433 changes for Debian packaging. See his patch for full details.
3429 The old distutils hack of making the ipythonrc* files carry a
3434 The old distutils hack of making the ipythonrc* files carry a
3430 bogus .py extension is gone, at last. Examples were moved to a
3435 bogus .py extension is gone, at last. Examples were moved to a
3431 separate subdir under doc/, and the separate executable scripts
3436 separate subdir under doc/, and the separate executable scripts
3432 now live in their own directory. Overall a great cleanup. The
3437 now live in their own directory. Overall a great cleanup. The
3433 manual was updated to use the new files, and setup.py has been
3438 manual was updated to use the new files, and setup.py has been
3434 fixed for this setup.
3439 fixed for this setup.
3435
3440
3436 * IPython/PyColorize.py (Parser.usage): made non-executable and
3441 * IPython/PyColorize.py (Parser.usage): made non-executable and
3437 created a pycolor wrapper around it to be included as a script.
3442 created a pycolor wrapper around it to be included as a script.
3438
3443
3439 2003-03-12 *** Released version 0.2.15pre2
3444 2003-03-12 *** Released version 0.2.15pre2
3440
3445
3441 2003-03-12 Fernando Perez <fperez@colorado.edu>
3446 2003-03-12 Fernando Perez <fperez@colorado.edu>
3442
3447
3443 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3448 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3444 long-standing problem with garbage characters in some terminals.
3449 long-standing problem with garbage characters in some terminals.
3445 The issue was really that the \001 and \002 escapes must _only_ be
3450 The issue was really that the \001 and \002 escapes must _only_ be
3446 passed to input prompts (which call readline), but _never_ to
3451 passed to input prompts (which call readline), but _never_ to
3447 normal text to be printed on screen. I changed ColorANSI to have
3452 normal text to be printed on screen. I changed ColorANSI to have
3448 two classes: TermColors and InputTermColors, each with the
3453 two classes: TermColors and InputTermColors, each with the
3449 appropriate escapes for input prompts or normal text. The code in
3454 appropriate escapes for input prompts or normal text. The code in
3450 Prompts.py got slightly more complicated, but this very old and
3455 Prompts.py got slightly more complicated, but this very old and
3451 annoying bug is finally fixed.
3456 annoying bug is finally fixed.
3452
3457
3453 All the credit for nailing down the real origin of this problem
3458 All the credit for nailing down the real origin of this problem
3454 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3459 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3455 *Many* thanks to him for spending quite a bit of effort on this.
3460 *Many* thanks to him for spending quite a bit of effort on this.
3456
3461
3457 2003-03-05 *** Released version 0.2.15pre1
3462 2003-03-05 *** Released version 0.2.15pre1
3458
3463
3459 2003-03-03 Fernando Perez <fperez@colorado.edu>
3464 2003-03-03 Fernando Perez <fperez@colorado.edu>
3460
3465
3461 * IPython/FakeModule.py: Moved the former _FakeModule to a
3466 * IPython/FakeModule.py: Moved the former _FakeModule to a
3462 separate file, because it's also needed by Magic (to fix a similar
3467 separate file, because it's also needed by Magic (to fix a similar
3463 pickle-related issue in @run).
3468 pickle-related issue in @run).
3464
3469
3465 2003-03-02 Fernando Perez <fperez@colorado.edu>
3470 2003-03-02 Fernando Perez <fperez@colorado.edu>
3466
3471
3467 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3472 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3468 the autocall option at runtime.
3473 the autocall option at runtime.
3469 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3474 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3470 across Magic.py to start separating Magic from InteractiveShell.
3475 across Magic.py to start separating Magic from InteractiveShell.
3471 (Magic._ofind): Fixed to return proper namespace for dotted
3476 (Magic._ofind): Fixed to return proper namespace for dotted
3472 names. Before, a dotted name would always return 'not currently
3477 names. Before, a dotted name would always return 'not currently
3473 defined', because it would find the 'parent'. s.x would be found,
3478 defined', because it would find the 'parent'. s.x would be found,
3474 but since 'x' isn't defined by itself, it would get confused.
3479 but since 'x' isn't defined by itself, it would get confused.
3475 (Magic.magic_run): Fixed pickling problems reported by Ralf
3480 (Magic.magic_run): Fixed pickling problems reported by Ralf
3476 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3481 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3477 that I'd used when Mike Heeter reported similar issues at the
3482 that I'd used when Mike Heeter reported similar issues at the
3478 top-level, but now for @run. It boils down to injecting the
3483 top-level, but now for @run. It boils down to injecting the
3479 namespace where code is being executed with something that looks
3484 namespace where code is being executed with something that looks
3480 enough like a module to fool pickle.dump(). Since a pickle stores
3485 enough like a module to fool pickle.dump(). Since a pickle stores
3481 a named reference to the importing module, we need this for
3486 a named reference to the importing module, we need this for
3482 pickles to save something sensible.
3487 pickles to save something sensible.
3483
3488
3484 * IPython/ipmaker.py (make_IPython): added an autocall option.
3489 * IPython/ipmaker.py (make_IPython): added an autocall option.
3485
3490
3486 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3491 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3487 the auto-eval code. Now autocalling is an option, and the code is
3492 the auto-eval code. Now autocalling is an option, and the code is
3488 also vastly safer. There is no more eval() involved at all.
3493 also vastly safer. There is no more eval() involved at all.
3489
3494
3490 2003-03-01 Fernando Perez <fperez@colorado.edu>
3495 2003-03-01 Fernando Perez <fperez@colorado.edu>
3491
3496
3492 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3497 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3493 dict with named keys instead of a tuple.
3498 dict with named keys instead of a tuple.
3494
3499
3495 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3500 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3496
3501
3497 * setup.py (make_shortcut): Fixed message about directories
3502 * setup.py (make_shortcut): Fixed message about directories
3498 created during Windows installation (the directories were ok, just
3503 created during Windows installation (the directories were ok, just
3499 the printed message was misleading). Thanks to Chris Liechti
3504 the printed message was misleading). Thanks to Chris Liechti
3500 <cliechti-AT-gmx.net> for the heads up.
3505 <cliechti-AT-gmx.net> for the heads up.
3501
3506
3502 2003-02-21 Fernando Perez <fperez@colorado.edu>
3507 2003-02-21 Fernando Perez <fperez@colorado.edu>
3503
3508
3504 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3509 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3505 of ValueError exception when checking for auto-execution. This
3510 of ValueError exception when checking for auto-execution. This
3506 one is raised by things like Numeric arrays arr.flat when the
3511 one is raised by things like Numeric arrays arr.flat when the
3507 array is non-contiguous.
3512 array is non-contiguous.
3508
3513
3509 2003-01-31 Fernando Perez <fperez@colorado.edu>
3514 2003-01-31 Fernando Perez <fperez@colorado.edu>
3510
3515
3511 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3516 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3512 not return any value at all (even though the command would get
3517 not return any value at all (even though the command would get
3513 executed).
3518 executed).
3514 (xsys): Flush stdout right after printing the command to ensure
3519 (xsys): Flush stdout right after printing the command to ensure
3515 proper ordering of commands and command output in the total
3520 proper ordering of commands and command output in the total
3516 output.
3521 output.
3517 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3522 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3518 system/getoutput as defaults. The old ones are kept for
3523 system/getoutput as defaults. The old ones are kept for
3519 compatibility reasons, so no code which uses this library needs
3524 compatibility reasons, so no code which uses this library needs
3520 changing.
3525 changing.
3521
3526
3522 2003-01-27 *** Released version 0.2.14
3527 2003-01-27 *** Released version 0.2.14
3523
3528
3524 2003-01-25 Fernando Perez <fperez@colorado.edu>
3529 2003-01-25 Fernando Perez <fperez@colorado.edu>
3525
3530
3526 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3531 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3527 functions defined in previous edit sessions could not be re-edited
3532 functions defined in previous edit sessions could not be re-edited
3528 (because the temp files were immediately removed). Now temp files
3533 (because the temp files were immediately removed). Now temp files
3529 are removed only at IPython's exit.
3534 are removed only at IPython's exit.
3530 (Magic.magic_run): Improved @run to perform shell-like expansions
3535 (Magic.magic_run): Improved @run to perform shell-like expansions
3531 on its arguments (~users and $VARS). With this, @run becomes more
3536 on its arguments (~users and $VARS). With this, @run becomes more
3532 like a normal command-line.
3537 like a normal command-line.
3533
3538
3534 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3539 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3535 bugs related to embedding and cleaned up that code. A fairly
3540 bugs related to embedding and cleaned up that code. A fairly
3536 important one was the impossibility to access the global namespace
3541 important one was the impossibility to access the global namespace
3537 through the embedded IPython (only local variables were visible).
3542 through the embedded IPython (only local variables were visible).
3538
3543
3539 2003-01-14 Fernando Perez <fperez@colorado.edu>
3544 2003-01-14 Fernando Perez <fperez@colorado.edu>
3540
3545
3541 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3546 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3542 auto-calling to be a bit more conservative. Now it doesn't get
3547 auto-calling to be a bit more conservative. Now it doesn't get
3543 triggered if any of '!=()<>' are in the rest of the input line, to
3548 triggered if any of '!=()<>' are in the rest of the input line, to
3544 allow comparing callables. Thanks to Alex for the heads up.
3549 allow comparing callables. Thanks to Alex for the heads up.
3545
3550
3546 2003-01-07 Fernando Perez <fperez@colorado.edu>
3551 2003-01-07 Fernando Perez <fperez@colorado.edu>
3547
3552
3548 * IPython/genutils.py (page): fixed estimation of the number of
3553 * IPython/genutils.py (page): fixed estimation of the number of
3549 lines in a string to be paged to simply count newlines. This
3554 lines in a string to be paged to simply count newlines. This
3550 prevents over-guessing due to embedded escape sequences. A better
3555 prevents over-guessing due to embedded escape sequences. A better
3551 long-term solution would involve stripping out the control chars
3556 long-term solution would involve stripping out the control chars
3552 for the count, but it's potentially so expensive I just don't
3557 for the count, but it's potentially so expensive I just don't
3553 think it's worth doing.
3558 think it's worth doing.
3554
3559
3555 2002-12-19 *** Released version 0.2.14pre50
3560 2002-12-19 *** Released version 0.2.14pre50
3556
3561
3557 2002-12-19 Fernando Perez <fperez@colorado.edu>
3562 2002-12-19 Fernando Perez <fperez@colorado.edu>
3558
3563
3559 * tools/release (version): Changed release scripts to inform
3564 * tools/release (version): Changed release scripts to inform
3560 Andrea and build a NEWS file with a list of recent changes.
3565 Andrea and build a NEWS file with a list of recent changes.
3561
3566
3562 * IPython/ColorANSI.py (__all__): changed terminal detection
3567 * IPython/ColorANSI.py (__all__): changed terminal detection
3563 code. Seems to work better for xterms without breaking
3568 code. Seems to work better for xterms without breaking
3564 konsole. Will need more testing to determine if WinXP and Mac OSX
3569 konsole. Will need more testing to determine if WinXP and Mac OSX
3565 also work ok.
3570 also work ok.
3566
3571
3567 2002-12-18 *** Released version 0.2.14pre49
3572 2002-12-18 *** Released version 0.2.14pre49
3568
3573
3569 2002-12-18 Fernando Perez <fperez@colorado.edu>
3574 2002-12-18 Fernando Perez <fperez@colorado.edu>
3570
3575
3571 * Docs: added new info about Mac OSX, from Andrea.
3576 * Docs: added new info about Mac OSX, from Andrea.
3572
3577
3573 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3578 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3574 allow direct plotting of python strings whose format is the same
3579 allow direct plotting of python strings whose format is the same
3575 of gnuplot data files.
3580 of gnuplot data files.
3576
3581
3577 2002-12-16 Fernando Perez <fperez@colorado.edu>
3582 2002-12-16 Fernando Perez <fperez@colorado.edu>
3578
3583
3579 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3584 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3580 value of exit question to be acknowledged.
3585 value of exit question to be acknowledged.
3581
3586
3582 2002-12-03 Fernando Perez <fperez@colorado.edu>
3587 2002-12-03 Fernando Perez <fperez@colorado.edu>
3583
3588
3584 * IPython/ipmaker.py: removed generators, which had been added
3589 * IPython/ipmaker.py: removed generators, which had been added
3585 by mistake in an earlier debugging run. This was causing trouble
3590 by mistake in an earlier debugging run. This was causing trouble
3586 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3591 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3587 for pointing this out.
3592 for pointing this out.
3588
3593
3589 2002-11-17 Fernando Perez <fperez@colorado.edu>
3594 2002-11-17 Fernando Perez <fperez@colorado.edu>
3590
3595
3591 * Manual: updated the Gnuplot section.
3596 * Manual: updated the Gnuplot section.
3592
3597
3593 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3598 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3594 a much better split of what goes in Runtime and what goes in
3599 a much better split of what goes in Runtime and what goes in
3595 Interactive.
3600 Interactive.
3596
3601
3597 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3602 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3598 being imported from iplib.
3603 being imported from iplib.
3599
3604
3600 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3605 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3601 for command-passing. Now the global Gnuplot instance is called
3606 for command-passing. Now the global Gnuplot instance is called
3602 'gp' instead of 'g', which was really a far too fragile and
3607 'gp' instead of 'g', which was really a far too fragile and
3603 common name.
3608 common name.
3604
3609
3605 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3610 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3606 bounding boxes generated by Gnuplot for square plots.
3611 bounding boxes generated by Gnuplot for square plots.
3607
3612
3608 * IPython/genutils.py (popkey): new function added. I should
3613 * IPython/genutils.py (popkey): new function added. I should
3609 suggest this on c.l.py as a dict method, it seems useful.
3614 suggest this on c.l.py as a dict method, it seems useful.
3610
3615
3611 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3616 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3612 to transparently handle PostScript generation. MUCH better than
3617 to transparently handle PostScript generation. MUCH better than
3613 the previous plot_eps/replot_eps (which I removed now). The code
3618 the previous plot_eps/replot_eps (which I removed now). The code
3614 is also fairly clean and well documented now (including
3619 is also fairly clean and well documented now (including
3615 docstrings).
3620 docstrings).
3616
3621
3617 2002-11-13 Fernando Perez <fperez@colorado.edu>
3622 2002-11-13 Fernando Perez <fperez@colorado.edu>
3618
3623
3619 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3624 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3620 (inconsistent with options).
3625 (inconsistent with options).
3621
3626
3622 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3627 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3623 manually disabled, I don't know why. Fixed it.
3628 manually disabled, I don't know why. Fixed it.
3624 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3629 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3625 eps output.
3630 eps output.
3626
3631
3627 2002-11-12 Fernando Perez <fperez@colorado.edu>
3632 2002-11-12 Fernando Perez <fperez@colorado.edu>
3628
3633
3629 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3634 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3630 don't propagate up to caller. Fixes crash reported by François
3635 don't propagate up to caller. Fixes crash reported by François
3631 Pinard.
3636 Pinard.
3632
3637
3633 2002-11-09 Fernando Perez <fperez@colorado.edu>
3638 2002-11-09 Fernando Perez <fperez@colorado.edu>
3634
3639
3635 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3640 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3636 history file for new users.
3641 history file for new users.
3637 (make_IPython): fixed bug where initial install would leave the
3642 (make_IPython): fixed bug where initial install would leave the
3638 user running in the .ipython dir.
3643 user running in the .ipython dir.
3639 (make_IPython): fixed bug where config dir .ipython would be
3644 (make_IPython): fixed bug where config dir .ipython would be
3640 created regardless of the given -ipythondir option. Thanks to Cory
3645 created regardless of the given -ipythondir option. Thanks to Cory
3641 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3646 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3642
3647
3643 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3648 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3644 type confirmations. Will need to use it in all of IPython's code
3649 type confirmations. Will need to use it in all of IPython's code
3645 consistently.
3650 consistently.
3646
3651
3647 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3652 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3648 context to print 31 lines instead of the default 5. This will make
3653 context to print 31 lines instead of the default 5. This will make
3649 the crash reports extremely detailed in case the problem is in
3654 the crash reports extremely detailed in case the problem is in
3650 libraries I don't have access to.
3655 libraries I don't have access to.
3651
3656
3652 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3657 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3653 line of defense' code to still crash, but giving users fair
3658 line of defense' code to still crash, but giving users fair
3654 warning. I don't want internal errors to go unreported: if there's
3659 warning. I don't want internal errors to go unreported: if there's
3655 an internal problem, IPython should crash and generate a full
3660 an internal problem, IPython should crash and generate a full
3656 report.
3661 report.
3657
3662
3658 2002-11-08 Fernando Perez <fperez@colorado.edu>
3663 2002-11-08 Fernando Perez <fperez@colorado.edu>
3659
3664
3660 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3665 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3661 otherwise uncaught exceptions which can appear if people set
3666 otherwise uncaught exceptions which can appear if people set
3662 sys.stdout to something badly broken. Thanks to a crash report
3667 sys.stdout to something badly broken. Thanks to a crash report
3663 from henni-AT-mail.brainbot.com.
3668 from henni-AT-mail.brainbot.com.
3664
3669
3665 2002-11-04 Fernando Perez <fperez@colorado.edu>
3670 2002-11-04 Fernando Perez <fperez@colorado.edu>
3666
3671
3667 * IPython/iplib.py (InteractiveShell.interact): added
3672 * IPython/iplib.py (InteractiveShell.interact): added
3668 __IPYTHON__active to the builtins. It's a flag which goes on when
3673 __IPYTHON__active to the builtins. It's a flag which goes on when
3669 the interaction starts and goes off again when it stops. This
3674 the interaction starts and goes off again when it stops. This
3670 allows embedding code to detect being inside IPython. Before this
3675 allows embedding code to detect being inside IPython. Before this
3671 was done via __IPYTHON__, but that only shows that an IPython
3676 was done via __IPYTHON__, but that only shows that an IPython
3672 instance has been created.
3677 instance has been created.
3673
3678
3674 * IPython/Magic.py (Magic.magic_env): I realized that in a
3679 * IPython/Magic.py (Magic.magic_env): I realized that in a
3675 UserDict, instance.data holds the data as a normal dict. So I
3680 UserDict, instance.data holds the data as a normal dict. So I
3676 modified @env to return os.environ.data instead of rebuilding a
3681 modified @env to return os.environ.data instead of rebuilding a
3677 dict by hand.
3682 dict by hand.
3678
3683
3679 2002-11-02 Fernando Perez <fperez@colorado.edu>
3684 2002-11-02 Fernando Perez <fperez@colorado.edu>
3680
3685
3681 * IPython/genutils.py (warn): changed so that level 1 prints no
3686 * IPython/genutils.py (warn): changed so that level 1 prints no
3682 header. Level 2 is now the default (with 'WARNING' header, as
3687 header. Level 2 is now the default (with 'WARNING' header, as
3683 before). I think I tracked all places where changes were needed in
3688 before). I think I tracked all places where changes were needed in
3684 IPython, but outside code using the old level numbering may have
3689 IPython, but outside code using the old level numbering may have
3685 broken.
3690 broken.
3686
3691
3687 * IPython/iplib.py (InteractiveShell.runcode): added this to
3692 * IPython/iplib.py (InteractiveShell.runcode): added this to
3688 handle the tracebacks in SystemExit traps correctly. The previous
3693 handle the tracebacks in SystemExit traps correctly. The previous
3689 code (through interact) was printing more of the stack than
3694 code (through interact) was printing more of the stack than
3690 necessary, showing IPython internal code to the user.
3695 necessary, showing IPython internal code to the user.
3691
3696
3692 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3697 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3693 default. Now that the default at the confirmation prompt is yes,
3698 default. Now that the default at the confirmation prompt is yes,
3694 it's not so intrusive. François' argument that ipython sessions
3699 it's not so intrusive. François' argument that ipython sessions
3695 tend to be complex enough not to lose them from an accidental C-d,
3700 tend to be complex enough not to lose them from an accidental C-d,
3696 is a valid one.
3701 is a valid one.
3697
3702
3698 * IPython/iplib.py (InteractiveShell.interact): added a
3703 * IPython/iplib.py (InteractiveShell.interact): added a
3699 showtraceback() call to the SystemExit trap, and modified the exit
3704 showtraceback() call to the SystemExit trap, and modified the exit
3700 confirmation to have yes as the default.
3705 confirmation to have yes as the default.
3701
3706
3702 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3707 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3703 this file. It's been gone from the code for a long time, this was
3708 this file. It's been gone from the code for a long time, this was
3704 simply leftover junk.
3709 simply leftover junk.
3705
3710
3706 2002-11-01 Fernando Perez <fperez@colorado.edu>
3711 2002-11-01 Fernando Perez <fperez@colorado.edu>
3707
3712
3708 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3713 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3709 added. If set, IPython now traps EOF and asks for
3714 added. If set, IPython now traps EOF and asks for
3710 confirmation. After a request by François Pinard.
3715 confirmation. After a request by François Pinard.
3711
3716
3712 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3717 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3713 of @abort, and with a new (better) mechanism for handling the
3718 of @abort, and with a new (better) mechanism for handling the
3714 exceptions.
3719 exceptions.
3715
3720
3716 2002-10-27 Fernando Perez <fperez@colorado.edu>
3721 2002-10-27 Fernando Perez <fperez@colorado.edu>
3717
3722
3718 * IPython/usage.py (__doc__): updated the --help information and
3723 * IPython/usage.py (__doc__): updated the --help information and
3719 the ipythonrc file to indicate that -log generates
3724 the ipythonrc file to indicate that -log generates
3720 ./ipython.log. Also fixed the corresponding info in @logstart.
3725 ./ipython.log. Also fixed the corresponding info in @logstart.
3721 This and several other fixes in the manuals thanks to reports by
3726 This and several other fixes in the manuals thanks to reports by
3722 François Pinard <pinard-AT-iro.umontreal.ca>.
3727 François Pinard <pinard-AT-iro.umontreal.ca>.
3723
3728
3724 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3729 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3725 refer to @logstart (instead of @log, which doesn't exist).
3730 refer to @logstart (instead of @log, which doesn't exist).
3726
3731
3727 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3732 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3728 AttributeError crash. Thanks to Christopher Armstrong
3733 AttributeError crash. Thanks to Christopher Armstrong
3729 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3734 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3730 introduced recently (in 0.2.14pre37) with the fix to the eval
3735 introduced recently (in 0.2.14pre37) with the fix to the eval
3731 problem mentioned below.
3736 problem mentioned below.
3732
3737
3733 2002-10-17 Fernando Perez <fperez@colorado.edu>
3738 2002-10-17 Fernando Perez <fperez@colorado.edu>
3734
3739
3735 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3740 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3736 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3741 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3737
3742
3738 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3743 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3739 this function to fix a problem reported by Alex Schmolck. He saw
3744 this function to fix a problem reported by Alex Schmolck. He saw
3740 it with list comprehensions and generators, which were getting
3745 it with list comprehensions and generators, which were getting
3741 called twice. The real problem was an 'eval' call in testing for
3746 called twice. The real problem was an 'eval' call in testing for
3742 automagic which was evaluating the input line silently.
3747 automagic which was evaluating the input line silently.
3743
3748
3744 This is a potentially very nasty bug, if the input has side
3749 This is a potentially very nasty bug, if the input has side
3745 effects which must not be repeated. The code is much cleaner now,
3750 effects which must not be repeated. The code is much cleaner now,
3746 without any blanket 'except' left and with a regexp test for
3751 without any blanket 'except' left and with a regexp test for
3747 actual function names.
3752 actual function names.
3748
3753
3749 But an eval remains, which I'm not fully comfortable with. I just
3754 But an eval remains, which I'm not fully comfortable with. I just
3750 don't know how to find out if an expression could be a callable in
3755 don't know how to find out if an expression could be a callable in
3751 the user's namespace without doing an eval on the string. However
3756 the user's namespace without doing an eval on the string. However
3752 that string is now much more strictly checked so that no code
3757 that string is now much more strictly checked so that no code
3753 slips by, so the eval should only happen for things that can
3758 slips by, so the eval should only happen for things that can
3754 really be only function/method names.
3759 really be only function/method names.
3755
3760
3756 2002-10-15 Fernando Perez <fperez@colorado.edu>
3761 2002-10-15 Fernando Perez <fperez@colorado.edu>
3757
3762
3758 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3763 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3759 OSX information to main manual, removed README_Mac_OSX file from
3764 OSX information to main manual, removed README_Mac_OSX file from
3760 distribution. Also updated credits for recent additions.
3765 distribution. Also updated credits for recent additions.
3761
3766
3762 2002-10-10 Fernando Perez <fperez@colorado.edu>
3767 2002-10-10 Fernando Perez <fperez@colorado.edu>
3763
3768
3764 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3769 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3765 terminal-related issues. Many thanks to Andrea Riciputi
3770 terminal-related issues. Many thanks to Andrea Riciputi
3766 <andrea.riciputi-AT-libero.it> for writing it.
3771 <andrea.riciputi-AT-libero.it> for writing it.
3767
3772
3768 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3773 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3769 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3774 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3770
3775
3771 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3776 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3772 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3777 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3773 <syver-en-AT-online.no> who both submitted patches for this problem.
3778 <syver-en-AT-online.no> who both submitted patches for this problem.
3774
3779
3775 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3780 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3776 global embedding to make sure that things don't overwrite user
3781 global embedding to make sure that things don't overwrite user
3777 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3782 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3778
3783
3779 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3784 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3780 compatibility. Thanks to Hayden Callow
3785 compatibility. Thanks to Hayden Callow
3781 <h.callow-AT-elec.canterbury.ac.nz>
3786 <h.callow-AT-elec.canterbury.ac.nz>
3782
3787
3783 2002-10-04 Fernando Perez <fperez@colorado.edu>
3788 2002-10-04 Fernando Perez <fperez@colorado.edu>
3784
3789
3785 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3790 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3786 Gnuplot.File objects.
3791 Gnuplot.File objects.
3787
3792
3788 2002-07-23 Fernando Perez <fperez@colorado.edu>
3793 2002-07-23 Fernando Perez <fperez@colorado.edu>
3789
3794
3790 * IPython/genutils.py (timing): Added timings() and timing() for
3795 * IPython/genutils.py (timing): Added timings() and timing() for
3791 quick access to the most commonly needed data, the execution
3796 quick access to the most commonly needed data, the execution
3792 times. Old timing() renamed to timings_out().
3797 times. Old timing() renamed to timings_out().
3793
3798
3794 2002-07-18 Fernando Perez <fperez@colorado.edu>
3799 2002-07-18 Fernando Perez <fperez@colorado.edu>
3795
3800
3796 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3801 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3797 bug with nested instances disrupting the parent's tab completion.
3802 bug with nested instances disrupting the parent's tab completion.
3798
3803
3799 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3804 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3800 all_completions code to begin the emacs integration.
3805 all_completions code to begin the emacs integration.
3801
3806
3802 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3807 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3803 argument to allow titling individual arrays when plotting.
3808 argument to allow titling individual arrays when plotting.
3804
3809
3805 2002-07-15 Fernando Perez <fperez@colorado.edu>
3810 2002-07-15 Fernando Perez <fperez@colorado.edu>
3806
3811
3807 * setup.py (make_shortcut): changed to retrieve the value of
3812 * setup.py (make_shortcut): changed to retrieve the value of
3808 'Program Files' directory from the registry (this value changes in
3813 'Program Files' directory from the registry (this value changes in
3809 non-english versions of Windows). Thanks to Thomas Fanslau
3814 non-english versions of Windows). Thanks to Thomas Fanslau
3810 <tfanslau-AT-gmx.de> for the report.
3815 <tfanslau-AT-gmx.de> for the report.
3811
3816
3812 2002-07-10 Fernando Perez <fperez@colorado.edu>
3817 2002-07-10 Fernando Perez <fperez@colorado.edu>
3813
3818
3814 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3819 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3815 a bug in pdb, which crashes if a line with only whitespace is
3820 a bug in pdb, which crashes if a line with only whitespace is
3816 entered. Bug report submitted to sourceforge.
3821 entered. Bug report submitted to sourceforge.
3817
3822
3818 2002-07-09 Fernando Perez <fperez@colorado.edu>
3823 2002-07-09 Fernando Perez <fperez@colorado.edu>
3819
3824
3820 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3825 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3821 reporting exceptions (it's a bug in inspect.py, I just set a
3826 reporting exceptions (it's a bug in inspect.py, I just set a
3822 workaround).
3827 workaround).
3823
3828
3824 2002-07-08 Fernando Perez <fperez@colorado.edu>
3829 2002-07-08 Fernando Perez <fperez@colorado.edu>
3825
3830
3826 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3831 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3827 __IPYTHON__ in __builtins__ to show up in user_ns.
3832 __IPYTHON__ in __builtins__ to show up in user_ns.
3828
3833
3829 2002-07-03 Fernando Perez <fperez@colorado.edu>
3834 2002-07-03 Fernando Perez <fperez@colorado.edu>
3830
3835
3831 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3836 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3832 name from @gp_set_instance to @gp_set_default.
3837 name from @gp_set_instance to @gp_set_default.
3833
3838
3834 * IPython/ipmaker.py (make_IPython): default editor value set to
3839 * IPython/ipmaker.py (make_IPython): default editor value set to
3835 '0' (a string), to match the rc file. Otherwise will crash when
3840 '0' (a string), to match the rc file. Otherwise will crash when
3836 .strip() is called on it.
3841 .strip() is called on it.
3837
3842
3838
3843
3839 2002-06-28 Fernando Perez <fperez@colorado.edu>
3844 2002-06-28 Fernando Perez <fperez@colorado.edu>
3840
3845
3841 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3846 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3842 of files in current directory when a file is executed via
3847 of files in current directory when a file is executed via
3843 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3848 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3844
3849
3845 * setup.py (manfiles): fix for rpm builds, submitted by RA
3850 * setup.py (manfiles): fix for rpm builds, submitted by RA
3846 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3851 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3847
3852
3848 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3853 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3849 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3854 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3850 string!). A. Schmolck caught this one.
3855 string!). A. Schmolck caught this one.
3851
3856
3852 2002-06-27 Fernando Perez <fperez@colorado.edu>
3857 2002-06-27 Fernando Perez <fperez@colorado.edu>
3853
3858
3854 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3859 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3855 defined files at the cmd line. __name__ wasn't being set to
3860 defined files at the cmd line. __name__ wasn't being set to
3856 __main__.
3861 __main__.
3857
3862
3858 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3863 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3859 regular lists and tuples besides Numeric arrays.
3864 regular lists and tuples besides Numeric arrays.
3860
3865
3861 * IPython/Prompts.py (CachedOutput.__call__): Added output
3866 * IPython/Prompts.py (CachedOutput.__call__): Added output
3862 supression for input ending with ';'. Similar to Mathematica and
3867 supression for input ending with ';'. Similar to Mathematica and
3863 Matlab. The _* vars and Out[] list are still updated, just like
3868 Matlab. The _* vars and Out[] list are still updated, just like
3864 Mathematica behaves.
3869 Mathematica behaves.
3865
3870
3866 2002-06-25 Fernando Perez <fperez@colorado.edu>
3871 2002-06-25 Fernando Perez <fperez@colorado.edu>
3867
3872
3868 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3873 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3869 .ini extensions for profiels under Windows.
3874 .ini extensions for profiels under Windows.
3870
3875
3871 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3876 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3872 string form. Fix contributed by Alexander Schmolck
3877 string form. Fix contributed by Alexander Schmolck
3873 <a.schmolck-AT-gmx.net>
3878 <a.schmolck-AT-gmx.net>
3874
3879
3875 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3880 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3876 pre-configured Gnuplot instance.
3881 pre-configured Gnuplot instance.
3877
3882
3878 2002-06-21 Fernando Perez <fperez@colorado.edu>
3883 2002-06-21 Fernando Perez <fperez@colorado.edu>
3879
3884
3880 * IPython/numutils.py (exp_safe): new function, works around the
3885 * IPython/numutils.py (exp_safe): new function, works around the
3881 underflow problems in Numeric.
3886 underflow problems in Numeric.
3882 (log2): New fn. Safe log in base 2: returns exact integer answer
3887 (log2): New fn. Safe log in base 2: returns exact integer answer
3883 for exact integer powers of 2.
3888 for exact integer powers of 2.
3884
3889
3885 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3890 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3886 properly.
3891 properly.
3887
3892
3888 2002-06-20 Fernando Perez <fperez@colorado.edu>
3893 2002-06-20 Fernando Perez <fperez@colorado.edu>
3889
3894
3890 * IPython/genutils.py (timing): new function like
3895 * IPython/genutils.py (timing): new function like
3891 Mathematica's. Similar to time_test, but returns more info.
3896 Mathematica's. Similar to time_test, but returns more info.
3892
3897
3893 2002-06-18 Fernando Perez <fperez@colorado.edu>
3898 2002-06-18 Fernando Perez <fperez@colorado.edu>
3894
3899
3895 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3900 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3896 according to Mike Heeter's suggestions.
3901 according to Mike Heeter's suggestions.
3897
3902
3898 2002-06-16 Fernando Perez <fperez@colorado.edu>
3903 2002-06-16 Fernando Perez <fperez@colorado.edu>
3899
3904
3900 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3905 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3901 system. GnuplotMagic is gone as a user-directory option. New files
3906 system. GnuplotMagic is gone as a user-directory option. New files
3902 make it easier to use all the gnuplot stuff both from external
3907 make it easier to use all the gnuplot stuff both from external
3903 programs as well as from IPython. Had to rewrite part of
3908 programs as well as from IPython. Had to rewrite part of
3904 hardcopy() b/c of a strange bug: often the ps files simply don't
3909 hardcopy() b/c of a strange bug: often the ps files simply don't
3905 get created, and require a repeat of the command (often several
3910 get created, and require a repeat of the command (often several
3906 times).
3911 times).
3907
3912
3908 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3913 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3909 resolve output channel at call time, so that if sys.stderr has
3914 resolve output channel at call time, so that if sys.stderr has
3910 been redirected by user this gets honored.
3915 been redirected by user this gets honored.
3911
3916
3912 2002-06-13 Fernando Perez <fperez@colorado.edu>
3917 2002-06-13 Fernando Perez <fperez@colorado.edu>
3913
3918
3914 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3919 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3915 IPShell. Kept a copy with the old names to avoid breaking people's
3920 IPShell. Kept a copy with the old names to avoid breaking people's
3916 embedded code.
3921 embedded code.
3917
3922
3918 * IPython/ipython: simplified it to the bare minimum after
3923 * IPython/ipython: simplified it to the bare minimum after
3919 Holger's suggestions. Added info about how to use it in
3924 Holger's suggestions. Added info about how to use it in
3920 PYTHONSTARTUP.
3925 PYTHONSTARTUP.
3921
3926
3922 * IPython/Shell.py (IPythonShell): changed the options passing
3927 * IPython/Shell.py (IPythonShell): changed the options passing
3923 from a string with funky %s replacements to a straight list. Maybe
3928 from a string with funky %s replacements to a straight list. Maybe
3924 a bit more typing, but it follows sys.argv conventions, so there's
3929 a bit more typing, but it follows sys.argv conventions, so there's
3925 less special-casing to remember.
3930 less special-casing to remember.
3926
3931
3927 2002-06-12 Fernando Perez <fperez@colorado.edu>
3932 2002-06-12 Fernando Perez <fperez@colorado.edu>
3928
3933
3929 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3934 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3930 command. Thanks to a suggestion by Mike Heeter.
3935 command. Thanks to a suggestion by Mike Heeter.
3931 (Magic.magic_pfile): added behavior to look at filenames if given
3936 (Magic.magic_pfile): added behavior to look at filenames if given
3932 arg is not a defined object.
3937 arg is not a defined object.
3933 (Magic.magic_save): New @save function to save code snippets. Also
3938 (Magic.magic_save): New @save function to save code snippets. Also
3934 a Mike Heeter idea.
3939 a Mike Heeter idea.
3935
3940
3936 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3941 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3937 plot() and replot(). Much more convenient now, especially for
3942 plot() and replot(). Much more convenient now, especially for
3938 interactive use.
3943 interactive use.
3939
3944
3940 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3945 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3941 filenames.
3946 filenames.
3942
3947
3943 2002-06-02 Fernando Perez <fperez@colorado.edu>
3948 2002-06-02 Fernando Perez <fperez@colorado.edu>
3944
3949
3945 * IPython/Struct.py (Struct.__init__): modified to admit
3950 * IPython/Struct.py (Struct.__init__): modified to admit
3946 initialization via another struct.
3951 initialization via another struct.
3947
3952
3948 * IPython/genutils.py (SystemExec.__init__): New stateful
3953 * IPython/genutils.py (SystemExec.__init__): New stateful
3949 interface to xsys and bq. Useful for writing system scripts.
3954 interface to xsys and bq. Useful for writing system scripts.
3950
3955
3951 2002-05-30 Fernando Perez <fperez@colorado.edu>
3956 2002-05-30 Fernando Perez <fperez@colorado.edu>
3952
3957
3953 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3958 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3954 documents. This will make the user download smaller (it's getting
3959 documents. This will make the user download smaller (it's getting
3955 too big).
3960 too big).
3956
3961
3957 2002-05-29 Fernando Perez <fperez@colorado.edu>
3962 2002-05-29 Fernando Perez <fperez@colorado.edu>
3958
3963
3959 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3964 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3960 fix problems with shelve and pickle. Seems to work, but I don't
3965 fix problems with shelve and pickle. Seems to work, but I don't
3961 know if corner cases break it. Thanks to Mike Heeter
3966 know if corner cases break it. Thanks to Mike Heeter
3962 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3967 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3963
3968
3964 2002-05-24 Fernando Perez <fperez@colorado.edu>
3969 2002-05-24 Fernando Perez <fperez@colorado.edu>
3965
3970
3966 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3971 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3967 macros having broken.
3972 macros having broken.
3968
3973
3969 2002-05-21 Fernando Perez <fperez@colorado.edu>
3974 2002-05-21 Fernando Perez <fperez@colorado.edu>
3970
3975
3971 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3976 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3972 introduced logging bug: all history before logging started was
3977 introduced logging bug: all history before logging started was
3973 being written one character per line! This came from the redesign
3978 being written one character per line! This came from the redesign
3974 of the input history as a special list which slices to strings,
3979 of the input history as a special list which slices to strings,
3975 not to lists.
3980 not to lists.
3976
3981
3977 2002-05-20 Fernando Perez <fperez@colorado.edu>
3982 2002-05-20 Fernando Perez <fperez@colorado.edu>
3978
3983
3979 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3984 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3980 be an attribute of all classes in this module. The design of these
3985 be an attribute of all classes in this module. The design of these
3981 classes needs some serious overhauling.
3986 classes needs some serious overhauling.
3982
3987
3983 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3988 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3984 which was ignoring '_' in option names.
3989 which was ignoring '_' in option names.
3985
3990
3986 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3991 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3987 'Verbose_novars' to 'Context' and made it the new default. It's a
3992 'Verbose_novars' to 'Context' and made it the new default. It's a
3988 bit more readable and also safer than verbose.
3993 bit more readable and also safer than verbose.
3989
3994
3990 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3995 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3991 triple-quoted strings.
3996 triple-quoted strings.
3992
3997
3993 * IPython/OInspect.py (__all__): new module exposing the object
3998 * IPython/OInspect.py (__all__): new module exposing the object
3994 introspection facilities. Now the corresponding magics are dummy
3999 introspection facilities. Now the corresponding magics are dummy
3995 wrappers around this. Having this module will make it much easier
4000 wrappers around this. Having this module will make it much easier
3996 to put these functions into our modified pdb.
4001 to put these functions into our modified pdb.
3997 This new object inspector system uses the new colorizing module,
4002 This new object inspector system uses the new colorizing module,
3998 so source code and other things are nicely syntax highlighted.
4003 so source code and other things are nicely syntax highlighted.
3999
4004
4000 2002-05-18 Fernando Perez <fperez@colorado.edu>
4005 2002-05-18 Fernando Perez <fperez@colorado.edu>
4001
4006
4002 * IPython/ColorANSI.py: Split the coloring tools into a separate
4007 * IPython/ColorANSI.py: Split the coloring tools into a separate
4003 module so I can use them in other code easier (they were part of
4008 module so I can use them in other code easier (they were part of
4004 ultraTB).
4009 ultraTB).
4005
4010
4006 2002-05-17 Fernando Perez <fperez@colorado.edu>
4011 2002-05-17 Fernando Perez <fperez@colorado.edu>
4007
4012
4008 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4013 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4009 fixed it to set the global 'g' also to the called instance, as
4014 fixed it to set the global 'g' also to the called instance, as
4010 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4015 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4011 user's 'g' variables).
4016 user's 'g' variables).
4012
4017
4013 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4018 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4014 global variables (aliases to _ih,_oh) so that users which expect
4019 global variables (aliases to _ih,_oh) so that users which expect
4015 In[5] or Out[7] to work aren't unpleasantly surprised.
4020 In[5] or Out[7] to work aren't unpleasantly surprised.
4016 (InputList.__getslice__): new class to allow executing slices of
4021 (InputList.__getslice__): new class to allow executing slices of
4017 input history directly. Very simple class, complements the use of
4022 input history directly. Very simple class, complements the use of
4018 macros.
4023 macros.
4019
4024
4020 2002-05-16 Fernando Perez <fperez@colorado.edu>
4025 2002-05-16 Fernando Perez <fperez@colorado.edu>
4021
4026
4022 * setup.py (docdirbase): make doc directory be just doc/IPython
4027 * setup.py (docdirbase): make doc directory be just doc/IPython
4023 without version numbers, it will reduce clutter for users.
4028 without version numbers, it will reduce clutter for users.
4024
4029
4025 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4030 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4026 execfile call to prevent possible memory leak. See for details:
4031 execfile call to prevent possible memory leak. See for details:
4027 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4032 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4028
4033
4029 2002-05-15 Fernando Perez <fperez@colorado.edu>
4034 2002-05-15 Fernando Perez <fperez@colorado.edu>
4030
4035
4031 * IPython/Magic.py (Magic.magic_psource): made the object
4036 * IPython/Magic.py (Magic.magic_psource): made the object
4032 introspection names be more standard: pdoc, pdef, pfile and
4037 introspection names be more standard: pdoc, pdef, pfile and
4033 psource. They all print/page their output, and it makes
4038 psource. They all print/page their output, and it makes
4034 remembering them easier. Kept old names for compatibility as
4039 remembering them easier. Kept old names for compatibility as
4035 aliases.
4040 aliases.
4036
4041
4037 2002-05-14 Fernando Perez <fperez@colorado.edu>
4042 2002-05-14 Fernando Perez <fperez@colorado.edu>
4038
4043
4039 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4044 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4040 what the mouse problem was. The trick is to use gnuplot with temp
4045 what the mouse problem was. The trick is to use gnuplot with temp
4041 files and NOT with pipes (for data communication), because having
4046 files and NOT with pipes (for data communication), because having
4042 both pipes and the mouse on is bad news.
4047 both pipes and the mouse on is bad news.
4043
4048
4044 2002-05-13 Fernando Perez <fperez@colorado.edu>
4049 2002-05-13 Fernando Perez <fperez@colorado.edu>
4045
4050
4046 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4051 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4047 bug. Information would be reported about builtins even when
4052 bug. Information would be reported about builtins even when
4048 user-defined functions overrode them.
4053 user-defined functions overrode them.
4049
4054
4050 2002-05-11 Fernando Perez <fperez@colorado.edu>
4055 2002-05-11 Fernando Perez <fperez@colorado.edu>
4051
4056
4052 * IPython/__init__.py (__all__): removed FlexCompleter from
4057 * IPython/__init__.py (__all__): removed FlexCompleter from
4053 __all__ so that things don't fail in platforms without readline.
4058 __all__ so that things don't fail in platforms without readline.
4054
4059
4055 2002-05-10 Fernando Perez <fperez@colorado.edu>
4060 2002-05-10 Fernando Perez <fperez@colorado.edu>
4056
4061
4057 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4062 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4058 it requires Numeric, effectively making Numeric a dependency for
4063 it requires Numeric, effectively making Numeric a dependency for
4059 IPython.
4064 IPython.
4060
4065
4061 * Released 0.2.13
4066 * Released 0.2.13
4062
4067
4063 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4068 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4064 profiler interface. Now all the major options from the profiler
4069 profiler interface. Now all the major options from the profiler
4065 module are directly supported in IPython, both for single
4070 module are directly supported in IPython, both for single
4066 expressions (@prun) and for full programs (@run -p).
4071 expressions (@prun) and for full programs (@run -p).
4067
4072
4068 2002-05-09 Fernando Perez <fperez@colorado.edu>
4073 2002-05-09 Fernando Perez <fperez@colorado.edu>
4069
4074
4070 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4075 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4071 magic properly formatted for screen.
4076 magic properly formatted for screen.
4072
4077
4073 * setup.py (make_shortcut): Changed things to put pdf version in
4078 * setup.py (make_shortcut): Changed things to put pdf version in
4074 doc/ instead of doc/manual (had to change lyxport a bit).
4079 doc/ instead of doc/manual (had to change lyxport a bit).
4075
4080
4076 * IPython/Magic.py (Profile.string_stats): made profile runs go
4081 * IPython/Magic.py (Profile.string_stats): made profile runs go
4077 through pager (they are long and a pager allows searching, saving,
4082 through pager (they are long and a pager allows searching, saving,
4078 etc.)
4083 etc.)
4079
4084
4080 2002-05-08 Fernando Perez <fperez@colorado.edu>
4085 2002-05-08 Fernando Perez <fperez@colorado.edu>
4081
4086
4082 * Released 0.2.12
4087 * Released 0.2.12
4083
4088
4084 2002-05-06 Fernando Perez <fperez@colorado.edu>
4089 2002-05-06 Fernando Perez <fperez@colorado.edu>
4085
4090
4086 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4091 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4087 introduced); 'hist n1 n2' was broken.
4092 introduced); 'hist n1 n2' was broken.
4088 (Magic.magic_pdb): added optional on/off arguments to @pdb
4093 (Magic.magic_pdb): added optional on/off arguments to @pdb
4089 (Magic.magic_run): added option -i to @run, which executes code in
4094 (Magic.magic_run): added option -i to @run, which executes code in
4090 the IPython namespace instead of a clean one. Also added @irun as
4095 the IPython namespace instead of a clean one. Also added @irun as
4091 an alias to @run -i.
4096 an alias to @run -i.
4092
4097
4093 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4098 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4094 fixed (it didn't really do anything, the namespaces were wrong).
4099 fixed (it didn't really do anything, the namespaces were wrong).
4095
4100
4096 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4101 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4097
4102
4098 * IPython/__init__.py (__all__): Fixed package namespace, now
4103 * IPython/__init__.py (__all__): Fixed package namespace, now
4099 'import IPython' does give access to IPython.<all> as
4104 'import IPython' does give access to IPython.<all> as
4100 expected. Also renamed __release__ to Release.
4105 expected. Also renamed __release__ to Release.
4101
4106
4102 * IPython/Debugger.py (__license__): created new Pdb class which
4107 * IPython/Debugger.py (__license__): created new Pdb class which
4103 functions like a drop-in for the normal pdb.Pdb but does NOT
4108 functions like a drop-in for the normal pdb.Pdb but does NOT
4104 import readline by default. This way it doesn't muck up IPython's
4109 import readline by default. This way it doesn't muck up IPython's
4105 readline handling, and now tab-completion finally works in the
4110 readline handling, and now tab-completion finally works in the
4106 debugger -- sort of. It completes things globally visible, but the
4111 debugger -- sort of. It completes things globally visible, but the
4107 completer doesn't track the stack as pdb walks it. That's a bit
4112 completer doesn't track the stack as pdb walks it. That's a bit
4108 tricky, and I'll have to implement it later.
4113 tricky, and I'll have to implement it later.
4109
4114
4110 2002-05-05 Fernando Perez <fperez@colorado.edu>
4115 2002-05-05 Fernando Perez <fperez@colorado.edu>
4111
4116
4112 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4117 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4113 magic docstrings when printed via ? (explicit \'s were being
4118 magic docstrings when printed via ? (explicit \'s were being
4114 printed).
4119 printed).
4115
4120
4116 * IPython/ipmaker.py (make_IPython): fixed namespace
4121 * IPython/ipmaker.py (make_IPython): fixed namespace
4117 identification bug. Now variables loaded via logs or command-line
4122 identification bug. Now variables loaded via logs or command-line
4118 files are recognized in the interactive namespace by @who.
4123 files are recognized in the interactive namespace by @who.
4119
4124
4120 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4125 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4121 log replay system stemming from the string form of Structs.
4126 log replay system stemming from the string form of Structs.
4122
4127
4123 * IPython/Magic.py (Macro.__init__): improved macros to properly
4128 * IPython/Magic.py (Macro.__init__): improved macros to properly
4124 handle magic commands in them.
4129 handle magic commands in them.
4125 (Magic.magic_logstart): usernames are now expanded so 'logstart
4130 (Magic.magic_logstart): usernames are now expanded so 'logstart
4126 ~/mylog' now works.
4131 ~/mylog' now works.
4127
4132
4128 * IPython/iplib.py (complete): fixed bug where paths starting with
4133 * IPython/iplib.py (complete): fixed bug where paths starting with
4129 '/' would be completed as magic names.
4134 '/' would be completed as magic names.
4130
4135
4131 2002-05-04 Fernando Perez <fperez@colorado.edu>
4136 2002-05-04 Fernando Perez <fperez@colorado.edu>
4132
4137
4133 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4138 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4134 allow running full programs under the profiler's control.
4139 allow running full programs under the profiler's control.
4135
4140
4136 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4141 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4137 mode to report exceptions verbosely but without formatting
4142 mode to report exceptions verbosely but without formatting
4138 variables. This addresses the issue of ipython 'freezing' (it's
4143 variables. This addresses the issue of ipython 'freezing' (it's
4139 not frozen, but caught in an expensive formatting loop) when huge
4144 not frozen, but caught in an expensive formatting loop) when huge
4140 variables are in the context of an exception.
4145 variables are in the context of an exception.
4141 (VerboseTB.text): Added '--->' markers at line where exception was
4146 (VerboseTB.text): Added '--->' markers at line where exception was
4142 triggered. Much clearer to read, especially in NoColor modes.
4147 triggered. Much clearer to read, especially in NoColor modes.
4143
4148
4144 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4149 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4145 implemented in reverse when changing to the new parse_options().
4150 implemented in reverse when changing to the new parse_options().
4146
4151
4147 2002-05-03 Fernando Perez <fperez@colorado.edu>
4152 2002-05-03 Fernando Perez <fperez@colorado.edu>
4148
4153
4149 * IPython/Magic.py (Magic.parse_options): new function so that
4154 * IPython/Magic.py (Magic.parse_options): new function so that
4150 magics can parse options easier.
4155 magics can parse options easier.
4151 (Magic.magic_prun): new function similar to profile.run(),
4156 (Magic.magic_prun): new function similar to profile.run(),
4152 suggested by Chris Hart.
4157 suggested by Chris Hart.
4153 (Magic.magic_cd): fixed behavior so that it only changes if
4158 (Magic.magic_cd): fixed behavior so that it only changes if
4154 directory actually is in history.
4159 directory actually is in history.
4155
4160
4156 * IPython/usage.py (__doc__): added information about potential
4161 * IPython/usage.py (__doc__): added information about potential
4157 slowness of Verbose exception mode when there are huge data
4162 slowness of Verbose exception mode when there are huge data
4158 structures to be formatted (thanks to Archie Paulson).
4163 structures to be formatted (thanks to Archie Paulson).
4159
4164
4160 * IPython/ipmaker.py (make_IPython): Changed default logging
4165 * IPython/ipmaker.py (make_IPython): Changed default logging
4161 (when simply called with -log) to use curr_dir/ipython.log in
4166 (when simply called with -log) to use curr_dir/ipython.log in
4162 rotate mode. Fixed crash which was occuring with -log before
4167 rotate mode. Fixed crash which was occuring with -log before
4163 (thanks to Jim Boyle).
4168 (thanks to Jim Boyle).
4164
4169
4165 2002-05-01 Fernando Perez <fperez@colorado.edu>
4170 2002-05-01 Fernando Perez <fperez@colorado.edu>
4166
4171
4167 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4172 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4168 was nasty -- though somewhat of a corner case).
4173 was nasty -- though somewhat of a corner case).
4169
4174
4170 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4175 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4171 text (was a bug).
4176 text (was a bug).
4172
4177
4173 2002-04-30 Fernando Perez <fperez@colorado.edu>
4178 2002-04-30 Fernando Perez <fperez@colorado.edu>
4174
4179
4175 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4180 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4176 a print after ^D or ^C from the user so that the In[] prompt
4181 a print after ^D or ^C from the user so that the In[] prompt
4177 doesn't over-run the gnuplot one.
4182 doesn't over-run the gnuplot one.
4178
4183
4179 2002-04-29 Fernando Perez <fperez@colorado.edu>
4184 2002-04-29 Fernando Perez <fperez@colorado.edu>
4180
4185
4181 * Released 0.2.10
4186 * Released 0.2.10
4182
4187
4183 * IPython/__release__.py (version): get date dynamically.
4188 * IPython/__release__.py (version): get date dynamically.
4184
4189
4185 * Misc. documentation updates thanks to Arnd's comments. Also ran
4190 * Misc. documentation updates thanks to Arnd's comments. Also ran
4186 a full spellcheck on the manual (hadn't been done in a while).
4191 a full spellcheck on the manual (hadn't been done in a while).
4187
4192
4188 2002-04-27 Fernando Perez <fperez@colorado.edu>
4193 2002-04-27 Fernando Perez <fperez@colorado.edu>
4189
4194
4190 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4195 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4191 starting a log in mid-session would reset the input history list.
4196 starting a log in mid-session would reset the input history list.
4192
4197
4193 2002-04-26 Fernando Perez <fperez@colorado.edu>
4198 2002-04-26 Fernando Perez <fperez@colorado.edu>
4194
4199
4195 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4200 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4196 all files were being included in an update. Now anything in
4201 all files were being included in an update. Now anything in
4197 UserConfig that matches [A-Za-z]*.py will go (this excludes
4202 UserConfig that matches [A-Za-z]*.py will go (this excludes
4198 __init__.py)
4203 __init__.py)
4199
4204
4200 2002-04-25 Fernando Perez <fperez@colorado.edu>
4205 2002-04-25 Fernando Perez <fperez@colorado.edu>
4201
4206
4202 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4207 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4203 to __builtins__ so that any form of embedded or imported code can
4208 to __builtins__ so that any form of embedded or imported code can
4204 test for being inside IPython.
4209 test for being inside IPython.
4205
4210
4206 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4211 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4207 changed to GnuplotMagic because it's now an importable module,
4212 changed to GnuplotMagic because it's now an importable module,
4208 this makes the name follow that of the standard Gnuplot module.
4213 this makes the name follow that of the standard Gnuplot module.
4209 GnuplotMagic can now be loaded at any time in mid-session.
4214 GnuplotMagic can now be loaded at any time in mid-session.
4210
4215
4211 2002-04-24 Fernando Perez <fperez@colorado.edu>
4216 2002-04-24 Fernando Perez <fperez@colorado.edu>
4212
4217
4213 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4218 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4214 the globals (IPython has its own namespace) and the
4219 the globals (IPython has its own namespace) and the
4215 PhysicalQuantity stuff is much better anyway.
4220 PhysicalQuantity stuff is much better anyway.
4216
4221
4217 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4222 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4218 embedding example to standard user directory for
4223 embedding example to standard user directory for
4219 distribution. Also put it in the manual.
4224 distribution. Also put it in the manual.
4220
4225
4221 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4226 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4222 instance as first argument (so it doesn't rely on some obscure
4227 instance as first argument (so it doesn't rely on some obscure
4223 hidden global).
4228 hidden global).
4224
4229
4225 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4230 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4226 delimiters. While it prevents ().TAB from working, it allows
4231 delimiters. While it prevents ().TAB from working, it allows
4227 completions in open (... expressions. This is by far a more common
4232 completions in open (... expressions. This is by far a more common
4228 case.
4233 case.
4229
4234
4230 2002-04-23 Fernando Perez <fperez@colorado.edu>
4235 2002-04-23 Fernando Perez <fperez@colorado.edu>
4231
4236
4232 * IPython/Extensions/InterpreterPasteInput.py: new
4237 * IPython/Extensions/InterpreterPasteInput.py: new
4233 syntax-processing module for pasting lines with >>> or ... at the
4238 syntax-processing module for pasting lines with >>> or ... at the
4234 start.
4239 start.
4235
4240
4236 * IPython/Extensions/PhysicalQ_Interactive.py
4241 * IPython/Extensions/PhysicalQ_Interactive.py
4237 (PhysicalQuantityInteractive.__int__): fixed to work with either
4242 (PhysicalQuantityInteractive.__int__): fixed to work with either
4238 Numeric or math.
4243 Numeric or math.
4239
4244
4240 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4245 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4241 provided profiles. Now we have:
4246 provided profiles. Now we have:
4242 -math -> math module as * and cmath with its own namespace.
4247 -math -> math module as * and cmath with its own namespace.
4243 -numeric -> Numeric as *, plus gnuplot & grace
4248 -numeric -> Numeric as *, plus gnuplot & grace
4244 -physics -> same as before
4249 -physics -> same as before
4245
4250
4246 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4251 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4247 user-defined magics wouldn't be found by @magic if they were
4252 user-defined magics wouldn't be found by @magic if they were
4248 defined as class methods. Also cleaned up the namespace search
4253 defined as class methods. Also cleaned up the namespace search
4249 logic and the string building (to use %s instead of many repeated
4254 logic and the string building (to use %s instead of many repeated
4250 string adds).
4255 string adds).
4251
4256
4252 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4257 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4253 of user-defined magics to operate with class methods (cleaner, in
4258 of user-defined magics to operate with class methods (cleaner, in
4254 line with the gnuplot code).
4259 line with the gnuplot code).
4255
4260
4256 2002-04-22 Fernando Perez <fperez@colorado.edu>
4261 2002-04-22 Fernando Perez <fperez@colorado.edu>
4257
4262
4258 * setup.py: updated dependency list so that manual is updated when
4263 * setup.py: updated dependency list so that manual is updated when
4259 all included files change.
4264 all included files change.
4260
4265
4261 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4266 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4262 the delimiter removal option (the fix is ugly right now).
4267 the delimiter removal option (the fix is ugly right now).
4263
4268
4264 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4269 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4265 all of the math profile (quicker loading, no conflict between
4270 all of the math profile (quicker loading, no conflict between
4266 g-9.8 and g-gnuplot).
4271 g-9.8 and g-gnuplot).
4267
4272
4268 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4273 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4269 name of post-mortem files to IPython_crash_report.txt.
4274 name of post-mortem files to IPython_crash_report.txt.
4270
4275
4271 * Cleanup/update of the docs. Added all the new readline info and
4276 * Cleanup/update of the docs. Added all the new readline info and
4272 formatted all lists as 'real lists'.
4277 formatted all lists as 'real lists'.
4273
4278
4274 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4279 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4275 tab-completion options, since the full readline parse_and_bind is
4280 tab-completion options, since the full readline parse_and_bind is
4276 now accessible.
4281 now accessible.
4277
4282
4278 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4283 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4279 handling of readline options. Now users can specify any string to
4284 handling of readline options. Now users can specify any string to
4280 be passed to parse_and_bind(), as well as the delimiters to be
4285 be passed to parse_and_bind(), as well as the delimiters to be
4281 removed.
4286 removed.
4282 (InteractiveShell.__init__): Added __name__ to the global
4287 (InteractiveShell.__init__): Added __name__ to the global
4283 namespace so that things like Itpl which rely on its existence
4288 namespace so that things like Itpl which rely on its existence
4284 don't crash.
4289 don't crash.
4285 (InteractiveShell._prefilter): Defined the default with a _ so
4290 (InteractiveShell._prefilter): Defined the default with a _ so
4286 that prefilter() is easier to override, while the default one
4291 that prefilter() is easier to override, while the default one
4287 remains available.
4292 remains available.
4288
4293
4289 2002-04-18 Fernando Perez <fperez@colorado.edu>
4294 2002-04-18 Fernando Perez <fperez@colorado.edu>
4290
4295
4291 * Added information about pdb in the docs.
4296 * Added information about pdb in the docs.
4292
4297
4293 2002-04-17 Fernando Perez <fperez@colorado.edu>
4298 2002-04-17 Fernando Perez <fperez@colorado.edu>
4294
4299
4295 * IPython/ipmaker.py (make_IPython): added rc_override option to
4300 * IPython/ipmaker.py (make_IPython): added rc_override option to
4296 allow passing config options at creation time which may override
4301 allow passing config options at creation time which may override
4297 anything set in the config files or command line. This is
4302 anything set in the config files or command line. This is
4298 particularly useful for configuring embedded instances.
4303 particularly useful for configuring embedded instances.
4299
4304
4300 2002-04-15 Fernando Perez <fperez@colorado.edu>
4305 2002-04-15 Fernando Perez <fperez@colorado.edu>
4301
4306
4302 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4307 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4303 crash embedded instances because of the input cache falling out of
4308 crash embedded instances because of the input cache falling out of
4304 sync with the output counter.
4309 sync with the output counter.
4305
4310
4306 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4311 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4307 mode which calls pdb after an uncaught exception in IPython itself.
4312 mode which calls pdb after an uncaught exception in IPython itself.
4308
4313
4309 2002-04-14 Fernando Perez <fperez@colorado.edu>
4314 2002-04-14 Fernando Perez <fperez@colorado.edu>
4310
4315
4311 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4316 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4312 readline, fix it back after each call.
4317 readline, fix it back after each call.
4313
4318
4314 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4319 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4315 method to force all access via __call__(), which guarantees that
4320 method to force all access via __call__(), which guarantees that
4316 traceback references are properly deleted.
4321 traceback references are properly deleted.
4317
4322
4318 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4323 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4319 improve printing when pprint is in use.
4324 improve printing when pprint is in use.
4320
4325
4321 2002-04-13 Fernando Perez <fperez@colorado.edu>
4326 2002-04-13 Fernando Perez <fperez@colorado.edu>
4322
4327
4323 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4328 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4324 exceptions aren't caught anymore. If the user triggers one, he
4329 exceptions aren't caught anymore. If the user triggers one, he
4325 should know why he's doing it and it should go all the way up,
4330 should know why he's doing it and it should go all the way up,
4326 just like any other exception. So now @abort will fully kill the
4331 just like any other exception. So now @abort will fully kill the
4327 embedded interpreter and the embedding code (unless that happens
4332 embedded interpreter and the embedding code (unless that happens
4328 to catch SystemExit).
4333 to catch SystemExit).
4329
4334
4330 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4335 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4331 and a debugger() method to invoke the interactive pdb debugger
4336 and a debugger() method to invoke the interactive pdb debugger
4332 after printing exception information. Also added the corresponding
4337 after printing exception information. Also added the corresponding
4333 -pdb option and @pdb magic to control this feature, and updated
4338 -pdb option and @pdb magic to control this feature, and updated
4334 the docs. After a suggestion from Christopher Hart
4339 the docs. After a suggestion from Christopher Hart
4335 (hart-AT-caltech.edu).
4340 (hart-AT-caltech.edu).
4336
4341
4337 2002-04-12 Fernando Perez <fperez@colorado.edu>
4342 2002-04-12 Fernando Perez <fperez@colorado.edu>
4338
4343
4339 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4344 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4340 the exception handlers defined by the user (not the CrashHandler)
4345 the exception handlers defined by the user (not the CrashHandler)
4341 so that user exceptions don't trigger an ipython bug report.
4346 so that user exceptions don't trigger an ipython bug report.
4342
4347
4343 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4348 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4344 configurable (it should have always been so).
4349 configurable (it should have always been so).
4345
4350
4346 2002-03-26 Fernando Perez <fperez@colorado.edu>
4351 2002-03-26 Fernando Perez <fperez@colorado.edu>
4347
4352
4348 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4353 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4349 and there to fix embedding namespace issues. This should all be
4354 and there to fix embedding namespace issues. This should all be
4350 done in a more elegant way.
4355 done in a more elegant way.
4351
4356
4352 2002-03-25 Fernando Perez <fperez@colorado.edu>
4357 2002-03-25 Fernando Perez <fperez@colorado.edu>
4353
4358
4354 * IPython/genutils.py (get_home_dir): Try to make it work under
4359 * IPython/genutils.py (get_home_dir): Try to make it work under
4355 win9x also.
4360 win9x also.
4356
4361
4357 2002-03-20 Fernando Perez <fperez@colorado.edu>
4362 2002-03-20 Fernando Perez <fperez@colorado.edu>
4358
4363
4359 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4364 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4360 sys.displayhook untouched upon __init__.
4365 sys.displayhook untouched upon __init__.
4361
4366
4362 2002-03-19 Fernando Perez <fperez@colorado.edu>
4367 2002-03-19 Fernando Perez <fperez@colorado.edu>
4363
4368
4364 * Released 0.2.9 (for embedding bug, basically).
4369 * Released 0.2.9 (for embedding bug, basically).
4365
4370
4366 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4371 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4367 exceptions so that enclosing shell's state can be restored.
4372 exceptions so that enclosing shell's state can be restored.
4368
4373
4369 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4374 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4370 naming conventions in the .ipython/ dir.
4375 naming conventions in the .ipython/ dir.
4371
4376
4372 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4377 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4373 from delimiters list so filenames with - in them get expanded.
4378 from delimiters list so filenames with - in them get expanded.
4374
4379
4375 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4380 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4376 sys.displayhook not being properly restored after an embedded call.
4381 sys.displayhook not being properly restored after an embedded call.
4377
4382
4378 2002-03-18 Fernando Perez <fperez@colorado.edu>
4383 2002-03-18 Fernando Perez <fperez@colorado.edu>
4379
4384
4380 * Released 0.2.8
4385 * Released 0.2.8
4381
4386
4382 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4387 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4383 some files weren't being included in a -upgrade.
4388 some files weren't being included in a -upgrade.
4384 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4389 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4385 on' so that the first tab completes.
4390 on' so that the first tab completes.
4386 (InteractiveShell.handle_magic): fixed bug with spaces around
4391 (InteractiveShell.handle_magic): fixed bug with spaces around
4387 quotes breaking many magic commands.
4392 quotes breaking many magic commands.
4388
4393
4389 * setup.py: added note about ignoring the syntax error messages at
4394 * setup.py: added note about ignoring the syntax error messages at
4390 installation.
4395 installation.
4391
4396
4392 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4397 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4393 streamlining the gnuplot interface, now there's only one magic @gp.
4398 streamlining the gnuplot interface, now there's only one magic @gp.
4394
4399
4395 2002-03-17 Fernando Perez <fperez@colorado.edu>
4400 2002-03-17 Fernando Perez <fperez@colorado.edu>
4396
4401
4397 * IPython/UserConfig/magic_gnuplot.py: new name for the
4402 * IPython/UserConfig/magic_gnuplot.py: new name for the
4398 example-magic_pm.py file. Much enhanced system, now with a shell
4403 example-magic_pm.py file. Much enhanced system, now with a shell
4399 for communicating directly with gnuplot, one command at a time.
4404 for communicating directly with gnuplot, one command at a time.
4400
4405
4401 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4406 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4402 setting __name__=='__main__'.
4407 setting __name__=='__main__'.
4403
4408
4404 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4409 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4405 mini-shell for accessing gnuplot from inside ipython. Should
4410 mini-shell for accessing gnuplot from inside ipython. Should
4406 extend it later for grace access too. Inspired by Arnd's
4411 extend it later for grace access too. Inspired by Arnd's
4407 suggestion.
4412 suggestion.
4408
4413
4409 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4414 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4410 calling magic functions with () in their arguments. Thanks to Arnd
4415 calling magic functions with () in their arguments. Thanks to Arnd
4411 Baecker for pointing this to me.
4416 Baecker for pointing this to me.
4412
4417
4413 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4418 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4414 infinitely for integer or complex arrays (only worked with floats).
4419 infinitely for integer or complex arrays (only worked with floats).
4415
4420
4416 2002-03-16 Fernando Perez <fperez@colorado.edu>
4421 2002-03-16 Fernando Perez <fperez@colorado.edu>
4417
4422
4418 * setup.py: Merged setup and setup_windows into a single script
4423 * setup.py: Merged setup and setup_windows into a single script
4419 which properly handles things for windows users.
4424 which properly handles things for windows users.
4420
4425
4421 2002-03-15 Fernando Perez <fperez@colorado.edu>
4426 2002-03-15 Fernando Perez <fperez@colorado.edu>
4422
4427
4423 * Big change to the manual: now the magics are all automatically
4428 * Big change to the manual: now the magics are all automatically
4424 documented. This information is generated from their docstrings
4429 documented. This information is generated from their docstrings
4425 and put in a latex file included by the manual lyx file. This way
4430 and put in a latex file included by the manual lyx file. This way
4426 we get always up to date information for the magics. The manual
4431 we get always up to date information for the magics. The manual
4427 now also has proper version information, also auto-synced.
4432 now also has proper version information, also auto-synced.
4428
4433
4429 For this to work, an undocumented --magic_docstrings option was added.
4434 For this to work, an undocumented --magic_docstrings option was added.
4430
4435
4431 2002-03-13 Fernando Perez <fperez@colorado.edu>
4436 2002-03-13 Fernando Perez <fperez@colorado.edu>
4432
4437
4433 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4438 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4434 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4439 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4435
4440
4436 2002-03-12 Fernando Perez <fperez@colorado.edu>
4441 2002-03-12 Fernando Perez <fperez@colorado.edu>
4437
4442
4438 * IPython/ultraTB.py (TermColors): changed color escapes again to
4443 * IPython/ultraTB.py (TermColors): changed color escapes again to
4439 fix the (old, reintroduced) line-wrapping bug. Basically, if
4444 fix the (old, reintroduced) line-wrapping bug. Basically, if
4440 \001..\002 aren't given in the color escapes, lines get wrapped
4445 \001..\002 aren't given in the color escapes, lines get wrapped
4441 weirdly. But giving those screws up old xterms and emacs terms. So
4446 weirdly. But giving those screws up old xterms and emacs terms. So
4442 I added some logic for emacs terms to be ok, but I can't identify old
4447 I added some logic for emacs terms to be ok, but I can't identify old
4443 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4448 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4444
4449
4445 2002-03-10 Fernando Perez <fperez@colorado.edu>
4450 2002-03-10 Fernando Perez <fperez@colorado.edu>
4446
4451
4447 * IPython/usage.py (__doc__): Various documentation cleanups and
4452 * IPython/usage.py (__doc__): Various documentation cleanups and
4448 updates, both in usage docstrings and in the manual.
4453 updates, both in usage docstrings and in the manual.
4449
4454
4450 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4455 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4451 handling of caching. Set minimum acceptabe value for having a
4456 handling of caching. Set minimum acceptabe value for having a
4452 cache at 20 values.
4457 cache at 20 values.
4453
4458
4454 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4459 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4455 install_first_time function to a method, renamed it and added an
4460 install_first_time function to a method, renamed it and added an
4456 'upgrade' mode. Now people can update their config directory with
4461 'upgrade' mode. Now people can update their config directory with
4457 a simple command line switch (-upgrade, also new).
4462 a simple command line switch (-upgrade, also new).
4458
4463
4459 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4464 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4460 @file (convenient for automagic users under Python >= 2.2).
4465 @file (convenient for automagic users under Python >= 2.2).
4461 Removed @files (it seemed more like a plural than an abbrev. of
4466 Removed @files (it seemed more like a plural than an abbrev. of
4462 'file show').
4467 'file show').
4463
4468
4464 * IPython/iplib.py (install_first_time): Fixed crash if there were
4469 * IPython/iplib.py (install_first_time): Fixed crash if there were
4465 backup files ('~') in .ipython/ install directory.
4470 backup files ('~') in .ipython/ install directory.
4466
4471
4467 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4472 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4468 system. Things look fine, but these changes are fairly
4473 system. Things look fine, but these changes are fairly
4469 intrusive. Test them for a few days.
4474 intrusive. Test them for a few days.
4470
4475
4471 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4476 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4472 the prompts system. Now all in/out prompt strings are user
4477 the prompts system. Now all in/out prompt strings are user
4473 controllable. This is particularly useful for embedding, as one
4478 controllable. This is particularly useful for embedding, as one
4474 can tag embedded instances with particular prompts.
4479 can tag embedded instances with particular prompts.
4475
4480
4476 Also removed global use of sys.ps1/2, which now allows nested
4481 Also removed global use of sys.ps1/2, which now allows nested
4477 embeddings without any problems. Added command-line options for
4482 embeddings without any problems. Added command-line options for
4478 the prompt strings.
4483 the prompt strings.
4479
4484
4480 2002-03-08 Fernando Perez <fperez@colorado.edu>
4485 2002-03-08 Fernando Perez <fperez@colorado.edu>
4481
4486
4482 * IPython/UserConfig/example-embed-short.py (ipshell): added
4487 * IPython/UserConfig/example-embed-short.py (ipshell): added
4483 example file with the bare minimum code for embedding.
4488 example file with the bare minimum code for embedding.
4484
4489
4485 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4490 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4486 functionality for the embeddable shell to be activated/deactivated
4491 functionality for the embeddable shell to be activated/deactivated
4487 either globally or at each call.
4492 either globally or at each call.
4488
4493
4489 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4494 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4490 rewriting the prompt with '--->' for auto-inputs with proper
4495 rewriting the prompt with '--->' for auto-inputs with proper
4491 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4496 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4492 this is handled by the prompts class itself, as it should.
4497 this is handled by the prompts class itself, as it should.
4493
4498
4494 2002-03-05 Fernando Perez <fperez@colorado.edu>
4499 2002-03-05 Fernando Perez <fperez@colorado.edu>
4495
4500
4496 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4501 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4497 @logstart to avoid name clashes with the math log function.
4502 @logstart to avoid name clashes with the math log function.
4498
4503
4499 * Big updates to X/Emacs section of the manual.
4504 * Big updates to X/Emacs section of the manual.
4500
4505
4501 * Removed ipython_emacs. Milan explained to me how to pass
4506 * Removed ipython_emacs. Milan explained to me how to pass
4502 arguments to ipython through Emacs. Some day I'm going to end up
4507 arguments to ipython through Emacs. Some day I'm going to end up
4503 learning some lisp...
4508 learning some lisp...
4504
4509
4505 2002-03-04 Fernando Perez <fperez@colorado.edu>
4510 2002-03-04 Fernando Perez <fperez@colorado.edu>
4506
4511
4507 * IPython/ipython_emacs: Created script to be used as the
4512 * IPython/ipython_emacs: Created script to be used as the
4508 py-python-command Emacs variable so we can pass IPython
4513 py-python-command Emacs variable so we can pass IPython
4509 parameters. I can't figure out how to tell Emacs directly to pass
4514 parameters. I can't figure out how to tell Emacs directly to pass
4510 parameters to IPython, so a dummy shell script will do it.
4515 parameters to IPython, so a dummy shell script will do it.
4511
4516
4512 Other enhancements made for things to work better under Emacs'
4517 Other enhancements made for things to work better under Emacs'
4513 various types of terminals. Many thanks to Milan Zamazal
4518 various types of terminals. Many thanks to Milan Zamazal
4514 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4519 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4515
4520
4516 2002-03-01 Fernando Perez <fperez@colorado.edu>
4521 2002-03-01 Fernando Perez <fperez@colorado.edu>
4517
4522
4518 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4523 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4519 that loading of readline is now optional. This gives better
4524 that loading of readline is now optional. This gives better
4520 control to emacs users.
4525 control to emacs users.
4521
4526
4522 * IPython/ultraTB.py (__date__): Modified color escape sequences
4527 * IPython/ultraTB.py (__date__): Modified color escape sequences
4523 and now things work fine under xterm and in Emacs' term buffers
4528 and now things work fine under xterm and in Emacs' term buffers
4524 (though not shell ones). Well, in emacs you get colors, but all
4529 (though not shell ones). Well, in emacs you get colors, but all
4525 seem to be 'light' colors (no difference between dark and light
4530 seem to be 'light' colors (no difference between dark and light
4526 ones). But the garbage chars are gone, and also in xterms. It
4531 ones). But the garbage chars are gone, and also in xterms. It
4527 seems that now I'm using 'cleaner' ansi sequences.
4532 seems that now I'm using 'cleaner' ansi sequences.
4528
4533
4529 2002-02-21 Fernando Perez <fperez@colorado.edu>
4534 2002-02-21 Fernando Perez <fperez@colorado.edu>
4530
4535
4531 * Released 0.2.7 (mainly to publish the scoping fix).
4536 * Released 0.2.7 (mainly to publish the scoping fix).
4532
4537
4533 * IPython/Logger.py (Logger.logstate): added. A corresponding
4538 * IPython/Logger.py (Logger.logstate): added. A corresponding
4534 @logstate magic was created.
4539 @logstate magic was created.
4535
4540
4536 * IPython/Magic.py: fixed nested scoping problem under Python
4541 * IPython/Magic.py: fixed nested scoping problem under Python
4537 2.1.x (automagic wasn't working).
4542 2.1.x (automagic wasn't working).
4538
4543
4539 2002-02-20 Fernando Perez <fperez@colorado.edu>
4544 2002-02-20 Fernando Perez <fperez@colorado.edu>
4540
4545
4541 * Released 0.2.6.
4546 * Released 0.2.6.
4542
4547
4543 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4548 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4544 option so that logs can come out without any headers at all.
4549 option so that logs can come out without any headers at all.
4545
4550
4546 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4551 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4547 SciPy.
4552 SciPy.
4548
4553
4549 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4554 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4550 that embedded IPython calls don't require vars() to be explicitly
4555 that embedded IPython calls don't require vars() to be explicitly
4551 passed. Now they are extracted from the caller's frame (code
4556 passed. Now they are extracted from the caller's frame (code
4552 snatched from Eric Jones' weave). Added better documentation to
4557 snatched from Eric Jones' weave). Added better documentation to
4553 the section on embedding and the example file.
4558 the section on embedding and the example file.
4554
4559
4555 * IPython/genutils.py (page): Changed so that under emacs, it just
4560 * IPython/genutils.py (page): Changed so that under emacs, it just
4556 prints the string. You can then page up and down in the emacs
4561 prints the string. You can then page up and down in the emacs
4557 buffer itself. This is how the builtin help() works.
4562 buffer itself. This is how the builtin help() works.
4558
4563
4559 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4564 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4560 macro scoping: macros need to be executed in the user's namespace
4565 macro scoping: macros need to be executed in the user's namespace
4561 to work as if they had been typed by the user.
4566 to work as if they had been typed by the user.
4562
4567
4563 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4568 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4564 execute automatically (no need to type 'exec...'). They then
4569 execute automatically (no need to type 'exec...'). They then
4565 behave like 'true macros'. The printing system was also modified
4570 behave like 'true macros'. The printing system was also modified
4566 for this to work.
4571 for this to work.
4567
4572
4568 2002-02-19 Fernando Perez <fperez@colorado.edu>
4573 2002-02-19 Fernando Perez <fperez@colorado.edu>
4569
4574
4570 * IPython/genutils.py (page_file): new function for paging files
4575 * IPython/genutils.py (page_file): new function for paging files
4571 in an OS-independent way. Also necessary for file viewing to work
4576 in an OS-independent way. Also necessary for file viewing to work
4572 well inside Emacs buffers.
4577 well inside Emacs buffers.
4573 (page): Added checks for being in an emacs buffer.
4578 (page): Added checks for being in an emacs buffer.
4574 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4579 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4575 same bug in iplib.
4580 same bug in iplib.
4576
4581
4577 2002-02-18 Fernando Perez <fperez@colorado.edu>
4582 2002-02-18 Fernando Perez <fperez@colorado.edu>
4578
4583
4579 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4584 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4580 of readline so that IPython can work inside an Emacs buffer.
4585 of readline so that IPython can work inside an Emacs buffer.
4581
4586
4582 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4587 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4583 method signatures (they weren't really bugs, but it looks cleaner
4588 method signatures (they weren't really bugs, but it looks cleaner
4584 and keeps PyChecker happy).
4589 and keeps PyChecker happy).
4585
4590
4586 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4591 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4587 for implementing various user-defined hooks. Currently only
4592 for implementing various user-defined hooks. Currently only
4588 display is done.
4593 display is done.
4589
4594
4590 * IPython/Prompts.py (CachedOutput._display): changed display
4595 * IPython/Prompts.py (CachedOutput._display): changed display
4591 functions so that they can be dynamically changed by users easily.
4596 functions so that they can be dynamically changed by users easily.
4592
4597
4593 * IPython/Extensions/numeric_formats.py (num_display): added an
4598 * IPython/Extensions/numeric_formats.py (num_display): added an
4594 extension for printing NumPy arrays in flexible manners. It
4599 extension for printing NumPy arrays in flexible manners. It
4595 doesn't do anything yet, but all the structure is in
4600 doesn't do anything yet, but all the structure is in
4596 place. Ultimately the plan is to implement output format control
4601 place. Ultimately the plan is to implement output format control
4597 like in Octave.
4602 like in Octave.
4598
4603
4599 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4604 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4600 methods are found at run-time by all the automatic machinery.
4605 methods are found at run-time by all the automatic machinery.
4601
4606
4602 2002-02-17 Fernando Perez <fperez@colorado.edu>
4607 2002-02-17 Fernando Perez <fperez@colorado.edu>
4603
4608
4604 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4609 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4605 whole file a little.
4610 whole file a little.
4606
4611
4607 * ToDo: closed this document. Now there's a new_design.lyx
4612 * ToDo: closed this document. Now there's a new_design.lyx
4608 document for all new ideas. Added making a pdf of it for the
4613 document for all new ideas. Added making a pdf of it for the
4609 end-user distro.
4614 end-user distro.
4610
4615
4611 * IPython/Logger.py (Logger.switch_log): Created this to replace
4616 * IPython/Logger.py (Logger.switch_log): Created this to replace
4612 logon() and logoff(). It also fixes a nasty crash reported by
4617 logon() and logoff(). It also fixes a nasty crash reported by
4613 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4618 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4614
4619
4615 * IPython/iplib.py (complete): got auto-completion to work with
4620 * IPython/iplib.py (complete): got auto-completion to work with
4616 automagic (I had wanted this for a long time).
4621 automagic (I had wanted this for a long time).
4617
4622
4618 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4623 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4619 to @file, since file() is now a builtin and clashes with automagic
4624 to @file, since file() is now a builtin and clashes with automagic
4620 for @file.
4625 for @file.
4621
4626
4622 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4627 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4623 of this was previously in iplib, which had grown to more than 2000
4628 of this was previously in iplib, which had grown to more than 2000
4624 lines, way too long. No new functionality, but it makes managing
4629 lines, way too long. No new functionality, but it makes managing
4625 the code a bit easier.
4630 the code a bit easier.
4626
4631
4627 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4632 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4628 information to crash reports.
4633 information to crash reports.
4629
4634
4630 2002-02-12 Fernando Perez <fperez@colorado.edu>
4635 2002-02-12 Fernando Perez <fperez@colorado.edu>
4631
4636
4632 * Released 0.2.5.
4637 * Released 0.2.5.
4633
4638
4634 2002-02-11 Fernando Perez <fperez@colorado.edu>
4639 2002-02-11 Fernando Perez <fperez@colorado.edu>
4635
4640
4636 * Wrote a relatively complete Windows installer. It puts
4641 * Wrote a relatively complete Windows installer. It puts
4637 everything in place, creates Start Menu entries and fixes the
4642 everything in place, creates Start Menu entries and fixes the
4638 color issues. Nothing fancy, but it works.
4643 color issues. Nothing fancy, but it works.
4639
4644
4640 2002-02-10 Fernando Perez <fperez@colorado.edu>
4645 2002-02-10 Fernando Perez <fperez@colorado.edu>
4641
4646
4642 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4647 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4643 os.path.expanduser() call so that we can type @run ~/myfile.py and
4648 os.path.expanduser() call so that we can type @run ~/myfile.py and
4644 have thigs work as expected.
4649 have thigs work as expected.
4645
4650
4646 * IPython/genutils.py (page): fixed exception handling so things
4651 * IPython/genutils.py (page): fixed exception handling so things
4647 work both in Unix and Windows correctly. Quitting a pager triggers
4652 work both in Unix and Windows correctly. Quitting a pager triggers
4648 an IOError/broken pipe in Unix, and in windows not finding a pager
4653 an IOError/broken pipe in Unix, and in windows not finding a pager
4649 is also an IOError, so I had to actually look at the return value
4654 is also an IOError, so I had to actually look at the return value
4650 of the exception, not just the exception itself. Should be ok now.
4655 of the exception, not just the exception itself. Should be ok now.
4651
4656
4652 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4657 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4653 modified to allow case-insensitive color scheme changes.
4658 modified to allow case-insensitive color scheme changes.
4654
4659
4655 2002-02-09 Fernando Perez <fperez@colorado.edu>
4660 2002-02-09 Fernando Perez <fperez@colorado.edu>
4656
4661
4657 * IPython/genutils.py (native_line_ends): new function to leave
4662 * IPython/genutils.py (native_line_ends): new function to leave
4658 user config files with os-native line-endings.
4663 user config files with os-native line-endings.
4659
4664
4660 * README and manual updates.
4665 * README and manual updates.
4661
4666
4662 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4667 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4663 instead of StringType to catch Unicode strings.
4668 instead of StringType to catch Unicode strings.
4664
4669
4665 * IPython/genutils.py (filefind): fixed bug for paths with
4670 * IPython/genutils.py (filefind): fixed bug for paths with
4666 embedded spaces (very common in Windows).
4671 embedded spaces (very common in Windows).
4667
4672
4668 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4673 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4669 files under Windows, so that they get automatically associated
4674 files under Windows, so that they get automatically associated
4670 with a text editor. Windows makes it a pain to handle
4675 with a text editor. Windows makes it a pain to handle
4671 extension-less files.
4676 extension-less files.
4672
4677
4673 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4678 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4674 warning about readline only occur for Posix. In Windows there's no
4679 warning about readline only occur for Posix. In Windows there's no
4675 way to get readline, so why bother with the warning.
4680 way to get readline, so why bother with the warning.
4676
4681
4677 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4682 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4678 for __str__ instead of dir(self), since dir() changed in 2.2.
4683 for __str__ instead of dir(self), since dir() changed in 2.2.
4679
4684
4680 * Ported to Windows! Tested on XP, I suspect it should work fine
4685 * Ported to Windows! Tested on XP, I suspect it should work fine
4681 on NT/2000, but I don't think it will work on 98 et al. That
4686 on NT/2000, but I don't think it will work on 98 et al. That
4682 series of Windows is such a piece of junk anyway that I won't try
4687 series of Windows is such a piece of junk anyway that I won't try
4683 porting it there. The XP port was straightforward, showed a few
4688 porting it there. The XP port was straightforward, showed a few
4684 bugs here and there (fixed all), in particular some string
4689 bugs here and there (fixed all), in particular some string
4685 handling stuff which required considering Unicode strings (which
4690 handling stuff which required considering Unicode strings (which
4686 Windows uses). This is good, but hasn't been too tested :) No
4691 Windows uses). This is good, but hasn't been too tested :) No
4687 fancy installer yet, I'll put a note in the manual so people at
4692 fancy installer yet, I'll put a note in the manual so people at
4688 least make manually a shortcut.
4693 least make manually a shortcut.
4689
4694
4690 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4695 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4691 into a single one, "colors". This now controls both prompt and
4696 into a single one, "colors". This now controls both prompt and
4692 exception color schemes, and can be changed both at startup
4697 exception color schemes, and can be changed both at startup
4693 (either via command-line switches or via ipythonrc files) and at
4698 (either via command-line switches or via ipythonrc files) and at
4694 runtime, with @colors.
4699 runtime, with @colors.
4695 (Magic.magic_run): renamed @prun to @run and removed the old
4700 (Magic.magic_run): renamed @prun to @run and removed the old
4696 @run. The two were too similar to warrant keeping both.
4701 @run. The two were too similar to warrant keeping both.
4697
4702
4698 2002-02-03 Fernando Perez <fperez@colorado.edu>
4703 2002-02-03 Fernando Perez <fperez@colorado.edu>
4699
4704
4700 * IPython/iplib.py (install_first_time): Added comment on how to
4705 * IPython/iplib.py (install_first_time): Added comment on how to
4701 configure the color options for first-time users. Put a <return>
4706 configure the color options for first-time users. Put a <return>
4702 request at the end so that small-terminal users get a chance to
4707 request at the end so that small-terminal users get a chance to
4703 read the startup info.
4708 read the startup info.
4704
4709
4705 2002-01-23 Fernando Perez <fperez@colorado.edu>
4710 2002-01-23 Fernando Perez <fperez@colorado.edu>
4706
4711
4707 * IPython/iplib.py (CachedOutput.update): Changed output memory
4712 * IPython/iplib.py (CachedOutput.update): Changed output memory
4708 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4713 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4709 input history we still use _i. Did this b/c these variable are
4714 input history we still use _i. Did this b/c these variable are
4710 very commonly used in interactive work, so the less we need to
4715 very commonly used in interactive work, so the less we need to
4711 type the better off we are.
4716 type the better off we are.
4712 (Magic.magic_prun): updated @prun to better handle the namespaces
4717 (Magic.magic_prun): updated @prun to better handle the namespaces
4713 the file will run in, including a fix for __name__ not being set
4718 the file will run in, including a fix for __name__ not being set
4714 before.
4719 before.
4715
4720
4716 2002-01-20 Fernando Perez <fperez@colorado.edu>
4721 2002-01-20 Fernando Perez <fperez@colorado.edu>
4717
4722
4718 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4723 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4719 extra garbage for Python 2.2. Need to look more carefully into
4724 extra garbage for Python 2.2. Need to look more carefully into
4720 this later.
4725 this later.
4721
4726
4722 2002-01-19 Fernando Perez <fperez@colorado.edu>
4727 2002-01-19 Fernando Perez <fperez@colorado.edu>
4723
4728
4724 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4729 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4725 display SyntaxError exceptions properly formatted when they occur
4730 display SyntaxError exceptions properly formatted when they occur
4726 (they can be triggered by imported code).
4731 (they can be triggered by imported code).
4727
4732
4728 2002-01-18 Fernando Perez <fperez@colorado.edu>
4733 2002-01-18 Fernando Perez <fperez@colorado.edu>
4729
4734
4730 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4735 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4731 SyntaxError exceptions are reported nicely formatted, instead of
4736 SyntaxError exceptions are reported nicely formatted, instead of
4732 spitting out only offset information as before.
4737 spitting out only offset information as before.
4733 (Magic.magic_prun): Added the @prun function for executing
4738 (Magic.magic_prun): Added the @prun function for executing
4734 programs with command line args inside IPython.
4739 programs with command line args inside IPython.
4735
4740
4736 2002-01-16 Fernando Perez <fperez@colorado.edu>
4741 2002-01-16 Fernando Perez <fperez@colorado.edu>
4737
4742
4738 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4743 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4739 to *not* include the last item given in a range. This brings their
4744 to *not* include the last item given in a range. This brings their
4740 behavior in line with Python's slicing:
4745 behavior in line with Python's slicing:
4741 a[n1:n2] -> a[n1]...a[n2-1]
4746 a[n1:n2] -> a[n1]...a[n2-1]
4742 It may be a bit less convenient, but I prefer to stick to Python's
4747 It may be a bit less convenient, but I prefer to stick to Python's
4743 conventions *everywhere*, so users never have to wonder.
4748 conventions *everywhere*, so users never have to wonder.
4744 (Magic.magic_macro): Added @macro function to ease the creation of
4749 (Magic.magic_macro): Added @macro function to ease the creation of
4745 macros.
4750 macros.
4746
4751
4747 2002-01-05 Fernando Perez <fperez@colorado.edu>
4752 2002-01-05 Fernando Perez <fperez@colorado.edu>
4748
4753
4749 * Released 0.2.4.
4754 * Released 0.2.4.
4750
4755
4751 * IPython/iplib.py (Magic.magic_pdef):
4756 * IPython/iplib.py (Magic.magic_pdef):
4752 (InteractiveShell.safe_execfile): report magic lines and error
4757 (InteractiveShell.safe_execfile): report magic lines and error
4753 lines without line numbers so one can easily copy/paste them for
4758 lines without line numbers so one can easily copy/paste them for
4754 re-execution.
4759 re-execution.
4755
4760
4756 * Updated manual with recent changes.
4761 * Updated manual with recent changes.
4757
4762
4758 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4763 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4759 docstring printing when class? is called. Very handy for knowing
4764 docstring printing when class? is called. Very handy for knowing
4760 how to create class instances (as long as __init__ is well
4765 how to create class instances (as long as __init__ is well
4761 documented, of course :)
4766 documented, of course :)
4762 (Magic.magic_doc): print both class and constructor docstrings.
4767 (Magic.magic_doc): print both class and constructor docstrings.
4763 (Magic.magic_pdef): give constructor info if passed a class and
4768 (Magic.magic_pdef): give constructor info if passed a class and
4764 __call__ info for callable object instances.
4769 __call__ info for callable object instances.
4765
4770
4766 2002-01-04 Fernando Perez <fperez@colorado.edu>
4771 2002-01-04 Fernando Perez <fperez@colorado.edu>
4767
4772
4768 * Made deep_reload() off by default. It doesn't always work
4773 * Made deep_reload() off by default. It doesn't always work
4769 exactly as intended, so it's probably safer to have it off. It's
4774 exactly as intended, so it's probably safer to have it off. It's
4770 still available as dreload() anyway, so nothing is lost.
4775 still available as dreload() anyway, so nothing is lost.
4771
4776
4772 2002-01-02 Fernando Perez <fperez@colorado.edu>
4777 2002-01-02 Fernando Perez <fperez@colorado.edu>
4773
4778
4774 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4779 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4775 so I wanted an updated release).
4780 so I wanted an updated release).
4776
4781
4777 2001-12-27 Fernando Perez <fperez@colorado.edu>
4782 2001-12-27 Fernando Perez <fperez@colorado.edu>
4778
4783
4779 * IPython/iplib.py (InteractiveShell.interact): Added the original
4784 * IPython/iplib.py (InteractiveShell.interact): Added the original
4780 code from 'code.py' for this module in order to change the
4785 code from 'code.py' for this module in order to change the
4781 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4786 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4782 the history cache would break when the user hit Ctrl-C, and
4787 the history cache would break when the user hit Ctrl-C, and
4783 interact() offers no way to add any hooks to it.
4788 interact() offers no way to add any hooks to it.
4784
4789
4785 2001-12-23 Fernando Perez <fperez@colorado.edu>
4790 2001-12-23 Fernando Perez <fperez@colorado.edu>
4786
4791
4787 * setup.py: added check for 'MANIFEST' before trying to remove
4792 * setup.py: added check for 'MANIFEST' before trying to remove
4788 it. Thanks to Sean Reifschneider.
4793 it. Thanks to Sean Reifschneider.
4789
4794
4790 2001-12-22 Fernando Perez <fperez@colorado.edu>
4795 2001-12-22 Fernando Perez <fperez@colorado.edu>
4791
4796
4792 * Released 0.2.2.
4797 * Released 0.2.2.
4793
4798
4794 * Finished (reasonably) writing the manual. Later will add the
4799 * Finished (reasonably) writing the manual. Later will add the
4795 python-standard navigation stylesheets, but for the time being
4800 python-standard navigation stylesheets, but for the time being
4796 it's fairly complete. Distribution will include html and pdf
4801 it's fairly complete. Distribution will include html and pdf
4797 versions.
4802 versions.
4798
4803
4799 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4804 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4800 (MayaVi author).
4805 (MayaVi author).
4801
4806
4802 2001-12-21 Fernando Perez <fperez@colorado.edu>
4807 2001-12-21 Fernando Perez <fperez@colorado.edu>
4803
4808
4804 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4809 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4805 good public release, I think (with the manual and the distutils
4810 good public release, I think (with the manual and the distutils
4806 installer). The manual can use some work, but that can go
4811 installer). The manual can use some work, but that can go
4807 slowly. Otherwise I think it's quite nice for end users. Next
4812 slowly. Otherwise I think it's quite nice for end users. Next
4808 summer, rewrite the guts of it...
4813 summer, rewrite the guts of it...
4809
4814
4810 * Changed format of ipythonrc files to use whitespace as the
4815 * Changed format of ipythonrc files to use whitespace as the
4811 separator instead of an explicit '='. Cleaner.
4816 separator instead of an explicit '='. Cleaner.
4812
4817
4813 2001-12-20 Fernando Perez <fperez@colorado.edu>
4818 2001-12-20 Fernando Perez <fperez@colorado.edu>
4814
4819
4815 * Started a manual in LyX. For now it's just a quick merge of the
4820 * Started a manual in LyX. For now it's just a quick merge of the
4816 various internal docstrings and READMEs. Later it may grow into a
4821 various internal docstrings and READMEs. Later it may grow into a
4817 nice, full-blown manual.
4822 nice, full-blown manual.
4818
4823
4819 * Set up a distutils based installer. Installation should now be
4824 * Set up a distutils based installer. Installation should now be
4820 trivially simple for end-users.
4825 trivially simple for end-users.
4821
4826
4822 2001-12-11 Fernando Perez <fperez@colorado.edu>
4827 2001-12-11 Fernando Perez <fperez@colorado.edu>
4823
4828
4824 * Released 0.2.0. First public release, announced it at
4829 * Released 0.2.0. First public release, announced it at
4825 comp.lang.python. From now on, just bugfixes...
4830 comp.lang.python. From now on, just bugfixes...
4826
4831
4827 * Went through all the files, set copyright/license notices and
4832 * Went through all the files, set copyright/license notices and
4828 cleaned up things. Ready for release.
4833 cleaned up things. Ready for release.
4829
4834
4830 2001-12-10 Fernando Perez <fperez@colorado.edu>
4835 2001-12-10 Fernando Perez <fperez@colorado.edu>
4831
4836
4832 * Changed the first-time installer not to use tarfiles. It's more
4837 * Changed the first-time installer not to use tarfiles. It's more
4833 robust now and less unix-dependent. Also makes it easier for
4838 robust now and less unix-dependent. Also makes it easier for
4834 people to later upgrade versions.
4839 people to later upgrade versions.
4835
4840
4836 * Changed @exit to @abort to reflect the fact that it's pretty
4841 * Changed @exit to @abort to reflect the fact that it's pretty
4837 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4842 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4838 becomes significant only when IPyhton is embedded: in that case,
4843 becomes significant only when IPyhton is embedded: in that case,
4839 C-D closes IPython only, but @abort kills the enclosing program
4844 C-D closes IPython only, but @abort kills the enclosing program
4840 too (unless it had called IPython inside a try catching
4845 too (unless it had called IPython inside a try catching
4841 SystemExit).
4846 SystemExit).
4842
4847
4843 * Created Shell module which exposes the actuall IPython Shell
4848 * Created Shell module which exposes the actuall IPython Shell
4844 classes, currently the normal and the embeddable one. This at
4849 classes, currently the normal and the embeddable one. This at
4845 least offers a stable interface we won't need to change when
4850 least offers a stable interface we won't need to change when
4846 (later) the internals are rewritten. That rewrite will be confined
4851 (later) the internals are rewritten. That rewrite will be confined
4847 to iplib and ipmaker, but the Shell interface should remain as is.
4852 to iplib and ipmaker, but the Shell interface should remain as is.
4848
4853
4849 * Added embed module which offers an embeddable IPShell object,
4854 * Added embed module which offers an embeddable IPShell object,
4850 useful to fire up IPython *inside* a running program. Great for
4855 useful to fire up IPython *inside* a running program. Great for
4851 debugging or dynamical data analysis.
4856 debugging or dynamical data analysis.
4852
4857
4853 2001-12-08 Fernando Perez <fperez@colorado.edu>
4858 2001-12-08 Fernando Perez <fperez@colorado.edu>
4854
4859
4855 * Fixed small bug preventing seeing info from methods of defined
4860 * Fixed small bug preventing seeing info from methods of defined
4856 objects (incorrect namespace in _ofind()).
4861 objects (incorrect namespace in _ofind()).
4857
4862
4858 * Documentation cleanup. Moved the main usage docstrings to a
4863 * Documentation cleanup. Moved the main usage docstrings to a
4859 separate file, usage.py (cleaner to maintain, and hopefully in the
4864 separate file, usage.py (cleaner to maintain, and hopefully in the
4860 future some perlpod-like way of producing interactive, man and
4865 future some perlpod-like way of producing interactive, man and
4861 html docs out of it will be found).
4866 html docs out of it will be found).
4862
4867
4863 * Added @profile to see your profile at any time.
4868 * Added @profile to see your profile at any time.
4864
4869
4865 * Added @p as an alias for 'print'. It's especially convenient if
4870 * Added @p as an alias for 'print'. It's especially convenient if
4866 using automagic ('p x' prints x).
4871 using automagic ('p x' prints x).
4867
4872
4868 * Small cleanups and fixes after a pychecker run.
4873 * Small cleanups and fixes after a pychecker run.
4869
4874
4870 * Changed the @cd command to handle @cd - and @cd -<n> for
4875 * Changed the @cd command to handle @cd - and @cd -<n> for
4871 visiting any directory in _dh.
4876 visiting any directory in _dh.
4872
4877
4873 * Introduced _dh, a history of visited directories. @dhist prints
4878 * Introduced _dh, a history of visited directories. @dhist prints
4874 it out with numbers.
4879 it out with numbers.
4875
4880
4876 2001-12-07 Fernando Perez <fperez@colorado.edu>
4881 2001-12-07 Fernando Perez <fperez@colorado.edu>
4877
4882
4878 * Released 0.1.22
4883 * Released 0.1.22
4879
4884
4880 * Made initialization a bit more robust against invalid color
4885 * Made initialization a bit more robust against invalid color
4881 options in user input (exit, not traceback-crash).
4886 options in user input (exit, not traceback-crash).
4882
4887
4883 * Changed the bug crash reporter to write the report only in the
4888 * Changed the bug crash reporter to write the report only in the
4884 user's .ipython directory. That way IPython won't litter people's
4889 user's .ipython directory. That way IPython won't litter people's
4885 hard disks with crash files all over the place. Also print on
4890 hard disks with crash files all over the place. Also print on
4886 screen the necessary mail command.
4891 screen the necessary mail command.
4887
4892
4888 * With the new ultraTB, implemented LightBG color scheme for light
4893 * With the new ultraTB, implemented LightBG color scheme for light
4889 background terminals. A lot of people like white backgrounds, so I
4894 background terminals. A lot of people like white backgrounds, so I
4890 guess we should at least give them something readable.
4895 guess we should at least give them something readable.
4891
4896
4892 2001-12-06 Fernando Perez <fperez@colorado.edu>
4897 2001-12-06 Fernando Perez <fperez@colorado.edu>
4893
4898
4894 * Modified the structure of ultraTB. Now there's a proper class
4899 * Modified the structure of ultraTB. Now there's a proper class
4895 for tables of color schemes which allow adding schemes easily and
4900 for tables of color schemes which allow adding schemes easily and
4896 switching the active scheme without creating a new instance every
4901 switching the active scheme without creating a new instance every
4897 time (which was ridiculous). The syntax for creating new schemes
4902 time (which was ridiculous). The syntax for creating new schemes
4898 is also cleaner. I think ultraTB is finally done, with a clean
4903 is also cleaner. I think ultraTB is finally done, with a clean
4899 class structure. Names are also much cleaner (now there's proper
4904 class structure. Names are also much cleaner (now there's proper
4900 color tables, no need for every variable to also have 'color' in
4905 color tables, no need for every variable to also have 'color' in
4901 its name).
4906 its name).
4902
4907
4903 * Broke down genutils into separate files. Now genutils only
4908 * Broke down genutils into separate files. Now genutils only
4904 contains utility functions, and classes have been moved to their
4909 contains utility functions, and classes have been moved to their
4905 own files (they had enough independent functionality to warrant
4910 own files (they had enough independent functionality to warrant
4906 it): ConfigLoader, OutputTrap, Struct.
4911 it): ConfigLoader, OutputTrap, Struct.
4907
4912
4908 2001-12-05 Fernando Perez <fperez@colorado.edu>
4913 2001-12-05 Fernando Perez <fperez@colorado.edu>
4909
4914
4910 * IPython turns 21! Released version 0.1.21, as a candidate for
4915 * IPython turns 21! Released version 0.1.21, as a candidate for
4911 public consumption. If all goes well, release in a few days.
4916 public consumption. If all goes well, release in a few days.
4912
4917
4913 * Fixed path bug (files in Extensions/ directory wouldn't be found
4918 * Fixed path bug (files in Extensions/ directory wouldn't be found
4914 unless IPython/ was explicitly in sys.path).
4919 unless IPython/ was explicitly in sys.path).
4915
4920
4916 * Extended the FlexCompleter class as MagicCompleter to allow
4921 * Extended the FlexCompleter class as MagicCompleter to allow
4917 completion of @-starting lines.
4922 completion of @-starting lines.
4918
4923
4919 * Created __release__.py file as a central repository for release
4924 * Created __release__.py file as a central repository for release
4920 info that other files can read from.
4925 info that other files can read from.
4921
4926
4922 * Fixed small bug in logging: when logging was turned on in
4927 * Fixed small bug in logging: when logging was turned on in
4923 mid-session, old lines with special meanings (!@?) were being
4928 mid-session, old lines with special meanings (!@?) were being
4924 logged without the prepended comment, which is necessary since
4929 logged without the prepended comment, which is necessary since
4925 they are not truly valid python syntax. This should make session
4930 they are not truly valid python syntax. This should make session
4926 restores produce less errors.
4931 restores produce less errors.
4927
4932
4928 * The namespace cleanup forced me to make a FlexCompleter class
4933 * The namespace cleanup forced me to make a FlexCompleter class
4929 which is nothing but a ripoff of rlcompleter, but with selectable
4934 which is nothing but a ripoff of rlcompleter, but with selectable
4930 namespace (rlcompleter only works in __main__.__dict__). I'll try
4935 namespace (rlcompleter only works in __main__.__dict__). I'll try
4931 to submit a note to the authors to see if this change can be
4936 to submit a note to the authors to see if this change can be
4932 incorporated in future rlcompleter releases (Dec.6: done)
4937 incorporated in future rlcompleter releases (Dec.6: done)
4933
4938
4934 * More fixes to namespace handling. It was a mess! Now all
4939 * More fixes to namespace handling. It was a mess! Now all
4935 explicit references to __main__.__dict__ are gone (except when
4940 explicit references to __main__.__dict__ are gone (except when
4936 really needed) and everything is handled through the namespace
4941 really needed) and everything is handled through the namespace
4937 dicts in the IPython instance. We seem to be getting somewhere
4942 dicts in the IPython instance. We seem to be getting somewhere
4938 with this, finally...
4943 with this, finally...
4939
4944
4940 * Small documentation updates.
4945 * Small documentation updates.
4941
4946
4942 * Created the Extensions directory under IPython (with an
4947 * Created the Extensions directory under IPython (with an
4943 __init__.py). Put the PhysicalQ stuff there. This directory should
4948 __init__.py). Put the PhysicalQ stuff there. This directory should
4944 be used for all special-purpose extensions.
4949 be used for all special-purpose extensions.
4945
4950
4946 * File renaming:
4951 * File renaming:
4947 ipythonlib --> ipmaker
4952 ipythonlib --> ipmaker
4948 ipplib --> iplib
4953 ipplib --> iplib
4949 This makes a bit more sense in terms of what these files actually do.
4954 This makes a bit more sense in terms of what these files actually do.
4950
4955
4951 * Moved all the classes and functions in ipythonlib to ipplib, so
4956 * Moved all the classes and functions in ipythonlib to ipplib, so
4952 now ipythonlib only has make_IPython(). This will ease up its
4957 now ipythonlib only has make_IPython(). This will ease up its
4953 splitting in smaller functional chunks later.
4958 splitting in smaller functional chunks later.
4954
4959
4955 * Cleaned up (done, I think) output of @whos. Better column
4960 * Cleaned up (done, I think) output of @whos. Better column
4956 formatting, and now shows str(var) for as much as it can, which is
4961 formatting, and now shows str(var) for as much as it can, which is
4957 typically what one gets with a 'print var'.
4962 typically what one gets with a 'print var'.
4958
4963
4959 2001-12-04 Fernando Perez <fperez@colorado.edu>
4964 2001-12-04 Fernando Perez <fperez@colorado.edu>
4960
4965
4961 * Fixed namespace problems. Now builtin/IPyhton/user names get
4966 * Fixed namespace problems. Now builtin/IPyhton/user names get
4962 properly reported in their namespace. Internal namespace handling
4967 properly reported in their namespace. Internal namespace handling
4963 is finally getting decent (not perfect yet, but much better than
4968 is finally getting decent (not perfect yet, but much better than
4964 the ad-hoc mess we had).
4969 the ad-hoc mess we had).
4965
4970
4966 * Removed -exit option. If people just want to run a python
4971 * Removed -exit option. If people just want to run a python
4967 script, that's what the normal interpreter is for. Less
4972 script, that's what the normal interpreter is for. Less
4968 unnecessary options, less chances for bugs.
4973 unnecessary options, less chances for bugs.
4969
4974
4970 * Added a crash handler which generates a complete post-mortem if
4975 * Added a crash handler which generates a complete post-mortem if
4971 IPython crashes. This will help a lot in tracking bugs down the
4976 IPython crashes. This will help a lot in tracking bugs down the
4972 road.
4977 road.
4973
4978
4974 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4979 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4975 which were boud to functions being reassigned would bypass the
4980 which were boud to functions being reassigned would bypass the
4976 logger, breaking the sync of _il with the prompt counter. This
4981 logger, breaking the sync of _il with the prompt counter. This
4977 would then crash IPython later when a new line was logged.
4982 would then crash IPython later when a new line was logged.
4978
4983
4979 2001-12-02 Fernando Perez <fperez@colorado.edu>
4984 2001-12-02 Fernando Perez <fperez@colorado.edu>
4980
4985
4981 * Made IPython a package. This means people don't have to clutter
4986 * Made IPython a package. This means people don't have to clutter
4982 their sys.path with yet another directory. Changed the INSTALL
4987 their sys.path with yet another directory. Changed the INSTALL
4983 file accordingly.
4988 file accordingly.
4984
4989
4985 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4990 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4986 sorts its output (so @who shows it sorted) and @whos formats the
4991 sorts its output (so @who shows it sorted) and @whos formats the
4987 table according to the width of the first column. Nicer, easier to
4992 table according to the width of the first column. Nicer, easier to
4988 read. Todo: write a generic table_format() which takes a list of
4993 read. Todo: write a generic table_format() which takes a list of
4989 lists and prints it nicely formatted, with optional row/column
4994 lists and prints it nicely formatted, with optional row/column
4990 separators and proper padding and justification.
4995 separators and proper padding and justification.
4991
4996
4992 * Released 0.1.20
4997 * Released 0.1.20
4993
4998
4994 * Fixed bug in @log which would reverse the inputcache list (a
4999 * Fixed bug in @log which would reverse the inputcache list (a
4995 copy operation was missing).
5000 copy operation was missing).
4996
5001
4997 * Code cleanup. @config was changed to use page(). Better, since
5002 * Code cleanup. @config was changed to use page(). Better, since
4998 its output is always quite long.
5003 its output is always quite long.
4999
5004
5000 * Itpl is back as a dependency. I was having too many problems
5005 * Itpl is back as a dependency. I was having too many problems
5001 getting the parametric aliases to work reliably, and it's just
5006 getting the parametric aliases to work reliably, and it's just
5002 easier to code weird string operations with it than playing %()s
5007 easier to code weird string operations with it than playing %()s
5003 games. It's only ~6k, so I don't think it's too big a deal.
5008 games. It's only ~6k, so I don't think it's too big a deal.
5004
5009
5005 * Found (and fixed) a very nasty bug with history. !lines weren't
5010 * Found (and fixed) a very nasty bug with history. !lines weren't
5006 getting cached, and the out of sync caches would crash
5011 getting cached, and the out of sync caches would crash
5007 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5012 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5008 division of labor a bit better. Bug fixed, cleaner structure.
5013 division of labor a bit better. Bug fixed, cleaner structure.
5009
5014
5010 2001-12-01 Fernando Perez <fperez@colorado.edu>
5015 2001-12-01 Fernando Perez <fperez@colorado.edu>
5011
5016
5012 * Released 0.1.19
5017 * Released 0.1.19
5013
5018
5014 * Added option -n to @hist to prevent line number printing. Much
5019 * Added option -n to @hist to prevent line number printing. Much
5015 easier to copy/paste code this way.
5020 easier to copy/paste code this way.
5016
5021
5017 * Created global _il to hold the input list. Allows easy
5022 * Created global _il to hold the input list. Allows easy
5018 re-execution of blocks of code by slicing it (inspired by Janko's
5023 re-execution of blocks of code by slicing it (inspired by Janko's
5019 comment on 'macros').
5024 comment on 'macros').
5020
5025
5021 * Small fixes and doc updates.
5026 * Small fixes and doc updates.
5022
5027
5023 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5028 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5024 much too fragile with automagic. Handles properly multi-line
5029 much too fragile with automagic. Handles properly multi-line
5025 statements and takes parameters.
5030 statements and takes parameters.
5026
5031
5027 2001-11-30 Fernando Perez <fperez@colorado.edu>
5032 2001-11-30 Fernando Perez <fperez@colorado.edu>
5028
5033
5029 * Version 0.1.18 released.
5034 * Version 0.1.18 released.
5030
5035
5031 * Fixed nasty namespace bug in initial module imports.
5036 * Fixed nasty namespace bug in initial module imports.
5032
5037
5033 * Added copyright/license notes to all code files (except
5038 * Added copyright/license notes to all code files (except
5034 DPyGetOpt). For the time being, LGPL. That could change.
5039 DPyGetOpt). For the time being, LGPL. That could change.
5035
5040
5036 * Rewrote a much nicer README, updated INSTALL, cleaned up
5041 * Rewrote a much nicer README, updated INSTALL, cleaned up
5037 ipythonrc-* samples.
5042 ipythonrc-* samples.
5038
5043
5039 * Overall code/documentation cleanup. Basically ready for
5044 * Overall code/documentation cleanup. Basically ready for
5040 release. Only remaining thing: licence decision (LGPL?).
5045 release. Only remaining thing: licence decision (LGPL?).
5041
5046
5042 * Converted load_config to a class, ConfigLoader. Now recursion
5047 * Converted load_config to a class, ConfigLoader. Now recursion
5043 control is better organized. Doesn't include the same file twice.
5048 control is better organized. Doesn't include the same file twice.
5044
5049
5045 2001-11-29 Fernando Perez <fperez@colorado.edu>
5050 2001-11-29 Fernando Perez <fperez@colorado.edu>
5046
5051
5047 * Got input history working. Changed output history variables from
5052 * Got input history working. Changed output history variables from
5048 _p to _o so that _i is for input and _o for output. Just cleaner
5053 _p to _o so that _i is for input and _o for output. Just cleaner
5049 convention.
5054 convention.
5050
5055
5051 * Implemented parametric aliases. This pretty much allows the
5056 * Implemented parametric aliases. This pretty much allows the
5052 alias system to offer full-blown shell convenience, I think.
5057 alias system to offer full-blown shell convenience, I think.
5053
5058
5054 * Version 0.1.17 released, 0.1.18 opened.
5059 * Version 0.1.17 released, 0.1.18 opened.
5055
5060
5056 * dot_ipython/ipythonrc (alias): added documentation.
5061 * dot_ipython/ipythonrc (alias): added documentation.
5057 (xcolor): Fixed small bug (xcolors -> xcolor)
5062 (xcolor): Fixed small bug (xcolors -> xcolor)
5058
5063
5059 * Changed the alias system. Now alias is a magic command to define
5064 * Changed the alias system. Now alias is a magic command to define
5060 aliases just like the shell. Rationale: the builtin magics should
5065 aliases just like the shell. Rationale: the builtin magics should
5061 be there for things deeply connected to IPython's
5066 be there for things deeply connected to IPython's
5062 architecture. And this is a much lighter system for what I think
5067 architecture. And this is a much lighter system for what I think
5063 is the really important feature: allowing users to define quickly
5068 is the really important feature: allowing users to define quickly
5064 magics that will do shell things for them, so they can customize
5069 magics that will do shell things for them, so they can customize
5065 IPython easily to match their work habits. If someone is really
5070 IPython easily to match their work habits. If someone is really
5066 desperate to have another name for a builtin alias, they can
5071 desperate to have another name for a builtin alias, they can
5067 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5072 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5068 works.
5073 works.
5069
5074
5070 2001-11-28 Fernando Perez <fperez@colorado.edu>
5075 2001-11-28 Fernando Perez <fperez@colorado.edu>
5071
5076
5072 * Changed @file so that it opens the source file at the proper
5077 * Changed @file so that it opens the source file at the proper
5073 line. Since it uses less, if your EDITOR environment is
5078 line. Since it uses less, if your EDITOR environment is
5074 configured, typing v will immediately open your editor of choice
5079 configured, typing v will immediately open your editor of choice
5075 right at the line where the object is defined. Not as quick as
5080 right at the line where the object is defined. Not as quick as
5076 having a direct @edit command, but for all intents and purposes it
5081 having a direct @edit command, but for all intents and purposes it
5077 works. And I don't have to worry about writing @edit to deal with
5082 works. And I don't have to worry about writing @edit to deal with
5078 all the editors, less does that.
5083 all the editors, less does that.
5079
5084
5080 * Version 0.1.16 released, 0.1.17 opened.
5085 * Version 0.1.16 released, 0.1.17 opened.
5081
5086
5082 * Fixed some nasty bugs in the page/page_dumb combo that could
5087 * Fixed some nasty bugs in the page/page_dumb combo that could
5083 crash IPython.
5088 crash IPython.
5084
5089
5085 2001-11-27 Fernando Perez <fperez@colorado.edu>
5090 2001-11-27 Fernando Perez <fperez@colorado.edu>
5086
5091
5087 * Version 0.1.15 released, 0.1.16 opened.
5092 * Version 0.1.15 released, 0.1.16 opened.
5088
5093
5089 * Finally got ? and ?? to work for undefined things: now it's
5094 * Finally got ? and ?? to work for undefined things: now it's
5090 possible to type {}.get? and get information about the get method
5095 possible to type {}.get? and get information about the get method
5091 of dicts, or os.path? even if only os is defined (so technically
5096 of dicts, or os.path? even if only os is defined (so technically
5092 os.path isn't). Works at any level. For example, after import os,
5097 os.path isn't). Works at any level. For example, after import os,
5093 os?, os.path?, os.path.abspath? all work. This is great, took some
5098 os?, os.path?, os.path.abspath? all work. This is great, took some
5094 work in _ofind.
5099 work in _ofind.
5095
5100
5096 * Fixed more bugs with logging. The sanest way to do it was to add
5101 * Fixed more bugs with logging. The sanest way to do it was to add
5097 to @log a 'mode' parameter. Killed two in one shot (this mode
5102 to @log a 'mode' parameter. Killed two in one shot (this mode
5098 option was a request of Janko's). I think it's finally clean
5103 option was a request of Janko's). I think it's finally clean
5099 (famous last words).
5104 (famous last words).
5100
5105
5101 * Added a page_dumb() pager which does a decent job of paging on
5106 * Added a page_dumb() pager which does a decent job of paging on
5102 screen, if better things (like less) aren't available. One less
5107 screen, if better things (like less) aren't available. One less
5103 unix dependency (someday maybe somebody will port this to
5108 unix dependency (someday maybe somebody will port this to
5104 windows).
5109 windows).
5105
5110
5106 * Fixed problem in magic_log: would lock of logging out if log
5111 * Fixed problem in magic_log: would lock of logging out if log
5107 creation failed (because it would still think it had succeeded).
5112 creation failed (because it would still think it had succeeded).
5108
5113
5109 * Improved the page() function using curses to auto-detect screen
5114 * Improved the page() function using curses to auto-detect screen
5110 size. Now it can make a much better decision on whether to print
5115 size. Now it can make a much better decision on whether to print
5111 or page a string. Option screen_length was modified: a value 0
5116 or page a string. Option screen_length was modified: a value 0
5112 means auto-detect, and that's the default now.
5117 means auto-detect, and that's the default now.
5113
5118
5114 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5119 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5115 go out. I'll test it for a few days, then talk to Janko about
5120 go out. I'll test it for a few days, then talk to Janko about
5116 licences and announce it.
5121 licences and announce it.
5117
5122
5118 * Fixed the length of the auto-generated ---> prompt which appears
5123 * Fixed the length of the auto-generated ---> prompt which appears
5119 for auto-parens and auto-quotes. Getting this right isn't trivial,
5124 for auto-parens and auto-quotes. Getting this right isn't trivial,
5120 with all the color escapes, different prompt types and optional
5125 with all the color escapes, different prompt types and optional
5121 separators. But it seems to be working in all the combinations.
5126 separators. But it seems to be working in all the combinations.
5122
5127
5123 2001-11-26 Fernando Perez <fperez@colorado.edu>
5128 2001-11-26 Fernando Perez <fperez@colorado.edu>
5124
5129
5125 * Wrote a regexp filter to get option types from the option names
5130 * Wrote a regexp filter to get option types from the option names
5126 string. This eliminates the need to manually keep two duplicate
5131 string. This eliminates the need to manually keep two duplicate
5127 lists.
5132 lists.
5128
5133
5129 * Removed the unneeded check_option_names. Now options are handled
5134 * Removed the unneeded check_option_names. Now options are handled
5130 in a much saner manner and it's easy to visually check that things
5135 in a much saner manner and it's easy to visually check that things
5131 are ok.
5136 are ok.
5132
5137
5133 * Updated version numbers on all files I modified to carry a
5138 * Updated version numbers on all files I modified to carry a
5134 notice so Janko and Nathan have clear version markers.
5139 notice so Janko and Nathan have clear version markers.
5135
5140
5136 * Updated docstring for ultraTB with my changes. I should send
5141 * Updated docstring for ultraTB with my changes. I should send
5137 this to Nathan.
5142 this to Nathan.
5138
5143
5139 * Lots of small fixes. Ran everything through pychecker again.
5144 * Lots of small fixes. Ran everything through pychecker again.
5140
5145
5141 * Made loading of deep_reload an cmd line option. If it's not too
5146 * Made loading of deep_reload an cmd line option. If it's not too
5142 kosher, now people can just disable it. With -nodeep_reload it's
5147 kosher, now people can just disable it. With -nodeep_reload it's
5143 still available as dreload(), it just won't overwrite reload().
5148 still available as dreload(), it just won't overwrite reload().
5144
5149
5145 * Moved many options to the no| form (-opt and -noopt
5150 * Moved many options to the no| form (-opt and -noopt
5146 accepted). Cleaner.
5151 accepted). Cleaner.
5147
5152
5148 * Changed magic_log so that if called with no parameters, it uses
5153 * Changed magic_log so that if called with no parameters, it uses
5149 'rotate' mode. That way auto-generated logs aren't automatically
5154 'rotate' mode. That way auto-generated logs aren't automatically
5150 over-written. For normal logs, now a backup is made if it exists
5155 over-written. For normal logs, now a backup is made if it exists
5151 (only 1 level of backups). A new 'backup' mode was added to the
5156 (only 1 level of backups). A new 'backup' mode was added to the
5152 Logger class to support this. This was a request by Janko.
5157 Logger class to support this. This was a request by Janko.
5153
5158
5154 * Added @logoff/@logon to stop/restart an active log.
5159 * Added @logoff/@logon to stop/restart an active log.
5155
5160
5156 * Fixed a lot of bugs in log saving/replay. It was pretty
5161 * Fixed a lot of bugs in log saving/replay. It was pretty
5157 broken. Now special lines (!@,/) appear properly in the command
5162 broken. Now special lines (!@,/) appear properly in the command
5158 history after a log replay.
5163 history after a log replay.
5159
5164
5160 * Tried and failed to implement full session saving via pickle. My
5165 * Tried and failed to implement full session saving via pickle. My
5161 idea was to pickle __main__.__dict__, but modules can't be
5166 idea was to pickle __main__.__dict__, but modules can't be
5162 pickled. This would be a better alternative to replaying logs, but
5167 pickled. This would be a better alternative to replaying logs, but
5163 seems quite tricky to get to work. Changed -session to be called
5168 seems quite tricky to get to work. Changed -session to be called
5164 -logplay, which more accurately reflects what it does. And if we
5169 -logplay, which more accurately reflects what it does. And if we
5165 ever get real session saving working, -session is now available.
5170 ever get real session saving working, -session is now available.
5166
5171
5167 * Implemented color schemes for prompts also. As for tracebacks,
5172 * Implemented color schemes for prompts also. As for tracebacks,
5168 currently only NoColor and Linux are supported. But now the
5173 currently only NoColor and Linux are supported. But now the
5169 infrastructure is in place, based on a generic ColorScheme
5174 infrastructure is in place, based on a generic ColorScheme
5170 class. So writing and activating new schemes both for the prompts
5175 class. So writing and activating new schemes both for the prompts
5171 and the tracebacks should be straightforward.
5176 and the tracebacks should be straightforward.
5172
5177
5173 * Version 0.1.13 released, 0.1.14 opened.
5178 * Version 0.1.13 released, 0.1.14 opened.
5174
5179
5175 * Changed handling of options for output cache. Now counter is
5180 * Changed handling of options for output cache. Now counter is
5176 hardwired starting at 1 and one specifies the maximum number of
5181 hardwired starting at 1 and one specifies the maximum number of
5177 entries *in the outcache* (not the max prompt counter). This is
5182 entries *in the outcache* (not the max prompt counter). This is
5178 much better, since many statements won't increase the cache
5183 much better, since many statements won't increase the cache
5179 count. It also eliminated some confusing options, now there's only
5184 count. It also eliminated some confusing options, now there's only
5180 one: cache_size.
5185 one: cache_size.
5181
5186
5182 * Added 'alias' magic function and magic_alias option in the
5187 * Added 'alias' magic function and magic_alias option in the
5183 ipythonrc file. Now the user can easily define whatever names he
5188 ipythonrc file. Now the user can easily define whatever names he
5184 wants for the magic functions without having to play weird
5189 wants for the magic functions without having to play weird
5185 namespace games. This gives IPython a real shell-like feel.
5190 namespace games. This gives IPython a real shell-like feel.
5186
5191
5187 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5192 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5188 @ or not).
5193 @ or not).
5189
5194
5190 This was one of the last remaining 'visible' bugs (that I know
5195 This was one of the last remaining 'visible' bugs (that I know
5191 of). I think if I can clean up the session loading so it works
5196 of). I think if I can clean up the session loading so it works
5192 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5197 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5193 about licensing).
5198 about licensing).
5194
5199
5195 2001-11-25 Fernando Perez <fperez@colorado.edu>
5200 2001-11-25 Fernando Perez <fperez@colorado.edu>
5196
5201
5197 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5202 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5198 there's a cleaner distinction between what ? and ?? show.
5203 there's a cleaner distinction between what ? and ?? show.
5199
5204
5200 * Added screen_length option. Now the user can define his own
5205 * Added screen_length option. Now the user can define his own
5201 screen size for page() operations.
5206 screen size for page() operations.
5202
5207
5203 * Implemented magic shell-like functions with automatic code
5208 * Implemented magic shell-like functions with automatic code
5204 generation. Now adding another function is just a matter of adding
5209 generation. Now adding another function is just a matter of adding
5205 an entry to a dict, and the function is dynamically generated at
5210 an entry to a dict, and the function is dynamically generated at
5206 run-time. Python has some really cool features!
5211 run-time. Python has some really cool features!
5207
5212
5208 * Renamed many options to cleanup conventions a little. Now all
5213 * Renamed many options to cleanup conventions a little. Now all
5209 are lowercase, and only underscores where needed. Also in the code
5214 are lowercase, and only underscores where needed. Also in the code
5210 option name tables are clearer.
5215 option name tables are clearer.
5211
5216
5212 * Changed prompts a little. Now input is 'In [n]:' instead of
5217 * Changed prompts a little. Now input is 'In [n]:' instead of
5213 'In[n]:='. This allows it the numbers to be aligned with the
5218 'In[n]:='. This allows it the numbers to be aligned with the
5214 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5219 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5215 Python (it was a Mathematica thing). The '...' continuation prompt
5220 Python (it was a Mathematica thing). The '...' continuation prompt
5216 was also changed a little to align better.
5221 was also changed a little to align better.
5217
5222
5218 * Fixed bug when flushing output cache. Not all _p<n> variables
5223 * Fixed bug when flushing output cache. Not all _p<n> variables
5219 exist, so their deletion needs to be wrapped in a try:
5224 exist, so their deletion needs to be wrapped in a try:
5220
5225
5221 * Figured out how to properly use inspect.formatargspec() (it
5226 * Figured out how to properly use inspect.formatargspec() (it
5222 requires the args preceded by *). So I removed all the code from
5227 requires the args preceded by *). So I removed all the code from
5223 _get_pdef in Magic, which was just replicating that.
5228 _get_pdef in Magic, which was just replicating that.
5224
5229
5225 * Added test to prefilter to allow redefining magic function names
5230 * Added test to prefilter to allow redefining magic function names
5226 as variables. This is ok, since the @ form is always available,
5231 as variables. This is ok, since the @ form is always available,
5227 but whe should allow the user to define a variable called 'ls' if
5232 but whe should allow the user to define a variable called 'ls' if
5228 he needs it.
5233 he needs it.
5229
5234
5230 * Moved the ToDo information from README into a separate ToDo.
5235 * Moved the ToDo information from README into a separate ToDo.
5231
5236
5232 * General code cleanup and small bugfixes. I think it's close to a
5237 * General code cleanup and small bugfixes. I think it's close to a
5233 state where it can be released, obviously with a big 'beta'
5238 state where it can be released, obviously with a big 'beta'
5234 warning on it.
5239 warning on it.
5235
5240
5236 * Got the magic function split to work. Now all magics are defined
5241 * Got the magic function split to work. Now all magics are defined
5237 in a separate class. It just organizes things a bit, and now
5242 in a separate class. It just organizes things a bit, and now
5238 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5243 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5239 was too long).
5244 was too long).
5240
5245
5241 * Changed @clear to @reset to avoid potential confusions with
5246 * Changed @clear to @reset to avoid potential confusions with
5242 the shell command clear. Also renamed @cl to @clear, which does
5247 the shell command clear. Also renamed @cl to @clear, which does
5243 exactly what people expect it to from their shell experience.
5248 exactly what people expect it to from their shell experience.
5244
5249
5245 Added a check to the @reset command (since it's so
5250 Added a check to the @reset command (since it's so
5246 destructive, it's probably a good idea to ask for confirmation).
5251 destructive, it's probably a good idea to ask for confirmation).
5247 But now reset only works for full namespace resetting. Since the
5252 But now reset only works for full namespace resetting. Since the
5248 del keyword is already there for deleting a few specific
5253 del keyword is already there for deleting a few specific
5249 variables, I don't see the point of having a redundant magic
5254 variables, I don't see the point of having a redundant magic
5250 function for the same task.
5255 function for the same task.
5251
5256
5252 2001-11-24 Fernando Perez <fperez@colorado.edu>
5257 2001-11-24 Fernando Perez <fperez@colorado.edu>
5253
5258
5254 * Updated the builtin docs (esp. the ? ones).
5259 * Updated the builtin docs (esp. the ? ones).
5255
5260
5256 * Ran all the code through pychecker. Not terribly impressed with
5261 * Ran all the code through pychecker. Not terribly impressed with
5257 it: lots of spurious warnings and didn't really find anything of
5262 it: lots of spurious warnings and didn't really find anything of
5258 substance (just a few modules being imported and not used).
5263 substance (just a few modules being imported and not used).
5259
5264
5260 * Implemented the new ultraTB functionality into IPython. New
5265 * Implemented the new ultraTB functionality into IPython. New
5261 option: xcolors. This chooses color scheme. xmode now only selects
5266 option: xcolors. This chooses color scheme. xmode now only selects
5262 between Plain and Verbose. Better orthogonality.
5267 between Plain and Verbose. Better orthogonality.
5263
5268
5264 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5269 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5265 mode and color scheme for the exception handlers. Now it's
5270 mode and color scheme for the exception handlers. Now it's
5266 possible to have the verbose traceback with no coloring.
5271 possible to have the verbose traceback with no coloring.
5267
5272
5268 2001-11-23 Fernando Perez <fperez@colorado.edu>
5273 2001-11-23 Fernando Perez <fperez@colorado.edu>
5269
5274
5270 * Version 0.1.12 released, 0.1.13 opened.
5275 * Version 0.1.12 released, 0.1.13 opened.
5271
5276
5272 * Removed option to set auto-quote and auto-paren escapes by
5277 * Removed option to set auto-quote and auto-paren escapes by
5273 user. The chances of breaking valid syntax are just too high. If
5278 user. The chances of breaking valid syntax are just too high. If
5274 someone *really* wants, they can always dig into the code.
5279 someone *really* wants, they can always dig into the code.
5275
5280
5276 * Made prompt separators configurable.
5281 * Made prompt separators configurable.
5277
5282
5278 2001-11-22 Fernando Perez <fperez@colorado.edu>
5283 2001-11-22 Fernando Perez <fperez@colorado.edu>
5279
5284
5280 * Small bugfixes in many places.
5285 * Small bugfixes in many places.
5281
5286
5282 * Removed the MyCompleter class from ipplib. It seemed redundant
5287 * Removed the MyCompleter class from ipplib. It seemed redundant
5283 with the C-p,C-n history search functionality. Less code to
5288 with the C-p,C-n history search functionality. Less code to
5284 maintain.
5289 maintain.
5285
5290
5286 * Moved all the original ipython.py code into ipythonlib.py. Right
5291 * Moved all the original ipython.py code into ipythonlib.py. Right
5287 now it's just one big dump into a function called make_IPython, so
5292 now it's just one big dump into a function called make_IPython, so
5288 no real modularity has been gained. But at least it makes the
5293 no real modularity has been gained. But at least it makes the
5289 wrapper script tiny, and since ipythonlib is a module, it gets
5294 wrapper script tiny, and since ipythonlib is a module, it gets
5290 compiled and startup is much faster.
5295 compiled and startup is much faster.
5291
5296
5292 This is a reasobably 'deep' change, so we should test it for a
5297 This is a reasobably 'deep' change, so we should test it for a
5293 while without messing too much more with the code.
5298 while without messing too much more with the code.
5294
5299
5295 2001-11-21 Fernando Perez <fperez@colorado.edu>
5300 2001-11-21 Fernando Perez <fperez@colorado.edu>
5296
5301
5297 * Version 0.1.11 released, 0.1.12 opened for further work.
5302 * Version 0.1.11 released, 0.1.12 opened for further work.
5298
5303
5299 * Removed dependency on Itpl. It was only needed in one place. It
5304 * Removed dependency on Itpl. It was only needed in one place. It
5300 would be nice if this became part of python, though. It makes life
5305 would be nice if this became part of python, though. It makes life
5301 *a lot* easier in some cases.
5306 *a lot* easier in some cases.
5302
5307
5303 * Simplified the prefilter code a bit. Now all handlers are
5308 * Simplified the prefilter code a bit. Now all handlers are
5304 expected to explicitly return a value (at least a blank string).
5309 expected to explicitly return a value (at least a blank string).
5305
5310
5306 * Heavy edits in ipplib. Removed the help system altogether. Now
5311 * Heavy edits in ipplib. Removed the help system altogether. Now
5307 obj?/?? is used for inspecting objects, a magic @doc prints
5312 obj?/?? is used for inspecting objects, a magic @doc prints
5308 docstrings, and full-blown Python help is accessed via the 'help'
5313 docstrings, and full-blown Python help is accessed via the 'help'
5309 keyword. This cleans up a lot of code (less to maintain) and does
5314 keyword. This cleans up a lot of code (less to maintain) and does
5310 the job. Since 'help' is now a standard Python component, might as
5315 the job. Since 'help' is now a standard Python component, might as
5311 well use it and remove duplicate functionality.
5316 well use it and remove duplicate functionality.
5312
5317
5313 Also removed the option to use ipplib as a standalone program. By
5318 Also removed the option to use ipplib as a standalone program. By
5314 now it's too dependent on other parts of IPython to function alone.
5319 now it's too dependent on other parts of IPython to function alone.
5315
5320
5316 * Fixed bug in genutils.pager. It would crash if the pager was
5321 * Fixed bug in genutils.pager. It would crash if the pager was
5317 exited immediately after opening (broken pipe).
5322 exited immediately after opening (broken pipe).
5318
5323
5319 * Trimmed down the VerboseTB reporting a little. The header is
5324 * Trimmed down the VerboseTB reporting a little. The header is
5320 much shorter now and the repeated exception arguments at the end
5325 much shorter now and the repeated exception arguments at the end
5321 have been removed. For interactive use the old header seemed a bit
5326 have been removed. For interactive use the old header seemed a bit
5322 excessive.
5327 excessive.
5323
5328
5324 * Fixed small bug in output of @whos for variables with multi-word
5329 * Fixed small bug in output of @whos for variables with multi-word
5325 types (only first word was displayed).
5330 types (only first word was displayed).
5326
5331
5327 2001-11-17 Fernando Perez <fperez@colorado.edu>
5332 2001-11-17 Fernando Perez <fperez@colorado.edu>
5328
5333
5329 * Version 0.1.10 released, 0.1.11 opened for further work.
5334 * Version 0.1.10 released, 0.1.11 opened for further work.
5330
5335
5331 * Modified dirs and friends. dirs now *returns* the stack (not
5336 * Modified dirs and friends. dirs now *returns* the stack (not
5332 prints), so one can manipulate it as a variable. Convenient to
5337 prints), so one can manipulate it as a variable. Convenient to
5333 travel along many directories.
5338 travel along many directories.
5334
5339
5335 * Fixed bug in magic_pdef: would only work with functions with
5340 * Fixed bug in magic_pdef: would only work with functions with
5336 arguments with default values.
5341 arguments with default values.
5337
5342
5338 2001-11-14 Fernando Perez <fperez@colorado.edu>
5343 2001-11-14 Fernando Perez <fperez@colorado.edu>
5339
5344
5340 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5345 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5341 example with IPython. Various other minor fixes and cleanups.
5346 example with IPython. Various other minor fixes and cleanups.
5342
5347
5343 * Version 0.1.9 released, 0.1.10 opened for further work.
5348 * Version 0.1.9 released, 0.1.10 opened for further work.
5344
5349
5345 * Added sys.path to the list of directories searched in the
5350 * Added sys.path to the list of directories searched in the
5346 execfile= option. It used to be the current directory and the
5351 execfile= option. It used to be the current directory and the
5347 user's IPYTHONDIR only.
5352 user's IPYTHONDIR only.
5348
5353
5349 2001-11-13 Fernando Perez <fperez@colorado.edu>
5354 2001-11-13 Fernando Perez <fperez@colorado.edu>
5350
5355
5351 * Reinstated the raw_input/prefilter separation that Janko had
5356 * Reinstated the raw_input/prefilter separation that Janko had
5352 initially. This gives a more convenient setup for extending the
5357 initially. This gives a more convenient setup for extending the
5353 pre-processor from the outside: raw_input always gets a string,
5358 pre-processor from the outside: raw_input always gets a string,
5354 and prefilter has to process it. We can then redefine prefilter
5359 and prefilter has to process it. We can then redefine prefilter
5355 from the outside and implement extensions for special
5360 from the outside and implement extensions for special
5356 purposes.
5361 purposes.
5357
5362
5358 Today I got one for inputting PhysicalQuantity objects
5363 Today I got one for inputting PhysicalQuantity objects
5359 (from Scientific) without needing any function calls at
5364 (from Scientific) without needing any function calls at
5360 all. Extremely convenient, and it's all done as a user-level
5365 all. Extremely convenient, and it's all done as a user-level
5361 extension (no IPython code was touched). Now instead of:
5366 extension (no IPython code was touched). Now instead of:
5362 a = PhysicalQuantity(4.2,'m/s**2')
5367 a = PhysicalQuantity(4.2,'m/s**2')
5363 one can simply say
5368 one can simply say
5364 a = 4.2 m/s**2
5369 a = 4.2 m/s**2
5365 or even
5370 or even
5366 a = 4.2 m/s^2
5371 a = 4.2 m/s^2
5367
5372
5368 I use this, but it's also a proof of concept: IPython really is
5373 I use this, but it's also a proof of concept: IPython really is
5369 fully user-extensible, even at the level of the parsing of the
5374 fully user-extensible, even at the level of the parsing of the
5370 command line. It's not trivial, but it's perfectly doable.
5375 command line. It's not trivial, but it's perfectly doable.
5371
5376
5372 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5377 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5373 the problem of modules being loaded in the inverse order in which
5378 the problem of modules being loaded in the inverse order in which
5374 they were defined in
5379 they were defined in
5375
5380
5376 * Version 0.1.8 released, 0.1.9 opened for further work.
5381 * Version 0.1.8 released, 0.1.9 opened for further work.
5377
5382
5378 * Added magics pdef, source and file. They respectively show the
5383 * Added magics pdef, source and file. They respectively show the
5379 definition line ('prototype' in C), source code and full python
5384 definition line ('prototype' in C), source code and full python
5380 file for any callable object. The object inspector oinfo uses
5385 file for any callable object. The object inspector oinfo uses
5381 these to show the same information.
5386 these to show the same information.
5382
5387
5383 * Version 0.1.7 released, 0.1.8 opened for further work.
5388 * Version 0.1.7 released, 0.1.8 opened for further work.
5384
5389
5385 * Separated all the magic functions into a class called Magic. The
5390 * Separated all the magic functions into a class called Magic. The
5386 InteractiveShell class was becoming too big for Xemacs to handle
5391 InteractiveShell class was becoming too big for Xemacs to handle
5387 (de-indenting a line would lock it up for 10 seconds while it
5392 (de-indenting a line would lock it up for 10 seconds while it
5388 backtracked on the whole class!)
5393 backtracked on the whole class!)
5389
5394
5390 FIXME: didn't work. It can be done, but right now namespaces are
5395 FIXME: didn't work. It can be done, but right now namespaces are
5391 all messed up. Do it later (reverted it for now, so at least
5396 all messed up. Do it later (reverted it for now, so at least
5392 everything works as before).
5397 everything works as before).
5393
5398
5394 * Got the object introspection system (magic_oinfo) working! I
5399 * Got the object introspection system (magic_oinfo) working! I
5395 think this is pretty much ready for release to Janko, so he can
5400 think this is pretty much ready for release to Janko, so he can
5396 test it for a while and then announce it. Pretty much 100% of what
5401 test it for a while and then announce it. Pretty much 100% of what
5397 I wanted for the 'phase 1' release is ready. Happy, tired.
5402 I wanted for the 'phase 1' release is ready. Happy, tired.
5398
5403
5399 2001-11-12 Fernando Perez <fperez@colorado.edu>
5404 2001-11-12 Fernando Perez <fperez@colorado.edu>
5400
5405
5401 * Version 0.1.6 released, 0.1.7 opened for further work.
5406 * Version 0.1.6 released, 0.1.7 opened for further work.
5402
5407
5403 * Fixed bug in printing: it used to test for truth before
5408 * Fixed bug in printing: it used to test for truth before
5404 printing, so 0 wouldn't print. Now checks for None.
5409 printing, so 0 wouldn't print. Now checks for None.
5405
5410
5406 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5411 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5407 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5412 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5408 reaches by hand into the outputcache. Think of a better way to do
5413 reaches by hand into the outputcache. Think of a better way to do
5409 this later.
5414 this later.
5410
5415
5411 * Various small fixes thanks to Nathan's comments.
5416 * Various small fixes thanks to Nathan's comments.
5412
5417
5413 * Changed magic_pprint to magic_Pprint. This way it doesn't
5418 * Changed magic_pprint to magic_Pprint. This way it doesn't
5414 collide with pprint() and the name is consistent with the command
5419 collide with pprint() and the name is consistent with the command
5415 line option.
5420 line option.
5416
5421
5417 * Changed prompt counter behavior to be fully like
5422 * Changed prompt counter behavior to be fully like
5418 Mathematica's. That is, even input that doesn't return a result
5423 Mathematica's. That is, even input that doesn't return a result
5419 raises the prompt counter. The old behavior was kind of confusing
5424 raises the prompt counter. The old behavior was kind of confusing
5420 (getting the same prompt number several times if the operation
5425 (getting the same prompt number several times if the operation
5421 didn't return a result).
5426 didn't return a result).
5422
5427
5423 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5428 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5424
5429
5425 * Fixed -Classic mode (wasn't working anymore).
5430 * Fixed -Classic mode (wasn't working anymore).
5426
5431
5427 * Added colored prompts using Nathan's new code. Colors are
5432 * Added colored prompts using Nathan's new code. Colors are
5428 currently hardwired, they can be user-configurable. For
5433 currently hardwired, they can be user-configurable. For
5429 developers, they can be chosen in file ipythonlib.py, at the
5434 developers, they can be chosen in file ipythonlib.py, at the
5430 beginning of the CachedOutput class def.
5435 beginning of the CachedOutput class def.
5431
5436
5432 2001-11-11 Fernando Perez <fperez@colorado.edu>
5437 2001-11-11 Fernando Perez <fperez@colorado.edu>
5433
5438
5434 * Version 0.1.5 released, 0.1.6 opened for further work.
5439 * Version 0.1.5 released, 0.1.6 opened for further work.
5435
5440
5436 * Changed magic_env to *return* the environment as a dict (not to
5441 * Changed magic_env to *return* the environment as a dict (not to
5437 print it). This way it prints, but it can also be processed.
5442 print it). This way it prints, but it can also be processed.
5438
5443
5439 * Added Verbose exception reporting to interactive
5444 * Added Verbose exception reporting to interactive
5440 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5445 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5441 traceback. Had to make some changes to the ultraTB file. This is
5446 traceback. Had to make some changes to the ultraTB file. This is
5442 probably the last 'big' thing in my mental todo list. This ties
5447 probably the last 'big' thing in my mental todo list. This ties
5443 in with the next entry:
5448 in with the next entry:
5444
5449
5445 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5450 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5446 has to specify is Plain, Color or Verbose for all exception
5451 has to specify is Plain, Color or Verbose for all exception
5447 handling.
5452 handling.
5448
5453
5449 * Removed ShellServices option. All this can really be done via
5454 * Removed ShellServices option. All this can really be done via
5450 the magic system. It's easier to extend, cleaner and has automatic
5455 the magic system. It's easier to extend, cleaner and has automatic
5451 namespace protection and documentation.
5456 namespace protection and documentation.
5452
5457
5453 2001-11-09 Fernando Perez <fperez@colorado.edu>
5458 2001-11-09 Fernando Perez <fperez@colorado.edu>
5454
5459
5455 * Fixed bug in output cache flushing (missing parameter to
5460 * Fixed bug in output cache flushing (missing parameter to
5456 __init__). Other small bugs fixed (found using pychecker).
5461 __init__). Other small bugs fixed (found using pychecker).
5457
5462
5458 * Version 0.1.4 opened for bugfixing.
5463 * Version 0.1.4 opened for bugfixing.
5459
5464
5460 2001-11-07 Fernando Perez <fperez@colorado.edu>
5465 2001-11-07 Fernando Perez <fperez@colorado.edu>
5461
5466
5462 * Version 0.1.3 released, mainly because of the raw_input bug.
5467 * Version 0.1.3 released, mainly because of the raw_input bug.
5463
5468
5464 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5469 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5465 and when testing for whether things were callable, a call could
5470 and when testing for whether things were callable, a call could
5466 actually be made to certain functions. They would get called again
5471 actually be made to certain functions. They would get called again
5467 once 'really' executed, with a resulting double call. A disaster
5472 once 'really' executed, with a resulting double call. A disaster
5468 in many cases (list.reverse() would never work!).
5473 in many cases (list.reverse() would never work!).
5469
5474
5470 * Removed prefilter() function, moved its code to raw_input (which
5475 * Removed prefilter() function, moved its code to raw_input (which
5471 after all was just a near-empty caller for prefilter). This saves
5476 after all was just a near-empty caller for prefilter). This saves
5472 a function call on every prompt, and simplifies the class a tiny bit.
5477 a function call on every prompt, and simplifies the class a tiny bit.
5473
5478
5474 * Fix _ip to __ip name in magic example file.
5479 * Fix _ip to __ip name in magic example file.
5475
5480
5476 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5481 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5477 work with non-gnu versions of tar.
5482 work with non-gnu versions of tar.
5478
5483
5479 2001-11-06 Fernando Perez <fperez@colorado.edu>
5484 2001-11-06 Fernando Perez <fperez@colorado.edu>
5480
5485
5481 * Version 0.1.2. Just to keep track of the recent changes.
5486 * Version 0.1.2. Just to keep track of the recent changes.
5482
5487
5483 * Fixed nasty bug in output prompt routine. It used to check 'if
5488 * Fixed nasty bug in output prompt routine. It used to check 'if
5484 arg != None...'. Problem is, this fails if arg implements a
5489 arg != None...'. Problem is, this fails if arg implements a
5485 special comparison (__cmp__) which disallows comparing to
5490 special comparison (__cmp__) which disallows comparing to
5486 None. Found it when trying to use the PhysicalQuantity module from
5491 None. Found it when trying to use the PhysicalQuantity module from
5487 ScientificPython.
5492 ScientificPython.
5488
5493
5489 2001-11-05 Fernando Perez <fperez@colorado.edu>
5494 2001-11-05 Fernando Perez <fperez@colorado.edu>
5490
5495
5491 * Also added dirs. Now the pushd/popd/dirs family functions
5496 * Also added dirs. Now the pushd/popd/dirs family functions
5492 basically like the shell, with the added convenience of going home
5497 basically like the shell, with the added convenience of going home
5493 when called with no args.
5498 when called with no args.
5494
5499
5495 * pushd/popd slightly modified to mimic shell behavior more
5500 * pushd/popd slightly modified to mimic shell behavior more
5496 closely.
5501 closely.
5497
5502
5498 * Added env,pushd,popd from ShellServices as magic functions. I
5503 * Added env,pushd,popd from ShellServices as magic functions. I
5499 think the cleanest will be to port all desired functions from
5504 think the cleanest will be to port all desired functions from
5500 ShellServices as magics and remove ShellServices altogether. This
5505 ShellServices as magics and remove ShellServices altogether. This
5501 will provide a single, clean way of adding functionality
5506 will provide a single, clean way of adding functionality
5502 (shell-type or otherwise) to IP.
5507 (shell-type or otherwise) to IP.
5503
5508
5504 2001-11-04 Fernando Perez <fperez@colorado.edu>
5509 2001-11-04 Fernando Perez <fperez@colorado.edu>
5505
5510
5506 * Added .ipython/ directory to sys.path. This way users can keep
5511 * Added .ipython/ directory to sys.path. This way users can keep
5507 customizations there and access them via import.
5512 customizations there and access them via import.
5508
5513
5509 2001-11-03 Fernando Perez <fperez@colorado.edu>
5514 2001-11-03 Fernando Perez <fperez@colorado.edu>
5510
5515
5511 * Opened version 0.1.1 for new changes.
5516 * Opened version 0.1.1 for new changes.
5512
5517
5513 * Changed version number to 0.1.0: first 'public' release, sent to
5518 * Changed version number to 0.1.0: first 'public' release, sent to
5514 Nathan and Janko.
5519 Nathan and Janko.
5515
5520
5516 * Lots of small fixes and tweaks.
5521 * Lots of small fixes and tweaks.
5517
5522
5518 * Minor changes to whos format. Now strings are shown, snipped if
5523 * Minor changes to whos format. Now strings are shown, snipped if
5519 too long.
5524 too long.
5520
5525
5521 * Changed ShellServices to work on __main__ so they show up in @who
5526 * Changed ShellServices to work on __main__ so they show up in @who
5522
5527
5523 * Help also works with ? at the end of a line:
5528 * Help also works with ? at the end of a line:
5524 ?sin and sin?
5529 ?sin and sin?
5525 both produce the same effect. This is nice, as often I use the
5530 both produce the same effect. This is nice, as often I use the
5526 tab-complete to find the name of a method, but I used to then have
5531 tab-complete to find the name of a method, but I used to then have
5527 to go to the beginning of the line to put a ? if I wanted more
5532 to go to the beginning of the line to put a ? if I wanted more
5528 info. Now I can just add the ? and hit return. Convenient.
5533 info. Now I can just add the ? and hit return. Convenient.
5529
5534
5530 2001-11-02 Fernando Perez <fperez@colorado.edu>
5535 2001-11-02 Fernando Perez <fperez@colorado.edu>
5531
5536
5532 * Python version check (>=2.1) added.
5537 * Python version check (>=2.1) added.
5533
5538
5534 * Added LazyPython documentation. At this point the docs are quite
5539 * Added LazyPython documentation. At this point the docs are quite
5535 a mess. A cleanup is in order.
5540 a mess. A cleanup is in order.
5536
5541
5537 * Auto-installer created. For some bizarre reason, the zipfiles
5542 * Auto-installer created. For some bizarre reason, the zipfiles
5538 module isn't working on my system. So I made a tar version
5543 module isn't working on my system. So I made a tar version
5539 (hopefully the command line options in various systems won't kill
5544 (hopefully the command line options in various systems won't kill
5540 me).
5545 me).
5541
5546
5542 * Fixes to Struct in genutils. Now all dictionary-like methods are
5547 * Fixes to Struct in genutils. Now all dictionary-like methods are
5543 protected (reasonably).
5548 protected (reasonably).
5544
5549
5545 * Added pager function to genutils and changed ? to print usage
5550 * Added pager function to genutils and changed ? to print usage
5546 note through it (it was too long).
5551 note through it (it was too long).
5547
5552
5548 * Added the LazyPython functionality. Works great! I changed the
5553 * Added the LazyPython functionality. Works great! I changed the
5549 auto-quote escape to ';', it's on home row and next to '. But
5554 auto-quote escape to ';', it's on home row and next to '. But
5550 both auto-quote and auto-paren (still /) escapes are command-line
5555 both auto-quote and auto-paren (still /) escapes are command-line
5551 parameters.
5556 parameters.
5552
5557
5553
5558
5554 2001-11-01 Fernando Perez <fperez@colorado.edu>
5559 2001-11-01 Fernando Perez <fperez@colorado.edu>
5555
5560
5556 * Version changed to 0.0.7. Fairly large change: configuration now
5561 * Version changed to 0.0.7. Fairly large change: configuration now
5557 is all stored in a directory, by default .ipython. There, all
5562 is all stored in a directory, by default .ipython. There, all
5558 config files have normal looking names (not .names)
5563 config files have normal looking names (not .names)
5559
5564
5560 * Version 0.0.6 Released first to Lucas and Archie as a test
5565 * Version 0.0.6 Released first to Lucas and Archie as a test
5561 run. Since it's the first 'semi-public' release, change version to
5566 run. Since it's the first 'semi-public' release, change version to
5562 > 0.0.6 for any changes now.
5567 > 0.0.6 for any changes now.
5563
5568
5564 * Stuff I had put in the ipplib.py changelog:
5569 * Stuff I had put in the ipplib.py changelog:
5565
5570
5566 Changes to InteractiveShell:
5571 Changes to InteractiveShell:
5567
5572
5568 - Made the usage message a parameter.
5573 - Made the usage message a parameter.
5569
5574
5570 - Require the name of the shell variable to be given. It's a bit
5575 - Require the name of the shell variable to be given. It's a bit
5571 of a hack, but allows the name 'shell' not to be hardwired in the
5576 of a hack, but allows the name 'shell' not to be hardwired in the
5572 magic (@) handler, which is problematic b/c it requires
5577 magic (@) handler, which is problematic b/c it requires
5573 polluting the global namespace with 'shell'. This in turn is
5578 polluting the global namespace with 'shell'. This in turn is
5574 fragile: if a user redefines a variable called shell, things
5579 fragile: if a user redefines a variable called shell, things
5575 break.
5580 break.
5576
5581
5577 - magic @: all functions available through @ need to be defined
5582 - magic @: all functions available through @ need to be defined
5578 as magic_<name>, even though they can be called simply as
5583 as magic_<name>, even though they can be called simply as
5579 @<name>. This allows the special command @magic to gather
5584 @<name>. This allows the special command @magic to gather
5580 information automatically about all existing magic functions,
5585 information automatically about all existing magic functions,
5581 even if they are run-time user extensions, by parsing the shell
5586 even if they are run-time user extensions, by parsing the shell
5582 instance __dict__ looking for special magic_ names.
5587 instance __dict__ looking for special magic_ names.
5583
5588
5584 - mainloop: added *two* local namespace parameters. This allows
5589 - mainloop: added *two* local namespace parameters. This allows
5585 the class to differentiate between parameters which were there
5590 the class to differentiate between parameters which were there
5586 before and after command line initialization was processed. This
5591 before and after command line initialization was processed. This
5587 way, later @who can show things loaded at startup by the
5592 way, later @who can show things loaded at startup by the
5588 user. This trick was necessary to make session saving/reloading
5593 user. This trick was necessary to make session saving/reloading
5589 really work: ideally after saving/exiting/reloading a session,
5594 really work: ideally after saving/exiting/reloading a session,
5590 *everything* should look the same, including the output of @who. I
5595 *everything* should look the same, including the output of @who. I
5591 was only able to make this work with this double namespace
5596 was only able to make this work with this double namespace
5592 trick.
5597 trick.
5593
5598
5594 - added a header to the logfile which allows (almost) full
5599 - added a header to the logfile which allows (almost) full
5595 session restoring.
5600 session restoring.
5596
5601
5597 - prepend lines beginning with @ or !, with a and log
5602 - prepend lines beginning with @ or !, with a and log
5598 them. Why? !lines: may be useful to know what you did @lines:
5603 them. Why? !lines: may be useful to know what you did @lines:
5599 they may affect session state. So when restoring a session, at
5604 they may affect session state. So when restoring a session, at
5600 least inform the user of their presence. I couldn't quite get
5605 least inform the user of their presence. I couldn't quite get
5601 them to properly re-execute, but at least the user is warned.
5606 them to properly re-execute, but at least the user is warned.
5602
5607
5603 * Started ChangeLog.
5608 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now