##// END OF EJS Templates
Put the documentation of the keyboard commands into the...
walter.doerwald -
Show More
@@ -1,1646 +1,1660 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, inspect
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 = """
17 down
18 Move the cursor to the next line.
19
20 up
21 Move the cursor to the previous line.
22
23 pagedown
24 Move the cursor down one page (minus overlap).
25
26 pageup
27 Move the cursor up one page (minus overlap).
28
29 left
30 Move the cursor left.
31
32 right
33 Move the cursor right.
34
35 home
36 Move the cursor to the first column.
37
38 end
39 Move the cursor to the last column.
40
41 prevattr
42 Move the cursor one attribute column to the left.
43
44 nextattr
45 Move the cursor one attribute column to the right.
46
47 pick
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
50 this object will be available as the '_' variable.)
51
52 pickattr
53 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on).
54
55 pickallattrs
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
58 as a list.
59
60 tooglemark
61 Mark/unmark the object under the cursor. Marked objects have a '!' after the
62 row number).
63
64 pickmarked
65 'Pick' marked objects. Marked objects will be returned as a list.
66
67 pickmarkedattr
68 'Pick' the attribute under the cursor from all marked objects (This returns a
69 list).
70
71 enterdefault
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
74 browser 'level'.
75
76 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
79 'enter' or 'enterdefault' command).
80
81 enterattr
82 Enter the attribute under the cursor.
83
84 leave
85 Leave the current browser level and go back to the previous one.
86
87 detail
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
90 attributes than in the list view, depending on the object).
91
92 detailattr
93 Show a detail view of the attribute under the cursor.
94
95 markrange
96 Mark all objects from the last marked object before the current cursor
97 position to the cursor position.
98
99 sortattrasc
100 Sort the objects (in ascending order) using the attribute under the cursor as
101 the sort key.
102
103 sortattrdesc
104 Sort the objects (in descending order) using the attribute under the cursor as
105 the sort key.
106
107 hideattr
108 Hide the attribute under the cursor.
109
110 unhideattrs
111 Make all attributes visible again.
112
113 goto
114 Jump to a row. The row number can be entered at the bottom of the screen.
115
116 find
117 Search forward for a row. At the bottom of the screen the condition can be
118 entered.
119
120 findbackwards
121 Search backward for a row. At the bottom of the screen the condition can be
122 entered.
123
124 help
125 This screen.
126 """
127
128
129 class UnassignedKeyError(Exception):
16 class UnassignedKeyError(Exception):
130 """
17 """
131 Exception that is used for reporting unassigned keys.
18 Exception that is used for reporting unassigned keys.
132 """
19 """
133
20
134
21
135 class UnknownCommandError(Exception):
22 class UnknownCommandError(Exception):
136 """
23 """
137 Exception that is used for reporting unknown command (this should never
24 Exception that is used for reporting unknown command (this should never
138 happen).
25 happen).
139 """
26 """
140
27
141
28
142 class CommandError(Exception):
29 class CommandError(Exception):
143 """
30 """
144 Exception that is used for reporting that a command can't be executed.
31 Exception that is used for reporting that a command can't be executed.
145 """
32 """
146
33
147
34
148 class Keymap(dict):
35 class Keymap(dict):
149 """
36 """
150 Stores mapping of keys to commands.
37 Stores mapping of keys to commands.
151 """
38 """
152 def __init__(self):
39 def __init__(self):
153 self._keymap = {}
40 self._keymap = {}
154
41
155 def __setitem__(self, key, command):
42 def __setitem__(self, key, command):
156 if isinstance(key, str):
43 if isinstance(key, str):
157 for c in key:
44 for c in key:
158 dict.__setitem__(self, ord(c), command)
45 dict.__setitem__(self, ord(c), command)
159 else:
46 else:
160 dict.__setitem__(self, key, command)
47 dict.__setitem__(self, key, command)
161
48
162 def register(self, command, *keys):
49 def register(self, command, *keys):
163 for key in keys:
50 for key in keys:
164 self[key] = command
51 self[key] = command
165
52
166 def __getitem__(self, key):
53 def __getitem__(self, key):
167 if isinstance(key, str):
54 if isinstance(key, str):
168 key = ord(key)
55 key = ord(key)
169 return dict.__getitem__(self, key)
56 return dict.__getitem__(self, key)
170
57
171 def get(self, key, default=None):
58 def get(self, key, default=None):
172 if isinstance(key, str):
59 if isinstance(key, str):
173 key = ord(key)
60 key = ord(key)
174 return dict.get(self, key, default)
61 return dict.get(self, key, default)
175
62
176 def findkey(self, command, default=ipipe.noitem):
63 def findkey(self, command, default=ipipe.noitem):
177 for (key, commandcandidate) in self.iteritems():
64 for (key, commandcandidate) in self.iteritems():
178 if commandcandidate == command:
65 if commandcandidate == command:
179 return key
66 return key
180 if default is ipipe.noitem:
67 if default is ipipe.noitem:
181 raise KeyError(command)
68 raise KeyError(command)
182 return default
69 return default
183
70
184
71
185 class _BrowserCachedItem(object):
72 class _BrowserCachedItem(object):
186 # This is used internally by ``ibrowse`` to store a item together with its
73 # This is used internally by ``ibrowse`` to store a item together with its
187 # marked status.
74 # marked status.
188 __slots__ = ("item", "marked")
75 __slots__ = ("item", "marked")
189
76
190 def __init__(self, item):
77 def __init__(self, item):
191 self.item = item
78 self.item = item
192 self.marked = False
79 self.marked = False
193
80
194
81
195 class _BrowserHelp(object):
82 class _BrowserHelp(object):
196 style_header = astyle.Style.fromstr("red:blacK")
83 style_header = astyle.Style.fromstr("red:blacK")
197 # This is used internally by ``ibrowse`` for displaying the help screen.
84 # This is used internally by ``ibrowse`` for displaying the help screen.
198 def __init__(self, browser):
85 def __init__(self, browser):
199 self.browser = browser
86 self.browser = browser
200
87
201 def __xrepr__(self, mode):
88 def __xrepr__(self, mode):
202 yield (-1, True)
89 yield (-1, True)
203 if mode == "header" or mode == "footer":
90 if mode == "header" or mode == "footer":
204 yield (astyle.style_default, "ibrowse help screen")
91 yield (astyle.style_default, "ibrowse help screen")
205 else:
92 else:
206 yield (astyle.style_default, repr(self))
93 yield (astyle.style_default, repr(self))
207
94
208 def __xiter__(self, mode):
95 def __xiter__(self, mode):
209 # Get reverse key mapping
96 # Get reverse key mapping
210 allkeys = {}
97 allkeys = {}
211 for (key, cmd) in self.browser.keymap.iteritems():
98 for (key, cmd) in self.browser.keymap.iteritems():
212 allkeys.setdefault(cmd, []).append(key)
99 allkeys.setdefault(cmd, []).append(key)
213
100
214 fields = ("key", "description")
101 fields = ("key", "description")
215
102
216 for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")):
103 commands = []
104 for name in dir(self.browser):
105 if name.startswith("cmd_"):
106 command = getattr(self.browser, name)
107 commands.append((inspect.getsourcelines(command)[-1], name[4:], command))
108 commands.sort()
109 commands = [(c[1], c[2]) for c in commands]
110 for (i, (name, command)) in enumerate(commands):
217 if i:
111 if i:
218 yield ipipe.Fields(fields, key="", description="")
112 yield ipipe.Fields(fields, key="", description="")
219
113
220 (name, description) = command.split("\n", 1)
114 description = command.__doc__
115 if description is None:
116 lines = []
117 else:
118 lines = [l.strip() for l in description.splitlines() if l.strip()]
119 description = "\n".join(lines)
120 lines = textwrap.wrap(description, 60)
221 keys = allkeys.get(name, [])
121 keys = allkeys.get(name, [])
222 lines = textwrap.wrap(description, 60)
223
122
224 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
123 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
225 for i in xrange(max(len(keys), len(lines))):
124 for i in xrange(max(len(keys), len(lines))):
226 try:
125 try:
227 key = self.browser.keylabel(keys[i])
126 key = self.browser.keylabel(keys[i])
228 except IndexError:
127 except IndexError:
229 key = ""
128 key = ""
230 try:
129 try:
231 line = lines[i]
130 line = lines[i]
232 except IndexError:
131 except IndexError:
233 line = ""
132 line = ""
234 yield ipipe.Fields(fields, key=key, description=line)
133 yield ipipe.Fields(fields, key=key, description=line)
235
134
236
135
237 class _BrowserLevel(object):
136 class _BrowserLevel(object):
238 # This is used internally to store the state (iterator, fetch items,
137 # This is used internally to store the state (iterator, fetch items,
239 # position of cursor and screen, etc.) of one browser level
138 # position of cursor and screen, etc.) of one browser level
240 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
139 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
241 # a stack.
140 # a stack.
242 def __init__(self, browser, input, iterator, mainsizey, *attrs):
141 def __init__(self, browser, input, iterator, mainsizey, *attrs):
243 self.browser = browser
142 self.browser = browser
244 self.input = input
143 self.input = input
245 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
144 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
246 # iterator for the input
145 # iterator for the input
247 self.iterator = iterator
146 self.iterator = iterator
248
147
249 # is the iterator exhausted?
148 # is the iterator exhausted?
250 self.exhausted = False
149 self.exhausted = False
251
150
252 # attributes to be display (autodetected if empty)
151 # attributes to be display (autodetected if empty)
253 self.attrs = attrs
152 self.attrs = attrs
254
153
255 # fetched items (+ marked flag)
154 # fetched items (+ marked flag)
256 self.items = ipipe.deque()
155 self.items = ipipe.deque()
257
156
258 # Number of marked objects
157 # Number of marked objects
259 self.marked = 0
158 self.marked = 0
260
159
261 # Vertical cursor position
160 # Vertical cursor position
262 self.cury = 0
161 self.cury = 0
263
162
264 # Horizontal cursor position
163 # Horizontal cursor position
265 self.curx = 0
164 self.curx = 0
266
165
267 # Index of first data column
166 # Index of first data column
268 self.datastartx = 0
167 self.datastartx = 0
269
168
270 # Index of first data line
169 # Index of first data line
271 self.datastarty = 0
170 self.datastarty = 0
272
171
273 # height of the data display area
172 # height of the data display area
274 self.mainsizey = mainsizey
173 self.mainsizey = mainsizey
275
174
276 # width of the data display area (changes when scrolling)
175 # width of the data display area (changes when scrolling)
277 self.mainsizex = 0
176 self.mainsizex = 0
278
177
279 # Size of row number (changes when scrolling)
178 # Size of row number (changes when scrolling)
280 self.numbersizex = 0
179 self.numbersizex = 0
281
180
282 # Attribute names to display (in this order)
181 # Attribute names to display (in this order)
283 self.displayattrs = []
182 self.displayattrs = []
284
183
285 # index and name of attribute under the cursor
184 # index and name of attribute under the cursor
286 self.displayattr = (None, ipipe.noitem)
185 self.displayattr = (None, ipipe.noitem)
287
186
288 # Maps attribute names to column widths
187 # Maps attribute names to column widths
289 self.colwidths = {}
188 self.colwidths = {}
290
189
291 # Set of hidden attributes
190 # Set of hidden attributes
292 self.hiddenattrs = set()
191 self.hiddenattrs = set()
293
192
294 # This takes care of all the caches etc.
193 # This takes care of all the caches etc.
295 self.moveto(0, 0, refresh=True)
194 self.moveto(0, 0, refresh=True)
296
195
297 def fetch(self, count):
196 def fetch(self, count):
298 # Try to fill ``self.items`` with at least ``count`` objects.
197 # Try to fill ``self.items`` with at least ``count`` objects.
299 have = len(self.items)
198 have = len(self.items)
300 while not self.exhausted and have < count:
199 while not self.exhausted and have < count:
301 try:
200 try:
302 item = self.iterator.next()
201 item = self.iterator.next()
303 except StopIteration:
202 except StopIteration:
304 self.exhausted = True
203 self.exhausted = True
305 break
204 break
306 else:
205 else:
307 have += 1
206 have += 1
308 self.items.append(_BrowserCachedItem(item))
207 self.items.append(_BrowserCachedItem(item))
309
208
310 def calcdisplayattrs(self):
209 def calcdisplayattrs(self):
311 # Calculate which attributes are available from the objects that are
210 # Calculate which attributes are available from the objects that are
312 # currently visible on screen (and store it in ``self.displayattrs``)
211 # currently visible on screen (and store it in ``self.displayattrs``)
313
212
314 attrnames = set()
213 attrnames = set()
315 self.displayattrs = []
214 self.displayattrs = []
316 if self.attrs:
215 if self.attrs:
317 # If the browser object specifies a fixed list of attributes,
216 # If the browser object specifies a fixed list of attributes,
318 # simply use it (removing hidden attributes).
217 # simply use it (removing hidden attributes).
319 for attrname in self.attrs:
218 for attrname in self.attrs:
320 if attrname not in attrnames and attrname not in self.hiddenattrs:
219 if attrname not in attrnames and attrname not in self.hiddenattrs:
321 self.displayattrs.append(attrname)
220 self.displayattrs.append(attrname)
322 attrnames.add(attrname)
221 attrnames.add(attrname)
323 else:
222 else:
324 endy = min(self.datastarty+self.mainsizey, len(self.items))
223 endy = min(self.datastarty+self.mainsizey, len(self.items))
325 for i in xrange(self.datastarty, endy):
224 for i in xrange(self.datastarty, endy):
326 for attrname in ipipe.xattrs(self.items[i].item, "default"):
225 for attrname in ipipe.xattrs(self.items[i].item, "default"):
327 if attrname not in attrnames and attrname not in self.hiddenattrs:
226 if attrname not in attrnames and attrname not in self.hiddenattrs:
328 self.displayattrs.append(attrname)
227 self.displayattrs.append(attrname)
329 attrnames.add(attrname)
228 attrnames.add(attrname)
330
229
331 def getrow(self, i):
230 def getrow(self, i):
332 # Return a dictinary with the attributes for the object
231 # Return a dictinary with the attributes for the object
333 # ``self.items[i]``. Attribute names are taken from
232 # ``self.items[i]``. Attribute names are taken from
334 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
233 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
335 # called before.
234 # called before.
336 row = {}
235 row = {}
337 item = self.items[i].item
236 item = self.items[i].item
338 for attrname in self.displayattrs:
237 for attrname in self.displayattrs:
339 try:
238 try:
340 value = ipipe._getattr(item, attrname, ipipe.noitem)
239 value = ipipe._getattr(item, attrname, ipipe.noitem)
341 except (KeyboardInterrupt, SystemExit):
240 except (KeyboardInterrupt, SystemExit):
342 raise
241 raise
343 except Exception, exc:
242 except Exception, exc:
344 value = exc
243 value = exc
345 # only store attribute if it exists (or we got an exception)
244 # only store attribute if it exists (or we got an exception)
346 if value is not ipipe.noitem:
245 if value is not ipipe.noitem:
347 # remember alignment, length and colored text
246 # remember alignment, length and colored text
348 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
247 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
349 return row
248 return row
350
249
351 def calcwidths(self):
250 def calcwidths(self):
352 # Recalculate the displayed fields and their widths.
251 # Recalculate the displayed fields and their widths.
353 # ``calcdisplayattrs()'' must have been called and the cache
252 # ``calcdisplayattrs()'' must have been called and the cache
354 # for attributes of the objects on screen (``self.displayrows``)
253 # for attributes of the objects on screen (``self.displayrows``)
355 # must have been filled. This returns a dictionary mapping
254 # must have been filled. This returns a dictionary mapping
356 # column names to widths.
255 # column names to widths.
357 self.colwidths = {}
256 self.colwidths = {}
358 for row in self.displayrows:
257 for row in self.displayrows:
359 for attrname in self.displayattrs:
258 for attrname in self.displayattrs:
360 try:
259 try:
361 length = row[attrname][1]
260 length = row[attrname][1]
362 except KeyError:
261 except KeyError:
363 length = 0
262 length = 0
364 # always add attribute to colwidths, even if it doesn't exist
263 # always add attribute to colwidths, even if it doesn't exist
365 if attrname not in self.colwidths:
264 if attrname not in self.colwidths:
366 self.colwidths[attrname] = len(ipipe._attrname(attrname))
265 self.colwidths[attrname] = len(ipipe._attrname(attrname))
367 newwidth = max(self.colwidths[attrname], length)
266 newwidth = max(self.colwidths[attrname], length)
368 self.colwidths[attrname] = newwidth
267 self.colwidths[attrname] = newwidth
369
268
370 # How many characters do we need to paint the largest item number?
269 # How many characters do we need to paint the largest item number?
371 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
270 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
372 # How must space have we got to display data?
271 # How must space have we got to display data?
373 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
272 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
374 # width of all columns
273 # width of all columns
375 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
274 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
376
275
377 def calcdisplayattr(self):
276 def calcdisplayattr(self):
378 # Find out which attribute the cursor is on and store this
277 # Find out which attribute the cursor is on and store this
379 # information in ``self.displayattr``.
278 # information in ``self.displayattr``.
380 pos = 0
279 pos = 0
381 for (i, attrname) in enumerate(self.displayattrs):
280 for (i, attrname) in enumerate(self.displayattrs):
382 if pos+self.colwidths[attrname] >= self.curx:
281 if pos+self.colwidths[attrname] >= self.curx:
383 self.displayattr = (i, attrname)
282 self.displayattr = (i, attrname)
384 break
283 break
385 pos += self.colwidths[attrname]+1
284 pos += self.colwidths[attrname]+1
386 else:
285 else:
387 self.displayattr = (None, ipipe.noitem)
286 self.displayattr = (None, ipipe.noitem)
388
287
389 def moveto(self, x, y, refresh=False):
288 def moveto(self, x, y, refresh=False):
390 # Move the cursor to the position ``(x,y)`` (in data coordinates,
289 # Move the cursor to the position ``(x,y)`` (in data coordinates,
391 # not in screen coordinates). If ``refresh`` is true, all cached
290 # not in screen coordinates). If ``refresh`` is true, all cached
392 # values will be recalculated (e.g. because the list has been
291 # values will be recalculated (e.g. because the list has been
393 # resorted, so screen positions etc. are no longer valid).
292 # resorted, so screen positions etc. are no longer valid).
394 olddatastarty = self.datastarty
293 olddatastarty = self.datastarty
395 oldx = self.curx
294 oldx = self.curx
396 oldy = self.cury
295 oldy = self.cury
397 x = int(x+0.5)
296 x = int(x+0.5)
398 y = int(y+0.5)
297 y = int(y+0.5)
399 newx = x # remember where we wanted to move
298 newx = x # remember where we wanted to move
400 newy = y # remember where we wanted to move
299 newy = y # remember where we wanted to move
401
300
402 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
301 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
403 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
302 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
404
303
405 # Make sure that the cursor didn't leave the main area vertically
304 # Make sure that the cursor didn't leave the main area vertically
406 if y < 0:
305 if y < 0:
407 y = 0
306 y = 0
408 # try to get enough items to fill the screen
307 # try to get enough items to fill the screen
409 self.fetch(max(y+scrollbordery+1, self.mainsizey))
308 self.fetch(max(y+scrollbordery+1, self.mainsizey))
410 if y >= len(self.items):
309 if y >= len(self.items):
411 y = max(0, len(self.items)-1)
310 y = max(0, len(self.items)-1)
412
311
413 # Make sure that the cursor stays on screen vertically
312 # Make sure that the cursor stays on screen vertically
414 if y < self.datastarty+scrollbordery:
313 if y < self.datastarty+scrollbordery:
415 self.datastarty = max(0, y-scrollbordery)
314 self.datastarty = max(0, y-scrollbordery)
416 elif y >= self.datastarty+self.mainsizey-scrollbordery:
315 elif y >= self.datastarty+self.mainsizey-scrollbordery:
417 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
316 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
418 len(self.items)-self.mainsizey))
317 len(self.items)-self.mainsizey))
419
318
420 if refresh: # Do we need to refresh the complete display?
319 if refresh: # Do we need to refresh the complete display?
421 self.calcdisplayattrs()
320 self.calcdisplayattrs()
422 endy = min(self.datastarty+self.mainsizey, len(self.items))
321 endy = min(self.datastarty+self.mainsizey, len(self.items))
423 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
322 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
424 self.calcwidths()
323 self.calcwidths()
425 # Did we scroll vertically => update displayrows
324 # Did we scroll vertically => update displayrows
426 # and various other attributes
325 # and various other attributes
427 elif self.datastarty != olddatastarty:
326 elif self.datastarty != olddatastarty:
428 # Recalculate which attributes we have to display
327 # Recalculate which attributes we have to display
429 olddisplayattrs = self.displayattrs
328 olddisplayattrs = self.displayattrs
430 self.calcdisplayattrs()
329 self.calcdisplayattrs()
431 # If there are new attributes, recreate the cache
330 # If there are new attributes, recreate the cache
432 if self.displayattrs != olddisplayattrs:
331 if self.displayattrs != olddisplayattrs:
433 endy = min(self.datastarty+self.mainsizey, len(self.items))
332 endy = min(self.datastarty+self.mainsizey, len(self.items))
434 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
333 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
435 elif self.datastarty<olddatastarty: # we did scroll up
334 elif self.datastarty<olddatastarty: # we did scroll up
436 # drop rows from the end
335 # drop rows from the end
437 del self.displayrows[self.datastarty-olddatastarty:]
336 del self.displayrows[self.datastarty-olddatastarty:]
438 # fetch new items
337 # fetch new items
439 for i in xrange(olddatastarty-1,
338 for i in xrange(olddatastarty-1,
440 self.datastarty-1, -1):
339 self.datastarty-1, -1):
441 try:
340 try:
442 row = self.getrow(i)
341 row = self.getrow(i)
443 except IndexError:
342 except IndexError:
444 # we didn't have enough objects to fill the screen
343 # we didn't have enough objects to fill the screen
445 break
344 break
446 self.displayrows.insert(0, row)
345 self.displayrows.insert(0, row)
447 else: # we did scroll down
346 else: # we did scroll down
448 # drop rows from the start
347 # drop rows from the start
449 del self.displayrows[:self.datastarty-olddatastarty]
348 del self.displayrows[:self.datastarty-olddatastarty]
450 # fetch new items
349 # fetch new items
451 for i in xrange(olddatastarty+self.mainsizey,
350 for i in xrange(olddatastarty+self.mainsizey,
452 self.datastarty+self.mainsizey):
351 self.datastarty+self.mainsizey):
453 try:
352 try:
454 row = self.getrow(i)
353 row = self.getrow(i)
455 except IndexError:
354 except IndexError:
456 # we didn't have enough objects to fill the screen
355 # we didn't have enough objects to fill the screen
457 break
356 break
458 self.displayrows.append(row)
357 self.displayrows.append(row)
459 self.calcwidths()
358 self.calcwidths()
460
359
461 # Make sure that the cursor didn't leave the data area horizontally
360 # Make sure that the cursor didn't leave the data area horizontally
462 if x < 0:
361 if x < 0:
463 x = 0
362 x = 0
464 elif x >= self.datasizex:
363 elif x >= self.datasizex:
465 x = max(0, self.datasizex-1)
364 x = max(0, self.datasizex-1)
466
365
467 # Make sure that the cursor stays on screen horizontally
366 # Make sure that the cursor stays on screen horizontally
468 if x < self.datastartx+scrollborderx:
367 if x < self.datastartx+scrollborderx:
469 self.datastartx = max(0, x-scrollborderx)
368 self.datastartx = max(0, x-scrollborderx)
470 elif x >= self.datastartx+self.mainsizex-scrollborderx:
369 elif x >= self.datastartx+self.mainsizex-scrollborderx:
471 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
370 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
472 self.datasizex-self.mainsizex))
371 self.datasizex-self.mainsizex))
473
372
474 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
373 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
475 self.browser.beep()
374 self.browser.beep()
476 else:
375 else:
477 self.curx = x
376 self.curx = x
478 self.cury = y
377 self.cury = y
479 self.calcdisplayattr()
378 self.calcdisplayattr()
480
379
481 def sort(self, key, reverse=False):
380 def sort(self, key, reverse=False):
482 """
381 """
483 Sort the currently list of items using the key function ``key``. If
382 Sort the currently list of items using the key function ``key``. If
484 ``reverse`` is true the sort order is reversed.
383 ``reverse`` is true the sort order is reversed.
485 """
384 """
486 curitem = self.items[self.cury] # Remember where the cursor is now
385 curitem = self.items[self.cury] # Remember where the cursor is now
487
386
488 # Sort items
387 # Sort items
489 def realkey(item):
388 def realkey(item):
490 return key(item.item)
389 return key(item.item)
491 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
390 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
492
391
493 # Find out where the object under the cursor went
392 # Find out where the object under the cursor went
494 cury = self.cury
393 cury = self.cury
495 for (i, item) in enumerate(self.items):
394 for (i, item) in enumerate(self.items):
496 if item is curitem:
395 if item is curitem:
497 cury = i
396 cury = i
498 break
397 break
499
398
500 self.moveto(self.curx, cury, refresh=True)
399 self.moveto(self.curx, cury, refresh=True)
501
400
502
401
503 class _CommandInput(object):
402 class _CommandInput(object):
504 keymap = Keymap()
403 keymap = Keymap()
505 keymap.register("left", curses.KEY_LEFT)
404 keymap.register("left", curses.KEY_LEFT)
506 keymap.register("right", curses.KEY_RIGHT)
405 keymap.register("right", curses.KEY_RIGHT)
507 keymap.register("home", curses.KEY_HOME, "\x01") # Ctrl-A
406 keymap.register("home", curses.KEY_HOME, "\x01") # Ctrl-A
508 keymap.register("end", curses.KEY_END, "\x05") # Ctrl-E
407 keymap.register("end", curses.KEY_END, "\x05") # Ctrl-E
509 # FIXME: What's happening here?
408 # FIXME: What's happening here?
510 keymap.register("backspace", curses.KEY_BACKSPACE, "x\x08\x7f")
409 keymap.register("backspace", curses.KEY_BACKSPACE, "x\x08\x7f")
511 keymap.register("delete", curses.KEY_DC)
410 keymap.register("delete", curses.KEY_DC)
512 keymap.register("delend", 0x0b) # Ctrl-K
411 keymap.register("delend", 0x0b) # Ctrl-K
513 keymap.register("execute", "\r\n")
412 keymap.register("execute", "\r\n")
514 keymap.register("up", curses.KEY_UP)
413 keymap.register("up", curses.KEY_UP)
515 keymap.register("down", curses.KEY_DOWN)
414 keymap.register("down", curses.KEY_DOWN)
516 keymap.register("incsearchup", curses.KEY_PPAGE)
415 keymap.register("incsearchup", curses.KEY_PPAGE)
517 keymap.register("incsearchdown", curses.KEY_NPAGE)
416 keymap.register("incsearchdown", curses.KEY_NPAGE)
518 keymap.register("exit", "\x18"), # Ctrl-X
417 keymap.register("exit", "\x18"), # Ctrl-X
519
418
520 def __init__(self, prompt):
419 def __init__(self, prompt):
521 self.prompt = prompt
420 self.prompt = prompt
522 self.history = []
421 self.history = []
523 self.maxhistory = 100
422 self.maxhistory = 100
524 self.input = ""
423 self.input = ""
525 self.curx = 0
424 self.curx = 0
526 self.cury = -1 # blank line
425 self.cury = -1 # blank line
527
426
528 def start(self):
427 def start(self):
529 self.input = ""
428 self.input = ""
530 self.curx = 0
429 self.curx = 0
531 self.cury = -1 # blank line
430 self.cury = -1 # blank line
532
431
533 def handlekey(self, browser, key):
432 def handlekey(self, browser, key):
534 cmdname = self.keymap.get(key, None)
433 cmdname = self.keymap.get(key, None)
535 if cmdname is not None:
434 if cmdname is not None:
536 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
435 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
537 if cmdfunc is not None:
436 if cmdfunc is not None:
538 return cmdfunc(browser)
437 return cmdfunc(browser)
539 curses.beep()
438 curses.beep()
540 elif key != -1:
439 elif key != -1:
541 try:
440 try:
542 char = chr(key)
441 char = chr(key)
543 except ValueError:
442 except ValueError:
544 curses.beep()
443 curses.beep()
545 else:
444 else:
546 return self.handlechar(browser, char)
445 return self.handlechar(browser, char)
547
446
548 def handlechar(self, browser, char):
447 def handlechar(self, browser, char):
549 self.input = self.input[:self.curx] + char + self.input[self.curx:]
448 self.input = self.input[:self.curx] + char + self.input[self.curx:]
550 self.curx += 1
449 self.curx += 1
551 return True
450 return True
552
451
553 def dohistory(self):
452 def dohistory(self):
554 self.history.insert(0, self.input)
453 self.history.insert(0, self.input)
555 del self.history[:-self.maxhistory]
454 del self.history[:-self.maxhistory]
556
455
557 def cmd_backspace(self, browser):
456 def cmd_backspace(self, browser):
558 if self.curx:
457 if self.curx:
559 self.input = self.input[:self.curx-1] + self.input[self.curx:]
458 self.input = self.input[:self.curx-1] + self.input[self.curx:]
560 self.curx -= 1
459 self.curx -= 1
561 return True
460 return True
562 else:
461 else:
563 curses.beep()
462 curses.beep()
564
463
565 def cmd_delete(self, browser):
464 def cmd_delete(self, browser):
566 if self.curx<len(self.input):
465 if self.curx<len(self.input):
567 self.input = self.input[:self.curx] + self.input[self.curx+1:]
466 self.input = self.input[:self.curx] + self.input[self.curx+1:]
568 return True
467 return True
569 else:
468 else:
570 curses.beep()
469 curses.beep()
571
470
572 def cmd_delend(self, browser):
471 def cmd_delend(self, browser):
573 if self.curx<len(self.input):
472 if self.curx<len(self.input):
574 self.input = self.input[:self.curx]
473 self.input = self.input[:self.curx]
575 return True
474 return True
576
475
577 def cmd_left(self, browser):
476 def cmd_left(self, browser):
578 if self.curx:
477 if self.curx:
579 self.curx -= 1
478 self.curx -= 1
580 return True
479 return True
581 else:
480 else:
582 curses.beep()
481 curses.beep()
583
482
584 def cmd_right(self, browser):
483 def cmd_right(self, browser):
585 if self.curx < len(self.input):
484 if self.curx < len(self.input):
586 self.curx += 1
485 self.curx += 1
587 return True
486 return True
588 else:
487 else:
589 curses.beep()
488 curses.beep()
590
489
591 def cmd_home(self, browser):
490 def cmd_home(self, browser):
592 if self.curx:
491 if self.curx:
593 self.curx = 0
492 self.curx = 0
594 return True
493 return True
595 else:
494 else:
596 curses.beep()
495 curses.beep()
597
496
598 def cmd_end(self, browser):
497 def cmd_end(self, browser):
599 if self.curx < len(self.input):
498 if self.curx < len(self.input):
600 self.curx = len(self.input)
499 self.curx = len(self.input)
601 return True
500 return True
602 else:
501 else:
603 curses.beep()
502 curses.beep()
604
503
605 def cmd_up(self, browser):
504 def cmd_up(self, browser):
606 if self.cury < len(self.history)-1:
505 if self.cury < len(self.history)-1:
607 self.cury += 1
506 self.cury += 1
608 self.input = self.history[self.cury]
507 self.input = self.history[self.cury]
609 self.curx = len(self.input)
508 self.curx = len(self.input)
610 return True
509 return True
611 else:
510 else:
612 curses.beep()
511 curses.beep()
613
512
614 def cmd_down(self, browser):
513 def cmd_down(self, browser):
615 if self.cury >= 0:
514 if self.cury >= 0:
616 self.cury -= 1
515 self.cury -= 1
617 if self.cury>=0:
516 if self.cury>=0:
618 self.input = self.history[self.cury]
517 self.input = self.history[self.cury]
619 else:
518 else:
620 self.input = ""
519 self.input = ""
621 self.curx = len(self.input)
520 self.curx = len(self.input)
622 return True
521 return True
623 else:
522 else:
624 curses.beep()
523 curses.beep()
625
524
626 def cmd_incsearchup(self, browser):
525 def cmd_incsearchup(self, browser):
627 prefix = self.input[:self.curx]
526 prefix = self.input[:self.curx]
628 cury = self.cury
527 cury = self.cury
629 while True:
528 while True:
630 cury += 1
529 cury += 1
631 if cury >= len(self.history):
530 if cury >= len(self.history):
632 break
531 break
633 if self.history[cury].startswith(prefix):
532 if self.history[cury].startswith(prefix):
634 self.input = self.history[cury]
533 self.input = self.history[cury]
635 self.cury = cury
534 self.cury = cury
636 return True
535 return True
637 curses.beep()
536 curses.beep()
638
537
639 def cmd_incsearchdown(self, browser):
538 def cmd_incsearchdown(self, browser):
640 prefix = self.input[:self.curx]
539 prefix = self.input[:self.curx]
641 cury = self.cury
540 cury = self.cury
642 while True:
541 while True:
643 cury -= 1
542 cury -= 1
644 if cury <= 0:
543 if cury <= 0:
645 break
544 break
646 if self.history[cury].startswith(prefix):
545 if self.history[cury].startswith(prefix):
647 self.input = self.history[self.cury]
546 self.input = self.history[self.cury]
648 self.cury = cury
547 self.cury = cury
649 return True
548 return True
650 curses.beep()
549 curses.beep()
651
550
652 def cmd_exit(self, browser):
551 def cmd_exit(self, browser):
653 browser.mode = "default"
552 browser.mode = "default"
654 return True
553 return True
655
554
656 def cmd_execute(self, browser):
555 def cmd_execute(self, browser):
657 raise NotImplementedError
556 raise NotImplementedError
658
557
659
558
660 class _CommandGoto(_CommandInput):
559 class _CommandGoto(_CommandInput):
661 def __init__(self):
560 def __init__(self):
662 _CommandInput.__init__(self, "goto object #")
561 _CommandInput.__init__(self, "goto object #")
663
562
664 def handlechar(self, browser, char):
563 def handlechar(self, browser, char):
665 # Only accept digits
564 # Only accept digits
666 if not "0" <= char <= "9":
565 if not "0" <= char <= "9":
667 curses.beep()
566 curses.beep()
668 else:
567 else:
669 return _CommandInput.handlechar(self, browser, char)
568 return _CommandInput.handlechar(self, browser, char)
670
569
671 def cmd_execute(self, browser):
570 def cmd_execute(self, browser):
672 level = browser.levels[-1]
571 level = browser.levels[-1]
673 if self.input:
572 if self.input:
674 self.dohistory()
573 self.dohistory()
675 level.moveto(level.curx, int(self.input))
574 level.moveto(level.curx, int(self.input))
676 browser.mode = "default"
575 browser.mode = "default"
677 return True
576 return True
678
577
679
578
680 class _CommandFind(_CommandInput):
579 class _CommandFind(_CommandInput):
681 def __init__(self):
580 def __init__(self):
682 _CommandInput.__init__(self, "find expression")
581 _CommandInput.__init__(self, "find expression")
683
582
684 def cmd_execute(self, browser):
583 def cmd_execute(self, browser):
685 level = browser.levels[-1]
584 level = browser.levels[-1]
686 if self.input:
585 if self.input:
687 self.dohistory()
586 self.dohistory()
688 while True:
587 while True:
689 cury = level.cury
588 cury = level.cury
690 level.moveto(level.curx, cury+1)
589 level.moveto(level.curx, cury+1)
691 if cury == level.cury:
590 if cury == level.cury:
692 curses.beep()
591 curses.beep()
693 break # hit end
592 break # hit end
694 item = level.items[level.cury].item
593 item = level.items[level.cury].item
695 try:
594 try:
696 globals = ipipe.getglobals(None)
595 globals = ipipe.getglobals(None)
697 if eval(self.input, globals, ipipe.AttrNamespace(item)):
596 if eval(self.input, globals, ipipe.AttrNamespace(item)):
698 break # found something
597 break # found something
699 except (KeyboardInterrupt, SystemExit):
598 except (KeyboardInterrupt, SystemExit):
700 raise
599 raise
701 except Exception, exc:
600 except Exception, exc:
702 browser.report(exc)
601 browser.report(exc)
703 curses.beep()
602 curses.beep()
704 break # break on error
603 break # break on error
705 browser.mode = "default"
604 browser.mode = "default"
706 return True
605 return True
707
606
708
607
709 class _CommandFindBackwards(_CommandInput):
608 class _CommandFindBackwards(_CommandInput):
710 def __init__(self):
609 def __init__(self):
711 _CommandInput.__init__(self, "find backwards expression")
610 _CommandInput.__init__(self, "find backwards expression")
712
611
713 def cmd_execute(self, browser):
612 def cmd_execute(self, browser):
714 level = browser.levels[-1]
613 level = browser.levels[-1]
715 if self.input:
614 if self.input:
716 self.dohistory()
615 self.dohistory()
717 while level.cury:
616 while level.cury:
718 level.moveto(level.curx, level.cury-1)
617 level.moveto(level.curx, level.cury-1)
719 item = level.items[level.cury].item
618 item = level.items[level.cury].item
720 try:
619 try:
721 globals = ipipe.getglobals(None)
620 globals = ipipe.getglobals(None)
722 if eval(self.input, globals, ipipe.AttrNamespace(item)):
621 if eval(self.input, globals, ipipe.AttrNamespace(item)):
723 break # found something
622 break # found something
724 except (KeyboardInterrupt, SystemExit):
623 except (KeyboardInterrupt, SystemExit):
725 raise
624 raise
726 except Exception, exc:
625 except Exception, exc:
727 browser.report(exc)
626 browser.report(exc)
728 curses.beep()
627 curses.beep()
729 break # break on error
628 break # break on error
730 else:
629 else:
731 curses.beep()
630 curses.beep()
732 browser.mode = "default"
631 browser.mode = "default"
733 return True
632 return True
734
633
735
634
736 class ibrowse(ipipe.Display):
635 class ibrowse(ipipe.Display):
737 # Show this many lines from the previous screen when paging horizontally
636 # Show this many lines from the previous screen when paging horizontally
738 pageoverlapx = 1
637 pageoverlapx = 1
739
638
740 # Show this many lines from the previous screen when paging vertically
639 # Show this many lines from the previous screen when paging vertically
741 pageoverlapy = 1
640 pageoverlapy = 1
742
641
743 # Start scrolling when the cursor is less than this number of columns
642 # Start scrolling when the cursor is less than this number of columns
744 # away from the left or right screen edge
643 # away from the left or right screen edge
745 scrollborderx = 10
644 scrollborderx = 10
746
645
747 # Start scrolling when the cursor is less than this number of lines
646 # Start scrolling when the cursor is less than this number of lines
748 # away from the top or bottom screen edge
647 # away from the top or bottom screen edge
749 scrollbordery = 5
648 scrollbordery = 5
750
649
751 # Accelerate by this factor when scrolling horizontally
650 # Accelerate by this factor when scrolling horizontally
752 acceleratex = 1.05
651 acceleratex = 1.05
753
652
754 # Accelerate by this factor when scrolling vertically
653 # Accelerate by this factor when scrolling vertically
755 acceleratey = 1.05
654 acceleratey = 1.05
756
655
757 # The maximum horizontal scroll speed
656 # The maximum horizontal scroll speed
758 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
657 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
759 maxspeedx = 0.5
658 maxspeedx = 0.5
760
659
761 # The maximum vertical scroll speed
660 # The maximum vertical scroll speed
762 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
661 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
763 maxspeedy = 0.5
662 maxspeedy = 0.5
764
663
765 # The maximum number of header lines for browser level
664 # The maximum number of header lines for browser level
766 # if the nesting is deeper, only the innermost levels are displayed
665 # if the nesting is deeper, only the innermost levels are displayed
767 maxheaders = 5
666 maxheaders = 5
768
667
769 # The approximate maximum length of a column entry
668 # The approximate maximum length of a column entry
770 maxattrlength = 200
669 maxattrlength = 200
771
670
772 # Styles for various parts of the GUI
671 # Styles for various parts of the GUI
773 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
672 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
774 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
673 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
775 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
674 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
776 style_colheader = astyle.Style.fromstr("blue:white:reverse")
675 style_colheader = astyle.Style.fromstr("blue:white:reverse")
777 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
676 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
778 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
677 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
779 style_number = astyle.Style.fromstr("blue:white:reverse")
678 style_number = astyle.Style.fromstr("blue:white:reverse")
780 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
679 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
781 style_sep = astyle.Style.fromstr("blue:black")
680 style_sep = astyle.Style.fromstr("blue:black")
782 style_data = astyle.Style.fromstr("white:black")
681 style_data = astyle.Style.fromstr("white:black")
783 style_datapad = astyle.Style.fromstr("blue:black:bold")
682 style_datapad = astyle.Style.fromstr("blue:black:bold")
784 style_footer = astyle.Style.fromstr("black:white")
683 style_footer = astyle.Style.fromstr("black:white")
785 style_report = astyle.Style.fromstr("white:black")
684 style_report = astyle.Style.fromstr("white:black")
786
685
787 # Column separator in header
686 # Column separator in header
788 headersepchar = "|"
687 headersepchar = "|"
789
688
790 # Character for padding data cell entries
689 # Character for padding data cell entries
791 datapadchar = "."
690 datapadchar = "."
792
691
793 # Column separator in data area
692 # Column separator in data area
794 datasepchar = "|"
693 datasepchar = "|"
795
694
796 # Character to use for "empty" cell (i.e. for non-existing attributes)
695 # Character to use for "empty" cell (i.e. for non-existing attributes)
797 nodatachar = "-"
696 nodatachar = "-"
798
697
799 # Prompts for modes that require keyboard input
698 # Prompts for modes that require keyboard input
800 prompts = {
699 prompts = {
801 "goto": _CommandGoto(),
700 "goto": _CommandGoto(),
802 "find": _CommandFind(),
701 "find": _CommandFind(),
803 "findbackwards": _CommandFindBackwards()
702 "findbackwards": _CommandFindBackwards()
804 }
703 }
805
704
806 # Maps curses key codes to "function" names
705 # Maps curses key codes to "function" names
807 keymap = Keymap()
706 keymap = Keymap()
808 keymap.register("quit", "q")
707 keymap.register("quit", "q")
809 keymap.register("up", curses.KEY_UP)
708 keymap.register("up", curses.KEY_UP)
810 keymap.register("down", curses.KEY_DOWN)
709 keymap.register("down", curses.KEY_DOWN)
811 keymap.register("pageup", curses.KEY_PPAGE)
710 keymap.register("pageup", curses.KEY_PPAGE)
812 keymap.register("pagedown", curses.KEY_NPAGE)
711 keymap.register("pagedown", curses.KEY_NPAGE)
813 keymap.register("left", curses.KEY_LEFT)
712 keymap.register("left", curses.KEY_LEFT)
814 keymap.register("right", curses.KEY_RIGHT)
713 keymap.register("right", curses.KEY_RIGHT)
815 keymap.register("home", curses.KEY_HOME, "\x01")
714 keymap.register("home", curses.KEY_HOME, "\x01")
816 keymap.register("end", curses.KEY_END, "\x05")
715 keymap.register("end", curses.KEY_END, "\x05")
817 keymap.register("prevattr", "<\x1b")
716 keymap.register("prevattr", "<\x1b")
818 keymap.register("nextattr", ">\t")
717 keymap.register("nextattr", ">\t")
819 keymap.register("pick", "p")
718 keymap.register("pick", "p")
820 keymap.register("pickattr", "P")
719 keymap.register("pickattr", "P")
821 keymap.register("pickallattrs", "C")
720 keymap.register("pickallattrs", "C")
822 keymap.register("pickmarked", "m")
721 keymap.register("pickmarked", "m")
823 keymap.register("pickmarkedattr", "M")
722 keymap.register("pickmarkedattr", "M")
824 keymap.register("enterdefault", "\r\n")
723 keymap.register("enterdefault", "\r\n")
825 # FIXME: What's happening here?
724 # FIXME: What's happening here?
826 keymap.register("leave", curses.KEY_BACKSPACE, "x\x08\x7f")
725 keymap.register("leave", curses.KEY_BACKSPACE, "x\x08\x7f")
827 keymap.register("hideattr", "h")
726 keymap.register("hideattr", "h")
828 keymap.register("unhideattrs", "H")
727 keymap.register("unhideattrs", "H")
829 keymap.register("help", "?")
728 keymap.register("help", "?")
830 keymap.register("enter", "e")
729 keymap.register("enter", "e")
831 keymap.register("enterattr", "E")
730 keymap.register("enterattr", "E")
832 keymap.register("detail", "d")
731 keymap.register("detail", "d")
833 keymap.register("detailattr", "D")
732 keymap.register("detailattr", "D")
834 keymap.register("tooglemark", " ")
733 keymap.register("tooglemark", " ")
835 keymap.register("markrange", "r")
734 keymap.register("markrange", "r")
836 keymap.register("sortattrasc", "v")
735 keymap.register("sortattrasc", "v")
837 keymap.register("sortattrdesc", "V")
736 keymap.register("sortattrdesc", "V")
838 keymap.register("goto", "g")
737 keymap.register("goto", "g")
839 keymap.register("find", "f")
738 keymap.register("find", "f")
840 keymap.register("findbackwards", "b")
739 keymap.register("findbackwards", "b")
841
740
842 def __init__(self, *attrs):
741 def __init__(self, *attrs):
843 """
742 """
844 Create a new browser. If ``attrs`` is not empty, it is the list
743 Create a new browser. If ``attrs`` is not empty, it is the list
845 of attributes that will be displayed in the browser, otherwise
744 of attributes that will be displayed in the browser, otherwise
846 these will be determined by the objects on screen.
745 these will be determined by the objects on screen.
847 """
746 """
848 self.attrs = attrs
747 self.attrs = attrs
849
748
850 # Stack of browser levels
749 # Stack of browser levels
851 self.levels = []
750 self.levels = []
852 # how many colums to scroll (Changes when accelerating)
751 # how many colums to scroll (Changes when accelerating)
853 self.stepx = 1.
752 self.stepx = 1.
854
753
855 # how many rows to scroll (Changes when accelerating)
754 # how many rows to scroll (Changes when accelerating)
856 self.stepy = 1.
755 self.stepy = 1.
857
756
858 # Beep on the edges of the data area? (Will be set to ``False``
757 # Beep on the edges of the data area? (Will be set to ``False``
859 # once the cursor hits the edge of the screen, so we don't get
758 # once the cursor hits the edge of the screen, so we don't get
860 # multiple beeps).
759 # multiple beeps).
861 self._dobeep = True
760 self._dobeep = True
862
761
863 # Cache for registered ``curses`` colors and styles.
762 # Cache for registered ``curses`` colors and styles.
864 self._styles = {}
763 self._styles = {}
865 self._colors = {}
764 self._colors = {}
866 self._maxcolor = 1
765 self._maxcolor = 1
867
766
868 # How many header lines do we want to paint (the numbers of levels
767 # How many header lines do we want to paint (the numbers of levels
869 # we have, but with an upper bound)
768 # we have, but with an upper bound)
870 self._headerlines = 1
769 self._headerlines = 1
871
770
872 # Index of first header line
771 # Index of first header line
873 self._firstheaderline = 0
772 self._firstheaderline = 0
874
773
875 # curses window
774 # curses window
876 self.scr = None
775 self.scr = None
877 # report in the footer line (error, executed command etc.)
776 # report in the footer line (error, executed command etc.)
878 self._report = None
777 self._report = None
879
778
880 # value to be returned to the caller (set by commands)
779 # value to be returned to the caller (set by commands)
881 self.returnvalue = None
780 self.returnvalue = None
882
781
883 # The mode the browser is in
782 # The mode the browser is in
884 # e.g. normal browsing or entering an argument for a command
783 # e.g. normal browsing or entering an argument for a command
885 self.mode = "default"
784 self.mode = "default"
886
785
887 # set by the SIGWINCH signal handler
786 # set by the SIGWINCH signal handler
888 self.resized = False
787 self.resized = False
889
788
890 def nextstepx(self, step):
789 def nextstepx(self, step):
891 """
790 """
892 Accelerate horizontally.
791 Accelerate horizontally.
893 """
792 """
894 return max(1., min(step*self.acceleratex,
793 return max(1., min(step*self.acceleratex,
895 self.maxspeedx*self.levels[-1].mainsizex))
794 self.maxspeedx*self.levels[-1].mainsizex))
896
795
897 def nextstepy(self, step):
796 def nextstepy(self, step):
898 """
797 """
899 Accelerate vertically.
798 Accelerate vertically.
900 """
799 """
901 return max(1., min(step*self.acceleratey,
800 return max(1., min(step*self.acceleratey,
902 self.maxspeedy*self.levels[-1].mainsizey))
801 self.maxspeedy*self.levels[-1].mainsizey))
903
802
904 def getstyle(self, style):
803 def getstyle(self, style):
905 """
804 """
906 Register the ``style`` with ``curses`` or get it from the cache,
805 Register the ``style`` with ``curses`` or get it from the cache,
907 if it has been registered before.
806 if it has been registered before.
908 """
807 """
909 try:
808 try:
910 return self._styles[style.fg, style.bg, style.attrs]
809 return self._styles[style.fg, style.bg, style.attrs]
911 except KeyError:
810 except KeyError:
912 attrs = 0
811 attrs = 0
913 for b in astyle.A2CURSES:
812 for b in astyle.A2CURSES:
914 if style.attrs & b:
813 if style.attrs & b:
915 attrs |= astyle.A2CURSES[b]
814 attrs |= astyle.A2CURSES[b]
916 try:
815 try:
917 color = self._colors[style.fg, style.bg]
816 color = self._colors[style.fg, style.bg]
918 except KeyError:
817 except KeyError:
919 curses.init_pair(
818 curses.init_pair(
920 self._maxcolor,
819 self._maxcolor,
921 astyle.COLOR2CURSES[style.fg],
820 astyle.COLOR2CURSES[style.fg],
922 astyle.COLOR2CURSES[style.bg]
821 astyle.COLOR2CURSES[style.bg]
923 )
822 )
924 color = curses.color_pair(self._maxcolor)
823 color = curses.color_pair(self._maxcolor)
925 self._colors[style.fg, style.bg] = color
824 self._colors[style.fg, style.bg] = color
926 self._maxcolor += 1
825 self._maxcolor += 1
927 c = color | attrs
826 c = color | attrs
928 self._styles[style.fg, style.bg, style.attrs] = c
827 self._styles[style.fg, style.bg, style.attrs] = c
929 return c
828 return c
930
829
931 def addstr(self, y, x, begx, endx, text, style):
830 def addstr(self, y, x, begx, endx, text, style):
932 """
831 """
933 A version of ``curses.addstr()`` that can handle ``x`` coordinates
832 A version of ``curses.addstr()`` that can handle ``x`` coordinates
934 that are outside the screen.
833 that are outside the screen.
935 """
834 """
936 text2 = text[max(0, begx-x):max(0, endx-x)]
835 text2 = text[max(0, begx-x):max(0, endx-x)]
937 if text2:
836 if text2:
938 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
837 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
939 return len(text)
838 return len(text)
940
839
941 def addchr(self, y, x, begx, endx, c, l, style):
840 def addchr(self, y, x, begx, endx, c, l, style):
942 x0 = max(x, begx)
841 x0 = max(x, begx)
943 x1 = min(x+l, endx)
842 x1 = min(x+l, endx)
944 if x1>x0:
843 if x1>x0:
945 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
844 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
946 return l
845 return l
947
846
948 def _calcheaderlines(self, levels):
847 def _calcheaderlines(self, levels):
949 # Calculate how many headerlines do we have to display, if we have
848 # Calculate how many headerlines do we have to display, if we have
950 # ``levels`` browser levels
849 # ``levels`` browser levels
951 if levels is None:
850 if levels is None:
952 levels = len(self.levels)
851 levels = len(self.levels)
953 self._headerlines = min(self.maxheaders, levels)
852 self._headerlines = min(self.maxheaders, levels)
954 self._firstheaderline = levels-self._headerlines
853 self._firstheaderline = levels-self._headerlines
955
854
956 def getstylehere(self, style):
855 def getstylehere(self, style):
957 """
856 """
958 Return a style for displaying the original style ``style``
857 Return a style for displaying the original style ``style``
959 in the row the cursor is on.
858 in the row the cursor is on.
960 """
859 """
961 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
860 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
962
861
963 def report(self, msg):
862 def report(self, msg):
964 """
863 """
965 Store the message ``msg`` for display below the footer line. This
864 Store the message ``msg`` for display below the footer line. This
966 will be displayed as soon as the screen is redrawn.
865 will be displayed as soon as the screen is redrawn.
967 """
866 """
968 self._report = msg
867 self._report = msg
969
868
970 def enter(self, item, mode, *attrs):
869 def enter(self, item, mode, *attrs):
971 """
870 """
972 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
871 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
973 specified, it will be used as a fixed list of attributes to display.
872 specified, it will be used as a fixed list of attributes to display.
974 """
873 """
975 try:
874 try:
976 iterator = ipipe.xiter(item, mode)
875 iterator = ipipe.xiter(item, mode)
977 except (KeyboardInterrupt, SystemExit):
876 except (KeyboardInterrupt, SystemExit):
978 raise
877 raise
979 except Exception, exc:
878 except Exception, exc:
980 curses.beep()
879 curses.beep()
981 self.report(exc)
880 self.report(exc)
982 else:
881 else:
983 self._calcheaderlines(len(self.levels)+1)
882 self._calcheaderlines(len(self.levels)+1)
984 level = _BrowserLevel(
883 level = _BrowserLevel(
985 self,
884 self,
986 item,
885 item,
987 iterator,
886 iterator,
988 self.scrsizey-1-self._headerlines-2,
887 self.scrsizey-1-self._headerlines-2,
989 *attrs
888 *attrs
990 )
889 )
991 self.levels.append(level)
890 self.levels.append(level)
992
891
993 def startkeyboardinput(self, mode):
892 def startkeyboardinput(self, mode):
994 """
893 """
995 Enter mode ``mode``, which requires keyboard input.
894 Enter mode ``mode``, which requires keyboard input.
996 """
895 """
997 self.mode = mode
896 self.mode = mode
998 self.prompts[mode].start()
897 self.prompts[mode].start()
999
898
1000 def keylabel(self, keycode):
899 def keylabel(self, keycode):
1001 """
900 """
1002 Return a pretty name for the ``curses`` key ``keycode`` (used in the
901 Return a pretty name for the ``curses`` key ``keycode`` (used in the
1003 help screen and in reports about unassigned keys).
902 help screen and in reports about unassigned keys).
1004 """
903 """
1005 if keycode <= 0xff:
904 if keycode <= 0xff:
1006 specialsnames = {
905 specialsnames = {
1007 ord("\n"): "RETURN",
906 ord("\n"): "RETURN",
1008 ord(" "): "SPACE",
907 ord(" "): "SPACE",
1009 ord("\t"): "TAB",
908 ord("\t"): "TAB",
1010 ord("\x7f"): "DELETE",
909 ord("\x7f"): "DELETE",
1011 ord("\x08"): "BACKSPACE",
910 ord("\x08"): "BACKSPACE",
1012 }
911 }
1013 if keycode in specialsnames:
912 if keycode in specialsnames:
1014 return specialsnames[keycode]
913 return specialsnames[keycode]
1015 elif 0x00 < keycode < 0x20:
914 elif 0x00 < keycode < 0x20:
1016 return "CTRL-%s" % chr(keycode + 64)
915 return "CTRL-%s" % chr(keycode + 64)
1017 return repr(chr(keycode))
916 return repr(chr(keycode))
1018 for name in dir(curses):
917 for name in dir(curses):
1019 if name.startswith("KEY_") and getattr(curses, name) == keycode:
918 if name.startswith("KEY_") and getattr(curses, name) == keycode:
1020 return name
919 return name
1021 return str(keycode)
920 return str(keycode)
1022
921
1023 def beep(self, force=False):
922 def beep(self, force=False):
1024 if force or self._dobeep:
923 if force or self._dobeep:
1025 curses.beep()
924 curses.beep()
1026 # don't beep again (as long as the same key is pressed)
925 # don't beep again (as long as the same key is pressed)
1027 self._dobeep = False
926 self._dobeep = False
1028
927
1029 def cmd_quit(self):
1030 self.returnvalue = None
1031 return True
1032
1033 def cmd_up(self):
928 def cmd_up(self):
929 """
930 Move the cursor to the previous row.
931 """
1034 level = self.levels[-1]
932 level = self.levels[-1]
1035 self.report("up")
933 self.report("up")
1036 level.moveto(level.curx, level.cury-self.stepy)
934 level.moveto(level.curx, level.cury-self.stepy)
1037
935
1038 def cmd_down(self):
936 def cmd_down(self):
937 """
938 Move the cursor to the next row.
939 """
1039 level = self.levels[-1]
940 level = self.levels[-1]
1040 self.report("down")
941 self.report("down")
1041 level.moveto(level.curx, level.cury+self.stepy)
942 level.moveto(level.curx, level.cury+self.stepy)
1042
943
1043 def cmd_pageup(self):
944 def cmd_pageup(self):
945 """
946 Move the cursor up one page.
947 """
1044 level = self.levels[-1]
948 level = self.levels[-1]
1045 self.report("page up")
949 self.report("page up")
1046 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
950 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
1047
951
1048 def cmd_pagedown(self):
952 def cmd_pagedown(self):
953 """
954 Move the cursor down one page.
955 """
1049 level = self.levels[-1]
956 level = self.levels[-1]
1050 self.report("page down")
957 self.report("page down")
1051 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
958 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
1052
959
1053 def cmd_left(self):
960 def cmd_left(self):
961 """
962 Move the cursor left.
963 """
1054 level = self.levels[-1]
964 level = self.levels[-1]
1055 self.report("left")
965 self.report("left")
1056 level.moveto(level.curx-self.stepx, level.cury)
966 level.moveto(level.curx-self.stepx, level.cury)
1057
967
1058 def cmd_right(self):
968 def cmd_right(self):
969 """
970 Move the cursor right.
971 """
1059 level = self.levels[-1]
972 level = self.levels[-1]
1060 self.report("right")
973 self.report("right")
1061 level.moveto(level.curx+self.stepx, level.cury)
974 level.moveto(level.curx+self.stepx, level.cury)
1062
975
1063 def cmd_home(self):
976 def cmd_home(self):
977 """
978 Move the cursor to the first column.
979 """
1064 level = self.levels[-1]
980 level = self.levels[-1]
1065 self.report("home")
981 self.report("home")
1066 level.moveto(0, level.cury)
982 level.moveto(0, level.cury)
1067
983
1068 def cmd_end(self):
984 def cmd_end(self):
985 """
986 Move the cursor to the last column.
987 """
1069 level = self.levels[-1]
988 level = self.levels[-1]
1070 self.report("end")
989 self.report("end")
1071 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
990 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
1072
991
1073 def cmd_prevattr(self):
992 def cmd_prevattr(self):
993 """
994 Move the cursor one attribute column to the left.
995 """
1074 level = self.levels[-1]
996 level = self.levels[-1]
1075 if level.displayattr[0] is None or level.displayattr[0] == 0:
997 if level.displayattr[0] is None or level.displayattr[0] == 0:
1076 self.beep()
998 self.beep()
1077 else:
999 else:
1078 self.report("prevattr")
1000 self.report("prevattr")
1079 pos = 0
1001 pos = 0
1080 for (i, attrname) in enumerate(level.displayattrs):
1002 for (i, attrname) in enumerate(level.displayattrs):
1081 if i == level.displayattr[0]-1:
1003 if i == level.displayattr[0]-1:
1082 break
1004 break
1083 pos += level.colwidths[attrname] + 1
1005 pos += level.colwidths[attrname] + 1
1084 level.moveto(pos, level.cury)
1006 level.moveto(pos, level.cury)
1085
1007
1086 def cmd_nextattr(self):
1008 def cmd_nextattr(self):
1009 """
1010 Move the cursor one attribute column to the right.
1011 """
1087 level = self.levels[-1]
1012 level = self.levels[-1]
1088 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1013 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
1089 self.beep()
1014 self.beep()
1090 else:
1015 else:
1091 self.report("nextattr")
1016 self.report("nextattr")
1092 pos = 0
1017 pos = 0
1093 for (i, attrname) in enumerate(level.displayattrs):
1018 for (i, attrname) in enumerate(level.displayattrs):
1094 if i == level.displayattr[0]+1:
1019 if i == level.displayattr[0]+1:
1095 break
1020 break
1096 pos += level.colwidths[attrname] + 1
1021 pos += level.colwidths[attrname] + 1
1097 level.moveto(pos, level.cury)
1022 level.moveto(pos, level.cury)
1098
1023
1099 def cmd_pick(self):
1024 def cmd_pick(self):
1025 """
1026 'Pick' the object under the cursor (i.e. the row the cursor is on).
1027 This leaves the browser and returns the picked object to the caller.
1028 (In IPython this object will be available as the '_' variable.)
1029 """
1100 level = self.levels[-1]
1030 level = self.levels[-1]
1101 self.returnvalue = level.items[level.cury].item
1031 self.returnvalue = level.items[level.cury].item
1102 return True
1032 return True
1103
1033
1104 def cmd_pickattr(self):
1034 def cmd_pickattr(self):
1035 """
1036 'Pick' the attribute under the cursor (i.e. the row/column the
1037 cursor is on).
1038 """
1105 level = self.levels[-1]
1039 level = self.levels[-1]
1106 attrname = level.displayattr[1]
1040 attrname = level.displayattr[1]
1107 if attrname is ipipe.noitem:
1041 if attrname is ipipe.noitem:
1108 curses.beep()
1042 curses.beep()
1109 self.report(AttributeError(ipipe._attrname(attrname)))
1043 self.report(AttributeError(ipipe._attrname(attrname)))
1110 return
1044 return
1111 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1045 attr = ipipe._getattr(level.items[level.cury].item, attrname)
1112 if attr is ipipe.noitem:
1046 if attr is ipipe.noitem:
1113 curses.beep()
1047 curses.beep()
1114 self.report(AttributeError(ipipe._attrname(attrname)))
1048 self.report(AttributeError(ipipe._attrname(attrname)))
1115 else:
1049 else:
1116 self.returnvalue = attr
1050 self.returnvalue = attr
1117 return True
1051 return True
1118
1052
1119 def cmd_pickallattrs(self):
1053 def cmd_pickallattrs(self):
1054 """
1055 Pick' the complete column under the cursor (i.e. the attribute under
1056 the cursor) from all currently fetched objects. These attributes
1057 will be returned as a list.
1058 """
1120 level = self.levels[-1]
1059 level = self.levels[-1]
1121 attrname = level.displayattr[1]
1060 attrname = level.displayattr[1]
1122 if attrname is ipipe.noitem:
1061 if attrname is ipipe.noitem:
1123 curses.beep()
1062 curses.beep()
1124 self.report(AttributeError(ipipe._attrname(attrname)))
1063 self.report(AttributeError(ipipe._attrname(attrname)))
1125 return
1064 return
1126 result = []
1065 result = []
1127 for cache in level.items:
1066 for cache in level.items:
1128 attr = ipipe._getattr(cache.item, attrname)
1067 attr = ipipe._getattr(cache.item, attrname)
1129 if attr is not ipipe.noitem:
1068 if attr is not ipipe.noitem:
1130 result.append(attr)
1069 result.append(attr)
1131 self.returnvalue = result
1070 self.returnvalue = result
1132 return True
1071 return True
1133
1072
1134 def cmd_pickmarked(self):
1073 def cmd_pickmarked(self):
1074 """
1075 'Pick' marked objects. Marked objects will be returned as a list.
1076 """
1135 level = self.levels[-1]
1077 level = self.levels[-1]
1136 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1078 self.returnvalue = [cache.item for cache in level.items if cache.marked]
1137 return True
1079 return True
1138
1080
1139 def cmd_pickmarkedattr(self):
1081 def cmd_pickmarkedattr(self):
1082 """
1083 'Pick' the attribute under the cursor from all marked objects
1084 (This returns a list).
1085 """
1086
1140 level = self.levels[-1]
1087 level = self.levels[-1]
1141 attrname = level.displayattr[1]
1088 attrname = level.displayattr[1]
1142 if attrname is ipipe.noitem:
1089 if attrname is ipipe.noitem:
1143 curses.beep()
1090 curses.beep()
1144 self.report(AttributeError(ipipe._attrname(attrname)))
1091 self.report(AttributeError(ipipe._attrname(attrname)))
1145 return
1092 return
1146 result = []
1093 result = []
1147 for cache in level.items:
1094 for cache in level.items:
1148 if cache.marked:
1095 if cache.marked:
1149 attr = ipipe._getattr(cache.item, attrname)
1096 attr = ipipe._getattr(cache.item, attrname)
1150 if attr is not ipipe.noitem:
1097 if attr is not ipipe.noitem:
1151 result.append(attr)
1098 result.append(attr)
1152 self.returnvalue = result
1099 self.returnvalue = result
1153 return True
1100 return True
1154
1101
1155 def cmd_markrange(self):
1102 def cmd_markrange(self):
1103 """
1104 Mark all objects from the last marked object before the current cursor
1105 position to the cursor position.
1106 """
1156 level = self.levels[-1]
1107 level = self.levels[-1]
1157 self.report("markrange")
1108 self.report("markrange")
1158 start = None
1109 start = None
1159 if level.items:
1110 if level.items:
1160 for i in xrange(level.cury, -1, -1):
1111 for i in xrange(level.cury, -1, -1):
1161 if level.items[i].marked:
1112 if level.items[i].marked:
1162 start = i
1113 start = i
1163 break
1114 break
1164 if start is None:
1115 if start is None:
1165 self.report(CommandError("no mark before cursor"))
1116 self.report(CommandError("no mark before cursor"))
1166 curses.beep()
1117 curses.beep()
1167 else:
1118 else:
1168 for i in xrange(start, level.cury+1):
1119 for i in xrange(start, level.cury+1):
1169 cache = level.items[i]
1120 cache = level.items[i]
1170 if not cache.marked:
1121 if not cache.marked:
1171 cache.marked = True
1122 cache.marked = True
1172 level.marked += 1
1123 level.marked += 1
1173
1124
1174 def cmd_enterdefault(self):
1125 def cmd_enterdefault(self):
1126 """
1127 Enter the object under the cursor. (what this mean depends on the object
1128 itself (i.e. how it implements the '__xiter__' method). This opens a new
1129 browser 'level'.
1130 """
1175 level = self.levels[-1]
1131 level = self.levels[-1]
1176 try:
1132 try:
1177 item = level.items[level.cury].item
1133 item = level.items[level.cury].item
1178 except IndexError:
1134 except IndexError:
1179 self.report(CommandError("No object"))
1135 self.report(CommandError("No object"))
1180 curses.beep()
1136 curses.beep()
1181 else:
1137 else:
1182 self.report("entering object (default mode)...")
1138 self.report("entering object (default mode)...")
1183 self.enter(item, "default")
1139 self.enter(item, "default")
1184
1140
1185 def cmd_leave(self):
1141 def cmd_leave(self):
1142 """
1143 Leave the current browser level and go back to the previous one.
1144 """
1186 self.report("leave")
1145 self.report("leave")
1187 if len(self.levels) > 1:
1146 if len(self.levels) > 1:
1188 self._calcheaderlines(len(self.levels)-1)
1147 self._calcheaderlines(len(self.levels)-1)
1189 self.levels.pop(-1)
1148 self.levels.pop(-1)
1190 else:
1149 else:
1191 self.report(CommandError("This is the last level"))
1150 self.report(CommandError("This is the last level"))
1192 curses.beep()
1151 curses.beep()
1193
1152
1194 def cmd_enter(self):
1153 def cmd_enter(self):
1154 """
1155 Enter the object under the cursor. If the object provides different
1156 enter modes a menu of all modes will be presented; choose one and enter
1157 it (via the 'enter' or 'enterdefault' command).
1158 """
1195 level = self.levels[-1]
1159 level = self.levels[-1]
1196 try:
1160 try:
1197 item = level.items[level.cury].item
1161 item = level.items[level.cury].item
1198 except IndexError:
1162 except IndexError:
1199 self.report(CommandError("No object"))
1163 self.report(CommandError("No object"))
1200 curses.beep()
1164 curses.beep()
1201 else:
1165 else:
1202 self.report("entering object...")
1166 self.report("entering object...")
1203 self.enter(item, None)
1167 self.enter(item, None)
1204
1168
1205 def cmd_enterattr(self):
1169 def cmd_enterattr(self):
1170 """
1171 Enter the attribute under the cursor.
1172 """
1206 level = self.levels[-1]
1173 level = self.levels[-1]
1207 attrname = level.displayattr[1]
1174 attrname = level.displayattr[1]
1208 if attrname is ipipe.noitem:
1175 if attrname is ipipe.noitem:
1209 curses.beep()
1176 curses.beep()
1210 self.report(AttributeError(ipipe._attrname(attrname)))
1177 self.report(AttributeError(ipipe._attrname(attrname)))
1211 return
1178 return
1212 try:
1179 try:
1213 item = level.items[level.cury].item
1180 item = level.items[level.cury].item
1214 except IndexError:
1181 except IndexError:
1215 self.report(CommandError("No object"))
1182 self.report(CommandError("No object"))
1216 curses.beep()
1183 curses.beep()
1217 else:
1184 else:
1218 attr = ipipe._getattr(item, attrname)
1185 attr = ipipe._getattr(item, attrname)
1219 if attr is ipipe.noitem:
1186 if attr is ipipe.noitem:
1220 self.report(AttributeError(ipipe._attrname(attrname)))
1187 self.report(AttributeError(ipipe._attrname(attrname)))
1221 else:
1188 else:
1222 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1189 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
1223 self.enter(attr, None)
1190 self.enter(attr, None)
1224
1191
1225 def cmd_detail(self):
1192 def cmd_detail(self):
1193 """
1194 Show a detail view of the object under the cursor. This shows the
1195 name, type, doc string and value of the object attributes (and it
1196 might show more attributes than in the list view, depending on
1197 the object).
1198 """
1226 level = self.levels[-1]
1199 level = self.levels[-1]
1227 try:
1200 try:
1228 item = level.items[level.cury].item
1201 item = level.items[level.cury].item
1229 except IndexError:
1202 except IndexError:
1230 self.report(CommandError("No object"))
1203 self.report(CommandError("No object"))
1231 curses.beep()
1204 curses.beep()
1232 else:
1205 else:
1233 self.report("entering detail view for object...")
1206 self.report("entering detail view for object...")
1234 self.enter(item, "detail")
1207 self.enter(item, "detail")
1235
1208
1236 def cmd_detailattr(self):
1209 def cmd_detailattr(self):
1210 """
1211 Show a detail view of the attribute under the cursor.
1212 """
1237 level = self.levels[-1]
1213 level = self.levels[-1]
1238 attrname = level.displayattr[1]
1214 attrname = level.displayattr[1]
1239 if attrname is ipipe.noitem:
1215 if attrname is ipipe.noitem:
1240 curses.beep()
1216 curses.beep()
1241 self.report(AttributeError(ipipe._attrname(attrname)))
1217 self.report(AttributeError(ipipe._attrname(attrname)))
1242 return
1218 return
1243 try:
1219 try:
1244 item = level.items[level.cury].item
1220 item = level.items[level.cury].item
1245 except IndexError:
1221 except IndexError:
1246 self.report(CommandError("No object"))
1222 self.report(CommandError("No object"))
1247 curses.beep()
1223 curses.beep()
1248 else:
1224 else:
1249 attr = ipipe._getattr(item, attrname)
1225 attr = ipipe._getattr(item, attrname)
1250 if attr is ipipe.noitem:
1226 if attr is ipipe.noitem:
1251 self.report(AttributeError(ipipe._attrname(attrname)))
1227 self.report(AttributeError(ipipe._attrname(attrname)))
1252 else:
1228 else:
1253 self.report("entering detail view for attribute...")
1229 self.report("entering detail view for attribute...")
1254 self.enter(attr, "detail")
1230 self.enter(attr, "detail")
1255
1231
1256 def cmd_tooglemark(self):
1232 def cmd_tooglemark(self):
1233 """
1234 Mark/unmark the object under the cursor. Marked objects have a '!'
1235 after the row number).
1236 """
1257 level = self.levels[-1]
1237 level = self.levels[-1]
1258 self.report("toggle mark")
1238 self.report("toggle mark")
1259 try:
1239 try:
1260 item = level.items[level.cury]
1240 item = level.items[level.cury]
1261 except IndexError: # no items?
1241 except IndexError: # no items?
1262 pass
1242 pass
1263 else:
1243 else:
1264 if item.marked:
1244 if item.marked:
1265 item.marked = False
1245 item.marked = False
1266 level.marked -= 1
1246 level.marked -= 1
1267 else:
1247 else:
1268 item.marked = True
1248 item.marked = True
1269 level.marked += 1
1249 level.marked += 1
1270
1250
1271 def cmd_sortattrasc(self):
1251 def cmd_sortattrasc(self):
1252 """
1253 Sort the objects (in ascending order) using the attribute under
1254 the cursor as the sort key.
1255 """
1272 level = self.levels[-1]
1256 level = self.levels[-1]
1273 attrname = level.displayattr[1]
1257 attrname = level.displayattr[1]
1274 if attrname is ipipe.noitem:
1258 if attrname is ipipe.noitem:
1275 curses.beep()
1259 curses.beep()
1276 self.report(AttributeError(ipipe._attrname(attrname)))
1260 self.report(AttributeError(ipipe._attrname(attrname)))
1277 return
1261 return
1278 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1262 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1279 def key(item):
1263 def key(item):
1280 try:
1264 try:
1281 return ipipe._getattr(item, attrname, None)
1265 return ipipe._getattr(item, attrname, None)
1282 except (KeyboardInterrupt, SystemExit):
1266 except (KeyboardInterrupt, SystemExit):
1283 raise
1267 raise
1284 except Exception:
1268 except Exception:
1285 return None
1269 return None
1286 level.sort(key)
1270 level.sort(key)
1287
1271
1288 def cmd_sortattrdesc(self):
1272 def cmd_sortattrdesc(self):
1273 """
1274 Sort the objects (in descending order) using the attribute under
1275 the cursor as the sort key.
1276 """
1289 level = self.levels[-1]
1277 level = self.levels[-1]
1290 attrname = level.displayattr[1]
1278 attrname = level.displayattr[1]
1291 if attrname is ipipe.noitem:
1279 if attrname is ipipe.noitem:
1292 curses.beep()
1280 curses.beep()
1293 self.report(AttributeError(ipipe._attrname(attrname)))
1281 self.report(AttributeError(ipipe._attrname(attrname)))
1294 return
1282 return
1295 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1283 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1296 def key(item):
1284 def key(item):
1297 try:
1285 try:
1298 return ipipe._getattr(item, attrname, None)
1286 return ipipe._getattr(item, attrname, None)
1299 except (KeyboardInterrupt, SystemExit):
1287 except (KeyboardInterrupt, SystemExit):
1300 raise
1288 raise
1301 except Exception:
1289 except Exception:
1302 return None
1290 return None
1303 level.sort(key, reverse=True)
1291 level.sort(key, reverse=True)
1304
1292
1293 def cmd_hideattr(self):
1294 """
1295 Hide the attribute under the cursor.
1296 """
1297 level = self.levels[-1]
1298 if level.displayattr[0] is None:
1299 self.beep()
1300 else:
1301 self.report("hideattr")
1302 level.hiddenattrs.add(level.displayattr[1])
1303 level.moveto(level.curx, level.cury, refresh=True)
1304
1305 def cmd_unhideattrs(self):
1306 """
1307 Make all attributes visible again.
1308 """
1309 level = self.levels[-1]
1310 self.report("unhideattrs")
1311 level.hiddenattrs.clear()
1312 level.moveto(level.curx, level.cury, refresh=True)
1313
1305 def cmd_goto(self):
1314 def cmd_goto(self):
1315 """
1316 Jump to a row. The row number can be entered at the
1317 bottom of the screen.
1318 """
1306 self.startkeyboardinput("goto")
1319 self.startkeyboardinput("goto")
1307
1320
1308 def cmd_find(self):
1321 def cmd_find(self):
1322 """
1323 Search forward for a row. The search condition can be entered at the
1324 bottom of the screen.
1325 """
1309 self.startkeyboardinput("find")
1326 self.startkeyboardinput("find")
1310
1327
1311 def cmd_findbackwards(self):
1328 def cmd_findbackwards(self):
1329 """
1330 Search backward for a row. The search condition can be entered at the
1331 bottom of the screen.
1332 """
1312 self.startkeyboardinput("findbackwards")
1333 self.startkeyboardinput("findbackwards")
1313
1334
1314 def cmd_help(self):
1335 def cmd_help(self):
1315 """
1336 """
1316 The help command
1337 Opens the help screen as a new browser level, describing keyboard
1338 shortcuts.
1317 """
1339 """
1318 for level in self.levels:
1340 for level in self.levels:
1319 if isinstance(level.input, _BrowserHelp):
1341 if isinstance(level.input, _BrowserHelp):
1320 curses.beep()
1342 curses.beep()
1321 self.report(CommandError("help already active"))
1343 self.report(CommandError("help already active"))
1322 return
1344 return
1323
1345
1324 self.enter(_BrowserHelp(self), "default")
1346 self.enter(_BrowserHelp(self), "default")
1325
1347
1348 def cmd_quit(self):
1349 """
1350 Quit the browser and return to the IPython prompt.
1351 """
1352 self.returnvalue = None
1353 return True
1354
1326 def sigwinchhandler(self, signal, frame):
1355 def sigwinchhandler(self, signal, frame):
1327 self.resized = True
1356 self.resized = True
1328
1357
1329 def cmd_hideattr(self):
1330 level = self.levels[-1]
1331 if level.displayattr[0] is None:
1332 self.beep()
1333 else:
1334 self.report("hideattr")
1335 level.hiddenattrs.add(level.displayattr[1])
1336 level.moveto(level.curx, level.cury, refresh=True)
1337
1338 def cmd_unhideattrs(self):
1339 level = self.levels[-1]
1340 self.report("unhideattrs")
1341 level.hiddenattrs.clear()
1342 level.moveto(level.curx, level.cury, refresh=True)
1343
1344 def _dodisplay(self, scr):
1358 def _dodisplay(self, scr):
1345 """
1359 """
1346 This method is the workhorse of the browser. It handles screen
1360 This method is the workhorse of the browser. It handles screen
1347 drawing and the keyboard.
1361 drawing and the keyboard.
1348 """
1362 """
1349 self.scr = scr
1363 self.scr = scr
1350 curses.halfdelay(1)
1364 curses.halfdelay(1)
1351 footery = 2
1365 footery = 2
1352
1366
1353 keys = []
1367 keys = []
1354 quitkey = self.keymap.findkey("quit", None)
1368 quitkey = self.keymap.findkey("quit", None)
1355 if quitkey is not None:
1369 if quitkey is not None:
1356 keys.append("%s=quit" % self.keylabel(quitkey))
1370 keys.append("%s=quit" % self.keylabel(quitkey))
1357 helpkey = self.keymap.findkey("help", None)
1371 helpkey = self.keymap.findkey("help", None)
1358 if helpkey is not None:
1372 if helpkey is not None:
1359 keys.append("%s=help" % self.keylabel(helpkey))
1373 keys.append("%s=help" % self.keylabel(helpkey))
1360 helpmsg = " | %s" % " ".join(keys)
1374 helpmsg = " | %s" % " ".join(keys)
1361
1375
1362 scr.clear()
1376 scr.clear()
1363 msg = "Fetching first batch of objects..."
1377 msg = "Fetching first batch of objects..."
1364 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1378 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1365 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1379 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1366 scr.refresh()
1380 scr.refresh()
1367
1381
1368 lastc = -1
1382 lastc = -1
1369
1383
1370 self.levels = []
1384 self.levels = []
1371 # enter the first level
1385 # enter the first level
1372 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1386 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1373
1387
1374 self._calcheaderlines(None)
1388 self._calcheaderlines(None)
1375
1389
1376 while True:
1390 while True:
1377 level = self.levels[-1]
1391 level = self.levels[-1]
1378 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1392 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1379 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1393 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1380
1394
1381 # Paint object header
1395 # Paint object header
1382 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1396 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1383 lv = self.levels[i]
1397 lv = self.levels[i]
1384 posx = 0
1398 posx = 0
1385 posy = i-self._firstheaderline
1399 posy = i-self._firstheaderline
1386 endx = self.scrsizex
1400 endx = self.scrsizex
1387 if i: # not the first level
1401 if i: # not the first level
1388 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1402 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1389 if not self.levels[i-1].exhausted:
1403 if not self.levels[i-1].exhausted:
1390 msg += "+"
1404 msg += "+"
1391 msg += ") "
1405 msg += ") "
1392 endx -= len(msg)+1
1406 endx -= len(msg)+1
1393 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1407 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1394 for (style, text) in lv.header:
1408 for (style, text) in lv.header:
1395 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1409 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1396 if posx >= endx:
1410 if posx >= endx:
1397 break
1411 break
1398 if i:
1412 if i:
1399 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1413 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1400 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1414 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1401
1415
1402 if not level.items:
1416 if not level.items:
1403 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1417 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1404 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1418 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1405 scr.clrtobot()
1419 scr.clrtobot()
1406 else:
1420 else:
1407 # Paint column headers
1421 # Paint column headers
1408 scr.move(self._headerlines, 0)
1422 scr.move(self._headerlines, 0)
1409 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1423 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1410 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1424 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1411 begx = level.numbersizex+3
1425 begx = level.numbersizex+3
1412 posx = begx-level.datastartx
1426 posx = begx-level.datastartx
1413 for attrname in level.displayattrs:
1427 for attrname in level.displayattrs:
1414 strattrname = ipipe._attrname(attrname)
1428 strattrname = ipipe._attrname(attrname)
1415 cwidth = level.colwidths[attrname]
1429 cwidth = level.colwidths[attrname]
1416 header = strattrname.ljust(cwidth)
1430 header = strattrname.ljust(cwidth)
1417 if attrname == level.displayattr[1]:
1431 if attrname == level.displayattr[1]:
1418 style = self.style_colheaderhere
1432 style = self.style_colheaderhere
1419 else:
1433 else:
1420 style = self.style_colheader
1434 style = self.style_colheader
1421 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1435 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1422 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1436 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1423 if posx >= self.scrsizex:
1437 if posx >= self.scrsizex:
1424 break
1438 break
1425 else:
1439 else:
1426 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1440 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1427
1441
1428 # Paint rows
1442 # Paint rows
1429 posy = self._headerlines+1+level.datastarty
1443 posy = self._headerlines+1+level.datastarty
1430 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1444 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1431 cache = level.items[i]
1445 cache = level.items[i]
1432 if i == level.cury:
1446 if i == level.cury:
1433 style = self.style_numberhere
1447 style = self.style_numberhere
1434 else:
1448 else:
1435 style = self.style_number
1449 style = self.style_number
1436
1450
1437 posy = self._headerlines+1+i-level.datastarty
1451 posy = self._headerlines+1+i-level.datastarty
1438 posx = begx-level.datastartx
1452 posx = begx-level.datastartx
1439
1453
1440 scr.move(posy, 0)
1454 scr.move(posy, 0)
1441 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1455 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1442 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1456 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1443
1457
1444 for attrname in level.displayattrs:
1458 for attrname in level.displayattrs:
1445 cwidth = level.colwidths[attrname]
1459 cwidth = level.colwidths[attrname]
1446 try:
1460 try:
1447 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1461 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1448 except KeyError:
1462 except KeyError:
1449 align = 2
1463 align = 2
1450 style = astyle.style_nodata
1464 style = astyle.style_nodata
1451 padstyle = self.style_datapad
1465 padstyle = self.style_datapad
1452 sepstyle = self.style_sep
1466 sepstyle = self.style_sep
1453 if i == level.cury:
1467 if i == level.cury:
1454 padstyle = self.getstylehere(padstyle)
1468 padstyle = self.getstylehere(padstyle)
1455 sepstyle = self.getstylehere(sepstyle)
1469 sepstyle = self.getstylehere(sepstyle)
1456 if align == 2:
1470 if align == 2:
1457 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1471 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1458 else:
1472 else:
1459 if align == 1:
1473 if align == 1:
1460 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1474 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1461 elif align == 0:
1475 elif align == 0:
1462 pad1 = (cwidth-length)//2
1476 pad1 = (cwidth-length)//2
1463 pad2 = cwidth-length-len(pad1)
1477 pad2 = cwidth-length-len(pad1)
1464 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1478 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1465 for (style, text) in parts:
1479 for (style, text) in parts:
1466 if i == level.cury:
1480 if i == level.cury:
1467 style = self.getstylehere(style)
1481 style = self.getstylehere(style)
1468 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1482 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1469 if posx >= self.scrsizex:
1483 if posx >= self.scrsizex:
1470 break
1484 break
1471 if align == -1:
1485 if align == -1:
1472 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1486 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1473 elif align == 0:
1487 elif align == 0:
1474 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1488 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1475 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1489 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1476 else:
1490 else:
1477 scr.clrtoeol()
1491 scr.clrtoeol()
1478
1492
1479 # Add blank row headers for the rest of the screen
1493 # Add blank row headers for the rest of the screen
1480 for posy in xrange(posy+1, self.scrsizey-2):
1494 for posy in xrange(posy+1, self.scrsizey-2):
1481 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1495 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1482 scr.clrtoeol()
1496 scr.clrtoeol()
1483
1497
1484 posy = self.scrsizey-footery
1498 posy = self.scrsizey-footery
1485 # Display footer
1499 # Display footer
1486 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1500 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1487
1501
1488 if level.exhausted:
1502 if level.exhausted:
1489 flag = ""
1503 flag = ""
1490 else:
1504 else:
1491 flag = "+"
1505 flag = "+"
1492
1506
1493 endx = self.scrsizex-len(helpmsg)-1
1507 endx = self.scrsizex-len(helpmsg)-1
1494 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1508 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1495
1509
1496 posx = 0
1510 posx = 0
1497 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1511 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1498 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1512 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1499 try:
1513 try:
1500 item = level.items[level.cury].item
1514 item = level.items[level.cury].item
1501 except IndexError: # empty
1515 except IndexError: # empty
1502 pass
1516 pass
1503 else:
1517 else:
1504 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1518 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1505 if not isinstance(nostyle, int):
1519 if not isinstance(nostyle, int):
1506 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1520 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1507 if posx >= endx:
1521 if posx >= endx:
1508 break
1522 break
1509
1523
1510 attrstyle = [(astyle.style_default, "no attribute")]
1524 attrstyle = [(astyle.style_default, "no attribute")]
1511 attrname = level.displayattr[1]
1525 attrname = level.displayattr[1]
1512 if attrname is not ipipe.noitem and attrname is not None:
1526 if attrname is not ipipe.noitem and attrname is not None:
1513 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1527 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1514 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1528 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1515 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1529 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1516 try:
1530 try:
1517 attr = ipipe._getattr(item, attrname)
1531 attr = ipipe._getattr(item, attrname)
1518 except (SystemExit, KeyboardInterrupt):
1532 except (SystemExit, KeyboardInterrupt):
1519 raise
1533 raise
1520 except Exception, exc:
1534 except Exception, exc:
1521 attr = exc
1535 attr = exc
1522 if attr is not ipipe.noitem:
1536 if attr is not ipipe.noitem:
1523 attrstyle = ipipe.xrepr(attr, "footer")
1537 attrstyle = ipipe.xrepr(attr, "footer")
1524 for (nostyle, text) in attrstyle:
1538 for (nostyle, text) in attrstyle:
1525 if not isinstance(nostyle, int):
1539 if not isinstance(nostyle, int):
1526 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1540 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1527 if posx >= endx:
1541 if posx >= endx:
1528 break
1542 break
1529
1543
1530 try:
1544 try:
1531 # Display input prompt
1545 # Display input prompt
1532 if self.mode in self.prompts:
1546 if self.mode in self.prompts:
1533 history = self.prompts[self.mode]
1547 history = self.prompts[self.mode]
1534 posx = 0
1548 posx = 0
1535 posy = self.scrsizey-1
1549 posy = self.scrsizey-1
1536 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1550 posx += self.addstr(posy, posx, 0, endx, history.prompt, astyle.style_default)
1537 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1551 posx += self.addstr(posy, posx, 0, endx, " [", astyle.style_default)
1538 if history.cury==-1:
1552 if history.cury==-1:
1539 text = "new"
1553 text = "new"
1540 else:
1554 else:
1541 text = str(history.cury+1)
1555 text = str(history.cury+1)
1542 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1556 posx += self.addstr(posy, posx, 0, endx, text, astyle.style_type_number)
1543 if history.history:
1557 if history.history:
1544 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1558 posx += self.addstr(posy, posx, 0, endx, "/", astyle.style_default)
1545 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1559 posx += self.addstr(posy, posx, 0, endx, str(len(history.history)), astyle.style_type_number)
1546 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1560 posx += self.addstr(posy, posx, 0, endx, "]: ", astyle.style_default)
1547 inputstartx = posx
1561 inputstartx = posx
1548 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1562 posx += self.addstr(posy, posx, 0, endx, history.input, astyle.style_default)
1549 # Display report
1563 # Display report
1550 else:
1564 else:
1551 if self._report is not None:
1565 if self._report is not None:
1552 if isinstance(self._report, Exception):
1566 if isinstance(self._report, Exception):
1553 style = self.getstyle(astyle.style_error)
1567 style = self.getstyle(astyle.style_error)
1554 if self._report.__class__.__module__ == "exceptions":
1568 if self._report.__class__.__module__ == "exceptions":
1555 msg = "%s: %s" % \
1569 msg = "%s: %s" % \
1556 (self._report.__class__.__name__, self._report)
1570 (self._report.__class__.__name__, self._report)
1557 else:
1571 else:
1558 msg = "%s.%s: %s" % \
1572 msg = "%s.%s: %s" % \
1559 (self._report.__class__.__module__,
1573 (self._report.__class__.__module__,
1560 self._report.__class__.__name__, self._report)
1574 self._report.__class__.__name__, self._report)
1561 else:
1575 else:
1562 style = self.getstyle(self.style_report)
1576 style = self.getstyle(self.style_report)
1563 msg = self._report
1577 msg = self._report
1564 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1578 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1565 self._report = None
1579 self._report = None
1566 else:
1580 else:
1567 scr.move(self.scrsizey-1, 0)
1581 scr.move(self.scrsizey-1, 0)
1568 except curses.error:
1582 except curses.error:
1569 # Protect against errors from writing to the last line
1583 # Protect against errors from writing to the last line
1570 pass
1584 pass
1571 scr.clrtoeol()
1585 scr.clrtoeol()
1572
1586
1573 # Position cursor
1587 # Position cursor
1574 if self.mode in self.prompts:
1588 if self.mode in self.prompts:
1575 history = self.prompts[self.mode]
1589 history = self.prompts[self.mode]
1576 scr.move(self.scrsizey-1, inputstartx+history.curx)
1590 scr.move(self.scrsizey-1, inputstartx+history.curx)
1577 else:
1591 else:
1578 scr.move(
1592 scr.move(
1579 1+self._headerlines+level.cury-level.datastarty,
1593 1+self._headerlines+level.cury-level.datastarty,
1580 level.numbersizex+3+level.curx-level.datastartx
1594 level.numbersizex+3+level.curx-level.datastartx
1581 )
1595 )
1582 scr.refresh()
1596 scr.refresh()
1583
1597
1584 # Check keyboard
1598 # Check keyboard
1585 while True:
1599 while True:
1586 c = scr.getch()
1600 c = scr.getch()
1587 if self.resized:
1601 if self.resized:
1588 size = fcntl.ioctl(0, tty.TIOCGWINSZ, "12345678")
1602 size = fcntl.ioctl(0, tty.TIOCGWINSZ, "12345678")
1589 size = struct.unpack("4H", size)
1603 size = struct.unpack("4H", size)
1590 oldsize = scr.getmaxyx()
1604 oldsize = scr.getmaxyx()
1591 scr.erase()
1605 scr.erase()
1592 curses.resize_term(size[0], size[1])
1606 curses.resize_term(size[0], size[1])
1593 newsize = scr.getmaxyx()
1607 newsize = scr.getmaxyx()
1594 scr.erase()
1608 scr.erase()
1595 for l in self.levels:
1609 for l in self.levels:
1596 l.mainsizey += newsize[0]-oldsize[0]
1610 l.mainsizey += newsize[0]-oldsize[0]
1597 l.moveto(l.curx, l.cury, refresh=True)
1611 l.moveto(l.curx, l.cury, refresh=True)
1598 scr.refresh()
1612 scr.refresh()
1599 self.resized = False
1613 self.resized = False
1600 break # Redisplay
1614 break # Redisplay
1601 if self.mode in self.prompts:
1615 if self.mode in self.prompts:
1602 if self.prompts[self.mode].handlekey(self, c):
1616 if self.prompts[self.mode].handlekey(self, c):
1603 break # Redisplay
1617 break # Redisplay
1604 else:
1618 else:
1605 # if no key is pressed slow down and beep again
1619 # if no key is pressed slow down and beep again
1606 if c == -1:
1620 if c == -1:
1607 self.stepx = 1.
1621 self.stepx = 1.
1608 self.stepy = 1.
1622 self.stepy = 1.
1609 self._dobeep = True
1623 self._dobeep = True
1610 else:
1624 else:
1611 # if a different key was pressed slow down and beep too
1625 # if a different key was pressed slow down and beep too
1612 if c != lastc:
1626 if c != lastc:
1613 lastc = c
1627 lastc = c
1614 self.stepx = 1.
1628 self.stepx = 1.
1615 self.stepy = 1.
1629 self.stepy = 1.
1616 self._dobeep = True
1630 self._dobeep = True
1617 cmdname = self.keymap.get(c, None)
1631 cmdname = self.keymap.get(c, None)
1618 if cmdname is None:
1632 if cmdname is None:
1619 self.report(
1633 self.report(
1620 UnassignedKeyError("Unassigned key %s" %
1634 UnassignedKeyError("Unassigned key %s" %
1621 self.keylabel(c)))
1635 self.keylabel(c)))
1622 else:
1636 else:
1623 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1637 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1624 if cmdfunc is None:
1638 if cmdfunc is None:
1625 self.report(
1639 self.report(
1626 UnknownCommandError("Unknown command %r" %
1640 UnknownCommandError("Unknown command %r" %
1627 (cmdname,)))
1641 (cmdname,)))
1628 elif cmdfunc():
1642 elif cmdfunc():
1629 returnvalue = self.returnvalue
1643 returnvalue = self.returnvalue
1630 self.returnvalue = None
1644 self.returnvalue = None
1631 return returnvalue
1645 return returnvalue
1632 self.stepx = self.nextstepx(self.stepx)
1646 self.stepx = self.nextstepx(self.stepx)
1633 self.stepy = self.nextstepy(self.stepy)
1647 self.stepy = self.nextstepy(self.stepy)
1634 curses.flushinp() # get rid of type ahead
1648 curses.flushinp() # get rid of type ahead
1635 break # Redisplay
1649 break # Redisplay
1636 self.scr = None
1650 self.scr = None
1637
1651
1638 def display(self):
1652 def display(self):
1639 if hasattr(curses, "resize_term"):
1653 if hasattr(curses, "resize_term"):
1640 oldhandler = signal.signal(signal.SIGWINCH, self.sigwinchhandler)
1654 oldhandler = signal.signal(signal.SIGWINCH, self.sigwinchhandler)
1641 try:
1655 try:
1642 return curses.wrapper(self._dodisplay)
1656 return curses.wrapper(self._dodisplay)
1643 finally:
1657 finally:
1644 signal.signal(signal.SIGWINCH, oldhandler)
1658 signal.signal(signal.SIGWINCH, oldhandler)
1645 else:
1659 else:
1646 return curses.wrapper(self._dodisplay)
1660 return curses.wrapper(self._dodisplay)
@@ -1,5614 +1,5619 b''
1 2006-06-23 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
4 commands into the methods implementing them.
5
1 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
6 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
2
7
3 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
8 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
4 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
9 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
5 autoindent support was authored by Jin Liu.
10 autoindent support was authored by Jin Liu.
6
11
7 2006-06-22 Walter Doerwald <walter@livinglogic.de>
12 2006-06-22 Walter Doerwald <walter@livinglogic.de>
8
13
9 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
14 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
10 for keymaps with a custom class that simplifies handling.
15 for keymaps with a custom class that simplifies handling.
11
16
12 2006-06-19 Walter Doerwald <walter@livinglogic.de>
17 2006-06-19 Walter Doerwald <walter@livinglogic.de>
13
18
14 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
19 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
15 resizing. This requires Python 2.5 to work.
20 resizing. This requires Python 2.5 to work.
16
21
17 2006-06-16 Walter Doerwald <walter@livinglogic.de>
22 2006-06-16 Walter Doerwald <walter@livinglogic.de>
18
23
19 * IPython/Extensions/ibrowse.py: Add two new commands to
24 * IPython/Extensions/ibrowse.py: Add two new commands to
20 ibrowse: "hideattr" (mapped to "h") hides the attribute under
25 ibrowse: "hideattr" (mapped to "h") hides the attribute under
21 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
26 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
22 attributes again. Remapped the help command to "?". Display
27 attributes again. Remapped the help command to "?". Display
23 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
28 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
24 as keys for the "home" and "end" commands. Add three new commands
29 as keys for the "home" and "end" commands. Add three new commands
25 to the input mode for "find" and friends: "delend" (CTRL-K)
30 to the input mode for "find" and friends: "delend" (CTRL-K)
26 deletes to the end of line. "incsearchup" searches upwards in the
31 deletes to the end of line. "incsearchup" searches upwards in the
27 command history for an input that starts with the text before the cursor.
32 command history for an input that starts with the text before the cursor.
28 "incsearchdown" does the same downwards. Removed a bogus mapping of
33 "incsearchdown" does the same downwards. Removed a bogus mapping of
29 the x key to "delete".
34 the x key to "delete".
30
35
31 2006-06-15 Ville Vainio <vivainio@gmail.com>
36 2006-06-15 Ville Vainio <vivainio@gmail.com>
32
37
33 * iplib.py, hooks.py: Added new generate_prompt hook that can be
38 * iplib.py, hooks.py: Added new generate_prompt hook that can be
34 used to create prompts dynamically, instead of the "old" way of
39 used to create prompts dynamically, instead of the "old" way of
35 assigning "magic" strings to prompt_in1 and prompt_in2. The old
40 assigning "magic" strings to prompt_in1 and prompt_in2. The old
36 way still works (it's invoked by the default hook), of course.
41 way still works (it's invoked by the default hook), of course.
37
42
38 * Prompts.py: added generate_output_prompt hook for altering output
43 * Prompts.py: added generate_output_prompt hook for altering output
39 prompt
44 prompt
40
45
41 * Release.py: Changed version string to 0.7.3.svn.
46 * Release.py: Changed version string to 0.7.3.svn.
42
47
43 2006-06-15 Walter Doerwald <walter@livinglogic.de>
48 2006-06-15 Walter Doerwald <walter@livinglogic.de>
44
49
45 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
50 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
46 the call to fetch() always tries to fetch enough data for at least one
51 the call to fetch() always tries to fetch enough data for at least one
47 full screen. This makes it possible to simply call moveto(0,0,True) in
52 full screen. This makes it possible to simply call moveto(0,0,True) in
48 the constructor. Fix typos and removed the obsolete goto attribute.
53 the constructor. Fix typos and removed the obsolete goto attribute.
49
54
50 2006-06-12 Ville Vainio <vivainio@gmail.com>
55 2006-06-12 Ville Vainio <vivainio@gmail.com>
51
56
52 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
57 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
53 allowing $variable interpolation within multiline statements,
58 allowing $variable interpolation within multiline statements,
54 though so far only with "sh" profile for a testing period.
59 though so far only with "sh" profile for a testing period.
55 The patch also enables splitting long commands with \ but it
60 The patch also enables splitting long commands with \ but it
56 doesn't work properly yet.
61 doesn't work properly yet.
57
62
58 2006-06-12 Walter Doerwald <walter@livinglogic.de>
63 2006-06-12 Walter Doerwald <walter@livinglogic.de>
59
64
60 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
65 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
61 input history and the position of the cursor in the input history for
66 input history and the position of the cursor in the input history for
62 the find, findbackwards and goto command.
67 the find, findbackwards and goto command.
63
68
64 2006-06-10 Walter Doerwald <walter@livinglogic.de>
69 2006-06-10 Walter Doerwald <walter@livinglogic.de>
65
70
66 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
71 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
67 implements the basic functionality of browser commands that require
72 implements the basic functionality of browser commands that require
68 input. Reimplement the goto, find and findbackwards commands as
73 input. Reimplement the goto, find and findbackwards commands as
69 subclasses of _CommandInput. Add an input history and keymaps to those
74 subclasses of _CommandInput. Add an input history and keymaps to those
70 commands. Add "\r" as a keyboard shortcut for the enterdefault and
75 commands. Add "\r" as a keyboard shortcut for the enterdefault and
71 execute commands.
76 execute commands.
72
77
73 2006-06-07 Ville Vainio <vivainio@gmail.com>
78 2006-06-07 Ville Vainio <vivainio@gmail.com>
74
79
75 * iplib.py: ipython mybatch.ipy exits ipython immediately after
80 * iplib.py: ipython mybatch.ipy exits ipython immediately after
76 running the batch files instead of leaving the session open.
81 running the batch files instead of leaving the session open.
77
82
78 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
83 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
79
84
80 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
85 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
81 the original fix was incomplete. Patch submitted by W. Maier.
86 the original fix was incomplete. Patch submitted by W. Maier.
82
87
83 2006-06-07 Ville Vainio <vivainio@gmail.com>
88 2006-06-07 Ville Vainio <vivainio@gmail.com>
84
89
85 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
90 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
86 Confirmation prompts can be supressed by 'quiet' option.
91 Confirmation prompts can be supressed by 'quiet' option.
87 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
92 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
88
93
89 2006-06-06 *** Released version 0.7.2
94 2006-06-06 *** Released version 0.7.2
90
95
91 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
96 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
92
97
93 * IPython/Release.py (version): Made 0.7.2 final for release.
98 * IPython/Release.py (version): Made 0.7.2 final for release.
94 Repo tagged and release cut.
99 Repo tagged and release cut.
95
100
96 2006-06-05 Ville Vainio <vivainio@gmail.com>
101 2006-06-05 Ville Vainio <vivainio@gmail.com>
97
102
98 * Magic.py (magic_rehashx): Honor no_alias list earlier in
103 * Magic.py (magic_rehashx): Honor no_alias list earlier in
99 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
104 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
100
105
101 * upgrade_dir.py: try import 'path' module a bit harder
106 * upgrade_dir.py: try import 'path' module a bit harder
102 (for %upgrade)
107 (for %upgrade)
103
108
104 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
109 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
105
110
106 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
111 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
107 instead of looping 20 times.
112 instead of looping 20 times.
108
113
109 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
114 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
110 correctly at initialization time. Bug reported by Krishna Mohan
115 correctly at initialization time. Bug reported by Krishna Mohan
111 Gundu <gkmohan-AT-gmail.com> on the user list.
116 Gundu <gkmohan-AT-gmail.com> on the user list.
112
117
113 * IPython/Release.py (version): Mark 0.7.2 version to start
118 * IPython/Release.py (version): Mark 0.7.2 version to start
114 testing for release on 06/06.
119 testing for release on 06/06.
115
120
116 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
121 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
117
122
118 * scripts/irunner: thin script interface so users don't have to
123 * scripts/irunner: thin script interface so users don't have to
119 find the module and call it as an executable, since modules rarely
124 find the module and call it as an executable, since modules rarely
120 live in people's PATH.
125 live in people's PATH.
121
126
122 * IPython/irunner.py (InteractiveRunner.__init__): added
127 * IPython/irunner.py (InteractiveRunner.__init__): added
123 delaybeforesend attribute to control delays with newer versions of
128 delaybeforesend attribute to control delays with newer versions of
124 pexpect. Thanks to detailed help from pexpect's author, Noah
129 pexpect. Thanks to detailed help from pexpect's author, Noah
125 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
130 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
126 correctly (it works in NoColor mode).
131 correctly (it works in NoColor mode).
127
132
128 * IPython/iplib.py (handle_normal): fix nasty crash reported on
133 * IPython/iplib.py (handle_normal): fix nasty crash reported on
129 SAGE list, from improper log() calls.
134 SAGE list, from improper log() calls.
130
135
131 2006-05-31 Ville Vainio <vivainio@gmail.com>
136 2006-05-31 Ville Vainio <vivainio@gmail.com>
132
137
133 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
138 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
134 with args in parens to work correctly with dirs that have spaces.
139 with args in parens to work correctly with dirs that have spaces.
135
140
136 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
141 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
137
142
138 * IPython/Logger.py (Logger.logstart): add option to log raw input
143 * IPython/Logger.py (Logger.logstart): add option to log raw input
139 instead of the processed one. A -r flag was added to the
144 instead of the processed one. A -r flag was added to the
140 %logstart magic used for controlling logging.
145 %logstart magic used for controlling logging.
141
146
142 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
147 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
143
148
144 * IPython/iplib.py (InteractiveShell.__init__): add check for the
149 * IPython/iplib.py (InteractiveShell.__init__): add check for the
145 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
150 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
146 recognize the option. After a bug report by Will Maier. This
151 recognize the option. After a bug report by Will Maier. This
147 closes #64 (will do it after confirmation from W. Maier).
152 closes #64 (will do it after confirmation from W. Maier).
148
153
149 * IPython/irunner.py: New module to run scripts as if manually
154 * IPython/irunner.py: New module to run scripts as if manually
150 typed into an interactive environment, based on pexpect. After a
155 typed into an interactive environment, based on pexpect. After a
151 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
156 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
152 ipython-user list. Simple unittests in the tests/ directory.
157 ipython-user list. Simple unittests in the tests/ directory.
153
158
154 * tools/release: add Will Maier, OpenBSD port maintainer, to
159 * tools/release: add Will Maier, OpenBSD port maintainer, to
155 recepients list. We are now officially part of the OpenBSD ports:
160 recepients list. We are now officially part of the OpenBSD ports:
156 http://www.openbsd.org/ports.html ! Many thanks to Will for the
161 http://www.openbsd.org/ports.html ! Many thanks to Will for the
157 work.
162 work.
158
163
159 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
164 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
160
165
161 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
166 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
162 so that it doesn't break tkinter apps.
167 so that it doesn't break tkinter apps.
163
168
164 * IPython/iplib.py (_prefilter): fix bug where aliases would
169 * IPython/iplib.py (_prefilter): fix bug where aliases would
165 shadow variables when autocall was fully off. Reported by SAGE
170 shadow variables when autocall was fully off. Reported by SAGE
166 author William Stein.
171 author William Stein.
167
172
168 * IPython/OInspect.py (Inspector.__init__): add a flag to control
173 * IPython/OInspect.py (Inspector.__init__): add a flag to control
169 at what detail level strings are computed when foo? is requested.
174 at what detail level strings are computed when foo? is requested.
170 This allows users to ask for example that the string form of an
175 This allows users to ask for example that the string form of an
171 object is only computed when foo?? is called, or even never, by
176 object is only computed when foo?? is called, or even never, by
172 setting the object_info_string_level >= 2 in the configuration
177 setting the object_info_string_level >= 2 in the configuration
173 file. This new option has been added and documented. After a
178 file. This new option has been added and documented. After a
174 request by SAGE to be able to control the printing of very large
179 request by SAGE to be able to control the printing of very large
175 objects more easily.
180 objects more easily.
176
181
177 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
182 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
178
183
179 * IPython/ipmaker.py (make_IPython): remove the ipython call path
184 * IPython/ipmaker.py (make_IPython): remove the ipython call path
180 from sys.argv, to be 100% consistent with how Python itself works
185 from sys.argv, to be 100% consistent with how Python itself works
181 (as seen for example with python -i file.py). After a bug report
186 (as seen for example with python -i file.py). After a bug report
182 by Jeffrey Collins.
187 by Jeffrey Collins.
183
188
184 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
189 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
185 nasty bug which was preventing custom namespaces with -pylab,
190 nasty bug which was preventing custom namespaces with -pylab,
186 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
191 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
187 compatibility (long gone from mpl).
192 compatibility (long gone from mpl).
188
193
189 * IPython/ipapi.py (make_session): name change: create->make. We
194 * IPython/ipapi.py (make_session): name change: create->make. We
190 use make in other places (ipmaker,...), it's shorter and easier to
195 use make in other places (ipmaker,...), it's shorter and easier to
191 type and say, etc. I'm trying to clean things before 0.7.2 so
196 type and say, etc. I'm trying to clean things before 0.7.2 so
192 that I can keep things stable wrt to ipapi in the chainsaw branch.
197 that I can keep things stable wrt to ipapi in the chainsaw branch.
193
198
194 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
199 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
195 python-mode recognizes our debugger mode. Add support for
200 python-mode recognizes our debugger mode. Add support for
196 autoindent inside (X)emacs. After a patch sent in by Jin Liu
201 autoindent inside (X)emacs. After a patch sent in by Jin Liu
197 <m.liu.jin-AT-gmail.com> originally written by
202 <m.liu.jin-AT-gmail.com> originally written by
198 doxgen-AT-newsmth.net (with minor modifications for xemacs
203 doxgen-AT-newsmth.net (with minor modifications for xemacs
199 compatibility)
204 compatibility)
200
205
201 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
206 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
202 tracebacks when walking the stack so that the stack tracking system
207 tracebacks when walking the stack so that the stack tracking system
203 in emacs' python-mode can identify the frames correctly.
208 in emacs' python-mode can identify the frames correctly.
204
209
205 * IPython/ipmaker.py (make_IPython): make the internal (and
210 * IPython/ipmaker.py (make_IPython): make the internal (and
206 default config) autoedit_syntax value false by default. Too many
211 default config) autoedit_syntax value false by default. Too many
207 users have complained to me (both on and off-list) about problems
212 users have complained to me (both on and off-list) about problems
208 with this option being on by default, so I'm making it default to
213 with this option being on by default, so I'm making it default to
209 off. It can still be enabled by anyone via the usual mechanisms.
214 off. It can still be enabled by anyone via the usual mechanisms.
210
215
211 * IPython/completer.py (Completer.attr_matches): add support for
216 * IPython/completer.py (Completer.attr_matches): add support for
212 PyCrust-style _getAttributeNames magic method. Patch contributed
217 PyCrust-style _getAttributeNames magic method. Patch contributed
213 by <mscott-AT-goldenspud.com>. Closes #50.
218 by <mscott-AT-goldenspud.com>. Closes #50.
214
219
215 * IPython/iplib.py (InteractiveShell.__init__): remove the
220 * IPython/iplib.py (InteractiveShell.__init__): remove the
216 deletion of exit/quit from __builtin__, which can break
221 deletion of exit/quit from __builtin__, which can break
217 third-party tools like the Zope debugging console. The
222 third-party tools like the Zope debugging console. The
218 %exit/%quit magics remain. In general, it's probably a good idea
223 %exit/%quit magics remain. In general, it's probably a good idea
219 not to delete anything from __builtin__, since we never know what
224 not to delete anything from __builtin__, since we never know what
220 that will break. In any case, python now (for 2.5) will support
225 that will break. In any case, python now (for 2.5) will support
221 'real' exit/quit, so this issue is moot. Closes #55.
226 'real' exit/quit, so this issue is moot. Closes #55.
222
227
223 * IPython/genutils.py (with_obj): rename the 'with' function to
228 * IPython/genutils.py (with_obj): rename the 'with' function to
224 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
229 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
225 becomes a language keyword. Closes #53.
230 becomes a language keyword. Closes #53.
226
231
227 * IPython/FakeModule.py (FakeModule.__init__): add a proper
232 * IPython/FakeModule.py (FakeModule.__init__): add a proper
228 __file__ attribute to this so it fools more things into thinking
233 __file__ attribute to this so it fools more things into thinking
229 it is a real module. Closes #59.
234 it is a real module. Closes #59.
230
235
231 * IPython/Magic.py (magic_edit): add -n option to open the editor
236 * IPython/Magic.py (magic_edit): add -n option to open the editor
232 at a specific line number. After a patch by Stefan van der Walt.
237 at a specific line number. After a patch by Stefan van der Walt.
233
238
234 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
239 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
235
240
236 * IPython/iplib.py (edit_syntax_error): fix crash when for some
241 * IPython/iplib.py (edit_syntax_error): fix crash when for some
237 reason the file could not be opened. After automatic crash
242 reason the file could not be opened. After automatic crash
238 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
243 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
239 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
244 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
240 (_should_recompile): Don't fire editor if using %bg, since there
245 (_should_recompile): Don't fire editor if using %bg, since there
241 is no file in the first place. From the same report as above.
246 is no file in the first place. From the same report as above.
242 (raw_input): protect against faulty third-party prefilters. After
247 (raw_input): protect against faulty third-party prefilters. After
243 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
248 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
244 while running under SAGE.
249 while running under SAGE.
245
250
246 2006-05-23 Ville Vainio <vivainio@gmail.com>
251 2006-05-23 Ville Vainio <vivainio@gmail.com>
247
252
248 * ipapi.py: Stripped down ip.to_user_ns() to work only as
253 * ipapi.py: Stripped down ip.to_user_ns() to work only as
249 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
254 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
250 now returns None (again), unless dummy is specifically allowed by
255 now returns None (again), unless dummy is specifically allowed by
251 ipapi.get(allow_dummy=True).
256 ipapi.get(allow_dummy=True).
252
257
253 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
258 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
254
259
255 * IPython: remove all 2.2-compatibility objects and hacks from
260 * IPython: remove all 2.2-compatibility objects and hacks from
256 everywhere, since we only support 2.3 at this point. Docs
261 everywhere, since we only support 2.3 at this point. Docs
257 updated.
262 updated.
258
263
259 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
264 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
260 Anything requiring extra validation can be turned into a Python
265 Anything requiring extra validation can be turned into a Python
261 property in the future. I used a property for the db one b/c
266 property in the future. I used a property for the db one b/c
262 there was a nasty circularity problem with the initialization
267 there was a nasty circularity problem with the initialization
263 order, which right now I don't have time to clean up.
268 order, which right now I don't have time to clean up.
264
269
265 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
270 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
266 another locking bug reported by Jorgen. I'm not 100% sure though,
271 another locking bug reported by Jorgen. I'm not 100% sure though,
267 so more testing is needed...
272 so more testing is needed...
268
273
269 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
274 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
270
275
271 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
276 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
272 local variables from any routine in user code (typically executed
277 local variables from any routine in user code (typically executed
273 with %run) directly into the interactive namespace. Very useful
278 with %run) directly into the interactive namespace. Very useful
274 when doing complex debugging.
279 when doing complex debugging.
275 (IPythonNotRunning): Changed the default None object to a dummy
280 (IPythonNotRunning): Changed the default None object to a dummy
276 whose attributes can be queried as well as called without
281 whose attributes can be queried as well as called without
277 exploding, to ease writing code which works transparently both in
282 exploding, to ease writing code which works transparently both in
278 and out of ipython and uses some of this API.
283 and out of ipython and uses some of this API.
279
284
280 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
285 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
281
286
282 * IPython/hooks.py (result_display): Fix the fact that our display
287 * IPython/hooks.py (result_display): Fix the fact that our display
283 hook was using str() instead of repr(), as the default python
288 hook was using str() instead of repr(), as the default python
284 console does. This had gone unnoticed b/c it only happened if
289 console does. This had gone unnoticed b/c it only happened if
285 %Pprint was off, but the inconsistency was there.
290 %Pprint was off, but the inconsistency was there.
286
291
287 2006-05-15 Ville Vainio <vivainio@gmail.com>
292 2006-05-15 Ville Vainio <vivainio@gmail.com>
288
293
289 * Oinspect.py: Only show docstring for nonexisting/binary files
294 * Oinspect.py: Only show docstring for nonexisting/binary files
290 when doing object??, closing ticket #62
295 when doing object??, closing ticket #62
291
296
292 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
297 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
293
298
294 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
299 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
295 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
300 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
296 was being released in a routine which hadn't checked if it had
301 was being released in a routine which hadn't checked if it had
297 been the one to acquire it.
302 been the one to acquire it.
298
303
299 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
304 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
300
305
301 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
306 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
302
307
303 2006-04-11 Ville Vainio <vivainio@gmail.com>
308 2006-04-11 Ville Vainio <vivainio@gmail.com>
304
309
305 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
310 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
306 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
311 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
307 prefilters, allowing stuff like magics and aliases in the file.
312 prefilters, allowing stuff like magics and aliases in the file.
308
313
309 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
314 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
310 added. Supported now are "%clear in" and "%clear out" (clear input and
315 added. Supported now are "%clear in" and "%clear out" (clear input and
311 output history, respectively). Also fixed CachedOutput.flush to
316 output history, respectively). Also fixed CachedOutput.flush to
312 properly flush the output cache.
317 properly flush the output cache.
313
318
314 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
319 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
315 half-success (and fail explicitly).
320 half-success (and fail explicitly).
316
321
317 2006-03-28 Ville Vainio <vivainio@gmail.com>
322 2006-03-28 Ville Vainio <vivainio@gmail.com>
318
323
319 * iplib.py: Fix quoting of aliases so that only argless ones
324 * iplib.py: Fix quoting of aliases so that only argless ones
320 are quoted
325 are quoted
321
326
322 2006-03-28 Ville Vainio <vivainio@gmail.com>
327 2006-03-28 Ville Vainio <vivainio@gmail.com>
323
328
324 * iplib.py: Quote aliases with spaces in the name.
329 * iplib.py: Quote aliases with spaces in the name.
325 "c:\program files\blah\bin" is now legal alias target.
330 "c:\program files\blah\bin" is now legal alias target.
326
331
327 * ext_rehashdir.py: Space no longer allowed as arg
332 * ext_rehashdir.py: Space no longer allowed as arg
328 separator, since space is legal in path names.
333 separator, since space is legal in path names.
329
334
330 2006-03-16 Ville Vainio <vivainio@gmail.com>
335 2006-03-16 Ville Vainio <vivainio@gmail.com>
331
336
332 * upgrade_dir.py: Take path.py from Extensions, correcting
337 * upgrade_dir.py: Take path.py from Extensions, correcting
333 %upgrade magic
338 %upgrade magic
334
339
335 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
340 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
336
341
337 * hooks.py: Only enclose editor binary in quotes if legal and
342 * hooks.py: Only enclose editor binary in quotes if legal and
338 necessary (space in the name, and is an existing file). Fixes a bug
343 necessary (space in the name, and is an existing file). Fixes a bug
339 reported by Zachary Pincus.
344 reported by Zachary Pincus.
340
345
341 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
346 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
342
347
343 * Manual: thanks to a tip on proper color handling for Emacs, by
348 * Manual: thanks to a tip on proper color handling for Emacs, by
344 Eric J Haywiser <ejh1-AT-MIT.EDU>.
349 Eric J Haywiser <ejh1-AT-MIT.EDU>.
345
350
346 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
351 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
347 by applying the provided patch. Thanks to Liu Jin
352 by applying the provided patch. Thanks to Liu Jin
348 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
353 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
349 XEmacs/Linux, I'm trusting the submitter that it actually helps
354 XEmacs/Linux, I'm trusting the submitter that it actually helps
350 under win32/GNU Emacs. Will revisit if any problems are reported.
355 under win32/GNU Emacs. Will revisit if any problems are reported.
351
356
352 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
357 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
353
358
354 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
359 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
355 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
360 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
356
361
357 2006-03-12 Ville Vainio <vivainio@gmail.com>
362 2006-03-12 Ville Vainio <vivainio@gmail.com>
358
363
359 * Magic.py (magic_timeit): Added %timeit magic, contributed by
364 * Magic.py (magic_timeit): Added %timeit magic, contributed by
360 Torsten Marek.
365 Torsten Marek.
361
366
362 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
367 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
363
368
364 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
369 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
365 line ranges works again.
370 line ranges works again.
366
371
367 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
372 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
368
373
369 * IPython/iplib.py (showtraceback): add back sys.last_traceback
374 * IPython/iplib.py (showtraceback): add back sys.last_traceback
370 and friends, after a discussion with Zach Pincus on ipython-user.
375 and friends, after a discussion with Zach Pincus on ipython-user.
371 I'm not 100% sure, but after thinking about it quite a bit, it may
376 I'm not 100% sure, but after thinking about it quite a bit, it may
372 be OK. Testing with the multithreaded shells didn't reveal any
377 be OK. Testing with the multithreaded shells didn't reveal any
373 problems, but let's keep an eye out.
378 problems, but let's keep an eye out.
374
379
375 In the process, I fixed a few things which were calling
380 In the process, I fixed a few things which were calling
376 self.InteractiveTB() directly (like safe_execfile), which is a
381 self.InteractiveTB() directly (like safe_execfile), which is a
377 mistake: ALL exception reporting should be done by calling
382 mistake: ALL exception reporting should be done by calling
378 self.showtraceback(), which handles state and tab-completion and
383 self.showtraceback(), which handles state and tab-completion and
379 more.
384 more.
380
385
381 2006-03-01 Ville Vainio <vivainio@gmail.com>
386 2006-03-01 Ville Vainio <vivainio@gmail.com>
382
387
383 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
388 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
384 To use, do "from ipipe import *".
389 To use, do "from ipipe import *".
385
390
386 2006-02-24 Ville Vainio <vivainio@gmail.com>
391 2006-02-24 Ville Vainio <vivainio@gmail.com>
387
392
388 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
393 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
389 "cleanly" and safely than the older upgrade mechanism.
394 "cleanly" and safely than the older upgrade mechanism.
390
395
391 2006-02-21 Ville Vainio <vivainio@gmail.com>
396 2006-02-21 Ville Vainio <vivainio@gmail.com>
392
397
393 * Magic.py: %save works again.
398 * Magic.py: %save works again.
394
399
395 2006-02-15 Ville Vainio <vivainio@gmail.com>
400 2006-02-15 Ville Vainio <vivainio@gmail.com>
396
401
397 * Magic.py: %Pprint works again
402 * Magic.py: %Pprint works again
398
403
399 * Extensions/ipy_sane_defaults.py: Provide everything provided
404 * Extensions/ipy_sane_defaults.py: Provide everything provided
400 in default ipythonrc, to make it possible to have a completely empty
405 in default ipythonrc, to make it possible to have a completely empty
401 ipythonrc (and thus completely rc-file free configuration)
406 ipythonrc (and thus completely rc-file free configuration)
402
407
403 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
408 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
404
409
405 * IPython/hooks.py (editor): quote the call to the editor command,
410 * IPython/hooks.py (editor): quote the call to the editor command,
406 to allow commands with spaces in them. Problem noted by watching
411 to allow commands with spaces in them. Problem noted by watching
407 Ian Oswald's video about textpad under win32 at
412 Ian Oswald's video about textpad under win32 at
408 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
413 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
409
414
410 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
415 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
411 describing magics (we haven't used @ for a loong time).
416 describing magics (we haven't used @ for a loong time).
412
417
413 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
418 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
414 contributed by marienz to close
419 contributed by marienz to close
415 http://www.scipy.net/roundup/ipython/issue53.
420 http://www.scipy.net/roundup/ipython/issue53.
416
421
417 2006-02-10 Ville Vainio <vivainio@gmail.com>
422 2006-02-10 Ville Vainio <vivainio@gmail.com>
418
423
419 * genutils.py: getoutput now works in win32 too
424 * genutils.py: getoutput now works in win32 too
420
425
421 * completer.py: alias and magic completion only invoked
426 * completer.py: alias and magic completion only invoked
422 at the first "item" in the line, to avoid "cd %store"
427 at the first "item" in the line, to avoid "cd %store"
423 nonsense.
428 nonsense.
424
429
425 2006-02-09 Ville Vainio <vivainio@gmail.com>
430 2006-02-09 Ville Vainio <vivainio@gmail.com>
426
431
427 * test/*: Added a unit testing framework (finally).
432 * test/*: Added a unit testing framework (finally).
428 '%run runtests.py' to run test_*.
433 '%run runtests.py' to run test_*.
429
434
430 * ipapi.py: Exposed runlines and set_custom_exc
435 * ipapi.py: Exposed runlines and set_custom_exc
431
436
432 2006-02-07 Ville Vainio <vivainio@gmail.com>
437 2006-02-07 Ville Vainio <vivainio@gmail.com>
433
438
434 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
439 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
435 instead use "f(1 2)" as before.
440 instead use "f(1 2)" as before.
436
441
437 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
442 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
438
443
439 * IPython/demo.py (IPythonDemo): Add new classes to the demo
444 * IPython/demo.py (IPythonDemo): Add new classes to the demo
440 facilities, for demos processed by the IPython input filter
445 facilities, for demos processed by the IPython input filter
441 (IPythonDemo), and for running a script one-line-at-a-time as a
446 (IPythonDemo), and for running a script one-line-at-a-time as a
442 demo, both for pure Python (LineDemo) and for IPython-processed
447 demo, both for pure Python (LineDemo) and for IPython-processed
443 input (IPythonLineDemo). After a request by Dave Kohel, from the
448 input (IPythonLineDemo). After a request by Dave Kohel, from the
444 SAGE team.
449 SAGE team.
445 (Demo.edit): added an edit() method to the demo objects, to edit
450 (Demo.edit): added an edit() method to the demo objects, to edit
446 the in-memory copy of the last executed block.
451 the in-memory copy of the last executed block.
447
452
448 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
453 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
449 processing to %edit, %macro and %save. These commands can now be
454 processing to %edit, %macro and %save. These commands can now be
450 invoked on the unprocessed input as it was typed by the user
455 invoked on the unprocessed input as it was typed by the user
451 (without any prefilters applied). After requests by the SAGE team
456 (without any prefilters applied). After requests by the SAGE team
452 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
457 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
453
458
454 2006-02-01 Ville Vainio <vivainio@gmail.com>
459 2006-02-01 Ville Vainio <vivainio@gmail.com>
455
460
456 * setup.py, eggsetup.py: easy_install ipython==dev works
461 * setup.py, eggsetup.py: easy_install ipython==dev works
457 correctly now (on Linux)
462 correctly now (on Linux)
458
463
459 * ipy_user_conf,ipmaker: user config changes, removed spurious
464 * ipy_user_conf,ipmaker: user config changes, removed spurious
460 warnings
465 warnings
461
466
462 * iplib: if rc.banner is string, use it as is.
467 * iplib: if rc.banner is string, use it as is.
463
468
464 * Magic: %pycat accepts a string argument and pages it's contents.
469 * Magic: %pycat accepts a string argument and pages it's contents.
465
470
466
471
467 2006-01-30 Ville Vainio <vivainio@gmail.com>
472 2006-01-30 Ville Vainio <vivainio@gmail.com>
468
473
469 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
474 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
470 Now %store and bookmarks work through PickleShare, meaning that
475 Now %store and bookmarks work through PickleShare, meaning that
471 concurrent access is possible and all ipython sessions see the
476 concurrent access is possible and all ipython sessions see the
472 same database situation all the time, instead of snapshot of
477 same database situation all the time, instead of snapshot of
473 the situation when the session was started. Hence, %bookmark
478 the situation when the session was started. Hence, %bookmark
474 results are immediately accessible from othes sessions. The database
479 results are immediately accessible from othes sessions. The database
475 is also available for use by user extensions. See:
480 is also available for use by user extensions. See:
476 http://www.python.org/pypi/pickleshare
481 http://www.python.org/pypi/pickleshare
477
482
478 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
483 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
479
484
480 * aliases can now be %store'd
485 * aliases can now be %store'd
481
486
482 * path.py moved to Extensions so that pickleshare does not need
487 * path.py moved to Extensions so that pickleshare does not need
483 IPython-specific import. Extensions added to pythonpath right
488 IPython-specific import. Extensions added to pythonpath right
484 at __init__.
489 at __init__.
485
490
486 * iplib.py: ipalias deprecated/redundant; aliases are converted and
491 * iplib.py: ipalias deprecated/redundant; aliases are converted and
487 called with _ip.system and the pre-transformed command string.
492 called with _ip.system and the pre-transformed command string.
488
493
489 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
494 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
490
495
491 * IPython/iplib.py (interact): Fix that we were not catching
496 * IPython/iplib.py (interact): Fix that we were not catching
492 KeyboardInterrupt exceptions properly. I'm not quite sure why the
497 KeyboardInterrupt exceptions properly. I'm not quite sure why the
493 logic here had to change, but it's fixed now.
498 logic here had to change, but it's fixed now.
494
499
495 2006-01-29 Ville Vainio <vivainio@gmail.com>
500 2006-01-29 Ville Vainio <vivainio@gmail.com>
496
501
497 * iplib.py: Try to import pyreadline on Windows.
502 * iplib.py: Try to import pyreadline on Windows.
498
503
499 2006-01-27 Ville Vainio <vivainio@gmail.com>
504 2006-01-27 Ville Vainio <vivainio@gmail.com>
500
505
501 * iplib.py: Expose ipapi as _ip in builtin namespace.
506 * iplib.py: Expose ipapi as _ip in builtin namespace.
502 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
507 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
503 and ip_set_hook (-> _ip.set_hook) redundant. % and !
508 and ip_set_hook (-> _ip.set_hook) redundant. % and !
504 syntax now produce _ip.* variant of the commands.
509 syntax now produce _ip.* variant of the commands.
505
510
506 * "_ip.options().autoedit_syntax = 2" automatically throws
511 * "_ip.options().autoedit_syntax = 2" automatically throws
507 user to editor for syntax error correction without prompting.
512 user to editor for syntax error correction without prompting.
508
513
509 2006-01-27 Ville Vainio <vivainio@gmail.com>
514 2006-01-27 Ville Vainio <vivainio@gmail.com>
510
515
511 * ipmaker.py: Give "realistic" sys.argv for scripts (without
516 * ipmaker.py: Give "realistic" sys.argv for scripts (without
512 'ipython' at argv[0]) executed through command line.
517 'ipython' at argv[0]) executed through command line.
513 NOTE: this DEPRECATES calling ipython with multiple scripts
518 NOTE: this DEPRECATES calling ipython with multiple scripts
514 ("ipython a.py b.py c.py")
519 ("ipython a.py b.py c.py")
515
520
516 * iplib.py, hooks.py: Added configurable input prefilter,
521 * iplib.py, hooks.py: Added configurable input prefilter,
517 named 'input_prefilter'. See ext_rescapture.py for example
522 named 'input_prefilter'. See ext_rescapture.py for example
518 usage.
523 usage.
519
524
520 * ext_rescapture.py, Magic.py: Better system command output capture
525 * ext_rescapture.py, Magic.py: Better system command output capture
521 through 'var = !ls' (deprecates user-visible %sc). Same notation
526 through 'var = !ls' (deprecates user-visible %sc). Same notation
522 applies for magics, 'var = %alias' assigns alias list to var.
527 applies for magics, 'var = %alias' assigns alias list to var.
523
528
524 * ipapi.py: added meta() for accessing extension-usable data store.
529 * ipapi.py: added meta() for accessing extension-usable data store.
525
530
526 * iplib.py: added InteractiveShell.getapi(). New magics should be
531 * iplib.py: added InteractiveShell.getapi(). New magics should be
527 written doing self.getapi() instead of using the shell directly.
532 written doing self.getapi() instead of using the shell directly.
528
533
529 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
534 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
530 %store foo >> ~/myfoo.txt to store variables to files (in clean
535 %store foo >> ~/myfoo.txt to store variables to files (in clean
531 textual form, not a restorable pickle).
536 textual form, not a restorable pickle).
532
537
533 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
538 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
534
539
535 * usage.py, Magic.py: added %quickref
540 * usage.py, Magic.py: added %quickref
536
541
537 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
542 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
538
543
539 * GetoptErrors when invoking magics etc. with wrong args
544 * GetoptErrors when invoking magics etc. with wrong args
540 are now more helpful:
545 are now more helpful:
541 GetoptError: option -l not recognized (allowed: "qb" )
546 GetoptError: option -l not recognized (allowed: "qb" )
542
547
543 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
548 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
544
549
545 * IPython/demo.py (Demo.show): Flush stdout after each block, so
550 * IPython/demo.py (Demo.show): Flush stdout after each block, so
546 computationally intensive blocks don't appear to stall the demo.
551 computationally intensive blocks don't appear to stall the demo.
547
552
548 2006-01-24 Ville Vainio <vivainio@gmail.com>
553 2006-01-24 Ville Vainio <vivainio@gmail.com>
549
554
550 * iplib.py, hooks.py: 'result_display' hook can return a non-None
555 * iplib.py, hooks.py: 'result_display' hook can return a non-None
551 value to manipulate resulting history entry.
556 value to manipulate resulting history entry.
552
557
553 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
558 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
554 to instance methods of IPApi class, to make extending an embedded
559 to instance methods of IPApi class, to make extending an embedded
555 IPython feasible. See ext_rehashdir.py for example usage.
560 IPython feasible. See ext_rehashdir.py for example usage.
556
561
557 * Merged 1071-1076 from branches/0.7.1
562 * Merged 1071-1076 from branches/0.7.1
558
563
559
564
560 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
565 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
561
566
562 * tools/release (daystamp): Fix build tools to use the new
567 * tools/release (daystamp): Fix build tools to use the new
563 eggsetup.py script to build lightweight eggs.
568 eggsetup.py script to build lightweight eggs.
564
569
565 * Applied changesets 1062 and 1064 before 0.7.1 release.
570 * Applied changesets 1062 and 1064 before 0.7.1 release.
566
571
567 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
572 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
568 see the raw input history (without conversions like %ls ->
573 see the raw input history (without conversions like %ls ->
569 ipmagic("ls")). After a request from W. Stein, SAGE
574 ipmagic("ls")). After a request from W. Stein, SAGE
570 (http://modular.ucsd.edu/sage) developer. This information is
575 (http://modular.ucsd.edu/sage) developer. This information is
571 stored in the input_hist_raw attribute of the IPython instance, so
576 stored in the input_hist_raw attribute of the IPython instance, so
572 developers can access it if needed (it's an InputList instance).
577 developers can access it if needed (it's an InputList instance).
573
578
574 * Versionstring = 0.7.2.svn
579 * Versionstring = 0.7.2.svn
575
580
576 * eggsetup.py: A separate script for constructing eggs, creates
581 * eggsetup.py: A separate script for constructing eggs, creates
577 proper launch scripts even on Windows (an .exe file in
582 proper launch scripts even on Windows (an .exe file in
578 \python24\scripts).
583 \python24\scripts).
579
584
580 * ipapi.py: launch_new_instance, launch entry point needed for the
585 * ipapi.py: launch_new_instance, launch entry point needed for the
581 egg.
586 egg.
582
587
583 2006-01-23 Ville Vainio <vivainio@gmail.com>
588 2006-01-23 Ville Vainio <vivainio@gmail.com>
584
589
585 * Added %cpaste magic for pasting python code
590 * Added %cpaste magic for pasting python code
586
591
587 2006-01-22 Ville Vainio <vivainio@gmail.com>
592 2006-01-22 Ville Vainio <vivainio@gmail.com>
588
593
589 * Merge from branches/0.7.1 into trunk, revs 1052-1057
594 * Merge from branches/0.7.1 into trunk, revs 1052-1057
590
595
591 * Versionstring = 0.7.2.svn
596 * Versionstring = 0.7.2.svn
592
597
593 * eggsetup.py: A separate script for constructing eggs, creates
598 * eggsetup.py: A separate script for constructing eggs, creates
594 proper launch scripts even on Windows (an .exe file in
599 proper launch scripts even on Windows (an .exe file in
595 \python24\scripts).
600 \python24\scripts).
596
601
597 * ipapi.py: launch_new_instance, launch entry point needed for the
602 * ipapi.py: launch_new_instance, launch entry point needed for the
598 egg.
603 egg.
599
604
600 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
605 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
601
606
602 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
607 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
603 %pfile foo would print the file for foo even if it was a binary.
608 %pfile foo would print the file for foo even if it was a binary.
604 Now, extensions '.so' and '.dll' are skipped.
609 Now, extensions '.so' and '.dll' are skipped.
605
610
606 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
611 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
607 bug, where macros would fail in all threaded modes. I'm not 100%
612 bug, where macros would fail in all threaded modes. I'm not 100%
608 sure, so I'm going to put out an rc instead of making a release
613 sure, so I'm going to put out an rc instead of making a release
609 today, and wait for feedback for at least a few days.
614 today, and wait for feedback for at least a few days.
610
615
611 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
616 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
612 it...) the handling of pasting external code with autoindent on.
617 it...) the handling of pasting external code with autoindent on.
613 To get out of a multiline input, the rule will appear for most
618 To get out of a multiline input, the rule will appear for most
614 users unchanged: two blank lines or change the indent level
619 users unchanged: two blank lines or change the indent level
615 proposed by IPython. But there is a twist now: you can
620 proposed by IPython. But there is a twist now: you can
616 add/subtract only *one or two spaces*. If you add/subtract three
621 add/subtract only *one or two spaces*. If you add/subtract three
617 or more (unless you completely delete the line), IPython will
622 or more (unless you completely delete the line), IPython will
618 accept that line, and you'll need to enter a second one of pure
623 accept that line, and you'll need to enter a second one of pure
619 whitespace. I know it sounds complicated, but I can't find a
624 whitespace. I know it sounds complicated, but I can't find a
620 different solution that covers all the cases, with the right
625 different solution that covers all the cases, with the right
621 heuristics. Hopefully in actual use, nobody will really notice
626 heuristics. Hopefully in actual use, nobody will really notice
622 all these strange rules and things will 'just work'.
627 all these strange rules and things will 'just work'.
623
628
624 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
629 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
625
630
626 * IPython/iplib.py (interact): catch exceptions which can be
631 * IPython/iplib.py (interact): catch exceptions which can be
627 triggered asynchronously by signal handlers. Thanks to an
632 triggered asynchronously by signal handlers. Thanks to an
628 automatic crash report, submitted by Colin Kingsley
633 automatic crash report, submitted by Colin Kingsley
629 <tercel-AT-gentoo.org>.
634 <tercel-AT-gentoo.org>.
630
635
631 2006-01-20 Ville Vainio <vivainio@gmail.com>
636 2006-01-20 Ville Vainio <vivainio@gmail.com>
632
637
633 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
638 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
634 (%rehashdir, very useful, try it out) of how to extend ipython
639 (%rehashdir, very useful, try it out) of how to extend ipython
635 with new magics. Also added Extensions dir to pythonpath to make
640 with new magics. Also added Extensions dir to pythonpath to make
636 importing extensions easy.
641 importing extensions easy.
637
642
638 * %store now complains when trying to store interactively declared
643 * %store now complains when trying to store interactively declared
639 classes / instances of those classes.
644 classes / instances of those classes.
640
645
641 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
646 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
642 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
647 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
643 if they exist, and ipy_user_conf.py with some defaults is created for
648 if they exist, and ipy_user_conf.py with some defaults is created for
644 the user.
649 the user.
645
650
646 * Startup rehashing done by the config file, not InterpreterExec.
651 * Startup rehashing done by the config file, not InterpreterExec.
647 This means system commands are available even without selecting the
652 This means system commands are available even without selecting the
648 pysh profile. It's the sensible default after all.
653 pysh profile. It's the sensible default after all.
649
654
650 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
655 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
651
656
652 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
657 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
653 multiline code with autoindent on working. But I am really not
658 multiline code with autoindent on working. But I am really not
654 sure, so this needs more testing. Will commit a debug-enabled
659 sure, so this needs more testing. Will commit a debug-enabled
655 version for now, while I test it some more, so that Ville and
660 version for now, while I test it some more, so that Ville and
656 others may also catch any problems. Also made
661 others may also catch any problems. Also made
657 self.indent_current_str() a method, to ensure that there's no
662 self.indent_current_str() a method, to ensure that there's no
658 chance of the indent space count and the corresponding string
663 chance of the indent space count and the corresponding string
659 falling out of sync. All code needing the string should just call
664 falling out of sync. All code needing the string should just call
660 the method.
665 the method.
661
666
662 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
667 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
663
668
664 * IPython/Magic.py (magic_edit): fix check for when users don't
669 * IPython/Magic.py (magic_edit): fix check for when users don't
665 save their output files, the try/except was in the wrong section.
670 save their output files, the try/except was in the wrong section.
666
671
667 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
672 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
668
673
669 * IPython/Magic.py (magic_run): fix __file__ global missing from
674 * IPython/Magic.py (magic_run): fix __file__ global missing from
670 script's namespace when executed via %run. After a report by
675 script's namespace when executed via %run. After a report by
671 Vivian.
676 Vivian.
672
677
673 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
678 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
674 when using python 2.4. The parent constructor changed in 2.4, and
679 when using python 2.4. The parent constructor changed in 2.4, and
675 we need to track it directly (we can't call it, as it messes up
680 we need to track it directly (we can't call it, as it messes up
676 readline and tab-completion inside our pdb would stop working).
681 readline and tab-completion inside our pdb would stop working).
677 After a bug report by R. Bernstein <rocky-AT-panix.com>.
682 After a bug report by R. Bernstein <rocky-AT-panix.com>.
678
683
679 2006-01-16 Ville Vainio <vivainio@gmail.com>
684 2006-01-16 Ville Vainio <vivainio@gmail.com>
680
685
681 * Ipython/magic.py: Reverted back to old %edit functionality
686 * Ipython/magic.py: Reverted back to old %edit functionality
682 that returns file contents on exit.
687 that returns file contents on exit.
683
688
684 * IPython/path.py: Added Jason Orendorff's "path" module to
689 * IPython/path.py: Added Jason Orendorff's "path" module to
685 IPython tree, http://www.jorendorff.com/articles/python/path/.
690 IPython tree, http://www.jorendorff.com/articles/python/path/.
686 You can get path objects conveniently through %sc, and !!, e.g.:
691 You can get path objects conveniently through %sc, and !!, e.g.:
687 sc files=ls
692 sc files=ls
688 for p in files.paths: # or files.p
693 for p in files.paths: # or files.p
689 print p,p.mtime
694 print p,p.mtime
690
695
691 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
696 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
692 now work again without considering the exclusion regexp -
697 now work again without considering the exclusion regexp -
693 hence, things like ',foo my/path' turn to 'foo("my/path")'
698 hence, things like ',foo my/path' turn to 'foo("my/path")'
694 instead of syntax error.
699 instead of syntax error.
695
700
696
701
697 2006-01-14 Ville Vainio <vivainio@gmail.com>
702 2006-01-14 Ville Vainio <vivainio@gmail.com>
698
703
699 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
704 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
700 ipapi decorators for python 2.4 users, options() provides access to rc
705 ipapi decorators for python 2.4 users, options() provides access to rc
701 data.
706 data.
702
707
703 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
708 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
704 as path separators (even on Linux ;-). Space character after
709 as path separators (even on Linux ;-). Space character after
705 backslash (as yielded by tab completer) is still space;
710 backslash (as yielded by tab completer) is still space;
706 "%cd long\ name" works as expected.
711 "%cd long\ name" works as expected.
707
712
708 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
713 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
709 as "chain of command", with priority. API stays the same,
714 as "chain of command", with priority. API stays the same,
710 TryNext exception raised by a hook function signals that
715 TryNext exception raised by a hook function signals that
711 current hook failed and next hook should try handling it, as
716 current hook failed and next hook should try handling it, as
712 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
717 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
713 requested configurable display hook, which is now implemented.
718 requested configurable display hook, which is now implemented.
714
719
715 2006-01-13 Ville Vainio <vivainio@gmail.com>
720 2006-01-13 Ville Vainio <vivainio@gmail.com>
716
721
717 * IPython/platutils*.py: platform specific utility functions,
722 * IPython/platutils*.py: platform specific utility functions,
718 so far only set_term_title is implemented (change terminal
723 so far only set_term_title is implemented (change terminal
719 label in windowing systems). %cd now changes the title to
724 label in windowing systems). %cd now changes the title to
720 current dir.
725 current dir.
721
726
722 * IPython/Release.py: Added myself to "authors" list,
727 * IPython/Release.py: Added myself to "authors" list,
723 had to create new files.
728 had to create new files.
724
729
725 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
730 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
726 shell escape; not a known bug but had potential to be one in the
731 shell escape; not a known bug but had potential to be one in the
727 future.
732 future.
728
733
729 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
734 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
730 extension API for IPython! See the module for usage example. Fix
735 extension API for IPython! See the module for usage example. Fix
731 OInspect for docstring-less magic functions.
736 OInspect for docstring-less magic functions.
732
737
733
738
734 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
739 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
735
740
736 * IPython/iplib.py (raw_input): temporarily deactivate all
741 * IPython/iplib.py (raw_input): temporarily deactivate all
737 attempts at allowing pasting of code with autoindent on. It
742 attempts at allowing pasting of code with autoindent on. It
738 introduced bugs (reported by Prabhu) and I can't seem to find a
743 introduced bugs (reported by Prabhu) and I can't seem to find a
739 robust combination which works in all cases. Will have to revisit
744 robust combination which works in all cases. Will have to revisit
740 later.
745 later.
741
746
742 * IPython/genutils.py: remove isspace() function. We've dropped
747 * IPython/genutils.py: remove isspace() function. We've dropped
743 2.2 compatibility, so it's OK to use the string method.
748 2.2 compatibility, so it's OK to use the string method.
744
749
745 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
750 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
746
751
747 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
752 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
748 matching what NOT to autocall on, to include all python binary
753 matching what NOT to autocall on, to include all python binary
749 operators (including things like 'and', 'or', 'is' and 'in').
754 operators (including things like 'and', 'or', 'is' and 'in').
750 Prompted by a bug report on 'foo & bar', but I realized we had
755 Prompted by a bug report on 'foo & bar', but I realized we had
751 many more potential bug cases with other operators. The regexp is
756 many more potential bug cases with other operators. The regexp is
752 self.re_exclude_auto, it's fairly commented.
757 self.re_exclude_auto, it's fairly commented.
753
758
754 2006-01-12 Ville Vainio <vivainio@gmail.com>
759 2006-01-12 Ville Vainio <vivainio@gmail.com>
755
760
756 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
761 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
757 Prettified and hardened string/backslash quoting with ipsystem(),
762 Prettified and hardened string/backslash quoting with ipsystem(),
758 ipalias() and ipmagic(). Now even \ characters are passed to
763 ipalias() and ipmagic(). Now even \ characters are passed to
759 %magics, !shell escapes and aliases exactly as they are in the
764 %magics, !shell escapes and aliases exactly as they are in the
760 ipython command line. Should improve backslash experience,
765 ipython command line. Should improve backslash experience,
761 particularly in Windows (path delimiter for some commands that
766 particularly in Windows (path delimiter for some commands that
762 won't understand '/'), but Unix benefits as well (regexps). %cd
767 won't understand '/'), but Unix benefits as well (regexps). %cd
763 magic still doesn't support backslash path delimiters, though. Also
768 magic still doesn't support backslash path delimiters, though. Also
764 deleted all pretense of supporting multiline command strings in
769 deleted all pretense of supporting multiline command strings in
765 !system or %magic commands. Thanks to Jerry McRae for suggestions.
770 !system or %magic commands. Thanks to Jerry McRae for suggestions.
766
771
767 * doc/build_doc_instructions.txt added. Documentation on how to
772 * doc/build_doc_instructions.txt added. Documentation on how to
768 use doc/update_manual.py, added yesterday. Both files contributed
773 use doc/update_manual.py, added yesterday. Both files contributed
769 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
774 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
770 doc/*.sh for deprecation at a later date.
775 doc/*.sh for deprecation at a later date.
771
776
772 * /ipython.py Added ipython.py to root directory for
777 * /ipython.py Added ipython.py to root directory for
773 zero-installation (tar xzvf ipython.tgz; cd ipython; python
778 zero-installation (tar xzvf ipython.tgz; cd ipython; python
774 ipython.py) and development convenience (no need to keep doing
779 ipython.py) and development convenience (no need to keep doing
775 "setup.py install" between changes).
780 "setup.py install" between changes).
776
781
777 * Made ! and !! shell escapes work (again) in multiline expressions:
782 * Made ! and !! shell escapes work (again) in multiline expressions:
778 if 1:
783 if 1:
779 !ls
784 !ls
780 !!ls
785 !!ls
781
786
782 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
787 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
783
788
784 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
789 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
785 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
790 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
786 module in case-insensitive installation. Was causing crashes
791 module in case-insensitive installation. Was causing crashes
787 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
792 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
788
793
789 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
794 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
790 <marienz-AT-gentoo.org>, closes
795 <marienz-AT-gentoo.org>, closes
791 http://www.scipy.net/roundup/ipython/issue51.
796 http://www.scipy.net/roundup/ipython/issue51.
792
797
793 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
798 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
794
799
795 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
800 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
796 problem of excessive CPU usage under *nix and keyboard lag under
801 problem of excessive CPU usage under *nix and keyboard lag under
797 win32.
802 win32.
798
803
799 2006-01-10 *** Released version 0.7.0
804 2006-01-10 *** Released version 0.7.0
800
805
801 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
806 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
802
807
803 * IPython/Release.py (revision): tag version number to 0.7.0,
808 * IPython/Release.py (revision): tag version number to 0.7.0,
804 ready for release.
809 ready for release.
805
810
806 * IPython/Magic.py (magic_edit): Add print statement to %edit so
811 * IPython/Magic.py (magic_edit): Add print statement to %edit so
807 it informs the user of the name of the temp. file used. This can
812 it informs the user of the name of the temp. file used. This can
808 help if you decide later to reuse that same file, so you know
813 help if you decide later to reuse that same file, so you know
809 where to copy the info from.
814 where to copy the info from.
810
815
811 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
816 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
812
817
813 * setup_bdist_egg.py: little script to build an egg. Added
818 * setup_bdist_egg.py: little script to build an egg. Added
814 support in the release tools as well.
819 support in the release tools as well.
815
820
816 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
821 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
817
822
818 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
823 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
819 version selection (new -wxversion command line and ipythonrc
824 version selection (new -wxversion command line and ipythonrc
820 parameter). Patch contributed by Arnd Baecker
825 parameter). Patch contributed by Arnd Baecker
821 <arnd.baecker-AT-web.de>.
826 <arnd.baecker-AT-web.de>.
822
827
823 * IPython/iplib.py (embed_mainloop): fix tab-completion in
828 * IPython/iplib.py (embed_mainloop): fix tab-completion in
824 embedded instances, for variables defined at the interactive
829 embedded instances, for variables defined at the interactive
825 prompt of the embedded ipython. Reported by Arnd.
830 prompt of the embedded ipython. Reported by Arnd.
826
831
827 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
832 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
828 it can be used as a (stateful) toggle, or with a direct parameter.
833 it can be used as a (stateful) toggle, or with a direct parameter.
829
834
830 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
835 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
831 could be triggered in certain cases and cause the traceback
836 could be triggered in certain cases and cause the traceback
832 printer not to work.
837 printer not to work.
833
838
834 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
839 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
835
840
836 * IPython/iplib.py (_should_recompile): Small fix, closes
841 * IPython/iplib.py (_should_recompile): Small fix, closes
837 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
842 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
838
843
839 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
844 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
840
845
841 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
846 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
842 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
847 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
843 Moad for help with tracking it down.
848 Moad for help with tracking it down.
844
849
845 * IPython/iplib.py (handle_auto): fix autocall handling for
850 * IPython/iplib.py (handle_auto): fix autocall handling for
846 objects which support BOTH __getitem__ and __call__ (so that f [x]
851 objects which support BOTH __getitem__ and __call__ (so that f [x]
847 is left alone, instead of becoming f([x]) automatically).
852 is left alone, instead of becoming f([x]) automatically).
848
853
849 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
854 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
850 Ville's patch.
855 Ville's patch.
851
856
852 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
857 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
853
858
854 * IPython/iplib.py (handle_auto): changed autocall semantics to
859 * IPython/iplib.py (handle_auto): changed autocall semantics to
855 include 'smart' mode, where the autocall transformation is NOT
860 include 'smart' mode, where the autocall transformation is NOT
856 applied if there are no arguments on the line. This allows you to
861 applied if there are no arguments on the line. This allows you to
857 just type 'foo' if foo is a callable to see its internal form,
862 just type 'foo' if foo is a callable to see its internal form,
858 instead of having it called with no arguments (typically a
863 instead of having it called with no arguments (typically a
859 mistake). The old 'full' autocall still exists: for that, you
864 mistake). The old 'full' autocall still exists: for that, you
860 need to set the 'autocall' parameter to 2 in your ipythonrc file.
865 need to set the 'autocall' parameter to 2 in your ipythonrc file.
861
866
862 * IPython/completer.py (Completer.attr_matches): add
867 * IPython/completer.py (Completer.attr_matches): add
863 tab-completion support for Enthoughts' traits. After a report by
868 tab-completion support for Enthoughts' traits. After a report by
864 Arnd and a patch by Prabhu.
869 Arnd and a patch by Prabhu.
865
870
866 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
871 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
867
872
868 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
873 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
869 Schmolck's patch to fix inspect.getinnerframes().
874 Schmolck's patch to fix inspect.getinnerframes().
870
875
871 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
876 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
872 for embedded instances, regarding handling of namespaces and items
877 for embedded instances, regarding handling of namespaces and items
873 added to the __builtin__ one. Multiple embedded instances and
878 added to the __builtin__ one. Multiple embedded instances and
874 recursive embeddings should work better now (though I'm not sure
879 recursive embeddings should work better now (though I'm not sure
875 I've got all the corner cases fixed, that code is a bit of a brain
880 I've got all the corner cases fixed, that code is a bit of a brain
876 twister).
881 twister).
877
882
878 * IPython/Magic.py (magic_edit): added support to edit in-memory
883 * IPython/Magic.py (magic_edit): added support to edit in-memory
879 macros (automatically creates the necessary temp files). %edit
884 macros (automatically creates the necessary temp files). %edit
880 also doesn't return the file contents anymore, it's just noise.
885 also doesn't return the file contents anymore, it's just noise.
881
886
882 * IPython/completer.py (Completer.attr_matches): revert change to
887 * IPython/completer.py (Completer.attr_matches): revert change to
883 complete only on attributes listed in __all__. I realized it
888 complete only on attributes listed in __all__. I realized it
884 cripples the tab-completion system as a tool for exploring the
889 cripples the tab-completion system as a tool for exploring the
885 internals of unknown libraries (it renders any non-__all__
890 internals of unknown libraries (it renders any non-__all__
886 attribute off-limits). I got bit by this when trying to see
891 attribute off-limits). I got bit by this when trying to see
887 something inside the dis module.
892 something inside the dis module.
888
893
889 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
894 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
890
895
891 * IPython/iplib.py (InteractiveShell.__init__): add .meta
896 * IPython/iplib.py (InteractiveShell.__init__): add .meta
892 namespace for users and extension writers to hold data in. This
897 namespace for users and extension writers to hold data in. This
893 follows the discussion in
898 follows the discussion in
894 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
899 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
895
900
896 * IPython/completer.py (IPCompleter.complete): small patch to help
901 * IPython/completer.py (IPCompleter.complete): small patch to help
897 tab-completion under Emacs, after a suggestion by John Barnard
902 tab-completion under Emacs, after a suggestion by John Barnard
898 <barnarj-AT-ccf.org>.
903 <barnarj-AT-ccf.org>.
899
904
900 * IPython/Magic.py (Magic.extract_input_slices): added support for
905 * IPython/Magic.py (Magic.extract_input_slices): added support for
901 the slice notation in magics to use N-M to represent numbers N...M
906 the slice notation in magics to use N-M to represent numbers N...M
902 (closed endpoints). This is used by %macro and %save.
907 (closed endpoints). This is used by %macro and %save.
903
908
904 * IPython/completer.py (Completer.attr_matches): for modules which
909 * IPython/completer.py (Completer.attr_matches): for modules which
905 define __all__, complete only on those. After a patch by Jeffrey
910 define __all__, complete only on those. After a patch by Jeffrey
906 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
911 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
907 speed up this routine.
912 speed up this routine.
908
913
909 * IPython/Logger.py (Logger.log): fix a history handling bug. I
914 * IPython/Logger.py (Logger.log): fix a history handling bug. I
910 don't know if this is the end of it, but the behavior now is
915 don't know if this is the end of it, but the behavior now is
911 certainly much more correct. Note that coupled with macros,
916 certainly much more correct. Note that coupled with macros,
912 slightly surprising (at first) behavior may occur: a macro will in
917 slightly surprising (at first) behavior may occur: a macro will in
913 general expand to multiple lines of input, so upon exiting, the
918 general expand to multiple lines of input, so upon exiting, the
914 in/out counters will both be bumped by the corresponding amount
919 in/out counters will both be bumped by the corresponding amount
915 (as if the macro's contents had been typed interactively). Typing
920 (as if the macro's contents had been typed interactively). Typing
916 %hist will reveal the intermediate (silently processed) lines.
921 %hist will reveal the intermediate (silently processed) lines.
917
922
918 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
923 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
919 pickle to fail (%run was overwriting __main__ and not restoring
924 pickle to fail (%run was overwriting __main__ and not restoring
920 it, but pickle relies on __main__ to operate).
925 it, but pickle relies on __main__ to operate).
921
926
922 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
927 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
923 using properties, but forgot to make the main InteractiveShell
928 using properties, but forgot to make the main InteractiveShell
924 class a new-style class. Properties fail silently, and
929 class a new-style class. Properties fail silently, and
925 mysteriously, with old-style class (getters work, but
930 mysteriously, with old-style class (getters work, but
926 setters don't do anything).
931 setters don't do anything).
927
932
928 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
933 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
929
934
930 * IPython/Magic.py (magic_history): fix history reporting bug (I
935 * IPython/Magic.py (magic_history): fix history reporting bug (I
931 know some nasties are still there, I just can't seem to find a
936 know some nasties are still there, I just can't seem to find a
932 reproducible test case to track them down; the input history is
937 reproducible test case to track them down; the input history is
933 falling out of sync...)
938 falling out of sync...)
934
939
935 * IPython/iplib.py (handle_shell_escape): fix bug where both
940 * IPython/iplib.py (handle_shell_escape): fix bug where both
936 aliases and system accesses where broken for indented code (such
941 aliases and system accesses where broken for indented code (such
937 as loops).
942 as loops).
938
943
939 * IPython/genutils.py (shell): fix small but critical bug for
944 * IPython/genutils.py (shell): fix small but critical bug for
940 win32 system access.
945 win32 system access.
941
946
942 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
947 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
943
948
944 * IPython/iplib.py (showtraceback): remove use of the
949 * IPython/iplib.py (showtraceback): remove use of the
945 sys.last_{type/value/traceback} structures, which are non
950 sys.last_{type/value/traceback} structures, which are non
946 thread-safe.
951 thread-safe.
947 (_prefilter): change control flow to ensure that we NEVER
952 (_prefilter): change control flow to ensure that we NEVER
948 introspect objects when autocall is off. This will guarantee that
953 introspect objects when autocall is off. This will guarantee that
949 having an input line of the form 'x.y', where access to attribute
954 having an input line of the form 'x.y', where access to attribute
950 'y' has side effects, doesn't trigger the side effect TWICE. It
955 'y' has side effects, doesn't trigger the side effect TWICE. It
951 is important to note that, with autocall on, these side effects
956 is important to note that, with autocall on, these side effects
952 can still happen.
957 can still happen.
953 (ipsystem): new builtin, to complete the ip{magic/alias/system}
958 (ipsystem): new builtin, to complete the ip{magic/alias/system}
954 trio. IPython offers these three kinds of special calls which are
959 trio. IPython offers these three kinds of special calls which are
955 not python code, and it's a good thing to have their call method
960 not python code, and it's a good thing to have their call method
956 be accessible as pure python functions (not just special syntax at
961 be accessible as pure python functions (not just special syntax at
957 the command line). It gives us a better internal implementation
962 the command line). It gives us a better internal implementation
958 structure, as well as exposing these for user scripting more
963 structure, as well as exposing these for user scripting more
959 cleanly.
964 cleanly.
960
965
961 * IPython/macro.py (Macro.__init__): moved macros to a standalone
966 * IPython/macro.py (Macro.__init__): moved macros to a standalone
962 file. Now that they'll be more likely to be used with the
967 file. Now that they'll be more likely to be used with the
963 persistance system (%store), I want to make sure their module path
968 persistance system (%store), I want to make sure their module path
964 doesn't change in the future, so that we don't break things for
969 doesn't change in the future, so that we don't break things for
965 users' persisted data.
970 users' persisted data.
966
971
967 * IPython/iplib.py (autoindent_update): move indentation
972 * IPython/iplib.py (autoindent_update): move indentation
968 management into the _text_ processing loop, not the keyboard
973 management into the _text_ processing loop, not the keyboard
969 interactive one. This is necessary to correctly process non-typed
974 interactive one. This is necessary to correctly process non-typed
970 multiline input (such as macros).
975 multiline input (such as macros).
971
976
972 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
977 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
973 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
978 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
974 which was producing problems in the resulting manual.
979 which was producing problems in the resulting manual.
975 (magic_whos): improve reporting of instances (show their class,
980 (magic_whos): improve reporting of instances (show their class,
976 instead of simply printing 'instance' which isn't terribly
981 instead of simply printing 'instance' which isn't terribly
977 informative).
982 informative).
978
983
979 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
984 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
980 (minor mods) to support network shares under win32.
985 (minor mods) to support network shares under win32.
981
986
982 * IPython/winconsole.py (get_console_size): add new winconsole
987 * IPython/winconsole.py (get_console_size): add new winconsole
983 module and fixes to page_dumb() to improve its behavior under
988 module and fixes to page_dumb() to improve its behavior under
984 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
989 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
985
990
986 * IPython/Magic.py (Macro): simplified Macro class to just
991 * IPython/Magic.py (Macro): simplified Macro class to just
987 subclass list. We've had only 2.2 compatibility for a very long
992 subclass list. We've had only 2.2 compatibility for a very long
988 time, yet I was still avoiding subclassing the builtin types. No
993 time, yet I was still avoiding subclassing the builtin types. No
989 more (I'm also starting to use properties, though I won't shift to
994 more (I'm also starting to use properties, though I won't shift to
990 2.3-specific features quite yet).
995 2.3-specific features quite yet).
991 (magic_store): added Ville's patch for lightweight variable
996 (magic_store): added Ville's patch for lightweight variable
992 persistence, after a request on the user list by Matt Wilkie
997 persistence, after a request on the user list by Matt Wilkie
993 <maphew-AT-gmail.com>. The new %store magic's docstring has full
998 <maphew-AT-gmail.com>. The new %store magic's docstring has full
994 details.
999 details.
995
1000
996 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1001 * IPython/iplib.py (InteractiveShell.post_config_initialization):
997 changed the default logfile name from 'ipython.log' to
1002 changed the default logfile name from 'ipython.log' to
998 'ipython_log.py'. These logs are real python files, and now that
1003 'ipython_log.py'. These logs are real python files, and now that
999 we have much better multiline support, people are more likely to
1004 we have much better multiline support, people are more likely to
1000 want to use them as such. Might as well name them correctly.
1005 want to use them as such. Might as well name them correctly.
1001
1006
1002 * IPython/Magic.py: substantial cleanup. While we can't stop
1007 * IPython/Magic.py: substantial cleanup. While we can't stop
1003 using magics as mixins, due to the existing customizations 'out
1008 using magics as mixins, due to the existing customizations 'out
1004 there' which rely on the mixin naming conventions, at least I
1009 there' which rely on the mixin naming conventions, at least I
1005 cleaned out all cross-class name usage. So once we are OK with
1010 cleaned out all cross-class name usage. So once we are OK with
1006 breaking compatibility, the two systems can be separated.
1011 breaking compatibility, the two systems can be separated.
1007
1012
1008 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1013 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1009 anymore, and the class is a fair bit less hideous as well. New
1014 anymore, and the class is a fair bit less hideous as well. New
1010 features were also introduced: timestamping of input, and logging
1015 features were also introduced: timestamping of input, and logging
1011 of output results. These are user-visible with the -t and -o
1016 of output results. These are user-visible with the -t and -o
1012 options to %logstart. Closes
1017 options to %logstart. Closes
1013 http://www.scipy.net/roundup/ipython/issue11 and a request by
1018 http://www.scipy.net/roundup/ipython/issue11 and a request by
1014 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1019 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1015
1020
1016 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1021 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1017
1022
1018 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1023 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1019 better handle backslashes in paths. See the thread 'More Windows
1024 better handle backslashes in paths. See the thread 'More Windows
1020 questions part 2 - \/ characters revisited' on the iypthon user
1025 questions part 2 - \/ characters revisited' on the iypthon user
1021 list:
1026 list:
1022 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1027 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1023
1028
1024 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1029 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1025
1030
1026 (InteractiveShell.__init__): change threaded shells to not use the
1031 (InteractiveShell.__init__): change threaded shells to not use the
1027 ipython crash handler. This was causing more problems than not,
1032 ipython crash handler. This was causing more problems than not,
1028 as exceptions in the main thread (GUI code, typically) would
1033 as exceptions in the main thread (GUI code, typically) would
1029 always show up as a 'crash', when they really weren't.
1034 always show up as a 'crash', when they really weren't.
1030
1035
1031 The colors and exception mode commands (%colors/%xmode) have been
1036 The colors and exception mode commands (%colors/%xmode) have been
1032 synchronized to also take this into account, so users can get
1037 synchronized to also take this into account, so users can get
1033 verbose exceptions for their threaded code as well. I also added
1038 verbose exceptions for their threaded code as well. I also added
1034 support for activating pdb inside this exception handler as well,
1039 support for activating pdb inside this exception handler as well,
1035 so now GUI authors can use IPython's enhanced pdb at runtime.
1040 so now GUI authors can use IPython's enhanced pdb at runtime.
1036
1041
1037 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1042 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1038 true by default, and add it to the shipped ipythonrc file. Since
1043 true by default, and add it to the shipped ipythonrc file. Since
1039 this asks the user before proceeding, I think it's OK to make it
1044 this asks the user before proceeding, I think it's OK to make it
1040 true by default.
1045 true by default.
1041
1046
1042 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1047 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1043 of the previous special-casing of input in the eval loop. I think
1048 of the previous special-casing of input in the eval loop. I think
1044 this is cleaner, as they really are commands and shouldn't have
1049 this is cleaner, as they really are commands and shouldn't have
1045 a special role in the middle of the core code.
1050 a special role in the middle of the core code.
1046
1051
1047 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1052 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1048
1053
1049 * IPython/iplib.py (edit_syntax_error): added support for
1054 * IPython/iplib.py (edit_syntax_error): added support for
1050 automatically reopening the editor if the file had a syntax error
1055 automatically reopening the editor if the file had a syntax error
1051 in it. Thanks to scottt who provided the patch at:
1056 in it. Thanks to scottt who provided the patch at:
1052 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1057 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1053 version committed).
1058 version committed).
1054
1059
1055 * IPython/iplib.py (handle_normal): add suport for multi-line
1060 * IPython/iplib.py (handle_normal): add suport for multi-line
1056 input with emtpy lines. This fixes
1061 input with emtpy lines. This fixes
1057 http://www.scipy.net/roundup/ipython/issue43 and a similar
1062 http://www.scipy.net/roundup/ipython/issue43 and a similar
1058 discussion on the user list.
1063 discussion on the user list.
1059
1064
1060 WARNING: a behavior change is necessarily introduced to support
1065 WARNING: a behavior change is necessarily introduced to support
1061 blank lines: now a single blank line with whitespace does NOT
1066 blank lines: now a single blank line with whitespace does NOT
1062 break the input loop, which means that when autoindent is on, by
1067 break the input loop, which means that when autoindent is on, by
1063 default hitting return on the next (indented) line does NOT exit.
1068 default hitting return on the next (indented) line does NOT exit.
1064
1069
1065 Instead, to exit a multiline input you can either have:
1070 Instead, to exit a multiline input you can either have:
1066
1071
1067 - TWO whitespace lines (just hit return again), or
1072 - TWO whitespace lines (just hit return again), or
1068 - a single whitespace line of a different length than provided
1073 - a single whitespace line of a different length than provided
1069 by the autoindent (add or remove a space).
1074 by the autoindent (add or remove a space).
1070
1075
1071 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1076 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1072 module to better organize all readline-related functionality.
1077 module to better organize all readline-related functionality.
1073 I've deleted FlexCompleter and put all completion clases here.
1078 I've deleted FlexCompleter and put all completion clases here.
1074
1079
1075 * IPython/iplib.py (raw_input): improve indentation management.
1080 * IPython/iplib.py (raw_input): improve indentation management.
1076 It is now possible to paste indented code with autoindent on, and
1081 It is now possible to paste indented code with autoindent on, and
1077 the code is interpreted correctly (though it still looks bad on
1082 the code is interpreted correctly (though it still looks bad on
1078 screen, due to the line-oriented nature of ipython).
1083 screen, due to the line-oriented nature of ipython).
1079 (MagicCompleter.complete): change behavior so that a TAB key on an
1084 (MagicCompleter.complete): change behavior so that a TAB key on an
1080 otherwise empty line actually inserts a tab, instead of completing
1085 otherwise empty line actually inserts a tab, instead of completing
1081 on the entire global namespace. This makes it easier to use the
1086 on the entire global namespace. This makes it easier to use the
1082 TAB key for indentation. After a request by Hans Meine
1087 TAB key for indentation. After a request by Hans Meine
1083 <hans_meine-AT-gmx.net>
1088 <hans_meine-AT-gmx.net>
1084 (_prefilter): add support so that typing plain 'exit' or 'quit'
1089 (_prefilter): add support so that typing plain 'exit' or 'quit'
1085 does a sensible thing. Originally I tried to deviate as little as
1090 does a sensible thing. Originally I tried to deviate as little as
1086 possible from the default python behavior, but even that one may
1091 possible from the default python behavior, but even that one may
1087 change in this direction (thread on python-dev to that effect).
1092 change in this direction (thread on python-dev to that effect).
1088 Regardless, ipython should do the right thing even if CPython's
1093 Regardless, ipython should do the right thing even if CPython's
1089 '>>>' prompt doesn't.
1094 '>>>' prompt doesn't.
1090 (InteractiveShell): removed subclassing code.InteractiveConsole
1095 (InteractiveShell): removed subclassing code.InteractiveConsole
1091 class. By now we'd overridden just about all of its methods: I've
1096 class. By now we'd overridden just about all of its methods: I've
1092 copied the remaining two over, and now ipython is a standalone
1097 copied the remaining two over, and now ipython is a standalone
1093 class. This will provide a clearer picture for the chainsaw
1098 class. This will provide a clearer picture for the chainsaw
1094 branch refactoring.
1099 branch refactoring.
1095
1100
1096 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1101 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1097
1102
1098 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1103 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1099 failures for objects which break when dir() is called on them.
1104 failures for objects which break when dir() is called on them.
1100
1105
1101 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1106 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1102 distinct local and global namespaces in the completer API. This
1107 distinct local and global namespaces in the completer API. This
1103 change allows us to properly handle completion with distinct
1108 change allows us to properly handle completion with distinct
1104 scopes, including in embedded instances (this had never really
1109 scopes, including in embedded instances (this had never really
1105 worked correctly).
1110 worked correctly).
1106
1111
1107 Note: this introduces a change in the constructor for
1112 Note: this introduces a change in the constructor for
1108 MagicCompleter, as a new global_namespace parameter is now the
1113 MagicCompleter, as a new global_namespace parameter is now the
1109 second argument (the others were bumped one position).
1114 second argument (the others were bumped one position).
1110
1115
1111 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1116 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1112
1117
1113 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1118 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1114 embedded instances (which can be done now thanks to Vivian's
1119 embedded instances (which can be done now thanks to Vivian's
1115 frame-handling fixes for pdb).
1120 frame-handling fixes for pdb).
1116 (InteractiveShell.__init__): Fix namespace handling problem in
1121 (InteractiveShell.__init__): Fix namespace handling problem in
1117 embedded instances. We were overwriting __main__ unconditionally,
1122 embedded instances. We were overwriting __main__ unconditionally,
1118 and this should only be done for 'full' (non-embedded) IPython;
1123 and this should only be done for 'full' (non-embedded) IPython;
1119 embedded instances must respect the caller's __main__. Thanks to
1124 embedded instances must respect the caller's __main__. Thanks to
1120 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1125 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1121
1126
1122 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1127 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1123
1128
1124 * setup.py: added download_url to setup(). This registers the
1129 * setup.py: added download_url to setup(). This registers the
1125 download address at PyPI, which is not only useful to humans
1130 download address at PyPI, which is not only useful to humans
1126 browsing the site, but is also picked up by setuptools (the Eggs
1131 browsing the site, but is also picked up by setuptools (the Eggs
1127 machinery). Thanks to Ville and R. Kern for the info/discussion
1132 machinery). Thanks to Ville and R. Kern for the info/discussion
1128 on this.
1133 on this.
1129
1134
1130 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1135 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1131
1136
1132 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1137 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1133 This brings a lot of nice functionality to the pdb mode, which now
1138 This brings a lot of nice functionality to the pdb mode, which now
1134 has tab-completion, syntax highlighting, and better stack handling
1139 has tab-completion, syntax highlighting, and better stack handling
1135 than before. Many thanks to Vivian De Smedt
1140 than before. Many thanks to Vivian De Smedt
1136 <vivian-AT-vdesmedt.com> for the original patches.
1141 <vivian-AT-vdesmedt.com> for the original patches.
1137
1142
1138 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1143 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1139
1144
1140 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1145 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1141 sequence to consistently accept the banner argument. The
1146 sequence to consistently accept the banner argument. The
1142 inconsistency was tripping SAGE, thanks to Gary Zablackis
1147 inconsistency was tripping SAGE, thanks to Gary Zablackis
1143 <gzabl-AT-yahoo.com> for the report.
1148 <gzabl-AT-yahoo.com> for the report.
1144
1149
1145 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1150 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1146
1151
1147 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1152 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1148 Fix bug where a naked 'alias' call in the ipythonrc file would
1153 Fix bug where a naked 'alias' call in the ipythonrc file would
1149 cause a crash. Bug reported by Jorgen Stenarson.
1154 cause a crash. Bug reported by Jorgen Stenarson.
1150
1155
1151 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1156 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1152
1157
1153 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1158 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1154 startup time.
1159 startup time.
1155
1160
1156 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1161 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1157 instances had introduced a bug with globals in normal code. Now
1162 instances had introduced a bug with globals in normal code. Now
1158 it's working in all cases.
1163 it's working in all cases.
1159
1164
1160 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1165 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1161 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1166 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1162 has been introduced to set the default case sensitivity of the
1167 has been introduced to set the default case sensitivity of the
1163 searches. Users can still select either mode at runtime on a
1168 searches. Users can still select either mode at runtime on a
1164 per-search basis.
1169 per-search basis.
1165
1170
1166 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1171 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1167
1172
1168 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1173 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1169 attributes in wildcard searches for subclasses. Modified version
1174 attributes in wildcard searches for subclasses. Modified version
1170 of a patch by Jorgen.
1175 of a patch by Jorgen.
1171
1176
1172 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1177 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1173
1178
1174 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1179 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1175 embedded instances. I added a user_global_ns attribute to the
1180 embedded instances. I added a user_global_ns attribute to the
1176 InteractiveShell class to handle this.
1181 InteractiveShell class to handle this.
1177
1182
1178 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1183 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1179
1184
1180 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1185 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1181 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1186 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1182 (reported under win32, but may happen also in other platforms).
1187 (reported under win32, but may happen also in other platforms).
1183 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1188 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1184
1189
1185 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1190 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1186
1191
1187 * IPython/Magic.py (magic_psearch): new support for wildcard
1192 * IPython/Magic.py (magic_psearch): new support for wildcard
1188 patterns. Now, typing ?a*b will list all names which begin with a
1193 patterns. Now, typing ?a*b will list all names which begin with a
1189 and end in b, for example. The %psearch magic has full
1194 and end in b, for example. The %psearch magic has full
1190 docstrings. Many thanks to JΓΆrgen Stenarson
1195 docstrings. Many thanks to JΓΆrgen Stenarson
1191 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1196 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1192 implementing this functionality.
1197 implementing this functionality.
1193
1198
1194 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1199 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1195
1200
1196 * Manual: fixed long-standing annoyance of double-dashes (as in
1201 * Manual: fixed long-standing annoyance of double-dashes (as in
1197 --prefix=~, for example) being stripped in the HTML version. This
1202 --prefix=~, for example) being stripped in the HTML version. This
1198 is a latex2html bug, but a workaround was provided. Many thanks
1203 is a latex2html bug, but a workaround was provided. Many thanks
1199 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1204 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1200 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1205 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1201 rolling. This seemingly small issue had tripped a number of users
1206 rolling. This seemingly small issue had tripped a number of users
1202 when first installing, so I'm glad to see it gone.
1207 when first installing, so I'm glad to see it gone.
1203
1208
1204 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1209 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1205
1210
1206 * IPython/Extensions/numeric_formats.py: fix missing import,
1211 * IPython/Extensions/numeric_formats.py: fix missing import,
1207 reported by Stephen Walton.
1212 reported by Stephen Walton.
1208
1213
1209 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1214 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1210
1215
1211 * IPython/demo.py: finish demo module, fully documented now.
1216 * IPython/demo.py: finish demo module, fully documented now.
1212
1217
1213 * IPython/genutils.py (file_read): simple little utility to read a
1218 * IPython/genutils.py (file_read): simple little utility to read a
1214 file and ensure it's closed afterwards.
1219 file and ensure it's closed afterwards.
1215
1220
1216 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1221 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1217
1222
1218 * IPython/demo.py (Demo.__init__): added support for individually
1223 * IPython/demo.py (Demo.__init__): added support for individually
1219 tagging blocks for automatic execution.
1224 tagging blocks for automatic execution.
1220
1225
1221 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1226 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1222 syntax-highlighted python sources, requested by John.
1227 syntax-highlighted python sources, requested by John.
1223
1228
1224 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1229 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1225
1230
1226 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1231 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1227 finishing.
1232 finishing.
1228
1233
1229 * IPython/genutils.py (shlex_split): moved from Magic to here,
1234 * IPython/genutils.py (shlex_split): moved from Magic to here,
1230 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1235 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1231
1236
1232 * IPython/demo.py (Demo.__init__): added support for silent
1237 * IPython/demo.py (Demo.__init__): added support for silent
1233 blocks, improved marks as regexps, docstrings written.
1238 blocks, improved marks as regexps, docstrings written.
1234 (Demo.__init__): better docstring, added support for sys.argv.
1239 (Demo.__init__): better docstring, added support for sys.argv.
1235
1240
1236 * IPython/genutils.py (marquee): little utility used by the demo
1241 * IPython/genutils.py (marquee): little utility used by the demo
1237 code, handy in general.
1242 code, handy in general.
1238
1243
1239 * IPython/demo.py (Demo.__init__): new class for interactive
1244 * IPython/demo.py (Demo.__init__): new class for interactive
1240 demos. Not documented yet, I just wrote it in a hurry for
1245 demos. Not documented yet, I just wrote it in a hurry for
1241 scipy'05. Will docstring later.
1246 scipy'05. Will docstring later.
1242
1247
1243 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1248 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1244
1249
1245 * IPython/Shell.py (sigint_handler): Drastic simplification which
1250 * IPython/Shell.py (sigint_handler): Drastic simplification which
1246 also seems to make Ctrl-C work correctly across threads! This is
1251 also seems to make Ctrl-C work correctly across threads! This is
1247 so simple, that I can't beleive I'd missed it before. Needs more
1252 so simple, that I can't beleive I'd missed it before. Needs more
1248 testing, though.
1253 testing, though.
1249 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1254 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1250 like this before...
1255 like this before...
1251
1256
1252 * IPython/genutils.py (get_home_dir): add protection against
1257 * IPython/genutils.py (get_home_dir): add protection against
1253 non-dirs in win32 registry.
1258 non-dirs in win32 registry.
1254
1259
1255 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1260 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1256 bug where dict was mutated while iterating (pysh crash).
1261 bug where dict was mutated while iterating (pysh crash).
1257
1262
1258 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1263 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1259
1264
1260 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1265 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1261 spurious newlines added by this routine. After a report by
1266 spurious newlines added by this routine. After a report by
1262 F. Mantegazza.
1267 F. Mantegazza.
1263
1268
1264 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1269 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1265
1270
1266 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1271 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1267 calls. These were a leftover from the GTK 1.x days, and can cause
1272 calls. These were a leftover from the GTK 1.x days, and can cause
1268 problems in certain cases (after a report by John Hunter).
1273 problems in certain cases (after a report by John Hunter).
1269
1274
1270 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1275 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1271 os.getcwd() fails at init time. Thanks to patch from David Remahl
1276 os.getcwd() fails at init time. Thanks to patch from David Remahl
1272 <chmod007-AT-mac.com>.
1277 <chmod007-AT-mac.com>.
1273 (InteractiveShell.__init__): prevent certain special magics from
1278 (InteractiveShell.__init__): prevent certain special magics from
1274 being shadowed by aliases. Closes
1279 being shadowed by aliases. Closes
1275 http://www.scipy.net/roundup/ipython/issue41.
1280 http://www.scipy.net/roundup/ipython/issue41.
1276
1281
1277 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1282 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1278
1283
1279 * IPython/iplib.py (InteractiveShell.complete): Added new
1284 * IPython/iplib.py (InteractiveShell.complete): Added new
1280 top-level completion method to expose the completion mechanism
1285 top-level completion method to expose the completion mechanism
1281 beyond readline-based environments.
1286 beyond readline-based environments.
1282
1287
1283 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1288 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1284
1289
1285 * tools/ipsvnc (svnversion): fix svnversion capture.
1290 * tools/ipsvnc (svnversion): fix svnversion capture.
1286
1291
1287 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1292 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1288 attribute to self, which was missing. Before, it was set by a
1293 attribute to self, which was missing. Before, it was set by a
1289 routine which in certain cases wasn't being called, so the
1294 routine which in certain cases wasn't being called, so the
1290 instance could end up missing the attribute. This caused a crash.
1295 instance could end up missing the attribute. This caused a crash.
1291 Closes http://www.scipy.net/roundup/ipython/issue40.
1296 Closes http://www.scipy.net/roundup/ipython/issue40.
1292
1297
1293 2005-08-16 Fernando Perez <fperez@colorado.edu>
1298 2005-08-16 Fernando Perez <fperez@colorado.edu>
1294
1299
1295 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1300 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1296 contains non-string attribute. Closes
1301 contains non-string attribute. Closes
1297 http://www.scipy.net/roundup/ipython/issue38.
1302 http://www.scipy.net/roundup/ipython/issue38.
1298
1303
1299 2005-08-14 Fernando Perez <fperez@colorado.edu>
1304 2005-08-14 Fernando Perez <fperez@colorado.edu>
1300
1305
1301 * tools/ipsvnc: Minor improvements, to add changeset info.
1306 * tools/ipsvnc: Minor improvements, to add changeset info.
1302
1307
1303 2005-08-12 Fernando Perez <fperez@colorado.edu>
1308 2005-08-12 Fernando Perez <fperez@colorado.edu>
1304
1309
1305 * IPython/iplib.py (runsource): remove self.code_to_run_src
1310 * IPython/iplib.py (runsource): remove self.code_to_run_src
1306 attribute. I realized this is nothing more than
1311 attribute. I realized this is nothing more than
1307 '\n'.join(self.buffer), and having the same data in two different
1312 '\n'.join(self.buffer), and having the same data in two different
1308 places is just asking for synchronization bugs. This may impact
1313 places is just asking for synchronization bugs. This may impact
1309 people who have custom exception handlers, so I need to warn
1314 people who have custom exception handlers, so I need to warn
1310 ipython-dev about it (F. Mantegazza may use them).
1315 ipython-dev about it (F. Mantegazza may use them).
1311
1316
1312 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1317 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1313
1318
1314 * IPython/genutils.py: fix 2.2 compatibility (generators)
1319 * IPython/genutils.py: fix 2.2 compatibility (generators)
1315
1320
1316 2005-07-18 Fernando Perez <fperez@colorado.edu>
1321 2005-07-18 Fernando Perez <fperez@colorado.edu>
1317
1322
1318 * IPython/genutils.py (get_home_dir): fix to help users with
1323 * IPython/genutils.py (get_home_dir): fix to help users with
1319 invalid $HOME under win32.
1324 invalid $HOME under win32.
1320
1325
1321 2005-07-17 Fernando Perez <fperez@colorado.edu>
1326 2005-07-17 Fernando Perez <fperez@colorado.edu>
1322
1327
1323 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1328 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1324 some old hacks and clean up a bit other routines; code should be
1329 some old hacks and clean up a bit other routines; code should be
1325 simpler and a bit faster.
1330 simpler and a bit faster.
1326
1331
1327 * IPython/iplib.py (interact): removed some last-resort attempts
1332 * IPython/iplib.py (interact): removed some last-resort attempts
1328 to survive broken stdout/stderr. That code was only making it
1333 to survive broken stdout/stderr. That code was only making it
1329 harder to abstract out the i/o (necessary for gui integration),
1334 harder to abstract out the i/o (necessary for gui integration),
1330 and the crashes it could prevent were extremely rare in practice
1335 and the crashes it could prevent were extremely rare in practice
1331 (besides being fully user-induced in a pretty violent manner).
1336 (besides being fully user-induced in a pretty violent manner).
1332
1337
1333 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1338 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1334 Nothing major yet, but the code is simpler to read; this should
1339 Nothing major yet, but the code is simpler to read; this should
1335 make it easier to do more serious modifications in the future.
1340 make it easier to do more serious modifications in the future.
1336
1341
1337 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1342 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1338 which broke in .15 (thanks to a report by Ville).
1343 which broke in .15 (thanks to a report by Ville).
1339
1344
1340 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1345 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1341 be quite correct, I know next to nothing about unicode). This
1346 be quite correct, I know next to nothing about unicode). This
1342 will allow unicode strings to be used in prompts, amongst other
1347 will allow unicode strings to be used in prompts, amongst other
1343 cases. It also will prevent ipython from crashing when unicode
1348 cases. It also will prevent ipython from crashing when unicode
1344 shows up unexpectedly in many places. If ascii encoding fails, we
1349 shows up unexpectedly in many places. If ascii encoding fails, we
1345 assume utf_8. Currently the encoding is not a user-visible
1350 assume utf_8. Currently the encoding is not a user-visible
1346 setting, though it could be made so if there is demand for it.
1351 setting, though it could be made so if there is demand for it.
1347
1352
1348 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1353 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1349
1354
1350 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1355 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1351
1356
1352 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1357 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1353
1358
1354 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1359 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1355 code can work transparently for 2.2/2.3.
1360 code can work transparently for 2.2/2.3.
1356
1361
1357 2005-07-16 Fernando Perez <fperez@colorado.edu>
1362 2005-07-16 Fernando Perez <fperez@colorado.edu>
1358
1363
1359 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1364 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1360 out of the color scheme table used for coloring exception
1365 out of the color scheme table used for coloring exception
1361 tracebacks. This allows user code to add new schemes at runtime.
1366 tracebacks. This allows user code to add new schemes at runtime.
1362 This is a minimally modified version of the patch at
1367 This is a minimally modified version of the patch at
1363 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1368 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1364 for the contribution.
1369 for the contribution.
1365
1370
1366 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1371 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1367 slightly modified version of the patch in
1372 slightly modified version of the patch in
1368 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1373 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1369 to remove the previous try/except solution (which was costlier).
1374 to remove the previous try/except solution (which was costlier).
1370 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1375 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1371
1376
1372 2005-06-08 Fernando Perez <fperez@colorado.edu>
1377 2005-06-08 Fernando Perez <fperez@colorado.edu>
1373
1378
1374 * IPython/iplib.py (write/write_err): Add methods to abstract all
1379 * IPython/iplib.py (write/write_err): Add methods to abstract all
1375 I/O a bit more.
1380 I/O a bit more.
1376
1381
1377 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1382 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1378 warning, reported by Aric Hagberg, fix by JD Hunter.
1383 warning, reported by Aric Hagberg, fix by JD Hunter.
1379
1384
1380 2005-06-02 *** Released version 0.6.15
1385 2005-06-02 *** Released version 0.6.15
1381
1386
1382 2005-06-01 Fernando Perez <fperez@colorado.edu>
1387 2005-06-01 Fernando Perez <fperez@colorado.edu>
1383
1388
1384 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1389 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1385 tab-completion of filenames within open-quoted strings. Note that
1390 tab-completion of filenames within open-quoted strings. Note that
1386 this requires that in ~/.ipython/ipythonrc, users change the
1391 this requires that in ~/.ipython/ipythonrc, users change the
1387 readline delimiters configuration to read:
1392 readline delimiters configuration to read:
1388
1393
1389 readline_remove_delims -/~
1394 readline_remove_delims -/~
1390
1395
1391
1396
1392 2005-05-31 *** Released version 0.6.14
1397 2005-05-31 *** Released version 0.6.14
1393
1398
1394 2005-05-29 Fernando Perez <fperez@colorado.edu>
1399 2005-05-29 Fernando Perez <fperez@colorado.edu>
1395
1400
1396 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1401 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1397 with files not on the filesystem. Reported by Eliyahu Sandler
1402 with files not on the filesystem. Reported by Eliyahu Sandler
1398 <eli@gondolin.net>
1403 <eli@gondolin.net>
1399
1404
1400 2005-05-22 Fernando Perez <fperez@colorado.edu>
1405 2005-05-22 Fernando Perez <fperez@colorado.edu>
1401
1406
1402 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1407 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1403 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1408 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1404
1409
1405 2005-05-19 Fernando Perez <fperez@colorado.edu>
1410 2005-05-19 Fernando Perez <fperez@colorado.edu>
1406
1411
1407 * IPython/iplib.py (safe_execfile): close a file which could be
1412 * IPython/iplib.py (safe_execfile): close a file which could be
1408 left open (causing problems in win32, which locks open files).
1413 left open (causing problems in win32, which locks open files).
1409 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1414 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1410
1415
1411 2005-05-18 Fernando Perez <fperez@colorado.edu>
1416 2005-05-18 Fernando Perez <fperez@colorado.edu>
1412
1417
1413 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1418 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1414 keyword arguments correctly to safe_execfile().
1419 keyword arguments correctly to safe_execfile().
1415
1420
1416 2005-05-13 Fernando Perez <fperez@colorado.edu>
1421 2005-05-13 Fernando Perez <fperez@colorado.edu>
1417
1422
1418 * ipython.1: Added info about Qt to manpage, and threads warning
1423 * ipython.1: Added info about Qt to manpage, and threads warning
1419 to usage page (invoked with --help).
1424 to usage page (invoked with --help).
1420
1425
1421 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1426 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1422 new matcher (it goes at the end of the priority list) to do
1427 new matcher (it goes at the end of the priority list) to do
1423 tab-completion on named function arguments. Submitted by George
1428 tab-completion on named function arguments. Submitted by George
1424 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1429 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1425 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1430 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1426 for more details.
1431 for more details.
1427
1432
1428 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1433 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1429 SystemExit exceptions in the script being run. Thanks to a report
1434 SystemExit exceptions in the script being run. Thanks to a report
1430 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1435 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1431 producing very annoying behavior when running unit tests.
1436 producing very annoying behavior when running unit tests.
1432
1437
1433 2005-05-12 Fernando Perez <fperez@colorado.edu>
1438 2005-05-12 Fernando Perez <fperez@colorado.edu>
1434
1439
1435 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1440 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1436 which I'd broken (again) due to a changed regexp. In the process,
1441 which I'd broken (again) due to a changed regexp. In the process,
1437 added ';' as an escape to auto-quote the whole line without
1442 added ';' as an escape to auto-quote the whole line without
1438 splitting its arguments. Thanks to a report by Jerry McRae
1443 splitting its arguments. Thanks to a report by Jerry McRae
1439 <qrs0xyc02-AT-sneakemail.com>.
1444 <qrs0xyc02-AT-sneakemail.com>.
1440
1445
1441 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1446 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1442 possible crashes caused by a TokenError. Reported by Ed Schofield
1447 possible crashes caused by a TokenError. Reported by Ed Schofield
1443 <schofield-AT-ftw.at>.
1448 <schofield-AT-ftw.at>.
1444
1449
1445 2005-05-06 Fernando Perez <fperez@colorado.edu>
1450 2005-05-06 Fernando Perez <fperez@colorado.edu>
1446
1451
1447 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1452 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1448
1453
1449 2005-04-29 Fernando Perez <fperez@colorado.edu>
1454 2005-04-29 Fernando Perez <fperez@colorado.edu>
1450
1455
1451 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1456 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1452 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1457 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1453 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1458 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1454 which provides support for Qt interactive usage (similar to the
1459 which provides support for Qt interactive usage (similar to the
1455 existing one for WX and GTK). This had been often requested.
1460 existing one for WX and GTK). This had been often requested.
1456
1461
1457 2005-04-14 *** Released version 0.6.13
1462 2005-04-14 *** Released version 0.6.13
1458
1463
1459 2005-04-08 Fernando Perez <fperez@colorado.edu>
1464 2005-04-08 Fernando Perez <fperez@colorado.edu>
1460
1465
1461 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1466 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1462 from _ofind, which gets called on almost every input line. Now,
1467 from _ofind, which gets called on almost every input line. Now,
1463 we only try to get docstrings if they are actually going to be
1468 we only try to get docstrings if they are actually going to be
1464 used (the overhead of fetching unnecessary docstrings can be
1469 used (the overhead of fetching unnecessary docstrings can be
1465 noticeable for certain objects, such as Pyro proxies).
1470 noticeable for certain objects, such as Pyro proxies).
1466
1471
1467 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1472 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1468 for completers. For some reason I had been passing them the state
1473 for completers. For some reason I had been passing them the state
1469 variable, which completers never actually need, and was in
1474 variable, which completers never actually need, and was in
1470 conflict with the rlcompleter API. Custom completers ONLY need to
1475 conflict with the rlcompleter API. Custom completers ONLY need to
1471 take the text parameter.
1476 take the text parameter.
1472
1477
1473 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1478 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1474 work correctly in pysh. I've also moved all the logic which used
1479 work correctly in pysh. I've also moved all the logic which used
1475 to be in pysh.py here, which will prevent problems with future
1480 to be in pysh.py here, which will prevent problems with future
1476 upgrades. However, this time I must warn users to update their
1481 upgrades. However, this time I must warn users to update their
1477 pysh profile to include the line
1482 pysh profile to include the line
1478
1483
1479 import_all IPython.Extensions.InterpreterExec
1484 import_all IPython.Extensions.InterpreterExec
1480
1485
1481 because otherwise things won't work for them. They MUST also
1486 because otherwise things won't work for them. They MUST also
1482 delete pysh.py and the line
1487 delete pysh.py and the line
1483
1488
1484 execfile pysh.py
1489 execfile pysh.py
1485
1490
1486 from their ipythonrc-pysh.
1491 from their ipythonrc-pysh.
1487
1492
1488 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1493 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1489 robust in the face of objects whose dir() returns non-strings
1494 robust in the face of objects whose dir() returns non-strings
1490 (which it shouldn't, but some broken libs like ITK do). Thanks to
1495 (which it shouldn't, but some broken libs like ITK do). Thanks to
1491 a patch by John Hunter (implemented differently, though). Also
1496 a patch by John Hunter (implemented differently, though). Also
1492 minor improvements by using .extend instead of + on lists.
1497 minor improvements by using .extend instead of + on lists.
1493
1498
1494 * pysh.py:
1499 * pysh.py:
1495
1500
1496 2005-04-06 Fernando Perez <fperez@colorado.edu>
1501 2005-04-06 Fernando Perez <fperez@colorado.edu>
1497
1502
1498 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1503 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1499 by default, so that all users benefit from it. Those who don't
1504 by default, so that all users benefit from it. Those who don't
1500 want it can still turn it off.
1505 want it can still turn it off.
1501
1506
1502 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1507 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1503 config file, I'd forgotten about this, so users were getting it
1508 config file, I'd forgotten about this, so users were getting it
1504 off by default.
1509 off by default.
1505
1510
1506 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1511 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1507 consistency. Now magics can be called in multiline statements,
1512 consistency. Now magics can be called in multiline statements,
1508 and python variables can be expanded in magic calls via $var.
1513 and python variables can be expanded in magic calls via $var.
1509 This makes the magic system behave just like aliases or !system
1514 This makes the magic system behave just like aliases or !system
1510 calls.
1515 calls.
1511
1516
1512 2005-03-28 Fernando Perez <fperez@colorado.edu>
1517 2005-03-28 Fernando Perez <fperez@colorado.edu>
1513
1518
1514 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1519 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1515 expensive string additions for building command. Add support for
1520 expensive string additions for building command. Add support for
1516 trailing ';' when autocall is used.
1521 trailing ';' when autocall is used.
1517
1522
1518 2005-03-26 Fernando Perez <fperez@colorado.edu>
1523 2005-03-26 Fernando Perez <fperez@colorado.edu>
1519
1524
1520 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1525 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1521 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1526 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1522 ipython.el robust against prompts with any number of spaces
1527 ipython.el robust against prompts with any number of spaces
1523 (including 0) after the ':' character.
1528 (including 0) after the ':' character.
1524
1529
1525 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1530 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1526 continuation prompt, which misled users to think the line was
1531 continuation prompt, which misled users to think the line was
1527 already indented. Closes debian Bug#300847, reported to me by
1532 already indented. Closes debian Bug#300847, reported to me by
1528 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1533 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1529
1534
1530 2005-03-23 Fernando Perez <fperez@colorado.edu>
1535 2005-03-23 Fernando Perez <fperez@colorado.edu>
1531
1536
1532 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1537 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1533 properly aligned if they have embedded newlines.
1538 properly aligned if they have embedded newlines.
1534
1539
1535 * IPython/iplib.py (runlines): Add a public method to expose
1540 * IPython/iplib.py (runlines): Add a public method to expose
1536 IPython's code execution machinery, so that users can run strings
1541 IPython's code execution machinery, so that users can run strings
1537 as if they had been typed at the prompt interactively.
1542 as if they had been typed at the prompt interactively.
1538 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1543 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1539 methods which can call the system shell, but with python variable
1544 methods which can call the system shell, but with python variable
1540 expansion. The three such methods are: __IPYTHON__.system,
1545 expansion. The three such methods are: __IPYTHON__.system,
1541 .getoutput and .getoutputerror. These need to be documented in a
1546 .getoutput and .getoutputerror. These need to be documented in a
1542 'public API' section (to be written) of the manual.
1547 'public API' section (to be written) of the manual.
1543
1548
1544 2005-03-20 Fernando Perez <fperez@colorado.edu>
1549 2005-03-20 Fernando Perez <fperez@colorado.edu>
1545
1550
1546 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1551 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1547 for custom exception handling. This is quite powerful, and it
1552 for custom exception handling. This is quite powerful, and it
1548 allows for user-installable exception handlers which can trap
1553 allows for user-installable exception handlers which can trap
1549 custom exceptions at runtime and treat them separately from
1554 custom exceptions at runtime and treat them separately from
1550 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1555 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1551 Mantegazza <mantegazza-AT-ill.fr>.
1556 Mantegazza <mantegazza-AT-ill.fr>.
1552 (InteractiveShell.set_custom_completer): public API function to
1557 (InteractiveShell.set_custom_completer): public API function to
1553 add new completers at runtime.
1558 add new completers at runtime.
1554
1559
1555 2005-03-19 Fernando Perez <fperez@colorado.edu>
1560 2005-03-19 Fernando Perez <fperez@colorado.edu>
1556
1561
1557 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1562 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1558 allow objects which provide their docstrings via non-standard
1563 allow objects which provide their docstrings via non-standard
1559 mechanisms (like Pyro proxies) to still be inspected by ipython's
1564 mechanisms (like Pyro proxies) to still be inspected by ipython's
1560 ? system.
1565 ? system.
1561
1566
1562 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1567 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1563 automatic capture system. I tried quite hard to make it work
1568 automatic capture system. I tried quite hard to make it work
1564 reliably, and simply failed. I tried many combinations with the
1569 reliably, and simply failed. I tried many combinations with the
1565 subprocess module, but eventually nothing worked in all needed
1570 subprocess module, but eventually nothing worked in all needed
1566 cases (not blocking stdin for the child, duplicating stdout
1571 cases (not blocking stdin for the child, duplicating stdout
1567 without blocking, etc). The new %sc/%sx still do capture to these
1572 without blocking, etc). The new %sc/%sx still do capture to these
1568 magical list/string objects which make shell use much more
1573 magical list/string objects which make shell use much more
1569 conveninent, so not all is lost.
1574 conveninent, so not all is lost.
1570
1575
1571 XXX - FIX MANUAL for the change above!
1576 XXX - FIX MANUAL for the change above!
1572
1577
1573 (runsource): I copied code.py's runsource() into ipython to modify
1578 (runsource): I copied code.py's runsource() into ipython to modify
1574 it a bit. Now the code object and source to be executed are
1579 it a bit. Now the code object and source to be executed are
1575 stored in ipython. This makes this info accessible to third-party
1580 stored in ipython. This makes this info accessible to third-party
1576 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1581 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1577 Mantegazza <mantegazza-AT-ill.fr>.
1582 Mantegazza <mantegazza-AT-ill.fr>.
1578
1583
1579 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1584 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1580 history-search via readline (like C-p/C-n). I'd wanted this for a
1585 history-search via readline (like C-p/C-n). I'd wanted this for a
1581 long time, but only recently found out how to do it. For users
1586 long time, but only recently found out how to do it. For users
1582 who already have their ipythonrc files made and want this, just
1587 who already have their ipythonrc files made and want this, just
1583 add:
1588 add:
1584
1589
1585 readline_parse_and_bind "\e[A": history-search-backward
1590 readline_parse_and_bind "\e[A": history-search-backward
1586 readline_parse_and_bind "\e[B": history-search-forward
1591 readline_parse_and_bind "\e[B": history-search-forward
1587
1592
1588 2005-03-18 Fernando Perez <fperez@colorado.edu>
1593 2005-03-18 Fernando Perez <fperez@colorado.edu>
1589
1594
1590 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1595 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1591 LSString and SList classes which allow transparent conversions
1596 LSString and SList classes which allow transparent conversions
1592 between list mode and whitespace-separated string.
1597 between list mode and whitespace-separated string.
1593 (magic_r): Fix recursion problem in %r.
1598 (magic_r): Fix recursion problem in %r.
1594
1599
1595 * IPython/genutils.py (LSString): New class to be used for
1600 * IPython/genutils.py (LSString): New class to be used for
1596 automatic storage of the results of all alias/system calls in _o
1601 automatic storage of the results of all alias/system calls in _o
1597 and _e (stdout/err). These provide a .l/.list attribute which
1602 and _e (stdout/err). These provide a .l/.list attribute which
1598 does automatic splitting on newlines. This means that for most
1603 does automatic splitting on newlines. This means that for most
1599 uses, you'll never need to do capturing of output with %sc/%sx
1604 uses, you'll never need to do capturing of output with %sc/%sx
1600 anymore, since ipython keeps this always done for you. Note that
1605 anymore, since ipython keeps this always done for you. Note that
1601 only the LAST results are stored, the _o/e variables are
1606 only the LAST results are stored, the _o/e variables are
1602 overwritten on each call. If you need to save their contents
1607 overwritten on each call. If you need to save their contents
1603 further, simply bind them to any other name.
1608 further, simply bind them to any other name.
1604
1609
1605 2005-03-17 Fernando Perez <fperez@colorado.edu>
1610 2005-03-17 Fernando Perez <fperez@colorado.edu>
1606
1611
1607 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1612 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1608 prompt namespace handling.
1613 prompt namespace handling.
1609
1614
1610 2005-03-16 Fernando Perez <fperez@colorado.edu>
1615 2005-03-16 Fernando Perez <fperez@colorado.edu>
1611
1616
1612 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1617 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1613 classic prompts to be '>>> ' (final space was missing, and it
1618 classic prompts to be '>>> ' (final space was missing, and it
1614 trips the emacs python mode).
1619 trips the emacs python mode).
1615 (BasePrompt.__str__): Added safe support for dynamic prompt
1620 (BasePrompt.__str__): Added safe support for dynamic prompt
1616 strings. Now you can set your prompt string to be '$x', and the
1621 strings. Now you can set your prompt string to be '$x', and the
1617 value of x will be printed from your interactive namespace. The
1622 value of x will be printed from your interactive namespace. The
1618 interpolation syntax includes the full Itpl support, so
1623 interpolation syntax includes the full Itpl support, so
1619 ${foo()+x+bar()} is a valid prompt string now, and the function
1624 ${foo()+x+bar()} is a valid prompt string now, and the function
1620 calls will be made at runtime.
1625 calls will be made at runtime.
1621
1626
1622 2005-03-15 Fernando Perez <fperez@colorado.edu>
1627 2005-03-15 Fernando Perez <fperez@colorado.edu>
1623
1628
1624 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1629 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1625 avoid name clashes in pylab. %hist still works, it just forwards
1630 avoid name clashes in pylab. %hist still works, it just forwards
1626 the call to %history.
1631 the call to %history.
1627
1632
1628 2005-03-02 *** Released version 0.6.12
1633 2005-03-02 *** Released version 0.6.12
1629
1634
1630 2005-03-02 Fernando Perez <fperez@colorado.edu>
1635 2005-03-02 Fernando Perez <fperez@colorado.edu>
1631
1636
1632 * IPython/iplib.py (handle_magic): log magic calls properly as
1637 * IPython/iplib.py (handle_magic): log magic calls properly as
1633 ipmagic() function calls.
1638 ipmagic() function calls.
1634
1639
1635 * IPython/Magic.py (magic_time): Improved %time to support
1640 * IPython/Magic.py (magic_time): Improved %time to support
1636 statements and provide wall-clock as well as CPU time.
1641 statements and provide wall-clock as well as CPU time.
1637
1642
1638 2005-02-27 Fernando Perez <fperez@colorado.edu>
1643 2005-02-27 Fernando Perez <fperez@colorado.edu>
1639
1644
1640 * IPython/hooks.py: New hooks module, to expose user-modifiable
1645 * IPython/hooks.py: New hooks module, to expose user-modifiable
1641 IPython functionality in a clean manner. For now only the editor
1646 IPython functionality in a clean manner. For now only the editor
1642 hook is actually written, and other thigns which I intend to turn
1647 hook is actually written, and other thigns which I intend to turn
1643 into proper hooks aren't yet there. The display and prefilter
1648 into proper hooks aren't yet there. The display and prefilter
1644 stuff, for example, should be hooks. But at least now the
1649 stuff, for example, should be hooks. But at least now the
1645 framework is in place, and the rest can be moved here with more
1650 framework is in place, and the rest can be moved here with more
1646 time later. IPython had had a .hooks variable for a long time for
1651 time later. IPython had had a .hooks variable for a long time for
1647 this purpose, but I'd never actually used it for anything.
1652 this purpose, but I'd never actually used it for anything.
1648
1653
1649 2005-02-26 Fernando Perez <fperez@colorado.edu>
1654 2005-02-26 Fernando Perez <fperez@colorado.edu>
1650
1655
1651 * IPython/ipmaker.py (make_IPython): make the default ipython
1656 * IPython/ipmaker.py (make_IPython): make the default ipython
1652 directory be called _ipython under win32, to follow more the
1657 directory be called _ipython under win32, to follow more the
1653 naming peculiarities of that platform (where buggy software like
1658 naming peculiarities of that platform (where buggy software like
1654 Visual Sourcesafe breaks with .named directories). Reported by
1659 Visual Sourcesafe breaks with .named directories). Reported by
1655 Ville Vainio.
1660 Ville Vainio.
1656
1661
1657 2005-02-23 Fernando Perez <fperez@colorado.edu>
1662 2005-02-23 Fernando Perez <fperez@colorado.edu>
1658
1663
1659 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1664 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1660 auto_aliases for win32 which were causing problems. Users can
1665 auto_aliases for win32 which were causing problems. Users can
1661 define the ones they personally like.
1666 define the ones they personally like.
1662
1667
1663 2005-02-21 Fernando Perez <fperez@colorado.edu>
1668 2005-02-21 Fernando Perez <fperez@colorado.edu>
1664
1669
1665 * IPython/Magic.py (magic_time): new magic to time execution of
1670 * IPython/Magic.py (magic_time): new magic to time execution of
1666 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1671 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1667
1672
1668 2005-02-19 Fernando Perez <fperez@colorado.edu>
1673 2005-02-19 Fernando Perez <fperez@colorado.edu>
1669
1674
1670 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1675 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1671 into keys (for prompts, for example).
1676 into keys (for prompts, for example).
1672
1677
1673 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1678 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1674 prompts in case users want them. This introduces a small behavior
1679 prompts in case users want them. This introduces a small behavior
1675 change: ipython does not automatically add a space to all prompts
1680 change: ipython does not automatically add a space to all prompts
1676 anymore. To get the old prompts with a space, users should add it
1681 anymore. To get the old prompts with a space, users should add it
1677 manually to their ipythonrc file, so for example prompt_in1 should
1682 manually to their ipythonrc file, so for example prompt_in1 should
1678 now read 'In [\#]: ' instead of 'In [\#]:'.
1683 now read 'In [\#]: ' instead of 'In [\#]:'.
1679 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1684 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1680 file) to control left-padding of secondary prompts.
1685 file) to control left-padding of secondary prompts.
1681
1686
1682 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1687 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1683 the profiler can't be imported. Fix for Debian, which removed
1688 the profiler can't be imported. Fix for Debian, which removed
1684 profile.py because of License issues. I applied a slightly
1689 profile.py because of License issues. I applied a slightly
1685 modified version of the original Debian patch at
1690 modified version of the original Debian patch at
1686 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1691 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1687
1692
1688 2005-02-17 Fernando Perez <fperez@colorado.edu>
1693 2005-02-17 Fernando Perez <fperez@colorado.edu>
1689
1694
1690 * IPython/genutils.py (native_line_ends): Fix bug which would
1695 * IPython/genutils.py (native_line_ends): Fix bug which would
1691 cause improper line-ends under win32 b/c I was not opening files
1696 cause improper line-ends under win32 b/c I was not opening files
1692 in binary mode. Bug report and fix thanks to Ville.
1697 in binary mode. Bug report and fix thanks to Ville.
1693
1698
1694 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1699 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1695 trying to catch spurious foo[1] autocalls. My fix actually broke
1700 trying to catch spurious foo[1] autocalls. My fix actually broke
1696 ',/' autoquote/call with explicit escape (bad regexp).
1701 ',/' autoquote/call with explicit escape (bad regexp).
1697
1702
1698 2005-02-15 *** Released version 0.6.11
1703 2005-02-15 *** Released version 0.6.11
1699
1704
1700 2005-02-14 Fernando Perez <fperez@colorado.edu>
1705 2005-02-14 Fernando Perez <fperez@colorado.edu>
1701
1706
1702 * IPython/background_jobs.py: New background job management
1707 * IPython/background_jobs.py: New background job management
1703 subsystem. This is implemented via a new set of classes, and
1708 subsystem. This is implemented via a new set of classes, and
1704 IPython now provides a builtin 'jobs' object for background job
1709 IPython now provides a builtin 'jobs' object for background job
1705 execution. A convenience %bg magic serves as a lightweight
1710 execution. A convenience %bg magic serves as a lightweight
1706 frontend for starting the more common type of calls. This was
1711 frontend for starting the more common type of calls. This was
1707 inspired by discussions with B. Granger and the BackgroundCommand
1712 inspired by discussions with B. Granger and the BackgroundCommand
1708 class described in the book Python Scripting for Computational
1713 class described in the book Python Scripting for Computational
1709 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1714 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1710 (although ultimately no code from this text was used, as IPython's
1715 (although ultimately no code from this text was used, as IPython's
1711 system is a separate implementation).
1716 system is a separate implementation).
1712
1717
1713 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1718 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1714 to control the completion of single/double underscore names
1719 to control the completion of single/double underscore names
1715 separately. As documented in the example ipytonrc file, the
1720 separately. As documented in the example ipytonrc file, the
1716 readline_omit__names variable can now be set to 2, to omit even
1721 readline_omit__names variable can now be set to 2, to omit even
1717 single underscore names. Thanks to a patch by Brian Wong
1722 single underscore names. Thanks to a patch by Brian Wong
1718 <BrianWong-AT-AirgoNetworks.Com>.
1723 <BrianWong-AT-AirgoNetworks.Com>.
1719 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1724 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1720 be autocalled as foo([1]) if foo were callable. A problem for
1725 be autocalled as foo([1]) if foo were callable. A problem for
1721 things which are both callable and implement __getitem__.
1726 things which are both callable and implement __getitem__.
1722 (init_readline): Fix autoindentation for win32. Thanks to a patch
1727 (init_readline): Fix autoindentation for win32. Thanks to a patch
1723 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1728 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1724
1729
1725 2005-02-12 Fernando Perez <fperez@colorado.edu>
1730 2005-02-12 Fernando Perez <fperez@colorado.edu>
1726
1731
1727 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1732 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1728 which I had written long ago to sort out user error messages which
1733 which I had written long ago to sort out user error messages which
1729 may occur during startup. This seemed like a good idea initially,
1734 may occur during startup. This seemed like a good idea initially,
1730 but it has proven a disaster in retrospect. I don't want to
1735 but it has proven a disaster in retrospect. I don't want to
1731 change much code for now, so my fix is to set the internal 'debug'
1736 change much code for now, so my fix is to set the internal 'debug'
1732 flag to true everywhere, whose only job was precisely to control
1737 flag to true everywhere, whose only job was precisely to control
1733 this subsystem. This closes issue 28 (as well as avoiding all
1738 this subsystem. This closes issue 28 (as well as avoiding all
1734 sorts of strange hangups which occur from time to time).
1739 sorts of strange hangups which occur from time to time).
1735
1740
1736 2005-02-07 Fernando Perez <fperez@colorado.edu>
1741 2005-02-07 Fernando Perez <fperez@colorado.edu>
1737
1742
1738 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1743 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1739 previous call produced a syntax error.
1744 previous call produced a syntax error.
1740
1745
1741 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1746 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1742 classes without constructor.
1747 classes without constructor.
1743
1748
1744 2005-02-06 Fernando Perez <fperez@colorado.edu>
1749 2005-02-06 Fernando Perez <fperez@colorado.edu>
1745
1750
1746 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1751 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1747 completions with the results of each matcher, so we return results
1752 completions with the results of each matcher, so we return results
1748 to the user from all namespaces. This breaks with ipython
1753 to the user from all namespaces. This breaks with ipython
1749 tradition, but I think it's a nicer behavior. Now you get all
1754 tradition, but I think it's a nicer behavior. Now you get all
1750 possible completions listed, from all possible namespaces (python,
1755 possible completions listed, from all possible namespaces (python,
1751 filesystem, magics...) After a request by John Hunter
1756 filesystem, magics...) After a request by John Hunter
1752 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1757 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1753
1758
1754 2005-02-05 Fernando Perez <fperez@colorado.edu>
1759 2005-02-05 Fernando Perez <fperez@colorado.edu>
1755
1760
1756 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1761 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1757 the call had quote characters in it (the quotes were stripped).
1762 the call had quote characters in it (the quotes were stripped).
1758
1763
1759 2005-01-31 Fernando Perez <fperez@colorado.edu>
1764 2005-01-31 Fernando Perez <fperez@colorado.edu>
1760
1765
1761 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1766 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1762 Itpl.itpl() to make the code more robust against psyco
1767 Itpl.itpl() to make the code more robust against psyco
1763 optimizations.
1768 optimizations.
1764
1769
1765 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1770 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1766 of causing an exception. Quicker, cleaner.
1771 of causing an exception. Quicker, cleaner.
1767
1772
1768 2005-01-28 Fernando Perez <fperez@colorado.edu>
1773 2005-01-28 Fernando Perez <fperez@colorado.edu>
1769
1774
1770 * scripts/ipython_win_post_install.py (install): hardcode
1775 * scripts/ipython_win_post_install.py (install): hardcode
1771 sys.prefix+'python.exe' as the executable path. It turns out that
1776 sys.prefix+'python.exe' as the executable path. It turns out that
1772 during the post-installation run, sys.executable resolves to the
1777 during the post-installation run, sys.executable resolves to the
1773 name of the binary installer! I should report this as a distutils
1778 name of the binary installer! I should report this as a distutils
1774 bug, I think. I updated the .10 release with this tiny fix, to
1779 bug, I think. I updated the .10 release with this tiny fix, to
1775 avoid annoying the lists further.
1780 avoid annoying the lists further.
1776
1781
1777 2005-01-27 *** Released version 0.6.10
1782 2005-01-27 *** Released version 0.6.10
1778
1783
1779 2005-01-27 Fernando Perez <fperez@colorado.edu>
1784 2005-01-27 Fernando Perez <fperez@colorado.edu>
1780
1785
1781 * IPython/numutils.py (norm): Added 'inf' as optional name for
1786 * IPython/numutils.py (norm): Added 'inf' as optional name for
1782 L-infinity norm, included references to mathworld.com for vector
1787 L-infinity norm, included references to mathworld.com for vector
1783 norm definitions.
1788 norm definitions.
1784 (amin/amax): added amin/amax for array min/max. Similar to what
1789 (amin/amax): added amin/amax for array min/max. Similar to what
1785 pylab ships with after the recent reorganization of names.
1790 pylab ships with after the recent reorganization of names.
1786 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1791 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1787
1792
1788 * ipython.el: committed Alex's recent fixes and improvements.
1793 * ipython.el: committed Alex's recent fixes and improvements.
1789 Tested with python-mode from CVS, and it looks excellent. Since
1794 Tested with python-mode from CVS, and it looks excellent. Since
1790 python-mode hasn't released anything in a while, I'm temporarily
1795 python-mode hasn't released anything in a while, I'm temporarily
1791 putting a copy of today's CVS (v 4.70) of python-mode in:
1796 putting a copy of today's CVS (v 4.70) of python-mode in:
1792 http://ipython.scipy.org/tmp/python-mode.el
1797 http://ipython.scipy.org/tmp/python-mode.el
1793
1798
1794 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1799 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1795 sys.executable for the executable name, instead of assuming it's
1800 sys.executable for the executable name, instead of assuming it's
1796 called 'python.exe' (the post-installer would have produced broken
1801 called 'python.exe' (the post-installer would have produced broken
1797 setups on systems with a differently named python binary).
1802 setups on systems with a differently named python binary).
1798
1803
1799 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1804 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1800 references to os.linesep, to make the code more
1805 references to os.linesep, to make the code more
1801 platform-independent. This is also part of the win32 coloring
1806 platform-independent. This is also part of the win32 coloring
1802 fixes.
1807 fixes.
1803
1808
1804 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1809 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1805 lines, which actually cause coloring bugs because the length of
1810 lines, which actually cause coloring bugs because the length of
1806 the line is very difficult to correctly compute with embedded
1811 the line is very difficult to correctly compute with embedded
1807 escapes. This was the source of all the coloring problems under
1812 escapes. This was the source of all the coloring problems under
1808 Win32. I think that _finally_, Win32 users have a properly
1813 Win32. I think that _finally_, Win32 users have a properly
1809 working ipython in all respects. This would never have happened
1814 working ipython in all respects. This would never have happened
1810 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1815 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1811
1816
1812 2005-01-26 *** Released version 0.6.9
1817 2005-01-26 *** Released version 0.6.9
1813
1818
1814 2005-01-25 Fernando Perez <fperez@colorado.edu>
1819 2005-01-25 Fernando Perez <fperez@colorado.edu>
1815
1820
1816 * setup.py: finally, we have a true Windows installer, thanks to
1821 * setup.py: finally, we have a true Windows installer, thanks to
1817 the excellent work of Viktor Ransmayr
1822 the excellent work of Viktor Ransmayr
1818 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1823 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1819 Windows users. The setup routine is quite a bit cleaner thanks to
1824 Windows users. The setup routine is quite a bit cleaner thanks to
1820 this, and the post-install script uses the proper functions to
1825 this, and the post-install script uses the proper functions to
1821 allow a clean de-installation using the standard Windows Control
1826 allow a clean de-installation using the standard Windows Control
1822 Panel.
1827 Panel.
1823
1828
1824 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1829 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1825 environment variable under all OSes (including win32) if
1830 environment variable under all OSes (including win32) if
1826 available. This will give consistency to win32 users who have set
1831 available. This will give consistency to win32 users who have set
1827 this variable for any reason. If os.environ['HOME'] fails, the
1832 this variable for any reason. If os.environ['HOME'] fails, the
1828 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1833 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1829
1834
1830 2005-01-24 Fernando Perez <fperez@colorado.edu>
1835 2005-01-24 Fernando Perez <fperez@colorado.edu>
1831
1836
1832 * IPython/numutils.py (empty_like): add empty_like(), similar to
1837 * IPython/numutils.py (empty_like): add empty_like(), similar to
1833 zeros_like() but taking advantage of the new empty() Numeric routine.
1838 zeros_like() but taking advantage of the new empty() Numeric routine.
1834
1839
1835 2005-01-23 *** Released version 0.6.8
1840 2005-01-23 *** Released version 0.6.8
1836
1841
1837 2005-01-22 Fernando Perez <fperez@colorado.edu>
1842 2005-01-22 Fernando Perez <fperez@colorado.edu>
1838
1843
1839 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1844 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1840 automatic show() calls. After discussing things with JDH, it
1845 automatic show() calls. After discussing things with JDH, it
1841 turns out there are too many corner cases where this can go wrong.
1846 turns out there are too many corner cases where this can go wrong.
1842 It's best not to try to be 'too smart', and simply have ipython
1847 It's best not to try to be 'too smart', and simply have ipython
1843 reproduce as much as possible the default behavior of a normal
1848 reproduce as much as possible the default behavior of a normal
1844 python shell.
1849 python shell.
1845
1850
1846 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1851 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1847 line-splitting regexp and _prefilter() to avoid calling getattr()
1852 line-splitting regexp and _prefilter() to avoid calling getattr()
1848 on assignments. This closes
1853 on assignments. This closes
1849 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1854 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1850 readline uses getattr(), so a simple <TAB> keypress is still
1855 readline uses getattr(), so a simple <TAB> keypress is still
1851 enough to trigger getattr() calls on an object.
1856 enough to trigger getattr() calls on an object.
1852
1857
1853 2005-01-21 Fernando Perez <fperez@colorado.edu>
1858 2005-01-21 Fernando Perez <fperez@colorado.edu>
1854
1859
1855 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1860 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1856 docstring under pylab so it doesn't mask the original.
1861 docstring under pylab so it doesn't mask the original.
1857
1862
1858 2005-01-21 *** Released version 0.6.7
1863 2005-01-21 *** Released version 0.6.7
1859
1864
1860 2005-01-21 Fernando Perez <fperez@colorado.edu>
1865 2005-01-21 Fernando Perez <fperez@colorado.edu>
1861
1866
1862 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1867 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1863 signal handling for win32 users in multithreaded mode.
1868 signal handling for win32 users in multithreaded mode.
1864
1869
1865 2005-01-17 Fernando Perez <fperez@colorado.edu>
1870 2005-01-17 Fernando Perez <fperez@colorado.edu>
1866
1871
1867 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1872 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1868 instances with no __init__. After a crash report by Norbert Nemec
1873 instances with no __init__. After a crash report by Norbert Nemec
1869 <Norbert-AT-nemec-online.de>.
1874 <Norbert-AT-nemec-online.de>.
1870
1875
1871 2005-01-14 Fernando Perez <fperez@colorado.edu>
1876 2005-01-14 Fernando Perez <fperez@colorado.edu>
1872
1877
1873 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1878 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1874 names for verbose exceptions, when multiple dotted names and the
1879 names for verbose exceptions, when multiple dotted names and the
1875 'parent' object were present on the same line.
1880 'parent' object were present on the same line.
1876
1881
1877 2005-01-11 Fernando Perez <fperez@colorado.edu>
1882 2005-01-11 Fernando Perez <fperez@colorado.edu>
1878
1883
1879 * IPython/genutils.py (flag_calls): new utility to trap and flag
1884 * IPython/genutils.py (flag_calls): new utility to trap and flag
1880 calls in functions. I need it to clean up matplotlib support.
1885 calls in functions. I need it to clean up matplotlib support.
1881 Also removed some deprecated code in genutils.
1886 Also removed some deprecated code in genutils.
1882
1887
1883 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1888 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1884 that matplotlib scripts called with %run, which don't call show()
1889 that matplotlib scripts called with %run, which don't call show()
1885 themselves, still have their plotting windows open.
1890 themselves, still have their plotting windows open.
1886
1891
1887 2005-01-05 Fernando Perez <fperez@colorado.edu>
1892 2005-01-05 Fernando Perez <fperez@colorado.edu>
1888
1893
1889 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1894 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1890 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1895 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1891
1896
1892 2004-12-19 Fernando Perez <fperez@colorado.edu>
1897 2004-12-19 Fernando Perez <fperez@colorado.edu>
1893
1898
1894 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1899 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1895 parent_runcode, which was an eyesore. The same result can be
1900 parent_runcode, which was an eyesore. The same result can be
1896 obtained with Python's regular superclass mechanisms.
1901 obtained with Python's regular superclass mechanisms.
1897
1902
1898 2004-12-17 Fernando Perez <fperez@colorado.edu>
1903 2004-12-17 Fernando Perez <fperez@colorado.edu>
1899
1904
1900 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1905 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1901 reported by Prabhu.
1906 reported by Prabhu.
1902 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1907 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1903 sys.stderr) instead of explicitly calling sys.stderr. This helps
1908 sys.stderr) instead of explicitly calling sys.stderr. This helps
1904 maintain our I/O abstractions clean, for future GUI embeddings.
1909 maintain our I/O abstractions clean, for future GUI embeddings.
1905
1910
1906 * IPython/genutils.py (info): added new utility for sys.stderr
1911 * IPython/genutils.py (info): added new utility for sys.stderr
1907 unified info message handling (thin wrapper around warn()).
1912 unified info message handling (thin wrapper around warn()).
1908
1913
1909 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1914 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1910 composite (dotted) names on verbose exceptions.
1915 composite (dotted) names on verbose exceptions.
1911 (VerboseTB.nullrepr): harden against another kind of errors which
1916 (VerboseTB.nullrepr): harden against another kind of errors which
1912 Python's inspect module can trigger, and which were crashing
1917 Python's inspect module can trigger, and which were crashing
1913 IPython. Thanks to a report by Marco Lombardi
1918 IPython. Thanks to a report by Marco Lombardi
1914 <mlombard-AT-ma010192.hq.eso.org>.
1919 <mlombard-AT-ma010192.hq.eso.org>.
1915
1920
1916 2004-12-13 *** Released version 0.6.6
1921 2004-12-13 *** Released version 0.6.6
1917
1922
1918 2004-12-12 Fernando Perez <fperez@colorado.edu>
1923 2004-12-12 Fernando Perez <fperez@colorado.edu>
1919
1924
1920 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1925 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1921 generated by pygtk upon initialization if it was built without
1926 generated by pygtk upon initialization if it was built without
1922 threads (for matplotlib users). After a crash reported by
1927 threads (for matplotlib users). After a crash reported by
1923 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1928 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1924
1929
1925 * IPython/ipmaker.py (make_IPython): fix small bug in the
1930 * IPython/ipmaker.py (make_IPython): fix small bug in the
1926 import_some parameter for multiple imports.
1931 import_some parameter for multiple imports.
1927
1932
1928 * IPython/iplib.py (ipmagic): simplified the interface of
1933 * IPython/iplib.py (ipmagic): simplified the interface of
1929 ipmagic() to take a single string argument, just as it would be
1934 ipmagic() to take a single string argument, just as it would be
1930 typed at the IPython cmd line.
1935 typed at the IPython cmd line.
1931 (ipalias): Added new ipalias() with an interface identical to
1936 (ipalias): Added new ipalias() with an interface identical to
1932 ipmagic(). This completes exposing a pure python interface to the
1937 ipmagic(). This completes exposing a pure python interface to the
1933 alias and magic system, which can be used in loops or more complex
1938 alias and magic system, which can be used in loops or more complex
1934 code where IPython's automatic line mangling is not active.
1939 code where IPython's automatic line mangling is not active.
1935
1940
1936 * IPython/genutils.py (timing): changed interface of timing to
1941 * IPython/genutils.py (timing): changed interface of timing to
1937 simply run code once, which is the most common case. timings()
1942 simply run code once, which is the most common case. timings()
1938 remains unchanged, for the cases where you want multiple runs.
1943 remains unchanged, for the cases where you want multiple runs.
1939
1944
1940 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1945 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1941 bug where Python2.2 crashes with exec'ing code which does not end
1946 bug where Python2.2 crashes with exec'ing code which does not end
1942 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1947 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1943 before.
1948 before.
1944
1949
1945 2004-12-10 Fernando Perez <fperez@colorado.edu>
1950 2004-12-10 Fernando Perez <fperez@colorado.edu>
1946
1951
1947 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1952 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1948 -t to -T, to accomodate the new -t flag in %run (the %run and
1953 -t to -T, to accomodate the new -t flag in %run (the %run and
1949 %prun options are kind of intermixed, and it's not easy to change
1954 %prun options are kind of intermixed, and it's not easy to change
1950 this with the limitations of python's getopt).
1955 this with the limitations of python's getopt).
1951
1956
1952 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1957 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1953 the execution of scripts. It's not as fine-tuned as timeit.py,
1958 the execution of scripts. It's not as fine-tuned as timeit.py,
1954 but it works from inside ipython (and under 2.2, which lacks
1959 but it works from inside ipython (and under 2.2, which lacks
1955 timeit.py). Optionally a number of runs > 1 can be given for
1960 timeit.py). Optionally a number of runs > 1 can be given for
1956 timing very short-running code.
1961 timing very short-running code.
1957
1962
1958 * IPython/genutils.py (uniq_stable): new routine which returns a
1963 * IPython/genutils.py (uniq_stable): new routine which returns a
1959 list of unique elements in any iterable, but in stable order of
1964 list of unique elements in any iterable, but in stable order of
1960 appearance. I needed this for the ultraTB fixes, and it's a handy
1965 appearance. I needed this for the ultraTB fixes, and it's a handy
1961 utility.
1966 utility.
1962
1967
1963 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1968 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1964 dotted names in Verbose exceptions. This had been broken since
1969 dotted names in Verbose exceptions. This had been broken since
1965 the very start, now x.y will properly be printed in a Verbose
1970 the very start, now x.y will properly be printed in a Verbose
1966 traceback, instead of x being shown and y appearing always as an
1971 traceback, instead of x being shown and y appearing always as an
1967 'undefined global'. Getting this to work was a bit tricky,
1972 'undefined global'. Getting this to work was a bit tricky,
1968 because by default python tokenizers are stateless. Saved by
1973 because by default python tokenizers are stateless. Saved by
1969 python's ability to easily add a bit of state to an arbitrary
1974 python's ability to easily add a bit of state to an arbitrary
1970 function (without needing to build a full-blown callable object).
1975 function (without needing to build a full-blown callable object).
1971
1976
1972 Also big cleanup of this code, which had horrendous runtime
1977 Also big cleanup of this code, which had horrendous runtime
1973 lookups of zillions of attributes for colorization. Moved all
1978 lookups of zillions of attributes for colorization. Moved all
1974 this code into a few templates, which make it cleaner and quicker.
1979 this code into a few templates, which make it cleaner and quicker.
1975
1980
1976 Printout quality was also improved for Verbose exceptions: one
1981 Printout quality was also improved for Verbose exceptions: one
1977 variable per line, and memory addresses are printed (this can be
1982 variable per line, and memory addresses are printed (this can be
1978 quite handy in nasty debugging situations, which is what Verbose
1983 quite handy in nasty debugging situations, which is what Verbose
1979 is for).
1984 is for).
1980
1985
1981 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1986 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1982 the command line as scripts to be loaded by embedded instances.
1987 the command line as scripts to be loaded by embedded instances.
1983 Doing so has the potential for an infinite recursion if there are
1988 Doing so has the potential for an infinite recursion if there are
1984 exceptions thrown in the process. This fixes a strange crash
1989 exceptions thrown in the process. This fixes a strange crash
1985 reported by Philippe MULLER <muller-AT-irit.fr>.
1990 reported by Philippe MULLER <muller-AT-irit.fr>.
1986
1991
1987 2004-12-09 Fernando Perez <fperez@colorado.edu>
1992 2004-12-09 Fernando Perez <fperez@colorado.edu>
1988
1993
1989 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1994 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1990 to reflect new names in matplotlib, which now expose the
1995 to reflect new names in matplotlib, which now expose the
1991 matlab-compatible interface via a pylab module instead of the
1996 matlab-compatible interface via a pylab module instead of the
1992 'matlab' name. The new code is backwards compatible, so users of
1997 'matlab' name. The new code is backwards compatible, so users of
1993 all matplotlib versions are OK. Patch by J. Hunter.
1998 all matplotlib versions are OK. Patch by J. Hunter.
1994
1999
1995 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2000 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1996 of __init__ docstrings for instances (class docstrings are already
2001 of __init__ docstrings for instances (class docstrings are already
1997 automatically printed). Instances with customized docstrings
2002 automatically printed). Instances with customized docstrings
1998 (indep. of the class) are also recognized and all 3 separate
2003 (indep. of the class) are also recognized and all 3 separate
1999 docstrings are printed (instance, class, constructor). After some
2004 docstrings are printed (instance, class, constructor). After some
2000 comments/suggestions by J. Hunter.
2005 comments/suggestions by J. Hunter.
2001
2006
2002 2004-12-05 Fernando Perez <fperez@colorado.edu>
2007 2004-12-05 Fernando Perez <fperez@colorado.edu>
2003
2008
2004 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2009 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2005 warnings when tab-completion fails and triggers an exception.
2010 warnings when tab-completion fails and triggers an exception.
2006
2011
2007 2004-12-03 Fernando Perez <fperez@colorado.edu>
2012 2004-12-03 Fernando Perez <fperez@colorado.edu>
2008
2013
2009 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2014 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2010 be triggered when using 'run -p'. An incorrect option flag was
2015 be triggered when using 'run -p'. An incorrect option flag was
2011 being set ('d' instead of 'D').
2016 being set ('d' instead of 'D').
2012 (manpage): fix missing escaped \- sign.
2017 (manpage): fix missing escaped \- sign.
2013
2018
2014 2004-11-30 *** Released version 0.6.5
2019 2004-11-30 *** Released version 0.6.5
2015
2020
2016 2004-11-30 Fernando Perez <fperez@colorado.edu>
2021 2004-11-30 Fernando Perez <fperez@colorado.edu>
2017
2022
2018 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2023 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2019 setting with -d option.
2024 setting with -d option.
2020
2025
2021 * setup.py (docfiles): Fix problem where the doc glob I was using
2026 * setup.py (docfiles): Fix problem where the doc glob I was using
2022 was COMPLETELY BROKEN. It was giving the right files by pure
2027 was COMPLETELY BROKEN. It was giving the right files by pure
2023 accident, but failed once I tried to include ipython.el. Note:
2028 accident, but failed once I tried to include ipython.el. Note:
2024 glob() does NOT allow you to do exclusion on multiple endings!
2029 glob() does NOT allow you to do exclusion on multiple endings!
2025
2030
2026 2004-11-29 Fernando Perez <fperez@colorado.edu>
2031 2004-11-29 Fernando Perez <fperez@colorado.edu>
2027
2032
2028 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2033 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2029 the manpage as the source. Better formatting & consistency.
2034 the manpage as the source. Better formatting & consistency.
2030
2035
2031 * IPython/Magic.py (magic_run): Added new -d option, to run
2036 * IPython/Magic.py (magic_run): Added new -d option, to run
2032 scripts under the control of the python pdb debugger. Note that
2037 scripts under the control of the python pdb debugger. Note that
2033 this required changing the %prun option -d to -D, to avoid a clash
2038 this required changing the %prun option -d to -D, to avoid a clash
2034 (since %run must pass options to %prun, and getopt is too dumb to
2039 (since %run must pass options to %prun, and getopt is too dumb to
2035 handle options with string values with embedded spaces). Thanks
2040 handle options with string values with embedded spaces). Thanks
2036 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2041 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2037 (magic_who_ls): added type matching to %who and %whos, so that one
2042 (magic_who_ls): added type matching to %who and %whos, so that one
2038 can filter their output to only include variables of certain
2043 can filter their output to only include variables of certain
2039 types. Another suggestion by Matthew.
2044 types. Another suggestion by Matthew.
2040 (magic_whos): Added memory summaries in kb and Mb for arrays.
2045 (magic_whos): Added memory summaries in kb and Mb for arrays.
2041 (magic_who): Improve formatting (break lines every 9 vars).
2046 (magic_who): Improve formatting (break lines every 9 vars).
2042
2047
2043 2004-11-28 Fernando Perez <fperez@colorado.edu>
2048 2004-11-28 Fernando Perez <fperez@colorado.edu>
2044
2049
2045 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2050 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2046 cache when empty lines were present.
2051 cache when empty lines were present.
2047
2052
2048 2004-11-24 Fernando Perez <fperez@colorado.edu>
2053 2004-11-24 Fernando Perez <fperez@colorado.edu>
2049
2054
2050 * IPython/usage.py (__doc__): document the re-activated threading
2055 * IPython/usage.py (__doc__): document the re-activated threading
2051 options for WX and GTK.
2056 options for WX and GTK.
2052
2057
2053 2004-11-23 Fernando Perez <fperez@colorado.edu>
2058 2004-11-23 Fernando Perez <fperez@colorado.edu>
2054
2059
2055 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2060 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2056 the -wthread and -gthread options, along with a new -tk one to try
2061 the -wthread and -gthread options, along with a new -tk one to try
2057 and coordinate Tk threading with wx/gtk. The tk support is very
2062 and coordinate Tk threading with wx/gtk. The tk support is very
2058 platform dependent, since it seems to require Tcl and Tk to be
2063 platform dependent, since it seems to require Tcl and Tk to be
2059 built with threads (Fedora1/2 appears NOT to have it, but in
2064 built with threads (Fedora1/2 appears NOT to have it, but in
2060 Prabhu's Debian boxes it works OK). But even with some Tk
2065 Prabhu's Debian boxes it works OK). But even with some Tk
2061 limitations, this is a great improvement.
2066 limitations, this is a great improvement.
2062
2067
2063 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2068 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2064 info in user prompts. Patch by Prabhu.
2069 info in user prompts. Patch by Prabhu.
2065
2070
2066 2004-11-18 Fernando Perez <fperez@colorado.edu>
2071 2004-11-18 Fernando Perez <fperez@colorado.edu>
2067
2072
2068 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2073 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2069 EOFErrors and bail, to avoid infinite loops if a non-terminating
2074 EOFErrors and bail, to avoid infinite loops if a non-terminating
2070 file is fed into ipython. Patch submitted in issue 19 by user,
2075 file is fed into ipython. Patch submitted in issue 19 by user,
2071 many thanks.
2076 many thanks.
2072
2077
2073 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2078 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2074 autoquote/parens in continuation prompts, which can cause lots of
2079 autoquote/parens in continuation prompts, which can cause lots of
2075 problems. Closes roundup issue 20.
2080 problems. Closes roundup issue 20.
2076
2081
2077 2004-11-17 Fernando Perez <fperez@colorado.edu>
2082 2004-11-17 Fernando Perez <fperez@colorado.edu>
2078
2083
2079 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2084 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2080 reported as debian bug #280505. I'm not sure my local changelog
2085 reported as debian bug #280505. I'm not sure my local changelog
2081 entry has the proper debian format (Jack?).
2086 entry has the proper debian format (Jack?).
2082
2087
2083 2004-11-08 *** Released version 0.6.4
2088 2004-11-08 *** Released version 0.6.4
2084
2089
2085 2004-11-08 Fernando Perez <fperez@colorado.edu>
2090 2004-11-08 Fernando Perez <fperez@colorado.edu>
2086
2091
2087 * IPython/iplib.py (init_readline): Fix exit message for Windows
2092 * IPython/iplib.py (init_readline): Fix exit message for Windows
2088 when readline is active. Thanks to a report by Eric Jones
2093 when readline is active. Thanks to a report by Eric Jones
2089 <eric-AT-enthought.com>.
2094 <eric-AT-enthought.com>.
2090
2095
2091 2004-11-07 Fernando Perez <fperez@colorado.edu>
2096 2004-11-07 Fernando Perez <fperez@colorado.edu>
2092
2097
2093 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2098 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2094 sometimes seen by win2k/cygwin users.
2099 sometimes seen by win2k/cygwin users.
2095
2100
2096 2004-11-06 Fernando Perez <fperez@colorado.edu>
2101 2004-11-06 Fernando Perez <fperez@colorado.edu>
2097
2102
2098 * IPython/iplib.py (interact): Change the handling of %Exit from
2103 * IPython/iplib.py (interact): Change the handling of %Exit from
2099 trying to propagate a SystemExit to an internal ipython flag.
2104 trying to propagate a SystemExit to an internal ipython flag.
2100 This is less elegant than using Python's exception mechanism, but
2105 This is less elegant than using Python's exception mechanism, but
2101 I can't get that to work reliably with threads, so under -pylab
2106 I can't get that to work reliably with threads, so under -pylab
2102 %Exit was hanging IPython. Cross-thread exception handling is
2107 %Exit was hanging IPython. Cross-thread exception handling is
2103 really a bitch. Thaks to a bug report by Stephen Walton
2108 really a bitch. Thaks to a bug report by Stephen Walton
2104 <stephen.walton-AT-csun.edu>.
2109 <stephen.walton-AT-csun.edu>.
2105
2110
2106 2004-11-04 Fernando Perez <fperez@colorado.edu>
2111 2004-11-04 Fernando Perez <fperez@colorado.edu>
2107
2112
2108 * IPython/iplib.py (raw_input_original): store a pointer to the
2113 * IPython/iplib.py (raw_input_original): store a pointer to the
2109 true raw_input to harden against code which can modify it
2114 true raw_input to harden against code which can modify it
2110 (wx.py.PyShell does this and would otherwise crash ipython).
2115 (wx.py.PyShell does this and would otherwise crash ipython).
2111 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2116 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2112
2117
2113 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2118 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2114 Ctrl-C problem, which does not mess up the input line.
2119 Ctrl-C problem, which does not mess up the input line.
2115
2120
2116 2004-11-03 Fernando Perez <fperez@colorado.edu>
2121 2004-11-03 Fernando Perez <fperez@colorado.edu>
2117
2122
2118 * IPython/Release.py: Changed licensing to BSD, in all files.
2123 * IPython/Release.py: Changed licensing to BSD, in all files.
2119 (name): lowercase name for tarball/RPM release.
2124 (name): lowercase name for tarball/RPM release.
2120
2125
2121 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2126 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2122 use throughout ipython.
2127 use throughout ipython.
2123
2128
2124 * IPython/Magic.py (Magic._ofind): Switch to using the new
2129 * IPython/Magic.py (Magic._ofind): Switch to using the new
2125 OInspect.getdoc() function.
2130 OInspect.getdoc() function.
2126
2131
2127 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2132 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2128 of the line currently being canceled via Ctrl-C. It's extremely
2133 of the line currently being canceled via Ctrl-C. It's extremely
2129 ugly, but I don't know how to do it better (the problem is one of
2134 ugly, but I don't know how to do it better (the problem is one of
2130 handling cross-thread exceptions).
2135 handling cross-thread exceptions).
2131
2136
2132 2004-10-28 Fernando Perez <fperez@colorado.edu>
2137 2004-10-28 Fernando Perez <fperez@colorado.edu>
2133
2138
2134 * IPython/Shell.py (signal_handler): add signal handlers to trap
2139 * IPython/Shell.py (signal_handler): add signal handlers to trap
2135 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2140 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2136 report by Francesc Alted.
2141 report by Francesc Alted.
2137
2142
2138 2004-10-21 Fernando Perez <fperez@colorado.edu>
2143 2004-10-21 Fernando Perez <fperez@colorado.edu>
2139
2144
2140 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2145 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2141 to % for pysh syntax extensions.
2146 to % for pysh syntax extensions.
2142
2147
2143 2004-10-09 Fernando Perez <fperez@colorado.edu>
2148 2004-10-09 Fernando Perez <fperez@colorado.edu>
2144
2149
2145 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2150 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2146 arrays to print a more useful summary, without calling str(arr).
2151 arrays to print a more useful summary, without calling str(arr).
2147 This avoids the problem of extremely lengthy computations which
2152 This avoids the problem of extremely lengthy computations which
2148 occur if arr is large, and appear to the user as a system lockup
2153 occur if arr is large, and appear to the user as a system lockup
2149 with 100% cpu activity. After a suggestion by Kristian Sandberg
2154 with 100% cpu activity. After a suggestion by Kristian Sandberg
2150 <Kristian.Sandberg@colorado.edu>.
2155 <Kristian.Sandberg@colorado.edu>.
2151 (Magic.__init__): fix bug in global magic escapes not being
2156 (Magic.__init__): fix bug in global magic escapes not being
2152 correctly set.
2157 correctly set.
2153
2158
2154 2004-10-08 Fernando Perez <fperez@colorado.edu>
2159 2004-10-08 Fernando Perez <fperez@colorado.edu>
2155
2160
2156 * IPython/Magic.py (__license__): change to absolute imports of
2161 * IPython/Magic.py (__license__): change to absolute imports of
2157 ipython's own internal packages, to start adapting to the absolute
2162 ipython's own internal packages, to start adapting to the absolute
2158 import requirement of PEP-328.
2163 import requirement of PEP-328.
2159
2164
2160 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2165 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2161 files, and standardize author/license marks through the Release
2166 files, and standardize author/license marks through the Release
2162 module instead of having per/file stuff (except for files with
2167 module instead of having per/file stuff (except for files with
2163 particular licenses, like the MIT/PSF-licensed codes).
2168 particular licenses, like the MIT/PSF-licensed codes).
2164
2169
2165 * IPython/Debugger.py: remove dead code for python 2.1
2170 * IPython/Debugger.py: remove dead code for python 2.1
2166
2171
2167 2004-10-04 Fernando Perez <fperez@colorado.edu>
2172 2004-10-04 Fernando Perez <fperez@colorado.edu>
2168
2173
2169 * IPython/iplib.py (ipmagic): New function for accessing magics
2174 * IPython/iplib.py (ipmagic): New function for accessing magics
2170 via a normal python function call.
2175 via a normal python function call.
2171
2176
2172 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2177 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2173 from '@' to '%', to accomodate the new @decorator syntax of python
2178 from '@' to '%', to accomodate the new @decorator syntax of python
2174 2.4.
2179 2.4.
2175
2180
2176 2004-09-29 Fernando Perez <fperez@colorado.edu>
2181 2004-09-29 Fernando Perez <fperez@colorado.edu>
2177
2182
2178 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2183 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2179 matplotlib.use to prevent running scripts which try to switch
2184 matplotlib.use to prevent running scripts which try to switch
2180 interactive backends from within ipython. This will just crash
2185 interactive backends from within ipython. This will just crash
2181 the python interpreter, so we can't allow it (but a detailed error
2186 the python interpreter, so we can't allow it (but a detailed error
2182 is given to the user).
2187 is given to the user).
2183
2188
2184 2004-09-28 Fernando Perez <fperez@colorado.edu>
2189 2004-09-28 Fernando Perez <fperez@colorado.edu>
2185
2190
2186 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2191 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2187 matplotlib-related fixes so that using @run with non-matplotlib
2192 matplotlib-related fixes so that using @run with non-matplotlib
2188 scripts doesn't pop up spurious plot windows. This requires
2193 scripts doesn't pop up spurious plot windows. This requires
2189 matplotlib >= 0.63, where I had to make some changes as well.
2194 matplotlib >= 0.63, where I had to make some changes as well.
2190
2195
2191 * IPython/ipmaker.py (make_IPython): update version requirement to
2196 * IPython/ipmaker.py (make_IPython): update version requirement to
2192 python 2.2.
2197 python 2.2.
2193
2198
2194 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2199 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2195 banner arg for embedded customization.
2200 banner arg for embedded customization.
2196
2201
2197 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2202 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2198 explicit uses of __IP as the IPython's instance name. Now things
2203 explicit uses of __IP as the IPython's instance name. Now things
2199 are properly handled via the shell.name value. The actual code
2204 are properly handled via the shell.name value. The actual code
2200 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2205 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2201 is much better than before. I'll clean things completely when the
2206 is much better than before. I'll clean things completely when the
2202 magic stuff gets a real overhaul.
2207 magic stuff gets a real overhaul.
2203
2208
2204 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2209 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2205 minor changes to debian dir.
2210 minor changes to debian dir.
2206
2211
2207 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2212 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2208 pointer to the shell itself in the interactive namespace even when
2213 pointer to the shell itself in the interactive namespace even when
2209 a user-supplied dict is provided. This is needed for embedding
2214 a user-supplied dict is provided. This is needed for embedding
2210 purposes (found by tests with Michel Sanner).
2215 purposes (found by tests with Michel Sanner).
2211
2216
2212 2004-09-27 Fernando Perez <fperez@colorado.edu>
2217 2004-09-27 Fernando Perez <fperez@colorado.edu>
2213
2218
2214 * IPython/UserConfig/ipythonrc: remove []{} from
2219 * IPython/UserConfig/ipythonrc: remove []{} from
2215 readline_remove_delims, so that things like [modname.<TAB> do
2220 readline_remove_delims, so that things like [modname.<TAB> do
2216 proper completion. This disables [].TAB, but that's a less common
2221 proper completion. This disables [].TAB, but that's a less common
2217 case than module names in list comprehensions, for example.
2222 case than module names in list comprehensions, for example.
2218 Thanks to a report by Andrea Riciputi.
2223 Thanks to a report by Andrea Riciputi.
2219
2224
2220 2004-09-09 Fernando Perez <fperez@colorado.edu>
2225 2004-09-09 Fernando Perez <fperez@colorado.edu>
2221
2226
2222 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2227 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2223 blocking problems in win32 and osx. Fix by John.
2228 blocking problems in win32 and osx. Fix by John.
2224
2229
2225 2004-09-08 Fernando Perez <fperez@colorado.edu>
2230 2004-09-08 Fernando Perez <fperez@colorado.edu>
2226
2231
2227 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2232 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2228 for Win32 and OSX. Fix by John Hunter.
2233 for Win32 and OSX. Fix by John Hunter.
2229
2234
2230 2004-08-30 *** Released version 0.6.3
2235 2004-08-30 *** Released version 0.6.3
2231
2236
2232 2004-08-30 Fernando Perez <fperez@colorado.edu>
2237 2004-08-30 Fernando Perez <fperez@colorado.edu>
2233
2238
2234 * setup.py (isfile): Add manpages to list of dependent files to be
2239 * setup.py (isfile): Add manpages to list of dependent files to be
2235 updated.
2240 updated.
2236
2241
2237 2004-08-27 Fernando Perez <fperez@colorado.edu>
2242 2004-08-27 Fernando Perez <fperez@colorado.edu>
2238
2243
2239 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2244 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2240 for now. They don't really work with standalone WX/GTK code
2245 for now. They don't really work with standalone WX/GTK code
2241 (though matplotlib IS working fine with both of those backends).
2246 (though matplotlib IS working fine with both of those backends).
2242 This will neeed much more testing. I disabled most things with
2247 This will neeed much more testing. I disabled most things with
2243 comments, so turning it back on later should be pretty easy.
2248 comments, so turning it back on later should be pretty easy.
2244
2249
2245 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2250 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2246 autocalling of expressions like r'foo', by modifying the line
2251 autocalling of expressions like r'foo', by modifying the line
2247 split regexp. Closes
2252 split regexp. Closes
2248 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2253 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2249 Riley <ipythonbugs-AT-sabi.net>.
2254 Riley <ipythonbugs-AT-sabi.net>.
2250 (InteractiveShell.mainloop): honor --nobanner with banner
2255 (InteractiveShell.mainloop): honor --nobanner with banner
2251 extensions.
2256 extensions.
2252
2257
2253 * IPython/Shell.py: Significant refactoring of all classes, so
2258 * IPython/Shell.py: Significant refactoring of all classes, so
2254 that we can really support ALL matplotlib backends and threading
2259 that we can really support ALL matplotlib backends and threading
2255 models (John spotted a bug with Tk which required this). Now we
2260 models (John spotted a bug with Tk which required this). Now we
2256 should support single-threaded, WX-threads and GTK-threads, both
2261 should support single-threaded, WX-threads and GTK-threads, both
2257 for generic code and for matplotlib.
2262 for generic code and for matplotlib.
2258
2263
2259 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2264 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2260 -pylab, to simplify things for users. Will also remove the pylab
2265 -pylab, to simplify things for users. Will also remove the pylab
2261 profile, since now all of matplotlib configuration is directly
2266 profile, since now all of matplotlib configuration is directly
2262 handled here. This also reduces startup time.
2267 handled here. This also reduces startup time.
2263
2268
2264 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2269 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2265 shell wasn't being correctly called. Also in IPShellWX.
2270 shell wasn't being correctly called. Also in IPShellWX.
2266
2271
2267 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2272 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2268 fine-tune banner.
2273 fine-tune banner.
2269
2274
2270 * IPython/numutils.py (spike): Deprecate these spike functions,
2275 * IPython/numutils.py (spike): Deprecate these spike functions,
2271 delete (long deprecated) gnuplot_exec handler.
2276 delete (long deprecated) gnuplot_exec handler.
2272
2277
2273 2004-08-26 Fernando Perez <fperez@colorado.edu>
2278 2004-08-26 Fernando Perez <fperez@colorado.edu>
2274
2279
2275 * ipython.1: Update for threading options, plus some others which
2280 * ipython.1: Update for threading options, plus some others which
2276 were missing.
2281 were missing.
2277
2282
2278 * IPython/ipmaker.py (__call__): Added -wthread option for
2283 * IPython/ipmaker.py (__call__): Added -wthread option for
2279 wxpython thread handling. Make sure threading options are only
2284 wxpython thread handling. Make sure threading options are only
2280 valid at the command line.
2285 valid at the command line.
2281
2286
2282 * scripts/ipython: moved shell selection into a factory function
2287 * scripts/ipython: moved shell selection into a factory function
2283 in Shell.py, to keep the starter script to a minimum.
2288 in Shell.py, to keep the starter script to a minimum.
2284
2289
2285 2004-08-25 Fernando Perez <fperez@colorado.edu>
2290 2004-08-25 Fernando Perez <fperez@colorado.edu>
2286
2291
2287 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2292 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2288 John. Along with some recent changes he made to matplotlib, the
2293 John. Along with some recent changes he made to matplotlib, the
2289 next versions of both systems should work very well together.
2294 next versions of both systems should work very well together.
2290
2295
2291 2004-08-24 Fernando Perez <fperez@colorado.edu>
2296 2004-08-24 Fernando Perez <fperez@colorado.edu>
2292
2297
2293 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2298 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2294 tried to switch the profiling to using hotshot, but I'm getting
2299 tried to switch the profiling to using hotshot, but I'm getting
2295 strange errors from prof.runctx() there. I may be misreading the
2300 strange errors from prof.runctx() there. I may be misreading the
2296 docs, but it looks weird. For now the profiling code will
2301 docs, but it looks weird. For now the profiling code will
2297 continue to use the standard profiler.
2302 continue to use the standard profiler.
2298
2303
2299 2004-08-23 Fernando Perez <fperez@colorado.edu>
2304 2004-08-23 Fernando Perez <fperez@colorado.edu>
2300
2305
2301 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2306 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2302 threaded shell, by John Hunter. It's not quite ready yet, but
2307 threaded shell, by John Hunter. It's not quite ready yet, but
2303 close.
2308 close.
2304
2309
2305 2004-08-22 Fernando Perez <fperez@colorado.edu>
2310 2004-08-22 Fernando Perez <fperez@colorado.edu>
2306
2311
2307 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2312 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2308 in Magic and ultraTB.
2313 in Magic and ultraTB.
2309
2314
2310 * ipython.1: document threading options in manpage.
2315 * ipython.1: document threading options in manpage.
2311
2316
2312 * scripts/ipython: Changed name of -thread option to -gthread,
2317 * scripts/ipython: Changed name of -thread option to -gthread,
2313 since this is GTK specific. I want to leave the door open for a
2318 since this is GTK specific. I want to leave the door open for a
2314 -wthread option for WX, which will most likely be necessary. This
2319 -wthread option for WX, which will most likely be necessary. This
2315 change affects usage and ipmaker as well.
2320 change affects usage and ipmaker as well.
2316
2321
2317 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2322 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2318 handle the matplotlib shell issues. Code by John Hunter
2323 handle the matplotlib shell issues. Code by John Hunter
2319 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2324 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2320 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2325 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2321 broken (and disabled for end users) for now, but it puts the
2326 broken (and disabled for end users) for now, but it puts the
2322 infrastructure in place.
2327 infrastructure in place.
2323
2328
2324 2004-08-21 Fernando Perez <fperez@colorado.edu>
2329 2004-08-21 Fernando Perez <fperez@colorado.edu>
2325
2330
2326 * ipythonrc-pylab: Add matplotlib support.
2331 * ipythonrc-pylab: Add matplotlib support.
2327
2332
2328 * matplotlib_config.py: new files for matplotlib support, part of
2333 * matplotlib_config.py: new files for matplotlib support, part of
2329 the pylab profile.
2334 the pylab profile.
2330
2335
2331 * IPython/usage.py (__doc__): documented the threading options.
2336 * IPython/usage.py (__doc__): documented the threading options.
2332
2337
2333 2004-08-20 Fernando Perez <fperez@colorado.edu>
2338 2004-08-20 Fernando Perez <fperez@colorado.edu>
2334
2339
2335 * ipython: Modified the main calling routine to handle the -thread
2340 * ipython: Modified the main calling routine to handle the -thread
2336 and -mpthread options. This needs to be done as a top-level hack,
2341 and -mpthread options. This needs to be done as a top-level hack,
2337 because it determines which class to instantiate for IPython
2342 because it determines which class to instantiate for IPython
2338 itself.
2343 itself.
2339
2344
2340 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2345 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2341 classes to support multithreaded GTK operation without blocking,
2346 classes to support multithreaded GTK operation without blocking,
2342 and matplotlib with all backends. This is a lot of still very
2347 and matplotlib with all backends. This is a lot of still very
2343 experimental code, and threads are tricky. So it may still have a
2348 experimental code, and threads are tricky. So it may still have a
2344 few rough edges... This code owes a lot to
2349 few rough edges... This code owes a lot to
2345 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2350 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2346 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2351 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2347 to John Hunter for all the matplotlib work.
2352 to John Hunter for all the matplotlib work.
2348
2353
2349 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2354 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2350 options for gtk thread and matplotlib support.
2355 options for gtk thread and matplotlib support.
2351
2356
2352 2004-08-16 Fernando Perez <fperez@colorado.edu>
2357 2004-08-16 Fernando Perez <fperez@colorado.edu>
2353
2358
2354 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2359 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2355 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2360 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2356 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2361 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2357
2362
2358 2004-08-11 Fernando Perez <fperez@colorado.edu>
2363 2004-08-11 Fernando Perez <fperez@colorado.edu>
2359
2364
2360 * setup.py (isfile): Fix build so documentation gets updated for
2365 * setup.py (isfile): Fix build so documentation gets updated for
2361 rpms (it was only done for .tgz builds).
2366 rpms (it was only done for .tgz builds).
2362
2367
2363 2004-08-10 Fernando Perez <fperez@colorado.edu>
2368 2004-08-10 Fernando Perez <fperez@colorado.edu>
2364
2369
2365 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2370 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2366
2371
2367 * iplib.py : Silence syntax error exceptions in tab-completion.
2372 * iplib.py : Silence syntax error exceptions in tab-completion.
2368
2373
2369 2004-08-05 Fernando Perez <fperez@colorado.edu>
2374 2004-08-05 Fernando Perez <fperez@colorado.edu>
2370
2375
2371 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2376 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2372 'color off' mark for continuation prompts. This was causing long
2377 'color off' mark for continuation prompts. This was causing long
2373 continuation lines to mis-wrap.
2378 continuation lines to mis-wrap.
2374
2379
2375 2004-08-01 Fernando Perez <fperez@colorado.edu>
2380 2004-08-01 Fernando Perez <fperez@colorado.edu>
2376
2381
2377 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2382 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2378 for building ipython to be a parameter. All this is necessary
2383 for building ipython to be a parameter. All this is necessary
2379 right now to have a multithreaded version, but this insane
2384 right now to have a multithreaded version, but this insane
2380 non-design will be cleaned up soon. For now, it's a hack that
2385 non-design will be cleaned up soon. For now, it's a hack that
2381 works.
2386 works.
2382
2387
2383 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2388 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2384 args in various places. No bugs so far, but it's a dangerous
2389 args in various places. No bugs so far, but it's a dangerous
2385 practice.
2390 practice.
2386
2391
2387 2004-07-31 Fernando Perez <fperez@colorado.edu>
2392 2004-07-31 Fernando Perez <fperez@colorado.edu>
2388
2393
2389 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2394 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2390 fix completion of files with dots in their names under most
2395 fix completion of files with dots in their names under most
2391 profiles (pysh was OK because the completion order is different).
2396 profiles (pysh was OK because the completion order is different).
2392
2397
2393 2004-07-27 Fernando Perez <fperez@colorado.edu>
2398 2004-07-27 Fernando Perez <fperez@colorado.edu>
2394
2399
2395 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2400 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2396 keywords manually, b/c the one in keyword.py was removed in python
2401 keywords manually, b/c the one in keyword.py was removed in python
2397 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2402 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2398 This is NOT a bug under python 2.3 and earlier.
2403 This is NOT a bug under python 2.3 and earlier.
2399
2404
2400 2004-07-26 Fernando Perez <fperez@colorado.edu>
2405 2004-07-26 Fernando Perez <fperez@colorado.edu>
2401
2406
2402 * IPython/ultraTB.py (VerboseTB.text): Add another
2407 * IPython/ultraTB.py (VerboseTB.text): Add another
2403 linecache.checkcache() call to try to prevent inspect.py from
2408 linecache.checkcache() call to try to prevent inspect.py from
2404 crashing under python 2.3. I think this fixes
2409 crashing under python 2.3. I think this fixes
2405 http://www.scipy.net/roundup/ipython/issue17.
2410 http://www.scipy.net/roundup/ipython/issue17.
2406
2411
2407 2004-07-26 *** Released version 0.6.2
2412 2004-07-26 *** Released version 0.6.2
2408
2413
2409 2004-07-26 Fernando Perez <fperez@colorado.edu>
2414 2004-07-26 Fernando Perez <fperez@colorado.edu>
2410
2415
2411 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2416 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2412 fail for any number.
2417 fail for any number.
2413 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2418 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2414 empty bookmarks.
2419 empty bookmarks.
2415
2420
2416 2004-07-26 *** Released version 0.6.1
2421 2004-07-26 *** Released version 0.6.1
2417
2422
2418 2004-07-26 Fernando Perez <fperez@colorado.edu>
2423 2004-07-26 Fernando Perez <fperez@colorado.edu>
2419
2424
2420 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2425 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2421
2426
2422 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2427 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2423 escaping '()[]{}' in filenames.
2428 escaping '()[]{}' in filenames.
2424
2429
2425 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2430 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2426 Python 2.2 users who lack a proper shlex.split.
2431 Python 2.2 users who lack a proper shlex.split.
2427
2432
2428 2004-07-19 Fernando Perez <fperez@colorado.edu>
2433 2004-07-19 Fernando Perez <fperez@colorado.edu>
2429
2434
2430 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2435 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2431 for reading readline's init file. I follow the normal chain:
2436 for reading readline's init file. I follow the normal chain:
2432 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2437 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2433 report by Mike Heeter. This closes
2438 report by Mike Heeter. This closes
2434 http://www.scipy.net/roundup/ipython/issue16.
2439 http://www.scipy.net/roundup/ipython/issue16.
2435
2440
2436 2004-07-18 Fernando Perez <fperez@colorado.edu>
2441 2004-07-18 Fernando Perez <fperez@colorado.edu>
2437
2442
2438 * IPython/iplib.py (__init__): Add better handling of '\' under
2443 * IPython/iplib.py (__init__): Add better handling of '\' under
2439 Win32 for filenames. After a patch by Ville.
2444 Win32 for filenames. After a patch by Ville.
2440
2445
2441 2004-07-17 Fernando Perez <fperez@colorado.edu>
2446 2004-07-17 Fernando Perez <fperez@colorado.edu>
2442
2447
2443 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2448 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2444 autocalling would be triggered for 'foo is bar' if foo is
2449 autocalling would be triggered for 'foo is bar' if foo is
2445 callable. I also cleaned up the autocall detection code to use a
2450 callable. I also cleaned up the autocall detection code to use a
2446 regexp, which is faster. Bug reported by Alexander Schmolck.
2451 regexp, which is faster. Bug reported by Alexander Schmolck.
2447
2452
2448 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2453 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2449 '?' in them would confuse the help system. Reported by Alex
2454 '?' in them would confuse the help system. Reported by Alex
2450 Schmolck.
2455 Schmolck.
2451
2456
2452 2004-07-16 Fernando Perez <fperez@colorado.edu>
2457 2004-07-16 Fernando Perez <fperez@colorado.edu>
2453
2458
2454 * IPython/GnuplotInteractive.py (__all__): added plot2.
2459 * IPython/GnuplotInteractive.py (__all__): added plot2.
2455
2460
2456 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2461 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2457 plotting dictionaries, lists or tuples of 1d arrays.
2462 plotting dictionaries, lists or tuples of 1d arrays.
2458
2463
2459 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2464 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2460 optimizations.
2465 optimizations.
2461
2466
2462 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2467 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2463 the information which was there from Janko's original IPP code:
2468 the information which was there from Janko's original IPP code:
2464
2469
2465 03.05.99 20:53 porto.ifm.uni-kiel.de
2470 03.05.99 20:53 porto.ifm.uni-kiel.de
2466 --Started changelog.
2471 --Started changelog.
2467 --make clear do what it say it does
2472 --make clear do what it say it does
2468 --added pretty output of lines from inputcache
2473 --added pretty output of lines from inputcache
2469 --Made Logger a mixin class, simplifies handling of switches
2474 --Made Logger a mixin class, simplifies handling of switches
2470 --Added own completer class. .string<TAB> expands to last history
2475 --Added own completer class. .string<TAB> expands to last history
2471 line which starts with string. The new expansion is also present
2476 line which starts with string. The new expansion is also present
2472 with Ctrl-r from the readline library. But this shows, who this
2477 with Ctrl-r from the readline library. But this shows, who this
2473 can be done for other cases.
2478 can be done for other cases.
2474 --Added convention that all shell functions should accept a
2479 --Added convention that all shell functions should accept a
2475 parameter_string This opens the door for different behaviour for
2480 parameter_string This opens the door for different behaviour for
2476 each function. @cd is a good example of this.
2481 each function. @cd is a good example of this.
2477
2482
2478 04.05.99 12:12 porto.ifm.uni-kiel.de
2483 04.05.99 12:12 porto.ifm.uni-kiel.de
2479 --added logfile rotation
2484 --added logfile rotation
2480 --added new mainloop method which freezes first the namespace
2485 --added new mainloop method which freezes first the namespace
2481
2486
2482 07.05.99 21:24 porto.ifm.uni-kiel.de
2487 07.05.99 21:24 porto.ifm.uni-kiel.de
2483 --added the docreader classes. Now there is a help system.
2488 --added the docreader classes. Now there is a help system.
2484 -This is only a first try. Currently it's not easy to put new
2489 -This is only a first try. Currently it's not easy to put new
2485 stuff in the indices. But this is the way to go. Info would be
2490 stuff in the indices. But this is the way to go. Info would be
2486 better, but HTML is every where and not everybody has an info
2491 better, but HTML is every where and not everybody has an info
2487 system installed and it's not so easy to change html-docs to info.
2492 system installed and it's not so easy to change html-docs to info.
2488 --added global logfile option
2493 --added global logfile option
2489 --there is now a hook for object inspection method pinfo needs to
2494 --there is now a hook for object inspection method pinfo needs to
2490 be provided for this. Can be reached by two '??'.
2495 be provided for this. Can be reached by two '??'.
2491
2496
2492 08.05.99 20:51 porto.ifm.uni-kiel.de
2497 08.05.99 20:51 porto.ifm.uni-kiel.de
2493 --added a README
2498 --added a README
2494 --bug in rc file. Something has changed so functions in the rc
2499 --bug in rc file. Something has changed so functions in the rc
2495 file need to reference the shell and not self. Not clear if it's a
2500 file need to reference the shell and not self. Not clear if it's a
2496 bug or feature.
2501 bug or feature.
2497 --changed rc file for new behavior
2502 --changed rc file for new behavior
2498
2503
2499 2004-07-15 Fernando Perez <fperez@colorado.edu>
2504 2004-07-15 Fernando Perez <fperez@colorado.edu>
2500
2505
2501 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2506 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2502 cache was falling out of sync in bizarre manners when multi-line
2507 cache was falling out of sync in bizarre manners when multi-line
2503 input was present. Minor optimizations and cleanup.
2508 input was present. Minor optimizations and cleanup.
2504
2509
2505 (Logger): Remove old Changelog info for cleanup. This is the
2510 (Logger): Remove old Changelog info for cleanup. This is the
2506 information which was there from Janko's original code:
2511 information which was there from Janko's original code:
2507
2512
2508 Changes to Logger: - made the default log filename a parameter
2513 Changes to Logger: - made the default log filename a parameter
2509
2514
2510 - put a check for lines beginning with !@? in log(). Needed
2515 - put a check for lines beginning with !@? in log(). Needed
2511 (even if the handlers properly log their lines) for mid-session
2516 (even if the handlers properly log their lines) for mid-session
2512 logging activation to work properly. Without this, lines logged
2517 logging activation to work properly. Without this, lines logged
2513 in mid session, which get read from the cache, would end up
2518 in mid session, which get read from the cache, would end up
2514 'bare' (with !@? in the open) in the log. Now they are caught
2519 'bare' (with !@? in the open) in the log. Now they are caught
2515 and prepended with a #.
2520 and prepended with a #.
2516
2521
2517 * IPython/iplib.py (InteractiveShell.init_readline): added check
2522 * IPython/iplib.py (InteractiveShell.init_readline): added check
2518 in case MagicCompleter fails to be defined, so we don't crash.
2523 in case MagicCompleter fails to be defined, so we don't crash.
2519
2524
2520 2004-07-13 Fernando Perez <fperez@colorado.edu>
2525 2004-07-13 Fernando Perez <fperez@colorado.edu>
2521
2526
2522 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2527 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2523 of EPS if the requested filename ends in '.eps'.
2528 of EPS if the requested filename ends in '.eps'.
2524
2529
2525 2004-07-04 Fernando Perez <fperez@colorado.edu>
2530 2004-07-04 Fernando Perez <fperez@colorado.edu>
2526
2531
2527 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2532 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2528 escaping of quotes when calling the shell.
2533 escaping of quotes when calling the shell.
2529
2534
2530 2004-07-02 Fernando Perez <fperez@colorado.edu>
2535 2004-07-02 Fernando Perez <fperez@colorado.edu>
2531
2536
2532 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2537 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2533 gettext not working because we were clobbering '_'. Fixes
2538 gettext not working because we were clobbering '_'. Fixes
2534 http://www.scipy.net/roundup/ipython/issue6.
2539 http://www.scipy.net/roundup/ipython/issue6.
2535
2540
2536 2004-07-01 Fernando Perez <fperez@colorado.edu>
2541 2004-07-01 Fernando Perez <fperez@colorado.edu>
2537
2542
2538 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2543 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2539 into @cd. Patch by Ville.
2544 into @cd. Patch by Ville.
2540
2545
2541 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2546 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2542 new function to store things after ipmaker runs. Patch by Ville.
2547 new function to store things after ipmaker runs. Patch by Ville.
2543 Eventually this will go away once ipmaker is removed and the class
2548 Eventually this will go away once ipmaker is removed and the class
2544 gets cleaned up, but for now it's ok. Key functionality here is
2549 gets cleaned up, but for now it's ok. Key functionality here is
2545 the addition of the persistent storage mechanism, a dict for
2550 the addition of the persistent storage mechanism, a dict for
2546 keeping data across sessions (for now just bookmarks, but more can
2551 keeping data across sessions (for now just bookmarks, but more can
2547 be implemented later).
2552 be implemented later).
2548
2553
2549 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2554 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2550 persistent across sections. Patch by Ville, I modified it
2555 persistent across sections. Patch by Ville, I modified it
2551 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2556 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2552 added a '-l' option to list all bookmarks.
2557 added a '-l' option to list all bookmarks.
2553
2558
2554 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2559 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2555 center for cleanup. Registered with atexit.register(). I moved
2560 center for cleanup. Registered with atexit.register(). I moved
2556 here the old exit_cleanup(). After a patch by Ville.
2561 here the old exit_cleanup(). After a patch by Ville.
2557
2562
2558 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2563 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2559 characters in the hacked shlex_split for python 2.2.
2564 characters in the hacked shlex_split for python 2.2.
2560
2565
2561 * IPython/iplib.py (file_matches): more fixes to filenames with
2566 * IPython/iplib.py (file_matches): more fixes to filenames with
2562 whitespace in them. It's not perfect, but limitations in python's
2567 whitespace in them. It's not perfect, but limitations in python's
2563 readline make it impossible to go further.
2568 readline make it impossible to go further.
2564
2569
2565 2004-06-29 Fernando Perez <fperez@colorado.edu>
2570 2004-06-29 Fernando Perez <fperez@colorado.edu>
2566
2571
2567 * IPython/iplib.py (file_matches): escape whitespace correctly in
2572 * IPython/iplib.py (file_matches): escape whitespace correctly in
2568 filename completions. Bug reported by Ville.
2573 filename completions. Bug reported by Ville.
2569
2574
2570 2004-06-28 Fernando Perez <fperez@colorado.edu>
2575 2004-06-28 Fernando Perez <fperez@colorado.edu>
2571
2576
2572 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2577 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2573 the history file will be called 'history-PROFNAME' (or just
2578 the history file will be called 'history-PROFNAME' (or just
2574 'history' if no profile is loaded). I was getting annoyed at
2579 'history' if no profile is loaded). I was getting annoyed at
2575 getting my Numerical work history clobbered by pysh sessions.
2580 getting my Numerical work history clobbered by pysh sessions.
2576
2581
2577 * IPython/iplib.py (InteractiveShell.__init__): Internal
2582 * IPython/iplib.py (InteractiveShell.__init__): Internal
2578 getoutputerror() function so that we can honor the system_verbose
2583 getoutputerror() function so that we can honor the system_verbose
2579 flag for _all_ system calls. I also added escaping of #
2584 flag for _all_ system calls. I also added escaping of #
2580 characters here to avoid confusing Itpl.
2585 characters here to avoid confusing Itpl.
2581
2586
2582 * IPython/Magic.py (shlex_split): removed call to shell in
2587 * IPython/Magic.py (shlex_split): removed call to shell in
2583 parse_options and replaced it with shlex.split(). The annoying
2588 parse_options and replaced it with shlex.split(). The annoying
2584 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2589 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2585 to backport it from 2.3, with several frail hacks (the shlex
2590 to backport it from 2.3, with several frail hacks (the shlex
2586 module is rather limited in 2.2). Thanks to a suggestion by Ville
2591 module is rather limited in 2.2). Thanks to a suggestion by Ville
2587 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2592 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2588 problem.
2593 problem.
2589
2594
2590 (Magic.magic_system_verbose): new toggle to print the actual
2595 (Magic.magic_system_verbose): new toggle to print the actual
2591 system calls made by ipython. Mainly for debugging purposes.
2596 system calls made by ipython. Mainly for debugging purposes.
2592
2597
2593 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2598 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2594 doesn't support persistence. Reported (and fix suggested) by
2599 doesn't support persistence. Reported (and fix suggested) by
2595 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2600 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2596
2601
2597 2004-06-26 Fernando Perez <fperez@colorado.edu>
2602 2004-06-26 Fernando Perez <fperez@colorado.edu>
2598
2603
2599 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2604 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2600 continue prompts.
2605 continue prompts.
2601
2606
2602 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2607 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2603 function (basically a big docstring) and a few more things here to
2608 function (basically a big docstring) and a few more things here to
2604 speedup startup. pysh.py is now very lightweight. We want because
2609 speedup startup. pysh.py is now very lightweight. We want because
2605 it gets execfile'd, while InterpreterExec gets imported, so
2610 it gets execfile'd, while InterpreterExec gets imported, so
2606 byte-compilation saves time.
2611 byte-compilation saves time.
2607
2612
2608 2004-06-25 Fernando Perez <fperez@colorado.edu>
2613 2004-06-25 Fernando Perez <fperez@colorado.edu>
2609
2614
2610 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2615 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2611 -NUM', which was recently broken.
2616 -NUM', which was recently broken.
2612
2617
2613 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2618 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2614 in multi-line input (but not !!, which doesn't make sense there).
2619 in multi-line input (but not !!, which doesn't make sense there).
2615
2620
2616 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2621 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2617 It's just too useful, and people can turn it off in the less
2622 It's just too useful, and people can turn it off in the less
2618 common cases where it's a problem.
2623 common cases where it's a problem.
2619
2624
2620 2004-06-24 Fernando Perez <fperez@colorado.edu>
2625 2004-06-24 Fernando Perez <fperez@colorado.edu>
2621
2626
2622 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2627 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2623 special syntaxes (like alias calling) is now allied in multi-line
2628 special syntaxes (like alias calling) is now allied in multi-line
2624 input. This is still _very_ experimental, but it's necessary for
2629 input. This is still _very_ experimental, but it's necessary for
2625 efficient shell usage combining python looping syntax with system
2630 efficient shell usage combining python looping syntax with system
2626 calls. For now it's restricted to aliases, I don't think it
2631 calls. For now it's restricted to aliases, I don't think it
2627 really even makes sense to have this for magics.
2632 really even makes sense to have this for magics.
2628
2633
2629 2004-06-23 Fernando Perez <fperez@colorado.edu>
2634 2004-06-23 Fernando Perez <fperez@colorado.edu>
2630
2635
2631 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2636 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2632 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2637 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2633
2638
2634 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2639 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2635 extensions under Windows (after code sent by Gary Bishop). The
2640 extensions under Windows (after code sent by Gary Bishop). The
2636 extensions considered 'executable' are stored in IPython's rc
2641 extensions considered 'executable' are stored in IPython's rc
2637 structure as win_exec_ext.
2642 structure as win_exec_ext.
2638
2643
2639 * IPython/genutils.py (shell): new function, like system() but
2644 * IPython/genutils.py (shell): new function, like system() but
2640 without return value. Very useful for interactive shell work.
2645 without return value. Very useful for interactive shell work.
2641
2646
2642 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2647 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2643 delete aliases.
2648 delete aliases.
2644
2649
2645 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2650 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2646 sure that the alias table doesn't contain python keywords.
2651 sure that the alias table doesn't contain python keywords.
2647
2652
2648 2004-06-21 Fernando Perez <fperez@colorado.edu>
2653 2004-06-21 Fernando Perez <fperez@colorado.edu>
2649
2654
2650 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2655 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2651 non-existent items are found in $PATH. Reported by Thorsten.
2656 non-existent items are found in $PATH. Reported by Thorsten.
2652
2657
2653 2004-06-20 Fernando Perez <fperez@colorado.edu>
2658 2004-06-20 Fernando Perez <fperez@colorado.edu>
2654
2659
2655 * IPython/iplib.py (complete): modified the completer so that the
2660 * IPython/iplib.py (complete): modified the completer so that the
2656 order of priorities can be easily changed at runtime.
2661 order of priorities can be easily changed at runtime.
2657
2662
2658 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2663 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2659 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2664 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2660
2665
2661 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2666 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2662 expand Python variables prepended with $ in all system calls. The
2667 expand Python variables prepended with $ in all system calls. The
2663 same was done to InteractiveShell.handle_shell_escape. Now all
2668 same was done to InteractiveShell.handle_shell_escape. Now all
2664 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2669 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2665 expansion of python variables and expressions according to the
2670 expansion of python variables and expressions according to the
2666 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2671 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2667
2672
2668 Though PEP-215 has been rejected, a similar (but simpler) one
2673 Though PEP-215 has been rejected, a similar (but simpler) one
2669 seems like it will go into Python 2.4, PEP-292 -
2674 seems like it will go into Python 2.4, PEP-292 -
2670 http://www.python.org/peps/pep-0292.html.
2675 http://www.python.org/peps/pep-0292.html.
2671
2676
2672 I'll keep the full syntax of PEP-215, since IPython has since the
2677 I'll keep the full syntax of PEP-215, since IPython has since the
2673 start used Ka-Ping Yee's reference implementation discussed there
2678 start used Ka-Ping Yee's reference implementation discussed there
2674 (Itpl), and I actually like the powerful semantics it offers.
2679 (Itpl), and I actually like the powerful semantics it offers.
2675
2680
2676 In order to access normal shell variables, the $ has to be escaped
2681 In order to access normal shell variables, the $ has to be escaped
2677 via an extra $. For example:
2682 via an extra $. For example:
2678
2683
2679 In [7]: PATH='a python variable'
2684 In [7]: PATH='a python variable'
2680
2685
2681 In [8]: !echo $PATH
2686 In [8]: !echo $PATH
2682 a python variable
2687 a python variable
2683
2688
2684 In [9]: !echo $$PATH
2689 In [9]: !echo $$PATH
2685 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2690 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2686
2691
2687 (Magic.parse_options): escape $ so the shell doesn't evaluate
2692 (Magic.parse_options): escape $ so the shell doesn't evaluate
2688 things prematurely.
2693 things prematurely.
2689
2694
2690 * IPython/iplib.py (InteractiveShell.call_alias): added the
2695 * IPython/iplib.py (InteractiveShell.call_alias): added the
2691 ability for aliases to expand python variables via $.
2696 ability for aliases to expand python variables via $.
2692
2697
2693 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2698 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2694 system, now there's a @rehash/@rehashx pair of magics. These work
2699 system, now there's a @rehash/@rehashx pair of magics. These work
2695 like the csh rehash command, and can be invoked at any time. They
2700 like the csh rehash command, and can be invoked at any time. They
2696 build a table of aliases to everything in the user's $PATH
2701 build a table of aliases to everything in the user's $PATH
2697 (@rehash uses everything, @rehashx is slower but only adds
2702 (@rehash uses everything, @rehashx is slower but only adds
2698 executable files). With this, the pysh.py-based shell profile can
2703 executable files). With this, the pysh.py-based shell profile can
2699 now simply call rehash upon startup, and full access to all
2704 now simply call rehash upon startup, and full access to all
2700 programs in the user's path is obtained.
2705 programs in the user's path is obtained.
2701
2706
2702 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2707 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2703 functionality is now fully in place. I removed the old dynamic
2708 functionality is now fully in place. I removed the old dynamic
2704 code generation based approach, in favor of a much lighter one
2709 code generation based approach, in favor of a much lighter one
2705 based on a simple dict. The advantage is that this allows me to
2710 based on a simple dict. The advantage is that this allows me to
2706 now have thousands of aliases with negligible cost (unthinkable
2711 now have thousands of aliases with negligible cost (unthinkable
2707 with the old system).
2712 with the old system).
2708
2713
2709 2004-06-19 Fernando Perez <fperez@colorado.edu>
2714 2004-06-19 Fernando Perez <fperez@colorado.edu>
2710
2715
2711 * IPython/iplib.py (__init__): extended MagicCompleter class to
2716 * IPython/iplib.py (__init__): extended MagicCompleter class to
2712 also complete (last in priority) on user aliases.
2717 also complete (last in priority) on user aliases.
2713
2718
2714 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2719 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2715 call to eval.
2720 call to eval.
2716 (ItplNS.__init__): Added a new class which functions like Itpl,
2721 (ItplNS.__init__): Added a new class which functions like Itpl,
2717 but allows configuring the namespace for the evaluation to occur
2722 but allows configuring the namespace for the evaluation to occur
2718 in.
2723 in.
2719
2724
2720 2004-06-18 Fernando Perez <fperez@colorado.edu>
2725 2004-06-18 Fernando Perez <fperez@colorado.edu>
2721
2726
2722 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2727 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2723 better message when 'exit' or 'quit' are typed (a common newbie
2728 better message when 'exit' or 'quit' are typed (a common newbie
2724 confusion).
2729 confusion).
2725
2730
2726 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2731 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2727 check for Windows users.
2732 check for Windows users.
2728
2733
2729 * IPython/iplib.py (InteractiveShell.user_setup): removed
2734 * IPython/iplib.py (InteractiveShell.user_setup): removed
2730 disabling of colors for Windows. I'll test at runtime and issue a
2735 disabling of colors for Windows. I'll test at runtime and issue a
2731 warning if Gary's readline isn't found, as to nudge users to
2736 warning if Gary's readline isn't found, as to nudge users to
2732 download it.
2737 download it.
2733
2738
2734 2004-06-16 Fernando Perez <fperez@colorado.edu>
2739 2004-06-16 Fernando Perez <fperez@colorado.edu>
2735
2740
2736 * IPython/genutils.py (Stream.__init__): changed to print errors
2741 * IPython/genutils.py (Stream.__init__): changed to print errors
2737 to sys.stderr. I had a circular dependency here. Now it's
2742 to sys.stderr. I had a circular dependency here. Now it's
2738 possible to run ipython as IDLE's shell (consider this pre-alpha,
2743 possible to run ipython as IDLE's shell (consider this pre-alpha,
2739 since true stdout things end up in the starting terminal instead
2744 since true stdout things end up in the starting terminal instead
2740 of IDLE's out).
2745 of IDLE's out).
2741
2746
2742 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2747 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2743 users who haven't # updated their prompt_in2 definitions. Remove
2748 users who haven't # updated their prompt_in2 definitions. Remove
2744 eventually.
2749 eventually.
2745 (multiple_replace): added credit to original ASPN recipe.
2750 (multiple_replace): added credit to original ASPN recipe.
2746
2751
2747 2004-06-15 Fernando Perez <fperez@colorado.edu>
2752 2004-06-15 Fernando Perez <fperez@colorado.edu>
2748
2753
2749 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2754 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2750 list of auto-defined aliases.
2755 list of auto-defined aliases.
2751
2756
2752 2004-06-13 Fernando Perez <fperez@colorado.edu>
2757 2004-06-13 Fernando Perez <fperez@colorado.edu>
2753
2758
2754 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2759 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2755 install was really requested (so setup.py can be used for other
2760 install was really requested (so setup.py can be used for other
2756 things under Windows).
2761 things under Windows).
2757
2762
2758 2004-06-10 Fernando Perez <fperez@colorado.edu>
2763 2004-06-10 Fernando Perez <fperez@colorado.edu>
2759
2764
2760 * IPython/Logger.py (Logger.create_log): Manually remove any old
2765 * IPython/Logger.py (Logger.create_log): Manually remove any old
2761 backup, since os.remove may fail under Windows. Fixes bug
2766 backup, since os.remove may fail under Windows. Fixes bug
2762 reported by Thorsten.
2767 reported by Thorsten.
2763
2768
2764 2004-06-09 Fernando Perez <fperez@colorado.edu>
2769 2004-06-09 Fernando Perez <fperez@colorado.edu>
2765
2770
2766 * examples/example-embed.py: fixed all references to %n (replaced
2771 * examples/example-embed.py: fixed all references to %n (replaced
2767 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2772 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2768 for all examples and the manual as well.
2773 for all examples and the manual as well.
2769
2774
2770 2004-06-08 Fernando Perez <fperez@colorado.edu>
2775 2004-06-08 Fernando Perez <fperez@colorado.edu>
2771
2776
2772 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2777 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2773 alignment and color management. All 3 prompt subsystems now
2778 alignment and color management. All 3 prompt subsystems now
2774 inherit from BasePrompt.
2779 inherit from BasePrompt.
2775
2780
2776 * tools/release: updates for windows installer build and tag rpms
2781 * tools/release: updates for windows installer build and tag rpms
2777 with python version (since paths are fixed).
2782 with python version (since paths are fixed).
2778
2783
2779 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2784 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2780 which will become eventually obsolete. Also fixed the default
2785 which will become eventually obsolete. Also fixed the default
2781 prompt_in2 to use \D, so at least new users start with the correct
2786 prompt_in2 to use \D, so at least new users start with the correct
2782 defaults.
2787 defaults.
2783 WARNING: Users with existing ipythonrc files will need to apply
2788 WARNING: Users with existing ipythonrc files will need to apply
2784 this fix manually!
2789 this fix manually!
2785
2790
2786 * setup.py: make windows installer (.exe). This is finally the
2791 * setup.py: make windows installer (.exe). This is finally the
2787 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2792 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2788 which I hadn't included because it required Python 2.3 (or recent
2793 which I hadn't included because it required Python 2.3 (or recent
2789 distutils).
2794 distutils).
2790
2795
2791 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2796 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2792 usage of new '\D' escape.
2797 usage of new '\D' escape.
2793
2798
2794 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2799 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2795 lacks os.getuid())
2800 lacks os.getuid())
2796 (CachedOutput.set_colors): Added the ability to turn coloring
2801 (CachedOutput.set_colors): Added the ability to turn coloring
2797 on/off with @colors even for manually defined prompt colors. It
2802 on/off with @colors even for manually defined prompt colors. It
2798 uses a nasty global, but it works safely and via the generic color
2803 uses a nasty global, but it works safely and via the generic color
2799 handling mechanism.
2804 handling mechanism.
2800 (Prompt2.__init__): Introduced new escape '\D' for continuation
2805 (Prompt2.__init__): Introduced new escape '\D' for continuation
2801 prompts. It represents the counter ('\#') as dots.
2806 prompts. It represents the counter ('\#') as dots.
2802 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2807 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2803 need to update their ipythonrc files and replace '%n' with '\D' in
2808 need to update their ipythonrc files and replace '%n' with '\D' in
2804 their prompt_in2 settings everywhere. Sorry, but there's
2809 their prompt_in2 settings everywhere. Sorry, but there's
2805 otherwise no clean way to get all prompts to properly align. The
2810 otherwise no clean way to get all prompts to properly align. The
2806 ipythonrc shipped with IPython has been updated.
2811 ipythonrc shipped with IPython has been updated.
2807
2812
2808 2004-06-07 Fernando Perez <fperez@colorado.edu>
2813 2004-06-07 Fernando Perez <fperez@colorado.edu>
2809
2814
2810 * setup.py (isfile): Pass local_icons option to latex2html, so the
2815 * setup.py (isfile): Pass local_icons option to latex2html, so the
2811 resulting HTML file is self-contained. Thanks to
2816 resulting HTML file is self-contained. Thanks to
2812 dryice-AT-liu.com.cn for the tip.
2817 dryice-AT-liu.com.cn for the tip.
2813
2818
2814 * pysh.py: I created a new profile 'shell', which implements a
2819 * pysh.py: I created a new profile 'shell', which implements a
2815 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2820 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2816 system shell, nor will it become one anytime soon. It's mainly
2821 system shell, nor will it become one anytime soon. It's mainly
2817 meant to illustrate the use of the new flexible bash-like prompts.
2822 meant to illustrate the use of the new flexible bash-like prompts.
2818 I guess it could be used by hardy souls for true shell management,
2823 I guess it could be used by hardy souls for true shell management,
2819 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2824 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2820 profile. This uses the InterpreterExec extension provided by
2825 profile. This uses the InterpreterExec extension provided by
2821 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2826 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2822
2827
2823 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2828 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2824 auto-align itself with the length of the previous input prompt
2829 auto-align itself with the length of the previous input prompt
2825 (taking into account the invisible color escapes).
2830 (taking into account the invisible color escapes).
2826 (CachedOutput.__init__): Large restructuring of this class. Now
2831 (CachedOutput.__init__): Large restructuring of this class. Now
2827 all three prompts (primary1, primary2, output) are proper objects,
2832 all three prompts (primary1, primary2, output) are proper objects,
2828 managed by the 'parent' CachedOutput class. The code is still a
2833 managed by the 'parent' CachedOutput class. The code is still a
2829 bit hackish (all prompts share state via a pointer to the cache),
2834 bit hackish (all prompts share state via a pointer to the cache),
2830 but it's overall far cleaner than before.
2835 but it's overall far cleaner than before.
2831
2836
2832 * IPython/genutils.py (getoutputerror): modified to add verbose,
2837 * IPython/genutils.py (getoutputerror): modified to add verbose,
2833 debug and header options. This makes the interface of all getout*
2838 debug and header options. This makes the interface of all getout*
2834 functions uniform.
2839 functions uniform.
2835 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2840 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2836
2841
2837 * IPython/Magic.py (Magic.default_option): added a function to
2842 * IPython/Magic.py (Magic.default_option): added a function to
2838 allow registering default options for any magic command. This
2843 allow registering default options for any magic command. This
2839 makes it easy to have profiles which customize the magics globally
2844 makes it easy to have profiles which customize the magics globally
2840 for a certain use. The values set through this function are
2845 for a certain use. The values set through this function are
2841 picked up by the parse_options() method, which all magics should
2846 picked up by the parse_options() method, which all magics should
2842 use to parse their options.
2847 use to parse their options.
2843
2848
2844 * IPython/genutils.py (warn): modified the warnings framework to
2849 * IPython/genutils.py (warn): modified the warnings framework to
2845 use the Term I/O class. I'm trying to slowly unify all of
2850 use the Term I/O class. I'm trying to slowly unify all of
2846 IPython's I/O operations to pass through Term.
2851 IPython's I/O operations to pass through Term.
2847
2852
2848 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2853 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2849 the secondary prompt to correctly match the length of the primary
2854 the secondary prompt to correctly match the length of the primary
2850 one for any prompt. Now multi-line code will properly line up
2855 one for any prompt. Now multi-line code will properly line up
2851 even for path dependent prompts, such as the new ones available
2856 even for path dependent prompts, such as the new ones available
2852 via the prompt_specials.
2857 via the prompt_specials.
2853
2858
2854 2004-06-06 Fernando Perez <fperez@colorado.edu>
2859 2004-06-06 Fernando Perez <fperez@colorado.edu>
2855
2860
2856 * IPython/Prompts.py (prompt_specials): Added the ability to have
2861 * IPython/Prompts.py (prompt_specials): Added the ability to have
2857 bash-like special sequences in the prompts, which get
2862 bash-like special sequences in the prompts, which get
2858 automatically expanded. Things like hostname, current working
2863 automatically expanded. Things like hostname, current working
2859 directory and username are implemented already, but it's easy to
2864 directory and username are implemented already, but it's easy to
2860 add more in the future. Thanks to a patch by W.J. van der Laan
2865 add more in the future. Thanks to a patch by W.J. van der Laan
2861 <gnufnork-AT-hetdigitalegat.nl>
2866 <gnufnork-AT-hetdigitalegat.nl>
2862 (prompt_specials): Added color support for prompt strings, so
2867 (prompt_specials): Added color support for prompt strings, so
2863 users can define arbitrary color setups for their prompts.
2868 users can define arbitrary color setups for their prompts.
2864
2869
2865 2004-06-05 Fernando Perez <fperez@colorado.edu>
2870 2004-06-05 Fernando Perez <fperez@colorado.edu>
2866
2871
2867 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2872 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2868 code to load Gary Bishop's readline and configure it
2873 code to load Gary Bishop's readline and configure it
2869 automatically. Thanks to Gary for help on this.
2874 automatically. Thanks to Gary for help on this.
2870
2875
2871 2004-06-01 Fernando Perez <fperez@colorado.edu>
2876 2004-06-01 Fernando Perez <fperez@colorado.edu>
2872
2877
2873 * IPython/Logger.py (Logger.create_log): fix bug for logging
2878 * IPython/Logger.py (Logger.create_log): fix bug for logging
2874 with no filename (previous fix was incomplete).
2879 with no filename (previous fix was incomplete).
2875
2880
2876 2004-05-25 Fernando Perez <fperez@colorado.edu>
2881 2004-05-25 Fernando Perez <fperez@colorado.edu>
2877
2882
2878 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2883 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2879 parens would get passed to the shell.
2884 parens would get passed to the shell.
2880
2885
2881 2004-05-20 Fernando Perez <fperez@colorado.edu>
2886 2004-05-20 Fernando Perez <fperez@colorado.edu>
2882
2887
2883 * IPython/Magic.py (Magic.magic_prun): changed default profile
2888 * IPython/Magic.py (Magic.magic_prun): changed default profile
2884 sort order to 'time' (the more common profiling need).
2889 sort order to 'time' (the more common profiling need).
2885
2890
2886 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2891 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2887 so that source code shown is guaranteed in sync with the file on
2892 so that source code shown is guaranteed in sync with the file on
2888 disk (also changed in psource). Similar fix to the one for
2893 disk (also changed in psource). Similar fix to the one for
2889 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2894 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2890 <yann.ledu-AT-noos.fr>.
2895 <yann.ledu-AT-noos.fr>.
2891
2896
2892 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2897 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2893 with a single option would not be correctly parsed. Closes
2898 with a single option would not be correctly parsed. Closes
2894 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2899 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2895 introduced in 0.6.0 (on 2004-05-06).
2900 introduced in 0.6.0 (on 2004-05-06).
2896
2901
2897 2004-05-13 *** Released version 0.6.0
2902 2004-05-13 *** Released version 0.6.0
2898
2903
2899 2004-05-13 Fernando Perez <fperez@colorado.edu>
2904 2004-05-13 Fernando Perez <fperez@colorado.edu>
2900
2905
2901 * debian/: Added debian/ directory to CVS, so that debian support
2906 * debian/: Added debian/ directory to CVS, so that debian support
2902 is publicly accessible. The debian package is maintained by Jack
2907 is publicly accessible. The debian package is maintained by Jack
2903 Moffit <jack-AT-xiph.org>.
2908 Moffit <jack-AT-xiph.org>.
2904
2909
2905 * Documentation: included the notes about an ipython-based system
2910 * Documentation: included the notes about an ipython-based system
2906 shell (the hypothetical 'pysh') into the new_design.pdf document,
2911 shell (the hypothetical 'pysh') into the new_design.pdf document,
2907 so that these ideas get distributed to users along with the
2912 so that these ideas get distributed to users along with the
2908 official documentation.
2913 official documentation.
2909
2914
2910 2004-05-10 Fernando Perez <fperez@colorado.edu>
2915 2004-05-10 Fernando Perez <fperez@colorado.edu>
2911
2916
2912 * IPython/Logger.py (Logger.create_log): fix recently introduced
2917 * IPython/Logger.py (Logger.create_log): fix recently introduced
2913 bug (misindented line) where logstart would fail when not given an
2918 bug (misindented line) where logstart would fail when not given an
2914 explicit filename.
2919 explicit filename.
2915
2920
2916 2004-05-09 Fernando Perez <fperez@colorado.edu>
2921 2004-05-09 Fernando Perez <fperez@colorado.edu>
2917
2922
2918 * IPython/Magic.py (Magic.parse_options): skip system call when
2923 * IPython/Magic.py (Magic.parse_options): skip system call when
2919 there are no options to look for. Faster, cleaner for the common
2924 there are no options to look for. Faster, cleaner for the common
2920 case.
2925 case.
2921
2926
2922 * Documentation: many updates to the manual: describing Windows
2927 * Documentation: many updates to the manual: describing Windows
2923 support better, Gnuplot updates, credits, misc small stuff. Also
2928 support better, Gnuplot updates, credits, misc small stuff. Also
2924 updated the new_design doc a bit.
2929 updated the new_design doc a bit.
2925
2930
2926 2004-05-06 *** Released version 0.6.0.rc1
2931 2004-05-06 *** Released version 0.6.0.rc1
2927
2932
2928 2004-05-06 Fernando Perez <fperez@colorado.edu>
2933 2004-05-06 Fernando Perez <fperez@colorado.edu>
2929
2934
2930 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2935 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2931 operations to use the vastly more efficient list/''.join() method.
2936 operations to use the vastly more efficient list/''.join() method.
2932 (FormattedTB.text): Fix
2937 (FormattedTB.text): Fix
2933 http://www.scipy.net/roundup/ipython/issue12 - exception source
2938 http://www.scipy.net/roundup/ipython/issue12 - exception source
2934 extract not updated after reload. Thanks to Mike Salib
2939 extract not updated after reload. Thanks to Mike Salib
2935 <msalib-AT-mit.edu> for pinning the source of the problem.
2940 <msalib-AT-mit.edu> for pinning the source of the problem.
2936 Fortunately, the solution works inside ipython and doesn't require
2941 Fortunately, the solution works inside ipython and doesn't require
2937 any changes to python proper.
2942 any changes to python proper.
2938
2943
2939 * IPython/Magic.py (Magic.parse_options): Improved to process the
2944 * IPython/Magic.py (Magic.parse_options): Improved to process the
2940 argument list as a true shell would (by actually using the
2945 argument list as a true shell would (by actually using the
2941 underlying system shell). This way, all @magics automatically get
2946 underlying system shell). This way, all @magics automatically get
2942 shell expansion for variables. Thanks to a comment by Alex
2947 shell expansion for variables. Thanks to a comment by Alex
2943 Schmolck.
2948 Schmolck.
2944
2949
2945 2004-04-04 Fernando Perez <fperez@colorado.edu>
2950 2004-04-04 Fernando Perez <fperez@colorado.edu>
2946
2951
2947 * IPython/iplib.py (InteractiveShell.interact): Added a special
2952 * IPython/iplib.py (InteractiveShell.interact): Added a special
2948 trap for a debugger quit exception, which is basically impossible
2953 trap for a debugger quit exception, which is basically impossible
2949 to handle by normal mechanisms, given what pdb does to the stack.
2954 to handle by normal mechanisms, given what pdb does to the stack.
2950 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2955 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2951
2956
2952 2004-04-03 Fernando Perez <fperez@colorado.edu>
2957 2004-04-03 Fernando Perez <fperez@colorado.edu>
2953
2958
2954 * IPython/genutils.py (Term): Standardized the names of the Term
2959 * IPython/genutils.py (Term): Standardized the names of the Term
2955 class streams to cin/cout/cerr, following C++ naming conventions
2960 class streams to cin/cout/cerr, following C++ naming conventions
2956 (I can't use in/out/err because 'in' is not a valid attribute
2961 (I can't use in/out/err because 'in' is not a valid attribute
2957 name).
2962 name).
2958
2963
2959 * IPython/iplib.py (InteractiveShell.interact): don't increment
2964 * IPython/iplib.py (InteractiveShell.interact): don't increment
2960 the prompt if there's no user input. By Daniel 'Dang' Griffith
2965 the prompt if there's no user input. By Daniel 'Dang' Griffith
2961 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2966 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2962 Francois Pinard.
2967 Francois Pinard.
2963
2968
2964 2004-04-02 Fernando Perez <fperez@colorado.edu>
2969 2004-04-02 Fernando Perez <fperez@colorado.edu>
2965
2970
2966 * IPython/genutils.py (Stream.__init__): Modified to survive at
2971 * IPython/genutils.py (Stream.__init__): Modified to survive at
2967 least importing in contexts where stdin/out/err aren't true file
2972 least importing in contexts where stdin/out/err aren't true file
2968 objects, such as PyCrust (they lack fileno() and mode). However,
2973 objects, such as PyCrust (they lack fileno() and mode). However,
2969 the recovery facilities which rely on these things existing will
2974 the recovery facilities which rely on these things existing will
2970 not work.
2975 not work.
2971
2976
2972 2004-04-01 Fernando Perez <fperez@colorado.edu>
2977 2004-04-01 Fernando Perez <fperez@colorado.edu>
2973
2978
2974 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2979 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2975 use the new getoutputerror() function, so it properly
2980 use the new getoutputerror() function, so it properly
2976 distinguishes stdout/err.
2981 distinguishes stdout/err.
2977
2982
2978 * IPython/genutils.py (getoutputerror): added a function to
2983 * IPython/genutils.py (getoutputerror): added a function to
2979 capture separately the standard output and error of a command.
2984 capture separately the standard output and error of a command.
2980 After a comment from dang on the mailing lists. This code is
2985 After a comment from dang on the mailing lists. This code is
2981 basically a modified version of commands.getstatusoutput(), from
2986 basically a modified version of commands.getstatusoutput(), from
2982 the standard library.
2987 the standard library.
2983
2988
2984 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2989 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2985 '!!' as a special syntax (shorthand) to access @sx.
2990 '!!' as a special syntax (shorthand) to access @sx.
2986
2991
2987 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2992 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2988 command and return its output as a list split on '\n'.
2993 command and return its output as a list split on '\n'.
2989
2994
2990 2004-03-31 Fernando Perez <fperez@colorado.edu>
2995 2004-03-31 Fernando Perez <fperez@colorado.edu>
2991
2996
2992 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2997 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2993 method to dictionaries used as FakeModule instances if they lack
2998 method to dictionaries used as FakeModule instances if they lack
2994 it. At least pydoc in python2.3 breaks for runtime-defined
2999 it. At least pydoc in python2.3 breaks for runtime-defined
2995 functions without this hack. At some point I need to _really_
3000 functions without this hack. At some point I need to _really_
2996 understand what FakeModule is doing, because it's a gross hack.
3001 understand what FakeModule is doing, because it's a gross hack.
2997 But it solves Arnd's problem for now...
3002 But it solves Arnd's problem for now...
2998
3003
2999 2004-02-27 Fernando Perez <fperez@colorado.edu>
3004 2004-02-27 Fernando Perez <fperez@colorado.edu>
3000
3005
3001 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3006 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3002 mode would behave erratically. Also increased the number of
3007 mode would behave erratically. Also increased the number of
3003 possible logs in rotate mod to 999. Thanks to Rod Holland
3008 possible logs in rotate mod to 999. Thanks to Rod Holland
3004 <rhh@StructureLABS.com> for the report and fixes.
3009 <rhh@StructureLABS.com> for the report and fixes.
3005
3010
3006 2004-02-26 Fernando Perez <fperez@colorado.edu>
3011 2004-02-26 Fernando Perez <fperez@colorado.edu>
3007
3012
3008 * IPython/genutils.py (page): Check that the curses module really
3013 * IPython/genutils.py (page): Check that the curses module really
3009 has the initscr attribute before trying to use it. For some
3014 has the initscr attribute before trying to use it. For some
3010 reason, the Solaris curses module is missing this. I think this
3015 reason, the Solaris curses module is missing this. I think this
3011 should be considered a Solaris python bug, but I'm not sure.
3016 should be considered a Solaris python bug, but I'm not sure.
3012
3017
3013 2004-01-17 Fernando Perez <fperez@colorado.edu>
3018 2004-01-17 Fernando Perez <fperez@colorado.edu>
3014
3019
3015 * IPython/genutils.py (Stream.__init__): Changes to try to make
3020 * IPython/genutils.py (Stream.__init__): Changes to try to make
3016 ipython robust against stdin/out/err being closed by the user.
3021 ipython robust against stdin/out/err being closed by the user.
3017 This is 'user error' (and blocks a normal python session, at least
3022 This is 'user error' (and blocks a normal python session, at least
3018 the stdout case). However, Ipython should be able to survive such
3023 the stdout case). However, Ipython should be able to survive such
3019 instances of abuse as gracefully as possible. To simplify the
3024 instances of abuse as gracefully as possible. To simplify the
3020 coding and maintain compatibility with Gary Bishop's Term
3025 coding and maintain compatibility with Gary Bishop's Term
3021 contributions, I've made use of classmethods for this. I think
3026 contributions, I've made use of classmethods for this. I think
3022 this introduces a dependency on python 2.2.
3027 this introduces a dependency on python 2.2.
3023
3028
3024 2004-01-13 Fernando Perez <fperez@colorado.edu>
3029 2004-01-13 Fernando Perez <fperez@colorado.edu>
3025
3030
3026 * IPython/numutils.py (exp_safe): simplified the code a bit and
3031 * IPython/numutils.py (exp_safe): simplified the code a bit and
3027 removed the need for importing the kinds module altogether.
3032 removed the need for importing the kinds module altogether.
3028
3033
3029 2004-01-06 Fernando Perez <fperez@colorado.edu>
3034 2004-01-06 Fernando Perez <fperez@colorado.edu>
3030
3035
3031 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3036 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3032 a magic function instead, after some community feedback. No
3037 a magic function instead, after some community feedback. No
3033 special syntax will exist for it, but its name is deliberately
3038 special syntax will exist for it, but its name is deliberately
3034 very short.
3039 very short.
3035
3040
3036 2003-12-20 Fernando Perez <fperez@colorado.edu>
3041 2003-12-20 Fernando Perez <fperez@colorado.edu>
3037
3042
3038 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3043 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3039 new functionality, to automagically assign the result of a shell
3044 new functionality, to automagically assign the result of a shell
3040 command to a variable. I'll solicit some community feedback on
3045 command to a variable. I'll solicit some community feedback on
3041 this before making it permanent.
3046 this before making it permanent.
3042
3047
3043 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3048 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3044 requested about callables for which inspect couldn't obtain a
3049 requested about callables for which inspect couldn't obtain a
3045 proper argspec. Thanks to a crash report sent by Etienne
3050 proper argspec. Thanks to a crash report sent by Etienne
3046 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3051 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3047
3052
3048 2003-12-09 Fernando Perez <fperez@colorado.edu>
3053 2003-12-09 Fernando Perez <fperez@colorado.edu>
3049
3054
3050 * IPython/genutils.py (page): patch for the pager to work across
3055 * IPython/genutils.py (page): patch for the pager to work across
3051 various versions of Windows. By Gary Bishop.
3056 various versions of Windows. By Gary Bishop.
3052
3057
3053 2003-12-04 Fernando Perez <fperez@colorado.edu>
3058 2003-12-04 Fernando Perez <fperez@colorado.edu>
3054
3059
3055 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3060 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3056 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3061 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3057 While I tested this and it looks ok, there may still be corner
3062 While I tested this and it looks ok, there may still be corner
3058 cases I've missed.
3063 cases I've missed.
3059
3064
3060 2003-12-01 Fernando Perez <fperez@colorado.edu>
3065 2003-12-01 Fernando Perez <fperez@colorado.edu>
3061
3066
3062 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3067 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3063 where a line like 'p,q=1,2' would fail because the automagic
3068 where a line like 'p,q=1,2' would fail because the automagic
3064 system would be triggered for @p.
3069 system would be triggered for @p.
3065
3070
3066 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3071 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3067 cleanups, code unmodified.
3072 cleanups, code unmodified.
3068
3073
3069 * IPython/genutils.py (Term): added a class for IPython to handle
3074 * IPython/genutils.py (Term): added a class for IPython to handle
3070 output. In most cases it will just be a proxy for stdout/err, but
3075 output. In most cases it will just be a proxy for stdout/err, but
3071 having this allows modifications to be made for some platforms,
3076 having this allows modifications to be made for some platforms,
3072 such as handling color escapes under Windows. All of this code
3077 such as handling color escapes under Windows. All of this code
3073 was contributed by Gary Bishop, with minor modifications by me.
3078 was contributed by Gary Bishop, with minor modifications by me.
3074 The actual changes affect many files.
3079 The actual changes affect many files.
3075
3080
3076 2003-11-30 Fernando Perez <fperez@colorado.edu>
3081 2003-11-30 Fernando Perez <fperez@colorado.edu>
3077
3082
3078 * IPython/iplib.py (file_matches): new completion code, courtesy
3083 * IPython/iplib.py (file_matches): new completion code, courtesy
3079 of Jeff Collins. This enables filename completion again under
3084 of Jeff Collins. This enables filename completion again under
3080 python 2.3, which disabled it at the C level.
3085 python 2.3, which disabled it at the C level.
3081
3086
3082 2003-11-11 Fernando Perez <fperez@colorado.edu>
3087 2003-11-11 Fernando Perez <fperez@colorado.edu>
3083
3088
3084 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3089 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3085 for Numeric.array(map(...)), but often convenient.
3090 for Numeric.array(map(...)), but often convenient.
3086
3091
3087 2003-11-05 Fernando Perez <fperez@colorado.edu>
3092 2003-11-05 Fernando Perez <fperez@colorado.edu>
3088
3093
3089 * IPython/numutils.py (frange): Changed a call from int() to
3094 * IPython/numutils.py (frange): Changed a call from int() to
3090 int(round()) to prevent a problem reported with arange() in the
3095 int(round()) to prevent a problem reported with arange() in the
3091 numpy list.
3096 numpy list.
3092
3097
3093 2003-10-06 Fernando Perez <fperez@colorado.edu>
3098 2003-10-06 Fernando Perez <fperez@colorado.edu>
3094
3099
3095 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3100 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3096 prevent crashes if sys lacks an argv attribute (it happens with
3101 prevent crashes if sys lacks an argv attribute (it happens with
3097 embedded interpreters which build a bare-bones sys module).
3102 embedded interpreters which build a bare-bones sys module).
3098 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3103 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3099
3104
3100 2003-09-24 Fernando Perez <fperez@colorado.edu>
3105 2003-09-24 Fernando Perez <fperez@colorado.edu>
3101
3106
3102 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3107 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3103 to protect against poorly written user objects where __getattr__
3108 to protect against poorly written user objects where __getattr__
3104 raises exceptions other than AttributeError. Thanks to a bug
3109 raises exceptions other than AttributeError. Thanks to a bug
3105 report by Oliver Sander <osander-AT-gmx.de>.
3110 report by Oliver Sander <osander-AT-gmx.de>.
3106
3111
3107 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3112 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3108 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3113 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3109
3114
3110 2003-09-09 Fernando Perez <fperez@colorado.edu>
3115 2003-09-09 Fernando Perez <fperez@colorado.edu>
3111
3116
3112 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3117 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3113 unpacking a list whith a callable as first element would
3118 unpacking a list whith a callable as first element would
3114 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3119 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3115 Collins.
3120 Collins.
3116
3121
3117 2003-08-25 *** Released version 0.5.0
3122 2003-08-25 *** Released version 0.5.0
3118
3123
3119 2003-08-22 Fernando Perez <fperez@colorado.edu>
3124 2003-08-22 Fernando Perez <fperez@colorado.edu>
3120
3125
3121 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3126 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3122 improperly defined user exceptions. Thanks to feedback from Mark
3127 improperly defined user exceptions. Thanks to feedback from Mark
3123 Russell <mrussell-AT-verio.net>.
3128 Russell <mrussell-AT-verio.net>.
3124
3129
3125 2003-08-20 Fernando Perez <fperez@colorado.edu>
3130 2003-08-20 Fernando Perez <fperez@colorado.edu>
3126
3131
3127 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3132 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3128 printing so that it would print multi-line string forms starting
3133 printing so that it would print multi-line string forms starting
3129 with a new line. This way the formatting is better respected for
3134 with a new line. This way the formatting is better respected for
3130 objects which work hard to make nice string forms.
3135 objects which work hard to make nice string forms.
3131
3136
3132 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3137 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3133 autocall would overtake data access for objects with both
3138 autocall would overtake data access for objects with both
3134 __getitem__ and __call__.
3139 __getitem__ and __call__.
3135
3140
3136 2003-08-19 *** Released version 0.5.0-rc1
3141 2003-08-19 *** Released version 0.5.0-rc1
3137
3142
3138 2003-08-19 Fernando Perez <fperez@colorado.edu>
3143 2003-08-19 Fernando Perez <fperez@colorado.edu>
3139
3144
3140 * IPython/deep_reload.py (load_tail): single tiny change here
3145 * IPython/deep_reload.py (load_tail): single tiny change here
3141 seems to fix the long-standing bug of dreload() failing to work
3146 seems to fix the long-standing bug of dreload() failing to work
3142 for dotted names. But this module is pretty tricky, so I may have
3147 for dotted names. But this module is pretty tricky, so I may have
3143 missed some subtlety. Needs more testing!.
3148 missed some subtlety. Needs more testing!.
3144
3149
3145 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3150 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3146 exceptions which have badly implemented __str__ methods.
3151 exceptions which have badly implemented __str__ methods.
3147 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3152 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3148 which I've been getting reports about from Python 2.3 users. I
3153 which I've been getting reports about from Python 2.3 users. I
3149 wish I had a simple test case to reproduce the problem, so I could
3154 wish I had a simple test case to reproduce the problem, so I could
3150 either write a cleaner workaround or file a bug report if
3155 either write a cleaner workaround or file a bug report if
3151 necessary.
3156 necessary.
3152
3157
3153 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3158 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3154 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3159 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3155 a bug report by Tjabo Kloppenburg.
3160 a bug report by Tjabo Kloppenburg.
3156
3161
3157 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3162 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3158 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3163 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3159 seems rather unstable. Thanks to a bug report by Tjabo
3164 seems rather unstable. Thanks to a bug report by Tjabo
3160 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3165 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3161
3166
3162 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3167 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3163 this out soon because of the critical fixes in the inner loop for
3168 this out soon because of the critical fixes in the inner loop for
3164 generators.
3169 generators.
3165
3170
3166 * IPython/Magic.py (Magic.getargspec): removed. This (and
3171 * IPython/Magic.py (Magic.getargspec): removed. This (and
3167 _get_def) have been obsoleted by OInspect for a long time, I
3172 _get_def) have been obsoleted by OInspect for a long time, I
3168 hadn't noticed that they were dead code.
3173 hadn't noticed that they were dead code.
3169 (Magic._ofind): restored _ofind functionality for a few literals
3174 (Magic._ofind): restored _ofind functionality for a few literals
3170 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3175 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3171 for things like "hello".capitalize?, since that would require a
3176 for things like "hello".capitalize?, since that would require a
3172 potentially dangerous eval() again.
3177 potentially dangerous eval() again.
3173
3178
3174 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3179 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3175 logic a bit more to clean up the escapes handling and minimize the
3180 logic a bit more to clean up the escapes handling and minimize the
3176 use of _ofind to only necessary cases. The interactive 'feel' of
3181 use of _ofind to only necessary cases. The interactive 'feel' of
3177 IPython should have improved quite a bit with the changes in
3182 IPython should have improved quite a bit with the changes in
3178 _prefilter and _ofind (besides being far safer than before).
3183 _prefilter and _ofind (besides being far safer than before).
3179
3184
3180 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3185 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3181 obscure, never reported). Edit would fail to find the object to
3186 obscure, never reported). Edit would fail to find the object to
3182 edit under some circumstances.
3187 edit under some circumstances.
3183 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3188 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3184 which were causing double-calling of generators. Those eval calls
3189 which were causing double-calling of generators. Those eval calls
3185 were _very_ dangerous, since code with side effects could be
3190 were _very_ dangerous, since code with side effects could be
3186 triggered. As they say, 'eval is evil'... These were the
3191 triggered. As they say, 'eval is evil'... These were the
3187 nastiest evals in IPython. Besides, _ofind is now far simpler,
3192 nastiest evals in IPython. Besides, _ofind is now far simpler,
3188 and it should also be quite a bit faster. Its use of inspect is
3193 and it should also be quite a bit faster. Its use of inspect is
3189 also safer, so perhaps some of the inspect-related crashes I've
3194 also safer, so perhaps some of the inspect-related crashes I've
3190 seen lately with Python 2.3 might be taken care of. That will
3195 seen lately with Python 2.3 might be taken care of. That will
3191 need more testing.
3196 need more testing.
3192
3197
3193 2003-08-17 Fernando Perez <fperez@colorado.edu>
3198 2003-08-17 Fernando Perez <fperez@colorado.edu>
3194
3199
3195 * IPython/iplib.py (InteractiveShell._prefilter): significant
3200 * IPython/iplib.py (InteractiveShell._prefilter): significant
3196 simplifications to the logic for handling user escapes. Faster
3201 simplifications to the logic for handling user escapes. Faster
3197 and simpler code.
3202 and simpler code.
3198
3203
3199 2003-08-14 Fernando Perez <fperez@colorado.edu>
3204 2003-08-14 Fernando Perez <fperez@colorado.edu>
3200
3205
3201 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3206 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3202 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3207 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3203 but it should be quite a bit faster. And the recursive version
3208 but it should be quite a bit faster. And the recursive version
3204 generated O(log N) intermediate storage for all rank>1 arrays,
3209 generated O(log N) intermediate storage for all rank>1 arrays,
3205 even if they were contiguous.
3210 even if they were contiguous.
3206 (l1norm): Added this function.
3211 (l1norm): Added this function.
3207 (norm): Added this function for arbitrary norms (including
3212 (norm): Added this function for arbitrary norms (including
3208 l-infinity). l1 and l2 are still special cases for convenience
3213 l-infinity). l1 and l2 are still special cases for convenience
3209 and speed.
3214 and speed.
3210
3215
3211 2003-08-03 Fernando Perez <fperez@colorado.edu>
3216 2003-08-03 Fernando Perez <fperez@colorado.edu>
3212
3217
3213 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3218 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3214 exceptions, which now raise PendingDeprecationWarnings in Python
3219 exceptions, which now raise PendingDeprecationWarnings in Python
3215 2.3. There were some in Magic and some in Gnuplot2.
3220 2.3. There were some in Magic and some in Gnuplot2.
3216
3221
3217 2003-06-30 Fernando Perez <fperez@colorado.edu>
3222 2003-06-30 Fernando Perez <fperez@colorado.edu>
3218
3223
3219 * IPython/genutils.py (page): modified to call curses only for
3224 * IPython/genutils.py (page): modified to call curses only for
3220 terminals where TERM=='xterm'. After problems under many other
3225 terminals where TERM=='xterm'. After problems under many other
3221 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3226 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3222
3227
3223 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3228 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3224 would be triggered when readline was absent. This was just an old
3229 would be triggered when readline was absent. This was just an old
3225 debugging statement I'd forgotten to take out.
3230 debugging statement I'd forgotten to take out.
3226
3231
3227 2003-06-20 Fernando Perez <fperez@colorado.edu>
3232 2003-06-20 Fernando Perez <fperez@colorado.edu>
3228
3233
3229 * IPython/genutils.py (clock): modified to return only user time
3234 * IPython/genutils.py (clock): modified to return only user time
3230 (not counting system time), after a discussion on scipy. While
3235 (not counting system time), after a discussion on scipy. While
3231 system time may be a useful quantity occasionally, it may much
3236 system time may be a useful quantity occasionally, it may much
3232 more easily be skewed by occasional swapping or other similar
3237 more easily be skewed by occasional swapping or other similar
3233 activity.
3238 activity.
3234
3239
3235 2003-06-05 Fernando Perez <fperez@colorado.edu>
3240 2003-06-05 Fernando Perez <fperez@colorado.edu>
3236
3241
3237 * IPython/numutils.py (identity): new function, for building
3242 * IPython/numutils.py (identity): new function, for building
3238 arbitrary rank Kronecker deltas (mostly backwards compatible with
3243 arbitrary rank Kronecker deltas (mostly backwards compatible with
3239 Numeric.identity)
3244 Numeric.identity)
3240
3245
3241 2003-06-03 Fernando Perez <fperez@colorado.edu>
3246 2003-06-03 Fernando Perez <fperez@colorado.edu>
3242
3247
3243 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3248 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3244 arguments passed to magics with spaces, to allow trailing '\' to
3249 arguments passed to magics with spaces, to allow trailing '\' to
3245 work normally (mainly for Windows users).
3250 work normally (mainly for Windows users).
3246
3251
3247 2003-05-29 Fernando Perez <fperez@colorado.edu>
3252 2003-05-29 Fernando Perez <fperez@colorado.edu>
3248
3253
3249 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3254 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3250 instead of pydoc.help. This fixes a bizarre behavior where
3255 instead of pydoc.help. This fixes a bizarre behavior where
3251 printing '%s' % locals() would trigger the help system. Now
3256 printing '%s' % locals() would trigger the help system. Now
3252 ipython behaves like normal python does.
3257 ipython behaves like normal python does.
3253
3258
3254 Note that if one does 'from pydoc import help', the bizarre
3259 Note that if one does 'from pydoc import help', the bizarre
3255 behavior returns, but this will also happen in normal python, so
3260 behavior returns, but this will also happen in normal python, so
3256 it's not an ipython bug anymore (it has to do with how pydoc.help
3261 it's not an ipython bug anymore (it has to do with how pydoc.help
3257 is implemented).
3262 is implemented).
3258
3263
3259 2003-05-22 Fernando Perez <fperez@colorado.edu>
3264 2003-05-22 Fernando Perez <fperez@colorado.edu>
3260
3265
3261 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3266 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3262 return [] instead of None when nothing matches, also match to end
3267 return [] instead of None when nothing matches, also match to end
3263 of line. Patch by Gary Bishop.
3268 of line. Patch by Gary Bishop.
3264
3269
3265 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3270 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3266 protection as before, for files passed on the command line. This
3271 protection as before, for files passed on the command line. This
3267 prevents the CrashHandler from kicking in if user files call into
3272 prevents the CrashHandler from kicking in if user files call into
3268 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3273 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3269 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3274 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3270
3275
3271 2003-05-20 *** Released version 0.4.0
3276 2003-05-20 *** Released version 0.4.0
3272
3277
3273 2003-05-20 Fernando Perez <fperez@colorado.edu>
3278 2003-05-20 Fernando Perez <fperez@colorado.edu>
3274
3279
3275 * setup.py: added support for manpages. It's a bit hackish b/c of
3280 * setup.py: added support for manpages. It's a bit hackish b/c of
3276 a bug in the way the bdist_rpm distutils target handles gzipped
3281 a bug in the way the bdist_rpm distutils target handles gzipped
3277 manpages, but it works. After a patch by Jack.
3282 manpages, but it works. After a patch by Jack.
3278
3283
3279 2003-05-19 Fernando Perez <fperez@colorado.edu>
3284 2003-05-19 Fernando Perez <fperez@colorado.edu>
3280
3285
3281 * IPython/numutils.py: added a mockup of the kinds module, since
3286 * IPython/numutils.py: added a mockup of the kinds module, since
3282 it was recently removed from Numeric. This way, numutils will
3287 it was recently removed from Numeric. This way, numutils will
3283 work for all users even if they are missing kinds.
3288 work for all users even if they are missing kinds.
3284
3289
3285 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3290 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3286 failure, which can occur with SWIG-wrapped extensions. After a
3291 failure, which can occur with SWIG-wrapped extensions. After a
3287 crash report from Prabhu.
3292 crash report from Prabhu.
3288
3293
3289 2003-05-16 Fernando Perez <fperez@colorado.edu>
3294 2003-05-16 Fernando Perez <fperez@colorado.edu>
3290
3295
3291 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3296 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3292 protect ipython from user code which may call directly
3297 protect ipython from user code which may call directly
3293 sys.excepthook (this looks like an ipython crash to the user, even
3298 sys.excepthook (this looks like an ipython crash to the user, even
3294 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3299 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3295 This is especially important to help users of WxWindows, but may
3300 This is especially important to help users of WxWindows, but may
3296 also be useful in other cases.
3301 also be useful in other cases.
3297
3302
3298 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3303 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3299 an optional tb_offset to be specified, and to preserve exception
3304 an optional tb_offset to be specified, and to preserve exception
3300 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3305 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3301
3306
3302 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3307 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3303
3308
3304 2003-05-15 Fernando Perez <fperez@colorado.edu>
3309 2003-05-15 Fernando Perez <fperez@colorado.edu>
3305
3310
3306 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3311 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3307 installing for a new user under Windows.
3312 installing for a new user under Windows.
3308
3313
3309 2003-05-12 Fernando Perez <fperez@colorado.edu>
3314 2003-05-12 Fernando Perez <fperez@colorado.edu>
3310
3315
3311 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3316 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3312 handler for Emacs comint-based lines. Currently it doesn't do
3317 handler for Emacs comint-based lines. Currently it doesn't do
3313 much (but importantly, it doesn't update the history cache). In
3318 much (but importantly, it doesn't update the history cache). In
3314 the future it may be expanded if Alex needs more functionality
3319 the future it may be expanded if Alex needs more functionality
3315 there.
3320 there.
3316
3321
3317 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3322 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3318 info to crash reports.
3323 info to crash reports.
3319
3324
3320 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3325 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3321 just like Python's -c. Also fixed crash with invalid -color
3326 just like Python's -c. Also fixed crash with invalid -color
3322 option value at startup. Thanks to Will French
3327 option value at startup. Thanks to Will French
3323 <wfrench-AT-bestweb.net> for the bug report.
3328 <wfrench-AT-bestweb.net> for the bug report.
3324
3329
3325 2003-05-09 Fernando Perez <fperez@colorado.edu>
3330 2003-05-09 Fernando Perez <fperez@colorado.edu>
3326
3331
3327 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3332 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3328 to EvalDict (it's a mapping, after all) and simplified its code
3333 to EvalDict (it's a mapping, after all) and simplified its code
3329 quite a bit, after a nice discussion on c.l.py where Gustavo
3334 quite a bit, after a nice discussion on c.l.py where Gustavo
3330 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3335 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3331
3336
3332 2003-04-30 Fernando Perez <fperez@colorado.edu>
3337 2003-04-30 Fernando Perez <fperez@colorado.edu>
3333
3338
3334 * IPython/genutils.py (timings_out): modified it to reduce its
3339 * IPython/genutils.py (timings_out): modified it to reduce its
3335 overhead in the common reps==1 case.
3340 overhead in the common reps==1 case.
3336
3341
3337 2003-04-29 Fernando Perez <fperez@colorado.edu>
3342 2003-04-29 Fernando Perez <fperez@colorado.edu>
3338
3343
3339 * IPython/genutils.py (timings_out): Modified to use the resource
3344 * IPython/genutils.py (timings_out): Modified to use the resource
3340 module, which avoids the wraparound problems of time.clock().
3345 module, which avoids the wraparound problems of time.clock().
3341
3346
3342 2003-04-17 *** Released version 0.2.15pre4
3347 2003-04-17 *** Released version 0.2.15pre4
3343
3348
3344 2003-04-17 Fernando Perez <fperez@colorado.edu>
3349 2003-04-17 Fernando Perez <fperez@colorado.edu>
3345
3350
3346 * setup.py (scriptfiles): Split windows-specific stuff over to a
3351 * setup.py (scriptfiles): Split windows-specific stuff over to a
3347 separate file, in an attempt to have a Windows GUI installer.
3352 separate file, in an attempt to have a Windows GUI installer.
3348 That didn't work, but part of the groundwork is done.
3353 That didn't work, but part of the groundwork is done.
3349
3354
3350 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3355 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3351 indent/unindent with 4 spaces. Particularly useful in combination
3356 indent/unindent with 4 spaces. Particularly useful in combination
3352 with the new auto-indent option.
3357 with the new auto-indent option.
3353
3358
3354 2003-04-16 Fernando Perez <fperez@colorado.edu>
3359 2003-04-16 Fernando Perez <fperez@colorado.edu>
3355
3360
3356 * IPython/Magic.py: various replacements of self.rc for
3361 * IPython/Magic.py: various replacements of self.rc for
3357 self.shell.rc. A lot more remains to be done to fully disentangle
3362 self.shell.rc. A lot more remains to be done to fully disentangle
3358 this class from the main Shell class.
3363 this class from the main Shell class.
3359
3364
3360 * IPython/GnuplotRuntime.py: added checks for mouse support so
3365 * IPython/GnuplotRuntime.py: added checks for mouse support so
3361 that we don't try to enable it if the current gnuplot doesn't
3366 that we don't try to enable it if the current gnuplot doesn't
3362 really support it. Also added checks so that we don't try to
3367 really support it. Also added checks so that we don't try to
3363 enable persist under Windows (where Gnuplot doesn't recognize the
3368 enable persist under Windows (where Gnuplot doesn't recognize the
3364 option).
3369 option).
3365
3370
3366 * IPython/iplib.py (InteractiveShell.interact): Added optional
3371 * IPython/iplib.py (InteractiveShell.interact): Added optional
3367 auto-indenting code, after a patch by King C. Shu
3372 auto-indenting code, after a patch by King C. Shu
3368 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3373 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3369 get along well with pasting indented code. If I ever figure out
3374 get along well with pasting indented code. If I ever figure out
3370 how to make that part go well, it will become on by default.
3375 how to make that part go well, it will become on by default.
3371
3376
3372 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3377 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3373 crash ipython if there was an unmatched '%' in the user's prompt
3378 crash ipython if there was an unmatched '%' in the user's prompt
3374 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3379 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3375
3380
3376 * IPython/iplib.py (InteractiveShell.interact): removed the
3381 * IPython/iplib.py (InteractiveShell.interact): removed the
3377 ability to ask the user whether he wants to crash or not at the
3382 ability to ask the user whether he wants to crash or not at the
3378 'last line' exception handler. Calling functions at that point
3383 'last line' exception handler. Calling functions at that point
3379 changes the stack, and the error reports would have incorrect
3384 changes the stack, and the error reports would have incorrect
3380 tracebacks.
3385 tracebacks.
3381
3386
3382 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3387 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3383 pass through a peger a pretty-printed form of any object. After a
3388 pass through a peger a pretty-printed form of any object. After a
3384 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3389 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3385
3390
3386 2003-04-14 Fernando Perez <fperez@colorado.edu>
3391 2003-04-14 Fernando Perez <fperez@colorado.edu>
3387
3392
3388 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3393 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3389 all files in ~ would be modified at first install (instead of
3394 all files in ~ would be modified at first install (instead of
3390 ~/.ipython). This could be potentially disastrous, as the
3395 ~/.ipython). This could be potentially disastrous, as the
3391 modification (make line-endings native) could damage binary files.
3396 modification (make line-endings native) could damage binary files.
3392
3397
3393 2003-04-10 Fernando Perez <fperez@colorado.edu>
3398 2003-04-10 Fernando Perez <fperez@colorado.edu>
3394
3399
3395 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3400 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3396 handle only lines which are invalid python. This now means that
3401 handle only lines which are invalid python. This now means that
3397 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3402 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3398 for the bug report.
3403 for the bug report.
3399
3404
3400 2003-04-01 Fernando Perez <fperez@colorado.edu>
3405 2003-04-01 Fernando Perez <fperez@colorado.edu>
3401
3406
3402 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3407 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3403 where failing to set sys.last_traceback would crash pdb.pm().
3408 where failing to set sys.last_traceback would crash pdb.pm().
3404 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3409 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3405 report.
3410 report.
3406
3411
3407 2003-03-25 Fernando Perez <fperez@colorado.edu>
3412 2003-03-25 Fernando Perez <fperez@colorado.edu>
3408
3413
3409 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3414 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3410 before printing it (it had a lot of spurious blank lines at the
3415 before printing it (it had a lot of spurious blank lines at the
3411 end).
3416 end).
3412
3417
3413 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3418 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3414 output would be sent 21 times! Obviously people don't use this
3419 output would be sent 21 times! Obviously people don't use this
3415 too often, or I would have heard about it.
3420 too often, or I would have heard about it.
3416
3421
3417 2003-03-24 Fernando Perez <fperez@colorado.edu>
3422 2003-03-24 Fernando Perez <fperez@colorado.edu>
3418
3423
3419 * setup.py (scriptfiles): renamed the data_files parameter from
3424 * setup.py (scriptfiles): renamed the data_files parameter from
3420 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3425 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3421 for the patch.
3426 for the patch.
3422
3427
3423 2003-03-20 Fernando Perez <fperez@colorado.edu>
3428 2003-03-20 Fernando Perez <fperez@colorado.edu>
3424
3429
3425 * IPython/genutils.py (error): added error() and fatal()
3430 * IPython/genutils.py (error): added error() and fatal()
3426 functions.
3431 functions.
3427
3432
3428 2003-03-18 *** Released version 0.2.15pre3
3433 2003-03-18 *** Released version 0.2.15pre3
3429
3434
3430 2003-03-18 Fernando Perez <fperez@colorado.edu>
3435 2003-03-18 Fernando Perez <fperez@colorado.edu>
3431
3436
3432 * setupext/install_data_ext.py
3437 * setupext/install_data_ext.py
3433 (install_data_ext.initialize_options): Class contributed by Jack
3438 (install_data_ext.initialize_options): Class contributed by Jack
3434 Moffit for fixing the old distutils hack. He is sending this to
3439 Moffit for fixing the old distutils hack. He is sending this to
3435 the distutils folks so in the future we may not need it as a
3440 the distutils folks so in the future we may not need it as a
3436 private fix.
3441 private fix.
3437
3442
3438 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3443 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3439 changes for Debian packaging. See his patch for full details.
3444 changes for Debian packaging. See his patch for full details.
3440 The old distutils hack of making the ipythonrc* files carry a
3445 The old distutils hack of making the ipythonrc* files carry a
3441 bogus .py extension is gone, at last. Examples were moved to a
3446 bogus .py extension is gone, at last. Examples were moved to a
3442 separate subdir under doc/, and the separate executable scripts
3447 separate subdir under doc/, and the separate executable scripts
3443 now live in their own directory. Overall a great cleanup. The
3448 now live in their own directory. Overall a great cleanup. The
3444 manual was updated to use the new files, and setup.py has been
3449 manual was updated to use the new files, and setup.py has been
3445 fixed for this setup.
3450 fixed for this setup.
3446
3451
3447 * IPython/PyColorize.py (Parser.usage): made non-executable and
3452 * IPython/PyColorize.py (Parser.usage): made non-executable and
3448 created a pycolor wrapper around it to be included as a script.
3453 created a pycolor wrapper around it to be included as a script.
3449
3454
3450 2003-03-12 *** Released version 0.2.15pre2
3455 2003-03-12 *** Released version 0.2.15pre2
3451
3456
3452 2003-03-12 Fernando Perez <fperez@colorado.edu>
3457 2003-03-12 Fernando Perez <fperez@colorado.edu>
3453
3458
3454 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3459 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3455 long-standing problem with garbage characters in some terminals.
3460 long-standing problem with garbage characters in some terminals.
3456 The issue was really that the \001 and \002 escapes must _only_ be
3461 The issue was really that the \001 and \002 escapes must _only_ be
3457 passed to input prompts (which call readline), but _never_ to
3462 passed to input prompts (which call readline), but _never_ to
3458 normal text to be printed on screen. I changed ColorANSI to have
3463 normal text to be printed on screen. I changed ColorANSI to have
3459 two classes: TermColors and InputTermColors, each with the
3464 two classes: TermColors and InputTermColors, each with the
3460 appropriate escapes for input prompts or normal text. The code in
3465 appropriate escapes for input prompts or normal text. The code in
3461 Prompts.py got slightly more complicated, but this very old and
3466 Prompts.py got slightly more complicated, but this very old and
3462 annoying bug is finally fixed.
3467 annoying bug is finally fixed.
3463
3468
3464 All the credit for nailing down the real origin of this problem
3469 All the credit for nailing down the real origin of this problem
3465 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3470 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3466 *Many* thanks to him for spending quite a bit of effort on this.
3471 *Many* thanks to him for spending quite a bit of effort on this.
3467
3472
3468 2003-03-05 *** Released version 0.2.15pre1
3473 2003-03-05 *** Released version 0.2.15pre1
3469
3474
3470 2003-03-03 Fernando Perez <fperez@colorado.edu>
3475 2003-03-03 Fernando Perez <fperez@colorado.edu>
3471
3476
3472 * IPython/FakeModule.py: Moved the former _FakeModule to a
3477 * IPython/FakeModule.py: Moved the former _FakeModule to a
3473 separate file, because it's also needed by Magic (to fix a similar
3478 separate file, because it's also needed by Magic (to fix a similar
3474 pickle-related issue in @run).
3479 pickle-related issue in @run).
3475
3480
3476 2003-03-02 Fernando Perez <fperez@colorado.edu>
3481 2003-03-02 Fernando Perez <fperez@colorado.edu>
3477
3482
3478 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3483 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3479 the autocall option at runtime.
3484 the autocall option at runtime.
3480 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3485 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3481 across Magic.py to start separating Magic from InteractiveShell.
3486 across Magic.py to start separating Magic from InteractiveShell.
3482 (Magic._ofind): Fixed to return proper namespace for dotted
3487 (Magic._ofind): Fixed to return proper namespace for dotted
3483 names. Before, a dotted name would always return 'not currently
3488 names. Before, a dotted name would always return 'not currently
3484 defined', because it would find the 'parent'. s.x would be found,
3489 defined', because it would find the 'parent'. s.x would be found,
3485 but since 'x' isn't defined by itself, it would get confused.
3490 but since 'x' isn't defined by itself, it would get confused.
3486 (Magic.magic_run): Fixed pickling problems reported by Ralf
3491 (Magic.magic_run): Fixed pickling problems reported by Ralf
3487 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3492 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3488 that I'd used when Mike Heeter reported similar issues at the
3493 that I'd used when Mike Heeter reported similar issues at the
3489 top-level, but now for @run. It boils down to injecting the
3494 top-level, but now for @run. It boils down to injecting the
3490 namespace where code is being executed with something that looks
3495 namespace where code is being executed with something that looks
3491 enough like a module to fool pickle.dump(). Since a pickle stores
3496 enough like a module to fool pickle.dump(). Since a pickle stores
3492 a named reference to the importing module, we need this for
3497 a named reference to the importing module, we need this for
3493 pickles to save something sensible.
3498 pickles to save something sensible.
3494
3499
3495 * IPython/ipmaker.py (make_IPython): added an autocall option.
3500 * IPython/ipmaker.py (make_IPython): added an autocall option.
3496
3501
3497 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3502 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3498 the auto-eval code. Now autocalling is an option, and the code is
3503 the auto-eval code. Now autocalling is an option, and the code is
3499 also vastly safer. There is no more eval() involved at all.
3504 also vastly safer. There is no more eval() involved at all.
3500
3505
3501 2003-03-01 Fernando Perez <fperez@colorado.edu>
3506 2003-03-01 Fernando Perez <fperez@colorado.edu>
3502
3507
3503 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3508 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3504 dict with named keys instead of a tuple.
3509 dict with named keys instead of a tuple.
3505
3510
3506 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3511 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3507
3512
3508 * setup.py (make_shortcut): Fixed message about directories
3513 * setup.py (make_shortcut): Fixed message about directories
3509 created during Windows installation (the directories were ok, just
3514 created during Windows installation (the directories were ok, just
3510 the printed message was misleading). Thanks to Chris Liechti
3515 the printed message was misleading). Thanks to Chris Liechti
3511 <cliechti-AT-gmx.net> for the heads up.
3516 <cliechti-AT-gmx.net> for the heads up.
3512
3517
3513 2003-02-21 Fernando Perez <fperez@colorado.edu>
3518 2003-02-21 Fernando Perez <fperez@colorado.edu>
3514
3519
3515 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3520 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3516 of ValueError exception when checking for auto-execution. This
3521 of ValueError exception when checking for auto-execution. This
3517 one is raised by things like Numeric arrays arr.flat when the
3522 one is raised by things like Numeric arrays arr.flat when the
3518 array is non-contiguous.
3523 array is non-contiguous.
3519
3524
3520 2003-01-31 Fernando Perez <fperez@colorado.edu>
3525 2003-01-31 Fernando Perez <fperez@colorado.edu>
3521
3526
3522 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3527 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3523 not return any value at all (even though the command would get
3528 not return any value at all (even though the command would get
3524 executed).
3529 executed).
3525 (xsys): Flush stdout right after printing the command to ensure
3530 (xsys): Flush stdout right after printing the command to ensure
3526 proper ordering of commands and command output in the total
3531 proper ordering of commands and command output in the total
3527 output.
3532 output.
3528 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3533 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3529 system/getoutput as defaults. The old ones are kept for
3534 system/getoutput as defaults. The old ones are kept for
3530 compatibility reasons, so no code which uses this library needs
3535 compatibility reasons, so no code which uses this library needs
3531 changing.
3536 changing.
3532
3537
3533 2003-01-27 *** Released version 0.2.14
3538 2003-01-27 *** Released version 0.2.14
3534
3539
3535 2003-01-25 Fernando Perez <fperez@colorado.edu>
3540 2003-01-25 Fernando Perez <fperez@colorado.edu>
3536
3541
3537 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3542 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3538 functions defined in previous edit sessions could not be re-edited
3543 functions defined in previous edit sessions could not be re-edited
3539 (because the temp files were immediately removed). Now temp files
3544 (because the temp files were immediately removed). Now temp files
3540 are removed only at IPython's exit.
3545 are removed only at IPython's exit.
3541 (Magic.magic_run): Improved @run to perform shell-like expansions
3546 (Magic.magic_run): Improved @run to perform shell-like expansions
3542 on its arguments (~users and $VARS). With this, @run becomes more
3547 on its arguments (~users and $VARS). With this, @run becomes more
3543 like a normal command-line.
3548 like a normal command-line.
3544
3549
3545 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3550 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3546 bugs related to embedding and cleaned up that code. A fairly
3551 bugs related to embedding and cleaned up that code. A fairly
3547 important one was the impossibility to access the global namespace
3552 important one was the impossibility to access the global namespace
3548 through the embedded IPython (only local variables were visible).
3553 through the embedded IPython (only local variables were visible).
3549
3554
3550 2003-01-14 Fernando Perez <fperez@colorado.edu>
3555 2003-01-14 Fernando Perez <fperez@colorado.edu>
3551
3556
3552 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3557 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3553 auto-calling to be a bit more conservative. Now it doesn't get
3558 auto-calling to be a bit more conservative. Now it doesn't get
3554 triggered if any of '!=()<>' are in the rest of the input line, to
3559 triggered if any of '!=()<>' are in the rest of the input line, to
3555 allow comparing callables. Thanks to Alex for the heads up.
3560 allow comparing callables. Thanks to Alex for the heads up.
3556
3561
3557 2003-01-07 Fernando Perez <fperez@colorado.edu>
3562 2003-01-07 Fernando Perez <fperez@colorado.edu>
3558
3563
3559 * IPython/genutils.py (page): fixed estimation of the number of
3564 * IPython/genutils.py (page): fixed estimation of the number of
3560 lines in a string to be paged to simply count newlines. This
3565 lines in a string to be paged to simply count newlines. This
3561 prevents over-guessing due to embedded escape sequences. A better
3566 prevents over-guessing due to embedded escape sequences. A better
3562 long-term solution would involve stripping out the control chars
3567 long-term solution would involve stripping out the control chars
3563 for the count, but it's potentially so expensive I just don't
3568 for the count, but it's potentially so expensive I just don't
3564 think it's worth doing.
3569 think it's worth doing.
3565
3570
3566 2002-12-19 *** Released version 0.2.14pre50
3571 2002-12-19 *** Released version 0.2.14pre50
3567
3572
3568 2002-12-19 Fernando Perez <fperez@colorado.edu>
3573 2002-12-19 Fernando Perez <fperez@colorado.edu>
3569
3574
3570 * tools/release (version): Changed release scripts to inform
3575 * tools/release (version): Changed release scripts to inform
3571 Andrea and build a NEWS file with a list of recent changes.
3576 Andrea and build a NEWS file with a list of recent changes.
3572
3577
3573 * IPython/ColorANSI.py (__all__): changed terminal detection
3578 * IPython/ColorANSI.py (__all__): changed terminal detection
3574 code. Seems to work better for xterms without breaking
3579 code. Seems to work better for xterms without breaking
3575 konsole. Will need more testing to determine if WinXP and Mac OSX
3580 konsole. Will need more testing to determine if WinXP and Mac OSX
3576 also work ok.
3581 also work ok.
3577
3582
3578 2002-12-18 *** Released version 0.2.14pre49
3583 2002-12-18 *** Released version 0.2.14pre49
3579
3584
3580 2002-12-18 Fernando Perez <fperez@colorado.edu>
3585 2002-12-18 Fernando Perez <fperez@colorado.edu>
3581
3586
3582 * Docs: added new info about Mac OSX, from Andrea.
3587 * Docs: added new info about Mac OSX, from Andrea.
3583
3588
3584 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3589 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3585 allow direct plotting of python strings whose format is the same
3590 allow direct plotting of python strings whose format is the same
3586 of gnuplot data files.
3591 of gnuplot data files.
3587
3592
3588 2002-12-16 Fernando Perez <fperez@colorado.edu>
3593 2002-12-16 Fernando Perez <fperez@colorado.edu>
3589
3594
3590 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3595 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3591 value of exit question to be acknowledged.
3596 value of exit question to be acknowledged.
3592
3597
3593 2002-12-03 Fernando Perez <fperez@colorado.edu>
3598 2002-12-03 Fernando Perez <fperez@colorado.edu>
3594
3599
3595 * IPython/ipmaker.py: removed generators, which had been added
3600 * IPython/ipmaker.py: removed generators, which had been added
3596 by mistake in an earlier debugging run. This was causing trouble
3601 by mistake in an earlier debugging run. This was causing trouble
3597 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3602 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3598 for pointing this out.
3603 for pointing this out.
3599
3604
3600 2002-11-17 Fernando Perez <fperez@colorado.edu>
3605 2002-11-17 Fernando Perez <fperez@colorado.edu>
3601
3606
3602 * Manual: updated the Gnuplot section.
3607 * Manual: updated the Gnuplot section.
3603
3608
3604 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3609 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3605 a much better split of what goes in Runtime and what goes in
3610 a much better split of what goes in Runtime and what goes in
3606 Interactive.
3611 Interactive.
3607
3612
3608 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3613 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3609 being imported from iplib.
3614 being imported from iplib.
3610
3615
3611 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3616 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3612 for command-passing. Now the global Gnuplot instance is called
3617 for command-passing. Now the global Gnuplot instance is called
3613 'gp' instead of 'g', which was really a far too fragile and
3618 'gp' instead of 'g', which was really a far too fragile and
3614 common name.
3619 common name.
3615
3620
3616 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3621 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3617 bounding boxes generated by Gnuplot for square plots.
3622 bounding boxes generated by Gnuplot for square plots.
3618
3623
3619 * IPython/genutils.py (popkey): new function added. I should
3624 * IPython/genutils.py (popkey): new function added. I should
3620 suggest this on c.l.py as a dict method, it seems useful.
3625 suggest this on c.l.py as a dict method, it seems useful.
3621
3626
3622 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3627 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3623 to transparently handle PostScript generation. MUCH better than
3628 to transparently handle PostScript generation. MUCH better than
3624 the previous plot_eps/replot_eps (which I removed now). The code
3629 the previous plot_eps/replot_eps (which I removed now). The code
3625 is also fairly clean and well documented now (including
3630 is also fairly clean and well documented now (including
3626 docstrings).
3631 docstrings).
3627
3632
3628 2002-11-13 Fernando Perez <fperez@colorado.edu>
3633 2002-11-13 Fernando Perez <fperez@colorado.edu>
3629
3634
3630 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3635 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3631 (inconsistent with options).
3636 (inconsistent with options).
3632
3637
3633 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3638 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3634 manually disabled, I don't know why. Fixed it.
3639 manually disabled, I don't know why. Fixed it.
3635 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3640 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3636 eps output.
3641 eps output.
3637
3642
3638 2002-11-12 Fernando Perez <fperez@colorado.edu>
3643 2002-11-12 Fernando Perez <fperez@colorado.edu>
3639
3644
3640 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3645 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3641 don't propagate up to caller. Fixes crash reported by François
3646 don't propagate up to caller. Fixes crash reported by François
3642 Pinard.
3647 Pinard.
3643
3648
3644 2002-11-09 Fernando Perez <fperez@colorado.edu>
3649 2002-11-09 Fernando Perez <fperez@colorado.edu>
3645
3650
3646 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3651 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3647 history file for new users.
3652 history file for new users.
3648 (make_IPython): fixed bug where initial install would leave the
3653 (make_IPython): fixed bug where initial install would leave the
3649 user running in the .ipython dir.
3654 user running in the .ipython dir.
3650 (make_IPython): fixed bug where config dir .ipython would be
3655 (make_IPython): fixed bug where config dir .ipython would be
3651 created regardless of the given -ipythondir option. Thanks to Cory
3656 created regardless of the given -ipythondir option. Thanks to Cory
3652 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3657 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3653
3658
3654 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3659 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3655 type confirmations. Will need to use it in all of IPython's code
3660 type confirmations. Will need to use it in all of IPython's code
3656 consistently.
3661 consistently.
3657
3662
3658 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3663 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3659 context to print 31 lines instead of the default 5. This will make
3664 context to print 31 lines instead of the default 5. This will make
3660 the crash reports extremely detailed in case the problem is in
3665 the crash reports extremely detailed in case the problem is in
3661 libraries I don't have access to.
3666 libraries I don't have access to.
3662
3667
3663 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3668 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3664 line of defense' code to still crash, but giving users fair
3669 line of defense' code to still crash, but giving users fair
3665 warning. I don't want internal errors to go unreported: if there's
3670 warning. I don't want internal errors to go unreported: if there's
3666 an internal problem, IPython should crash and generate a full
3671 an internal problem, IPython should crash and generate a full
3667 report.
3672 report.
3668
3673
3669 2002-11-08 Fernando Perez <fperez@colorado.edu>
3674 2002-11-08 Fernando Perez <fperez@colorado.edu>
3670
3675
3671 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3676 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3672 otherwise uncaught exceptions which can appear if people set
3677 otherwise uncaught exceptions which can appear if people set
3673 sys.stdout to something badly broken. Thanks to a crash report
3678 sys.stdout to something badly broken. Thanks to a crash report
3674 from henni-AT-mail.brainbot.com.
3679 from henni-AT-mail.brainbot.com.
3675
3680
3676 2002-11-04 Fernando Perez <fperez@colorado.edu>
3681 2002-11-04 Fernando Perez <fperez@colorado.edu>
3677
3682
3678 * IPython/iplib.py (InteractiveShell.interact): added
3683 * IPython/iplib.py (InteractiveShell.interact): added
3679 __IPYTHON__active to the builtins. It's a flag which goes on when
3684 __IPYTHON__active to the builtins. It's a flag which goes on when
3680 the interaction starts and goes off again when it stops. This
3685 the interaction starts and goes off again when it stops. This
3681 allows embedding code to detect being inside IPython. Before this
3686 allows embedding code to detect being inside IPython. Before this
3682 was done via __IPYTHON__, but that only shows that an IPython
3687 was done via __IPYTHON__, but that only shows that an IPython
3683 instance has been created.
3688 instance has been created.
3684
3689
3685 * IPython/Magic.py (Magic.magic_env): I realized that in a
3690 * IPython/Magic.py (Magic.magic_env): I realized that in a
3686 UserDict, instance.data holds the data as a normal dict. So I
3691 UserDict, instance.data holds the data as a normal dict. So I
3687 modified @env to return os.environ.data instead of rebuilding a
3692 modified @env to return os.environ.data instead of rebuilding a
3688 dict by hand.
3693 dict by hand.
3689
3694
3690 2002-11-02 Fernando Perez <fperez@colorado.edu>
3695 2002-11-02 Fernando Perez <fperez@colorado.edu>
3691
3696
3692 * IPython/genutils.py (warn): changed so that level 1 prints no
3697 * IPython/genutils.py (warn): changed so that level 1 prints no
3693 header. Level 2 is now the default (with 'WARNING' header, as
3698 header. Level 2 is now the default (with 'WARNING' header, as
3694 before). I think I tracked all places where changes were needed in
3699 before). I think I tracked all places where changes were needed in
3695 IPython, but outside code using the old level numbering may have
3700 IPython, but outside code using the old level numbering may have
3696 broken.
3701 broken.
3697
3702
3698 * IPython/iplib.py (InteractiveShell.runcode): added this to
3703 * IPython/iplib.py (InteractiveShell.runcode): added this to
3699 handle the tracebacks in SystemExit traps correctly. The previous
3704 handle the tracebacks in SystemExit traps correctly. The previous
3700 code (through interact) was printing more of the stack than
3705 code (through interact) was printing more of the stack than
3701 necessary, showing IPython internal code to the user.
3706 necessary, showing IPython internal code to the user.
3702
3707
3703 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3708 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3704 default. Now that the default at the confirmation prompt is yes,
3709 default. Now that the default at the confirmation prompt is yes,
3705 it's not so intrusive. François' argument that ipython sessions
3710 it's not so intrusive. François' argument that ipython sessions
3706 tend to be complex enough not to lose them from an accidental C-d,
3711 tend to be complex enough not to lose them from an accidental C-d,
3707 is a valid one.
3712 is a valid one.
3708
3713
3709 * IPython/iplib.py (InteractiveShell.interact): added a
3714 * IPython/iplib.py (InteractiveShell.interact): added a
3710 showtraceback() call to the SystemExit trap, and modified the exit
3715 showtraceback() call to the SystemExit trap, and modified the exit
3711 confirmation to have yes as the default.
3716 confirmation to have yes as the default.
3712
3717
3713 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3718 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3714 this file. It's been gone from the code for a long time, this was
3719 this file. It's been gone from the code for a long time, this was
3715 simply leftover junk.
3720 simply leftover junk.
3716
3721
3717 2002-11-01 Fernando Perez <fperez@colorado.edu>
3722 2002-11-01 Fernando Perez <fperez@colorado.edu>
3718
3723
3719 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3724 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3720 added. If set, IPython now traps EOF and asks for
3725 added. If set, IPython now traps EOF and asks for
3721 confirmation. After a request by François Pinard.
3726 confirmation. After a request by François Pinard.
3722
3727
3723 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3728 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3724 of @abort, and with a new (better) mechanism for handling the
3729 of @abort, and with a new (better) mechanism for handling the
3725 exceptions.
3730 exceptions.
3726
3731
3727 2002-10-27 Fernando Perez <fperez@colorado.edu>
3732 2002-10-27 Fernando Perez <fperez@colorado.edu>
3728
3733
3729 * IPython/usage.py (__doc__): updated the --help information and
3734 * IPython/usage.py (__doc__): updated the --help information and
3730 the ipythonrc file to indicate that -log generates
3735 the ipythonrc file to indicate that -log generates
3731 ./ipython.log. Also fixed the corresponding info in @logstart.
3736 ./ipython.log. Also fixed the corresponding info in @logstart.
3732 This and several other fixes in the manuals thanks to reports by
3737 This and several other fixes in the manuals thanks to reports by
3733 François Pinard <pinard-AT-iro.umontreal.ca>.
3738 François Pinard <pinard-AT-iro.umontreal.ca>.
3734
3739
3735 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3740 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3736 refer to @logstart (instead of @log, which doesn't exist).
3741 refer to @logstart (instead of @log, which doesn't exist).
3737
3742
3738 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3743 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3739 AttributeError crash. Thanks to Christopher Armstrong
3744 AttributeError crash. Thanks to Christopher Armstrong
3740 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3745 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3741 introduced recently (in 0.2.14pre37) with the fix to the eval
3746 introduced recently (in 0.2.14pre37) with the fix to the eval
3742 problem mentioned below.
3747 problem mentioned below.
3743
3748
3744 2002-10-17 Fernando Perez <fperez@colorado.edu>
3749 2002-10-17 Fernando Perez <fperez@colorado.edu>
3745
3750
3746 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3751 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3747 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3752 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3748
3753
3749 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3754 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3750 this function to fix a problem reported by Alex Schmolck. He saw
3755 this function to fix a problem reported by Alex Schmolck. He saw
3751 it with list comprehensions and generators, which were getting
3756 it with list comprehensions and generators, which were getting
3752 called twice. The real problem was an 'eval' call in testing for
3757 called twice. The real problem was an 'eval' call in testing for
3753 automagic which was evaluating the input line silently.
3758 automagic which was evaluating the input line silently.
3754
3759
3755 This is a potentially very nasty bug, if the input has side
3760 This is a potentially very nasty bug, if the input has side
3756 effects which must not be repeated. The code is much cleaner now,
3761 effects which must not be repeated. The code is much cleaner now,
3757 without any blanket 'except' left and with a regexp test for
3762 without any blanket 'except' left and with a regexp test for
3758 actual function names.
3763 actual function names.
3759
3764
3760 But an eval remains, which I'm not fully comfortable with. I just
3765 But an eval remains, which I'm not fully comfortable with. I just
3761 don't know how to find out if an expression could be a callable in
3766 don't know how to find out if an expression could be a callable in
3762 the user's namespace without doing an eval on the string. However
3767 the user's namespace without doing an eval on the string. However
3763 that string is now much more strictly checked so that no code
3768 that string is now much more strictly checked so that no code
3764 slips by, so the eval should only happen for things that can
3769 slips by, so the eval should only happen for things that can
3765 really be only function/method names.
3770 really be only function/method names.
3766
3771
3767 2002-10-15 Fernando Perez <fperez@colorado.edu>
3772 2002-10-15 Fernando Perez <fperez@colorado.edu>
3768
3773
3769 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3774 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3770 OSX information to main manual, removed README_Mac_OSX file from
3775 OSX information to main manual, removed README_Mac_OSX file from
3771 distribution. Also updated credits for recent additions.
3776 distribution. Also updated credits for recent additions.
3772
3777
3773 2002-10-10 Fernando Perez <fperez@colorado.edu>
3778 2002-10-10 Fernando Perez <fperez@colorado.edu>
3774
3779
3775 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3780 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3776 terminal-related issues. Many thanks to Andrea Riciputi
3781 terminal-related issues. Many thanks to Andrea Riciputi
3777 <andrea.riciputi-AT-libero.it> for writing it.
3782 <andrea.riciputi-AT-libero.it> for writing it.
3778
3783
3779 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3784 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3780 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3785 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3781
3786
3782 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3787 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3783 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3788 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3784 <syver-en-AT-online.no> who both submitted patches for this problem.
3789 <syver-en-AT-online.no> who both submitted patches for this problem.
3785
3790
3786 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3791 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3787 global embedding to make sure that things don't overwrite user
3792 global embedding to make sure that things don't overwrite user
3788 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3793 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3789
3794
3790 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3795 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3791 compatibility. Thanks to Hayden Callow
3796 compatibility. Thanks to Hayden Callow
3792 <h.callow-AT-elec.canterbury.ac.nz>
3797 <h.callow-AT-elec.canterbury.ac.nz>
3793
3798
3794 2002-10-04 Fernando Perez <fperez@colorado.edu>
3799 2002-10-04 Fernando Perez <fperez@colorado.edu>
3795
3800
3796 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3801 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3797 Gnuplot.File objects.
3802 Gnuplot.File objects.
3798
3803
3799 2002-07-23 Fernando Perez <fperez@colorado.edu>
3804 2002-07-23 Fernando Perez <fperez@colorado.edu>
3800
3805
3801 * IPython/genutils.py (timing): Added timings() and timing() for
3806 * IPython/genutils.py (timing): Added timings() and timing() for
3802 quick access to the most commonly needed data, the execution
3807 quick access to the most commonly needed data, the execution
3803 times. Old timing() renamed to timings_out().
3808 times. Old timing() renamed to timings_out().
3804
3809
3805 2002-07-18 Fernando Perez <fperez@colorado.edu>
3810 2002-07-18 Fernando Perez <fperez@colorado.edu>
3806
3811
3807 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3812 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3808 bug with nested instances disrupting the parent's tab completion.
3813 bug with nested instances disrupting the parent's tab completion.
3809
3814
3810 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3815 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3811 all_completions code to begin the emacs integration.
3816 all_completions code to begin the emacs integration.
3812
3817
3813 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3818 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3814 argument to allow titling individual arrays when plotting.
3819 argument to allow titling individual arrays when plotting.
3815
3820
3816 2002-07-15 Fernando Perez <fperez@colorado.edu>
3821 2002-07-15 Fernando Perez <fperez@colorado.edu>
3817
3822
3818 * setup.py (make_shortcut): changed to retrieve the value of
3823 * setup.py (make_shortcut): changed to retrieve the value of
3819 'Program Files' directory from the registry (this value changes in
3824 'Program Files' directory from the registry (this value changes in
3820 non-english versions of Windows). Thanks to Thomas Fanslau
3825 non-english versions of Windows). Thanks to Thomas Fanslau
3821 <tfanslau-AT-gmx.de> for the report.
3826 <tfanslau-AT-gmx.de> for the report.
3822
3827
3823 2002-07-10 Fernando Perez <fperez@colorado.edu>
3828 2002-07-10 Fernando Perez <fperez@colorado.edu>
3824
3829
3825 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3830 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3826 a bug in pdb, which crashes if a line with only whitespace is
3831 a bug in pdb, which crashes if a line with only whitespace is
3827 entered. Bug report submitted to sourceforge.
3832 entered. Bug report submitted to sourceforge.
3828
3833
3829 2002-07-09 Fernando Perez <fperez@colorado.edu>
3834 2002-07-09 Fernando Perez <fperez@colorado.edu>
3830
3835
3831 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3836 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3832 reporting exceptions (it's a bug in inspect.py, I just set a
3837 reporting exceptions (it's a bug in inspect.py, I just set a
3833 workaround).
3838 workaround).
3834
3839
3835 2002-07-08 Fernando Perez <fperez@colorado.edu>
3840 2002-07-08 Fernando Perez <fperez@colorado.edu>
3836
3841
3837 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3842 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3838 __IPYTHON__ in __builtins__ to show up in user_ns.
3843 __IPYTHON__ in __builtins__ to show up in user_ns.
3839
3844
3840 2002-07-03 Fernando Perez <fperez@colorado.edu>
3845 2002-07-03 Fernando Perez <fperez@colorado.edu>
3841
3846
3842 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3847 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3843 name from @gp_set_instance to @gp_set_default.
3848 name from @gp_set_instance to @gp_set_default.
3844
3849
3845 * IPython/ipmaker.py (make_IPython): default editor value set to
3850 * IPython/ipmaker.py (make_IPython): default editor value set to
3846 '0' (a string), to match the rc file. Otherwise will crash when
3851 '0' (a string), to match the rc file. Otherwise will crash when
3847 .strip() is called on it.
3852 .strip() is called on it.
3848
3853
3849
3854
3850 2002-06-28 Fernando Perez <fperez@colorado.edu>
3855 2002-06-28 Fernando Perez <fperez@colorado.edu>
3851
3856
3852 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3857 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3853 of files in current directory when a file is executed via
3858 of files in current directory when a file is executed via
3854 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3859 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3855
3860
3856 * setup.py (manfiles): fix for rpm builds, submitted by RA
3861 * setup.py (manfiles): fix for rpm builds, submitted by RA
3857 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3862 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3858
3863
3859 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3864 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3860 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3865 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3861 string!). A. Schmolck caught this one.
3866 string!). A. Schmolck caught this one.
3862
3867
3863 2002-06-27 Fernando Perez <fperez@colorado.edu>
3868 2002-06-27 Fernando Perez <fperez@colorado.edu>
3864
3869
3865 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3870 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3866 defined files at the cmd line. __name__ wasn't being set to
3871 defined files at the cmd line. __name__ wasn't being set to
3867 __main__.
3872 __main__.
3868
3873
3869 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3874 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3870 regular lists and tuples besides Numeric arrays.
3875 regular lists and tuples besides Numeric arrays.
3871
3876
3872 * IPython/Prompts.py (CachedOutput.__call__): Added output
3877 * IPython/Prompts.py (CachedOutput.__call__): Added output
3873 supression for input ending with ';'. Similar to Mathematica and
3878 supression for input ending with ';'. Similar to Mathematica and
3874 Matlab. The _* vars and Out[] list are still updated, just like
3879 Matlab. The _* vars and Out[] list are still updated, just like
3875 Mathematica behaves.
3880 Mathematica behaves.
3876
3881
3877 2002-06-25 Fernando Perez <fperez@colorado.edu>
3882 2002-06-25 Fernando Perez <fperez@colorado.edu>
3878
3883
3879 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3884 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3880 .ini extensions for profiels under Windows.
3885 .ini extensions for profiels under Windows.
3881
3886
3882 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3887 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3883 string form. Fix contributed by Alexander Schmolck
3888 string form. Fix contributed by Alexander Schmolck
3884 <a.schmolck-AT-gmx.net>
3889 <a.schmolck-AT-gmx.net>
3885
3890
3886 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3891 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3887 pre-configured Gnuplot instance.
3892 pre-configured Gnuplot instance.
3888
3893
3889 2002-06-21 Fernando Perez <fperez@colorado.edu>
3894 2002-06-21 Fernando Perez <fperez@colorado.edu>
3890
3895
3891 * IPython/numutils.py (exp_safe): new function, works around the
3896 * IPython/numutils.py (exp_safe): new function, works around the
3892 underflow problems in Numeric.
3897 underflow problems in Numeric.
3893 (log2): New fn. Safe log in base 2: returns exact integer answer
3898 (log2): New fn. Safe log in base 2: returns exact integer answer
3894 for exact integer powers of 2.
3899 for exact integer powers of 2.
3895
3900
3896 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3901 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3897 properly.
3902 properly.
3898
3903
3899 2002-06-20 Fernando Perez <fperez@colorado.edu>
3904 2002-06-20 Fernando Perez <fperez@colorado.edu>
3900
3905
3901 * IPython/genutils.py (timing): new function like
3906 * IPython/genutils.py (timing): new function like
3902 Mathematica's. Similar to time_test, but returns more info.
3907 Mathematica's. Similar to time_test, but returns more info.
3903
3908
3904 2002-06-18 Fernando Perez <fperez@colorado.edu>
3909 2002-06-18 Fernando Perez <fperez@colorado.edu>
3905
3910
3906 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3911 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3907 according to Mike Heeter's suggestions.
3912 according to Mike Heeter's suggestions.
3908
3913
3909 2002-06-16 Fernando Perez <fperez@colorado.edu>
3914 2002-06-16 Fernando Perez <fperez@colorado.edu>
3910
3915
3911 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3916 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3912 system. GnuplotMagic is gone as a user-directory option. New files
3917 system. GnuplotMagic is gone as a user-directory option. New files
3913 make it easier to use all the gnuplot stuff both from external
3918 make it easier to use all the gnuplot stuff both from external
3914 programs as well as from IPython. Had to rewrite part of
3919 programs as well as from IPython. Had to rewrite part of
3915 hardcopy() b/c of a strange bug: often the ps files simply don't
3920 hardcopy() b/c of a strange bug: often the ps files simply don't
3916 get created, and require a repeat of the command (often several
3921 get created, and require a repeat of the command (often several
3917 times).
3922 times).
3918
3923
3919 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3924 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3920 resolve output channel at call time, so that if sys.stderr has
3925 resolve output channel at call time, so that if sys.stderr has
3921 been redirected by user this gets honored.
3926 been redirected by user this gets honored.
3922
3927
3923 2002-06-13 Fernando Perez <fperez@colorado.edu>
3928 2002-06-13 Fernando Perez <fperez@colorado.edu>
3924
3929
3925 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3930 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3926 IPShell. Kept a copy with the old names to avoid breaking people's
3931 IPShell. Kept a copy with the old names to avoid breaking people's
3927 embedded code.
3932 embedded code.
3928
3933
3929 * IPython/ipython: simplified it to the bare minimum after
3934 * IPython/ipython: simplified it to the bare minimum after
3930 Holger's suggestions. Added info about how to use it in
3935 Holger's suggestions. Added info about how to use it in
3931 PYTHONSTARTUP.
3936 PYTHONSTARTUP.
3932
3937
3933 * IPython/Shell.py (IPythonShell): changed the options passing
3938 * IPython/Shell.py (IPythonShell): changed the options passing
3934 from a string with funky %s replacements to a straight list. Maybe
3939 from a string with funky %s replacements to a straight list. Maybe
3935 a bit more typing, but it follows sys.argv conventions, so there's
3940 a bit more typing, but it follows sys.argv conventions, so there's
3936 less special-casing to remember.
3941 less special-casing to remember.
3937
3942
3938 2002-06-12 Fernando Perez <fperez@colorado.edu>
3943 2002-06-12 Fernando Perez <fperez@colorado.edu>
3939
3944
3940 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3945 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3941 command. Thanks to a suggestion by Mike Heeter.
3946 command. Thanks to a suggestion by Mike Heeter.
3942 (Magic.magic_pfile): added behavior to look at filenames if given
3947 (Magic.magic_pfile): added behavior to look at filenames if given
3943 arg is not a defined object.
3948 arg is not a defined object.
3944 (Magic.magic_save): New @save function to save code snippets. Also
3949 (Magic.magic_save): New @save function to save code snippets. Also
3945 a Mike Heeter idea.
3950 a Mike Heeter idea.
3946
3951
3947 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3952 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3948 plot() and replot(). Much more convenient now, especially for
3953 plot() and replot(). Much more convenient now, especially for
3949 interactive use.
3954 interactive use.
3950
3955
3951 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3956 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3952 filenames.
3957 filenames.
3953
3958
3954 2002-06-02 Fernando Perez <fperez@colorado.edu>
3959 2002-06-02 Fernando Perez <fperez@colorado.edu>
3955
3960
3956 * IPython/Struct.py (Struct.__init__): modified to admit
3961 * IPython/Struct.py (Struct.__init__): modified to admit
3957 initialization via another struct.
3962 initialization via another struct.
3958
3963
3959 * IPython/genutils.py (SystemExec.__init__): New stateful
3964 * IPython/genutils.py (SystemExec.__init__): New stateful
3960 interface to xsys and bq. Useful for writing system scripts.
3965 interface to xsys and bq. Useful for writing system scripts.
3961
3966
3962 2002-05-30 Fernando Perez <fperez@colorado.edu>
3967 2002-05-30 Fernando Perez <fperez@colorado.edu>
3963
3968
3964 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3969 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3965 documents. This will make the user download smaller (it's getting
3970 documents. This will make the user download smaller (it's getting
3966 too big).
3971 too big).
3967
3972
3968 2002-05-29 Fernando Perez <fperez@colorado.edu>
3973 2002-05-29 Fernando Perez <fperez@colorado.edu>
3969
3974
3970 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3975 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3971 fix problems with shelve and pickle. Seems to work, but I don't
3976 fix problems with shelve and pickle. Seems to work, but I don't
3972 know if corner cases break it. Thanks to Mike Heeter
3977 know if corner cases break it. Thanks to Mike Heeter
3973 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3978 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3974
3979
3975 2002-05-24 Fernando Perez <fperez@colorado.edu>
3980 2002-05-24 Fernando Perez <fperez@colorado.edu>
3976
3981
3977 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3982 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3978 macros having broken.
3983 macros having broken.
3979
3984
3980 2002-05-21 Fernando Perez <fperez@colorado.edu>
3985 2002-05-21 Fernando Perez <fperez@colorado.edu>
3981
3986
3982 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3987 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3983 introduced logging bug: all history before logging started was
3988 introduced logging bug: all history before logging started was
3984 being written one character per line! This came from the redesign
3989 being written one character per line! This came from the redesign
3985 of the input history as a special list which slices to strings,
3990 of the input history as a special list which slices to strings,
3986 not to lists.
3991 not to lists.
3987
3992
3988 2002-05-20 Fernando Perez <fperez@colorado.edu>
3993 2002-05-20 Fernando Perez <fperez@colorado.edu>
3989
3994
3990 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3995 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3991 be an attribute of all classes in this module. The design of these
3996 be an attribute of all classes in this module. The design of these
3992 classes needs some serious overhauling.
3997 classes needs some serious overhauling.
3993
3998
3994 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3999 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3995 which was ignoring '_' in option names.
4000 which was ignoring '_' in option names.
3996
4001
3997 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4002 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3998 'Verbose_novars' to 'Context' and made it the new default. It's a
4003 'Verbose_novars' to 'Context' and made it the new default. It's a
3999 bit more readable and also safer than verbose.
4004 bit more readable and also safer than verbose.
4000
4005
4001 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4006 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4002 triple-quoted strings.
4007 triple-quoted strings.
4003
4008
4004 * IPython/OInspect.py (__all__): new module exposing the object
4009 * IPython/OInspect.py (__all__): new module exposing the object
4005 introspection facilities. Now the corresponding magics are dummy
4010 introspection facilities. Now the corresponding magics are dummy
4006 wrappers around this. Having this module will make it much easier
4011 wrappers around this. Having this module will make it much easier
4007 to put these functions into our modified pdb.
4012 to put these functions into our modified pdb.
4008 This new object inspector system uses the new colorizing module,
4013 This new object inspector system uses the new colorizing module,
4009 so source code and other things are nicely syntax highlighted.
4014 so source code and other things are nicely syntax highlighted.
4010
4015
4011 2002-05-18 Fernando Perez <fperez@colorado.edu>
4016 2002-05-18 Fernando Perez <fperez@colorado.edu>
4012
4017
4013 * IPython/ColorANSI.py: Split the coloring tools into a separate
4018 * IPython/ColorANSI.py: Split the coloring tools into a separate
4014 module so I can use them in other code easier (they were part of
4019 module so I can use them in other code easier (they were part of
4015 ultraTB).
4020 ultraTB).
4016
4021
4017 2002-05-17 Fernando Perez <fperez@colorado.edu>
4022 2002-05-17 Fernando Perez <fperez@colorado.edu>
4018
4023
4019 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4024 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4020 fixed it to set the global 'g' also to the called instance, as
4025 fixed it to set the global 'g' also to the called instance, as
4021 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4026 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4022 user's 'g' variables).
4027 user's 'g' variables).
4023
4028
4024 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4029 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4025 global variables (aliases to _ih,_oh) so that users which expect
4030 global variables (aliases to _ih,_oh) so that users which expect
4026 In[5] or Out[7] to work aren't unpleasantly surprised.
4031 In[5] or Out[7] to work aren't unpleasantly surprised.
4027 (InputList.__getslice__): new class to allow executing slices of
4032 (InputList.__getslice__): new class to allow executing slices of
4028 input history directly. Very simple class, complements the use of
4033 input history directly. Very simple class, complements the use of
4029 macros.
4034 macros.
4030
4035
4031 2002-05-16 Fernando Perez <fperez@colorado.edu>
4036 2002-05-16 Fernando Perez <fperez@colorado.edu>
4032
4037
4033 * setup.py (docdirbase): make doc directory be just doc/IPython
4038 * setup.py (docdirbase): make doc directory be just doc/IPython
4034 without version numbers, it will reduce clutter for users.
4039 without version numbers, it will reduce clutter for users.
4035
4040
4036 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4041 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4037 execfile call to prevent possible memory leak. See for details:
4042 execfile call to prevent possible memory leak. See for details:
4038 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4043 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4039
4044
4040 2002-05-15 Fernando Perez <fperez@colorado.edu>
4045 2002-05-15 Fernando Perez <fperez@colorado.edu>
4041
4046
4042 * IPython/Magic.py (Magic.magic_psource): made the object
4047 * IPython/Magic.py (Magic.magic_psource): made the object
4043 introspection names be more standard: pdoc, pdef, pfile and
4048 introspection names be more standard: pdoc, pdef, pfile and
4044 psource. They all print/page their output, and it makes
4049 psource. They all print/page their output, and it makes
4045 remembering them easier. Kept old names for compatibility as
4050 remembering them easier. Kept old names for compatibility as
4046 aliases.
4051 aliases.
4047
4052
4048 2002-05-14 Fernando Perez <fperez@colorado.edu>
4053 2002-05-14 Fernando Perez <fperez@colorado.edu>
4049
4054
4050 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4055 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4051 what the mouse problem was. The trick is to use gnuplot with temp
4056 what the mouse problem was. The trick is to use gnuplot with temp
4052 files and NOT with pipes (for data communication), because having
4057 files and NOT with pipes (for data communication), because having
4053 both pipes and the mouse on is bad news.
4058 both pipes and the mouse on is bad news.
4054
4059
4055 2002-05-13 Fernando Perez <fperez@colorado.edu>
4060 2002-05-13 Fernando Perez <fperez@colorado.edu>
4056
4061
4057 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4062 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4058 bug. Information would be reported about builtins even when
4063 bug. Information would be reported about builtins even when
4059 user-defined functions overrode them.
4064 user-defined functions overrode them.
4060
4065
4061 2002-05-11 Fernando Perez <fperez@colorado.edu>
4066 2002-05-11 Fernando Perez <fperez@colorado.edu>
4062
4067
4063 * IPython/__init__.py (__all__): removed FlexCompleter from
4068 * IPython/__init__.py (__all__): removed FlexCompleter from
4064 __all__ so that things don't fail in platforms without readline.
4069 __all__ so that things don't fail in platforms without readline.
4065
4070
4066 2002-05-10 Fernando Perez <fperez@colorado.edu>
4071 2002-05-10 Fernando Perez <fperez@colorado.edu>
4067
4072
4068 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4073 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4069 it requires Numeric, effectively making Numeric a dependency for
4074 it requires Numeric, effectively making Numeric a dependency for
4070 IPython.
4075 IPython.
4071
4076
4072 * Released 0.2.13
4077 * Released 0.2.13
4073
4078
4074 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4079 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4075 profiler interface. Now all the major options from the profiler
4080 profiler interface. Now all the major options from the profiler
4076 module are directly supported in IPython, both for single
4081 module are directly supported in IPython, both for single
4077 expressions (@prun) and for full programs (@run -p).
4082 expressions (@prun) and for full programs (@run -p).
4078
4083
4079 2002-05-09 Fernando Perez <fperez@colorado.edu>
4084 2002-05-09 Fernando Perez <fperez@colorado.edu>
4080
4085
4081 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4086 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4082 magic properly formatted for screen.
4087 magic properly formatted for screen.
4083
4088
4084 * setup.py (make_shortcut): Changed things to put pdf version in
4089 * setup.py (make_shortcut): Changed things to put pdf version in
4085 doc/ instead of doc/manual (had to change lyxport a bit).
4090 doc/ instead of doc/manual (had to change lyxport a bit).
4086
4091
4087 * IPython/Magic.py (Profile.string_stats): made profile runs go
4092 * IPython/Magic.py (Profile.string_stats): made profile runs go
4088 through pager (they are long and a pager allows searching, saving,
4093 through pager (they are long and a pager allows searching, saving,
4089 etc.)
4094 etc.)
4090
4095
4091 2002-05-08 Fernando Perez <fperez@colorado.edu>
4096 2002-05-08 Fernando Perez <fperez@colorado.edu>
4092
4097
4093 * Released 0.2.12
4098 * Released 0.2.12
4094
4099
4095 2002-05-06 Fernando Perez <fperez@colorado.edu>
4100 2002-05-06 Fernando Perez <fperez@colorado.edu>
4096
4101
4097 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4102 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4098 introduced); 'hist n1 n2' was broken.
4103 introduced); 'hist n1 n2' was broken.
4099 (Magic.magic_pdb): added optional on/off arguments to @pdb
4104 (Magic.magic_pdb): added optional on/off arguments to @pdb
4100 (Magic.magic_run): added option -i to @run, which executes code in
4105 (Magic.magic_run): added option -i to @run, which executes code in
4101 the IPython namespace instead of a clean one. Also added @irun as
4106 the IPython namespace instead of a clean one. Also added @irun as
4102 an alias to @run -i.
4107 an alias to @run -i.
4103
4108
4104 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4109 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4105 fixed (it didn't really do anything, the namespaces were wrong).
4110 fixed (it didn't really do anything, the namespaces were wrong).
4106
4111
4107 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4112 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4108
4113
4109 * IPython/__init__.py (__all__): Fixed package namespace, now
4114 * IPython/__init__.py (__all__): Fixed package namespace, now
4110 'import IPython' does give access to IPython.<all> as
4115 'import IPython' does give access to IPython.<all> as
4111 expected. Also renamed __release__ to Release.
4116 expected. Also renamed __release__ to Release.
4112
4117
4113 * IPython/Debugger.py (__license__): created new Pdb class which
4118 * IPython/Debugger.py (__license__): created new Pdb class which
4114 functions like a drop-in for the normal pdb.Pdb but does NOT
4119 functions like a drop-in for the normal pdb.Pdb but does NOT
4115 import readline by default. This way it doesn't muck up IPython's
4120 import readline by default. This way it doesn't muck up IPython's
4116 readline handling, and now tab-completion finally works in the
4121 readline handling, and now tab-completion finally works in the
4117 debugger -- sort of. It completes things globally visible, but the
4122 debugger -- sort of. It completes things globally visible, but the
4118 completer doesn't track the stack as pdb walks it. That's a bit
4123 completer doesn't track the stack as pdb walks it. That's a bit
4119 tricky, and I'll have to implement it later.
4124 tricky, and I'll have to implement it later.
4120
4125
4121 2002-05-05 Fernando Perez <fperez@colorado.edu>
4126 2002-05-05 Fernando Perez <fperez@colorado.edu>
4122
4127
4123 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4128 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4124 magic docstrings when printed via ? (explicit \'s were being
4129 magic docstrings when printed via ? (explicit \'s were being
4125 printed).
4130 printed).
4126
4131
4127 * IPython/ipmaker.py (make_IPython): fixed namespace
4132 * IPython/ipmaker.py (make_IPython): fixed namespace
4128 identification bug. Now variables loaded via logs or command-line
4133 identification bug. Now variables loaded via logs or command-line
4129 files are recognized in the interactive namespace by @who.
4134 files are recognized in the interactive namespace by @who.
4130
4135
4131 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4136 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4132 log replay system stemming from the string form of Structs.
4137 log replay system stemming from the string form of Structs.
4133
4138
4134 * IPython/Magic.py (Macro.__init__): improved macros to properly
4139 * IPython/Magic.py (Macro.__init__): improved macros to properly
4135 handle magic commands in them.
4140 handle magic commands in them.
4136 (Magic.magic_logstart): usernames are now expanded so 'logstart
4141 (Magic.magic_logstart): usernames are now expanded so 'logstart
4137 ~/mylog' now works.
4142 ~/mylog' now works.
4138
4143
4139 * IPython/iplib.py (complete): fixed bug where paths starting with
4144 * IPython/iplib.py (complete): fixed bug where paths starting with
4140 '/' would be completed as magic names.
4145 '/' would be completed as magic names.
4141
4146
4142 2002-05-04 Fernando Perez <fperez@colorado.edu>
4147 2002-05-04 Fernando Perez <fperez@colorado.edu>
4143
4148
4144 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4149 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4145 allow running full programs under the profiler's control.
4150 allow running full programs under the profiler's control.
4146
4151
4147 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4152 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4148 mode to report exceptions verbosely but without formatting
4153 mode to report exceptions verbosely but without formatting
4149 variables. This addresses the issue of ipython 'freezing' (it's
4154 variables. This addresses the issue of ipython 'freezing' (it's
4150 not frozen, but caught in an expensive formatting loop) when huge
4155 not frozen, but caught in an expensive formatting loop) when huge
4151 variables are in the context of an exception.
4156 variables are in the context of an exception.
4152 (VerboseTB.text): Added '--->' markers at line where exception was
4157 (VerboseTB.text): Added '--->' markers at line where exception was
4153 triggered. Much clearer to read, especially in NoColor modes.
4158 triggered. Much clearer to read, especially in NoColor modes.
4154
4159
4155 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4160 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4156 implemented in reverse when changing to the new parse_options().
4161 implemented in reverse when changing to the new parse_options().
4157
4162
4158 2002-05-03 Fernando Perez <fperez@colorado.edu>
4163 2002-05-03 Fernando Perez <fperez@colorado.edu>
4159
4164
4160 * IPython/Magic.py (Magic.parse_options): new function so that
4165 * IPython/Magic.py (Magic.parse_options): new function so that
4161 magics can parse options easier.
4166 magics can parse options easier.
4162 (Magic.magic_prun): new function similar to profile.run(),
4167 (Magic.magic_prun): new function similar to profile.run(),
4163 suggested by Chris Hart.
4168 suggested by Chris Hart.
4164 (Magic.magic_cd): fixed behavior so that it only changes if
4169 (Magic.magic_cd): fixed behavior so that it only changes if
4165 directory actually is in history.
4170 directory actually is in history.
4166
4171
4167 * IPython/usage.py (__doc__): added information about potential
4172 * IPython/usage.py (__doc__): added information about potential
4168 slowness of Verbose exception mode when there are huge data
4173 slowness of Verbose exception mode when there are huge data
4169 structures to be formatted (thanks to Archie Paulson).
4174 structures to be formatted (thanks to Archie Paulson).
4170
4175
4171 * IPython/ipmaker.py (make_IPython): Changed default logging
4176 * IPython/ipmaker.py (make_IPython): Changed default logging
4172 (when simply called with -log) to use curr_dir/ipython.log in
4177 (when simply called with -log) to use curr_dir/ipython.log in
4173 rotate mode. Fixed crash which was occuring with -log before
4178 rotate mode. Fixed crash which was occuring with -log before
4174 (thanks to Jim Boyle).
4179 (thanks to Jim Boyle).
4175
4180
4176 2002-05-01 Fernando Perez <fperez@colorado.edu>
4181 2002-05-01 Fernando Perez <fperez@colorado.edu>
4177
4182
4178 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4183 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4179 was nasty -- though somewhat of a corner case).
4184 was nasty -- though somewhat of a corner case).
4180
4185
4181 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4186 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4182 text (was a bug).
4187 text (was a bug).
4183
4188
4184 2002-04-30 Fernando Perez <fperez@colorado.edu>
4189 2002-04-30 Fernando Perez <fperez@colorado.edu>
4185
4190
4186 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4191 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4187 a print after ^D or ^C from the user so that the In[] prompt
4192 a print after ^D or ^C from the user so that the In[] prompt
4188 doesn't over-run the gnuplot one.
4193 doesn't over-run the gnuplot one.
4189
4194
4190 2002-04-29 Fernando Perez <fperez@colorado.edu>
4195 2002-04-29 Fernando Perez <fperez@colorado.edu>
4191
4196
4192 * Released 0.2.10
4197 * Released 0.2.10
4193
4198
4194 * IPython/__release__.py (version): get date dynamically.
4199 * IPython/__release__.py (version): get date dynamically.
4195
4200
4196 * Misc. documentation updates thanks to Arnd's comments. Also ran
4201 * Misc. documentation updates thanks to Arnd's comments. Also ran
4197 a full spellcheck on the manual (hadn't been done in a while).
4202 a full spellcheck on the manual (hadn't been done in a while).
4198
4203
4199 2002-04-27 Fernando Perez <fperez@colorado.edu>
4204 2002-04-27 Fernando Perez <fperez@colorado.edu>
4200
4205
4201 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4206 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4202 starting a log in mid-session would reset the input history list.
4207 starting a log in mid-session would reset the input history list.
4203
4208
4204 2002-04-26 Fernando Perez <fperez@colorado.edu>
4209 2002-04-26 Fernando Perez <fperez@colorado.edu>
4205
4210
4206 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4211 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4207 all files were being included in an update. Now anything in
4212 all files were being included in an update. Now anything in
4208 UserConfig that matches [A-Za-z]*.py will go (this excludes
4213 UserConfig that matches [A-Za-z]*.py will go (this excludes
4209 __init__.py)
4214 __init__.py)
4210
4215
4211 2002-04-25 Fernando Perez <fperez@colorado.edu>
4216 2002-04-25 Fernando Perez <fperez@colorado.edu>
4212
4217
4213 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4218 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4214 to __builtins__ so that any form of embedded or imported code can
4219 to __builtins__ so that any form of embedded or imported code can
4215 test for being inside IPython.
4220 test for being inside IPython.
4216
4221
4217 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4222 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4218 changed to GnuplotMagic because it's now an importable module,
4223 changed to GnuplotMagic because it's now an importable module,
4219 this makes the name follow that of the standard Gnuplot module.
4224 this makes the name follow that of the standard Gnuplot module.
4220 GnuplotMagic can now be loaded at any time in mid-session.
4225 GnuplotMagic can now be loaded at any time in mid-session.
4221
4226
4222 2002-04-24 Fernando Perez <fperez@colorado.edu>
4227 2002-04-24 Fernando Perez <fperez@colorado.edu>
4223
4228
4224 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4229 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4225 the globals (IPython has its own namespace) and the
4230 the globals (IPython has its own namespace) and the
4226 PhysicalQuantity stuff is much better anyway.
4231 PhysicalQuantity stuff is much better anyway.
4227
4232
4228 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4233 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4229 embedding example to standard user directory for
4234 embedding example to standard user directory for
4230 distribution. Also put it in the manual.
4235 distribution. Also put it in the manual.
4231
4236
4232 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4237 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4233 instance as first argument (so it doesn't rely on some obscure
4238 instance as first argument (so it doesn't rely on some obscure
4234 hidden global).
4239 hidden global).
4235
4240
4236 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4241 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4237 delimiters. While it prevents ().TAB from working, it allows
4242 delimiters. While it prevents ().TAB from working, it allows
4238 completions in open (... expressions. This is by far a more common
4243 completions in open (... expressions. This is by far a more common
4239 case.
4244 case.
4240
4245
4241 2002-04-23 Fernando Perez <fperez@colorado.edu>
4246 2002-04-23 Fernando Perez <fperez@colorado.edu>
4242
4247
4243 * IPython/Extensions/InterpreterPasteInput.py: new
4248 * IPython/Extensions/InterpreterPasteInput.py: new
4244 syntax-processing module for pasting lines with >>> or ... at the
4249 syntax-processing module for pasting lines with >>> or ... at the
4245 start.
4250 start.
4246
4251
4247 * IPython/Extensions/PhysicalQ_Interactive.py
4252 * IPython/Extensions/PhysicalQ_Interactive.py
4248 (PhysicalQuantityInteractive.__int__): fixed to work with either
4253 (PhysicalQuantityInteractive.__int__): fixed to work with either
4249 Numeric or math.
4254 Numeric or math.
4250
4255
4251 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4256 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4252 provided profiles. Now we have:
4257 provided profiles. Now we have:
4253 -math -> math module as * and cmath with its own namespace.
4258 -math -> math module as * and cmath with its own namespace.
4254 -numeric -> Numeric as *, plus gnuplot & grace
4259 -numeric -> Numeric as *, plus gnuplot & grace
4255 -physics -> same as before
4260 -physics -> same as before
4256
4261
4257 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4262 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4258 user-defined magics wouldn't be found by @magic if they were
4263 user-defined magics wouldn't be found by @magic if they were
4259 defined as class methods. Also cleaned up the namespace search
4264 defined as class methods. Also cleaned up the namespace search
4260 logic and the string building (to use %s instead of many repeated
4265 logic and the string building (to use %s instead of many repeated
4261 string adds).
4266 string adds).
4262
4267
4263 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4268 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4264 of user-defined magics to operate with class methods (cleaner, in
4269 of user-defined magics to operate with class methods (cleaner, in
4265 line with the gnuplot code).
4270 line with the gnuplot code).
4266
4271
4267 2002-04-22 Fernando Perez <fperez@colorado.edu>
4272 2002-04-22 Fernando Perez <fperez@colorado.edu>
4268
4273
4269 * setup.py: updated dependency list so that manual is updated when
4274 * setup.py: updated dependency list so that manual is updated when
4270 all included files change.
4275 all included files change.
4271
4276
4272 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4277 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4273 the delimiter removal option (the fix is ugly right now).
4278 the delimiter removal option (the fix is ugly right now).
4274
4279
4275 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4280 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4276 all of the math profile (quicker loading, no conflict between
4281 all of the math profile (quicker loading, no conflict between
4277 g-9.8 and g-gnuplot).
4282 g-9.8 and g-gnuplot).
4278
4283
4279 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4284 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4280 name of post-mortem files to IPython_crash_report.txt.
4285 name of post-mortem files to IPython_crash_report.txt.
4281
4286
4282 * Cleanup/update of the docs. Added all the new readline info and
4287 * Cleanup/update of the docs. Added all the new readline info and
4283 formatted all lists as 'real lists'.
4288 formatted all lists as 'real lists'.
4284
4289
4285 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4290 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4286 tab-completion options, since the full readline parse_and_bind is
4291 tab-completion options, since the full readline parse_and_bind is
4287 now accessible.
4292 now accessible.
4288
4293
4289 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4294 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4290 handling of readline options. Now users can specify any string to
4295 handling of readline options. Now users can specify any string to
4291 be passed to parse_and_bind(), as well as the delimiters to be
4296 be passed to parse_and_bind(), as well as the delimiters to be
4292 removed.
4297 removed.
4293 (InteractiveShell.__init__): Added __name__ to the global
4298 (InteractiveShell.__init__): Added __name__ to the global
4294 namespace so that things like Itpl which rely on its existence
4299 namespace so that things like Itpl which rely on its existence
4295 don't crash.
4300 don't crash.
4296 (InteractiveShell._prefilter): Defined the default with a _ so
4301 (InteractiveShell._prefilter): Defined the default with a _ so
4297 that prefilter() is easier to override, while the default one
4302 that prefilter() is easier to override, while the default one
4298 remains available.
4303 remains available.
4299
4304
4300 2002-04-18 Fernando Perez <fperez@colorado.edu>
4305 2002-04-18 Fernando Perez <fperez@colorado.edu>
4301
4306
4302 * Added information about pdb in the docs.
4307 * Added information about pdb in the docs.
4303
4308
4304 2002-04-17 Fernando Perez <fperez@colorado.edu>
4309 2002-04-17 Fernando Perez <fperez@colorado.edu>
4305
4310
4306 * IPython/ipmaker.py (make_IPython): added rc_override option to
4311 * IPython/ipmaker.py (make_IPython): added rc_override option to
4307 allow passing config options at creation time which may override
4312 allow passing config options at creation time which may override
4308 anything set in the config files or command line. This is
4313 anything set in the config files or command line. This is
4309 particularly useful for configuring embedded instances.
4314 particularly useful for configuring embedded instances.
4310
4315
4311 2002-04-15 Fernando Perez <fperez@colorado.edu>
4316 2002-04-15 Fernando Perez <fperez@colorado.edu>
4312
4317
4313 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4318 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4314 crash embedded instances because of the input cache falling out of
4319 crash embedded instances because of the input cache falling out of
4315 sync with the output counter.
4320 sync with the output counter.
4316
4321
4317 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4322 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4318 mode which calls pdb after an uncaught exception in IPython itself.
4323 mode which calls pdb after an uncaught exception in IPython itself.
4319
4324
4320 2002-04-14 Fernando Perez <fperez@colorado.edu>
4325 2002-04-14 Fernando Perez <fperez@colorado.edu>
4321
4326
4322 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4327 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4323 readline, fix it back after each call.
4328 readline, fix it back after each call.
4324
4329
4325 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4330 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4326 method to force all access via __call__(), which guarantees that
4331 method to force all access via __call__(), which guarantees that
4327 traceback references are properly deleted.
4332 traceback references are properly deleted.
4328
4333
4329 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4334 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4330 improve printing when pprint is in use.
4335 improve printing when pprint is in use.
4331
4336
4332 2002-04-13 Fernando Perez <fperez@colorado.edu>
4337 2002-04-13 Fernando Perez <fperez@colorado.edu>
4333
4338
4334 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4339 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4335 exceptions aren't caught anymore. If the user triggers one, he
4340 exceptions aren't caught anymore. If the user triggers one, he
4336 should know why he's doing it and it should go all the way up,
4341 should know why he's doing it and it should go all the way up,
4337 just like any other exception. So now @abort will fully kill the
4342 just like any other exception. So now @abort will fully kill the
4338 embedded interpreter and the embedding code (unless that happens
4343 embedded interpreter and the embedding code (unless that happens
4339 to catch SystemExit).
4344 to catch SystemExit).
4340
4345
4341 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4346 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4342 and a debugger() method to invoke the interactive pdb debugger
4347 and a debugger() method to invoke the interactive pdb debugger
4343 after printing exception information. Also added the corresponding
4348 after printing exception information. Also added the corresponding
4344 -pdb option and @pdb magic to control this feature, and updated
4349 -pdb option and @pdb magic to control this feature, and updated
4345 the docs. After a suggestion from Christopher Hart
4350 the docs. After a suggestion from Christopher Hart
4346 (hart-AT-caltech.edu).
4351 (hart-AT-caltech.edu).
4347
4352
4348 2002-04-12 Fernando Perez <fperez@colorado.edu>
4353 2002-04-12 Fernando Perez <fperez@colorado.edu>
4349
4354
4350 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4355 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4351 the exception handlers defined by the user (not the CrashHandler)
4356 the exception handlers defined by the user (not the CrashHandler)
4352 so that user exceptions don't trigger an ipython bug report.
4357 so that user exceptions don't trigger an ipython bug report.
4353
4358
4354 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4359 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4355 configurable (it should have always been so).
4360 configurable (it should have always been so).
4356
4361
4357 2002-03-26 Fernando Perez <fperez@colorado.edu>
4362 2002-03-26 Fernando Perez <fperez@colorado.edu>
4358
4363
4359 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4364 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4360 and there to fix embedding namespace issues. This should all be
4365 and there to fix embedding namespace issues. This should all be
4361 done in a more elegant way.
4366 done in a more elegant way.
4362
4367
4363 2002-03-25 Fernando Perez <fperez@colorado.edu>
4368 2002-03-25 Fernando Perez <fperez@colorado.edu>
4364
4369
4365 * IPython/genutils.py (get_home_dir): Try to make it work under
4370 * IPython/genutils.py (get_home_dir): Try to make it work under
4366 win9x also.
4371 win9x also.
4367
4372
4368 2002-03-20 Fernando Perez <fperez@colorado.edu>
4373 2002-03-20 Fernando Perez <fperez@colorado.edu>
4369
4374
4370 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4375 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4371 sys.displayhook untouched upon __init__.
4376 sys.displayhook untouched upon __init__.
4372
4377
4373 2002-03-19 Fernando Perez <fperez@colorado.edu>
4378 2002-03-19 Fernando Perez <fperez@colorado.edu>
4374
4379
4375 * Released 0.2.9 (for embedding bug, basically).
4380 * Released 0.2.9 (for embedding bug, basically).
4376
4381
4377 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4382 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4378 exceptions so that enclosing shell's state can be restored.
4383 exceptions so that enclosing shell's state can be restored.
4379
4384
4380 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4385 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4381 naming conventions in the .ipython/ dir.
4386 naming conventions in the .ipython/ dir.
4382
4387
4383 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4388 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4384 from delimiters list so filenames with - in them get expanded.
4389 from delimiters list so filenames with - in them get expanded.
4385
4390
4386 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4391 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4387 sys.displayhook not being properly restored after an embedded call.
4392 sys.displayhook not being properly restored after an embedded call.
4388
4393
4389 2002-03-18 Fernando Perez <fperez@colorado.edu>
4394 2002-03-18 Fernando Perez <fperez@colorado.edu>
4390
4395
4391 * Released 0.2.8
4396 * Released 0.2.8
4392
4397
4393 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4398 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4394 some files weren't being included in a -upgrade.
4399 some files weren't being included in a -upgrade.
4395 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4400 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4396 on' so that the first tab completes.
4401 on' so that the first tab completes.
4397 (InteractiveShell.handle_magic): fixed bug with spaces around
4402 (InteractiveShell.handle_magic): fixed bug with spaces around
4398 quotes breaking many magic commands.
4403 quotes breaking many magic commands.
4399
4404
4400 * setup.py: added note about ignoring the syntax error messages at
4405 * setup.py: added note about ignoring the syntax error messages at
4401 installation.
4406 installation.
4402
4407
4403 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4408 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4404 streamlining the gnuplot interface, now there's only one magic @gp.
4409 streamlining the gnuplot interface, now there's only one magic @gp.
4405
4410
4406 2002-03-17 Fernando Perez <fperez@colorado.edu>
4411 2002-03-17 Fernando Perez <fperez@colorado.edu>
4407
4412
4408 * IPython/UserConfig/magic_gnuplot.py: new name for the
4413 * IPython/UserConfig/magic_gnuplot.py: new name for the
4409 example-magic_pm.py file. Much enhanced system, now with a shell
4414 example-magic_pm.py file. Much enhanced system, now with a shell
4410 for communicating directly with gnuplot, one command at a time.
4415 for communicating directly with gnuplot, one command at a time.
4411
4416
4412 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4417 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4413 setting __name__=='__main__'.
4418 setting __name__=='__main__'.
4414
4419
4415 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4420 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4416 mini-shell for accessing gnuplot from inside ipython. Should
4421 mini-shell for accessing gnuplot from inside ipython. Should
4417 extend it later for grace access too. Inspired by Arnd's
4422 extend it later for grace access too. Inspired by Arnd's
4418 suggestion.
4423 suggestion.
4419
4424
4420 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4425 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4421 calling magic functions with () in their arguments. Thanks to Arnd
4426 calling magic functions with () in their arguments. Thanks to Arnd
4422 Baecker for pointing this to me.
4427 Baecker for pointing this to me.
4423
4428
4424 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4429 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4425 infinitely for integer or complex arrays (only worked with floats).
4430 infinitely for integer or complex arrays (only worked with floats).
4426
4431
4427 2002-03-16 Fernando Perez <fperez@colorado.edu>
4432 2002-03-16 Fernando Perez <fperez@colorado.edu>
4428
4433
4429 * setup.py: Merged setup and setup_windows into a single script
4434 * setup.py: Merged setup and setup_windows into a single script
4430 which properly handles things for windows users.
4435 which properly handles things for windows users.
4431
4436
4432 2002-03-15 Fernando Perez <fperez@colorado.edu>
4437 2002-03-15 Fernando Perez <fperez@colorado.edu>
4433
4438
4434 * Big change to the manual: now the magics are all automatically
4439 * Big change to the manual: now the magics are all automatically
4435 documented. This information is generated from their docstrings
4440 documented. This information is generated from their docstrings
4436 and put in a latex file included by the manual lyx file. This way
4441 and put in a latex file included by the manual lyx file. This way
4437 we get always up to date information for the magics. The manual
4442 we get always up to date information for the magics. The manual
4438 now also has proper version information, also auto-synced.
4443 now also has proper version information, also auto-synced.
4439
4444
4440 For this to work, an undocumented --magic_docstrings option was added.
4445 For this to work, an undocumented --magic_docstrings option was added.
4441
4446
4442 2002-03-13 Fernando Perez <fperez@colorado.edu>
4447 2002-03-13 Fernando Perez <fperez@colorado.edu>
4443
4448
4444 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4449 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4445 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4450 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4446
4451
4447 2002-03-12 Fernando Perez <fperez@colorado.edu>
4452 2002-03-12 Fernando Perez <fperez@colorado.edu>
4448
4453
4449 * IPython/ultraTB.py (TermColors): changed color escapes again to
4454 * IPython/ultraTB.py (TermColors): changed color escapes again to
4450 fix the (old, reintroduced) line-wrapping bug. Basically, if
4455 fix the (old, reintroduced) line-wrapping bug. Basically, if
4451 \001..\002 aren't given in the color escapes, lines get wrapped
4456 \001..\002 aren't given in the color escapes, lines get wrapped
4452 weirdly. But giving those screws up old xterms and emacs terms. So
4457 weirdly. But giving those screws up old xterms and emacs terms. So
4453 I added some logic for emacs terms to be ok, but I can't identify old
4458 I added some logic for emacs terms to be ok, but I can't identify old
4454 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4459 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4455
4460
4456 2002-03-10 Fernando Perez <fperez@colorado.edu>
4461 2002-03-10 Fernando Perez <fperez@colorado.edu>
4457
4462
4458 * IPython/usage.py (__doc__): Various documentation cleanups and
4463 * IPython/usage.py (__doc__): Various documentation cleanups and
4459 updates, both in usage docstrings and in the manual.
4464 updates, both in usage docstrings and in the manual.
4460
4465
4461 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4466 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4462 handling of caching. Set minimum acceptabe value for having a
4467 handling of caching. Set minimum acceptabe value for having a
4463 cache at 20 values.
4468 cache at 20 values.
4464
4469
4465 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4470 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4466 install_first_time function to a method, renamed it and added an
4471 install_first_time function to a method, renamed it and added an
4467 'upgrade' mode. Now people can update their config directory with
4472 'upgrade' mode. Now people can update their config directory with
4468 a simple command line switch (-upgrade, also new).
4473 a simple command line switch (-upgrade, also new).
4469
4474
4470 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4475 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4471 @file (convenient for automagic users under Python >= 2.2).
4476 @file (convenient for automagic users under Python >= 2.2).
4472 Removed @files (it seemed more like a plural than an abbrev. of
4477 Removed @files (it seemed more like a plural than an abbrev. of
4473 'file show').
4478 'file show').
4474
4479
4475 * IPython/iplib.py (install_first_time): Fixed crash if there were
4480 * IPython/iplib.py (install_first_time): Fixed crash if there were
4476 backup files ('~') in .ipython/ install directory.
4481 backup files ('~') in .ipython/ install directory.
4477
4482
4478 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4483 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4479 system. Things look fine, but these changes are fairly
4484 system. Things look fine, but these changes are fairly
4480 intrusive. Test them for a few days.
4485 intrusive. Test them for a few days.
4481
4486
4482 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4487 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4483 the prompts system. Now all in/out prompt strings are user
4488 the prompts system. Now all in/out prompt strings are user
4484 controllable. This is particularly useful for embedding, as one
4489 controllable. This is particularly useful for embedding, as one
4485 can tag embedded instances with particular prompts.
4490 can tag embedded instances with particular prompts.
4486
4491
4487 Also removed global use of sys.ps1/2, which now allows nested
4492 Also removed global use of sys.ps1/2, which now allows nested
4488 embeddings without any problems. Added command-line options for
4493 embeddings without any problems. Added command-line options for
4489 the prompt strings.
4494 the prompt strings.
4490
4495
4491 2002-03-08 Fernando Perez <fperez@colorado.edu>
4496 2002-03-08 Fernando Perez <fperez@colorado.edu>
4492
4497
4493 * IPython/UserConfig/example-embed-short.py (ipshell): added
4498 * IPython/UserConfig/example-embed-short.py (ipshell): added
4494 example file with the bare minimum code for embedding.
4499 example file with the bare minimum code for embedding.
4495
4500
4496 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4501 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4497 functionality for the embeddable shell to be activated/deactivated
4502 functionality for the embeddable shell to be activated/deactivated
4498 either globally or at each call.
4503 either globally or at each call.
4499
4504
4500 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4505 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4501 rewriting the prompt with '--->' for auto-inputs with proper
4506 rewriting the prompt with '--->' for auto-inputs with proper
4502 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4507 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4503 this is handled by the prompts class itself, as it should.
4508 this is handled by the prompts class itself, as it should.
4504
4509
4505 2002-03-05 Fernando Perez <fperez@colorado.edu>
4510 2002-03-05 Fernando Perez <fperez@colorado.edu>
4506
4511
4507 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4512 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4508 @logstart to avoid name clashes with the math log function.
4513 @logstart to avoid name clashes with the math log function.
4509
4514
4510 * Big updates to X/Emacs section of the manual.
4515 * Big updates to X/Emacs section of the manual.
4511
4516
4512 * Removed ipython_emacs. Milan explained to me how to pass
4517 * Removed ipython_emacs. Milan explained to me how to pass
4513 arguments to ipython through Emacs. Some day I'm going to end up
4518 arguments to ipython through Emacs. Some day I'm going to end up
4514 learning some lisp...
4519 learning some lisp...
4515
4520
4516 2002-03-04 Fernando Perez <fperez@colorado.edu>
4521 2002-03-04 Fernando Perez <fperez@colorado.edu>
4517
4522
4518 * IPython/ipython_emacs: Created script to be used as the
4523 * IPython/ipython_emacs: Created script to be used as the
4519 py-python-command Emacs variable so we can pass IPython
4524 py-python-command Emacs variable so we can pass IPython
4520 parameters. I can't figure out how to tell Emacs directly to pass
4525 parameters. I can't figure out how to tell Emacs directly to pass
4521 parameters to IPython, so a dummy shell script will do it.
4526 parameters to IPython, so a dummy shell script will do it.
4522
4527
4523 Other enhancements made for things to work better under Emacs'
4528 Other enhancements made for things to work better under Emacs'
4524 various types of terminals. Many thanks to Milan Zamazal
4529 various types of terminals. Many thanks to Milan Zamazal
4525 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4530 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4526
4531
4527 2002-03-01 Fernando Perez <fperez@colorado.edu>
4532 2002-03-01 Fernando Perez <fperez@colorado.edu>
4528
4533
4529 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4534 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4530 that loading of readline is now optional. This gives better
4535 that loading of readline is now optional. This gives better
4531 control to emacs users.
4536 control to emacs users.
4532
4537
4533 * IPython/ultraTB.py (__date__): Modified color escape sequences
4538 * IPython/ultraTB.py (__date__): Modified color escape sequences
4534 and now things work fine under xterm and in Emacs' term buffers
4539 and now things work fine under xterm and in Emacs' term buffers
4535 (though not shell ones). Well, in emacs you get colors, but all
4540 (though not shell ones). Well, in emacs you get colors, but all
4536 seem to be 'light' colors (no difference between dark and light
4541 seem to be 'light' colors (no difference between dark and light
4537 ones). But the garbage chars are gone, and also in xterms. It
4542 ones). But the garbage chars are gone, and also in xterms. It
4538 seems that now I'm using 'cleaner' ansi sequences.
4543 seems that now I'm using 'cleaner' ansi sequences.
4539
4544
4540 2002-02-21 Fernando Perez <fperez@colorado.edu>
4545 2002-02-21 Fernando Perez <fperez@colorado.edu>
4541
4546
4542 * Released 0.2.7 (mainly to publish the scoping fix).
4547 * Released 0.2.7 (mainly to publish the scoping fix).
4543
4548
4544 * IPython/Logger.py (Logger.logstate): added. A corresponding
4549 * IPython/Logger.py (Logger.logstate): added. A corresponding
4545 @logstate magic was created.
4550 @logstate magic was created.
4546
4551
4547 * IPython/Magic.py: fixed nested scoping problem under Python
4552 * IPython/Magic.py: fixed nested scoping problem under Python
4548 2.1.x (automagic wasn't working).
4553 2.1.x (automagic wasn't working).
4549
4554
4550 2002-02-20 Fernando Perez <fperez@colorado.edu>
4555 2002-02-20 Fernando Perez <fperez@colorado.edu>
4551
4556
4552 * Released 0.2.6.
4557 * Released 0.2.6.
4553
4558
4554 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4559 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4555 option so that logs can come out without any headers at all.
4560 option so that logs can come out without any headers at all.
4556
4561
4557 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4562 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4558 SciPy.
4563 SciPy.
4559
4564
4560 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4565 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4561 that embedded IPython calls don't require vars() to be explicitly
4566 that embedded IPython calls don't require vars() to be explicitly
4562 passed. Now they are extracted from the caller's frame (code
4567 passed. Now they are extracted from the caller's frame (code
4563 snatched from Eric Jones' weave). Added better documentation to
4568 snatched from Eric Jones' weave). Added better documentation to
4564 the section on embedding and the example file.
4569 the section on embedding and the example file.
4565
4570
4566 * IPython/genutils.py (page): Changed so that under emacs, it just
4571 * IPython/genutils.py (page): Changed so that under emacs, it just
4567 prints the string. You can then page up and down in the emacs
4572 prints the string. You can then page up and down in the emacs
4568 buffer itself. This is how the builtin help() works.
4573 buffer itself. This is how the builtin help() works.
4569
4574
4570 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4575 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4571 macro scoping: macros need to be executed in the user's namespace
4576 macro scoping: macros need to be executed in the user's namespace
4572 to work as if they had been typed by the user.
4577 to work as if they had been typed by the user.
4573
4578
4574 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4579 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4575 execute automatically (no need to type 'exec...'). They then
4580 execute automatically (no need to type 'exec...'). They then
4576 behave like 'true macros'. The printing system was also modified
4581 behave like 'true macros'. The printing system was also modified
4577 for this to work.
4582 for this to work.
4578
4583
4579 2002-02-19 Fernando Perez <fperez@colorado.edu>
4584 2002-02-19 Fernando Perez <fperez@colorado.edu>
4580
4585
4581 * IPython/genutils.py (page_file): new function for paging files
4586 * IPython/genutils.py (page_file): new function for paging files
4582 in an OS-independent way. Also necessary for file viewing to work
4587 in an OS-independent way. Also necessary for file viewing to work
4583 well inside Emacs buffers.
4588 well inside Emacs buffers.
4584 (page): Added checks for being in an emacs buffer.
4589 (page): Added checks for being in an emacs buffer.
4585 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4590 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4586 same bug in iplib.
4591 same bug in iplib.
4587
4592
4588 2002-02-18 Fernando Perez <fperez@colorado.edu>
4593 2002-02-18 Fernando Perez <fperez@colorado.edu>
4589
4594
4590 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4595 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4591 of readline so that IPython can work inside an Emacs buffer.
4596 of readline so that IPython can work inside an Emacs buffer.
4592
4597
4593 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4598 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4594 method signatures (they weren't really bugs, but it looks cleaner
4599 method signatures (they weren't really bugs, but it looks cleaner
4595 and keeps PyChecker happy).
4600 and keeps PyChecker happy).
4596
4601
4597 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4602 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4598 for implementing various user-defined hooks. Currently only
4603 for implementing various user-defined hooks. Currently only
4599 display is done.
4604 display is done.
4600
4605
4601 * IPython/Prompts.py (CachedOutput._display): changed display
4606 * IPython/Prompts.py (CachedOutput._display): changed display
4602 functions so that they can be dynamically changed by users easily.
4607 functions so that they can be dynamically changed by users easily.
4603
4608
4604 * IPython/Extensions/numeric_formats.py (num_display): added an
4609 * IPython/Extensions/numeric_formats.py (num_display): added an
4605 extension for printing NumPy arrays in flexible manners. It
4610 extension for printing NumPy arrays in flexible manners. It
4606 doesn't do anything yet, but all the structure is in
4611 doesn't do anything yet, but all the structure is in
4607 place. Ultimately the plan is to implement output format control
4612 place. Ultimately the plan is to implement output format control
4608 like in Octave.
4613 like in Octave.
4609
4614
4610 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4615 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4611 methods are found at run-time by all the automatic machinery.
4616 methods are found at run-time by all the automatic machinery.
4612
4617
4613 2002-02-17 Fernando Perez <fperez@colorado.edu>
4618 2002-02-17 Fernando Perez <fperez@colorado.edu>
4614
4619
4615 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4620 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4616 whole file a little.
4621 whole file a little.
4617
4622
4618 * ToDo: closed this document. Now there's a new_design.lyx
4623 * ToDo: closed this document. Now there's a new_design.lyx
4619 document for all new ideas. Added making a pdf of it for the
4624 document for all new ideas. Added making a pdf of it for the
4620 end-user distro.
4625 end-user distro.
4621
4626
4622 * IPython/Logger.py (Logger.switch_log): Created this to replace
4627 * IPython/Logger.py (Logger.switch_log): Created this to replace
4623 logon() and logoff(). It also fixes a nasty crash reported by
4628 logon() and logoff(). It also fixes a nasty crash reported by
4624 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4629 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4625
4630
4626 * IPython/iplib.py (complete): got auto-completion to work with
4631 * IPython/iplib.py (complete): got auto-completion to work with
4627 automagic (I had wanted this for a long time).
4632 automagic (I had wanted this for a long time).
4628
4633
4629 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4634 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4630 to @file, since file() is now a builtin and clashes with automagic
4635 to @file, since file() is now a builtin and clashes with automagic
4631 for @file.
4636 for @file.
4632
4637
4633 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4638 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4634 of this was previously in iplib, which had grown to more than 2000
4639 of this was previously in iplib, which had grown to more than 2000
4635 lines, way too long. No new functionality, but it makes managing
4640 lines, way too long. No new functionality, but it makes managing
4636 the code a bit easier.
4641 the code a bit easier.
4637
4642
4638 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4643 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4639 information to crash reports.
4644 information to crash reports.
4640
4645
4641 2002-02-12 Fernando Perez <fperez@colorado.edu>
4646 2002-02-12 Fernando Perez <fperez@colorado.edu>
4642
4647
4643 * Released 0.2.5.
4648 * Released 0.2.5.
4644
4649
4645 2002-02-11 Fernando Perez <fperez@colorado.edu>
4650 2002-02-11 Fernando Perez <fperez@colorado.edu>
4646
4651
4647 * Wrote a relatively complete Windows installer. It puts
4652 * Wrote a relatively complete Windows installer. It puts
4648 everything in place, creates Start Menu entries and fixes the
4653 everything in place, creates Start Menu entries and fixes the
4649 color issues. Nothing fancy, but it works.
4654 color issues. Nothing fancy, but it works.
4650
4655
4651 2002-02-10 Fernando Perez <fperez@colorado.edu>
4656 2002-02-10 Fernando Perez <fperez@colorado.edu>
4652
4657
4653 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4658 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4654 os.path.expanduser() call so that we can type @run ~/myfile.py and
4659 os.path.expanduser() call so that we can type @run ~/myfile.py and
4655 have thigs work as expected.
4660 have thigs work as expected.
4656
4661
4657 * IPython/genutils.py (page): fixed exception handling so things
4662 * IPython/genutils.py (page): fixed exception handling so things
4658 work both in Unix and Windows correctly. Quitting a pager triggers
4663 work both in Unix and Windows correctly. Quitting a pager triggers
4659 an IOError/broken pipe in Unix, and in windows not finding a pager
4664 an IOError/broken pipe in Unix, and in windows not finding a pager
4660 is also an IOError, so I had to actually look at the return value
4665 is also an IOError, so I had to actually look at the return value
4661 of the exception, not just the exception itself. Should be ok now.
4666 of the exception, not just the exception itself. Should be ok now.
4662
4667
4663 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4668 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4664 modified to allow case-insensitive color scheme changes.
4669 modified to allow case-insensitive color scheme changes.
4665
4670
4666 2002-02-09 Fernando Perez <fperez@colorado.edu>
4671 2002-02-09 Fernando Perez <fperez@colorado.edu>
4667
4672
4668 * IPython/genutils.py (native_line_ends): new function to leave
4673 * IPython/genutils.py (native_line_ends): new function to leave
4669 user config files with os-native line-endings.
4674 user config files with os-native line-endings.
4670
4675
4671 * README and manual updates.
4676 * README and manual updates.
4672
4677
4673 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4678 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4674 instead of StringType to catch Unicode strings.
4679 instead of StringType to catch Unicode strings.
4675
4680
4676 * IPython/genutils.py (filefind): fixed bug for paths with
4681 * IPython/genutils.py (filefind): fixed bug for paths with
4677 embedded spaces (very common in Windows).
4682 embedded spaces (very common in Windows).
4678
4683
4679 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4684 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4680 files under Windows, so that they get automatically associated
4685 files under Windows, so that they get automatically associated
4681 with a text editor. Windows makes it a pain to handle
4686 with a text editor. Windows makes it a pain to handle
4682 extension-less files.
4687 extension-less files.
4683
4688
4684 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4689 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4685 warning about readline only occur for Posix. In Windows there's no
4690 warning about readline only occur for Posix. In Windows there's no
4686 way to get readline, so why bother with the warning.
4691 way to get readline, so why bother with the warning.
4687
4692
4688 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4693 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4689 for __str__ instead of dir(self), since dir() changed in 2.2.
4694 for __str__ instead of dir(self), since dir() changed in 2.2.
4690
4695
4691 * Ported to Windows! Tested on XP, I suspect it should work fine
4696 * Ported to Windows! Tested on XP, I suspect it should work fine
4692 on NT/2000, but I don't think it will work on 98 et al. That
4697 on NT/2000, but I don't think it will work on 98 et al. That
4693 series of Windows is such a piece of junk anyway that I won't try
4698 series of Windows is such a piece of junk anyway that I won't try
4694 porting it there. The XP port was straightforward, showed a few
4699 porting it there. The XP port was straightforward, showed a few
4695 bugs here and there (fixed all), in particular some string
4700 bugs here and there (fixed all), in particular some string
4696 handling stuff which required considering Unicode strings (which
4701 handling stuff which required considering Unicode strings (which
4697 Windows uses). This is good, but hasn't been too tested :) No
4702 Windows uses). This is good, but hasn't been too tested :) No
4698 fancy installer yet, I'll put a note in the manual so people at
4703 fancy installer yet, I'll put a note in the manual so people at
4699 least make manually a shortcut.
4704 least make manually a shortcut.
4700
4705
4701 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4706 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4702 into a single one, "colors". This now controls both prompt and
4707 into a single one, "colors". This now controls both prompt and
4703 exception color schemes, and can be changed both at startup
4708 exception color schemes, and can be changed both at startup
4704 (either via command-line switches or via ipythonrc files) and at
4709 (either via command-line switches or via ipythonrc files) and at
4705 runtime, with @colors.
4710 runtime, with @colors.
4706 (Magic.magic_run): renamed @prun to @run and removed the old
4711 (Magic.magic_run): renamed @prun to @run and removed the old
4707 @run. The two were too similar to warrant keeping both.
4712 @run. The two were too similar to warrant keeping both.
4708
4713
4709 2002-02-03 Fernando Perez <fperez@colorado.edu>
4714 2002-02-03 Fernando Perez <fperez@colorado.edu>
4710
4715
4711 * IPython/iplib.py (install_first_time): Added comment on how to
4716 * IPython/iplib.py (install_first_time): Added comment on how to
4712 configure the color options for first-time users. Put a <return>
4717 configure the color options for first-time users. Put a <return>
4713 request at the end so that small-terminal users get a chance to
4718 request at the end so that small-terminal users get a chance to
4714 read the startup info.
4719 read the startup info.
4715
4720
4716 2002-01-23 Fernando Perez <fperez@colorado.edu>
4721 2002-01-23 Fernando Perez <fperez@colorado.edu>
4717
4722
4718 * IPython/iplib.py (CachedOutput.update): Changed output memory
4723 * IPython/iplib.py (CachedOutput.update): Changed output memory
4719 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4724 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4720 input history we still use _i. Did this b/c these variable are
4725 input history we still use _i. Did this b/c these variable are
4721 very commonly used in interactive work, so the less we need to
4726 very commonly used in interactive work, so the less we need to
4722 type the better off we are.
4727 type the better off we are.
4723 (Magic.magic_prun): updated @prun to better handle the namespaces
4728 (Magic.magic_prun): updated @prun to better handle the namespaces
4724 the file will run in, including a fix for __name__ not being set
4729 the file will run in, including a fix for __name__ not being set
4725 before.
4730 before.
4726
4731
4727 2002-01-20 Fernando Perez <fperez@colorado.edu>
4732 2002-01-20 Fernando Perez <fperez@colorado.edu>
4728
4733
4729 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4734 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4730 extra garbage for Python 2.2. Need to look more carefully into
4735 extra garbage for Python 2.2. Need to look more carefully into
4731 this later.
4736 this later.
4732
4737
4733 2002-01-19 Fernando Perez <fperez@colorado.edu>
4738 2002-01-19 Fernando Perez <fperez@colorado.edu>
4734
4739
4735 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4740 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4736 display SyntaxError exceptions properly formatted when they occur
4741 display SyntaxError exceptions properly formatted when they occur
4737 (they can be triggered by imported code).
4742 (they can be triggered by imported code).
4738
4743
4739 2002-01-18 Fernando Perez <fperez@colorado.edu>
4744 2002-01-18 Fernando Perez <fperez@colorado.edu>
4740
4745
4741 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4746 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4742 SyntaxError exceptions are reported nicely formatted, instead of
4747 SyntaxError exceptions are reported nicely formatted, instead of
4743 spitting out only offset information as before.
4748 spitting out only offset information as before.
4744 (Magic.magic_prun): Added the @prun function for executing
4749 (Magic.magic_prun): Added the @prun function for executing
4745 programs with command line args inside IPython.
4750 programs with command line args inside IPython.
4746
4751
4747 2002-01-16 Fernando Perez <fperez@colorado.edu>
4752 2002-01-16 Fernando Perez <fperez@colorado.edu>
4748
4753
4749 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4754 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4750 to *not* include the last item given in a range. This brings their
4755 to *not* include the last item given in a range. This brings their
4751 behavior in line with Python's slicing:
4756 behavior in line with Python's slicing:
4752 a[n1:n2] -> a[n1]...a[n2-1]
4757 a[n1:n2] -> a[n1]...a[n2-1]
4753 It may be a bit less convenient, but I prefer to stick to Python's
4758 It may be a bit less convenient, but I prefer to stick to Python's
4754 conventions *everywhere*, so users never have to wonder.
4759 conventions *everywhere*, so users never have to wonder.
4755 (Magic.magic_macro): Added @macro function to ease the creation of
4760 (Magic.magic_macro): Added @macro function to ease the creation of
4756 macros.
4761 macros.
4757
4762
4758 2002-01-05 Fernando Perez <fperez@colorado.edu>
4763 2002-01-05 Fernando Perez <fperez@colorado.edu>
4759
4764
4760 * Released 0.2.4.
4765 * Released 0.2.4.
4761
4766
4762 * IPython/iplib.py (Magic.magic_pdef):
4767 * IPython/iplib.py (Magic.magic_pdef):
4763 (InteractiveShell.safe_execfile): report magic lines and error
4768 (InteractiveShell.safe_execfile): report magic lines and error
4764 lines without line numbers so one can easily copy/paste them for
4769 lines without line numbers so one can easily copy/paste them for
4765 re-execution.
4770 re-execution.
4766
4771
4767 * Updated manual with recent changes.
4772 * Updated manual with recent changes.
4768
4773
4769 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4774 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4770 docstring printing when class? is called. Very handy for knowing
4775 docstring printing when class? is called. Very handy for knowing
4771 how to create class instances (as long as __init__ is well
4776 how to create class instances (as long as __init__ is well
4772 documented, of course :)
4777 documented, of course :)
4773 (Magic.magic_doc): print both class and constructor docstrings.
4778 (Magic.magic_doc): print both class and constructor docstrings.
4774 (Magic.magic_pdef): give constructor info if passed a class and
4779 (Magic.magic_pdef): give constructor info if passed a class and
4775 __call__ info for callable object instances.
4780 __call__ info for callable object instances.
4776
4781
4777 2002-01-04 Fernando Perez <fperez@colorado.edu>
4782 2002-01-04 Fernando Perez <fperez@colorado.edu>
4778
4783
4779 * Made deep_reload() off by default. It doesn't always work
4784 * Made deep_reload() off by default. It doesn't always work
4780 exactly as intended, so it's probably safer to have it off. It's
4785 exactly as intended, so it's probably safer to have it off. It's
4781 still available as dreload() anyway, so nothing is lost.
4786 still available as dreload() anyway, so nothing is lost.
4782
4787
4783 2002-01-02 Fernando Perez <fperez@colorado.edu>
4788 2002-01-02 Fernando Perez <fperez@colorado.edu>
4784
4789
4785 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4790 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4786 so I wanted an updated release).
4791 so I wanted an updated release).
4787
4792
4788 2001-12-27 Fernando Perez <fperez@colorado.edu>
4793 2001-12-27 Fernando Perez <fperez@colorado.edu>
4789
4794
4790 * IPython/iplib.py (InteractiveShell.interact): Added the original
4795 * IPython/iplib.py (InteractiveShell.interact): Added the original
4791 code from 'code.py' for this module in order to change the
4796 code from 'code.py' for this module in order to change the
4792 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4797 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4793 the history cache would break when the user hit Ctrl-C, and
4798 the history cache would break when the user hit Ctrl-C, and
4794 interact() offers no way to add any hooks to it.
4799 interact() offers no way to add any hooks to it.
4795
4800
4796 2001-12-23 Fernando Perez <fperez@colorado.edu>
4801 2001-12-23 Fernando Perez <fperez@colorado.edu>
4797
4802
4798 * setup.py: added check for 'MANIFEST' before trying to remove
4803 * setup.py: added check for 'MANIFEST' before trying to remove
4799 it. Thanks to Sean Reifschneider.
4804 it. Thanks to Sean Reifschneider.
4800
4805
4801 2001-12-22 Fernando Perez <fperez@colorado.edu>
4806 2001-12-22 Fernando Perez <fperez@colorado.edu>
4802
4807
4803 * Released 0.2.2.
4808 * Released 0.2.2.
4804
4809
4805 * Finished (reasonably) writing the manual. Later will add the
4810 * Finished (reasonably) writing the manual. Later will add the
4806 python-standard navigation stylesheets, but for the time being
4811 python-standard navigation stylesheets, but for the time being
4807 it's fairly complete. Distribution will include html and pdf
4812 it's fairly complete. Distribution will include html and pdf
4808 versions.
4813 versions.
4809
4814
4810 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4815 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4811 (MayaVi author).
4816 (MayaVi author).
4812
4817
4813 2001-12-21 Fernando Perez <fperez@colorado.edu>
4818 2001-12-21 Fernando Perez <fperez@colorado.edu>
4814
4819
4815 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4820 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4816 good public release, I think (with the manual and the distutils
4821 good public release, I think (with the manual and the distutils
4817 installer). The manual can use some work, but that can go
4822 installer). The manual can use some work, but that can go
4818 slowly. Otherwise I think it's quite nice for end users. Next
4823 slowly. Otherwise I think it's quite nice for end users. Next
4819 summer, rewrite the guts of it...
4824 summer, rewrite the guts of it...
4820
4825
4821 * Changed format of ipythonrc files to use whitespace as the
4826 * Changed format of ipythonrc files to use whitespace as the
4822 separator instead of an explicit '='. Cleaner.
4827 separator instead of an explicit '='. Cleaner.
4823
4828
4824 2001-12-20 Fernando Perez <fperez@colorado.edu>
4829 2001-12-20 Fernando Perez <fperez@colorado.edu>
4825
4830
4826 * Started a manual in LyX. For now it's just a quick merge of the
4831 * Started a manual in LyX. For now it's just a quick merge of the
4827 various internal docstrings and READMEs. Later it may grow into a
4832 various internal docstrings and READMEs. Later it may grow into a
4828 nice, full-blown manual.
4833 nice, full-blown manual.
4829
4834
4830 * Set up a distutils based installer. Installation should now be
4835 * Set up a distutils based installer. Installation should now be
4831 trivially simple for end-users.
4836 trivially simple for end-users.
4832
4837
4833 2001-12-11 Fernando Perez <fperez@colorado.edu>
4838 2001-12-11 Fernando Perez <fperez@colorado.edu>
4834
4839
4835 * Released 0.2.0. First public release, announced it at
4840 * Released 0.2.0. First public release, announced it at
4836 comp.lang.python. From now on, just bugfixes...
4841 comp.lang.python. From now on, just bugfixes...
4837
4842
4838 * Went through all the files, set copyright/license notices and
4843 * Went through all the files, set copyright/license notices and
4839 cleaned up things. Ready for release.
4844 cleaned up things. Ready for release.
4840
4845
4841 2001-12-10 Fernando Perez <fperez@colorado.edu>
4846 2001-12-10 Fernando Perez <fperez@colorado.edu>
4842
4847
4843 * Changed the first-time installer not to use tarfiles. It's more
4848 * Changed the first-time installer not to use tarfiles. It's more
4844 robust now and less unix-dependent. Also makes it easier for
4849 robust now and less unix-dependent. Also makes it easier for
4845 people to later upgrade versions.
4850 people to later upgrade versions.
4846
4851
4847 * Changed @exit to @abort to reflect the fact that it's pretty
4852 * Changed @exit to @abort to reflect the fact that it's pretty
4848 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4853 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4849 becomes significant only when IPyhton is embedded: in that case,
4854 becomes significant only when IPyhton is embedded: in that case,
4850 C-D closes IPython only, but @abort kills the enclosing program
4855 C-D closes IPython only, but @abort kills the enclosing program
4851 too (unless it had called IPython inside a try catching
4856 too (unless it had called IPython inside a try catching
4852 SystemExit).
4857 SystemExit).
4853
4858
4854 * Created Shell module which exposes the actuall IPython Shell
4859 * Created Shell module which exposes the actuall IPython Shell
4855 classes, currently the normal and the embeddable one. This at
4860 classes, currently the normal and the embeddable one. This at
4856 least offers a stable interface we won't need to change when
4861 least offers a stable interface we won't need to change when
4857 (later) the internals are rewritten. That rewrite will be confined
4862 (later) the internals are rewritten. That rewrite will be confined
4858 to iplib and ipmaker, but the Shell interface should remain as is.
4863 to iplib and ipmaker, but the Shell interface should remain as is.
4859
4864
4860 * Added embed module which offers an embeddable IPShell object,
4865 * Added embed module which offers an embeddable IPShell object,
4861 useful to fire up IPython *inside* a running program. Great for
4866 useful to fire up IPython *inside* a running program. Great for
4862 debugging or dynamical data analysis.
4867 debugging or dynamical data analysis.
4863
4868
4864 2001-12-08 Fernando Perez <fperez@colorado.edu>
4869 2001-12-08 Fernando Perez <fperez@colorado.edu>
4865
4870
4866 * Fixed small bug preventing seeing info from methods of defined
4871 * Fixed small bug preventing seeing info from methods of defined
4867 objects (incorrect namespace in _ofind()).
4872 objects (incorrect namespace in _ofind()).
4868
4873
4869 * Documentation cleanup. Moved the main usage docstrings to a
4874 * Documentation cleanup. Moved the main usage docstrings to a
4870 separate file, usage.py (cleaner to maintain, and hopefully in the
4875 separate file, usage.py (cleaner to maintain, and hopefully in the
4871 future some perlpod-like way of producing interactive, man and
4876 future some perlpod-like way of producing interactive, man and
4872 html docs out of it will be found).
4877 html docs out of it will be found).
4873
4878
4874 * Added @profile to see your profile at any time.
4879 * Added @profile to see your profile at any time.
4875
4880
4876 * Added @p as an alias for 'print'. It's especially convenient if
4881 * Added @p as an alias for 'print'. It's especially convenient if
4877 using automagic ('p x' prints x).
4882 using automagic ('p x' prints x).
4878
4883
4879 * Small cleanups and fixes after a pychecker run.
4884 * Small cleanups and fixes after a pychecker run.
4880
4885
4881 * Changed the @cd command to handle @cd - and @cd -<n> for
4886 * Changed the @cd command to handle @cd - and @cd -<n> for
4882 visiting any directory in _dh.
4887 visiting any directory in _dh.
4883
4888
4884 * Introduced _dh, a history of visited directories. @dhist prints
4889 * Introduced _dh, a history of visited directories. @dhist prints
4885 it out with numbers.
4890 it out with numbers.
4886
4891
4887 2001-12-07 Fernando Perez <fperez@colorado.edu>
4892 2001-12-07 Fernando Perez <fperez@colorado.edu>
4888
4893
4889 * Released 0.1.22
4894 * Released 0.1.22
4890
4895
4891 * Made initialization a bit more robust against invalid color
4896 * Made initialization a bit more robust against invalid color
4892 options in user input (exit, not traceback-crash).
4897 options in user input (exit, not traceback-crash).
4893
4898
4894 * Changed the bug crash reporter to write the report only in the
4899 * Changed the bug crash reporter to write the report only in the
4895 user's .ipython directory. That way IPython won't litter people's
4900 user's .ipython directory. That way IPython won't litter people's
4896 hard disks with crash files all over the place. Also print on
4901 hard disks with crash files all over the place. Also print on
4897 screen the necessary mail command.
4902 screen the necessary mail command.
4898
4903
4899 * With the new ultraTB, implemented LightBG color scheme for light
4904 * With the new ultraTB, implemented LightBG color scheme for light
4900 background terminals. A lot of people like white backgrounds, so I
4905 background terminals. A lot of people like white backgrounds, so I
4901 guess we should at least give them something readable.
4906 guess we should at least give them something readable.
4902
4907
4903 2001-12-06 Fernando Perez <fperez@colorado.edu>
4908 2001-12-06 Fernando Perez <fperez@colorado.edu>
4904
4909
4905 * Modified the structure of ultraTB. Now there's a proper class
4910 * Modified the structure of ultraTB. Now there's a proper class
4906 for tables of color schemes which allow adding schemes easily and
4911 for tables of color schemes which allow adding schemes easily and
4907 switching the active scheme without creating a new instance every
4912 switching the active scheme without creating a new instance every
4908 time (which was ridiculous). The syntax for creating new schemes
4913 time (which was ridiculous). The syntax for creating new schemes
4909 is also cleaner. I think ultraTB is finally done, with a clean
4914 is also cleaner. I think ultraTB is finally done, with a clean
4910 class structure. Names are also much cleaner (now there's proper
4915 class structure. Names are also much cleaner (now there's proper
4911 color tables, no need for every variable to also have 'color' in
4916 color tables, no need for every variable to also have 'color' in
4912 its name).
4917 its name).
4913
4918
4914 * Broke down genutils into separate files. Now genutils only
4919 * Broke down genutils into separate files. Now genutils only
4915 contains utility functions, and classes have been moved to their
4920 contains utility functions, and classes have been moved to their
4916 own files (they had enough independent functionality to warrant
4921 own files (they had enough independent functionality to warrant
4917 it): ConfigLoader, OutputTrap, Struct.
4922 it): ConfigLoader, OutputTrap, Struct.
4918
4923
4919 2001-12-05 Fernando Perez <fperez@colorado.edu>
4924 2001-12-05 Fernando Perez <fperez@colorado.edu>
4920
4925
4921 * IPython turns 21! Released version 0.1.21, as a candidate for
4926 * IPython turns 21! Released version 0.1.21, as a candidate for
4922 public consumption. If all goes well, release in a few days.
4927 public consumption. If all goes well, release in a few days.
4923
4928
4924 * Fixed path bug (files in Extensions/ directory wouldn't be found
4929 * Fixed path bug (files in Extensions/ directory wouldn't be found
4925 unless IPython/ was explicitly in sys.path).
4930 unless IPython/ was explicitly in sys.path).
4926
4931
4927 * Extended the FlexCompleter class as MagicCompleter to allow
4932 * Extended the FlexCompleter class as MagicCompleter to allow
4928 completion of @-starting lines.
4933 completion of @-starting lines.
4929
4934
4930 * Created __release__.py file as a central repository for release
4935 * Created __release__.py file as a central repository for release
4931 info that other files can read from.
4936 info that other files can read from.
4932
4937
4933 * Fixed small bug in logging: when logging was turned on in
4938 * Fixed small bug in logging: when logging was turned on in
4934 mid-session, old lines with special meanings (!@?) were being
4939 mid-session, old lines with special meanings (!@?) were being
4935 logged without the prepended comment, which is necessary since
4940 logged without the prepended comment, which is necessary since
4936 they are not truly valid python syntax. This should make session
4941 they are not truly valid python syntax. This should make session
4937 restores produce less errors.
4942 restores produce less errors.
4938
4943
4939 * The namespace cleanup forced me to make a FlexCompleter class
4944 * The namespace cleanup forced me to make a FlexCompleter class
4940 which is nothing but a ripoff of rlcompleter, but with selectable
4945 which is nothing but a ripoff of rlcompleter, but with selectable
4941 namespace (rlcompleter only works in __main__.__dict__). I'll try
4946 namespace (rlcompleter only works in __main__.__dict__). I'll try
4942 to submit a note to the authors to see if this change can be
4947 to submit a note to the authors to see if this change can be
4943 incorporated in future rlcompleter releases (Dec.6: done)
4948 incorporated in future rlcompleter releases (Dec.6: done)
4944
4949
4945 * More fixes to namespace handling. It was a mess! Now all
4950 * More fixes to namespace handling. It was a mess! Now all
4946 explicit references to __main__.__dict__ are gone (except when
4951 explicit references to __main__.__dict__ are gone (except when
4947 really needed) and everything is handled through the namespace
4952 really needed) and everything is handled through the namespace
4948 dicts in the IPython instance. We seem to be getting somewhere
4953 dicts in the IPython instance. We seem to be getting somewhere
4949 with this, finally...
4954 with this, finally...
4950
4955
4951 * Small documentation updates.
4956 * Small documentation updates.
4952
4957
4953 * Created the Extensions directory under IPython (with an
4958 * Created the Extensions directory under IPython (with an
4954 __init__.py). Put the PhysicalQ stuff there. This directory should
4959 __init__.py). Put the PhysicalQ stuff there. This directory should
4955 be used for all special-purpose extensions.
4960 be used for all special-purpose extensions.
4956
4961
4957 * File renaming:
4962 * File renaming:
4958 ipythonlib --> ipmaker
4963 ipythonlib --> ipmaker
4959 ipplib --> iplib
4964 ipplib --> iplib
4960 This makes a bit more sense in terms of what these files actually do.
4965 This makes a bit more sense in terms of what these files actually do.
4961
4966
4962 * Moved all the classes and functions in ipythonlib to ipplib, so
4967 * Moved all the classes and functions in ipythonlib to ipplib, so
4963 now ipythonlib only has make_IPython(). This will ease up its
4968 now ipythonlib only has make_IPython(). This will ease up its
4964 splitting in smaller functional chunks later.
4969 splitting in smaller functional chunks later.
4965
4970
4966 * Cleaned up (done, I think) output of @whos. Better column
4971 * Cleaned up (done, I think) output of @whos. Better column
4967 formatting, and now shows str(var) for as much as it can, which is
4972 formatting, and now shows str(var) for as much as it can, which is
4968 typically what one gets with a 'print var'.
4973 typically what one gets with a 'print var'.
4969
4974
4970 2001-12-04 Fernando Perez <fperez@colorado.edu>
4975 2001-12-04 Fernando Perez <fperez@colorado.edu>
4971
4976
4972 * Fixed namespace problems. Now builtin/IPyhton/user names get
4977 * Fixed namespace problems. Now builtin/IPyhton/user names get
4973 properly reported in their namespace. Internal namespace handling
4978 properly reported in their namespace. Internal namespace handling
4974 is finally getting decent (not perfect yet, but much better than
4979 is finally getting decent (not perfect yet, but much better than
4975 the ad-hoc mess we had).
4980 the ad-hoc mess we had).
4976
4981
4977 * Removed -exit option. If people just want to run a python
4982 * Removed -exit option. If people just want to run a python
4978 script, that's what the normal interpreter is for. Less
4983 script, that's what the normal interpreter is for. Less
4979 unnecessary options, less chances for bugs.
4984 unnecessary options, less chances for bugs.
4980
4985
4981 * Added a crash handler which generates a complete post-mortem if
4986 * Added a crash handler which generates a complete post-mortem if
4982 IPython crashes. This will help a lot in tracking bugs down the
4987 IPython crashes. This will help a lot in tracking bugs down the
4983 road.
4988 road.
4984
4989
4985 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4990 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4986 which were boud to functions being reassigned would bypass the
4991 which were boud to functions being reassigned would bypass the
4987 logger, breaking the sync of _il with the prompt counter. This
4992 logger, breaking the sync of _il with the prompt counter. This
4988 would then crash IPython later when a new line was logged.
4993 would then crash IPython later when a new line was logged.
4989
4994
4990 2001-12-02 Fernando Perez <fperez@colorado.edu>
4995 2001-12-02 Fernando Perez <fperez@colorado.edu>
4991
4996
4992 * Made IPython a package. This means people don't have to clutter
4997 * Made IPython a package. This means people don't have to clutter
4993 their sys.path with yet another directory. Changed the INSTALL
4998 their sys.path with yet another directory. Changed the INSTALL
4994 file accordingly.
4999 file accordingly.
4995
5000
4996 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5001 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4997 sorts its output (so @who shows it sorted) and @whos formats the
5002 sorts its output (so @who shows it sorted) and @whos formats the
4998 table according to the width of the first column. Nicer, easier to
5003 table according to the width of the first column. Nicer, easier to
4999 read. Todo: write a generic table_format() which takes a list of
5004 read. Todo: write a generic table_format() which takes a list of
5000 lists and prints it nicely formatted, with optional row/column
5005 lists and prints it nicely formatted, with optional row/column
5001 separators and proper padding and justification.
5006 separators and proper padding and justification.
5002
5007
5003 * Released 0.1.20
5008 * Released 0.1.20
5004
5009
5005 * Fixed bug in @log which would reverse the inputcache list (a
5010 * Fixed bug in @log which would reverse the inputcache list (a
5006 copy operation was missing).
5011 copy operation was missing).
5007
5012
5008 * Code cleanup. @config was changed to use page(). Better, since
5013 * Code cleanup. @config was changed to use page(). Better, since
5009 its output is always quite long.
5014 its output is always quite long.
5010
5015
5011 * Itpl is back as a dependency. I was having too many problems
5016 * Itpl is back as a dependency. I was having too many problems
5012 getting the parametric aliases to work reliably, and it's just
5017 getting the parametric aliases to work reliably, and it's just
5013 easier to code weird string operations with it than playing %()s
5018 easier to code weird string operations with it than playing %()s
5014 games. It's only ~6k, so I don't think it's too big a deal.
5019 games. It's only ~6k, so I don't think it's too big a deal.
5015
5020
5016 * Found (and fixed) a very nasty bug with history. !lines weren't
5021 * Found (and fixed) a very nasty bug with history. !lines weren't
5017 getting cached, and the out of sync caches would crash
5022 getting cached, and the out of sync caches would crash
5018 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5023 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5019 division of labor a bit better. Bug fixed, cleaner structure.
5024 division of labor a bit better. Bug fixed, cleaner structure.
5020
5025
5021 2001-12-01 Fernando Perez <fperez@colorado.edu>
5026 2001-12-01 Fernando Perez <fperez@colorado.edu>
5022
5027
5023 * Released 0.1.19
5028 * Released 0.1.19
5024
5029
5025 * Added option -n to @hist to prevent line number printing. Much
5030 * Added option -n to @hist to prevent line number printing. Much
5026 easier to copy/paste code this way.
5031 easier to copy/paste code this way.
5027
5032
5028 * Created global _il to hold the input list. Allows easy
5033 * Created global _il to hold the input list. Allows easy
5029 re-execution of blocks of code by slicing it (inspired by Janko's
5034 re-execution of blocks of code by slicing it (inspired by Janko's
5030 comment on 'macros').
5035 comment on 'macros').
5031
5036
5032 * Small fixes and doc updates.
5037 * Small fixes and doc updates.
5033
5038
5034 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5039 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5035 much too fragile with automagic. Handles properly multi-line
5040 much too fragile with automagic. Handles properly multi-line
5036 statements and takes parameters.
5041 statements and takes parameters.
5037
5042
5038 2001-11-30 Fernando Perez <fperez@colorado.edu>
5043 2001-11-30 Fernando Perez <fperez@colorado.edu>
5039
5044
5040 * Version 0.1.18 released.
5045 * Version 0.1.18 released.
5041
5046
5042 * Fixed nasty namespace bug in initial module imports.
5047 * Fixed nasty namespace bug in initial module imports.
5043
5048
5044 * Added copyright/license notes to all code files (except
5049 * Added copyright/license notes to all code files (except
5045 DPyGetOpt). For the time being, LGPL. That could change.
5050 DPyGetOpt). For the time being, LGPL. That could change.
5046
5051
5047 * Rewrote a much nicer README, updated INSTALL, cleaned up
5052 * Rewrote a much nicer README, updated INSTALL, cleaned up
5048 ipythonrc-* samples.
5053 ipythonrc-* samples.
5049
5054
5050 * Overall code/documentation cleanup. Basically ready for
5055 * Overall code/documentation cleanup. Basically ready for
5051 release. Only remaining thing: licence decision (LGPL?).
5056 release. Only remaining thing: licence decision (LGPL?).
5052
5057
5053 * Converted load_config to a class, ConfigLoader. Now recursion
5058 * Converted load_config to a class, ConfigLoader. Now recursion
5054 control is better organized. Doesn't include the same file twice.
5059 control is better organized. Doesn't include the same file twice.
5055
5060
5056 2001-11-29 Fernando Perez <fperez@colorado.edu>
5061 2001-11-29 Fernando Perez <fperez@colorado.edu>
5057
5062
5058 * Got input history working. Changed output history variables from
5063 * Got input history working. Changed output history variables from
5059 _p to _o so that _i is for input and _o for output. Just cleaner
5064 _p to _o so that _i is for input and _o for output. Just cleaner
5060 convention.
5065 convention.
5061
5066
5062 * Implemented parametric aliases. This pretty much allows the
5067 * Implemented parametric aliases. This pretty much allows the
5063 alias system to offer full-blown shell convenience, I think.
5068 alias system to offer full-blown shell convenience, I think.
5064
5069
5065 * Version 0.1.17 released, 0.1.18 opened.
5070 * Version 0.1.17 released, 0.1.18 opened.
5066
5071
5067 * dot_ipython/ipythonrc (alias): added documentation.
5072 * dot_ipython/ipythonrc (alias): added documentation.
5068 (xcolor): Fixed small bug (xcolors -> xcolor)
5073 (xcolor): Fixed small bug (xcolors -> xcolor)
5069
5074
5070 * Changed the alias system. Now alias is a magic command to define
5075 * Changed the alias system. Now alias is a magic command to define
5071 aliases just like the shell. Rationale: the builtin magics should
5076 aliases just like the shell. Rationale: the builtin magics should
5072 be there for things deeply connected to IPython's
5077 be there for things deeply connected to IPython's
5073 architecture. And this is a much lighter system for what I think
5078 architecture. And this is a much lighter system for what I think
5074 is the really important feature: allowing users to define quickly
5079 is the really important feature: allowing users to define quickly
5075 magics that will do shell things for them, so they can customize
5080 magics that will do shell things for them, so they can customize
5076 IPython easily to match their work habits. If someone is really
5081 IPython easily to match their work habits. If someone is really
5077 desperate to have another name for a builtin alias, they can
5082 desperate to have another name for a builtin alias, they can
5078 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5083 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5079 works.
5084 works.
5080
5085
5081 2001-11-28 Fernando Perez <fperez@colorado.edu>
5086 2001-11-28 Fernando Perez <fperez@colorado.edu>
5082
5087
5083 * Changed @file so that it opens the source file at the proper
5088 * Changed @file so that it opens the source file at the proper
5084 line. Since it uses less, if your EDITOR environment is
5089 line. Since it uses less, if your EDITOR environment is
5085 configured, typing v will immediately open your editor of choice
5090 configured, typing v will immediately open your editor of choice
5086 right at the line where the object is defined. Not as quick as
5091 right at the line where the object is defined. Not as quick as
5087 having a direct @edit command, but for all intents and purposes it
5092 having a direct @edit command, but for all intents and purposes it
5088 works. And I don't have to worry about writing @edit to deal with
5093 works. And I don't have to worry about writing @edit to deal with
5089 all the editors, less does that.
5094 all the editors, less does that.
5090
5095
5091 * Version 0.1.16 released, 0.1.17 opened.
5096 * Version 0.1.16 released, 0.1.17 opened.
5092
5097
5093 * Fixed some nasty bugs in the page/page_dumb combo that could
5098 * Fixed some nasty bugs in the page/page_dumb combo that could
5094 crash IPython.
5099 crash IPython.
5095
5100
5096 2001-11-27 Fernando Perez <fperez@colorado.edu>
5101 2001-11-27 Fernando Perez <fperez@colorado.edu>
5097
5102
5098 * Version 0.1.15 released, 0.1.16 opened.
5103 * Version 0.1.15 released, 0.1.16 opened.
5099
5104
5100 * Finally got ? and ?? to work for undefined things: now it's
5105 * Finally got ? and ?? to work for undefined things: now it's
5101 possible to type {}.get? and get information about the get method
5106 possible to type {}.get? and get information about the get method
5102 of dicts, or os.path? even if only os is defined (so technically
5107 of dicts, or os.path? even if only os is defined (so technically
5103 os.path isn't). Works at any level. For example, after import os,
5108 os.path isn't). Works at any level. For example, after import os,
5104 os?, os.path?, os.path.abspath? all work. This is great, took some
5109 os?, os.path?, os.path.abspath? all work. This is great, took some
5105 work in _ofind.
5110 work in _ofind.
5106
5111
5107 * Fixed more bugs with logging. The sanest way to do it was to add
5112 * Fixed more bugs with logging. The sanest way to do it was to add
5108 to @log a 'mode' parameter. Killed two in one shot (this mode
5113 to @log a 'mode' parameter. Killed two in one shot (this mode
5109 option was a request of Janko's). I think it's finally clean
5114 option was a request of Janko's). I think it's finally clean
5110 (famous last words).
5115 (famous last words).
5111
5116
5112 * Added a page_dumb() pager which does a decent job of paging on
5117 * Added a page_dumb() pager which does a decent job of paging on
5113 screen, if better things (like less) aren't available. One less
5118 screen, if better things (like less) aren't available. One less
5114 unix dependency (someday maybe somebody will port this to
5119 unix dependency (someday maybe somebody will port this to
5115 windows).
5120 windows).
5116
5121
5117 * Fixed problem in magic_log: would lock of logging out if log
5122 * Fixed problem in magic_log: would lock of logging out if log
5118 creation failed (because it would still think it had succeeded).
5123 creation failed (because it would still think it had succeeded).
5119
5124
5120 * Improved the page() function using curses to auto-detect screen
5125 * Improved the page() function using curses to auto-detect screen
5121 size. Now it can make a much better decision on whether to print
5126 size. Now it can make a much better decision on whether to print
5122 or page a string. Option screen_length was modified: a value 0
5127 or page a string. Option screen_length was modified: a value 0
5123 means auto-detect, and that's the default now.
5128 means auto-detect, and that's the default now.
5124
5129
5125 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5130 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5126 go out. I'll test it for a few days, then talk to Janko about
5131 go out. I'll test it for a few days, then talk to Janko about
5127 licences and announce it.
5132 licences and announce it.
5128
5133
5129 * Fixed the length of the auto-generated ---> prompt which appears
5134 * Fixed the length of the auto-generated ---> prompt which appears
5130 for auto-parens and auto-quotes. Getting this right isn't trivial,
5135 for auto-parens and auto-quotes. Getting this right isn't trivial,
5131 with all the color escapes, different prompt types and optional
5136 with all the color escapes, different prompt types and optional
5132 separators. But it seems to be working in all the combinations.
5137 separators. But it seems to be working in all the combinations.
5133
5138
5134 2001-11-26 Fernando Perez <fperez@colorado.edu>
5139 2001-11-26 Fernando Perez <fperez@colorado.edu>
5135
5140
5136 * Wrote a regexp filter to get option types from the option names
5141 * Wrote a regexp filter to get option types from the option names
5137 string. This eliminates the need to manually keep two duplicate
5142 string. This eliminates the need to manually keep two duplicate
5138 lists.
5143 lists.
5139
5144
5140 * Removed the unneeded check_option_names. Now options are handled
5145 * Removed the unneeded check_option_names. Now options are handled
5141 in a much saner manner and it's easy to visually check that things
5146 in a much saner manner and it's easy to visually check that things
5142 are ok.
5147 are ok.
5143
5148
5144 * Updated version numbers on all files I modified to carry a
5149 * Updated version numbers on all files I modified to carry a
5145 notice so Janko and Nathan have clear version markers.
5150 notice so Janko and Nathan have clear version markers.
5146
5151
5147 * Updated docstring for ultraTB with my changes. I should send
5152 * Updated docstring for ultraTB with my changes. I should send
5148 this to Nathan.
5153 this to Nathan.
5149
5154
5150 * Lots of small fixes. Ran everything through pychecker again.
5155 * Lots of small fixes. Ran everything through pychecker again.
5151
5156
5152 * Made loading of deep_reload an cmd line option. If it's not too
5157 * Made loading of deep_reload an cmd line option. If it's not too
5153 kosher, now people can just disable it. With -nodeep_reload it's
5158 kosher, now people can just disable it. With -nodeep_reload it's
5154 still available as dreload(), it just won't overwrite reload().
5159 still available as dreload(), it just won't overwrite reload().
5155
5160
5156 * Moved many options to the no| form (-opt and -noopt
5161 * Moved many options to the no| form (-opt and -noopt
5157 accepted). Cleaner.
5162 accepted). Cleaner.
5158
5163
5159 * Changed magic_log so that if called with no parameters, it uses
5164 * Changed magic_log so that if called with no parameters, it uses
5160 'rotate' mode. That way auto-generated logs aren't automatically
5165 'rotate' mode. That way auto-generated logs aren't automatically
5161 over-written. For normal logs, now a backup is made if it exists
5166 over-written. For normal logs, now a backup is made if it exists
5162 (only 1 level of backups). A new 'backup' mode was added to the
5167 (only 1 level of backups). A new 'backup' mode was added to the
5163 Logger class to support this. This was a request by Janko.
5168 Logger class to support this. This was a request by Janko.
5164
5169
5165 * Added @logoff/@logon to stop/restart an active log.
5170 * Added @logoff/@logon to stop/restart an active log.
5166
5171
5167 * Fixed a lot of bugs in log saving/replay. It was pretty
5172 * Fixed a lot of bugs in log saving/replay. It was pretty
5168 broken. Now special lines (!@,/) appear properly in the command
5173 broken. Now special lines (!@,/) appear properly in the command
5169 history after a log replay.
5174 history after a log replay.
5170
5175
5171 * Tried and failed to implement full session saving via pickle. My
5176 * Tried and failed to implement full session saving via pickle. My
5172 idea was to pickle __main__.__dict__, but modules can't be
5177 idea was to pickle __main__.__dict__, but modules can't be
5173 pickled. This would be a better alternative to replaying logs, but
5178 pickled. This would be a better alternative to replaying logs, but
5174 seems quite tricky to get to work. Changed -session to be called
5179 seems quite tricky to get to work. Changed -session to be called
5175 -logplay, which more accurately reflects what it does. And if we
5180 -logplay, which more accurately reflects what it does. And if we
5176 ever get real session saving working, -session is now available.
5181 ever get real session saving working, -session is now available.
5177
5182
5178 * Implemented color schemes for prompts also. As for tracebacks,
5183 * Implemented color schemes for prompts also. As for tracebacks,
5179 currently only NoColor and Linux are supported. But now the
5184 currently only NoColor and Linux are supported. But now the
5180 infrastructure is in place, based on a generic ColorScheme
5185 infrastructure is in place, based on a generic ColorScheme
5181 class. So writing and activating new schemes both for the prompts
5186 class. So writing and activating new schemes both for the prompts
5182 and the tracebacks should be straightforward.
5187 and the tracebacks should be straightforward.
5183
5188
5184 * Version 0.1.13 released, 0.1.14 opened.
5189 * Version 0.1.13 released, 0.1.14 opened.
5185
5190
5186 * Changed handling of options for output cache. Now counter is
5191 * Changed handling of options for output cache. Now counter is
5187 hardwired starting at 1 and one specifies the maximum number of
5192 hardwired starting at 1 and one specifies the maximum number of
5188 entries *in the outcache* (not the max prompt counter). This is
5193 entries *in the outcache* (not the max prompt counter). This is
5189 much better, since many statements won't increase the cache
5194 much better, since many statements won't increase the cache
5190 count. It also eliminated some confusing options, now there's only
5195 count. It also eliminated some confusing options, now there's only
5191 one: cache_size.
5196 one: cache_size.
5192
5197
5193 * Added 'alias' magic function and magic_alias option in the
5198 * Added 'alias' magic function and magic_alias option in the
5194 ipythonrc file. Now the user can easily define whatever names he
5199 ipythonrc file. Now the user can easily define whatever names he
5195 wants for the magic functions without having to play weird
5200 wants for the magic functions without having to play weird
5196 namespace games. This gives IPython a real shell-like feel.
5201 namespace games. This gives IPython a real shell-like feel.
5197
5202
5198 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5203 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5199 @ or not).
5204 @ or not).
5200
5205
5201 This was one of the last remaining 'visible' bugs (that I know
5206 This was one of the last remaining 'visible' bugs (that I know
5202 of). I think if I can clean up the session loading so it works
5207 of). I think if I can clean up the session loading so it works
5203 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5208 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5204 about licensing).
5209 about licensing).
5205
5210
5206 2001-11-25 Fernando Perez <fperez@colorado.edu>
5211 2001-11-25 Fernando Perez <fperez@colorado.edu>
5207
5212
5208 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5213 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5209 there's a cleaner distinction between what ? and ?? show.
5214 there's a cleaner distinction between what ? and ?? show.
5210
5215
5211 * Added screen_length option. Now the user can define his own
5216 * Added screen_length option. Now the user can define his own
5212 screen size for page() operations.
5217 screen size for page() operations.
5213
5218
5214 * Implemented magic shell-like functions with automatic code
5219 * Implemented magic shell-like functions with automatic code
5215 generation. Now adding another function is just a matter of adding
5220 generation. Now adding another function is just a matter of adding
5216 an entry to a dict, and the function is dynamically generated at
5221 an entry to a dict, and the function is dynamically generated at
5217 run-time. Python has some really cool features!
5222 run-time. Python has some really cool features!
5218
5223
5219 * Renamed many options to cleanup conventions a little. Now all
5224 * Renamed many options to cleanup conventions a little. Now all
5220 are lowercase, and only underscores where needed. Also in the code
5225 are lowercase, and only underscores where needed. Also in the code
5221 option name tables are clearer.
5226 option name tables are clearer.
5222
5227
5223 * Changed prompts a little. Now input is 'In [n]:' instead of
5228 * Changed prompts a little. Now input is 'In [n]:' instead of
5224 'In[n]:='. This allows it the numbers to be aligned with the
5229 'In[n]:='. This allows it the numbers to be aligned with the
5225 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5230 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5226 Python (it was a Mathematica thing). The '...' continuation prompt
5231 Python (it was a Mathematica thing). The '...' continuation prompt
5227 was also changed a little to align better.
5232 was also changed a little to align better.
5228
5233
5229 * Fixed bug when flushing output cache. Not all _p<n> variables
5234 * Fixed bug when flushing output cache. Not all _p<n> variables
5230 exist, so their deletion needs to be wrapped in a try:
5235 exist, so their deletion needs to be wrapped in a try:
5231
5236
5232 * Figured out how to properly use inspect.formatargspec() (it
5237 * Figured out how to properly use inspect.formatargspec() (it
5233 requires the args preceded by *). So I removed all the code from
5238 requires the args preceded by *). So I removed all the code from
5234 _get_pdef in Magic, which was just replicating that.
5239 _get_pdef in Magic, which was just replicating that.
5235
5240
5236 * Added test to prefilter to allow redefining magic function names
5241 * Added test to prefilter to allow redefining magic function names
5237 as variables. This is ok, since the @ form is always available,
5242 as variables. This is ok, since the @ form is always available,
5238 but whe should allow the user to define a variable called 'ls' if
5243 but whe should allow the user to define a variable called 'ls' if
5239 he needs it.
5244 he needs it.
5240
5245
5241 * Moved the ToDo information from README into a separate ToDo.
5246 * Moved the ToDo information from README into a separate ToDo.
5242
5247
5243 * General code cleanup and small bugfixes. I think it's close to a
5248 * General code cleanup and small bugfixes. I think it's close to a
5244 state where it can be released, obviously with a big 'beta'
5249 state where it can be released, obviously with a big 'beta'
5245 warning on it.
5250 warning on it.
5246
5251
5247 * Got the magic function split to work. Now all magics are defined
5252 * Got the magic function split to work. Now all magics are defined
5248 in a separate class. It just organizes things a bit, and now
5253 in a separate class. It just organizes things a bit, and now
5249 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5254 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5250 was too long).
5255 was too long).
5251
5256
5252 * Changed @clear to @reset to avoid potential confusions with
5257 * Changed @clear to @reset to avoid potential confusions with
5253 the shell command clear. Also renamed @cl to @clear, which does
5258 the shell command clear. Also renamed @cl to @clear, which does
5254 exactly what people expect it to from their shell experience.
5259 exactly what people expect it to from their shell experience.
5255
5260
5256 Added a check to the @reset command (since it's so
5261 Added a check to the @reset command (since it's so
5257 destructive, it's probably a good idea to ask for confirmation).
5262 destructive, it's probably a good idea to ask for confirmation).
5258 But now reset only works for full namespace resetting. Since the
5263 But now reset only works for full namespace resetting. Since the
5259 del keyword is already there for deleting a few specific
5264 del keyword is already there for deleting a few specific
5260 variables, I don't see the point of having a redundant magic
5265 variables, I don't see the point of having a redundant magic
5261 function for the same task.
5266 function for the same task.
5262
5267
5263 2001-11-24 Fernando Perez <fperez@colorado.edu>
5268 2001-11-24 Fernando Perez <fperez@colorado.edu>
5264
5269
5265 * Updated the builtin docs (esp. the ? ones).
5270 * Updated the builtin docs (esp. the ? ones).
5266
5271
5267 * Ran all the code through pychecker. Not terribly impressed with
5272 * Ran all the code through pychecker. Not terribly impressed with
5268 it: lots of spurious warnings and didn't really find anything of
5273 it: lots of spurious warnings and didn't really find anything of
5269 substance (just a few modules being imported and not used).
5274 substance (just a few modules being imported and not used).
5270
5275
5271 * Implemented the new ultraTB functionality into IPython. New
5276 * Implemented the new ultraTB functionality into IPython. New
5272 option: xcolors. This chooses color scheme. xmode now only selects
5277 option: xcolors. This chooses color scheme. xmode now only selects
5273 between Plain and Verbose. Better orthogonality.
5278 between Plain and Verbose. Better orthogonality.
5274
5279
5275 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5280 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5276 mode and color scheme for the exception handlers. Now it's
5281 mode and color scheme for the exception handlers. Now it's
5277 possible to have the verbose traceback with no coloring.
5282 possible to have the verbose traceback with no coloring.
5278
5283
5279 2001-11-23 Fernando Perez <fperez@colorado.edu>
5284 2001-11-23 Fernando Perez <fperez@colorado.edu>
5280
5285
5281 * Version 0.1.12 released, 0.1.13 opened.
5286 * Version 0.1.12 released, 0.1.13 opened.
5282
5287
5283 * Removed option to set auto-quote and auto-paren escapes by
5288 * Removed option to set auto-quote and auto-paren escapes by
5284 user. The chances of breaking valid syntax are just too high. If
5289 user. The chances of breaking valid syntax are just too high. If
5285 someone *really* wants, they can always dig into the code.
5290 someone *really* wants, they can always dig into the code.
5286
5291
5287 * Made prompt separators configurable.
5292 * Made prompt separators configurable.
5288
5293
5289 2001-11-22 Fernando Perez <fperez@colorado.edu>
5294 2001-11-22 Fernando Perez <fperez@colorado.edu>
5290
5295
5291 * Small bugfixes in many places.
5296 * Small bugfixes in many places.
5292
5297
5293 * Removed the MyCompleter class from ipplib. It seemed redundant
5298 * Removed the MyCompleter class from ipplib. It seemed redundant
5294 with the C-p,C-n history search functionality. Less code to
5299 with the C-p,C-n history search functionality. Less code to
5295 maintain.
5300 maintain.
5296
5301
5297 * Moved all the original ipython.py code into ipythonlib.py. Right
5302 * Moved all the original ipython.py code into ipythonlib.py. Right
5298 now it's just one big dump into a function called make_IPython, so
5303 now it's just one big dump into a function called make_IPython, so
5299 no real modularity has been gained. But at least it makes the
5304 no real modularity has been gained. But at least it makes the
5300 wrapper script tiny, and since ipythonlib is a module, it gets
5305 wrapper script tiny, and since ipythonlib is a module, it gets
5301 compiled and startup is much faster.
5306 compiled and startup is much faster.
5302
5307
5303 This is a reasobably 'deep' change, so we should test it for a
5308 This is a reasobably 'deep' change, so we should test it for a
5304 while without messing too much more with the code.
5309 while without messing too much more with the code.
5305
5310
5306 2001-11-21 Fernando Perez <fperez@colorado.edu>
5311 2001-11-21 Fernando Perez <fperez@colorado.edu>
5307
5312
5308 * Version 0.1.11 released, 0.1.12 opened for further work.
5313 * Version 0.1.11 released, 0.1.12 opened for further work.
5309
5314
5310 * Removed dependency on Itpl. It was only needed in one place. It
5315 * Removed dependency on Itpl. It was only needed in one place. It
5311 would be nice if this became part of python, though. It makes life
5316 would be nice if this became part of python, though. It makes life
5312 *a lot* easier in some cases.
5317 *a lot* easier in some cases.
5313
5318
5314 * Simplified the prefilter code a bit. Now all handlers are
5319 * Simplified the prefilter code a bit. Now all handlers are
5315 expected to explicitly return a value (at least a blank string).
5320 expected to explicitly return a value (at least a blank string).
5316
5321
5317 * Heavy edits in ipplib. Removed the help system altogether. Now
5322 * Heavy edits in ipplib. Removed the help system altogether. Now
5318 obj?/?? is used for inspecting objects, a magic @doc prints
5323 obj?/?? is used for inspecting objects, a magic @doc prints
5319 docstrings, and full-blown Python help is accessed via the 'help'
5324 docstrings, and full-blown Python help is accessed via the 'help'
5320 keyword. This cleans up a lot of code (less to maintain) and does
5325 keyword. This cleans up a lot of code (less to maintain) and does
5321 the job. Since 'help' is now a standard Python component, might as
5326 the job. Since 'help' is now a standard Python component, might as
5322 well use it and remove duplicate functionality.
5327 well use it and remove duplicate functionality.
5323
5328
5324 Also removed the option to use ipplib as a standalone program. By
5329 Also removed the option to use ipplib as a standalone program. By
5325 now it's too dependent on other parts of IPython to function alone.
5330 now it's too dependent on other parts of IPython to function alone.
5326
5331
5327 * Fixed bug in genutils.pager. It would crash if the pager was
5332 * Fixed bug in genutils.pager. It would crash if the pager was
5328 exited immediately after opening (broken pipe).
5333 exited immediately after opening (broken pipe).
5329
5334
5330 * Trimmed down the VerboseTB reporting a little. The header is
5335 * Trimmed down the VerboseTB reporting a little. The header is
5331 much shorter now and the repeated exception arguments at the end
5336 much shorter now and the repeated exception arguments at the end
5332 have been removed. For interactive use the old header seemed a bit
5337 have been removed. For interactive use the old header seemed a bit
5333 excessive.
5338 excessive.
5334
5339
5335 * Fixed small bug in output of @whos for variables with multi-word
5340 * Fixed small bug in output of @whos for variables with multi-word
5336 types (only first word was displayed).
5341 types (only first word was displayed).
5337
5342
5338 2001-11-17 Fernando Perez <fperez@colorado.edu>
5343 2001-11-17 Fernando Perez <fperez@colorado.edu>
5339
5344
5340 * Version 0.1.10 released, 0.1.11 opened for further work.
5345 * Version 0.1.10 released, 0.1.11 opened for further work.
5341
5346
5342 * Modified dirs and friends. dirs now *returns* the stack (not
5347 * Modified dirs and friends. dirs now *returns* the stack (not
5343 prints), so one can manipulate it as a variable. Convenient to
5348 prints), so one can manipulate it as a variable. Convenient to
5344 travel along many directories.
5349 travel along many directories.
5345
5350
5346 * Fixed bug in magic_pdef: would only work with functions with
5351 * Fixed bug in magic_pdef: would only work with functions with
5347 arguments with default values.
5352 arguments with default values.
5348
5353
5349 2001-11-14 Fernando Perez <fperez@colorado.edu>
5354 2001-11-14 Fernando Perez <fperez@colorado.edu>
5350
5355
5351 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5356 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5352 example with IPython. Various other minor fixes and cleanups.
5357 example with IPython. Various other minor fixes and cleanups.
5353
5358
5354 * Version 0.1.9 released, 0.1.10 opened for further work.
5359 * Version 0.1.9 released, 0.1.10 opened for further work.
5355
5360
5356 * Added sys.path to the list of directories searched in the
5361 * Added sys.path to the list of directories searched in the
5357 execfile= option. It used to be the current directory and the
5362 execfile= option. It used to be the current directory and the
5358 user's IPYTHONDIR only.
5363 user's IPYTHONDIR only.
5359
5364
5360 2001-11-13 Fernando Perez <fperez@colorado.edu>
5365 2001-11-13 Fernando Perez <fperez@colorado.edu>
5361
5366
5362 * Reinstated the raw_input/prefilter separation that Janko had
5367 * Reinstated the raw_input/prefilter separation that Janko had
5363 initially. This gives a more convenient setup for extending the
5368 initially. This gives a more convenient setup for extending the
5364 pre-processor from the outside: raw_input always gets a string,
5369 pre-processor from the outside: raw_input always gets a string,
5365 and prefilter has to process it. We can then redefine prefilter
5370 and prefilter has to process it. We can then redefine prefilter
5366 from the outside and implement extensions for special
5371 from the outside and implement extensions for special
5367 purposes.
5372 purposes.
5368
5373
5369 Today I got one for inputting PhysicalQuantity objects
5374 Today I got one for inputting PhysicalQuantity objects
5370 (from Scientific) without needing any function calls at
5375 (from Scientific) without needing any function calls at
5371 all. Extremely convenient, and it's all done as a user-level
5376 all. Extremely convenient, and it's all done as a user-level
5372 extension (no IPython code was touched). Now instead of:
5377 extension (no IPython code was touched). Now instead of:
5373 a = PhysicalQuantity(4.2,'m/s**2')
5378 a = PhysicalQuantity(4.2,'m/s**2')
5374 one can simply say
5379 one can simply say
5375 a = 4.2 m/s**2
5380 a = 4.2 m/s**2
5376 or even
5381 or even
5377 a = 4.2 m/s^2
5382 a = 4.2 m/s^2
5378
5383
5379 I use this, but it's also a proof of concept: IPython really is
5384 I use this, but it's also a proof of concept: IPython really is
5380 fully user-extensible, even at the level of the parsing of the
5385 fully user-extensible, even at the level of the parsing of the
5381 command line. It's not trivial, but it's perfectly doable.
5386 command line. It's not trivial, but it's perfectly doable.
5382
5387
5383 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5388 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5384 the problem of modules being loaded in the inverse order in which
5389 the problem of modules being loaded in the inverse order in which
5385 they were defined in
5390 they were defined in
5386
5391
5387 * Version 0.1.8 released, 0.1.9 opened for further work.
5392 * Version 0.1.8 released, 0.1.9 opened for further work.
5388
5393
5389 * Added magics pdef, source and file. They respectively show the
5394 * Added magics pdef, source and file. They respectively show the
5390 definition line ('prototype' in C), source code and full python
5395 definition line ('prototype' in C), source code and full python
5391 file for any callable object. The object inspector oinfo uses
5396 file for any callable object. The object inspector oinfo uses
5392 these to show the same information.
5397 these to show the same information.
5393
5398
5394 * Version 0.1.7 released, 0.1.8 opened for further work.
5399 * Version 0.1.7 released, 0.1.8 opened for further work.
5395
5400
5396 * Separated all the magic functions into a class called Magic. The
5401 * Separated all the magic functions into a class called Magic. The
5397 InteractiveShell class was becoming too big for Xemacs to handle
5402 InteractiveShell class was becoming too big for Xemacs to handle
5398 (de-indenting a line would lock it up for 10 seconds while it
5403 (de-indenting a line would lock it up for 10 seconds while it
5399 backtracked on the whole class!)
5404 backtracked on the whole class!)
5400
5405
5401 FIXME: didn't work. It can be done, but right now namespaces are
5406 FIXME: didn't work. It can be done, but right now namespaces are
5402 all messed up. Do it later (reverted it for now, so at least
5407 all messed up. Do it later (reverted it for now, so at least
5403 everything works as before).
5408 everything works as before).
5404
5409
5405 * Got the object introspection system (magic_oinfo) working! I
5410 * Got the object introspection system (magic_oinfo) working! I
5406 think this is pretty much ready for release to Janko, so he can
5411 think this is pretty much ready for release to Janko, so he can
5407 test it for a while and then announce it. Pretty much 100% of what
5412 test it for a while and then announce it. Pretty much 100% of what
5408 I wanted for the 'phase 1' release is ready. Happy, tired.
5413 I wanted for the 'phase 1' release is ready. Happy, tired.
5409
5414
5410 2001-11-12 Fernando Perez <fperez@colorado.edu>
5415 2001-11-12 Fernando Perez <fperez@colorado.edu>
5411
5416
5412 * Version 0.1.6 released, 0.1.7 opened for further work.
5417 * Version 0.1.6 released, 0.1.7 opened for further work.
5413
5418
5414 * Fixed bug in printing: it used to test for truth before
5419 * Fixed bug in printing: it used to test for truth before
5415 printing, so 0 wouldn't print. Now checks for None.
5420 printing, so 0 wouldn't print. Now checks for None.
5416
5421
5417 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5422 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5418 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5423 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5419 reaches by hand into the outputcache. Think of a better way to do
5424 reaches by hand into the outputcache. Think of a better way to do
5420 this later.
5425 this later.
5421
5426
5422 * Various small fixes thanks to Nathan's comments.
5427 * Various small fixes thanks to Nathan's comments.
5423
5428
5424 * Changed magic_pprint to magic_Pprint. This way it doesn't
5429 * Changed magic_pprint to magic_Pprint. This way it doesn't
5425 collide with pprint() and the name is consistent with the command
5430 collide with pprint() and the name is consistent with the command
5426 line option.
5431 line option.
5427
5432
5428 * Changed prompt counter behavior to be fully like
5433 * Changed prompt counter behavior to be fully like
5429 Mathematica's. That is, even input that doesn't return a result
5434 Mathematica's. That is, even input that doesn't return a result
5430 raises the prompt counter. The old behavior was kind of confusing
5435 raises the prompt counter. The old behavior was kind of confusing
5431 (getting the same prompt number several times if the operation
5436 (getting the same prompt number several times if the operation
5432 didn't return a result).
5437 didn't return a result).
5433
5438
5434 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5439 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5435
5440
5436 * Fixed -Classic mode (wasn't working anymore).
5441 * Fixed -Classic mode (wasn't working anymore).
5437
5442
5438 * Added colored prompts using Nathan's new code. Colors are
5443 * Added colored prompts using Nathan's new code. Colors are
5439 currently hardwired, they can be user-configurable. For
5444 currently hardwired, they can be user-configurable. For
5440 developers, they can be chosen in file ipythonlib.py, at the
5445 developers, they can be chosen in file ipythonlib.py, at the
5441 beginning of the CachedOutput class def.
5446 beginning of the CachedOutput class def.
5442
5447
5443 2001-11-11 Fernando Perez <fperez@colorado.edu>
5448 2001-11-11 Fernando Perez <fperez@colorado.edu>
5444
5449
5445 * Version 0.1.5 released, 0.1.6 opened for further work.
5450 * Version 0.1.5 released, 0.1.6 opened for further work.
5446
5451
5447 * Changed magic_env to *return* the environment as a dict (not to
5452 * Changed magic_env to *return* the environment as a dict (not to
5448 print it). This way it prints, but it can also be processed.
5453 print it). This way it prints, but it can also be processed.
5449
5454
5450 * Added Verbose exception reporting to interactive
5455 * Added Verbose exception reporting to interactive
5451 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5456 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5452 traceback. Had to make some changes to the ultraTB file. This is
5457 traceback. Had to make some changes to the ultraTB file. This is
5453 probably the last 'big' thing in my mental todo list. This ties
5458 probably the last 'big' thing in my mental todo list. This ties
5454 in with the next entry:
5459 in with the next entry:
5455
5460
5456 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5461 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5457 has to specify is Plain, Color or Verbose for all exception
5462 has to specify is Plain, Color or Verbose for all exception
5458 handling.
5463 handling.
5459
5464
5460 * Removed ShellServices option. All this can really be done via
5465 * Removed ShellServices option. All this can really be done via
5461 the magic system. It's easier to extend, cleaner and has automatic
5466 the magic system. It's easier to extend, cleaner and has automatic
5462 namespace protection and documentation.
5467 namespace protection and documentation.
5463
5468
5464 2001-11-09 Fernando Perez <fperez@colorado.edu>
5469 2001-11-09 Fernando Perez <fperez@colorado.edu>
5465
5470
5466 * Fixed bug in output cache flushing (missing parameter to
5471 * Fixed bug in output cache flushing (missing parameter to
5467 __init__). Other small bugs fixed (found using pychecker).
5472 __init__). Other small bugs fixed (found using pychecker).
5468
5473
5469 * Version 0.1.4 opened for bugfixing.
5474 * Version 0.1.4 opened for bugfixing.
5470
5475
5471 2001-11-07 Fernando Perez <fperez@colorado.edu>
5476 2001-11-07 Fernando Perez <fperez@colorado.edu>
5472
5477
5473 * Version 0.1.3 released, mainly because of the raw_input bug.
5478 * Version 0.1.3 released, mainly because of the raw_input bug.
5474
5479
5475 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5480 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5476 and when testing for whether things were callable, a call could
5481 and when testing for whether things were callable, a call could
5477 actually be made to certain functions. They would get called again
5482 actually be made to certain functions. They would get called again
5478 once 'really' executed, with a resulting double call. A disaster
5483 once 'really' executed, with a resulting double call. A disaster
5479 in many cases (list.reverse() would never work!).
5484 in many cases (list.reverse() would never work!).
5480
5485
5481 * Removed prefilter() function, moved its code to raw_input (which
5486 * Removed prefilter() function, moved its code to raw_input (which
5482 after all was just a near-empty caller for prefilter). This saves
5487 after all was just a near-empty caller for prefilter). This saves
5483 a function call on every prompt, and simplifies the class a tiny bit.
5488 a function call on every prompt, and simplifies the class a tiny bit.
5484
5489
5485 * Fix _ip to __ip name in magic example file.
5490 * Fix _ip to __ip name in magic example file.
5486
5491
5487 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5492 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5488 work with non-gnu versions of tar.
5493 work with non-gnu versions of tar.
5489
5494
5490 2001-11-06 Fernando Perez <fperez@colorado.edu>
5495 2001-11-06 Fernando Perez <fperez@colorado.edu>
5491
5496
5492 * Version 0.1.2. Just to keep track of the recent changes.
5497 * Version 0.1.2. Just to keep track of the recent changes.
5493
5498
5494 * Fixed nasty bug in output prompt routine. It used to check 'if
5499 * Fixed nasty bug in output prompt routine. It used to check 'if
5495 arg != None...'. Problem is, this fails if arg implements a
5500 arg != None...'. Problem is, this fails if arg implements a
5496 special comparison (__cmp__) which disallows comparing to
5501 special comparison (__cmp__) which disallows comparing to
5497 None. Found it when trying to use the PhysicalQuantity module from
5502 None. Found it when trying to use the PhysicalQuantity module from
5498 ScientificPython.
5503 ScientificPython.
5499
5504
5500 2001-11-05 Fernando Perez <fperez@colorado.edu>
5505 2001-11-05 Fernando Perez <fperez@colorado.edu>
5501
5506
5502 * Also added dirs. Now the pushd/popd/dirs family functions
5507 * Also added dirs. Now the pushd/popd/dirs family functions
5503 basically like the shell, with the added convenience of going home
5508 basically like the shell, with the added convenience of going home
5504 when called with no args.
5509 when called with no args.
5505
5510
5506 * pushd/popd slightly modified to mimic shell behavior more
5511 * pushd/popd slightly modified to mimic shell behavior more
5507 closely.
5512 closely.
5508
5513
5509 * Added env,pushd,popd from ShellServices as magic functions. I
5514 * Added env,pushd,popd from ShellServices as magic functions. I
5510 think the cleanest will be to port all desired functions from
5515 think the cleanest will be to port all desired functions from
5511 ShellServices as magics and remove ShellServices altogether. This
5516 ShellServices as magics and remove ShellServices altogether. This
5512 will provide a single, clean way of adding functionality
5517 will provide a single, clean way of adding functionality
5513 (shell-type or otherwise) to IP.
5518 (shell-type or otherwise) to IP.
5514
5519
5515 2001-11-04 Fernando Perez <fperez@colorado.edu>
5520 2001-11-04 Fernando Perez <fperez@colorado.edu>
5516
5521
5517 * Added .ipython/ directory to sys.path. This way users can keep
5522 * Added .ipython/ directory to sys.path. This way users can keep
5518 customizations there and access them via import.
5523 customizations there and access them via import.
5519
5524
5520 2001-11-03 Fernando Perez <fperez@colorado.edu>
5525 2001-11-03 Fernando Perez <fperez@colorado.edu>
5521
5526
5522 * Opened version 0.1.1 for new changes.
5527 * Opened version 0.1.1 for new changes.
5523
5528
5524 * Changed version number to 0.1.0: first 'public' release, sent to
5529 * Changed version number to 0.1.0: first 'public' release, sent to
5525 Nathan and Janko.
5530 Nathan and Janko.
5526
5531
5527 * Lots of small fixes and tweaks.
5532 * Lots of small fixes and tweaks.
5528
5533
5529 * Minor changes to whos format. Now strings are shown, snipped if
5534 * Minor changes to whos format. Now strings are shown, snipped if
5530 too long.
5535 too long.
5531
5536
5532 * Changed ShellServices to work on __main__ so they show up in @who
5537 * Changed ShellServices to work on __main__ so they show up in @who
5533
5538
5534 * Help also works with ? at the end of a line:
5539 * Help also works with ? at the end of a line:
5535 ?sin and sin?
5540 ?sin and sin?
5536 both produce the same effect. This is nice, as often I use the
5541 both produce the same effect. This is nice, as often I use the
5537 tab-complete to find the name of a method, but I used to then have
5542 tab-complete to find the name of a method, but I used to then have
5538 to go to the beginning of the line to put a ? if I wanted more
5543 to go to the beginning of the line to put a ? if I wanted more
5539 info. Now I can just add the ? and hit return. Convenient.
5544 info. Now I can just add the ? and hit return. Convenient.
5540
5545
5541 2001-11-02 Fernando Perez <fperez@colorado.edu>
5546 2001-11-02 Fernando Perez <fperez@colorado.edu>
5542
5547
5543 * Python version check (>=2.1) added.
5548 * Python version check (>=2.1) added.
5544
5549
5545 * Added LazyPython documentation. At this point the docs are quite
5550 * Added LazyPython documentation. At this point the docs are quite
5546 a mess. A cleanup is in order.
5551 a mess. A cleanup is in order.
5547
5552
5548 * Auto-installer created. For some bizarre reason, the zipfiles
5553 * Auto-installer created. For some bizarre reason, the zipfiles
5549 module isn't working on my system. So I made a tar version
5554 module isn't working on my system. So I made a tar version
5550 (hopefully the command line options in various systems won't kill
5555 (hopefully the command line options in various systems won't kill
5551 me).
5556 me).
5552
5557
5553 * Fixes to Struct in genutils. Now all dictionary-like methods are
5558 * Fixes to Struct in genutils. Now all dictionary-like methods are
5554 protected (reasonably).
5559 protected (reasonably).
5555
5560
5556 * Added pager function to genutils and changed ? to print usage
5561 * Added pager function to genutils and changed ? to print usage
5557 note through it (it was too long).
5562 note through it (it was too long).
5558
5563
5559 * Added the LazyPython functionality. Works great! I changed the
5564 * Added the LazyPython functionality. Works great! I changed the
5560 auto-quote escape to ';', it's on home row and next to '. But
5565 auto-quote escape to ';', it's on home row and next to '. But
5561 both auto-quote and auto-paren (still /) escapes are command-line
5566 both auto-quote and auto-paren (still /) escapes are command-line
5562 parameters.
5567 parameters.
5563
5568
5564
5569
5565 2001-11-01 Fernando Perez <fperez@colorado.edu>
5570 2001-11-01 Fernando Perez <fperez@colorado.edu>
5566
5571
5567 * Version changed to 0.0.7. Fairly large change: configuration now
5572 * Version changed to 0.0.7. Fairly large change: configuration now
5568 is all stored in a directory, by default .ipython. There, all
5573 is all stored in a directory, by default .ipython. There, all
5569 config files have normal looking names (not .names)
5574 config files have normal looking names (not .names)
5570
5575
5571 * Version 0.0.6 Released first to Lucas and Archie as a test
5576 * Version 0.0.6 Released first to Lucas and Archie as a test
5572 run. Since it's the first 'semi-public' release, change version to
5577 run. Since it's the first 'semi-public' release, change version to
5573 > 0.0.6 for any changes now.
5578 > 0.0.6 for any changes now.
5574
5579
5575 * Stuff I had put in the ipplib.py changelog:
5580 * Stuff I had put in the ipplib.py changelog:
5576
5581
5577 Changes to InteractiveShell:
5582 Changes to InteractiveShell:
5578
5583
5579 - Made the usage message a parameter.
5584 - Made the usage message a parameter.
5580
5585
5581 - Require the name of the shell variable to be given. It's a bit
5586 - Require the name of the shell variable to be given. It's a bit
5582 of a hack, but allows the name 'shell' not to be hardwired in the
5587 of a hack, but allows the name 'shell' not to be hardwired in the
5583 magic (@) handler, which is problematic b/c it requires
5588 magic (@) handler, which is problematic b/c it requires
5584 polluting the global namespace with 'shell'. This in turn is
5589 polluting the global namespace with 'shell'. This in turn is
5585 fragile: if a user redefines a variable called shell, things
5590 fragile: if a user redefines a variable called shell, things
5586 break.
5591 break.
5587
5592
5588 - magic @: all functions available through @ need to be defined
5593 - magic @: all functions available through @ need to be defined
5589 as magic_<name>, even though they can be called simply as
5594 as magic_<name>, even though they can be called simply as
5590 @<name>. This allows the special command @magic to gather
5595 @<name>. This allows the special command @magic to gather
5591 information automatically about all existing magic functions,
5596 information automatically about all existing magic functions,
5592 even if they are run-time user extensions, by parsing the shell
5597 even if they are run-time user extensions, by parsing the shell
5593 instance __dict__ looking for special magic_ names.
5598 instance __dict__ looking for special magic_ names.
5594
5599
5595 - mainloop: added *two* local namespace parameters. This allows
5600 - mainloop: added *two* local namespace parameters. This allows
5596 the class to differentiate between parameters which were there
5601 the class to differentiate between parameters which were there
5597 before and after command line initialization was processed. This
5602 before and after command line initialization was processed. This
5598 way, later @who can show things loaded at startup by the
5603 way, later @who can show things loaded at startup by the
5599 user. This trick was necessary to make session saving/reloading
5604 user. This trick was necessary to make session saving/reloading
5600 really work: ideally after saving/exiting/reloading a session,
5605 really work: ideally after saving/exiting/reloading a session,
5601 *everything* should look the same, including the output of @who. I
5606 *everything* should look the same, including the output of @who. I
5602 was only able to make this work with this double namespace
5607 was only able to make this work with this double namespace
5603 trick.
5608 trick.
5604
5609
5605 - added a header to the logfile which allows (almost) full
5610 - added a header to the logfile which allows (almost) full
5606 session restoring.
5611 session restoring.
5607
5612
5608 - prepend lines beginning with @ or !, with a and log
5613 - prepend lines beginning with @ or !, with a and log
5609 them. Why? !lines: may be useful to know what you did @lines:
5614 them. Why? !lines: may be useful to know what you did @lines:
5610 they may affect session state. So when restoring a session, at
5615 they may affect session state. So when restoring a session, at
5611 least inform the user of their presence. I couldn't quite get
5616 least inform the user of their presence. I couldn't quite get
5612 them to properly re-execute, but at least the user is warned.
5617 them to properly re-execute, but at least the user is warned.
5613
5618
5614 * Started ChangeLog.
5619 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now