##// END OF EJS Templates
Add a class _CommandInput that implements the basic functionality of...
walter.doerwald -
Show More
@@ -1,1395 +1,1516 b''
1 1 # -*- coding: iso-8859-1 -*-
2 2
3 3 import curses, textwrap
4 4
5 5 import astyle, ipipe
6 6
7 7
8 8 _ibrowse_help = """
9 9 down
10 10 Move the cursor to the next line.
11 11
12 12 up
13 13 Move the cursor to the previous line.
14 14
15 15 pagedown
16 16 Move the cursor down one page (minus overlap).
17 17
18 18 pageup
19 19 Move the cursor up one page (minus overlap).
20 20
21 21 left
22 22 Move the cursor left.
23 23
24 24 right
25 25 Move the cursor right.
26 26
27 27 home
28 28 Move the cursor to the first column.
29 29
30 30 end
31 31 Move the cursor to the last column.
32 32
33 33 prevattr
34 34 Move the cursor one attribute column to the left.
35 35
36 36 nextattr
37 37 Move the cursor one attribute column to the right.
38 38
39 39 pick
40 40 'Pick' the object under the cursor (i.e. the row the cursor is on). This
41 41 leaves the browser and returns the picked object to the caller. (In IPython
42 42 this object will be available as the '_' variable.)
43 43
44 44 pickattr
45 45 'Pick' the attribute under the cursor (i.e. the row/column the cursor is on).
46 46
47 47 pickallattrs
48 48 Pick' the complete column under the cursor (i.e. the attribute under the
49 49 cursor) from all currently fetched objects. These attributes will be returned
50 50 as a list.
51 51
52 52 tooglemark
53 53 Mark/unmark the object under the cursor. Marked objects have a '!' after the
54 54 row number).
55 55
56 56 pickmarked
57 57 'Pick' marked objects. Marked objects will be returned as a list.
58 58
59 59 pickmarkedattr
60 60 'Pick' the attribute under the cursor from all marked objects (This returns a
61 61 list).
62 62
63 63 enterdefault
64 64 Enter the object under the cursor. (what this mean depends on the object
65 65 itself (i.e. how it implements the '__xiter__' method). This opens a new
66 66 browser 'level'.
67 67
68 68 enter
69 69 Enter the object under the cursor. If the object provides different enter
70 70 modes a menu of all modes will be presented; choose one and enter it (via the
71 71 'enter' or 'enterdefault' command).
72 72
73 73 enterattr
74 74 Enter the attribute under the cursor.
75 75
76 76 leave
77 77 Leave the current browser level and go back to the previous one.
78 78
79 79 detail
80 80 Show a detail view of the object under the cursor. This shows the name, type,
81 81 doc string and value of the object attributes (and it might show more
82 82 attributes than in the list view, depending on the object).
83 83
84 84 detailattr
85 85 Show a detail view of the attribute under the cursor.
86 86
87 87 markrange
88 88 Mark all objects from the last marked object before the current cursor
89 89 position to the cursor position.
90 90
91 91 sortattrasc
92 92 Sort the objects (in ascending order) using the attribute under the cursor as
93 93 the sort key.
94 94
95 95 sortattrdesc
96 96 Sort the objects (in descending order) using the attribute under the cursor as
97 97 the sort key.
98 98
99 99 goto
100 100 Jump to a row. The row number can be entered at the bottom of the screen.
101 101
102 102 find
103 103 Search forward for a row. At the bottom of the screen the condition can be
104 104 entered.
105 105
106 106 findbackwards
107 107 Search backward for a row. At the bottom of the screen the condition can be
108 108 entered.
109 109
110 110 help
111 111 This screen.
112 112 """
113 113
114 114
115 115 class UnassignedKeyError(Exception):
116 116 """
117 117 Exception that is used for reporting unassigned keys.
118 118 """
119 119
120 120
121 121 class UnknownCommandError(Exception):
122 122 """
123 123 Exception that is used for reporting unknown command (this should never
124 124 happen).
125 125 """
126 126
127 127
128 128 class CommandError(Exception):
129 129 """
130 130 Exception that is used for reporting that a command can't be executed.
131 131 """
132 132
133 133
134 134 class _BrowserCachedItem(object):
135 135 # This is used internally by ``ibrowse`` to store a item together with its
136 136 # marked status.
137 137 __slots__ = ("item", "marked")
138 138
139 139 def __init__(self, item):
140 140 self.item = item
141 141 self.marked = False
142 142
143 143
144 144 class _BrowserHelp(object):
145 145 style_header = astyle.Style.fromstr("red:blacK")
146 146 # This is used internally by ``ibrowse`` for displaying the help screen.
147 147 def __init__(self, browser):
148 148 self.browser = browser
149 149
150 150 def __xrepr__(self, mode):
151 151 yield (-1, True)
152 152 if mode == "header" or mode == "footer":
153 153 yield (astyle.style_default, "ibrowse help screen")
154 154 else:
155 155 yield (astyle.style_default, repr(self))
156 156
157 157 def __xiter__(self, mode):
158 158 # Get reverse key mapping
159 159 allkeys = {}
160 160 for (key, cmd) in self.browser.keymap.iteritems():
161 161 allkeys.setdefault(cmd, []).append(key)
162 162
163 163 fields = ("key", "description")
164 164
165 165 for (i, command) in enumerate(_ibrowse_help.strip().split("\n\n")):
166 166 if i:
167 167 yield ipipe.Fields(fields, key="", description="")
168 168
169 169 (name, description) = command.split("\n", 1)
170 170 keys = allkeys.get(name, [])
171 171 lines = textwrap.wrap(description, 60)
172 172
173 173 yield ipipe.Fields(fields, description=astyle.Text((self.style_header, name)))
174 174 for i in xrange(max(len(keys), len(lines))):
175 175 try:
176 176 key = self.browser.keylabel(keys[i])
177 177 except IndexError:
178 178 key = ""
179 179 try:
180 180 line = lines[i]
181 181 except IndexError:
182 182 line = ""
183 183 yield ipipe.Fields(fields, key=key, description=line)
184 184
185 185
186 186 class _BrowserLevel(object):
187 187 # This is used internally to store the state (iterator, fetch items,
188 188 # position of cursor and screen, etc.) of one browser level
189 189 # An ``ibrowse`` object keeps multiple ``_BrowserLevel`` objects in
190 190 # a stack.
191 191 def __init__(self, browser, input, iterator, mainsizey, *attrs):
192 192 self.browser = browser
193 193 self.input = input
194 194 self.header = [x for x in ipipe.xrepr(input, "header") if not isinstance(x[0], int)]
195 195 # iterator for the input
196 196 self.iterator = iterator
197 197
198 198 # is the iterator exhausted?
199 199 self.exhausted = False
200 200
201 201 # attributes to be display (autodetected if empty)
202 202 self.attrs = attrs
203 203
204 204 # fetched items (+ marked flag)
205 205 self.items = ipipe.deque()
206 206
207 207 # Number of marked objects
208 208 self.marked = 0
209 209
210 210 # Vertical cursor position
211 211 self.cury = 0
212 212
213 213 # Horizontal cursor position
214 214 self.curx = 0
215 215
216 216 # Index of first data column
217 217 self.datastartx = 0
218 218
219 219 # Index of first data line
220 220 self.datastarty = 0
221 221
222 222 # height of the data display area
223 223 self.mainsizey = mainsizey
224 224
225 225 # width of the data display area (changes when scrolling)
226 226 self.mainsizex = 0
227 227
228 228 # Size of row number (changes when scrolling)
229 229 self.numbersizex = 0
230 230
231 231 # Attribute names to display (in this order)
232 232 self.displayattrs = []
233 233
234 234 # index and name of attribute under the cursor
235 235 self.displayattr = (None, ipipe.noitem)
236 236
237 237 # Maps attribute names to column widths
238 238 self.colwidths = {}
239 239
240 240 self.fetch(mainsizey)
241 241 self.calcdisplayattrs()
242 242 # formatted attributes for the items on screen
243 243 # (i.e. self.items[self.datastarty:self.datastarty+self.mainsizey])
244 244 self.displayrows = [self.getrow(i) for i in xrange(len(self.items))]
245 245 self.calcwidths()
246 246 self.calcdisplayattr()
247 247
248 248 def fetch(self, count):
249 249 # Try to fill ``self.items`` with at least ``count`` objects.
250 250 have = len(self.items)
251 251 while not self.exhausted and have < count:
252 252 try:
253 253 item = self.iterator.next()
254 254 except StopIteration:
255 255 self.exhausted = True
256 256 break
257 257 else:
258 258 have += 1
259 259 self.items.append(_BrowserCachedItem(item))
260 260
261 261 def calcdisplayattrs(self):
262 262 # Calculate which attributes are available from the objects that are
263 263 # currently visible on screen (and store it in ``self.displayattrs``)
264 264 attrnames = set()
265 265 # If the browser object specifies a fixed list of attributes,
266 266 # simply use it.
267 267 if self.attrs:
268 268 self.displayattrs = self.attrs
269 269 else:
270 270 self.displayattrs = []
271 271 endy = min(self.datastarty+self.mainsizey, len(self.items))
272 272 for i in xrange(self.datastarty, endy):
273 273 for attrname in ipipe.xattrs(self.items[i].item, "default"):
274 274 if attrname not in attrnames:
275 275 self.displayattrs.append(attrname)
276 276 attrnames.add(attrname)
277 277
278 278 def getrow(self, i):
279 279 # Return a dictinary with the attributes for the object
280 280 # ``self.items[i]``. Attribute names are taken from
281 281 # ``self.displayattrs`` so ``calcdisplayattrs()`` must have been
282 282 # called before.
283 283 row = {}
284 284 item = self.items[i].item
285 285 for attrname in self.displayattrs:
286 286 try:
287 287 value = ipipe._getattr(item, attrname, ipipe.noitem)
288 288 except (KeyboardInterrupt, SystemExit):
289 289 raise
290 290 except Exception, exc:
291 291 value = exc
292 292 # only store attribute if it exists (or we got an exception)
293 293 if value is not ipipe.noitem:
294 294 # remember alignment, length and colored text
295 295 row[attrname] = ipipe.xformat(value, "cell", self.browser.maxattrlength)
296 296 return row
297 297
298 298 def calcwidths(self):
299 299 # Recalculate the displayed fields and their width.
300 300 # ``calcdisplayattrs()'' must have been called and the cache
301 301 # for attributes of the objects on screen (``self.displayrows``)
302 302 # must have been filled. This returns a dictionary mapping
303 303 # colmn names to width.
304 304 self.colwidths = {}
305 305 for row in self.displayrows:
306 306 for attrname in self.displayattrs:
307 307 try:
308 308 length = row[attrname][1]
309 309 except KeyError:
310 310 length = 0
311 311 # always add attribute to colwidths, even if it doesn't exist
312 312 if attrname not in self.colwidths:
313 313 self.colwidths[attrname] = len(ipipe._attrname(attrname))
314 314 newwidth = max(self.colwidths[attrname], length)
315 315 self.colwidths[attrname] = newwidth
316 316
317 317 # How many characters do we need to paint the item number?
318 318 self.numbersizex = len(str(self.datastarty+self.mainsizey-1))
319 319 # How must space have we got to display data?
320 320 self.mainsizex = self.browser.scrsizex-self.numbersizex-3
321 321 # width of all columns
322 322 self.datasizex = sum(self.colwidths.itervalues()) + len(self.colwidths)
323 323
324 324 def calcdisplayattr(self):
325 325 # Find out on which attribute the cursor is on and store this
326 326 # information in ``self.displayattr``.
327 327 pos = 0
328 328 for (i, attrname) in enumerate(self.displayattrs):
329 329 if pos+self.colwidths[attrname] >= self.curx:
330 330 self.displayattr = (i, attrname)
331 331 break
332 332 pos += self.colwidths[attrname]+1
333 333 else:
334 334 self.displayattr = (None, ipipe.noitem)
335 335
336 336 def moveto(self, x, y, refresh=False):
337 337 # Move the cursor to the position ``(x,y)`` (in data coordinates,
338 338 # not in screen coordinates). If ``refresh`` is true, all cached
339 339 # values will be recalculated (e.g. because the list has been
340 340 # resorted, so screen positions etc. are no longer valid).
341 341 olddatastarty = self.datastarty
342 342 oldx = self.curx
343 343 oldy = self.cury
344 344 x = int(x+0.5)
345 345 y = int(y+0.5)
346 346 newx = x # remember where we wanted to move
347 347 newy = y # remember where we wanted to move
348 348
349 349 scrollbordery = min(self.browser.scrollbordery, self.mainsizey//2)
350 350 scrollborderx = min(self.browser.scrollborderx, self.mainsizex//2)
351 351
352 352 # Make sure that the cursor didn't leave the main area vertically
353 353 if y < 0:
354 354 y = 0
355 355 self.fetch(y+scrollbordery+1) # try to get more items
356 356 if y >= len(self.items):
357 357 y = max(0, len(self.items)-1)
358 358
359 359 # Make sure that the cursor stays on screen vertically
360 360 if y < self.datastarty+scrollbordery:
361 361 self.datastarty = max(0, y-scrollbordery)
362 362 elif y >= self.datastarty+self.mainsizey-scrollbordery:
363 363 self.datastarty = max(0, min(y-self.mainsizey+scrollbordery+1,
364 364 len(self.items)-self.mainsizey))
365 365
366 366 if refresh: # Do we need to refresh the complete display?
367 367 self.calcdisplayattrs()
368 368 endy = min(self.datastarty+self.mainsizey, len(self.items))
369 369 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
370 370 self.calcwidths()
371 371 # Did we scroll vertically => update displayrows
372 372 # and various other attributes
373 373 elif self.datastarty != olddatastarty:
374 374 # Recalculate which attributes we have to display
375 375 olddisplayattrs = self.displayattrs
376 376 self.calcdisplayattrs()
377 377 # If there are new attributes, recreate the cache
378 378 if self.displayattrs != olddisplayattrs:
379 379 endy = min(self.datastarty+self.mainsizey, len(self.items))
380 380 self.displayrows = map(self.getrow, xrange(self.datastarty, endy))
381 381 elif self.datastarty<olddatastarty: # we did scroll up
382 382 # drop rows from the end
383 383 del self.displayrows[self.datastarty-olddatastarty:]
384 384 # fetch new items
385 385 for i in xrange(olddatastarty-1,
386 386 self.datastarty-1, -1):
387 387 try:
388 388 row = self.getrow(i)
389 389 except IndexError:
390 390 # we didn't have enough objects to fill the screen
391 391 break
392 392 self.displayrows.insert(0, row)
393 393 else: # we did scroll down
394 394 # drop rows from the start
395 395 del self.displayrows[:self.datastarty-olddatastarty]
396 396 # fetch new items
397 397 for i in xrange(olddatastarty+self.mainsizey,
398 398 self.datastarty+self.mainsizey):
399 399 try:
400 400 row = self.getrow(i)
401 401 except IndexError:
402 402 # we didn't have enough objects to fill the screen
403 403 break
404 404 self.displayrows.append(row)
405 405 self.calcwidths()
406 406
407 407 # Make sure that the cursor didn't leave the data area horizontally
408 408 if x < 0:
409 409 x = 0
410 410 elif x >= self.datasizex:
411 411 x = max(0, self.datasizex-1)
412 412
413 413 # Make sure that the cursor stays on screen horizontally
414 414 if x < self.datastartx+scrollborderx:
415 415 self.datastartx = max(0, x-scrollborderx)
416 416 elif x >= self.datastartx+self.mainsizex-scrollborderx:
417 417 self.datastartx = max(0, min(x-self.mainsizex+scrollborderx+1,
418 418 self.datasizex-self.mainsizex))
419 419
420 420 if x == oldx and y == oldy and (x != newx or y != newy): # couldn't move
421 421 self.browser.beep()
422 422 else:
423 423 self.curx = x
424 424 self.cury = y
425 425 self.calcdisplayattr()
426 426
427 427 def sort(self, key, reverse=False):
428 428 """
429 429 Sort the currently list of items using the key function ``key``. If
430 430 ``reverse`` is true the sort order is reversed.
431 431 """
432 432 curitem = self.items[self.cury] # Remember where the cursor is now
433 433
434 434 # Sort items
435 435 def realkey(item):
436 436 return key(item.item)
437 437 self.items = ipipe.deque(sorted(self.items, key=realkey, reverse=reverse))
438 438
439 439 # Find out where the object under the cursor went
440 440 cury = self.cury
441 441 for (i, item) in enumerate(self.items):
442 442 if item is curitem:
443 443 cury = i
444 444 break
445 445
446 446 self.moveto(self.curx, cury, refresh=True)
447 447
448 448
449 class _CommandInput(object):
450 keymap = {
451 curses.KEY_LEFT: "left",
452 curses.KEY_RIGHT: "right",
453 curses.KEY_HOME: "home",
454 curses.KEY_END: "end",
455 # FIXME: What's happening here?
456 8: "backspace",
457 127: "backspace",
458 curses.KEY_BACKSPACE: "backspace",
459 curses.KEY_DC: "delete",
460 ord("x"): "delete",
461 ord("\n"): "execute",
462 ord("\r"): "execute",
463 curses.KEY_UP: "up",
464 curses.KEY_DOWN: "down",
465 # CTRL-X
466 0x18: "exit",
467 }
468
469 def __init__(self, prompt):
470 self.prompt = prompt
471 self.history = []
472 self.maxhistory = 100
473 self.input = ""
474 self.curx = 0
475 self.cury = -1 # blank line
476
477 def start(self):
478 self.input = ""
479 self.curx = 0
480 self.cury = -1 # blank line
481
482 def handlekey(self, browser, key):
483 cmdname = self.keymap.get(key, None)
484 if cmdname is not None:
485 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
486 if cmdfunc is not None:
487 return cmdfunc(browser)
488 curses.beep()
489 elif key != -1:
490 try:
491 char = chr(key)
492 except ValueError:
493 curses.beep()
494 else:
495 return self.handlechar(browser, char)
496
497 def handlechar(self, browser, char):
498 self.input = self.input[:self.curx] + char + self.input[self.curx:]
499 self.curx += 1
500 return True
501
502 def dohistory(self):
503 self.history.insert(0, self.input)
504 del self.history[:-self.maxhistory]
505
506 def cmd_backspace(self, browser):
507 if self.curx:
508 self.input = self.input[:self.curx-1] + self.input[self.curx:]
509 self.curx -= 1
510 return True
511 else:
512 curses.beep()
513
514 def cmd_delete(self, browser):
515 if self.curx<len(self.input):
516 self.input = self.input[:self.curx] + self.input[self.curx+1:]
517 return True
518 else:
519 curses.beep()
520
521 def cmd_left(self, browser):
522 if self.curx:
523 self.curx -= 1
524 return True
525 else:
526 curses.beep()
527
528 def cmd_right(self, browser):
529 if self.curx < len(self.input):
530 self.curx += 1
531 return True
532 else:
533 curses.beep()
534
535 def cmd_home(self, browser):
536 if self.curx:
537 self.curx = 0
538 return True
539 else:
540 curses.beep()
541
542 def cmd_end(self, browser):
543 if self.curx < len(self.input):
544 self.curx = len(self.input)
545 return True
546 else:
547 curses.beep()
548
549 def cmd_up(self, browser):
550 if self.cury < len(self.history)-1:
551 self.cury += 1
552 self.input = self.history[self.cury]
553 self.curx = len(self.input)
554 return True
555 else:
556 curses.beep()
557
558 def cmd_down(self, browser):
559 if self.cury >= 0:
560 self.cury -= 1
561 if self.cury>=0:
562 self.input = self.history[self.cury]
563 else:
564 self.input = ""
565 self.curx = len(self.input)
566 return True
567 else:
568 curses.beep()
569
570 def cmd_exit(self, browser):
571 browser.mode = "default"
572 return True
573
574 def cmd_execute(self, browser):
575 raise NotImplementedError
576
577
578 class _CommandGoto(_CommandInput):
579 def __init__(self):
580 _CommandInput.__init__(self, "goto object #")
581
582 def handlechar(self, browser, char):
583 # Only accept digits
584 if not "0" <= char <= "9":
585 curses.beep()
586 else:
587 return _CommandInput.handlechar(self, browser, char)
588
589 def cmd_execute(self, browser):
590 level = browser.levels[-1]
591 if self.input:
592 self.dohistory()
593 level.moveto(level.curx, int(self.input))
594 browser.mode = "default"
595 return True
596
597
598 class _CommandFind(_CommandInput):
599 def __init__(self):
600 _CommandInput.__init__(self, "find expression")
601
602 def cmd_execute(self, browser):
603 level = browser.levels[-1]
604 if self.input:
605 self.dohistory()
606 while True:
607 cury = level.cury
608 level.moveto(level.curx, cury+1)
609 if cury == level.cury:
610 curses.beep()
611 break # hit end
612 item = level.items[level.cury].item
613 try:
614 globals = ipipe.getglobals(None)
615 if eval(self.input, globals, ipipe.AttrNamespace(item)):
616 break # found something
617 except (KeyboardInterrupt, SystemExit):
618 raise
619 except Exception, exc:
620 browser.report(exc)
621 curses.beep()
622 break # break on error
623 browser.mode = "default"
624 return True
625
626
627 class _CommandFindBackwards(_CommandInput):
628 def __init__(self):
629 _CommandInput.__init__(self, "find backwards expression")
630
631 def cmd_execute(self, browser):
632 level = browser.levels[-1]
633 if self.input:
634 self.dohistory()
635 while level.cury:
636 level.moveto(level.curx, level.cury-1)
637 item = level.items[level.cury].item
638 try:
639 globals = ipipe.getglobals(None)
640 if eval(self.input, globals, ipipe.AttrNamespace(item)):
641 break # found something
642 except (KeyboardInterrupt, SystemExit):
643 raise
644 except Exception, exc:
645 browser.report(exc)
646 curses.beep()
647 break # break on error
648 else:
649 curses.beep()
650 browser.mode = "default"
651 return True
652
653
449 654 class ibrowse(ipipe.Display):
450 655 # Show this many lines from the previous screen when paging horizontally
451 656 pageoverlapx = 1
452 657
453 658 # Show this many lines from the previous screen when paging vertically
454 659 pageoverlapy = 1
455 660
456 661 # Start scrolling when the cursor is less than this number of columns
457 662 # away from the left or right screen edge
458 663 scrollborderx = 10
459 664
460 665 # Start scrolling when the cursor is less than this number of lines
461 666 # away from the top or bottom screen edge
462 667 scrollbordery = 5
463 668
464 669 # Accelerate by this factor when scrolling horizontally
465 670 acceleratex = 1.05
466 671
467 672 # Accelerate by this factor when scrolling vertically
468 673 acceleratey = 1.05
469 674
470 675 # The maximum horizontal scroll speed
471 676 # (as a factor of the screen width (i.e. 0.5 == half a screen width)
472 677 maxspeedx = 0.5
473 678
474 679 # The maximum vertical scroll speed
475 680 # (as a factor of the screen height (i.e. 0.5 == half a screen height)
476 681 maxspeedy = 0.5
477 682
478 683 # The maximum number of header lines for browser level
479 684 # if the nesting is deeper, only the innermost levels are displayed
480 685 maxheaders = 5
481 686
482 687 # The approximate maximum length of a column entry
483 688 maxattrlength = 200
484 689
485 690 # Styles for various parts of the GUI
486 691 style_objheadertext = astyle.Style.fromstr("white:black:bold|reverse")
487 692 style_objheadernumber = astyle.Style.fromstr("white:blue:bold|reverse")
488 693 style_objheaderobject = astyle.Style.fromstr("white:black:reverse")
489 694 style_colheader = astyle.Style.fromstr("blue:white:reverse")
490 695 style_colheaderhere = astyle.Style.fromstr("green:black:bold|reverse")
491 696 style_colheadersep = astyle.Style.fromstr("blue:black:reverse")
492 697 style_number = astyle.Style.fromstr("blue:white:reverse")
493 698 style_numberhere = astyle.Style.fromstr("green:black:bold|reverse")
494 699 style_sep = astyle.Style.fromstr("blue:black")
495 700 style_data = astyle.Style.fromstr("white:black")
496 701 style_datapad = astyle.Style.fromstr("blue:black:bold")
497 702 style_footer = astyle.Style.fromstr("black:white")
498 703 style_report = astyle.Style.fromstr("white:black")
499 704
500 705 # Column separator in header
501 706 headersepchar = "|"
502 707
503 708 # Character for padding data cell entries
504 709 datapadchar = "."
505 710
506 711 # Column separator in data area
507 712 datasepchar = "|"
508 713
509 714 # Character to use for "empty" cell (i.e. for non-existing attributes)
510 715 nodatachar = "-"
511 716
512 717 # Prompts for modes that require keyboard input
513 718 prompts = {
514 "goto": "goto object #: ",
515 "find": "find expression: ",
516 "findbackwards": "find backwards expression: "
719 "goto": _CommandGoto(),
720 "find": _CommandFind(),
721 "findbackwards": _CommandFindBackwards()
517 722 }
518 723
519 724 # Maps curses key codes to "function" names
520 725 keymap = {
521 726 ord("q"): "quit",
522 727 curses.KEY_UP: "up",
523 728 curses.KEY_DOWN: "down",
524 729 curses.KEY_PPAGE: "pageup",
525 730 curses.KEY_NPAGE: "pagedown",
526 731 curses.KEY_LEFT: "left",
527 732 curses.KEY_RIGHT: "right",
528 733 curses.KEY_HOME: "home",
529 734 curses.KEY_END: "end",
530 735 ord("<"): "prevattr",
531 736 0x1b: "prevattr", # SHIFT-TAB
532 737 ord(">"): "nextattr",
533 738 ord("\t"):"nextattr", # TAB
534 739 ord("p"): "pick",
535 740 ord("P"): "pickattr",
536 741 ord("C"): "pickallattrs",
537 742 ord("m"): "pickmarked",
538 743 ord("M"): "pickmarkedattr",
539 744 ord("\n"): "enterdefault",
745 ord("\r"): "enterdefault",
540 746 # FIXME: What's happening here?
541 747 8: "leave",
542 748 127: "leave",
543 749 curses.KEY_BACKSPACE: "leave",
544 750 ord("x"): "leave",
545 751 ord("h"): "help",
546 752 ord("e"): "enter",
547 753 ord("E"): "enterattr",
548 754 ord("d"): "detail",
549 755 ord("D"): "detailattr",
550 756 ord(" "): "tooglemark",
551 757 ord("r"): "markrange",
552 758 ord("v"): "sortattrasc",
553 759 ord("V"): "sortattrdesc",
554 760 ord("g"): "goto",
555 761 ord("f"): "find",
556 762 ord("b"): "findbackwards",
557 763 }
558 764
559 765 def __init__(self, *attrs):
560 766 """
561 767 Create a new browser. If ``attrs`` is not empty, it is the list
562 768 of attributes that will be displayed in the browser, otherwise
563 769 these will be determined by the objects on screen.
564 770 """
565 771 self.attrs = attrs
566 772
567 773 # Stack of browser levels
568 774 self.levels = []
569 775 # how many colums to scroll (Changes when accelerating)
570 776 self.stepx = 1.
571 777
572 778 # how many rows to scroll (Changes when accelerating)
573 779 self.stepy = 1.
574 780
575 781 # Beep on the edges of the data area? (Will be set to ``False``
576 782 # once the cursor hits the edge of the screen, so we don't get
577 783 # multiple beeps).
578 784 self._dobeep = True
579 785
580 786 # Cache for registered ``curses`` colors and styles.
581 787 self._styles = {}
582 788 self._colors = {}
583 789 self._maxcolor = 1
584 790
585 791 # How many header lines do we want to paint (the numbers of levels
586 792 # we have, but with an upper bound)
587 793 self._headerlines = 1
588 794
589 795 # Index of first header line
590 796 self._firstheaderline = 0
591 797
592 798 # curses window
593 799 self.scr = None
594 800 # report in the footer line (error, executed command etc.)
595 801 self._report = None
596 802
597 803 # value to be returned to the caller (set by commands)
598 804 self.returnvalue = None
599 805
600 806 # The mode the browser is in
601 807 # e.g. normal browsing or entering an argument for a command
602 808 self.mode = "default"
603 809
604 810 # The partially entered row number for the goto command
605 811 self.goto = ""
606 812
607 813 def nextstepx(self, step):
608 814 """
609 815 Accelerate horizontally.
610 816 """
611 817 return max(1., min(step*self.acceleratex,
612 818 self.maxspeedx*self.levels[-1].mainsizex))
613 819
614 820 def nextstepy(self, step):
615 821 """
616 822 Accelerate vertically.
617 823 """
618 824 return max(1., min(step*self.acceleratey,
619 825 self.maxspeedy*self.levels[-1].mainsizey))
620 826
621 827 def getstyle(self, style):
622 828 """
623 829 Register the ``style`` with ``curses`` or get it from the cache,
624 830 if it has been registered before.
625 831 """
626 832 try:
627 833 return self._styles[style.fg, style.bg, style.attrs]
628 834 except KeyError:
629 835 attrs = 0
630 836 for b in astyle.A2CURSES:
631 837 if style.attrs & b:
632 838 attrs |= astyle.A2CURSES[b]
633 839 try:
634 840 color = self._colors[style.fg, style.bg]
635 841 except KeyError:
636 842 curses.init_pair(
637 843 self._maxcolor,
638 844 astyle.COLOR2CURSES[style.fg],
639 845 astyle.COLOR2CURSES[style.bg]
640 846 )
641 847 color = curses.color_pair(self._maxcolor)
642 848 self._colors[style.fg, style.bg] = color
643 849 self._maxcolor += 1
644 850 c = color | attrs
645 851 self._styles[style.fg, style.bg, style.attrs] = c
646 852 return c
647 853
648 854 def addstr(self, y, x, begx, endx, text, style):
649 855 """
650 856 A version of ``curses.addstr()`` that can handle ``x`` coordinates
651 857 that are outside the screen.
652 858 """
653 859 text2 = text[max(0, begx-x):max(0, endx-x)]
654 860 if text2:
655 861 self.scr.addstr(y, max(x, begx), text2, self.getstyle(style))
656 862 return len(text)
657 863
658 864 def addchr(self, y, x, begx, endx, c, l, style):
659 865 x0 = max(x, begx)
660 866 x1 = min(x+l, endx)
661 867 if x1>x0:
662 868 self.scr.addstr(y, x0, c*(x1-x0), self.getstyle(style))
663 869 return l
664 870
665 871 def _calcheaderlines(self, levels):
666 872 # Calculate how many headerlines do we have to display, if we have
667 873 # ``levels`` browser levels
668 874 if levels is None:
669 875 levels = len(self.levels)
670 876 self._headerlines = min(self.maxheaders, levels)
671 877 self._firstheaderline = levels-self._headerlines
672 878
673 879 def getstylehere(self, style):
674 880 """
675 881 Return a style for displaying the original style ``style``
676 882 in the row the cursor is on.
677 883 """
678 884 return astyle.Style(style.fg, style.bg, style.attrs | astyle.A_BOLD)
679 885
680 886 def report(self, msg):
681 887 """
682 888 Store the message ``msg`` for display below the footer line. This
683 889 will be displayed as soon as the screen is redrawn.
684 890 """
685 891 self._report = msg
686 892
687 893 def enter(self, item, mode, *attrs):
688 894 """
689 895 Enter the object ``item`` in the mode ``mode``. If ``attrs`` is
690 896 specified, it will be used as a fixed list of attributes to display.
691 897 """
692 898 try:
693 899 iterator = ipipe.xiter(item, mode)
694 900 except (KeyboardInterrupt, SystemExit):
695 901 raise
696 902 except Exception, exc:
697 903 curses.beep()
698 904 self.report(exc)
699 905 else:
700 906 self._calcheaderlines(len(self.levels)+1)
701 907 level = _BrowserLevel(
702 908 self,
703 909 item,
704 910 iterator,
705 911 self.scrsizey-1-self._headerlines-2,
706 912 *attrs
707 913 )
708 914 self.levels.append(level)
709 915
710 916 def startkeyboardinput(self, mode):
711 917 """
712 918 Enter mode ``mode``, which requires keyboard input.
713 919 """
714 920 self.mode = mode
715 self.keyboardinput = ""
716 self.cursorpos = 0
717
718 def executekeyboardinput(self, mode):
719 exe = getattr(self, "exe_%s" % mode, None)
720 if exe is not None:
721 exe()
722 self.mode = "default"
921 self.prompts[mode].start()
723 922
724 923 def keylabel(self, keycode):
725 924 """
726 925 Return a pretty name for the ``curses`` key ``keycode`` (used in the
727 926 help screen and in reports about unassigned keys).
728 927 """
729 928 if keycode <= 0xff:
730 929 specialsnames = {
731 930 ord("\n"): "RETURN",
732 931 ord(" "): "SPACE",
733 932 ord("\t"): "TAB",
734 933 ord("\x7f"): "DELETE",
735 934 ord("\x08"): "BACKSPACE",
736 935 }
737 936 if keycode in specialsnames:
738 937 return specialsnames[keycode]
739 938 return repr(chr(keycode))
740 939 for name in dir(curses):
741 940 if name.startswith("KEY_") and getattr(curses, name) == keycode:
742 941 return name
743 942 return str(keycode)
744 943
745 944 def beep(self, force=False):
746 945 if force or self._dobeep:
747 946 curses.beep()
748 947 # don't beep again (as long as the same key is pressed)
749 948 self._dobeep = False
750 949
751 950 def cmd_quit(self):
752 951 self.returnvalue = None
753 952 return True
754 953
755 954 def cmd_up(self):
756 955 level = self.levels[-1]
757 956 self.report("up")
758 957 level.moveto(level.curx, level.cury-self.stepy)
759 958
760 959 def cmd_down(self):
761 960 level = self.levels[-1]
762 961 self.report("down")
763 962 level.moveto(level.curx, level.cury+self.stepy)
764 963
765 964 def cmd_pageup(self):
766 965 level = self.levels[-1]
767 966 self.report("page up")
768 967 level.moveto(level.curx, level.cury-level.mainsizey+self.pageoverlapy)
769 968
770 969 def cmd_pagedown(self):
771 970 level = self.levels[-1]
772 971 self.report("page down")
773 972 level.moveto(level.curx, level.cury+level.mainsizey-self.pageoverlapy)
774 973
775 974 def cmd_left(self):
776 975 level = self.levels[-1]
777 976 self.report("left")
778 977 level.moveto(level.curx-self.stepx, level.cury)
779 978
780 979 def cmd_right(self):
781 980 level = self.levels[-1]
782 981 self.report("right")
783 982 level.moveto(level.curx+self.stepx, level.cury)
784 983
785 984 def cmd_home(self):
786 985 level = self.levels[-1]
787 986 self.report("home")
788 987 level.moveto(0, level.cury)
789 988
790 989 def cmd_end(self):
791 990 level = self.levels[-1]
792 991 self.report("end")
793 992 level.moveto(level.datasizex+level.mainsizey-self.pageoverlapx, level.cury)
794 993
795 994 def cmd_prevattr(self):
796 995 level = self.levels[-1]
797 996 if level.displayattr[0] is None or level.displayattr[0] == 0:
798 997 self.beep()
799 998 else:
800 999 self.report("prevattr")
801 1000 pos = 0
802 1001 for (i, attrname) in enumerate(level.displayattrs):
803 1002 if i == level.displayattr[0]-1:
804 1003 break
805 1004 pos += level.colwidths[attrname] + 1
806 1005 level.moveto(pos, level.cury)
807 1006
808 1007 def cmd_nextattr(self):
809 1008 level = self.levels[-1]
810 1009 if level.displayattr[0] is None or level.displayattr[0] == len(level.displayattrs)-1:
811 1010 self.beep()
812 1011 else:
813 1012 self.report("nextattr")
814 1013 pos = 0
815 1014 for (i, attrname) in enumerate(level.displayattrs):
816 1015 if i == level.displayattr[0]+1:
817 1016 break
818 1017 pos += level.colwidths[attrname] + 1
819 1018 level.moveto(pos, level.cury)
820 1019
821 1020 def cmd_pick(self):
822 1021 level = self.levels[-1]
823 1022 self.returnvalue = level.items[level.cury].item
824 1023 return True
825 1024
826 1025 def cmd_pickattr(self):
827 1026 level = self.levels[-1]
828 1027 attrname = level.displayattr[1]
829 1028 if attrname is ipipe.noitem:
830 1029 curses.beep()
831 1030 self.report(AttributeError(ipipe._attrname(attrname)))
832 1031 return
833 1032 attr = ipipe._getattr(level.items[level.cury].item, attrname)
834 1033 if attr is ipipe.noitem:
835 1034 curses.beep()
836 1035 self.report(AttributeError(ipipe._attrname(attrname)))
837 1036 else:
838 1037 self.returnvalue = attr
839 1038 return True
840 1039
841 1040 def cmd_pickallattrs(self):
842 1041 level = self.levels[-1]
843 1042 attrname = level.displayattr[1]
844 1043 if attrname is ipipe.noitem:
845 1044 curses.beep()
846 1045 self.report(AttributeError(ipipe._attrname(attrname)))
847 1046 return
848 1047 result = []
849 1048 for cache in level.items:
850 1049 attr = ipipe._getattr(cache.item, attrname)
851 1050 if attr is not ipipe.noitem:
852 1051 result.append(attr)
853 1052 self.returnvalue = result
854 1053 return True
855 1054
856 1055 def cmd_pickmarked(self):
857 1056 level = self.levels[-1]
858 1057 self.returnvalue = [cache.item for cache in level.items if cache.marked]
859 1058 return True
860 1059
861 1060 def cmd_pickmarkedattr(self):
862 1061 level = self.levels[-1]
863 1062 attrname = level.displayattr[1]
864 1063 if attrname is ipipe.noitem:
865 1064 curses.beep()
866 1065 self.report(AttributeError(ipipe._attrname(attrname)))
867 1066 return
868 1067 result = []
869 1068 for cache in level.items:
870 1069 if cache.marked:
871 1070 attr = ipipe._getattr(cache.item, attrname)
872 1071 if attr is not ipipe.noitem:
873 1072 result.append(attr)
874 1073 self.returnvalue = result
875 1074 return True
876 1075
877 1076 def cmd_markrange(self):
878 1077 level = self.levels[-1]
879 1078 self.report("markrange")
880 1079 start = None
881 1080 if level.items:
882 1081 for i in xrange(level.cury, -1, -1):
883 1082 if level.items[i].marked:
884 1083 start = i
885 1084 break
886 1085 if start is None:
887 1086 self.report(CommandError("no mark before cursor"))
888 1087 curses.beep()
889 1088 else:
890 1089 for i in xrange(start, level.cury+1):
891 1090 cache = level.items[i]
892 1091 if not cache.marked:
893 1092 cache.marked = True
894 1093 level.marked += 1
895 1094
896 1095 def cmd_enterdefault(self):
897 1096 level = self.levels[-1]
898 1097 try:
899 1098 item = level.items[level.cury].item
900 1099 except IndexError:
901 1100 self.report(CommandError("No object"))
902 1101 curses.beep()
903 1102 else:
904 1103 self.report("entering object (default mode)...")
905 1104 self.enter(item, "default")
906 1105
907 1106 def cmd_leave(self):
908 1107 self.report("leave")
909 1108 if len(self.levels) > 1:
910 1109 self._calcheaderlines(len(self.levels)-1)
911 1110 self.levels.pop(-1)
912 1111 else:
913 1112 self.report(CommandError("This is the last level"))
914 1113 curses.beep()
915 1114
916 1115 def cmd_enter(self):
917 1116 level = self.levels[-1]
918 1117 try:
919 1118 item = level.items[level.cury].item
920 1119 except IndexError:
921 1120 self.report(CommandError("No object"))
922 1121 curses.beep()
923 1122 else:
924 1123 self.report("entering object...")
925 1124 self.enter(item, None)
926 1125
927 1126 def cmd_enterattr(self):
928 1127 level = self.levels[-1]
929 1128 attrname = level.displayattr[1]
930 1129 if attrname is ipipe.noitem:
931 1130 curses.beep()
932 1131 self.report(AttributeError(ipipe._attrname(attrname)))
933 1132 return
934 1133 try:
935 1134 item = level.items[level.cury].item
936 1135 except IndexError:
937 1136 self.report(CommandError("No object"))
938 1137 curses.beep()
939 1138 else:
940 1139 attr = ipipe._getattr(item, attrname)
941 1140 if attr is ipipe.noitem:
942 1141 self.report(AttributeError(ipipe._attrname(attrname)))
943 1142 else:
944 1143 self.report("entering object attribute %s..." % ipipe._attrname(attrname))
945 1144 self.enter(attr, None)
946 1145
947 1146 def cmd_detail(self):
948 1147 level = self.levels[-1]
949 1148 try:
950 1149 item = level.items[level.cury].item
951 1150 except IndexError:
952 1151 self.report(CommandError("No object"))
953 1152 curses.beep()
954 1153 else:
955 1154 self.report("entering detail view for object...")
956 1155 self.enter(item, "detail")
957 1156
958 1157 def cmd_detailattr(self):
959 1158 level = self.levels[-1]
960 1159 attrname = level.displayattr[1]
961 1160 if attrname is ipipe.noitem:
962 1161 curses.beep()
963 1162 self.report(AttributeError(ipipe._attrname(attrname)))
964 1163 return
965 1164 try:
966 1165 item = level.items[level.cury].item
967 1166 except IndexError:
968 1167 self.report(CommandError("No object"))
969 1168 curses.beep()
970 1169 else:
971 1170 attr = ipipe._getattr(item, attrname)
972 1171 if attr is ipipe.noitem:
973 1172 self.report(AttributeError(ipipe._attrname(attrname)))
974 1173 else:
975 1174 self.report("entering detail view for attribute...")
976 1175 self.enter(attr, "detail")
977 1176
978 1177 def cmd_tooglemark(self):
979 1178 level = self.levels[-1]
980 1179 self.report("toggle mark")
981 1180 try:
982 1181 item = level.items[level.cury]
983 1182 except IndexError: # no items?
984 1183 pass
985 1184 else:
986 1185 if item.marked:
987 1186 item.marked = False
988 1187 level.marked -= 1
989 1188 else:
990 1189 item.marked = True
991 1190 level.marked += 1
992 1191
993 1192 def cmd_sortattrasc(self):
994 1193 level = self.levels[-1]
995 1194 attrname = level.displayattr[1]
996 1195 if attrname is ipipe.noitem:
997 1196 curses.beep()
998 1197 self.report(AttributeError(ipipe._attrname(attrname)))
999 1198 return
1000 1199 self.report("sort by %s (ascending)" % ipipe._attrname(attrname))
1001 1200 def key(item):
1002 1201 try:
1003 1202 return ipipe._getattr(item, attrname, None)
1004 1203 except (KeyboardInterrupt, SystemExit):
1005 1204 raise
1006 1205 except Exception:
1007 1206 return None
1008 1207 level.sort(key)
1009 1208
1010 1209 def cmd_sortattrdesc(self):
1011 1210 level = self.levels[-1]
1012 1211 attrname = level.displayattr[1]
1013 1212 if attrname is ipipe.noitem:
1014 1213 curses.beep()
1015 1214 self.report(AttributeError(ipipe._attrname(attrname)))
1016 1215 return
1017 1216 self.report("sort by %s (descending)" % ipipe._attrname(attrname))
1018 1217 def key(item):
1019 1218 try:
1020 1219 return ipipe._getattr(item, attrname, None)
1021 1220 except (KeyboardInterrupt, SystemExit):
1022 1221 raise
1023 1222 except Exception:
1024 1223 return None
1025 1224 level.sort(key, reverse=True)
1026 1225
1027 1226 def cmd_goto(self):
1028 1227 self.startkeyboardinput("goto")
1029 1228
1030 def exe_goto(self):
1031 level = self.levels[-1]
1032 if self.keyboardinput:
1033 level.moveto(level.curx, int(self.keyboardinput))
1034
1035 1229 def cmd_find(self):
1036 1230 self.startkeyboardinput("find")
1037 1231
1038 def exe_find(self):
1039 level = self.levels[-1]
1040 if self.keyboardinput:
1041 while True:
1042 cury = level.cury
1043 level.moveto(level.curx, cury+1)
1044 if cury == level.cury:
1045 curses.beep()
1046 break
1047 item = level.items[level.cury].item
1048 try:
1049 globals = ipipe.getglobals(None)
1050 if eval(self.keyboardinput, globals, ipipe.AttrNamespace(item)):
1051 break
1052 except (KeyboardInterrupt, SystemExit):
1053 raise
1054 except Exception, exc:
1055 self.report(exc)
1056 curses.beep()
1057 break # break on error
1058
1059 1232 def cmd_findbackwards(self):
1060 1233 self.startkeyboardinput("findbackwards")
1061 1234
1062 def exe_findbackwards(self):
1063 level = self.levels[-1]
1064 if self.keyboardinput:
1065 while level.cury:
1066 level.moveto(level.curx, level.cury-1)
1067 item = level.items[level.cury].item
1068 try:
1069 globals = ipipe.getglobals(None)
1070 if eval(self.keyboardinput, globals, ipipe.AttrNamespace(item)):
1071 break
1072 except (KeyboardInterrupt, SystemExit):
1073 raise
1074 except Exception, exc:
1075 self.report(exc)
1076 curses.beep()
1077 break # break on error
1078 else:
1079 curses.beep()
1080
1081 1235 def cmd_help(self):
1082 1236 """
1083 1237 The help command
1084 1238 """
1085 1239 for level in self.levels:
1086 1240 if isinstance(level.input, _BrowserHelp):
1087 1241 curses.beep()
1088 1242 self.report(CommandError("help already active"))
1089 1243 return
1090 1244
1091 1245 self.enter(_BrowserHelp(self), "default")
1092 1246
1093 1247 def _dodisplay(self, scr):
1094 1248 """
1095 1249 This method is the workhorse of the browser. It handles screen
1096 1250 drawing and the keyboard.
1097 1251 """
1098 1252 self.scr = scr
1099 1253 curses.halfdelay(1)
1100 1254 footery = 2
1101 1255
1102 1256 keys = []
1103 1257 for (key, cmd) in self.keymap.iteritems():
1104 1258 if cmd == "quit":
1105 1259 keys.append("%s=%s" % (self.keylabel(key), cmd))
1106 1260 for (key, cmd) in self.keymap.iteritems():
1107 1261 if cmd == "help":
1108 1262 keys.append("%s=%s" % (self.keylabel(key), cmd))
1109 1263 helpmsg = " | %s" % " ".join(keys)
1110 1264
1111 1265 scr.clear()
1112 1266 msg = "Fetching first batch of objects..."
1113 1267 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1114 1268 scr.addstr(self.scrsizey//2, (self.scrsizex-len(msg))//2, msg)
1115 1269 scr.refresh()
1116 1270
1117 1271 lastc = -1
1118 1272
1119 1273 self.levels = []
1120 1274 # enter the first level
1121 1275 self.enter(self.input, ipipe.xiter(self.input, "default"), *self.attrs)
1122 1276
1123 1277 self._calcheaderlines(None)
1124 1278
1125 1279 while True:
1126 1280 level = self.levels[-1]
1127 1281 (self.scrsizey, self.scrsizex) = scr.getmaxyx()
1128 1282 level.mainsizey = self.scrsizey-1-self._headerlines-footery
1129 1283
1130 1284 # Paint object header
1131 1285 for i in xrange(self._firstheaderline, self._firstheaderline+self._headerlines):
1132 1286 lv = self.levels[i]
1133 1287 posx = 0
1134 1288 posy = i-self._firstheaderline
1135 1289 endx = self.scrsizex
1136 1290 if i: # not the first level
1137 1291 msg = " (%d/%d" % (self.levels[i-1].cury, len(self.levels[i-1].items))
1138 1292 if not self.levels[i-1].exhausted:
1139 1293 msg += "+"
1140 1294 msg += ") "
1141 1295 endx -= len(msg)+1
1142 1296 posx += self.addstr(posy, posx, 0, endx, " ibrowse #%d: " % i, self.style_objheadertext)
1143 1297 for (style, text) in lv.header:
1144 1298 posx += self.addstr(posy, posx, 0, endx, text, self.style_objheaderobject)
1145 1299 if posx >= endx:
1146 1300 break
1147 1301 if i:
1148 1302 posx += self.addstr(posy, posx, 0, self.scrsizex, msg, self.style_objheadernumber)
1149 1303 posx += self.addchr(posy, posx, 0, self.scrsizex, " ", self.scrsizex-posx, self.style_objheadernumber)
1150 1304
1151 1305 if not level.items:
1152 1306 self.addchr(self._headerlines, 0, 0, self.scrsizex, " ", self.scrsizex, self.style_colheader)
1153 1307 self.addstr(self._headerlines+1, 0, 0, self.scrsizex, " <empty>", astyle.style_error)
1154 1308 scr.clrtobot()
1155 1309 else:
1156 1310 # Paint column headers
1157 1311 scr.move(self._headerlines, 0)
1158 1312 scr.addstr(" %*s " % (level.numbersizex, "#"), self.getstyle(self.style_colheader))
1159 1313 scr.addstr(self.headersepchar, self.getstyle(self.style_colheadersep))
1160 1314 begx = level.numbersizex+3
1161 1315 posx = begx-level.datastartx
1162 1316 for attrname in level.displayattrs:
1163 1317 strattrname = ipipe._attrname(attrname)
1164 1318 cwidth = level.colwidths[attrname]
1165 1319 header = strattrname.ljust(cwidth)
1166 1320 if attrname == level.displayattr[1]:
1167 1321 style = self.style_colheaderhere
1168 1322 else:
1169 1323 style = self.style_colheader
1170 1324 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, header, style)
1171 1325 posx += self.addstr(self._headerlines, posx, begx, self.scrsizex, self.headersepchar, self.style_colheadersep)
1172 1326 if posx >= self.scrsizex:
1173 1327 break
1174 1328 else:
1175 1329 scr.addstr(" "*(self.scrsizex-posx), self.getstyle(self.style_colheader))
1176 1330
1177 1331 # Paint rows
1178 1332 posy = self._headerlines+1+level.datastarty
1179 1333 for i in xrange(level.datastarty, min(level.datastarty+level.mainsizey, len(level.items))):
1180 1334 cache = level.items[i]
1181 1335 if i == level.cury:
1182 1336 style = self.style_numberhere
1183 1337 else:
1184 1338 style = self.style_number
1185 1339
1186 1340 posy = self._headerlines+1+i-level.datastarty
1187 1341 posx = begx-level.datastartx
1188 1342
1189 1343 scr.move(posy, 0)
1190 1344 scr.addstr(" %*d%s" % (level.numbersizex, i, " !"[cache.marked]), self.getstyle(style))
1191 1345 scr.addstr(self.headersepchar, self.getstyle(self.style_sep))
1192 1346
1193 1347 for attrname in level.displayattrs:
1194 1348 cwidth = level.colwidths[attrname]
1195 1349 try:
1196 1350 (align, length, parts) = level.displayrows[i-level.datastarty][attrname]
1197 1351 except KeyError:
1198 1352 align = 2
1199 1353 style = astyle.style_nodata
1200 1354 padstyle = self.style_datapad
1201 1355 sepstyle = self.style_sep
1202 1356 if i == level.cury:
1203 1357 padstyle = self.getstylehere(padstyle)
1204 1358 sepstyle = self.getstylehere(sepstyle)
1205 1359 if align == 2:
1206 1360 posx += self.addchr(posy, posx, begx, self.scrsizex, self.nodatachar, cwidth, style)
1207 1361 else:
1208 1362 if align == 1:
1209 1363 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1210 1364 elif align == 0:
1211 1365 pad1 = (cwidth-length)//2
1212 1366 pad2 = cwidth-length-len(pad1)
1213 1367 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad1, padstyle)
1214 1368 for (style, text) in parts:
1215 1369 if i == level.cury:
1216 1370 style = self.getstylehere(style)
1217 1371 posx += self.addstr(posy, posx, begx, self.scrsizex, text, style)
1218 1372 if posx >= self.scrsizex:
1219 1373 break
1220 1374 if align == -1:
1221 1375 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, cwidth-length, padstyle)
1222 1376 elif align == 0:
1223 1377 posx += self.addchr(posy, posx, begx, self.scrsizex, self.datapadchar, pad2, padstyle)
1224 1378 posx += self.addstr(posy, posx, begx, self.scrsizex, self.datasepchar, sepstyle)
1225 1379 else:
1226 1380 scr.clrtoeol()
1227 1381
1228 1382 # Add blank row headers for the rest of the screen
1229 1383 for posy in xrange(posy+1, self.scrsizey-2):
1230 1384 scr.addstr(posy, 0, " " * (level.numbersizex+2), self.getstyle(self.style_colheader))
1231 1385 scr.clrtoeol()
1232 1386
1233 1387 posy = self.scrsizey-footery
1234 1388 # Display footer
1235 1389 scr.addstr(posy, 0, " "*self.scrsizex, self.getstyle(self.style_footer))
1236 1390
1237 1391 if level.exhausted:
1238 1392 flag = ""
1239 1393 else:
1240 1394 flag = "+"
1241 1395
1242 1396 endx = self.scrsizex-len(helpmsg)-1
1243 1397 scr.addstr(posy, endx, helpmsg, self.getstyle(self.style_footer))
1244 1398
1245 1399 posx = 0
1246 1400 msg = " %d%s objects (%d marked): " % (len(level.items), flag, level.marked)
1247 1401 posx += self.addstr(posy, posx, 0, endx, msg, self.style_footer)
1248 1402 try:
1249 1403 item = level.items[level.cury].item
1250 1404 except IndexError: # empty
1251 1405 pass
1252 1406 else:
1253 1407 for (nostyle, text) in ipipe.xrepr(item, "footer"):
1254 1408 if not isinstance(nostyle, int):
1255 1409 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1256 1410 if posx >= endx:
1257 1411 break
1258 1412
1259 1413 attrstyle = [(astyle.style_default, "no attribute")]
1260 1414 attrname = level.displayattr[1]
1261 1415 if attrname is not ipipe.noitem and attrname is not None:
1262 1416 posx += self.addstr(posy, posx, 0, endx, " | ", self.style_footer)
1263 1417 posx += self.addstr(posy, posx, 0, endx, ipipe._attrname(attrname), self.style_footer)
1264 1418 posx += self.addstr(posy, posx, 0, endx, ": ", self.style_footer)
1265 1419 try:
1266 1420 attr = ipipe._getattr(item, attrname)
1267 1421 except (SystemExit, KeyboardInterrupt):
1268 1422 raise
1269 1423 except Exception, exc:
1270 1424 attr = exc
1271 1425 if attr is not ipipe.noitem:
1272 1426 attrstyle = ipipe.xrepr(attr, "footer")
1273 1427 for (nostyle, text) in attrstyle:
1274 1428 if not isinstance(nostyle, int):
1275 1429 posx += self.addstr(posy, posx, 0, endx, text, self.style_footer)
1276 1430 if posx >= endx:
1277 1431 break
1278 1432
1279 1433 try:
1280 1434 # Display input prompt
1281 1435 if self.mode in self.prompts:
1436 history = self.prompts[self.mode]
1282 1437 scr.addstr(self.scrsizey-1, 0,
1283 self.prompts[self.mode] + self.keyboardinput,
1284 self.getstyle(astyle.style_default))
1438 history.prompt + ": " + history.input,
1439 self.getstyle(astyle.style_default))
1285 1440 # Display report
1286 1441 else:
1287 1442 if self._report is not None:
1288 1443 if isinstance(self._report, Exception):
1289 1444 style = self.getstyle(astyle.style_error)
1290 1445 if self._report.__class__.__module__ == "exceptions":
1291 1446 msg = "%s: %s" % \
1292 1447 (self._report.__class__.__name__, self._report)
1293 1448 else:
1294 1449 msg = "%s.%s: %s" % \
1295 1450 (self._report.__class__.__module__,
1296 1451 self._report.__class__.__name__, self._report)
1297 1452 else:
1298 1453 style = self.getstyle(self.style_report)
1299 1454 msg = self._report
1300 1455 scr.addstr(self.scrsizey-1, 0, msg[:self.scrsizex], style)
1301 1456 self._report = None
1302 1457 else:
1303 1458 scr.move(self.scrsizey-1, 0)
1304 1459 except curses.error:
1305 1460 # Protect against error from writing to the last line
1306 1461 pass
1307 1462 scr.clrtoeol()
1308 1463
1309 1464 # Position cursor
1310 1465 if self.mode in self.prompts:
1311 scr.move(self.scrsizey-1, len(self.prompts[self.mode])+self.cursorpos)
1466 history = self.prompts[self.mode]
1467 scr.move(self.scrsizey-1, len(history.prompt)+2+history.curx)
1312 1468 else:
1313 1469 scr.move(
1314 1470 1+self._headerlines+level.cury-level.datastarty,
1315 1471 level.numbersizex+3+level.curx-level.datastartx
1316 1472 )
1317 1473 scr.refresh()
1318 1474
1319 1475 # Check keyboard
1320 1476 while True:
1321 1477 c = scr.getch()
1322 1478 if self.mode in self.prompts:
1323 if c in (8, 127, curses.KEY_BACKSPACE):
1324 if self.cursorpos:
1325 self.keyboardinput = self.keyboardinput[:self.cursorpos-1] + self.keyboardinput[self.cursorpos:]
1326 self.cursorpos -= 1
1327 break
1328 else:
1329 curses.beep()
1330 elif c == curses.KEY_LEFT:
1331 if self.cursorpos:
1332 self.cursorpos -= 1
1333 break
1334 else:
1335 curses.beep()
1336 elif c == curses.KEY_RIGHT:
1337 if self.cursorpos < len(self.keyboardinput):
1338 self.cursorpos += 1
1339 break
1340 else:
1341 curses.beep()
1342 elif c in (curses.KEY_UP, curses.KEY_DOWN): # cancel
1343 self.mode = "default"
1344 break
1345 elif c == ord("\n"):
1346 self.executekeyboardinput(self.mode)
1347 break
1348 elif c != -1:
1349 try:
1350 c = chr(c)
1351 except ValueError:
1352 curses.beep()
1353 else:
1354 if (self.mode == "goto" and not "0" <= c <= "9"):
1355 curses.beep()
1356 else:
1357 self.keyboardinput = self.keyboardinput[:self.cursorpos] + c + self.keyboardinput[self.cursorpos:]
1358 self.cursorpos += 1
1359 break # Redisplay
1479 if self.prompts[self.mode].handlekey(self, c):
1480 break # Redisplay
1360 1481 else:
1361 1482 # if no key is pressed slow down and beep again
1362 1483 if c == -1:
1363 1484 self.stepx = 1.
1364 1485 self.stepy = 1.
1365 1486 self._dobeep = True
1366 1487 else:
1367 1488 # if a different key was pressed slow down and beep too
1368 1489 if c != lastc:
1369 1490 lastc = c
1370 1491 self.stepx = 1.
1371 1492 self.stepy = 1.
1372 1493 self._dobeep = True
1373 1494 cmdname = self.keymap.get(c, None)
1374 1495 if cmdname is None:
1375 1496 self.report(
1376 1497 UnassignedKeyError("Unassigned key %s" %
1377 1498 self.keylabel(c)))
1378 1499 else:
1379 1500 cmdfunc = getattr(self, "cmd_%s" % cmdname, None)
1380 1501 if cmdfunc is None:
1381 1502 self.report(
1382 1503 UnknownCommandError("Unknown command %r" %
1383 1504 (cmdname,)))
1384 1505 elif cmdfunc():
1385 1506 returnvalue = self.returnvalue
1386 1507 self.returnvalue = None
1387 1508 return returnvalue
1388 1509 self.stepx = self.nextstepx(self.stepx)
1389 1510 self.stepy = self.nextstepy(self.stepy)
1390 1511 curses.flushinp() # get rid of type ahead
1391 1512 break # Redisplay
1392 1513 self.scr = None
1393 1514
1394 1515 def display(self):
1395 1516 return curses.wrapper(self._dodisplay)
@@ -1,5543 +1,5552 b''
1 2006-06-10 Walter Doerwald <walter@livinglogic.de>
2
3 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
4 implements the basic functionality of browser commands that require
5 input. Reimplement the goto, find and findbackwards commands as
6 subclasses of _CommandInput. Add an input history and keymaps to those
7 commands. Add "\r" as a keyboard shortcut for the enterdefault and
8 execute commands.
9
1 10 2006-06-07 Ville Vainio <vivainio@gmail.com>
2 11
3 12 * iplib.py: ipython mybatch.ipy exits ipython immediately after
4 13 running the batch files instead of leaving the session open.
5 14
6 15 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
7 16
8 17 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
9 18 the original fix was incomplete. Patch submitted by W. Maier.
10 19
11 20 2006-06-07 Ville Vainio <vivainio@gmail.com>
12 21
13 22 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
14 23 Confirmation prompts can be supressed by 'quiet' option.
15 24 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
16 25
17 26 2006-06-06 *** Released version 0.7.2
18 27
19 28 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
20 29
21 30 * IPython/Release.py (version): Made 0.7.2 final for release.
22 31 Repo tagged and release cut.
23 32
24 33 2006-06-05 Ville Vainio <vivainio@gmail.com>
25 34
26 35 * Magic.py (magic_rehashx): Honor no_alias list earlier in
27 36 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
28 37
29 38 * upgrade_dir.py: try import 'path' module a bit harder
30 39 (for %upgrade)
31 40
32 41 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
33 42
34 43 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
35 44 instead of looping 20 times.
36 45
37 46 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
38 47 correctly at initialization time. Bug reported by Krishna Mohan
39 48 Gundu <gkmohan-AT-gmail.com> on the user list.
40 49
41 50 * IPython/Release.py (version): Mark 0.7.2 version to start
42 51 testing for release on 06/06.
43 52
44 53 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
45 54
46 55 * scripts/irunner: thin script interface so users don't have to
47 56 find the module and call it as an executable, since modules rarely
48 57 live in people's PATH.
49 58
50 59 * IPython/irunner.py (InteractiveRunner.__init__): added
51 60 delaybeforesend attribute to control delays with newer versions of
52 61 pexpect. Thanks to detailed help from pexpect's author, Noah
53 62 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
54 63 correctly (it works in NoColor mode).
55 64
56 65 * IPython/iplib.py (handle_normal): fix nasty crash reported on
57 66 SAGE list, from improper log() calls.
58 67
59 68 2006-05-31 Ville Vainio <vivainio@gmail.com>
60 69
61 70 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
62 71 with args in parens to work correctly with dirs that have spaces.
63 72
64 73 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
65 74
66 75 * IPython/Logger.py (Logger.logstart): add option to log raw input
67 76 instead of the processed one. A -r flag was added to the
68 77 %logstart magic used for controlling logging.
69 78
70 79 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
71 80
72 81 * IPython/iplib.py (InteractiveShell.__init__): add check for the
73 82 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
74 83 recognize the option. After a bug report by Will Maier. This
75 84 closes #64 (will do it after confirmation from W. Maier).
76 85
77 86 * IPython/irunner.py: New module to run scripts as if manually
78 87 typed into an interactive environment, based on pexpect. After a
79 88 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
80 89 ipython-user list. Simple unittests in the tests/ directory.
81 90
82 91 * tools/release: add Will Maier, OpenBSD port maintainer, to
83 92 recepients list. We are now officially part of the OpenBSD ports:
84 93 http://www.openbsd.org/ports.html ! Many thanks to Will for the
85 94 work.
86 95
87 96 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
88 97
89 98 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
90 99 so that it doesn't break tkinter apps.
91 100
92 101 * IPython/iplib.py (_prefilter): fix bug where aliases would
93 102 shadow variables when autocall was fully off. Reported by SAGE
94 103 author William Stein.
95 104
96 105 * IPython/OInspect.py (Inspector.__init__): add a flag to control
97 106 at what detail level strings are computed when foo? is requested.
98 107 This allows users to ask for example that the string form of an
99 108 object is only computed when foo?? is called, or even never, by
100 109 setting the object_info_string_level >= 2 in the configuration
101 110 file. This new option has been added and documented. After a
102 111 request by SAGE to be able to control the printing of very large
103 112 objects more easily.
104 113
105 114 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
106 115
107 116 * IPython/ipmaker.py (make_IPython): remove the ipython call path
108 117 from sys.argv, to be 100% consistent with how Python itself works
109 118 (as seen for example with python -i file.py). After a bug report
110 119 by Jeffrey Collins.
111 120
112 121 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
113 122 nasty bug which was preventing custom namespaces with -pylab,
114 123 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
115 124 compatibility (long gone from mpl).
116 125
117 126 * IPython/ipapi.py (make_session): name change: create->make. We
118 127 use make in other places (ipmaker,...), it's shorter and easier to
119 128 type and say, etc. I'm trying to clean things before 0.7.2 so
120 129 that I can keep things stable wrt to ipapi in the chainsaw branch.
121 130
122 131 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
123 132 python-mode recognizes our debugger mode. Add support for
124 133 autoindent inside (X)emacs. After a patch sent in by Jin Liu
125 134 <m.liu.jin-AT-gmail.com> originally written by
126 135 doxgen-AT-newsmth.net (with minor modifications for xemacs
127 136 compatibility)
128 137
129 138 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
130 139 tracebacks when walking the stack so that the stack tracking system
131 140 in emacs' python-mode can identify the frames correctly.
132 141
133 142 * IPython/ipmaker.py (make_IPython): make the internal (and
134 143 default config) autoedit_syntax value false by default. Too many
135 144 users have complained to me (both on and off-list) about problems
136 145 with this option being on by default, so I'm making it default to
137 146 off. It can still be enabled by anyone via the usual mechanisms.
138 147
139 148 * IPython/completer.py (Completer.attr_matches): add support for
140 149 PyCrust-style _getAttributeNames magic method. Patch contributed
141 150 by <mscott-AT-goldenspud.com>. Closes #50.
142 151
143 152 * IPython/iplib.py (InteractiveShell.__init__): remove the
144 153 deletion of exit/quit from __builtin__, which can break
145 154 third-party tools like the Zope debugging console. The
146 155 %exit/%quit magics remain. In general, it's probably a good idea
147 156 not to delete anything from __builtin__, since we never know what
148 157 that will break. In any case, python now (for 2.5) will support
149 158 'real' exit/quit, so this issue is moot. Closes #55.
150 159
151 160 * IPython/genutils.py (with_obj): rename the 'with' function to
152 161 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
153 162 becomes a language keyword. Closes #53.
154 163
155 164 * IPython/FakeModule.py (FakeModule.__init__): add a proper
156 165 __file__ attribute to this so it fools more things into thinking
157 166 it is a real module. Closes #59.
158 167
159 168 * IPython/Magic.py (magic_edit): add -n option to open the editor
160 169 at a specific line number. After a patch by Stefan van der Walt.
161 170
162 171 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
163 172
164 173 * IPython/iplib.py (edit_syntax_error): fix crash when for some
165 174 reason the file could not be opened. After automatic crash
166 175 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
167 176 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
168 177 (_should_recompile): Don't fire editor if using %bg, since there
169 178 is no file in the first place. From the same report as above.
170 179 (raw_input): protect against faulty third-party prefilters. After
171 180 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
172 181 while running under SAGE.
173 182
174 183 2006-05-23 Ville Vainio <vivainio@gmail.com>
175 184
176 185 * ipapi.py: Stripped down ip.to_user_ns() to work only as
177 186 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
178 187 now returns None (again), unless dummy is specifically allowed by
179 188 ipapi.get(allow_dummy=True).
180 189
181 190 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
182 191
183 192 * IPython: remove all 2.2-compatibility objects and hacks from
184 193 everywhere, since we only support 2.3 at this point. Docs
185 194 updated.
186 195
187 196 * IPython/ipapi.py (IPApi.__init__): Clean up of all getters.
188 197 Anything requiring extra validation can be turned into a Python
189 198 property in the future. I used a property for the db one b/c
190 199 there was a nasty circularity problem with the initialization
191 200 order, which right now I don't have time to clean up.
192 201
193 202 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
194 203 another locking bug reported by Jorgen. I'm not 100% sure though,
195 204 so more testing is needed...
196 205
197 206 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
198 207
199 208 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
200 209 local variables from any routine in user code (typically executed
201 210 with %run) directly into the interactive namespace. Very useful
202 211 when doing complex debugging.
203 212 (IPythonNotRunning): Changed the default None object to a dummy
204 213 whose attributes can be queried as well as called without
205 214 exploding, to ease writing code which works transparently both in
206 215 and out of ipython and uses some of this API.
207 216
208 217 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
209 218
210 219 * IPython/hooks.py (result_display): Fix the fact that our display
211 220 hook was using str() instead of repr(), as the default python
212 221 console does. This had gone unnoticed b/c it only happened if
213 222 %Pprint was off, but the inconsistency was there.
214 223
215 224 2006-05-15 Ville Vainio <vivainio@gmail.com>
216 225
217 226 * Oinspect.py: Only show docstring for nonexisting/binary files
218 227 when doing object??, closing ticket #62
219 228
220 229 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
221 230
222 231 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
223 232 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
224 233 was being released in a routine which hadn't checked if it had
225 234 been the one to acquire it.
226 235
227 236 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
228 237
229 238 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
230 239
231 240 2006-04-11 Ville Vainio <vivainio@gmail.com>
232 241
233 242 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
234 243 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
235 244 prefilters, allowing stuff like magics and aliases in the file.
236 245
237 246 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
238 247 added. Supported now are "%clear in" and "%clear out" (clear input and
239 248 output history, respectively). Also fixed CachedOutput.flush to
240 249 properly flush the output cache.
241 250
242 251 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
243 252 half-success (and fail explicitly).
244 253
245 254 2006-03-28 Ville Vainio <vivainio@gmail.com>
246 255
247 256 * iplib.py: Fix quoting of aliases so that only argless ones
248 257 are quoted
249 258
250 259 2006-03-28 Ville Vainio <vivainio@gmail.com>
251 260
252 261 * iplib.py: Quote aliases with spaces in the name.
253 262 "c:\program files\blah\bin" is now legal alias target.
254 263
255 264 * ext_rehashdir.py: Space no longer allowed as arg
256 265 separator, since space is legal in path names.
257 266
258 267 2006-03-16 Ville Vainio <vivainio@gmail.com>
259 268
260 269 * upgrade_dir.py: Take path.py from Extensions, correcting
261 270 %upgrade magic
262 271
263 272 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
264 273
265 274 * hooks.py: Only enclose editor binary in quotes if legal and
266 275 necessary (space in the name, and is an existing file). Fixes a bug
267 276 reported by Zachary Pincus.
268 277
269 278 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
270 279
271 280 * Manual: thanks to a tip on proper color handling for Emacs, by
272 281 Eric J Haywiser <ejh1-AT-MIT.EDU>.
273 282
274 283 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
275 284 by applying the provided patch. Thanks to Liu Jin
276 285 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
277 286 XEmacs/Linux, I'm trusting the submitter that it actually helps
278 287 under win32/GNU Emacs. Will revisit if any problems are reported.
279 288
280 289 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
281 290
282 291 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
283 292 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
284 293
285 294 2006-03-12 Ville Vainio <vivainio@gmail.com>
286 295
287 296 * Magic.py (magic_timeit): Added %timeit magic, contributed by
288 297 Torsten Marek.
289 298
290 299 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
291 300
292 301 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
293 302 line ranges works again.
294 303
295 304 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
296 305
297 306 * IPython/iplib.py (showtraceback): add back sys.last_traceback
298 307 and friends, after a discussion with Zach Pincus on ipython-user.
299 308 I'm not 100% sure, but after thinking aobut it quite a bit, it may
300 309 be OK. Testing with the multithreaded shells didn't reveal any
301 310 problems, but let's keep an eye out.
302 311
303 312 In the process, I fixed a few things which were calling
304 313 self.InteractiveTB() directly (like safe_execfile), which is a
305 314 mistake: ALL exception reporting should be done by calling
306 315 self.showtraceback(), which handles state and tab-completion and
307 316 more.
308 317
309 318 2006-03-01 Ville Vainio <vivainio@gmail.com>
310 319
311 320 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
312 321 To use, do "from ipipe import *".
313 322
314 323 2006-02-24 Ville Vainio <vivainio@gmail.com>
315 324
316 325 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
317 326 "cleanly" and safely than the older upgrade mechanism.
318 327
319 328 2006-02-21 Ville Vainio <vivainio@gmail.com>
320 329
321 330 * Magic.py: %save works again.
322 331
323 332 2006-02-15 Ville Vainio <vivainio@gmail.com>
324 333
325 334 * Magic.py: %Pprint works again
326 335
327 336 * Extensions/ipy_sane_defaults.py: Provide everything provided
328 337 in default ipythonrc, to make it possible to have a completely empty
329 338 ipythonrc (and thus completely rc-file free configuration)
330 339
331 340
332 341 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
333 342
334 343 * IPython/hooks.py (editor): quote the call to the editor command,
335 344 to allow commands with spaces in them. Problem noted by watching
336 345 Ian Oswald's video about textpad under win32 at
337 346 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
338 347
339 348 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
340 349 describing magics (we haven't used @ for a loong time).
341 350
342 351 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
343 352 contributed by marienz to close
344 353 http://www.scipy.net/roundup/ipython/issue53.
345 354
346 355 2006-02-10 Ville Vainio <vivainio@gmail.com>
347 356
348 357 * genutils.py: getoutput now works in win32 too
349 358
350 359 * completer.py: alias and magic completion only invoked
351 360 at the first "item" in the line, to avoid "cd %store"
352 361 nonsense.
353 362
354 363 2006-02-09 Ville Vainio <vivainio@gmail.com>
355 364
356 365 * test/*: Added a unit testing framework (finally).
357 366 '%run runtests.py' to run test_*.
358 367
359 368 * ipapi.py: Exposed runlines and set_custom_exc
360 369
361 370 2006-02-07 Ville Vainio <vivainio@gmail.com>
362 371
363 372 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
364 373 instead use "f(1 2)" as before.
365 374
366 375 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
367 376
368 377 * IPython/demo.py (IPythonDemo): Add new classes to the demo
369 378 facilities, for demos processed by the IPython input filter
370 379 (IPythonDemo), and for running a script one-line-at-a-time as a
371 380 demo, both for pure Python (LineDemo) and for IPython-processed
372 381 input (IPythonLineDemo). After a request by Dave Kohel, from the
373 382 SAGE team.
374 383 (Demo.edit): added and edit() method to the demo objects, to edit
375 384 the in-memory copy of the last executed block.
376 385
377 386 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
378 387 processing to %edit, %macro and %save. These commands can now be
379 388 invoked on the unprocessed input as it was typed by the user
380 389 (without any prefilters applied). After requests by the SAGE team
381 390 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
382 391
383 392 2006-02-01 Ville Vainio <vivainio@gmail.com>
384 393
385 394 * setup.py, eggsetup.py: easy_install ipython==dev works
386 395 correctly now (on Linux)
387 396
388 397 * ipy_user_conf,ipmaker: user config changes, removed spurious
389 398 warnings
390 399
391 400 * iplib: if rc.banner is string, use it as is.
392 401
393 402 * Magic: %pycat accepts a string argument and pages it's contents.
394 403
395 404
396 405 2006-01-30 Ville Vainio <vivainio@gmail.com>
397 406
398 407 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
399 408 Now %store and bookmarks work through PickleShare, meaning that
400 409 concurrent access is possible and all ipython sessions see the
401 410 same database situation all the time, instead of snapshot of
402 411 the situation when the session was started. Hence, %bookmark
403 412 results are immediately accessible from othes sessions. The database
404 413 is also available for use by user extensions. See:
405 414 http://www.python.org/pypi/pickleshare
406 415
407 416 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
408 417
409 418 * aliases can now be %store'd
410 419
411 420 * path.py move to Extensions so that pickleshare does not need
412 421 IPython-specific import. Extensions added to pythonpath right
413 422 at __init__.
414 423
415 424 * iplib.py: ipalias deprecated/redundant; aliases are converted and
416 425 called with _ip.system and the pre-transformed command string.
417 426
418 427 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
419 428
420 429 * IPython/iplib.py (interact): Fix that we were not catching
421 430 KeyboardInterrupt exceptions properly. I'm not quite sure why the
422 431 logic here had to change, but it's fixed now.
423 432
424 433 2006-01-29 Ville Vainio <vivainio@gmail.com>
425 434
426 435 * iplib.py: Try to import pyreadline on Windows.
427 436
428 437 2006-01-27 Ville Vainio <vivainio@gmail.com>
429 438
430 439 * iplib.py: Expose ipapi as _ip in builtin namespace.
431 440 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
432 441 and ip_set_hook (-> _ip.set_hook) redundant. % and !
433 442 syntax now produce _ip.* variant of the commands.
434 443
435 444 * "_ip.options().autoedit_syntax = 2" automatically throws
436 445 user to editor for syntax error correction without prompting.
437 446
438 447 2006-01-27 Ville Vainio <vivainio@gmail.com>
439 448
440 449 * ipmaker.py: Give "realistic" sys.argv for scripts (without
441 450 'ipython' at argv[0]) executed through command line.
442 451 NOTE: this DEPRECATES calling ipython with multiple scripts
443 452 ("ipython a.py b.py c.py")
444 453
445 454 * iplib.py, hooks.py: Added configurable input prefilter,
446 455 named 'input_prefilter'. See ext_rescapture.py for example
447 456 usage.
448 457
449 458 * ext_rescapture.py, Magic.py: Better system command output capture
450 459 through 'var = !ls' (deprecates user-visible %sc). Same notation
451 460 applies for magics, 'var = %alias' assigns alias list to var.
452 461
453 462 * ipapi.py: added meta() for accessing extension-usable data store.
454 463
455 464 * iplib.py: added InteractiveShell.getapi(). New magics should be
456 465 written doing self.getapi() instead of using the shell directly.
457 466
458 467 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
459 468 %store foo >> ~/myfoo.txt to store variables to files (in clean
460 469 textual form, not a restorable pickle).
461 470
462 471 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
463 472
464 473 * usage.py, Magic.py: added %quickref
465 474
466 475 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
467 476
468 477 * GetoptErrors when invoking magics etc. with wrong args
469 478 are now more helpful:
470 479 GetoptError: option -l not recognized (allowed: "qb" )
471 480
472 481 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
473 482
474 483 * IPython/demo.py (Demo.show): Flush stdout after each block, so
475 484 computationally intensive blocks don't appear to stall the demo.
476 485
477 486 2006-01-24 Ville Vainio <vivainio@gmail.com>
478 487
479 488 * iplib.py, hooks.py: 'result_display' hook can return a non-None
480 489 value to manipulate resulting history entry.
481 490
482 491 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
483 492 to instance methods of IPApi class, to make extending an embedded
484 493 IPython feasible. See ext_rehashdir.py for example usage.
485 494
486 495 * Merged 1071-1076 from banches/0.7.1
487 496
488 497
489 498 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
490 499
491 500 * tools/release (daystamp): Fix build tools to use the new
492 501 eggsetup.py script to build lightweight eggs.
493 502
494 503 * Applied changesets 1062 and 1064 before 0.7.1 release.
495 504
496 505 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
497 506 see the raw input history (without conversions like %ls ->
498 507 ipmagic("ls")). After a request from W. Stein, SAGE
499 508 (http://modular.ucsd.edu/sage) developer. This information is
500 509 stored in the input_hist_raw attribute of the IPython instance, so
501 510 developers can access it if needed (it's an InputList instance).
502 511
503 512 * Versionstring = 0.7.2.svn
504 513
505 514 * eggsetup.py: A separate script for constructing eggs, creates
506 515 proper launch scripts even on Windows (an .exe file in
507 516 \python24\scripts).
508 517
509 518 * ipapi.py: launch_new_instance, launch entry point needed for the
510 519 egg.
511 520
512 521 2006-01-23 Ville Vainio <vivainio@gmail.com>
513 522
514 523 * Added %cpaste magic for pasting python code
515 524
516 525 2006-01-22 Ville Vainio <vivainio@gmail.com>
517 526
518 527 * Merge from branches/0.7.1 into trunk, revs 1052-1057
519 528
520 529 * Versionstring = 0.7.2.svn
521 530
522 531 * eggsetup.py: A separate script for constructing eggs, creates
523 532 proper launch scripts even on Windows (an .exe file in
524 533 \python24\scripts).
525 534
526 535 * ipapi.py: launch_new_instance, launch entry point needed for the
527 536 egg.
528 537
529 538 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
530 539
531 540 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
532 541 %pfile foo would print the file for foo even if it was a binary.
533 542 Now, extensions '.so' and '.dll' are skipped.
534 543
535 544 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
536 545 bug, where macros would fail in all threaded modes. I'm not 100%
537 546 sure, so I'm going to put out an rc instead of making a release
538 547 today, and wait for feedback for at least a few days.
539 548
540 549 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
541 550 it...) the handling of pasting external code with autoindent on.
542 551 To get out of a multiline input, the rule will appear for most
543 552 users unchanged: two blank lines or change the indent level
544 553 proposed by IPython. But there is a twist now: you can
545 554 add/subtract only *one or two spaces*. If you add/subtract three
546 555 or more (unless you completely delete the line), IPython will
547 556 accept that line, and you'll need to enter a second one of pure
548 557 whitespace. I know it sounds complicated, but I can't find a
549 558 different solution that covers all the cases, with the right
550 559 heuristics. Hopefully in actual use, nobody will really notice
551 560 all these strange rules and things will 'just work'.
552 561
553 562 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
554 563
555 564 * IPython/iplib.py (interact): catch exceptions which can be
556 565 triggered asynchronously by signal handlers. Thanks to an
557 566 automatic crash report, submitted by Colin Kingsley
558 567 <tercel-AT-gentoo.org>.
559 568
560 569 2006-01-20 Ville Vainio <vivainio@gmail.com>
561 570
562 571 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
563 572 (%rehashdir, very useful, try it out) of how to extend ipython
564 573 with new magics. Also added Extensions dir to pythonpath to make
565 574 importing extensions easy.
566 575
567 576 * %store now complains when trying to store interactively declared
568 577 classes / instances of those classes.
569 578
570 579 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
571 580 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
572 581 if they exist, and ipy_user_conf.py with some defaults is created for
573 582 the user.
574 583
575 584 * Startup rehashing done by the config file, not InterpreterExec.
576 585 This means system commands are available even without selecting the
577 586 pysh profile. It's the sensible default after all.
578 587
579 588 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
580 589
581 590 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
582 591 multiline code with autoindent on working. But I am really not
583 592 sure, so this needs more testing. Will commit a debug-enabled
584 593 version for now, while I test it some more, so that Ville and
585 594 others may also catch any problems. Also made
586 595 self.indent_current_str() a method, to ensure that there's no
587 596 chance of the indent space count and the corresponding string
588 597 falling out of sync. All code needing the string should just call
589 598 the method.
590 599
591 600 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
592 601
593 602 * IPython/Magic.py (magic_edit): fix check for when users don't
594 603 save their output files, the try/except was in the wrong section.
595 604
596 605 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
597 606
598 607 * IPython/Magic.py (magic_run): fix __file__ global missing from
599 608 script's namespace when executed via %run. After a report by
600 609 Vivian.
601 610
602 611 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
603 612 when using python 2.4. The parent constructor changed in 2.4, and
604 613 we need to track it directly (we can't call it, as it messes up
605 614 readline and tab-completion inside our pdb would stop working).
606 615 After a bug report by R. Bernstein <rocky-AT-panix.com>.
607 616
608 617 2006-01-16 Ville Vainio <vivainio@gmail.com>
609 618
610 619 * Ipython/magic.py:Reverted back to old %edit functionality
611 620 that returns file contents on exit.
612 621
613 622 * IPython/path.py: Added Jason Orendorff's "path" module to
614 623 IPython tree, http://www.jorendorff.com/articles/python/path/.
615 624 You can get path objects conveniently through %sc, and !!, e.g.:
616 625 sc files=ls
617 626 for p in files.paths: # or files.p
618 627 print p,p.mtime
619 628
620 629 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
621 630 now work again without considering the exclusion regexp -
622 631 hence, things like ',foo my/path' turn to 'foo("my/path")'
623 632 instead of syntax error.
624 633
625 634
626 635 2006-01-14 Ville Vainio <vivainio@gmail.com>
627 636
628 637 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
629 638 ipapi decorators for python 2.4 users, options() provides access to rc
630 639 data.
631 640
632 641 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
633 642 as path separators (even on Linux ;-). Space character after
634 643 backslash (as yielded by tab completer) is still space;
635 644 "%cd long\ name" works as expected.
636 645
637 646 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
638 647 as "chain of command", with priority. API stays the same,
639 648 TryNext exception raised by a hook function signals that
640 649 current hook failed and next hook should try handling it, as
641 650 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
642 651 requested configurable display hook, which is now implemented.
643 652
644 653 2006-01-13 Ville Vainio <vivainio@gmail.com>
645 654
646 655 * IPython/platutils*.py: platform specific utility functions,
647 656 so far only set_term_title is implemented (change terminal
648 657 label in windowing systems). %cd now changes the title to
649 658 current dir.
650 659
651 660 * IPython/Release.py: Added myself to "authors" list,
652 661 had to create new files.
653 662
654 663 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
655 664 shell escape; not a known bug but had potential to be one in the
656 665 future.
657 666
658 667 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
659 668 extension API for IPython! See the module for usage example. Fix
660 669 OInspect for docstring-less magic functions.
661 670
662 671
663 672 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
664 673
665 674 * IPython/iplib.py (raw_input): temporarily deactivate all
666 675 attempts at allowing pasting of code with autoindent on. It
667 676 introduced bugs (reported by Prabhu) and I can't seem to find a
668 677 robust combination which works in all cases. Will have to revisit
669 678 later.
670 679
671 680 * IPython/genutils.py: remove isspace() function. We've dropped
672 681 2.2 compatibility, so it's OK to use the string method.
673 682
674 683 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
675 684
676 685 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
677 686 matching what NOT to autocall on, to include all python binary
678 687 operators (including things like 'and', 'or', 'is' and 'in').
679 688 Prompted by a bug report on 'foo & bar', but I realized we had
680 689 many more potential bug cases with other operators. The regexp is
681 690 self.re_exclude_auto, it's fairly commented.
682 691
683 692 2006-01-12 Ville Vainio <vivainio@gmail.com>
684 693
685 694 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
686 695 Prettified and hardened string/backslash quoting with ipsystem(),
687 696 ipalias() and ipmagic(). Now even \ characters are passed to
688 697 %magics, !shell escapes and aliases exactly as they are in the
689 698 ipython command line. Should improve backslash experience,
690 699 particularly in Windows (path delimiter for some commands that
691 700 won't understand '/'), but Unix benefits as well (regexps). %cd
692 701 magic still doesn't support backslash path delimiters, though. Also
693 702 deleted all pretense of supporting multiline command strings in
694 703 !system or %magic commands. Thanks to Jerry McRae for suggestions.
695 704
696 705 * doc/build_doc_instructions.txt added. Documentation on how to
697 706 use doc/update_manual.py, added yesterday. Both files contributed
698 707 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
699 708 doc/*.sh for deprecation at a later date.
700 709
701 710 * /ipython.py Added ipython.py to root directory for
702 711 zero-installation (tar xzvf ipython.tgz; cd ipython; python
703 712 ipython.py) and development convenience (no need to kee doing
704 713 "setup.py install" between changes).
705 714
706 715 * Made ! and !! shell escapes work (again) in multiline expressions:
707 716 if 1:
708 717 !ls
709 718 !!ls
710 719
711 720 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
712 721
713 722 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
714 723 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
715 724 module in case-insensitive installation. Was causing crashes
716 725 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
717 726
718 727 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
719 728 <marienz-AT-gentoo.org>, closes
720 729 http://www.scipy.net/roundup/ipython/issue51.
721 730
722 731 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
723 732
724 733 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
725 734 problem of excessive CPU usage under *nix and keyboard lag under
726 735 win32.
727 736
728 737 2006-01-10 *** Released version 0.7.0
729 738
730 739 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
731 740
732 741 * IPython/Release.py (revision): tag version number to 0.7.0,
733 742 ready for release.
734 743
735 744 * IPython/Magic.py (magic_edit): Add print statement to %edit so
736 745 it informs the user of the name of the temp. file used. This can
737 746 help if you decide later to reuse that same file, so you know
738 747 where to copy the info from.
739 748
740 749 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
741 750
742 751 * setup_bdist_egg.py: little script to build an egg. Added
743 752 support in the release tools as well.
744 753
745 754 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
746 755
747 756 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
748 757 version selection (new -wxversion command line and ipythonrc
749 758 parameter). Patch contributed by Arnd Baecker
750 759 <arnd.baecker-AT-web.de>.
751 760
752 761 * IPython/iplib.py (embed_mainloop): fix tab-completion in
753 762 embedded instances, for variables defined at the interactive
754 763 prompt of the embedded ipython. Reported by Arnd.
755 764
756 765 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
757 766 it can be used as a (stateful) toggle, or with a direct parameter.
758 767
759 768 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
760 769 could be triggered in certain cases and cause the traceback
761 770 printer not to work.
762 771
763 772 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
764 773
765 774 * IPython/iplib.py (_should_recompile): Small fix, closes
766 775 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
767 776
768 777 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
769 778
770 779 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
771 780 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
772 781 Moad for help with tracking it down.
773 782
774 783 * IPython/iplib.py (handle_auto): fix autocall handling for
775 784 objects which support BOTH __getitem__ and __call__ (so that f [x]
776 785 is left alone, instead of becoming f([x]) automatically).
777 786
778 787 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
779 788 Ville's patch.
780 789
781 790 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
782 791
783 792 * IPython/iplib.py (handle_auto): changed autocall semantics to
784 793 include 'smart' mode, where the autocall transformation is NOT
785 794 applied if there are no arguments on the line. This allows you to
786 795 just type 'foo' if foo is a callable to see its internal form,
787 796 instead of having it called with no arguments (typically a
788 797 mistake). The old 'full' autocall still exists: for that, you
789 798 need to set the 'autocall' parameter to 2 in your ipythonrc file.
790 799
791 800 * IPython/completer.py (Completer.attr_matches): add
792 801 tab-completion support for Enthoughts' traits. After a report by
793 802 Arnd and a patch by Prabhu.
794 803
795 804 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
796 805
797 806 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
798 807 Schmolck's patch to fix inspect.getinnerframes().
799 808
800 809 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
801 810 for embedded instances, regarding handling of namespaces and items
802 811 added to the __builtin__ one. Multiple embedded instances and
803 812 recursive embeddings should work better now (though I'm not sure
804 813 I've got all the corner cases fixed, that code is a bit of a brain
805 814 twister).
806 815
807 816 * IPython/Magic.py (magic_edit): added support to edit in-memory
808 817 macros (automatically creates the necessary temp files). %edit
809 818 also doesn't return the file contents anymore, it's just noise.
810 819
811 820 * IPython/completer.py (Completer.attr_matches): revert change to
812 821 complete only on attributes listed in __all__. I realized it
813 822 cripples the tab-completion system as a tool for exploring the
814 823 internals of unknown libraries (it renders any non-__all__
815 824 attribute off-limits). I got bit by this when trying to see
816 825 something inside the dis module.
817 826
818 827 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
819 828
820 829 * IPython/iplib.py (InteractiveShell.__init__): add .meta
821 830 namespace for users and extension writers to hold data in. This
822 831 follows the discussion in
823 832 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
824 833
825 834 * IPython/completer.py (IPCompleter.complete): small patch to help
826 835 tab-completion under Emacs, after a suggestion by John Barnard
827 836 <barnarj-AT-ccf.org>.
828 837
829 838 * IPython/Magic.py (Magic.extract_input_slices): added support for
830 839 the slice notation in magics to use N-M to represent numbers N...M
831 840 (closed endpoints). This is used by %macro and %save.
832 841
833 842 * IPython/completer.py (Completer.attr_matches): for modules which
834 843 define __all__, complete only on those. After a patch by Jeffrey
835 844 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
836 845 speed up this routine.
837 846
838 847 * IPython/Logger.py (Logger.log): fix a history handling bug. I
839 848 don't know if this is the end of it, but the behavior now is
840 849 certainly much more correct. Note that coupled with macros,
841 850 slightly surprising (at first) behavior may occur: a macro will in
842 851 general expand to multiple lines of input, so upon exiting, the
843 852 in/out counters will both be bumped by the corresponding amount
844 853 (as if the macro's contents had been typed interactively). Typing
845 854 %hist will reveal the intermediate (silently processed) lines.
846 855
847 856 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
848 857 pickle to fail (%run was overwriting __main__ and not restoring
849 858 it, but pickle relies on __main__ to operate).
850 859
851 860 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
852 861 using properties, but forgot to make the main InteractiveShell
853 862 class a new-style class. Properties fail silently, and
854 863 misteriously, with old-style class (getters work, but
855 864 setters don't do anything).
856 865
857 866 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
858 867
859 868 * IPython/Magic.py (magic_history): fix history reporting bug (I
860 869 know some nasties are still there, I just can't seem to find a
861 870 reproducible test case to track them down; the input history is
862 871 falling out of sync...)
863 872
864 873 * IPython/iplib.py (handle_shell_escape): fix bug where both
865 874 aliases and system accesses where broken for indented code (such
866 875 as loops).
867 876
868 877 * IPython/genutils.py (shell): fix small but critical bug for
869 878 win32 system access.
870 879
871 880 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
872 881
873 882 * IPython/iplib.py (showtraceback): remove use of the
874 883 sys.last_{type/value/traceback} structures, which are non
875 884 thread-safe.
876 885 (_prefilter): change control flow to ensure that we NEVER
877 886 introspect objects when autocall is off. This will guarantee that
878 887 having an input line of the form 'x.y', where access to attribute
879 888 'y' has side effects, doesn't trigger the side effect TWICE. It
880 889 is important to note that, with autocall on, these side effects
881 890 can still happen.
882 891 (ipsystem): new builtin, to complete the ip{magic/alias/system}
883 892 trio. IPython offers these three kinds of special calls which are
884 893 not python code, and it's a good thing to have their call method
885 894 be accessible as pure python functions (not just special syntax at
886 895 the command line). It gives us a better internal implementation
887 896 structure, as well as exposing these for user scripting more
888 897 cleanly.
889 898
890 899 * IPython/macro.py (Macro.__init__): moved macros to a standalone
891 900 file. Now that they'll be more likely to be used with the
892 901 persistance system (%store), I want to make sure their module path
893 902 doesn't change in the future, so that we don't break things for
894 903 users' persisted data.
895 904
896 905 * IPython/iplib.py (autoindent_update): move indentation
897 906 management into the _text_ processing loop, not the keyboard
898 907 interactive one. This is necessary to correctly process non-typed
899 908 multiline input (such as macros).
900 909
901 910 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
902 911 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
903 912 which was producing problems in the resulting manual.
904 913 (magic_whos): improve reporting of instances (show their class,
905 914 instead of simply printing 'instance' which isn't terribly
906 915 informative).
907 916
908 917 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
909 918 (minor mods) to support network shares under win32.
910 919
911 920 * IPython/winconsole.py (get_console_size): add new winconsole
912 921 module and fixes to page_dumb() to improve its behavior under
913 922 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
914 923
915 924 * IPython/Magic.py (Macro): simplified Macro class to just
916 925 subclass list. We've had only 2.2 compatibility for a very long
917 926 time, yet I was still avoiding subclassing the builtin types. No
918 927 more (I'm also starting to use properties, though I won't shift to
919 928 2.3-specific features quite yet).
920 929 (magic_store): added Ville's patch for lightweight variable
921 930 persistence, after a request on the user list by Matt Wilkie
922 931 <maphew-AT-gmail.com>. The new %store magic's docstring has full
923 932 details.
924 933
925 934 * IPython/iplib.py (InteractiveShell.post_config_initialization):
926 935 changed the default logfile name from 'ipython.log' to
927 936 'ipython_log.py'. These logs are real python files, and now that
928 937 we have much better multiline support, people are more likely to
929 938 want to use them as such. Might as well name them correctly.
930 939
931 940 * IPython/Magic.py: substantial cleanup. While we can't stop
932 941 using magics as mixins, due to the existing customizations 'out
933 942 there' which rely on the mixin naming conventions, at least I
934 943 cleaned out all cross-class name usage. So once we are OK with
935 944 breaking compatibility, the two systems can be separated.
936 945
937 946 * IPython/Logger.py: major cleanup. This one is NOT a mixin
938 947 anymore, and the class is a fair bit less hideous as well. New
939 948 features were also introduced: timestamping of input, and logging
940 949 of output results. These are user-visible with the -t and -o
941 950 options to %logstart. Closes
942 951 http://www.scipy.net/roundup/ipython/issue11 and a request by
943 952 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
944 953
945 954 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
946 955
947 956 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
948 957 better hadnle backslashes in paths. See the thread 'More Windows
949 958 questions part 2 - \/ characters revisited' on the iypthon user
950 959 list:
951 960 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
952 961
953 962 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
954 963
955 964 (InteractiveShell.__init__): change threaded shells to not use the
956 965 ipython crash handler. This was causing more problems than not,
957 966 as exceptions in the main thread (GUI code, typically) would
958 967 always show up as a 'crash', when they really weren't.
959 968
960 969 The colors and exception mode commands (%colors/%xmode) have been
961 970 synchronized to also take this into account, so users can get
962 971 verbose exceptions for their threaded code as well. I also added
963 972 support for activating pdb inside this exception handler as well,
964 973 so now GUI authors can use IPython's enhanced pdb at runtime.
965 974
966 975 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
967 976 true by default, and add it to the shipped ipythonrc file. Since
968 977 this asks the user before proceeding, I think it's OK to make it
969 978 true by default.
970 979
971 980 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
972 981 of the previous special-casing of input in the eval loop. I think
973 982 this is cleaner, as they really are commands and shouldn't have
974 983 a special role in the middle of the core code.
975 984
976 985 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
977 986
978 987 * IPython/iplib.py (edit_syntax_error): added support for
979 988 automatically reopening the editor if the file had a syntax error
980 989 in it. Thanks to scottt who provided the patch at:
981 990 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
982 991 version committed).
983 992
984 993 * IPython/iplib.py (handle_normal): add suport for multi-line
985 994 input with emtpy lines. This fixes
986 995 http://www.scipy.net/roundup/ipython/issue43 and a similar
987 996 discussion on the user list.
988 997
989 998 WARNING: a behavior change is necessarily introduced to support
990 999 blank lines: now a single blank line with whitespace does NOT
991 1000 break the input loop, which means that when autoindent is on, by
992 1001 default hitting return on the next (indented) line does NOT exit.
993 1002
994 1003 Instead, to exit a multiline input you can either have:
995 1004
996 1005 - TWO whitespace lines (just hit return again), or
997 1006 - a single whitespace line of a different length than provided
998 1007 by the autoindent (add or remove a space).
999 1008
1000 1009 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1001 1010 module to better organize all readline-related functionality.
1002 1011 I've deleted FlexCompleter and put all completion clases here.
1003 1012
1004 1013 * IPython/iplib.py (raw_input): improve indentation management.
1005 1014 It is now possible to paste indented code with autoindent on, and
1006 1015 the code is interpreted correctly (though it still looks bad on
1007 1016 screen, due to the line-oriented nature of ipython).
1008 1017 (MagicCompleter.complete): change behavior so that a TAB key on an
1009 1018 otherwise empty line actually inserts a tab, instead of completing
1010 1019 on the entire global namespace. This makes it easier to use the
1011 1020 TAB key for indentation. After a request by Hans Meine
1012 1021 <hans_meine-AT-gmx.net>
1013 1022 (_prefilter): add support so that typing plain 'exit' or 'quit'
1014 1023 does a sensible thing. Originally I tried to deviate as little as
1015 1024 possible from the default python behavior, but even that one may
1016 1025 change in this direction (thread on python-dev to that effect).
1017 1026 Regardless, ipython should do the right thing even if CPython's
1018 1027 '>>>' prompt doesn't.
1019 1028 (InteractiveShell): removed subclassing code.InteractiveConsole
1020 1029 class. By now we'd overridden just about all of its methods: I've
1021 1030 copied the remaining two over, and now ipython is a standalone
1022 1031 class. This will provide a clearer picture for the chainsaw
1023 1032 branch refactoring.
1024 1033
1025 1034 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1026 1035
1027 1036 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1028 1037 failures for objects which break when dir() is called on them.
1029 1038
1030 1039 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1031 1040 distinct local and global namespaces in the completer API. This
1032 1041 change allows us top properly handle completion with distinct
1033 1042 scopes, including in embedded instances (this had never really
1034 1043 worked correctly).
1035 1044
1036 1045 Note: this introduces a change in the constructor for
1037 1046 MagicCompleter, as a new global_namespace parameter is now the
1038 1047 second argument (the others were bumped one position).
1039 1048
1040 1049 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1041 1050
1042 1051 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1043 1052 embedded instances (which can be done now thanks to Vivian's
1044 1053 frame-handling fixes for pdb).
1045 1054 (InteractiveShell.__init__): Fix namespace handling problem in
1046 1055 embedded instances. We were overwriting __main__ unconditionally,
1047 1056 and this should only be done for 'full' (non-embedded) IPython;
1048 1057 embedded instances must respect the caller's __main__. Thanks to
1049 1058 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1050 1059
1051 1060 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1052 1061
1053 1062 * setup.py: added download_url to setup(). This registers the
1054 1063 download address at PyPI, which is not only useful to humans
1055 1064 browsing the site, but is also picked up by setuptools (the Eggs
1056 1065 machinery). Thanks to Ville and R. Kern for the info/discussion
1057 1066 on this.
1058 1067
1059 1068 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1060 1069
1061 1070 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1062 1071 This brings a lot of nice functionality to the pdb mode, which now
1063 1072 has tab-completion, syntax highlighting, and better stack handling
1064 1073 than before. Many thanks to Vivian De Smedt
1065 1074 <vivian-AT-vdesmedt.com> for the original patches.
1066 1075
1067 1076 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1068 1077
1069 1078 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1070 1079 sequence to consistently accept the banner argument. The
1071 1080 inconsistency was tripping SAGE, thanks to Gary Zablackis
1072 1081 <gzabl-AT-yahoo.com> for the report.
1073 1082
1074 1083 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1075 1084
1076 1085 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1077 1086 Fix bug where a naked 'alias' call in the ipythonrc file would
1078 1087 cause a crash. Bug reported by Jorgen Stenarson.
1079 1088
1080 1089 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1081 1090
1082 1091 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1083 1092 startup time.
1084 1093
1085 1094 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1086 1095 instances had introduced a bug with globals in normal code. Now
1087 1096 it's working in all cases.
1088 1097
1089 1098 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1090 1099 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1091 1100 has been introduced to set the default case sensitivity of the
1092 1101 searches. Users can still select either mode at runtime on a
1093 1102 per-search basis.
1094 1103
1095 1104 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1096 1105
1097 1106 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1098 1107 attributes in wildcard searches for subclasses. Modified version
1099 1108 of a patch by Jorgen.
1100 1109
1101 1110 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1102 1111
1103 1112 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1104 1113 embedded instances. I added a user_global_ns attribute to the
1105 1114 InteractiveShell class to handle this.
1106 1115
1107 1116 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1108 1117
1109 1118 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1110 1119 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1111 1120 (reported under win32, but may happen also in other platforms).
1112 1121 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1113 1122
1114 1123 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1115 1124
1116 1125 * IPython/Magic.py (magic_psearch): new support for wildcard
1117 1126 patterns. Now, typing ?a*b will list all names which begin with a
1118 1127 and end in b, for example. The %psearch magic has full
1119 1128 docstrings. Many thanks to JΓΆrgen Stenarson
1120 1129 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1121 1130 implementing this functionality.
1122 1131
1123 1132 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1124 1133
1125 1134 * Manual: fixed long-standing annoyance of double-dashes (as in
1126 1135 --prefix=~, for example) being stripped in the HTML version. This
1127 1136 is a latex2html bug, but a workaround was provided. Many thanks
1128 1137 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1129 1138 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1130 1139 rolling. This seemingly small issue had tripped a number of users
1131 1140 when first installing, so I'm glad to see it gone.
1132 1141
1133 1142 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1134 1143
1135 1144 * IPython/Extensions/numeric_formats.py: fix missing import,
1136 1145 reported by Stephen Walton.
1137 1146
1138 1147 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1139 1148
1140 1149 * IPython/demo.py: finish demo module, fully documented now.
1141 1150
1142 1151 * IPython/genutils.py (file_read): simple little utility to read a
1143 1152 file and ensure it's closed afterwards.
1144 1153
1145 1154 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1146 1155
1147 1156 * IPython/demo.py (Demo.__init__): added support for individually
1148 1157 tagging blocks for automatic execution.
1149 1158
1150 1159 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1151 1160 syntax-highlighted python sources, requested by John.
1152 1161
1153 1162 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1154 1163
1155 1164 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1156 1165 finishing.
1157 1166
1158 1167 * IPython/genutils.py (shlex_split): moved from Magic to here,
1159 1168 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1160 1169
1161 1170 * IPython/demo.py (Demo.__init__): added support for silent
1162 1171 blocks, improved marks as regexps, docstrings written.
1163 1172 (Demo.__init__): better docstring, added support for sys.argv.
1164 1173
1165 1174 * IPython/genutils.py (marquee): little utility used by the demo
1166 1175 code, handy in general.
1167 1176
1168 1177 * IPython/demo.py (Demo.__init__): new class for interactive
1169 1178 demos. Not documented yet, I just wrote it in a hurry for
1170 1179 scipy'05. Will docstring later.
1171 1180
1172 1181 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1173 1182
1174 1183 * IPython/Shell.py (sigint_handler): Drastic simplification which
1175 1184 also seems to make Ctrl-C work correctly across threads! This is
1176 1185 so simple, that I can't beleive I'd missed it before. Needs more
1177 1186 testing, though.
1178 1187 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1179 1188 like this before...
1180 1189
1181 1190 * IPython/genutils.py (get_home_dir): add protection against
1182 1191 non-dirs in win32 registry.
1183 1192
1184 1193 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1185 1194 bug where dict was mutated while iterating (pysh crash).
1186 1195
1187 1196 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1188 1197
1189 1198 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1190 1199 spurious newlines added by this routine. After a report by
1191 1200 F. Mantegazza.
1192 1201
1193 1202 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1194 1203
1195 1204 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1196 1205 calls. These were a leftover from the GTK 1.x days, and can cause
1197 1206 problems in certain cases (after a report by John Hunter).
1198 1207
1199 1208 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1200 1209 os.getcwd() fails at init time. Thanks to patch from David Remahl
1201 1210 <chmod007-AT-mac.com>.
1202 1211 (InteractiveShell.__init__): prevent certain special magics from
1203 1212 being shadowed by aliases. Closes
1204 1213 http://www.scipy.net/roundup/ipython/issue41.
1205 1214
1206 1215 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1207 1216
1208 1217 * IPython/iplib.py (InteractiveShell.complete): Added new
1209 1218 top-level completion method to expose the completion mechanism
1210 1219 beyond readline-based environments.
1211 1220
1212 1221 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1213 1222
1214 1223 * tools/ipsvnc (svnversion): fix svnversion capture.
1215 1224
1216 1225 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1217 1226 attribute to self, which was missing. Before, it was set by a
1218 1227 routine which in certain cases wasn't being called, so the
1219 1228 instance could end up missing the attribute. This caused a crash.
1220 1229 Closes http://www.scipy.net/roundup/ipython/issue40.
1221 1230
1222 1231 2005-08-16 Fernando Perez <fperez@colorado.edu>
1223 1232
1224 1233 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1225 1234 contains non-string attribute. Closes
1226 1235 http://www.scipy.net/roundup/ipython/issue38.
1227 1236
1228 1237 2005-08-14 Fernando Perez <fperez@colorado.edu>
1229 1238
1230 1239 * tools/ipsvnc: Minor improvements, to add changeset info.
1231 1240
1232 1241 2005-08-12 Fernando Perez <fperez@colorado.edu>
1233 1242
1234 1243 * IPython/iplib.py (runsource): remove self.code_to_run_src
1235 1244 attribute. I realized this is nothing more than
1236 1245 '\n'.join(self.buffer), and having the same data in two different
1237 1246 places is just asking for synchronization bugs. This may impact
1238 1247 people who have custom exception handlers, so I need to warn
1239 1248 ipython-dev about it (F. Mantegazza may use them).
1240 1249
1241 1250 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1242 1251
1243 1252 * IPython/genutils.py: fix 2.2 compatibility (generators)
1244 1253
1245 1254 2005-07-18 Fernando Perez <fperez@colorado.edu>
1246 1255
1247 1256 * IPython/genutils.py (get_home_dir): fix to help users with
1248 1257 invalid $HOME under win32.
1249 1258
1250 1259 2005-07-17 Fernando Perez <fperez@colorado.edu>
1251 1260
1252 1261 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1253 1262 some old hacks and clean up a bit other routines; code should be
1254 1263 simpler and a bit faster.
1255 1264
1256 1265 * IPython/iplib.py (interact): removed some last-resort attempts
1257 1266 to survive broken stdout/stderr. That code was only making it
1258 1267 harder to abstract out the i/o (necessary for gui integration),
1259 1268 and the crashes it could prevent were extremely rare in practice
1260 1269 (besides being fully user-induced in a pretty violent manner).
1261 1270
1262 1271 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1263 1272 Nothing major yet, but the code is simpler to read; this should
1264 1273 make it easier to do more serious modifications in the future.
1265 1274
1266 1275 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1267 1276 which broke in .15 (thanks to a report by Ville).
1268 1277
1269 1278 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1270 1279 be quite correct, I know next to nothing about unicode). This
1271 1280 will allow unicode strings to be used in prompts, amongst other
1272 1281 cases. It also will prevent ipython from crashing when unicode
1273 1282 shows up unexpectedly in many places. If ascii encoding fails, we
1274 1283 assume utf_8. Currently the encoding is not a user-visible
1275 1284 setting, though it could be made so if there is demand for it.
1276 1285
1277 1286 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1278 1287
1279 1288 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1280 1289
1281 1290 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1282 1291
1283 1292 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1284 1293 code can work transparently for 2.2/2.3.
1285 1294
1286 1295 2005-07-16 Fernando Perez <fperez@colorado.edu>
1287 1296
1288 1297 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1289 1298 out of the color scheme table used for coloring exception
1290 1299 tracebacks. This allows user code to add new schemes at runtime.
1291 1300 This is a minimally modified version of the patch at
1292 1301 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1293 1302 for the contribution.
1294 1303
1295 1304 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1296 1305 slightly modified version of the patch in
1297 1306 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1298 1307 to remove the previous try/except solution (which was costlier).
1299 1308 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1300 1309
1301 1310 2005-06-08 Fernando Perez <fperez@colorado.edu>
1302 1311
1303 1312 * IPython/iplib.py (write/write_err): Add methods to abstract all
1304 1313 I/O a bit more.
1305 1314
1306 1315 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1307 1316 warning, reported by Aric Hagberg, fix by JD Hunter.
1308 1317
1309 1318 2005-06-02 *** Released version 0.6.15
1310 1319
1311 1320 2005-06-01 Fernando Perez <fperez@colorado.edu>
1312 1321
1313 1322 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1314 1323 tab-completion of filenames within open-quoted strings. Note that
1315 1324 this requires that in ~/.ipython/ipythonrc, users change the
1316 1325 readline delimiters configuration to read:
1317 1326
1318 1327 readline_remove_delims -/~
1319 1328
1320 1329
1321 1330 2005-05-31 *** Released version 0.6.14
1322 1331
1323 1332 2005-05-29 Fernando Perez <fperez@colorado.edu>
1324 1333
1325 1334 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1326 1335 with files not on the filesystem. Reported by Eliyahu Sandler
1327 1336 <eli@gondolin.net>
1328 1337
1329 1338 2005-05-22 Fernando Perez <fperez@colorado.edu>
1330 1339
1331 1340 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1332 1341 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1333 1342
1334 1343 2005-05-19 Fernando Perez <fperez@colorado.edu>
1335 1344
1336 1345 * IPython/iplib.py (safe_execfile): close a file which could be
1337 1346 left open (causing problems in win32, which locks open files).
1338 1347 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1339 1348
1340 1349 2005-05-18 Fernando Perez <fperez@colorado.edu>
1341 1350
1342 1351 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1343 1352 keyword arguments correctly to safe_execfile().
1344 1353
1345 1354 2005-05-13 Fernando Perez <fperez@colorado.edu>
1346 1355
1347 1356 * ipython.1: Added info about Qt to manpage, and threads warning
1348 1357 to usage page (invoked with --help).
1349 1358
1350 1359 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1351 1360 new matcher (it goes at the end of the priority list) to do
1352 1361 tab-completion on named function arguments. Submitted by George
1353 1362 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1354 1363 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1355 1364 for more details.
1356 1365
1357 1366 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1358 1367 SystemExit exceptions in the script being run. Thanks to a report
1359 1368 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1360 1369 producing very annoying behavior when running unit tests.
1361 1370
1362 1371 2005-05-12 Fernando Perez <fperez@colorado.edu>
1363 1372
1364 1373 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1365 1374 which I'd broken (again) due to a changed regexp. In the process,
1366 1375 added ';' as an escape to auto-quote the whole line without
1367 1376 splitting its arguments. Thanks to a report by Jerry McRae
1368 1377 <qrs0xyc02-AT-sneakemail.com>.
1369 1378
1370 1379 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1371 1380 possible crashes caused by a TokenError. Reported by Ed Schofield
1372 1381 <schofield-AT-ftw.at>.
1373 1382
1374 1383 2005-05-06 Fernando Perez <fperez@colorado.edu>
1375 1384
1376 1385 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1377 1386
1378 1387 2005-04-29 Fernando Perez <fperez@colorado.edu>
1379 1388
1380 1389 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1381 1390 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1382 1391 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1383 1392 which provides support for Qt interactive usage (similar to the
1384 1393 existing one for WX and GTK). This had been often requested.
1385 1394
1386 1395 2005-04-14 *** Released version 0.6.13
1387 1396
1388 1397 2005-04-08 Fernando Perez <fperez@colorado.edu>
1389 1398
1390 1399 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1391 1400 from _ofind, which gets called on almost every input line. Now,
1392 1401 we only try to get docstrings if they are actually going to be
1393 1402 used (the overhead of fetching unnecessary docstrings can be
1394 1403 noticeable for certain objects, such as Pyro proxies).
1395 1404
1396 1405 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1397 1406 for completers. For some reason I had been passing them the state
1398 1407 variable, which completers never actually need, and was in
1399 1408 conflict with the rlcompleter API. Custom completers ONLY need to
1400 1409 take the text parameter.
1401 1410
1402 1411 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1403 1412 work correctly in pysh. I've also moved all the logic which used
1404 1413 to be in pysh.py here, which will prevent problems with future
1405 1414 upgrades. However, this time I must warn users to update their
1406 1415 pysh profile to include the line
1407 1416
1408 1417 import_all IPython.Extensions.InterpreterExec
1409 1418
1410 1419 because otherwise things won't work for them. They MUST also
1411 1420 delete pysh.py and the line
1412 1421
1413 1422 execfile pysh.py
1414 1423
1415 1424 from their ipythonrc-pysh.
1416 1425
1417 1426 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1418 1427 robust in the face of objects whose dir() returns non-strings
1419 1428 (which it shouldn't, but some broken libs like ITK do). Thanks to
1420 1429 a patch by John Hunter (implemented differently, though). Also
1421 1430 minor improvements by using .extend instead of + on lists.
1422 1431
1423 1432 * pysh.py:
1424 1433
1425 1434 2005-04-06 Fernando Perez <fperez@colorado.edu>
1426 1435
1427 1436 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1428 1437 by default, so that all users benefit from it. Those who don't
1429 1438 want it can still turn it off.
1430 1439
1431 1440 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1432 1441 config file, I'd forgotten about this, so users were getting it
1433 1442 off by default.
1434 1443
1435 1444 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1436 1445 consistency. Now magics can be called in multiline statements,
1437 1446 and python variables can be expanded in magic calls via $var.
1438 1447 This makes the magic system behave just like aliases or !system
1439 1448 calls.
1440 1449
1441 1450 2005-03-28 Fernando Perez <fperez@colorado.edu>
1442 1451
1443 1452 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1444 1453 expensive string additions for building command. Add support for
1445 1454 trailing ';' when autocall is used.
1446 1455
1447 1456 2005-03-26 Fernando Perez <fperez@colorado.edu>
1448 1457
1449 1458 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1450 1459 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1451 1460 ipython.el robust against prompts with any number of spaces
1452 1461 (including 0) after the ':' character.
1453 1462
1454 1463 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1455 1464 continuation prompt, which misled users to think the line was
1456 1465 already indented. Closes debian Bug#300847, reported to me by
1457 1466 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1458 1467
1459 1468 2005-03-23 Fernando Perez <fperez@colorado.edu>
1460 1469
1461 1470 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1462 1471 properly aligned if they have embedded newlines.
1463 1472
1464 1473 * IPython/iplib.py (runlines): Add a public method to expose
1465 1474 IPython's code execution machinery, so that users can run strings
1466 1475 as if they had been typed at the prompt interactively.
1467 1476 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1468 1477 methods which can call the system shell, but with python variable
1469 1478 expansion. The three such methods are: __IPYTHON__.system,
1470 1479 .getoutput and .getoutputerror. These need to be documented in a
1471 1480 'public API' section (to be written) of the manual.
1472 1481
1473 1482 2005-03-20 Fernando Perez <fperez@colorado.edu>
1474 1483
1475 1484 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1476 1485 for custom exception handling. This is quite powerful, and it
1477 1486 allows for user-installable exception handlers which can trap
1478 1487 custom exceptions at runtime and treat them separately from
1479 1488 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1480 1489 Mantegazza <mantegazza-AT-ill.fr>.
1481 1490 (InteractiveShell.set_custom_completer): public API function to
1482 1491 add new completers at runtime.
1483 1492
1484 1493 2005-03-19 Fernando Perez <fperez@colorado.edu>
1485 1494
1486 1495 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1487 1496 allow objects which provide their docstrings via non-standard
1488 1497 mechanisms (like Pyro proxies) to still be inspected by ipython's
1489 1498 ? system.
1490 1499
1491 1500 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1492 1501 automatic capture system. I tried quite hard to make it work
1493 1502 reliably, and simply failed. I tried many combinations with the
1494 1503 subprocess module, but eventually nothing worked in all needed
1495 1504 cases (not blocking stdin for the child, duplicating stdout
1496 1505 without blocking, etc). The new %sc/%sx still do capture to these
1497 1506 magical list/string objects which make shell use much more
1498 1507 conveninent, so not all is lost.
1499 1508
1500 1509 XXX - FIX MANUAL for the change above!
1501 1510
1502 1511 (runsource): I copied code.py's runsource() into ipython to modify
1503 1512 it a bit. Now the code object and source to be executed are
1504 1513 stored in ipython. This makes this info accessible to third-party
1505 1514 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1506 1515 Mantegazza <mantegazza-AT-ill.fr>.
1507 1516
1508 1517 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1509 1518 history-search via readline (like C-p/C-n). I'd wanted this for a
1510 1519 long time, but only recently found out how to do it. For users
1511 1520 who already have their ipythonrc files made and want this, just
1512 1521 add:
1513 1522
1514 1523 readline_parse_and_bind "\e[A": history-search-backward
1515 1524 readline_parse_and_bind "\e[B": history-search-forward
1516 1525
1517 1526 2005-03-18 Fernando Perez <fperez@colorado.edu>
1518 1527
1519 1528 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1520 1529 LSString and SList classes which allow transparent conversions
1521 1530 between list mode and whitespace-separated string.
1522 1531 (magic_r): Fix recursion problem in %r.
1523 1532
1524 1533 * IPython/genutils.py (LSString): New class to be used for
1525 1534 automatic storage of the results of all alias/system calls in _o
1526 1535 and _e (stdout/err). These provide a .l/.list attribute which
1527 1536 does automatic splitting on newlines. This means that for most
1528 1537 uses, you'll never need to do capturing of output with %sc/%sx
1529 1538 anymore, since ipython keeps this always done for you. Note that
1530 1539 only the LAST results are stored, the _o/e variables are
1531 1540 overwritten on each call. If you need to save their contents
1532 1541 further, simply bind them to any other name.
1533 1542
1534 1543 2005-03-17 Fernando Perez <fperez@colorado.edu>
1535 1544
1536 1545 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1537 1546 prompt namespace handling.
1538 1547
1539 1548 2005-03-16 Fernando Perez <fperez@colorado.edu>
1540 1549
1541 1550 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1542 1551 classic prompts to be '>>> ' (final space was missing, and it
1543 1552 trips the emacs python mode).
1544 1553 (BasePrompt.__str__): Added safe support for dynamic prompt
1545 1554 strings. Now you can set your prompt string to be '$x', and the
1546 1555 value of x will be printed from your interactive namespace. The
1547 1556 interpolation syntax includes the full Itpl support, so
1548 1557 ${foo()+x+bar()} is a valid prompt string now, and the function
1549 1558 calls will be made at runtime.
1550 1559
1551 1560 2005-03-15 Fernando Perez <fperez@colorado.edu>
1552 1561
1553 1562 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1554 1563 avoid name clashes in pylab. %hist still works, it just forwards
1555 1564 the call to %history.
1556 1565
1557 1566 2005-03-02 *** Released version 0.6.12
1558 1567
1559 1568 2005-03-02 Fernando Perez <fperez@colorado.edu>
1560 1569
1561 1570 * IPython/iplib.py (handle_magic): log magic calls properly as
1562 1571 ipmagic() function calls.
1563 1572
1564 1573 * IPython/Magic.py (magic_time): Improved %time to support
1565 1574 statements and provide wall-clock as well as CPU time.
1566 1575
1567 1576 2005-02-27 Fernando Perez <fperez@colorado.edu>
1568 1577
1569 1578 * IPython/hooks.py: New hooks module, to expose user-modifiable
1570 1579 IPython functionality in a clean manner. For now only the editor
1571 1580 hook is actually written, and other thigns which I intend to turn
1572 1581 into proper hooks aren't yet there. The display and prefilter
1573 1582 stuff, for example, should be hooks. But at least now the
1574 1583 framework is in place, and the rest can be moved here with more
1575 1584 time later. IPython had had a .hooks variable for a long time for
1576 1585 this purpose, but I'd never actually used it for anything.
1577 1586
1578 1587 2005-02-26 Fernando Perez <fperez@colorado.edu>
1579 1588
1580 1589 * IPython/ipmaker.py (make_IPython): make the default ipython
1581 1590 directory be called _ipython under win32, to follow more the
1582 1591 naming peculiarities of that platform (where buggy software like
1583 1592 Visual Sourcesafe breaks with .named directories). Reported by
1584 1593 Ville Vainio.
1585 1594
1586 1595 2005-02-23 Fernando Perez <fperez@colorado.edu>
1587 1596
1588 1597 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1589 1598 auto_aliases for win32 which were causing problems. Users can
1590 1599 define the ones they personally like.
1591 1600
1592 1601 2005-02-21 Fernando Perez <fperez@colorado.edu>
1593 1602
1594 1603 * IPython/Magic.py (magic_time): new magic to time execution of
1595 1604 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1596 1605
1597 1606 2005-02-19 Fernando Perez <fperez@colorado.edu>
1598 1607
1599 1608 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1600 1609 into keys (for prompts, for example).
1601 1610
1602 1611 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1603 1612 prompts in case users want them. This introduces a small behavior
1604 1613 change: ipython does not automatically add a space to all prompts
1605 1614 anymore. To get the old prompts with a space, users should add it
1606 1615 manually to their ipythonrc file, so for example prompt_in1 should
1607 1616 now read 'In [\#]: ' instead of 'In [\#]:'.
1608 1617 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1609 1618 file) to control left-padding of secondary prompts.
1610 1619
1611 1620 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1612 1621 the profiler can't be imported. Fix for Debian, which removed
1613 1622 profile.py because of License issues. I applied a slightly
1614 1623 modified version of the original Debian patch at
1615 1624 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1616 1625
1617 1626 2005-02-17 Fernando Perez <fperez@colorado.edu>
1618 1627
1619 1628 * IPython/genutils.py (native_line_ends): Fix bug which would
1620 1629 cause improper line-ends under win32 b/c I was not opening files
1621 1630 in binary mode. Bug report and fix thanks to Ville.
1622 1631
1623 1632 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1624 1633 trying to catch spurious foo[1] autocalls. My fix actually broke
1625 1634 ',/' autoquote/call with explicit escape (bad regexp).
1626 1635
1627 1636 2005-02-15 *** Released version 0.6.11
1628 1637
1629 1638 2005-02-14 Fernando Perez <fperez@colorado.edu>
1630 1639
1631 1640 * IPython/background_jobs.py: New background job management
1632 1641 subsystem. This is implemented via a new set of classes, and
1633 1642 IPython now provides a builtin 'jobs' object for background job
1634 1643 execution. A convenience %bg magic serves as a lightweight
1635 1644 frontend for starting the more common type of calls. This was
1636 1645 inspired by discussions with B. Granger and the BackgroundCommand
1637 1646 class described in the book Python Scripting for Computational
1638 1647 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1639 1648 (although ultimately no code from this text was used, as IPython's
1640 1649 system is a separate implementation).
1641 1650
1642 1651 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1643 1652 to control the completion of single/double underscore names
1644 1653 separately. As documented in the example ipytonrc file, the
1645 1654 readline_omit__names variable can now be set to 2, to omit even
1646 1655 single underscore names. Thanks to a patch by Brian Wong
1647 1656 <BrianWong-AT-AirgoNetworks.Com>.
1648 1657 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1649 1658 be autocalled as foo([1]) if foo were callable. A problem for
1650 1659 things which are both callable and implement __getitem__.
1651 1660 (init_readline): Fix autoindentation for win32. Thanks to a patch
1652 1661 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1653 1662
1654 1663 2005-02-12 Fernando Perez <fperez@colorado.edu>
1655 1664
1656 1665 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1657 1666 which I had written long ago to sort out user error messages which
1658 1667 may occur during startup. This seemed like a good idea initially,
1659 1668 but it has proven a disaster in retrospect. I don't want to
1660 1669 change much code for now, so my fix is to set the internal 'debug'
1661 1670 flag to true everywhere, whose only job was precisely to control
1662 1671 this subsystem. This closes issue 28 (as well as avoiding all
1663 1672 sorts of strange hangups which occur from time to time).
1664 1673
1665 1674 2005-02-07 Fernando Perez <fperez@colorado.edu>
1666 1675
1667 1676 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1668 1677 previous call produced a syntax error.
1669 1678
1670 1679 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1671 1680 classes without constructor.
1672 1681
1673 1682 2005-02-06 Fernando Perez <fperez@colorado.edu>
1674 1683
1675 1684 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1676 1685 completions with the results of each matcher, so we return results
1677 1686 to the user from all namespaces. This breaks with ipython
1678 1687 tradition, but I think it's a nicer behavior. Now you get all
1679 1688 possible completions listed, from all possible namespaces (python,
1680 1689 filesystem, magics...) After a request by John Hunter
1681 1690 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1682 1691
1683 1692 2005-02-05 Fernando Perez <fperez@colorado.edu>
1684 1693
1685 1694 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1686 1695 the call had quote characters in it (the quotes were stripped).
1687 1696
1688 1697 2005-01-31 Fernando Perez <fperez@colorado.edu>
1689 1698
1690 1699 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1691 1700 Itpl.itpl() to make the code more robust against psyco
1692 1701 optimizations.
1693 1702
1694 1703 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1695 1704 of causing an exception. Quicker, cleaner.
1696 1705
1697 1706 2005-01-28 Fernando Perez <fperez@colorado.edu>
1698 1707
1699 1708 * scripts/ipython_win_post_install.py (install): hardcode
1700 1709 sys.prefix+'python.exe' as the executable path. It turns out that
1701 1710 during the post-installation run, sys.executable resolves to the
1702 1711 name of the binary installer! I should report this as a distutils
1703 1712 bug, I think. I updated the .10 release with this tiny fix, to
1704 1713 avoid annoying the lists further.
1705 1714
1706 1715 2005-01-27 *** Released version 0.6.10
1707 1716
1708 1717 2005-01-27 Fernando Perez <fperez@colorado.edu>
1709 1718
1710 1719 * IPython/numutils.py (norm): Added 'inf' as optional name for
1711 1720 L-infinity norm, included references to mathworld.com for vector
1712 1721 norm definitions.
1713 1722 (amin/amax): added amin/amax for array min/max. Similar to what
1714 1723 pylab ships with after the recent reorganization of names.
1715 1724 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1716 1725
1717 1726 * ipython.el: committed Alex's recent fixes and improvements.
1718 1727 Tested with python-mode from CVS, and it looks excellent. Since
1719 1728 python-mode hasn't released anything in a while, I'm temporarily
1720 1729 putting a copy of today's CVS (v 4.70) of python-mode in:
1721 1730 http://ipython.scipy.org/tmp/python-mode.el
1722 1731
1723 1732 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1724 1733 sys.executable for the executable name, instead of assuming it's
1725 1734 called 'python.exe' (the post-installer would have produced broken
1726 1735 setups on systems with a differently named python binary).
1727 1736
1728 1737 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1729 1738 references to os.linesep, to make the code more
1730 1739 platform-independent. This is also part of the win32 coloring
1731 1740 fixes.
1732 1741
1733 1742 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1734 1743 lines, which actually cause coloring bugs because the length of
1735 1744 the line is very difficult to correctly compute with embedded
1736 1745 escapes. This was the source of all the coloring problems under
1737 1746 Win32. I think that _finally_, Win32 users have a properly
1738 1747 working ipython in all respects. This would never have happened
1739 1748 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1740 1749
1741 1750 2005-01-26 *** Released version 0.6.9
1742 1751
1743 1752 2005-01-25 Fernando Perez <fperez@colorado.edu>
1744 1753
1745 1754 * setup.py: finally, we have a true Windows installer, thanks to
1746 1755 the excellent work of Viktor Ransmayr
1747 1756 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1748 1757 Windows users. The setup routine is quite a bit cleaner thanks to
1749 1758 this, and the post-install script uses the proper functions to
1750 1759 allow a clean de-installation using the standard Windows Control
1751 1760 Panel.
1752 1761
1753 1762 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1754 1763 environment variable under all OSes (including win32) if
1755 1764 available. This will give consistency to win32 users who have set
1756 1765 this variable for any reason. If os.environ['HOME'] fails, the
1757 1766 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1758 1767
1759 1768 2005-01-24 Fernando Perez <fperez@colorado.edu>
1760 1769
1761 1770 * IPython/numutils.py (empty_like): add empty_like(), similar to
1762 1771 zeros_like() but taking advantage of the new empty() Numeric routine.
1763 1772
1764 1773 2005-01-23 *** Released version 0.6.8
1765 1774
1766 1775 2005-01-22 Fernando Perez <fperez@colorado.edu>
1767 1776
1768 1777 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1769 1778 automatic show() calls. After discussing things with JDH, it
1770 1779 turns out there are too many corner cases where this can go wrong.
1771 1780 It's best not to try to be 'too smart', and simply have ipython
1772 1781 reproduce as much as possible the default behavior of a normal
1773 1782 python shell.
1774 1783
1775 1784 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1776 1785 line-splitting regexp and _prefilter() to avoid calling getattr()
1777 1786 on assignments. This closes
1778 1787 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1779 1788 readline uses getattr(), so a simple <TAB> keypress is still
1780 1789 enough to trigger getattr() calls on an object.
1781 1790
1782 1791 2005-01-21 Fernando Perez <fperez@colorado.edu>
1783 1792
1784 1793 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1785 1794 docstring under pylab so it doesn't mask the original.
1786 1795
1787 1796 2005-01-21 *** Released version 0.6.7
1788 1797
1789 1798 2005-01-21 Fernando Perez <fperez@colorado.edu>
1790 1799
1791 1800 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1792 1801 signal handling for win32 users in multithreaded mode.
1793 1802
1794 1803 2005-01-17 Fernando Perez <fperez@colorado.edu>
1795 1804
1796 1805 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1797 1806 instances with no __init__. After a crash report by Norbert Nemec
1798 1807 <Norbert-AT-nemec-online.de>.
1799 1808
1800 1809 2005-01-14 Fernando Perez <fperez@colorado.edu>
1801 1810
1802 1811 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1803 1812 names for verbose exceptions, when multiple dotted names and the
1804 1813 'parent' object were present on the same line.
1805 1814
1806 1815 2005-01-11 Fernando Perez <fperez@colorado.edu>
1807 1816
1808 1817 * IPython/genutils.py (flag_calls): new utility to trap and flag
1809 1818 calls in functions. I need it to clean up matplotlib support.
1810 1819 Also removed some deprecated code in genutils.
1811 1820
1812 1821 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1813 1822 that matplotlib scripts called with %run, which don't call show()
1814 1823 themselves, still have their plotting windows open.
1815 1824
1816 1825 2005-01-05 Fernando Perez <fperez@colorado.edu>
1817 1826
1818 1827 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1819 1828 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1820 1829
1821 1830 2004-12-19 Fernando Perez <fperez@colorado.edu>
1822 1831
1823 1832 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1824 1833 parent_runcode, which was an eyesore. The same result can be
1825 1834 obtained with Python's regular superclass mechanisms.
1826 1835
1827 1836 2004-12-17 Fernando Perez <fperez@colorado.edu>
1828 1837
1829 1838 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1830 1839 reported by Prabhu.
1831 1840 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1832 1841 sys.stderr) instead of explicitly calling sys.stderr. This helps
1833 1842 maintain our I/O abstractions clean, for future GUI embeddings.
1834 1843
1835 1844 * IPython/genutils.py (info): added new utility for sys.stderr
1836 1845 unified info message handling (thin wrapper around warn()).
1837 1846
1838 1847 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1839 1848 composite (dotted) names on verbose exceptions.
1840 1849 (VerboseTB.nullrepr): harden against another kind of errors which
1841 1850 Python's inspect module can trigger, and which were crashing
1842 1851 IPython. Thanks to a report by Marco Lombardi
1843 1852 <mlombard-AT-ma010192.hq.eso.org>.
1844 1853
1845 1854 2004-12-13 *** Released version 0.6.6
1846 1855
1847 1856 2004-12-12 Fernando Perez <fperez@colorado.edu>
1848 1857
1849 1858 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1850 1859 generated by pygtk upon initialization if it was built without
1851 1860 threads (for matplotlib users). After a crash reported by
1852 1861 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1853 1862
1854 1863 * IPython/ipmaker.py (make_IPython): fix small bug in the
1855 1864 import_some parameter for multiple imports.
1856 1865
1857 1866 * IPython/iplib.py (ipmagic): simplified the interface of
1858 1867 ipmagic() to take a single string argument, just as it would be
1859 1868 typed at the IPython cmd line.
1860 1869 (ipalias): Added new ipalias() with an interface identical to
1861 1870 ipmagic(). This completes exposing a pure python interface to the
1862 1871 alias and magic system, which can be used in loops or more complex
1863 1872 code where IPython's automatic line mangling is not active.
1864 1873
1865 1874 * IPython/genutils.py (timing): changed interface of timing to
1866 1875 simply run code once, which is the most common case. timings()
1867 1876 remains unchanged, for the cases where you want multiple runs.
1868 1877
1869 1878 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1870 1879 bug where Python2.2 crashes with exec'ing code which does not end
1871 1880 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1872 1881 before.
1873 1882
1874 1883 2004-12-10 Fernando Perez <fperez@colorado.edu>
1875 1884
1876 1885 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1877 1886 -t to -T, to accomodate the new -t flag in %run (the %run and
1878 1887 %prun options are kind of intermixed, and it's not easy to change
1879 1888 this with the limitations of python's getopt).
1880 1889
1881 1890 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1882 1891 the execution of scripts. It's not as fine-tuned as timeit.py,
1883 1892 but it works from inside ipython (and under 2.2, which lacks
1884 1893 timeit.py). Optionally a number of runs > 1 can be given for
1885 1894 timing very short-running code.
1886 1895
1887 1896 * IPython/genutils.py (uniq_stable): new routine which returns a
1888 1897 list of unique elements in any iterable, but in stable order of
1889 1898 appearance. I needed this for the ultraTB fixes, and it's a handy
1890 1899 utility.
1891 1900
1892 1901 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1893 1902 dotted names in Verbose exceptions. This had been broken since
1894 1903 the very start, now x.y will properly be printed in a Verbose
1895 1904 traceback, instead of x being shown and y appearing always as an
1896 1905 'undefined global'. Getting this to work was a bit tricky,
1897 1906 because by default python tokenizers are stateless. Saved by
1898 1907 python's ability to easily add a bit of state to an arbitrary
1899 1908 function (without needing to build a full-blown callable object).
1900 1909
1901 1910 Also big cleanup of this code, which had horrendous runtime
1902 1911 lookups of zillions of attributes for colorization. Moved all
1903 1912 this code into a few templates, which make it cleaner and quicker.
1904 1913
1905 1914 Printout quality was also improved for Verbose exceptions: one
1906 1915 variable per line, and memory addresses are printed (this can be
1907 1916 quite handy in nasty debugging situations, which is what Verbose
1908 1917 is for).
1909 1918
1910 1919 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1911 1920 the command line as scripts to be loaded by embedded instances.
1912 1921 Doing so has the potential for an infinite recursion if there are
1913 1922 exceptions thrown in the process. This fixes a strange crash
1914 1923 reported by Philippe MULLER <muller-AT-irit.fr>.
1915 1924
1916 1925 2004-12-09 Fernando Perez <fperez@colorado.edu>
1917 1926
1918 1927 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1919 1928 to reflect new names in matplotlib, which now expose the
1920 1929 matlab-compatible interface via a pylab module instead of the
1921 1930 'matlab' name. The new code is backwards compatible, so users of
1922 1931 all matplotlib versions are OK. Patch by J. Hunter.
1923 1932
1924 1933 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1925 1934 of __init__ docstrings for instances (class docstrings are already
1926 1935 automatically printed). Instances with customized docstrings
1927 1936 (indep. of the class) are also recognized and all 3 separate
1928 1937 docstrings are printed (instance, class, constructor). After some
1929 1938 comments/suggestions by J. Hunter.
1930 1939
1931 1940 2004-12-05 Fernando Perez <fperez@colorado.edu>
1932 1941
1933 1942 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1934 1943 warnings when tab-completion fails and triggers an exception.
1935 1944
1936 1945 2004-12-03 Fernando Perez <fperez@colorado.edu>
1937 1946
1938 1947 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1939 1948 be triggered when using 'run -p'. An incorrect option flag was
1940 1949 being set ('d' instead of 'D').
1941 1950 (manpage): fix missing escaped \- sign.
1942 1951
1943 1952 2004-11-30 *** Released version 0.6.5
1944 1953
1945 1954 2004-11-30 Fernando Perez <fperez@colorado.edu>
1946 1955
1947 1956 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1948 1957 setting with -d option.
1949 1958
1950 1959 * setup.py (docfiles): Fix problem where the doc glob I was using
1951 1960 was COMPLETELY BROKEN. It was giving the right files by pure
1952 1961 accident, but failed once I tried to include ipython.el. Note:
1953 1962 glob() does NOT allow you to do exclusion on multiple endings!
1954 1963
1955 1964 2004-11-29 Fernando Perez <fperez@colorado.edu>
1956 1965
1957 1966 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1958 1967 the manpage as the source. Better formatting & consistency.
1959 1968
1960 1969 * IPython/Magic.py (magic_run): Added new -d option, to run
1961 1970 scripts under the control of the python pdb debugger. Note that
1962 1971 this required changing the %prun option -d to -D, to avoid a clash
1963 1972 (since %run must pass options to %prun, and getopt is too dumb to
1964 1973 handle options with string values with embedded spaces). Thanks
1965 1974 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1966 1975 (magic_who_ls): added type matching to %who and %whos, so that one
1967 1976 can filter their output to only include variables of certain
1968 1977 types. Another suggestion by Matthew.
1969 1978 (magic_whos): Added memory summaries in kb and Mb for arrays.
1970 1979 (magic_who): Improve formatting (break lines every 9 vars).
1971 1980
1972 1981 2004-11-28 Fernando Perez <fperez@colorado.edu>
1973 1982
1974 1983 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1975 1984 cache when empty lines were present.
1976 1985
1977 1986 2004-11-24 Fernando Perez <fperez@colorado.edu>
1978 1987
1979 1988 * IPython/usage.py (__doc__): document the re-activated threading
1980 1989 options for WX and GTK.
1981 1990
1982 1991 2004-11-23 Fernando Perez <fperez@colorado.edu>
1983 1992
1984 1993 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1985 1994 the -wthread and -gthread options, along with a new -tk one to try
1986 1995 and coordinate Tk threading with wx/gtk. The tk support is very
1987 1996 platform dependent, since it seems to require Tcl and Tk to be
1988 1997 built with threads (Fedora1/2 appears NOT to have it, but in
1989 1998 Prabhu's Debian boxes it works OK). But even with some Tk
1990 1999 limitations, this is a great improvement.
1991 2000
1992 2001 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1993 2002 info in user prompts. Patch by Prabhu.
1994 2003
1995 2004 2004-11-18 Fernando Perez <fperez@colorado.edu>
1996 2005
1997 2006 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1998 2007 EOFErrors and bail, to avoid infinite loops if a non-terminating
1999 2008 file is fed into ipython. Patch submitted in issue 19 by user,
2000 2009 many thanks.
2001 2010
2002 2011 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2003 2012 autoquote/parens in continuation prompts, which can cause lots of
2004 2013 problems. Closes roundup issue 20.
2005 2014
2006 2015 2004-11-17 Fernando Perez <fperez@colorado.edu>
2007 2016
2008 2017 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2009 2018 reported as debian bug #280505. I'm not sure my local changelog
2010 2019 entry has the proper debian format (Jack?).
2011 2020
2012 2021 2004-11-08 *** Released version 0.6.4
2013 2022
2014 2023 2004-11-08 Fernando Perez <fperez@colorado.edu>
2015 2024
2016 2025 * IPython/iplib.py (init_readline): Fix exit message for Windows
2017 2026 when readline is active. Thanks to a report by Eric Jones
2018 2027 <eric-AT-enthought.com>.
2019 2028
2020 2029 2004-11-07 Fernando Perez <fperez@colorado.edu>
2021 2030
2022 2031 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2023 2032 sometimes seen by win2k/cygwin users.
2024 2033
2025 2034 2004-11-06 Fernando Perez <fperez@colorado.edu>
2026 2035
2027 2036 * IPython/iplib.py (interact): Change the handling of %Exit from
2028 2037 trying to propagate a SystemExit to an internal ipython flag.
2029 2038 This is less elegant than using Python's exception mechanism, but
2030 2039 I can't get that to work reliably with threads, so under -pylab
2031 2040 %Exit was hanging IPython. Cross-thread exception handling is
2032 2041 really a bitch. Thaks to a bug report by Stephen Walton
2033 2042 <stephen.walton-AT-csun.edu>.
2034 2043
2035 2044 2004-11-04 Fernando Perez <fperez@colorado.edu>
2036 2045
2037 2046 * IPython/iplib.py (raw_input_original): store a pointer to the
2038 2047 true raw_input to harden against code which can modify it
2039 2048 (wx.py.PyShell does this and would otherwise crash ipython).
2040 2049 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2041 2050
2042 2051 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2043 2052 Ctrl-C problem, which does not mess up the input line.
2044 2053
2045 2054 2004-11-03 Fernando Perez <fperez@colorado.edu>
2046 2055
2047 2056 * IPython/Release.py: Changed licensing to BSD, in all files.
2048 2057 (name): lowercase name for tarball/RPM release.
2049 2058
2050 2059 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2051 2060 use throughout ipython.
2052 2061
2053 2062 * IPython/Magic.py (Magic._ofind): Switch to using the new
2054 2063 OInspect.getdoc() function.
2055 2064
2056 2065 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2057 2066 of the line currently being canceled via Ctrl-C. It's extremely
2058 2067 ugly, but I don't know how to do it better (the problem is one of
2059 2068 handling cross-thread exceptions).
2060 2069
2061 2070 2004-10-28 Fernando Perez <fperez@colorado.edu>
2062 2071
2063 2072 * IPython/Shell.py (signal_handler): add signal handlers to trap
2064 2073 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2065 2074 report by Francesc Alted.
2066 2075
2067 2076 2004-10-21 Fernando Perez <fperez@colorado.edu>
2068 2077
2069 2078 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2070 2079 to % for pysh syntax extensions.
2071 2080
2072 2081 2004-10-09 Fernando Perez <fperez@colorado.edu>
2073 2082
2074 2083 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2075 2084 arrays to print a more useful summary, without calling str(arr).
2076 2085 This avoids the problem of extremely lengthy computations which
2077 2086 occur if arr is large, and appear to the user as a system lockup
2078 2087 with 100% cpu activity. After a suggestion by Kristian Sandberg
2079 2088 <Kristian.Sandberg@colorado.edu>.
2080 2089 (Magic.__init__): fix bug in global magic escapes not being
2081 2090 correctly set.
2082 2091
2083 2092 2004-10-08 Fernando Perez <fperez@colorado.edu>
2084 2093
2085 2094 * IPython/Magic.py (__license__): change to absolute imports of
2086 2095 ipython's own internal packages, to start adapting to the absolute
2087 2096 import requirement of PEP-328.
2088 2097
2089 2098 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2090 2099 files, and standardize author/license marks through the Release
2091 2100 module instead of having per/file stuff (except for files with
2092 2101 particular licenses, like the MIT/PSF-licensed codes).
2093 2102
2094 2103 * IPython/Debugger.py: remove dead code for python 2.1
2095 2104
2096 2105 2004-10-04 Fernando Perez <fperez@colorado.edu>
2097 2106
2098 2107 * IPython/iplib.py (ipmagic): New function for accessing magics
2099 2108 via a normal python function call.
2100 2109
2101 2110 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2102 2111 from '@' to '%', to accomodate the new @decorator syntax of python
2103 2112 2.4.
2104 2113
2105 2114 2004-09-29 Fernando Perez <fperez@colorado.edu>
2106 2115
2107 2116 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2108 2117 matplotlib.use to prevent running scripts which try to switch
2109 2118 interactive backends from within ipython. This will just crash
2110 2119 the python interpreter, so we can't allow it (but a detailed error
2111 2120 is given to the user).
2112 2121
2113 2122 2004-09-28 Fernando Perez <fperez@colorado.edu>
2114 2123
2115 2124 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2116 2125 matplotlib-related fixes so that using @run with non-matplotlib
2117 2126 scripts doesn't pop up spurious plot windows. This requires
2118 2127 matplotlib >= 0.63, where I had to make some changes as well.
2119 2128
2120 2129 * IPython/ipmaker.py (make_IPython): update version requirement to
2121 2130 python 2.2.
2122 2131
2123 2132 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2124 2133 banner arg for embedded customization.
2125 2134
2126 2135 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2127 2136 explicit uses of __IP as the IPython's instance name. Now things
2128 2137 are properly handled via the shell.name value. The actual code
2129 2138 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2130 2139 is much better than before. I'll clean things completely when the
2131 2140 magic stuff gets a real overhaul.
2132 2141
2133 2142 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2134 2143 minor changes to debian dir.
2135 2144
2136 2145 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2137 2146 pointer to the shell itself in the interactive namespace even when
2138 2147 a user-supplied dict is provided. This is needed for embedding
2139 2148 purposes (found by tests with Michel Sanner).
2140 2149
2141 2150 2004-09-27 Fernando Perez <fperez@colorado.edu>
2142 2151
2143 2152 * IPython/UserConfig/ipythonrc: remove []{} from
2144 2153 readline_remove_delims, so that things like [modname.<TAB> do
2145 2154 proper completion. This disables [].TAB, but that's a less common
2146 2155 case than module names in list comprehensions, for example.
2147 2156 Thanks to a report by Andrea Riciputi.
2148 2157
2149 2158 2004-09-09 Fernando Perez <fperez@colorado.edu>
2150 2159
2151 2160 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2152 2161 blocking problems in win32 and osx. Fix by John.
2153 2162
2154 2163 2004-09-08 Fernando Perez <fperez@colorado.edu>
2155 2164
2156 2165 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2157 2166 for Win32 and OSX. Fix by John Hunter.
2158 2167
2159 2168 2004-08-30 *** Released version 0.6.3
2160 2169
2161 2170 2004-08-30 Fernando Perez <fperez@colorado.edu>
2162 2171
2163 2172 * setup.py (isfile): Add manpages to list of dependent files to be
2164 2173 updated.
2165 2174
2166 2175 2004-08-27 Fernando Perez <fperez@colorado.edu>
2167 2176
2168 2177 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2169 2178 for now. They don't really work with standalone WX/GTK code
2170 2179 (though matplotlib IS working fine with both of those backends).
2171 2180 This will neeed much more testing. I disabled most things with
2172 2181 comments, so turning it back on later should be pretty easy.
2173 2182
2174 2183 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2175 2184 autocalling of expressions like r'foo', by modifying the line
2176 2185 split regexp. Closes
2177 2186 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2178 2187 Riley <ipythonbugs-AT-sabi.net>.
2179 2188 (InteractiveShell.mainloop): honor --nobanner with banner
2180 2189 extensions.
2181 2190
2182 2191 * IPython/Shell.py: Significant refactoring of all classes, so
2183 2192 that we can really support ALL matplotlib backends and threading
2184 2193 models (John spotted a bug with Tk which required this). Now we
2185 2194 should support single-threaded, WX-threads and GTK-threads, both
2186 2195 for generic code and for matplotlib.
2187 2196
2188 2197 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2189 2198 -pylab, to simplify things for users. Will also remove the pylab
2190 2199 profile, since now all of matplotlib configuration is directly
2191 2200 handled here. This also reduces startup time.
2192 2201
2193 2202 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2194 2203 shell wasn't being correctly called. Also in IPShellWX.
2195 2204
2196 2205 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2197 2206 fine-tune banner.
2198 2207
2199 2208 * IPython/numutils.py (spike): Deprecate these spike functions,
2200 2209 delete (long deprecated) gnuplot_exec handler.
2201 2210
2202 2211 2004-08-26 Fernando Perez <fperez@colorado.edu>
2203 2212
2204 2213 * ipython.1: Update for threading options, plus some others which
2205 2214 were missing.
2206 2215
2207 2216 * IPython/ipmaker.py (__call__): Added -wthread option for
2208 2217 wxpython thread handling. Make sure threading options are only
2209 2218 valid at the command line.
2210 2219
2211 2220 * scripts/ipython: moved shell selection into a factory function
2212 2221 in Shell.py, to keep the starter script to a minimum.
2213 2222
2214 2223 2004-08-25 Fernando Perez <fperez@colorado.edu>
2215 2224
2216 2225 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2217 2226 John. Along with some recent changes he made to matplotlib, the
2218 2227 next versions of both systems should work very well together.
2219 2228
2220 2229 2004-08-24 Fernando Perez <fperez@colorado.edu>
2221 2230
2222 2231 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2223 2232 tried to switch the profiling to using hotshot, but I'm getting
2224 2233 strange errors from prof.runctx() there. I may be misreading the
2225 2234 docs, but it looks weird. For now the profiling code will
2226 2235 continue to use the standard profiler.
2227 2236
2228 2237 2004-08-23 Fernando Perez <fperez@colorado.edu>
2229 2238
2230 2239 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2231 2240 threaded shell, by John Hunter. It's not quite ready yet, but
2232 2241 close.
2233 2242
2234 2243 2004-08-22 Fernando Perez <fperez@colorado.edu>
2235 2244
2236 2245 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2237 2246 in Magic and ultraTB.
2238 2247
2239 2248 * ipython.1: document threading options in manpage.
2240 2249
2241 2250 * scripts/ipython: Changed name of -thread option to -gthread,
2242 2251 since this is GTK specific. I want to leave the door open for a
2243 2252 -wthread option for WX, which will most likely be necessary. This
2244 2253 change affects usage and ipmaker as well.
2245 2254
2246 2255 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2247 2256 handle the matplotlib shell issues. Code by John Hunter
2248 2257 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2249 2258 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2250 2259 broken (and disabled for end users) for now, but it puts the
2251 2260 infrastructure in place.
2252 2261
2253 2262 2004-08-21 Fernando Perez <fperez@colorado.edu>
2254 2263
2255 2264 * ipythonrc-pylab: Add matplotlib support.
2256 2265
2257 2266 * matplotlib_config.py: new files for matplotlib support, part of
2258 2267 the pylab profile.
2259 2268
2260 2269 * IPython/usage.py (__doc__): documented the threading options.
2261 2270
2262 2271 2004-08-20 Fernando Perez <fperez@colorado.edu>
2263 2272
2264 2273 * ipython: Modified the main calling routine to handle the -thread
2265 2274 and -mpthread options. This needs to be done as a top-level hack,
2266 2275 because it determines which class to instantiate for IPython
2267 2276 itself.
2268 2277
2269 2278 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2270 2279 classes to support multithreaded GTK operation without blocking,
2271 2280 and matplotlib with all backends. This is a lot of still very
2272 2281 experimental code, and threads are tricky. So it may still have a
2273 2282 few rough edges... This code owes a lot to
2274 2283 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2275 2284 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2276 2285 to John Hunter for all the matplotlib work.
2277 2286
2278 2287 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2279 2288 options for gtk thread and matplotlib support.
2280 2289
2281 2290 2004-08-16 Fernando Perez <fperez@colorado.edu>
2282 2291
2283 2292 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2284 2293 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2285 2294 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2286 2295
2287 2296 2004-08-11 Fernando Perez <fperez@colorado.edu>
2288 2297
2289 2298 * setup.py (isfile): Fix build so documentation gets updated for
2290 2299 rpms (it was only done for .tgz builds).
2291 2300
2292 2301 2004-08-10 Fernando Perez <fperez@colorado.edu>
2293 2302
2294 2303 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2295 2304
2296 2305 * iplib.py : Silence syntax error exceptions in tab-completion.
2297 2306
2298 2307 2004-08-05 Fernando Perez <fperez@colorado.edu>
2299 2308
2300 2309 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2301 2310 'color off' mark for continuation prompts. This was causing long
2302 2311 continuation lines to mis-wrap.
2303 2312
2304 2313 2004-08-01 Fernando Perez <fperez@colorado.edu>
2305 2314
2306 2315 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2307 2316 for building ipython to be a parameter. All this is necessary
2308 2317 right now to have a multithreaded version, but this insane
2309 2318 non-design will be cleaned up soon. For now, it's a hack that
2310 2319 works.
2311 2320
2312 2321 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2313 2322 args in various places. No bugs so far, but it's a dangerous
2314 2323 practice.
2315 2324
2316 2325 2004-07-31 Fernando Perez <fperez@colorado.edu>
2317 2326
2318 2327 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2319 2328 fix completion of files with dots in their names under most
2320 2329 profiles (pysh was OK because the completion order is different).
2321 2330
2322 2331 2004-07-27 Fernando Perez <fperez@colorado.edu>
2323 2332
2324 2333 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2325 2334 keywords manually, b/c the one in keyword.py was removed in python
2326 2335 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2327 2336 This is NOT a bug under python 2.3 and earlier.
2328 2337
2329 2338 2004-07-26 Fernando Perez <fperez@colorado.edu>
2330 2339
2331 2340 * IPython/ultraTB.py (VerboseTB.text): Add another
2332 2341 linecache.checkcache() call to try to prevent inspect.py from
2333 2342 crashing under python 2.3. I think this fixes
2334 2343 http://www.scipy.net/roundup/ipython/issue17.
2335 2344
2336 2345 2004-07-26 *** Released version 0.6.2
2337 2346
2338 2347 2004-07-26 Fernando Perez <fperez@colorado.edu>
2339 2348
2340 2349 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2341 2350 fail for any number.
2342 2351 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2343 2352 empty bookmarks.
2344 2353
2345 2354 2004-07-26 *** Released version 0.6.1
2346 2355
2347 2356 2004-07-26 Fernando Perez <fperez@colorado.edu>
2348 2357
2349 2358 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2350 2359
2351 2360 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2352 2361 escaping '()[]{}' in filenames.
2353 2362
2354 2363 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2355 2364 Python 2.2 users who lack a proper shlex.split.
2356 2365
2357 2366 2004-07-19 Fernando Perez <fperez@colorado.edu>
2358 2367
2359 2368 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2360 2369 for reading readline's init file. I follow the normal chain:
2361 2370 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2362 2371 report by Mike Heeter. This closes
2363 2372 http://www.scipy.net/roundup/ipython/issue16.
2364 2373
2365 2374 2004-07-18 Fernando Perez <fperez@colorado.edu>
2366 2375
2367 2376 * IPython/iplib.py (__init__): Add better handling of '\' under
2368 2377 Win32 for filenames. After a patch by Ville.
2369 2378
2370 2379 2004-07-17 Fernando Perez <fperez@colorado.edu>
2371 2380
2372 2381 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2373 2382 autocalling would be triggered for 'foo is bar' if foo is
2374 2383 callable. I also cleaned up the autocall detection code to use a
2375 2384 regexp, which is faster. Bug reported by Alexander Schmolck.
2376 2385
2377 2386 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2378 2387 '?' in them would confuse the help system. Reported by Alex
2379 2388 Schmolck.
2380 2389
2381 2390 2004-07-16 Fernando Perez <fperez@colorado.edu>
2382 2391
2383 2392 * IPython/GnuplotInteractive.py (__all__): added plot2.
2384 2393
2385 2394 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2386 2395 plotting dictionaries, lists or tuples of 1d arrays.
2387 2396
2388 2397 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2389 2398 optimizations.
2390 2399
2391 2400 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2392 2401 the information which was there from Janko's original IPP code:
2393 2402
2394 2403 03.05.99 20:53 porto.ifm.uni-kiel.de
2395 2404 --Started changelog.
2396 2405 --make clear do what it say it does
2397 2406 --added pretty output of lines from inputcache
2398 2407 --Made Logger a mixin class, simplifies handling of switches
2399 2408 --Added own completer class. .string<TAB> expands to last history
2400 2409 line which starts with string. The new expansion is also present
2401 2410 with Ctrl-r from the readline library. But this shows, who this
2402 2411 can be done for other cases.
2403 2412 --Added convention that all shell functions should accept a
2404 2413 parameter_string This opens the door for different behaviour for
2405 2414 each function. @cd is a good example of this.
2406 2415
2407 2416 04.05.99 12:12 porto.ifm.uni-kiel.de
2408 2417 --added logfile rotation
2409 2418 --added new mainloop method which freezes first the namespace
2410 2419
2411 2420 07.05.99 21:24 porto.ifm.uni-kiel.de
2412 2421 --added the docreader classes. Now there is a help system.
2413 2422 -This is only a first try. Currently it's not easy to put new
2414 2423 stuff in the indices. But this is the way to go. Info would be
2415 2424 better, but HTML is every where and not everybody has an info
2416 2425 system installed and it's not so easy to change html-docs to info.
2417 2426 --added global logfile option
2418 2427 --there is now a hook for object inspection method pinfo needs to
2419 2428 be provided for this. Can be reached by two '??'.
2420 2429
2421 2430 08.05.99 20:51 porto.ifm.uni-kiel.de
2422 2431 --added a README
2423 2432 --bug in rc file. Something has changed so functions in the rc
2424 2433 file need to reference the shell and not self. Not clear if it's a
2425 2434 bug or feature.
2426 2435 --changed rc file for new behavior
2427 2436
2428 2437 2004-07-15 Fernando Perez <fperez@colorado.edu>
2429 2438
2430 2439 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2431 2440 cache was falling out of sync in bizarre manners when multi-line
2432 2441 input was present. Minor optimizations and cleanup.
2433 2442
2434 2443 (Logger): Remove old Changelog info for cleanup. This is the
2435 2444 information which was there from Janko's original code:
2436 2445
2437 2446 Changes to Logger: - made the default log filename a parameter
2438 2447
2439 2448 - put a check for lines beginning with !@? in log(). Needed
2440 2449 (even if the handlers properly log their lines) for mid-session
2441 2450 logging activation to work properly. Without this, lines logged
2442 2451 in mid session, which get read from the cache, would end up
2443 2452 'bare' (with !@? in the open) in the log. Now they are caught
2444 2453 and prepended with a #.
2445 2454
2446 2455 * IPython/iplib.py (InteractiveShell.init_readline): added check
2447 2456 in case MagicCompleter fails to be defined, so we don't crash.
2448 2457
2449 2458 2004-07-13 Fernando Perez <fperez@colorado.edu>
2450 2459
2451 2460 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2452 2461 of EPS if the requested filename ends in '.eps'.
2453 2462
2454 2463 2004-07-04 Fernando Perez <fperez@colorado.edu>
2455 2464
2456 2465 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2457 2466 escaping of quotes when calling the shell.
2458 2467
2459 2468 2004-07-02 Fernando Perez <fperez@colorado.edu>
2460 2469
2461 2470 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2462 2471 gettext not working because we were clobbering '_'. Fixes
2463 2472 http://www.scipy.net/roundup/ipython/issue6.
2464 2473
2465 2474 2004-07-01 Fernando Perez <fperez@colorado.edu>
2466 2475
2467 2476 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2468 2477 into @cd. Patch by Ville.
2469 2478
2470 2479 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2471 2480 new function to store things after ipmaker runs. Patch by Ville.
2472 2481 Eventually this will go away once ipmaker is removed and the class
2473 2482 gets cleaned up, but for now it's ok. Key functionality here is
2474 2483 the addition of the persistent storage mechanism, a dict for
2475 2484 keeping data across sessions (for now just bookmarks, but more can
2476 2485 be implemented later).
2477 2486
2478 2487 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2479 2488 persistent across sections. Patch by Ville, I modified it
2480 2489 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2481 2490 added a '-l' option to list all bookmarks.
2482 2491
2483 2492 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2484 2493 center for cleanup. Registered with atexit.register(). I moved
2485 2494 here the old exit_cleanup(). After a patch by Ville.
2486 2495
2487 2496 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2488 2497 characters in the hacked shlex_split for python 2.2.
2489 2498
2490 2499 * IPython/iplib.py (file_matches): more fixes to filenames with
2491 2500 whitespace in them. It's not perfect, but limitations in python's
2492 2501 readline make it impossible to go further.
2493 2502
2494 2503 2004-06-29 Fernando Perez <fperez@colorado.edu>
2495 2504
2496 2505 * IPython/iplib.py (file_matches): escape whitespace correctly in
2497 2506 filename completions. Bug reported by Ville.
2498 2507
2499 2508 2004-06-28 Fernando Perez <fperez@colorado.edu>
2500 2509
2501 2510 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2502 2511 the history file will be called 'history-PROFNAME' (or just
2503 2512 'history' if no profile is loaded). I was getting annoyed at
2504 2513 getting my Numerical work history clobbered by pysh sessions.
2505 2514
2506 2515 * IPython/iplib.py (InteractiveShell.__init__): Internal
2507 2516 getoutputerror() function so that we can honor the system_verbose
2508 2517 flag for _all_ system calls. I also added escaping of #
2509 2518 characters here to avoid confusing Itpl.
2510 2519
2511 2520 * IPython/Magic.py (shlex_split): removed call to shell in
2512 2521 parse_options and replaced it with shlex.split(). The annoying
2513 2522 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2514 2523 to backport it from 2.3, with several frail hacks (the shlex
2515 2524 module is rather limited in 2.2). Thanks to a suggestion by Ville
2516 2525 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2517 2526 problem.
2518 2527
2519 2528 (Magic.magic_system_verbose): new toggle to print the actual
2520 2529 system calls made by ipython. Mainly for debugging purposes.
2521 2530
2522 2531 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2523 2532 doesn't support persistence. Reported (and fix suggested) by
2524 2533 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2525 2534
2526 2535 2004-06-26 Fernando Perez <fperez@colorado.edu>
2527 2536
2528 2537 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2529 2538 continue prompts.
2530 2539
2531 2540 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2532 2541 function (basically a big docstring) and a few more things here to
2533 2542 speedup startup. pysh.py is now very lightweight. We want because
2534 2543 it gets execfile'd, while InterpreterExec gets imported, so
2535 2544 byte-compilation saves time.
2536 2545
2537 2546 2004-06-25 Fernando Perez <fperez@colorado.edu>
2538 2547
2539 2548 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2540 2549 -NUM', which was recently broken.
2541 2550
2542 2551 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2543 2552 in multi-line input (but not !!, which doesn't make sense there).
2544 2553
2545 2554 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2546 2555 It's just too useful, and people can turn it off in the less
2547 2556 common cases where it's a problem.
2548 2557
2549 2558 2004-06-24 Fernando Perez <fperez@colorado.edu>
2550 2559
2551 2560 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2552 2561 special syntaxes (like alias calling) is now allied in multi-line
2553 2562 input. This is still _very_ experimental, but it's necessary for
2554 2563 efficient shell usage combining python looping syntax with system
2555 2564 calls. For now it's restricted to aliases, I don't think it
2556 2565 really even makes sense to have this for magics.
2557 2566
2558 2567 2004-06-23 Fernando Perez <fperez@colorado.edu>
2559 2568
2560 2569 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2561 2570 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2562 2571
2563 2572 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2564 2573 extensions under Windows (after code sent by Gary Bishop). The
2565 2574 extensions considered 'executable' are stored in IPython's rc
2566 2575 structure as win_exec_ext.
2567 2576
2568 2577 * IPython/genutils.py (shell): new function, like system() but
2569 2578 without return value. Very useful for interactive shell work.
2570 2579
2571 2580 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2572 2581 delete aliases.
2573 2582
2574 2583 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2575 2584 sure that the alias table doesn't contain python keywords.
2576 2585
2577 2586 2004-06-21 Fernando Perez <fperez@colorado.edu>
2578 2587
2579 2588 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2580 2589 non-existent items are found in $PATH. Reported by Thorsten.
2581 2590
2582 2591 2004-06-20 Fernando Perez <fperez@colorado.edu>
2583 2592
2584 2593 * IPython/iplib.py (complete): modified the completer so that the
2585 2594 order of priorities can be easily changed at runtime.
2586 2595
2587 2596 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2588 2597 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2589 2598
2590 2599 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2591 2600 expand Python variables prepended with $ in all system calls. The
2592 2601 same was done to InteractiveShell.handle_shell_escape. Now all
2593 2602 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2594 2603 expansion of python variables and expressions according to the
2595 2604 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2596 2605
2597 2606 Though PEP-215 has been rejected, a similar (but simpler) one
2598 2607 seems like it will go into Python 2.4, PEP-292 -
2599 2608 http://www.python.org/peps/pep-0292.html.
2600 2609
2601 2610 I'll keep the full syntax of PEP-215, since IPython has since the
2602 2611 start used Ka-Ping Yee's reference implementation discussed there
2603 2612 (Itpl), and I actually like the powerful semantics it offers.
2604 2613
2605 2614 In order to access normal shell variables, the $ has to be escaped
2606 2615 via an extra $. For example:
2607 2616
2608 2617 In [7]: PATH='a python variable'
2609 2618
2610 2619 In [8]: !echo $PATH
2611 2620 a python variable
2612 2621
2613 2622 In [9]: !echo $$PATH
2614 2623 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2615 2624
2616 2625 (Magic.parse_options): escape $ so the shell doesn't evaluate
2617 2626 things prematurely.
2618 2627
2619 2628 * IPython/iplib.py (InteractiveShell.call_alias): added the
2620 2629 ability for aliases to expand python variables via $.
2621 2630
2622 2631 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2623 2632 system, now there's a @rehash/@rehashx pair of magics. These work
2624 2633 like the csh rehash command, and can be invoked at any time. They
2625 2634 build a table of aliases to everything in the user's $PATH
2626 2635 (@rehash uses everything, @rehashx is slower but only adds
2627 2636 executable files). With this, the pysh.py-based shell profile can
2628 2637 now simply call rehash upon startup, and full access to all
2629 2638 programs in the user's path is obtained.
2630 2639
2631 2640 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2632 2641 functionality is now fully in place. I removed the old dynamic
2633 2642 code generation based approach, in favor of a much lighter one
2634 2643 based on a simple dict. The advantage is that this allows me to
2635 2644 now have thousands of aliases with negligible cost (unthinkable
2636 2645 with the old system).
2637 2646
2638 2647 2004-06-19 Fernando Perez <fperez@colorado.edu>
2639 2648
2640 2649 * IPython/iplib.py (__init__): extended MagicCompleter class to
2641 2650 also complete (last in priority) on user aliases.
2642 2651
2643 2652 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2644 2653 call to eval.
2645 2654 (ItplNS.__init__): Added a new class which functions like Itpl,
2646 2655 but allows configuring the namespace for the evaluation to occur
2647 2656 in.
2648 2657
2649 2658 2004-06-18 Fernando Perez <fperez@colorado.edu>
2650 2659
2651 2660 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2652 2661 better message when 'exit' or 'quit' are typed (a common newbie
2653 2662 confusion).
2654 2663
2655 2664 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2656 2665 check for Windows users.
2657 2666
2658 2667 * IPython/iplib.py (InteractiveShell.user_setup): removed
2659 2668 disabling of colors for Windows. I'll test at runtime and issue a
2660 2669 warning if Gary's readline isn't found, as to nudge users to
2661 2670 download it.
2662 2671
2663 2672 2004-06-16 Fernando Perez <fperez@colorado.edu>
2664 2673
2665 2674 * IPython/genutils.py (Stream.__init__): changed to print errors
2666 2675 to sys.stderr. I had a circular dependency here. Now it's
2667 2676 possible to run ipython as IDLE's shell (consider this pre-alpha,
2668 2677 since true stdout things end up in the starting terminal instead
2669 2678 of IDLE's out).
2670 2679
2671 2680 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2672 2681 users who haven't # updated their prompt_in2 definitions. Remove
2673 2682 eventually.
2674 2683 (multiple_replace): added credit to original ASPN recipe.
2675 2684
2676 2685 2004-06-15 Fernando Perez <fperez@colorado.edu>
2677 2686
2678 2687 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2679 2688 list of auto-defined aliases.
2680 2689
2681 2690 2004-06-13 Fernando Perez <fperez@colorado.edu>
2682 2691
2683 2692 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2684 2693 install was really requested (so setup.py can be used for other
2685 2694 things under Windows).
2686 2695
2687 2696 2004-06-10 Fernando Perez <fperez@colorado.edu>
2688 2697
2689 2698 * IPython/Logger.py (Logger.create_log): Manually remove any old
2690 2699 backup, since os.remove may fail under Windows. Fixes bug
2691 2700 reported by Thorsten.
2692 2701
2693 2702 2004-06-09 Fernando Perez <fperez@colorado.edu>
2694 2703
2695 2704 * examples/example-embed.py: fixed all references to %n (replaced
2696 2705 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2697 2706 for all examples and the manual as well.
2698 2707
2699 2708 2004-06-08 Fernando Perez <fperez@colorado.edu>
2700 2709
2701 2710 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2702 2711 alignment and color management. All 3 prompt subsystems now
2703 2712 inherit from BasePrompt.
2704 2713
2705 2714 * tools/release: updates for windows installer build and tag rpms
2706 2715 with python version (since paths are fixed).
2707 2716
2708 2717 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2709 2718 which will become eventually obsolete. Also fixed the default
2710 2719 prompt_in2 to use \D, so at least new users start with the correct
2711 2720 defaults.
2712 2721 WARNING: Users with existing ipythonrc files will need to apply
2713 2722 this fix manually!
2714 2723
2715 2724 * setup.py: make windows installer (.exe). This is finally the
2716 2725 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2717 2726 which I hadn't included because it required Python 2.3 (or recent
2718 2727 distutils).
2719 2728
2720 2729 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2721 2730 usage of new '\D' escape.
2722 2731
2723 2732 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2724 2733 lacks os.getuid())
2725 2734 (CachedOutput.set_colors): Added the ability to turn coloring
2726 2735 on/off with @colors even for manually defined prompt colors. It
2727 2736 uses a nasty global, but it works safely and via the generic color
2728 2737 handling mechanism.
2729 2738 (Prompt2.__init__): Introduced new escape '\D' for continuation
2730 2739 prompts. It represents the counter ('\#') as dots.
2731 2740 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2732 2741 need to update their ipythonrc files and replace '%n' with '\D' in
2733 2742 their prompt_in2 settings everywhere. Sorry, but there's
2734 2743 otherwise no clean way to get all prompts to properly align. The
2735 2744 ipythonrc shipped with IPython has been updated.
2736 2745
2737 2746 2004-06-07 Fernando Perez <fperez@colorado.edu>
2738 2747
2739 2748 * setup.py (isfile): Pass local_icons option to latex2html, so the
2740 2749 resulting HTML file is self-contained. Thanks to
2741 2750 dryice-AT-liu.com.cn for the tip.
2742 2751
2743 2752 * pysh.py: I created a new profile 'shell', which implements a
2744 2753 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2745 2754 system shell, nor will it become one anytime soon. It's mainly
2746 2755 meant to illustrate the use of the new flexible bash-like prompts.
2747 2756 I guess it could be used by hardy souls for true shell management,
2748 2757 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2749 2758 profile. This uses the InterpreterExec extension provided by
2750 2759 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2751 2760
2752 2761 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2753 2762 auto-align itself with the length of the previous input prompt
2754 2763 (taking into account the invisible color escapes).
2755 2764 (CachedOutput.__init__): Large restructuring of this class. Now
2756 2765 all three prompts (primary1, primary2, output) are proper objects,
2757 2766 managed by the 'parent' CachedOutput class. The code is still a
2758 2767 bit hackish (all prompts share state via a pointer to the cache),
2759 2768 but it's overall far cleaner than before.
2760 2769
2761 2770 * IPython/genutils.py (getoutputerror): modified to add verbose,
2762 2771 debug and header options. This makes the interface of all getout*
2763 2772 functions uniform.
2764 2773 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2765 2774
2766 2775 * IPython/Magic.py (Magic.default_option): added a function to
2767 2776 allow registering default options for any magic command. This
2768 2777 makes it easy to have profiles which customize the magics globally
2769 2778 for a certain use. The values set through this function are
2770 2779 picked up by the parse_options() method, which all magics should
2771 2780 use to parse their options.
2772 2781
2773 2782 * IPython/genutils.py (warn): modified the warnings framework to
2774 2783 use the Term I/O class. I'm trying to slowly unify all of
2775 2784 IPython's I/O operations to pass through Term.
2776 2785
2777 2786 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2778 2787 the secondary prompt to correctly match the length of the primary
2779 2788 one for any prompt. Now multi-line code will properly line up
2780 2789 even for path dependent prompts, such as the new ones available
2781 2790 via the prompt_specials.
2782 2791
2783 2792 2004-06-06 Fernando Perez <fperez@colorado.edu>
2784 2793
2785 2794 * IPython/Prompts.py (prompt_specials): Added the ability to have
2786 2795 bash-like special sequences in the prompts, which get
2787 2796 automatically expanded. Things like hostname, current working
2788 2797 directory and username are implemented already, but it's easy to
2789 2798 add more in the future. Thanks to a patch by W.J. van der Laan
2790 2799 <gnufnork-AT-hetdigitalegat.nl>
2791 2800 (prompt_specials): Added color support for prompt strings, so
2792 2801 users can define arbitrary color setups for their prompts.
2793 2802
2794 2803 2004-06-05 Fernando Perez <fperez@colorado.edu>
2795 2804
2796 2805 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2797 2806 code to load Gary Bishop's readline and configure it
2798 2807 automatically. Thanks to Gary for help on this.
2799 2808
2800 2809 2004-06-01 Fernando Perez <fperez@colorado.edu>
2801 2810
2802 2811 * IPython/Logger.py (Logger.create_log): fix bug for logging
2803 2812 with no filename (previous fix was incomplete).
2804 2813
2805 2814 2004-05-25 Fernando Perez <fperez@colorado.edu>
2806 2815
2807 2816 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2808 2817 parens would get passed to the shell.
2809 2818
2810 2819 2004-05-20 Fernando Perez <fperez@colorado.edu>
2811 2820
2812 2821 * IPython/Magic.py (Magic.magic_prun): changed default profile
2813 2822 sort order to 'time' (the more common profiling need).
2814 2823
2815 2824 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2816 2825 so that source code shown is guaranteed in sync with the file on
2817 2826 disk (also changed in psource). Similar fix to the one for
2818 2827 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2819 2828 <yann.ledu-AT-noos.fr>.
2820 2829
2821 2830 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2822 2831 with a single option would not be correctly parsed. Closes
2823 2832 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2824 2833 introduced in 0.6.0 (on 2004-05-06).
2825 2834
2826 2835 2004-05-13 *** Released version 0.6.0
2827 2836
2828 2837 2004-05-13 Fernando Perez <fperez@colorado.edu>
2829 2838
2830 2839 * debian/: Added debian/ directory to CVS, so that debian support
2831 2840 is publicly accessible. The debian package is maintained by Jack
2832 2841 Moffit <jack-AT-xiph.org>.
2833 2842
2834 2843 * Documentation: included the notes about an ipython-based system
2835 2844 shell (the hypothetical 'pysh') into the new_design.pdf document,
2836 2845 so that these ideas get distributed to users along with the
2837 2846 official documentation.
2838 2847
2839 2848 2004-05-10 Fernando Perez <fperez@colorado.edu>
2840 2849
2841 2850 * IPython/Logger.py (Logger.create_log): fix recently introduced
2842 2851 bug (misindented line) where logstart would fail when not given an
2843 2852 explicit filename.
2844 2853
2845 2854 2004-05-09 Fernando Perez <fperez@colorado.edu>
2846 2855
2847 2856 * IPython/Magic.py (Magic.parse_options): skip system call when
2848 2857 there are no options to look for. Faster, cleaner for the common
2849 2858 case.
2850 2859
2851 2860 * Documentation: many updates to the manual: describing Windows
2852 2861 support better, Gnuplot updates, credits, misc small stuff. Also
2853 2862 updated the new_design doc a bit.
2854 2863
2855 2864 2004-05-06 *** Released version 0.6.0.rc1
2856 2865
2857 2866 2004-05-06 Fernando Perez <fperez@colorado.edu>
2858 2867
2859 2868 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2860 2869 operations to use the vastly more efficient list/''.join() method.
2861 2870 (FormattedTB.text): Fix
2862 2871 http://www.scipy.net/roundup/ipython/issue12 - exception source
2863 2872 extract not updated after reload. Thanks to Mike Salib
2864 2873 <msalib-AT-mit.edu> for pinning the source of the problem.
2865 2874 Fortunately, the solution works inside ipython and doesn't require
2866 2875 any changes to python proper.
2867 2876
2868 2877 * IPython/Magic.py (Magic.parse_options): Improved to process the
2869 2878 argument list as a true shell would (by actually using the
2870 2879 underlying system shell). This way, all @magics automatically get
2871 2880 shell expansion for variables. Thanks to a comment by Alex
2872 2881 Schmolck.
2873 2882
2874 2883 2004-04-04 Fernando Perez <fperez@colorado.edu>
2875 2884
2876 2885 * IPython/iplib.py (InteractiveShell.interact): Added a special
2877 2886 trap for a debugger quit exception, which is basically impossible
2878 2887 to handle by normal mechanisms, given what pdb does to the stack.
2879 2888 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2880 2889
2881 2890 2004-04-03 Fernando Perez <fperez@colorado.edu>
2882 2891
2883 2892 * IPython/genutils.py (Term): Standardized the names of the Term
2884 2893 class streams to cin/cout/cerr, following C++ naming conventions
2885 2894 (I can't use in/out/err because 'in' is not a valid attribute
2886 2895 name).
2887 2896
2888 2897 * IPython/iplib.py (InteractiveShell.interact): don't increment
2889 2898 the prompt if there's no user input. By Daniel 'Dang' Griffith
2890 2899 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2891 2900 Francois Pinard.
2892 2901
2893 2902 2004-04-02 Fernando Perez <fperez@colorado.edu>
2894 2903
2895 2904 * IPython/genutils.py (Stream.__init__): Modified to survive at
2896 2905 least importing in contexts where stdin/out/err aren't true file
2897 2906 objects, such as PyCrust (they lack fileno() and mode). However,
2898 2907 the recovery facilities which rely on these things existing will
2899 2908 not work.
2900 2909
2901 2910 2004-04-01 Fernando Perez <fperez@colorado.edu>
2902 2911
2903 2912 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2904 2913 use the new getoutputerror() function, so it properly
2905 2914 distinguishes stdout/err.
2906 2915
2907 2916 * IPython/genutils.py (getoutputerror): added a function to
2908 2917 capture separately the standard output and error of a command.
2909 2918 After a comment from dang on the mailing lists. This code is
2910 2919 basically a modified version of commands.getstatusoutput(), from
2911 2920 the standard library.
2912 2921
2913 2922 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2914 2923 '!!' as a special syntax (shorthand) to access @sx.
2915 2924
2916 2925 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2917 2926 command and return its output as a list split on '\n'.
2918 2927
2919 2928 2004-03-31 Fernando Perez <fperez@colorado.edu>
2920 2929
2921 2930 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2922 2931 method to dictionaries used as FakeModule instances if they lack
2923 2932 it. At least pydoc in python2.3 breaks for runtime-defined
2924 2933 functions without this hack. At some point I need to _really_
2925 2934 understand what FakeModule is doing, because it's a gross hack.
2926 2935 But it solves Arnd's problem for now...
2927 2936
2928 2937 2004-02-27 Fernando Perez <fperez@colorado.edu>
2929 2938
2930 2939 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2931 2940 mode would behave erratically. Also increased the number of
2932 2941 possible logs in rotate mod to 999. Thanks to Rod Holland
2933 2942 <rhh@StructureLABS.com> for the report and fixes.
2934 2943
2935 2944 2004-02-26 Fernando Perez <fperez@colorado.edu>
2936 2945
2937 2946 * IPython/genutils.py (page): Check that the curses module really
2938 2947 has the initscr attribute before trying to use it. For some
2939 2948 reason, the Solaris curses module is missing this. I think this
2940 2949 should be considered a Solaris python bug, but I'm not sure.
2941 2950
2942 2951 2004-01-17 Fernando Perez <fperez@colorado.edu>
2943 2952
2944 2953 * IPython/genutils.py (Stream.__init__): Changes to try to make
2945 2954 ipython robust against stdin/out/err being closed by the user.
2946 2955 This is 'user error' (and blocks a normal python session, at least
2947 2956 the stdout case). However, Ipython should be able to survive such
2948 2957 instances of abuse as gracefully as possible. To simplify the
2949 2958 coding and maintain compatibility with Gary Bishop's Term
2950 2959 contributions, I've made use of classmethods for this. I think
2951 2960 this introduces a dependency on python 2.2.
2952 2961
2953 2962 2004-01-13 Fernando Perez <fperez@colorado.edu>
2954 2963
2955 2964 * IPython/numutils.py (exp_safe): simplified the code a bit and
2956 2965 removed the need for importing the kinds module altogether.
2957 2966
2958 2967 2004-01-06 Fernando Perez <fperez@colorado.edu>
2959 2968
2960 2969 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2961 2970 a magic function instead, after some community feedback. No
2962 2971 special syntax will exist for it, but its name is deliberately
2963 2972 very short.
2964 2973
2965 2974 2003-12-20 Fernando Perez <fperez@colorado.edu>
2966 2975
2967 2976 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2968 2977 new functionality, to automagically assign the result of a shell
2969 2978 command to a variable. I'll solicit some community feedback on
2970 2979 this before making it permanent.
2971 2980
2972 2981 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2973 2982 requested about callables for which inspect couldn't obtain a
2974 2983 proper argspec. Thanks to a crash report sent by Etienne
2975 2984 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2976 2985
2977 2986 2003-12-09 Fernando Perez <fperez@colorado.edu>
2978 2987
2979 2988 * IPython/genutils.py (page): patch for the pager to work across
2980 2989 various versions of Windows. By Gary Bishop.
2981 2990
2982 2991 2003-12-04 Fernando Perez <fperez@colorado.edu>
2983 2992
2984 2993 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2985 2994 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2986 2995 While I tested this and it looks ok, there may still be corner
2987 2996 cases I've missed.
2988 2997
2989 2998 2003-12-01 Fernando Perez <fperez@colorado.edu>
2990 2999
2991 3000 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2992 3001 where a line like 'p,q=1,2' would fail because the automagic
2993 3002 system would be triggered for @p.
2994 3003
2995 3004 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2996 3005 cleanups, code unmodified.
2997 3006
2998 3007 * IPython/genutils.py (Term): added a class for IPython to handle
2999 3008 output. In most cases it will just be a proxy for stdout/err, but
3000 3009 having this allows modifications to be made for some platforms,
3001 3010 such as handling color escapes under Windows. All of this code
3002 3011 was contributed by Gary Bishop, with minor modifications by me.
3003 3012 The actual changes affect many files.
3004 3013
3005 3014 2003-11-30 Fernando Perez <fperez@colorado.edu>
3006 3015
3007 3016 * IPython/iplib.py (file_matches): new completion code, courtesy
3008 3017 of Jeff Collins. This enables filename completion again under
3009 3018 python 2.3, which disabled it at the C level.
3010 3019
3011 3020 2003-11-11 Fernando Perez <fperez@colorado.edu>
3012 3021
3013 3022 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3014 3023 for Numeric.array(map(...)), but often convenient.
3015 3024
3016 3025 2003-11-05 Fernando Perez <fperez@colorado.edu>
3017 3026
3018 3027 * IPython/numutils.py (frange): Changed a call from int() to
3019 3028 int(round()) to prevent a problem reported with arange() in the
3020 3029 numpy list.
3021 3030
3022 3031 2003-10-06 Fernando Perez <fperez@colorado.edu>
3023 3032
3024 3033 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3025 3034 prevent crashes if sys lacks an argv attribute (it happens with
3026 3035 embedded interpreters which build a bare-bones sys module).
3027 3036 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3028 3037
3029 3038 2003-09-24 Fernando Perez <fperez@colorado.edu>
3030 3039
3031 3040 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3032 3041 to protect against poorly written user objects where __getattr__
3033 3042 raises exceptions other than AttributeError. Thanks to a bug
3034 3043 report by Oliver Sander <osander-AT-gmx.de>.
3035 3044
3036 3045 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3037 3046 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3038 3047
3039 3048 2003-09-09 Fernando Perez <fperez@colorado.edu>
3040 3049
3041 3050 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3042 3051 unpacking a list whith a callable as first element would
3043 3052 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3044 3053 Collins.
3045 3054
3046 3055 2003-08-25 *** Released version 0.5.0
3047 3056
3048 3057 2003-08-22 Fernando Perez <fperez@colorado.edu>
3049 3058
3050 3059 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3051 3060 improperly defined user exceptions. Thanks to feedback from Mark
3052 3061 Russell <mrussell-AT-verio.net>.
3053 3062
3054 3063 2003-08-20 Fernando Perez <fperez@colorado.edu>
3055 3064
3056 3065 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3057 3066 printing so that it would print multi-line string forms starting
3058 3067 with a new line. This way the formatting is better respected for
3059 3068 objects which work hard to make nice string forms.
3060 3069
3061 3070 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3062 3071 autocall would overtake data access for objects with both
3063 3072 __getitem__ and __call__.
3064 3073
3065 3074 2003-08-19 *** Released version 0.5.0-rc1
3066 3075
3067 3076 2003-08-19 Fernando Perez <fperez@colorado.edu>
3068 3077
3069 3078 * IPython/deep_reload.py (load_tail): single tiny change here
3070 3079 seems to fix the long-standing bug of dreload() failing to work
3071 3080 for dotted names. But this module is pretty tricky, so I may have
3072 3081 missed some subtlety. Needs more testing!.
3073 3082
3074 3083 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3075 3084 exceptions which have badly implemented __str__ methods.
3076 3085 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3077 3086 which I've been getting reports about from Python 2.3 users. I
3078 3087 wish I had a simple test case to reproduce the problem, so I could
3079 3088 either write a cleaner workaround or file a bug report if
3080 3089 necessary.
3081 3090
3082 3091 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3083 3092 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3084 3093 a bug report by Tjabo Kloppenburg.
3085 3094
3086 3095 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3087 3096 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3088 3097 seems rather unstable. Thanks to a bug report by Tjabo
3089 3098 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3090 3099
3091 3100 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3092 3101 this out soon because of the critical fixes in the inner loop for
3093 3102 generators.
3094 3103
3095 3104 * IPython/Magic.py (Magic.getargspec): removed. This (and
3096 3105 _get_def) have been obsoleted by OInspect for a long time, I
3097 3106 hadn't noticed that they were dead code.
3098 3107 (Magic._ofind): restored _ofind functionality for a few literals
3099 3108 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3100 3109 for things like "hello".capitalize?, since that would require a
3101 3110 potentially dangerous eval() again.
3102 3111
3103 3112 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3104 3113 logic a bit more to clean up the escapes handling and minimize the
3105 3114 use of _ofind to only necessary cases. The interactive 'feel' of
3106 3115 IPython should have improved quite a bit with the changes in
3107 3116 _prefilter and _ofind (besides being far safer than before).
3108 3117
3109 3118 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3110 3119 obscure, never reported). Edit would fail to find the object to
3111 3120 edit under some circumstances.
3112 3121 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3113 3122 which were causing double-calling of generators. Those eval calls
3114 3123 were _very_ dangerous, since code with side effects could be
3115 3124 triggered. As they say, 'eval is evil'... These were the
3116 3125 nastiest evals in IPython. Besides, _ofind is now far simpler,
3117 3126 and it should also be quite a bit faster. Its use of inspect is
3118 3127 also safer, so perhaps some of the inspect-related crashes I've
3119 3128 seen lately with Python 2.3 might be taken care of. That will
3120 3129 need more testing.
3121 3130
3122 3131 2003-08-17 Fernando Perez <fperez@colorado.edu>
3123 3132
3124 3133 * IPython/iplib.py (InteractiveShell._prefilter): significant
3125 3134 simplifications to the logic for handling user escapes. Faster
3126 3135 and simpler code.
3127 3136
3128 3137 2003-08-14 Fernando Perez <fperez@colorado.edu>
3129 3138
3130 3139 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3131 3140 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3132 3141 but it should be quite a bit faster. And the recursive version
3133 3142 generated O(log N) intermediate storage for all rank>1 arrays,
3134 3143 even if they were contiguous.
3135 3144 (l1norm): Added this function.
3136 3145 (norm): Added this function for arbitrary norms (including
3137 3146 l-infinity). l1 and l2 are still special cases for convenience
3138 3147 and speed.
3139 3148
3140 3149 2003-08-03 Fernando Perez <fperez@colorado.edu>
3141 3150
3142 3151 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3143 3152 exceptions, which now raise PendingDeprecationWarnings in Python
3144 3153 2.3. There were some in Magic and some in Gnuplot2.
3145 3154
3146 3155 2003-06-30 Fernando Perez <fperez@colorado.edu>
3147 3156
3148 3157 * IPython/genutils.py (page): modified to call curses only for
3149 3158 terminals where TERM=='xterm'. After problems under many other
3150 3159 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3151 3160
3152 3161 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3153 3162 would be triggered when readline was absent. This was just an old
3154 3163 debugging statement I'd forgotten to take out.
3155 3164
3156 3165 2003-06-20 Fernando Perez <fperez@colorado.edu>
3157 3166
3158 3167 * IPython/genutils.py (clock): modified to return only user time
3159 3168 (not counting system time), after a discussion on scipy. While
3160 3169 system time may be a useful quantity occasionally, it may much
3161 3170 more easily be skewed by occasional swapping or other similar
3162 3171 activity.
3163 3172
3164 3173 2003-06-05 Fernando Perez <fperez@colorado.edu>
3165 3174
3166 3175 * IPython/numutils.py (identity): new function, for building
3167 3176 arbitrary rank Kronecker deltas (mostly backwards compatible with
3168 3177 Numeric.identity)
3169 3178
3170 3179 2003-06-03 Fernando Perez <fperez@colorado.edu>
3171 3180
3172 3181 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3173 3182 arguments passed to magics with spaces, to allow trailing '\' to
3174 3183 work normally (mainly for Windows users).
3175 3184
3176 3185 2003-05-29 Fernando Perez <fperez@colorado.edu>
3177 3186
3178 3187 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3179 3188 instead of pydoc.help. This fixes a bizarre behavior where
3180 3189 printing '%s' % locals() would trigger the help system. Now
3181 3190 ipython behaves like normal python does.
3182 3191
3183 3192 Note that if one does 'from pydoc import help', the bizarre
3184 3193 behavior returns, but this will also happen in normal python, so
3185 3194 it's not an ipython bug anymore (it has to do with how pydoc.help
3186 3195 is implemented).
3187 3196
3188 3197 2003-05-22 Fernando Perez <fperez@colorado.edu>
3189 3198
3190 3199 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3191 3200 return [] instead of None when nothing matches, also match to end
3192 3201 of line. Patch by Gary Bishop.
3193 3202
3194 3203 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3195 3204 protection as before, for files passed on the command line. This
3196 3205 prevents the CrashHandler from kicking in if user files call into
3197 3206 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3198 3207 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3199 3208
3200 3209 2003-05-20 *** Released version 0.4.0
3201 3210
3202 3211 2003-05-20 Fernando Perez <fperez@colorado.edu>
3203 3212
3204 3213 * setup.py: added support for manpages. It's a bit hackish b/c of
3205 3214 a bug in the way the bdist_rpm distutils target handles gzipped
3206 3215 manpages, but it works. After a patch by Jack.
3207 3216
3208 3217 2003-05-19 Fernando Perez <fperez@colorado.edu>
3209 3218
3210 3219 * IPython/numutils.py: added a mockup of the kinds module, since
3211 3220 it was recently removed from Numeric. This way, numutils will
3212 3221 work for all users even if they are missing kinds.
3213 3222
3214 3223 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3215 3224 failure, which can occur with SWIG-wrapped extensions. After a
3216 3225 crash report from Prabhu.
3217 3226
3218 3227 2003-05-16 Fernando Perez <fperez@colorado.edu>
3219 3228
3220 3229 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3221 3230 protect ipython from user code which may call directly
3222 3231 sys.excepthook (this looks like an ipython crash to the user, even
3223 3232 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3224 3233 This is especially important to help users of WxWindows, but may
3225 3234 also be useful in other cases.
3226 3235
3227 3236 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3228 3237 an optional tb_offset to be specified, and to preserve exception
3229 3238 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3230 3239
3231 3240 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3232 3241
3233 3242 2003-05-15 Fernando Perez <fperez@colorado.edu>
3234 3243
3235 3244 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3236 3245 installing for a new user under Windows.
3237 3246
3238 3247 2003-05-12 Fernando Perez <fperez@colorado.edu>
3239 3248
3240 3249 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3241 3250 handler for Emacs comint-based lines. Currently it doesn't do
3242 3251 much (but importantly, it doesn't update the history cache). In
3243 3252 the future it may be expanded if Alex needs more functionality
3244 3253 there.
3245 3254
3246 3255 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3247 3256 info to crash reports.
3248 3257
3249 3258 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3250 3259 just like Python's -c. Also fixed crash with invalid -color
3251 3260 option value at startup. Thanks to Will French
3252 3261 <wfrench-AT-bestweb.net> for the bug report.
3253 3262
3254 3263 2003-05-09 Fernando Perez <fperez@colorado.edu>
3255 3264
3256 3265 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3257 3266 to EvalDict (it's a mapping, after all) and simplified its code
3258 3267 quite a bit, after a nice discussion on c.l.py where Gustavo
3259 3268 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3260 3269
3261 3270 2003-04-30 Fernando Perez <fperez@colorado.edu>
3262 3271
3263 3272 * IPython/genutils.py (timings_out): modified it to reduce its
3264 3273 overhead in the common reps==1 case.
3265 3274
3266 3275 2003-04-29 Fernando Perez <fperez@colorado.edu>
3267 3276
3268 3277 * IPython/genutils.py (timings_out): Modified to use the resource
3269 3278 module, which avoids the wraparound problems of time.clock().
3270 3279
3271 3280 2003-04-17 *** Released version 0.2.15pre4
3272 3281
3273 3282 2003-04-17 Fernando Perez <fperez@colorado.edu>
3274 3283
3275 3284 * setup.py (scriptfiles): Split windows-specific stuff over to a
3276 3285 separate file, in an attempt to have a Windows GUI installer.
3277 3286 That didn't work, but part of the groundwork is done.
3278 3287
3279 3288 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3280 3289 indent/unindent with 4 spaces. Particularly useful in combination
3281 3290 with the new auto-indent option.
3282 3291
3283 3292 2003-04-16 Fernando Perez <fperez@colorado.edu>
3284 3293
3285 3294 * IPython/Magic.py: various replacements of self.rc for
3286 3295 self.shell.rc. A lot more remains to be done to fully disentangle
3287 3296 this class from the main Shell class.
3288 3297
3289 3298 * IPython/GnuplotRuntime.py: added checks for mouse support so
3290 3299 that we don't try to enable it if the current gnuplot doesn't
3291 3300 really support it. Also added checks so that we don't try to
3292 3301 enable persist under Windows (where Gnuplot doesn't recognize the
3293 3302 option).
3294 3303
3295 3304 * IPython/iplib.py (InteractiveShell.interact): Added optional
3296 3305 auto-indenting code, after a patch by King C. Shu
3297 3306 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3298 3307 get along well with pasting indented code. If I ever figure out
3299 3308 how to make that part go well, it will become on by default.
3300 3309
3301 3310 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3302 3311 crash ipython if there was an unmatched '%' in the user's prompt
3303 3312 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3304 3313
3305 3314 * IPython/iplib.py (InteractiveShell.interact): removed the
3306 3315 ability to ask the user whether he wants to crash or not at the
3307 3316 'last line' exception handler. Calling functions at that point
3308 3317 changes the stack, and the error reports would have incorrect
3309 3318 tracebacks.
3310 3319
3311 3320 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3312 3321 pass through a peger a pretty-printed form of any object. After a
3313 3322 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3314 3323
3315 3324 2003-04-14 Fernando Perez <fperez@colorado.edu>
3316 3325
3317 3326 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3318 3327 all files in ~ would be modified at first install (instead of
3319 3328 ~/.ipython). This could be potentially disastrous, as the
3320 3329 modification (make line-endings native) could damage binary files.
3321 3330
3322 3331 2003-04-10 Fernando Perez <fperez@colorado.edu>
3323 3332
3324 3333 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3325 3334 handle only lines which are invalid python. This now means that
3326 3335 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3327 3336 for the bug report.
3328 3337
3329 3338 2003-04-01 Fernando Perez <fperez@colorado.edu>
3330 3339
3331 3340 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3332 3341 where failing to set sys.last_traceback would crash pdb.pm().
3333 3342 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3334 3343 report.
3335 3344
3336 3345 2003-03-25 Fernando Perez <fperez@colorado.edu>
3337 3346
3338 3347 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3339 3348 before printing it (it had a lot of spurious blank lines at the
3340 3349 end).
3341 3350
3342 3351 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3343 3352 output would be sent 21 times! Obviously people don't use this
3344 3353 too often, or I would have heard about it.
3345 3354
3346 3355 2003-03-24 Fernando Perez <fperez@colorado.edu>
3347 3356
3348 3357 * setup.py (scriptfiles): renamed the data_files parameter from
3349 3358 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3350 3359 for the patch.
3351 3360
3352 3361 2003-03-20 Fernando Perez <fperez@colorado.edu>
3353 3362
3354 3363 * IPython/genutils.py (error): added error() and fatal()
3355 3364 functions.
3356 3365
3357 3366 2003-03-18 *** Released version 0.2.15pre3
3358 3367
3359 3368 2003-03-18 Fernando Perez <fperez@colorado.edu>
3360 3369
3361 3370 * setupext/install_data_ext.py
3362 3371 (install_data_ext.initialize_options): Class contributed by Jack
3363 3372 Moffit for fixing the old distutils hack. He is sending this to
3364 3373 the distutils folks so in the future we may not need it as a
3365 3374 private fix.
3366 3375
3367 3376 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3368 3377 changes for Debian packaging. See his patch for full details.
3369 3378 The old distutils hack of making the ipythonrc* files carry a
3370 3379 bogus .py extension is gone, at last. Examples were moved to a
3371 3380 separate subdir under doc/, and the separate executable scripts
3372 3381 now live in their own directory. Overall a great cleanup. The
3373 3382 manual was updated to use the new files, and setup.py has been
3374 3383 fixed for this setup.
3375 3384
3376 3385 * IPython/PyColorize.py (Parser.usage): made non-executable and
3377 3386 created a pycolor wrapper around it to be included as a script.
3378 3387
3379 3388 2003-03-12 *** Released version 0.2.15pre2
3380 3389
3381 3390 2003-03-12 Fernando Perez <fperez@colorado.edu>
3382 3391
3383 3392 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3384 3393 long-standing problem with garbage characters in some terminals.
3385 3394 The issue was really that the \001 and \002 escapes must _only_ be
3386 3395 passed to input prompts (which call readline), but _never_ to
3387 3396 normal text to be printed on screen. I changed ColorANSI to have
3388 3397 two classes: TermColors and InputTermColors, each with the
3389 3398 appropriate escapes for input prompts or normal text. The code in
3390 3399 Prompts.py got slightly more complicated, but this very old and
3391 3400 annoying bug is finally fixed.
3392 3401
3393 3402 All the credit for nailing down the real origin of this problem
3394 3403 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3395 3404 *Many* thanks to him for spending quite a bit of effort on this.
3396 3405
3397 3406 2003-03-05 *** Released version 0.2.15pre1
3398 3407
3399 3408 2003-03-03 Fernando Perez <fperez@colorado.edu>
3400 3409
3401 3410 * IPython/FakeModule.py: Moved the former _FakeModule to a
3402 3411 separate file, because it's also needed by Magic (to fix a similar
3403 3412 pickle-related issue in @run).
3404 3413
3405 3414 2003-03-02 Fernando Perez <fperez@colorado.edu>
3406 3415
3407 3416 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3408 3417 the autocall option at runtime.
3409 3418 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3410 3419 across Magic.py to start separating Magic from InteractiveShell.
3411 3420 (Magic._ofind): Fixed to return proper namespace for dotted
3412 3421 names. Before, a dotted name would always return 'not currently
3413 3422 defined', because it would find the 'parent'. s.x would be found,
3414 3423 but since 'x' isn't defined by itself, it would get confused.
3415 3424 (Magic.magic_run): Fixed pickling problems reported by Ralf
3416 3425 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3417 3426 that I'd used when Mike Heeter reported similar issues at the
3418 3427 top-level, but now for @run. It boils down to injecting the
3419 3428 namespace where code is being executed with something that looks
3420 3429 enough like a module to fool pickle.dump(). Since a pickle stores
3421 3430 a named reference to the importing module, we need this for
3422 3431 pickles to save something sensible.
3423 3432
3424 3433 * IPython/ipmaker.py (make_IPython): added an autocall option.
3425 3434
3426 3435 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3427 3436 the auto-eval code. Now autocalling is an option, and the code is
3428 3437 also vastly safer. There is no more eval() involved at all.
3429 3438
3430 3439 2003-03-01 Fernando Perez <fperez@colorado.edu>
3431 3440
3432 3441 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3433 3442 dict with named keys instead of a tuple.
3434 3443
3435 3444 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3436 3445
3437 3446 * setup.py (make_shortcut): Fixed message about directories
3438 3447 created during Windows installation (the directories were ok, just
3439 3448 the printed message was misleading). Thanks to Chris Liechti
3440 3449 <cliechti-AT-gmx.net> for the heads up.
3441 3450
3442 3451 2003-02-21 Fernando Perez <fperez@colorado.edu>
3443 3452
3444 3453 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3445 3454 of ValueError exception when checking for auto-execution. This
3446 3455 one is raised by things like Numeric arrays arr.flat when the
3447 3456 array is non-contiguous.
3448 3457
3449 3458 2003-01-31 Fernando Perez <fperez@colorado.edu>
3450 3459
3451 3460 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3452 3461 not return any value at all (even though the command would get
3453 3462 executed).
3454 3463 (xsys): Flush stdout right after printing the command to ensure
3455 3464 proper ordering of commands and command output in the total
3456 3465 output.
3457 3466 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3458 3467 system/getoutput as defaults. The old ones are kept for
3459 3468 compatibility reasons, so no code which uses this library needs
3460 3469 changing.
3461 3470
3462 3471 2003-01-27 *** Released version 0.2.14
3463 3472
3464 3473 2003-01-25 Fernando Perez <fperez@colorado.edu>
3465 3474
3466 3475 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3467 3476 functions defined in previous edit sessions could not be re-edited
3468 3477 (because the temp files were immediately removed). Now temp files
3469 3478 are removed only at IPython's exit.
3470 3479 (Magic.magic_run): Improved @run to perform shell-like expansions
3471 3480 on its arguments (~users and $VARS). With this, @run becomes more
3472 3481 like a normal command-line.
3473 3482
3474 3483 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3475 3484 bugs related to embedding and cleaned up that code. A fairly
3476 3485 important one was the impossibility to access the global namespace
3477 3486 through the embedded IPython (only local variables were visible).
3478 3487
3479 3488 2003-01-14 Fernando Perez <fperez@colorado.edu>
3480 3489
3481 3490 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3482 3491 auto-calling to be a bit more conservative. Now it doesn't get
3483 3492 triggered if any of '!=()<>' are in the rest of the input line, to
3484 3493 allow comparing callables. Thanks to Alex for the heads up.
3485 3494
3486 3495 2003-01-07 Fernando Perez <fperez@colorado.edu>
3487 3496
3488 3497 * IPython/genutils.py (page): fixed estimation of the number of
3489 3498 lines in a string to be paged to simply count newlines. This
3490 3499 prevents over-guessing due to embedded escape sequences. A better
3491 3500 long-term solution would involve stripping out the control chars
3492 3501 for the count, but it's potentially so expensive I just don't
3493 3502 think it's worth doing.
3494 3503
3495 3504 2002-12-19 *** Released version 0.2.14pre50
3496 3505
3497 3506 2002-12-19 Fernando Perez <fperez@colorado.edu>
3498 3507
3499 3508 * tools/release (version): Changed release scripts to inform
3500 3509 Andrea and build a NEWS file with a list of recent changes.
3501 3510
3502 3511 * IPython/ColorANSI.py (__all__): changed terminal detection
3503 3512 code. Seems to work better for xterms without breaking
3504 3513 konsole. Will need more testing to determine if WinXP and Mac OSX
3505 3514 also work ok.
3506 3515
3507 3516 2002-12-18 *** Released version 0.2.14pre49
3508 3517
3509 3518 2002-12-18 Fernando Perez <fperez@colorado.edu>
3510 3519
3511 3520 * Docs: added new info about Mac OSX, from Andrea.
3512 3521
3513 3522 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3514 3523 allow direct plotting of python strings whose format is the same
3515 3524 of gnuplot data files.
3516 3525
3517 3526 2002-12-16 Fernando Perez <fperez@colorado.edu>
3518 3527
3519 3528 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3520 3529 value of exit question to be acknowledged.
3521 3530
3522 3531 2002-12-03 Fernando Perez <fperez@colorado.edu>
3523 3532
3524 3533 * IPython/ipmaker.py: removed generators, which had been added
3525 3534 by mistake in an earlier debugging run. This was causing trouble
3526 3535 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3527 3536 for pointing this out.
3528 3537
3529 3538 2002-11-17 Fernando Perez <fperez@colorado.edu>
3530 3539
3531 3540 * Manual: updated the Gnuplot section.
3532 3541
3533 3542 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3534 3543 a much better split of what goes in Runtime and what goes in
3535 3544 Interactive.
3536 3545
3537 3546 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3538 3547 being imported from iplib.
3539 3548
3540 3549 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3541 3550 for command-passing. Now the global Gnuplot instance is called
3542 3551 'gp' instead of 'g', which was really a far too fragile and
3543 3552 common name.
3544 3553
3545 3554 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3546 3555 bounding boxes generated by Gnuplot for square plots.
3547 3556
3548 3557 * IPython/genutils.py (popkey): new function added. I should
3549 3558 suggest this on c.l.py as a dict method, it seems useful.
3550 3559
3551 3560 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3552 3561 to transparently handle PostScript generation. MUCH better than
3553 3562 the previous plot_eps/replot_eps (which I removed now). The code
3554 3563 is also fairly clean and well documented now (including
3555 3564 docstrings).
3556 3565
3557 3566 2002-11-13 Fernando Perez <fperez@colorado.edu>
3558 3567
3559 3568 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3560 3569 (inconsistent with options).
3561 3570
3562 3571 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3563 3572 manually disabled, I don't know why. Fixed it.
3564 3573 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3565 3574 eps output.
3566 3575
3567 3576 2002-11-12 Fernando Perez <fperez@colorado.edu>
3568 3577
3569 3578 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3570 3579 don't propagate up to caller. Fixes crash reported by François
3571 3580 Pinard.
3572 3581
3573 3582 2002-11-09 Fernando Perez <fperez@colorado.edu>
3574 3583
3575 3584 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3576 3585 history file for new users.
3577 3586 (make_IPython): fixed bug where initial install would leave the
3578 3587 user running in the .ipython dir.
3579 3588 (make_IPython): fixed bug where config dir .ipython would be
3580 3589 created regardless of the given -ipythondir option. Thanks to Cory
3581 3590 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3582 3591
3583 3592 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3584 3593 type confirmations. Will need to use it in all of IPython's code
3585 3594 consistently.
3586 3595
3587 3596 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3588 3597 context to print 31 lines instead of the default 5. This will make
3589 3598 the crash reports extremely detailed in case the problem is in
3590 3599 libraries I don't have access to.
3591 3600
3592 3601 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3593 3602 line of defense' code to still crash, but giving users fair
3594 3603 warning. I don't want internal errors to go unreported: if there's
3595 3604 an internal problem, IPython should crash and generate a full
3596 3605 report.
3597 3606
3598 3607 2002-11-08 Fernando Perez <fperez@colorado.edu>
3599 3608
3600 3609 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3601 3610 otherwise uncaught exceptions which can appear if people set
3602 3611 sys.stdout to something badly broken. Thanks to a crash report
3603 3612 from henni-AT-mail.brainbot.com.
3604 3613
3605 3614 2002-11-04 Fernando Perez <fperez@colorado.edu>
3606 3615
3607 3616 * IPython/iplib.py (InteractiveShell.interact): added
3608 3617 __IPYTHON__active to the builtins. It's a flag which goes on when
3609 3618 the interaction starts and goes off again when it stops. This
3610 3619 allows embedding code to detect being inside IPython. Before this
3611 3620 was done via __IPYTHON__, but that only shows that an IPython
3612 3621 instance has been created.
3613 3622
3614 3623 * IPython/Magic.py (Magic.magic_env): I realized that in a
3615 3624 UserDict, instance.data holds the data as a normal dict. So I
3616 3625 modified @env to return os.environ.data instead of rebuilding a
3617 3626 dict by hand.
3618 3627
3619 3628 2002-11-02 Fernando Perez <fperez@colorado.edu>
3620 3629
3621 3630 * IPython/genutils.py (warn): changed so that level 1 prints no
3622 3631 header. Level 2 is now the default (with 'WARNING' header, as
3623 3632 before). I think I tracked all places where changes were needed in
3624 3633 IPython, but outside code using the old level numbering may have
3625 3634 broken.
3626 3635
3627 3636 * IPython/iplib.py (InteractiveShell.runcode): added this to
3628 3637 handle the tracebacks in SystemExit traps correctly. The previous
3629 3638 code (through interact) was printing more of the stack than
3630 3639 necessary, showing IPython internal code to the user.
3631 3640
3632 3641 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3633 3642 default. Now that the default at the confirmation prompt is yes,
3634 3643 it's not so intrusive. François' argument that ipython sessions
3635 3644 tend to be complex enough not to lose them from an accidental C-d,
3636 3645 is a valid one.
3637 3646
3638 3647 * IPython/iplib.py (InteractiveShell.interact): added a
3639 3648 showtraceback() call to the SystemExit trap, and modified the exit
3640 3649 confirmation to have yes as the default.
3641 3650
3642 3651 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3643 3652 this file. It's been gone from the code for a long time, this was
3644 3653 simply leftover junk.
3645 3654
3646 3655 2002-11-01 Fernando Perez <fperez@colorado.edu>
3647 3656
3648 3657 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3649 3658 added. If set, IPython now traps EOF and asks for
3650 3659 confirmation. After a request by François Pinard.
3651 3660
3652 3661 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3653 3662 of @abort, and with a new (better) mechanism for handling the
3654 3663 exceptions.
3655 3664
3656 3665 2002-10-27 Fernando Perez <fperez@colorado.edu>
3657 3666
3658 3667 * IPython/usage.py (__doc__): updated the --help information and
3659 3668 the ipythonrc file to indicate that -log generates
3660 3669 ./ipython.log. Also fixed the corresponding info in @logstart.
3661 3670 This and several other fixes in the manuals thanks to reports by
3662 3671 François Pinard <pinard-AT-iro.umontreal.ca>.
3663 3672
3664 3673 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3665 3674 refer to @logstart (instead of @log, which doesn't exist).
3666 3675
3667 3676 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3668 3677 AttributeError crash. Thanks to Christopher Armstrong
3669 3678 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3670 3679 introduced recently (in 0.2.14pre37) with the fix to the eval
3671 3680 problem mentioned below.
3672 3681
3673 3682 2002-10-17 Fernando Perez <fperez@colorado.edu>
3674 3683
3675 3684 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3676 3685 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3677 3686
3678 3687 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3679 3688 this function to fix a problem reported by Alex Schmolck. He saw
3680 3689 it with list comprehensions and generators, which were getting
3681 3690 called twice. The real problem was an 'eval' call in testing for
3682 3691 automagic which was evaluating the input line silently.
3683 3692
3684 3693 This is a potentially very nasty bug, if the input has side
3685 3694 effects which must not be repeated. The code is much cleaner now,
3686 3695 without any blanket 'except' left and with a regexp test for
3687 3696 actual function names.
3688 3697
3689 3698 But an eval remains, which I'm not fully comfortable with. I just
3690 3699 don't know how to find out if an expression could be a callable in
3691 3700 the user's namespace without doing an eval on the string. However
3692 3701 that string is now much more strictly checked so that no code
3693 3702 slips by, so the eval should only happen for things that can
3694 3703 really be only function/method names.
3695 3704
3696 3705 2002-10-15 Fernando Perez <fperez@colorado.edu>
3697 3706
3698 3707 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3699 3708 OSX information to main manual, removed README_Mac_OSX file from
3700 3709 distribution. Also updated credits for recent additions.
3701 3710
3702 3711 2002-10-10 Fernando Perez <fperez@colorado.edu>
3703 3712
3704 3713 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3705 3714 terminal-related issues. Many thanks to Andrea Riciputi
3706 3715 <andrea.riciputi-AT-libero.it> for writing it.
3707 3716
3708 3717 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3709 3718 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3710 3719
3711 3720 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3712 3721 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3713 3722 <syver-en-AT-online.no> who both submitted patches for this problem.
3714 3723
3715 3724 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3716 3725 global embedding to make sure that things don't overwrite user
3717 3726 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3718 3727
3719 3728 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3720 3729 compatibility. Thanks to Hayden Callow
3721 3730 <h.callow-AT-elec.canterbury.ac.nz>
3722 3731
3723 3732 2002-10-04 Fernando Perez <fperez@colorado.edu>
3724 3733
3725 3734 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3726 3735 Gnuplot.File objects.
3727 3736
3728 3737 2002-07-23 Fernando Perez <fperez@colorado.edu>
3729 3738
3730 3739 * IPython/genutils.py (timing): Added timings() and timing() for
3731 3740 quick access to the most commonly needed data, the execution
3732 3741 times. Old timing() renamed to timings_out().
3733 3742
3734 3743 2002-07-18 Fernando Perez <fperez@colorado.edu>
3735 3744
3736 3745 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3737 3746 bug with nested instances disrupting the parent's tab completion.
3738 3747
3739 3748 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3740 3749 all_completions code to begin the emacs integration.
3741 3750
3742 3751 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3743 3752 argument to allow titling individual arrays when plotting.
3744 3753
3745 3754 2002-07-15 Fernando Perez <fperez@colorado.edu>
3746 3755
3747 3756 * setup.py (make_shortcut): changed to retrieve the value of
3748 3757 'Program Files' directory from the registry (this value changes in
3749 3758 non-english versions of Windows). Thanks to Thomas Fanslau
3750 3759 <tfanslau-AT-gmx.de> for the report.
3751 3760
3752 3761 2002-07-10 Fernando Perez <fperez@colorado.edu>
3753 3762
3754 3763 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3755 3764 a bug in pdb, which crashes if a line with only whitespace is
3756 3765 entered. Bug report submitted to sourceforge.
3757 3766
3758 3767 2002-07-09 Fernando Perez <fperez@colorado.edu>
3759 3768
3760 3769 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3761 3770 reporting exceptions (it's a bug in inspect.py, I just set a
3762 3771 workaround).
3763 3772
3764 3773 2002-07-08 Fernando Perez <fperez@colorado.edu>
3765 3774
3766 3775 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3767 3776 __IPYTHON__ in __builtins__ to show up in user_ns.
3768 3777
3769 3778 2002-07-03 Fernando Perez <fperez@colorado.edu>
3770 3779
3771 3780 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3772 3781 name from @gp_set_instance to @gp_set_default.
3773 3782
3774 3783 * IPython/ipmaker.py (make_IPython): default editor value set to
3775 3784 '0' (a string), to match the rc file. Otherwise will crash when
3776 3785 .strip() is called on it.
3777 3786
3778 3787
3779 3788 2002-06-28 Fernando Perez <fperez@colorado.edu>
3780 3789
3781 3790 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3782 3791 of files in current directory when a file is executed via
3783 3792 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3784 3793
3785 3794 * setup.py (manfiles): fix for rpm builds, submitted by RA
3786 3795 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3787 3796
3788 3797 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3789 3798 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3790 3799 string!). A. Schmolck caught this one.
3791 3800
3792 3801 2002-06-27 Fernando Perez <fperez@colorado.edu>
3793 3802
3794 3803 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3795 3804 defined files at the cmd line. __name__ wasn't being set to
3796 3805 __main__.
3797 3806
3798 3807 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3799 3808 regular lists and tuples besides Numeric arrays.
3800 3809
3801 3810 * IPython/Prompts.py (CachedOutput.__call__): Added output
3802 3811 supression for input ending with ';'. Similar to Mathematica and
3803 3812 Matlab. The _* vars and Out[] list are still updated, just like
3804 3813 Mathematica behaves.
3805 3814
3806 3815 2002-06-25 Fernando Perez <fperez@colorado.edu>
3807 3816
3808 3817 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3809 3818 .ini extensions for profiels under Windows.
3810 3819
3811 3820 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3812 3821 string form. Fix contributed by Alexander Schmolck
3813 3822 <a.schmolck-AT-gmx.net>
3814 3823
3815 3824 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3816 3825 pre-configured Gnuplot instance.
3817 3826
3818 3827 2002-06-21 Fernando Perez <fperez@colorado.edu>
3819 3828
3820 3829 * IPython/numutils.py (exp_safe): new function, works around the
3821 3830 underflow problems in Numeric.
3822 3831 (log2): New fn. Safe log in base 2: returns exact integer answer
3823 3832 for exact integer powers of 2.
3824 3833
3825 3834 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3826 3835 properly.
3827 3836
3828 3837 2002-06-20 Fernando Perez <fperez@colorado.edu>
3829 3838
3830 3839 * IPython/genutils.py (timing): new function like
3831 3840 Mathematica's. Similar to time_test, but returns more info.
3832 3841
3833 3842 2002-06-18 Fernando Perez <fperez@colorado.edu>
3834 3843
3835 3844 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3836 3845 according to Mike Heeter's suggestions.
3837 3846
3838 3847 2002-06-16 Fernando Perez <fperez@colorado.edu>
3839 3848
3840 3849 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3841 3850 system. GnuplotMagic is gone as a user-directory option. New files
3842 3851 make it easier to use all the gnuplot stuff both from external
3843 3852 programs as well as from IPython. Had to rewrite part of
3844 3853 hardcopy() b/c of a strange bug: often the ps files simply don't
3845 3854 get created, and require a repeat of the command (often several
3846 3855 times).
3847 3856
3848 3857 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3849 3858 resolve output channel at call time, so that if sys.stderr has
3850 3859 been redirected by user this gets honored.
3851 3860
3852 3861 2002-06-13 Fernando Perez <fperez@colorado.edu>
3853 3862
3854 3863 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3855 3864 IPShell. Kept a copy with the old names to avoid breaking people's
3856 3865 embedded code.
3857 3866
3858 3867 * IPython/ipython: simplified it to the bare minimum after
3859 3868 Holger's suggestions. Added info about how to use it in
3860 3869 PYTHONSTARTUP.
3861 3870
3862 3871 * IPython/Shell.py (IPythonShell): changed the options passing
3863 3872 from a string with funky %s replacements to a straight list. Maybe
3864 3873 a bit more typing, but it follows sys.argv conventions, so there's
3865 3874 less special-casing to remember.
3866 3875
3867 3876 2002-06-12 Fernando Perez <fperez@colorado.edu>
3868 3877
3869 3878 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3870 3879 command. Thanks to a suggestion by Mike Heeter.
3871 3880 (Magic.magic_pfile): added behavior to look at filenames if given
3872 3881 arg is not a defined object.
3873 3882 (Magic.magic_save): New @save function to save code snippets. Also
3874 3883 a Mike Heeter idea.
3875 3884
3876 3885 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3877 3886 plot() and replot(). Much more convenient now, especially for
3878 3887 interactive use.
3879 3888
3880 3889 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3881 3890 filenames.
3882 3891
3883 3892 2002-06-02 Fernando Perez <fperez@colorado.edu>
3884 3893
3885 3894 * IPython/Struct.py (Struct.__init__): modified to admit
3886 3895 initialization via another struct.
3887 3896
3888 3897 * IPython/genutils.py (SystemExec.__init__): New stateful
3889 3898 interface to xsys and bq. Useful for writing system scripts.
3890 3899
3891 3900 2002-05-30 Fernando Perez <fperez@colorado.edu>
3892 3901
3893 3902 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3894 3903 documents. This will make the user download smaller (it's getting
3895 3904 too big).
3896 3905
3897 3906 2002-05-29 Fernando Perez <fperez@colorado.edu>
3898 3907
3899 3908 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3900 3909 fix problems with shelve and pickle. Seems to work, but I don't
3901 3910 know if corner cases break it. Thanks to Mike Heeter
3902 3911 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3903 3912
3904 3913 2002-05-24 Fernando Perez <fperez@colorado.edu>
3905 3914
3906 3915 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3907 3916 macros having broken.
3908 3917
3909 3918 2002-05-21 Fernando Perez <fperez@colorado.edu>
3910 3919
3911 3920 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3912 3921 introduced logging bug: all history before logging started was
3913 3922 being written one character per line! This came from the redesign
3914 3923 of the input history as a special list which slices to strings,
3915 3924 not to lists.
3916 3925
3917 3926 2002-05-20 Fernando Perez <fperez@colorado.edu>
3918 3927
3919 3928 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3920 3929 be an attribute of all classes in this module. The design of these
3921 3930 classes needs some serious overhauling.
3922 3931
3923 3932 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3924 3933 which was ignoring '_' in option names.
3925 3934
3926 3935 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3927 3936 'Verbose_novars' to 'Context' and made it the new default. It's a
3928 3937 bit more readable and also safer than verbose.
3929 3938
3930 3939 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3931 3940 triple-quoted strings.
3932 3941
3933 3942 * IPython/OInspect.py (__all__): new module exposing the object
3934 3943 introspection facilities. Now the corresponding magics are dummy
3935 3944 wrappers around this. Having this module will make it much easier
3936 3945 to put these functions into our modified pdb.
3937 3946 This new object inspector system uses the new colorizing module,
3938 3947 so source code and other things are nicely syntax highlighted.
3939 3948
3940 3949 2002-05-18 Fernando Perez <fperez@colorado.edu>
3941 3950
3942 3951 * IPython/ColorANSI.py: Split the coloring tools into a separate
3943 3952 module so I can use them in other code easier (they were part of
3944 3953 ultraTB).
3945 3954
3946 3955 2002-05-17 Fernando Perez <fperez@colorado.edu>
3947 3956
3948 3957 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3949 3958 fixed it to set the global 'g' also to the called instance, as
3950 3959 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3951 3960 user's 'g' variables).
3952 3961
3953 3962 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3954 3963 global variables (aliases to _ih,_oh) so that users which expect
3955 3964 In[5] or Out[7] to work aren't unpleasantly surprised.
3956 3965 (InputList.__getslice__): new class to allow executing slices of
3957 3966 input history directly. Very simple class, complements the use of
3958 3967 macros.
3959 3968
3960 3969 2002-05-16 Fernando Perez <fperez@colorado.edu>
3961 3970
3962 3971 * setup.py (docdirbase): make doc directory be just doc/IPython
3963 3972 without version numbers, it will reduce clutter for users.
3964 3973
3965 3974 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3966 3975 execfile call to prevent possible memory leak. See for details:
3967 3976 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3968 3977
3969 3978 2002-05-15 Fernando Perez <fperez@colorado.edu>
3970 3979
3971 3980 * IPython/Magic.py (Magic.magic_psource): made the object
3972 3981 introspection names be more standard: pdoc, pdef, pfile and
3973 3982 psource. They all print/page their output, and it makes
3974 3983 remembering them easier. Kept old names for compatibility as
3975 3984 aliases.
3976 3985
3977 3986 2002-05-14 Fernando Perez <fperez@colorado.edu>
3978 3987
3979 3988 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3980 3989 what the mouse problem was. The trick is to use gnuplot with temp
3981 3990 files and NOT with pipes (for data communication), because having
3982 3991 both pipes and the mouse on is bad news.
3983 3992
3984 3993 2002-05-13 Fernando Perez <fperez@colorado.edu>
3985 3994
3986 3995 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3987 3996 bug. Information would be reported about builtins even when
3988 3997 user-defined functions overrode them.
3989 3998
3990 3999 2002-05-11 Fernando Perez <fperez@colorado.edu>
3991 4000
3992 4001 * IPython/__init__.py (__all__): removed FlexCompleter from
3993 4002 __all__ so that things don't fail in platforms without readline.
3994 4003
3995 4004 2002-05-10 Fernando Perez <fperez@colorado.edu>
3996 4005
3997 4006 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3998 4007 it requires Numeric, effectively making Numeric a dependency for
3999 4008 IPython.
4000 4009
4001 4010 * Released 0.2.13
4002 4011
4003 4012 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4004 4013 profiler interface. Now all the major options from the profiler
4005 4014 module are directly supported in IPython, both for single
4006 4015 expressions (@prun) and for full programs (@run -p).
4007 4016
4008 4017 2002-05-09 Fernando Perez <fperez@colorado.edu>
4009 4018
4010 4019 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4011 4020 magic properly formatted for screen.
4012 4021
4013 4022 * setup.py (make_shortcut): Changed things to put pdf version in
4014 4023 doc/ instead of doc/manual (had to change lyxport a bit).
4015 4024
4016 4025 * IPython/Magic.py (Profile.string_stats): made profile runs go
4017 4026 through pager (they are long and a pager allows searching, saving,
4018 4027 etc.)
4019 4028
4020 4029 2002-05-08 Fernando Perez <fperez@colorado.edu>
4021 4030
4022 4031 * Released 0.2.12
4023 4032
4024 4033 2002-05-06 Fernando Perez <fperez@colorado.edu>
4025 4034
4026 4035 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4027 4036 introduced); 'hist n1 n2' was broken.
4028 4037 (Magic.magic_pdb): added optional on/off arguments to @pdb
4029 4038 (Magic.magic_run): added option -i to @run, which executes code in
4030 4039 the IPython namespace instead of a clean one. Also added @irun as
4031 4040 an alias to @run -i.
4032 4041
4033 4042 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4034 4043 fixed (it didn't really do anything, the namespaces were wrong).
4035 4044
4036 4045 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4037 4046
4038 4047 * IPython/__init__.py (__all__): Fixed package namespace, now
4039 4048 'import IPython' does give access to IPython.<all> as
4040 4049 expected. Also renamed __release__ to Release.
4041 4050
4042 4051 * IPython/Debugger.py (__license__): created new Pdb class which
4043 4052 functions like a drop-in for the normal pdb.Pdb but does NOT
4044 4053 import readline by default. This way it doesn't muck up IPython's
4045 4054 readline handling, and now tab-completion finally works in the
4046 4055 debugger -- sort of. It completes things globally visible, but the
4047 4056 completer doesn't track the stack as pdb walks it. That's a bit
4048 4057 tricky, and I'll have to implement it later.
4049 4058
4050 4059 2002-05-05 Fernando Perez <fperez@colorado.edu>
4051 4060
4052 4061 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4053 4062 magic docstrings when printed via ? (explicit \'s were being
4054 4063 printed).
4055 4064
4056 4065 * IPython/ipmaker.py (make_IPython): fixed namespace
4057 4066 identification bug. Now variables loaded via logs or command-line
4058 4067 files are recognized in the interactive namespace by @who.
4059 4068
4060 4069 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4061 4070 log replay system stemming from the string form of Structs.
4062 4071
4063 4072 * IPython/Magic.py (Macro.__init__): improved macros to properly
4064 4073 handle magic commands in them.
4065 4074 (Magic.magic_logstart): usernames are now expanded so 'logstart
4066 4075 ~/mylog' now works.
4067 4076
4068 4077 * IPython/iplib.py (complete): fixed bug where paths starting with
4069 4078 '/' would be completed as magic names.
4070 4079
4071 4080 2002-05-04 Fernando Perez <fperez@colorado.edu>
4072 4081
4073 4082 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4074 4083 allow running full programs under the profiler's control.
4075 4084
4076 4085 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4077 4086 mode to report exceptions verbosely but without formatting
4078 4087 variables. This addresses the issue of ipython 'freezing' (it's
4079 4088 not frozen, but caught in an expensive formatting loop) when huge
4080 4089 variables are in the context of an exception.
4081 4090 (VerboseTB.text): Added '--->' markers at line where exception was
4082 4091 triggered. Much clearer to read, especially in NoColor modes.
4083 4092
4084 4093 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4085 4094 implemented in reverse when changing to the new parse_options().
4086 4095
4087 4096 2002-05-03 Fernando Perez <fperez@colorado.edu>
4088 4097
4089 4098 * IPython/Magic.py (Magic.parse_options): new function so that
4090 4099 magics can parse options easier.
4091 4100 (Magic.magic_prun): new function similar to profile.run(),
4092 4101 suggested by Chris Hart.
4093 4102 (Magic.magic_cd): fixed behavior so that it only changes if
4094 4103 directory actually is in history.
4095 4104
4096 4105 * IPython/usage.py (__doc__): added information about potential
4097 4106 slowness of Verbose exception mode when there are huge data
4098 4107 structures to be formatted (thanks to Archie Paulson).
4099 4108
4100 4109 * IPython/ipmaker.py (make_IPython): Changed default logging
4101 4110 (when simply called with -log) to use curr_dir/ipython.log in
4102 4111 rotate mode. Fixed crash which was occuring with -log before
4103 4112 (thanks to Jim Boyle).
4104 4113
4105 4114 2002-05-01 Fernando Perez <fperez@colorado.edu>
4106 4115
4107 4116 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4108 4117 was nasty -- though somewhat of a corner case).
4109 4118
4110 4119 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4111 4120 text (was a bug).
4112 4121
4113 4122 2002-04-30 Fernando Perez <fperez@colorado.edu>
4114 4123
4115 4124 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4116 4125 a print after ^D or ^C from the user so that the In[] prompt
4117 4126 doesn't over-run the gnuplot one.
4118 4127
4119 4128 2002-04-29 Fernando Perez <fperez@colorado.edu>
4120 4129
4121 4130 * Released 0.2.10
4122 4131
4123 4132 * IPython/__release__.py (version): get date dynamically.
4124 4133
4125 4134 * Misc. documentation updates thanks to Arnd's comments. Also ran
4126 4135 a full spellcheck on the manual (hadn't been done in a while).
4127 4136
4128 4137 2002-04-27 Fernando Perez <fperez@colorado.edu>
4129 4138
4130 4139 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4131 4140 starting a log in mid-session would reset the input history list.
4132 4141
4133 4142 2002-04-26 Fernando Perez <fperez@colorado.edu>
4134 4143
4135 4144 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4136 4145 all files were being included in an update. Now anything in
4137 4146 UserConfig that matches [A-Za-z]*.py will go (this excludes
4138 4147 __init__.py)
4139 4148
4140 4149 2002-04-25 Fernando Perez <fperez@colorado.edu>
4141 4150
4142 4151 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4143 4152 to __builtins__ so that any form of embedded or imported code can
4144 4153 test for being inside IPython.
4145 4154
4146 4155 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4147 4156 changed to GnuplotMagic because it's now an importable module,
4148 4157 this makes the name follow that of the standard Gnuplot module.
4149 4158 GnuplotMagic can now be loaded at any time in mid-session.
4150 4159
4151 4160 2002-04-24 Fernando Perez <fperez@colorado.edu>
4152 4161
4153 4162 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4154 4163 the globals (IPython has its own namespace) and the
4155 4164 PhysicalQuantity stuff is much better anyway.
4156 4165
4157 4166 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4158 4167 embedding example to standard user directory for
4159 4168 distribution. Also put it in the manual.
4160 4169
4161 4170 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4162 4171 instance as first argument (so it doesn't rely on some obscure
4163 4172 hidden global).
4164 4173
4165 4174 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4166 4175 delimiters. While it prevents ().TAB from working, it allows
4167 4176 completions in open (... expressions. This is by far a more common
4168 4177 case.
4169 4178
4170 4179 2002-04-23 Fernando Perez <fperez@colorado.edu>
4171 4180
4172 4181 * IPython/Extensions/InterpreterPasteInput.py: new
4173 4182 syntax-processing module for pasting lines with >>> or ... at the
4174 4183 start.
4175 4184
4176 4185 * IPython/Extensions/PhysicalQ_Interactive.py
4177 4186 (PhysicalQuantityInteractive.__int__): fixed to work with either
4178 4187 Numeric or math.
4179 4188
4180 4189 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4181 4190 provided profiles. Now we have:
4182 4191 -math -> math module as * and cmath with its own namespace.
4183 4192 -numeric -> Numeric as *, plus gnuplot & grace
4184 4193 -physics -> same as before
4185 4194
4186 4195 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4187 4196 user-defined magics wouldn't be found by @magic if they were
4188 4197 defined as class methods. Also cleaned up the namespace search
4189 4198 logic and the string building (to use %s instead of many repeated
4190 4199 string adds).
4191 4200
4192 4201 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4193 4202 of user-defined magics to operate with class methods (cleaner, in
4194 4203 line with the gnuplot code).
4195 4204
4196 4205 2002-04-22 Fernando Perez <fperez@colorado.edu>
4197 4206
4198 4207 * setup.py: updated dependency list so that manual is updated when
4199 4208 all included files change.
4200 4209
4201 4210 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4202 4211 the delimiter removal option (the fix is ugly right now).
4203 4212
4204 4213 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4205 4214 all of the math profile (quicker loading, no conflict between
4206 4215 g-9.8 and g-gnuplot).
4207 4216
4208 4217 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4209 4218 name of post-mortem files to IPython_crash_report.txt.
4210 4219
4211 4220 * Cleanup/update of the docs. Added all the new readline info and
4212 4221 formatted all lists as 'real lists'.
4213 4222
4214 4223 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4215 4224 tab-completion options, since the full readline parse_and_bind is
4216 4225 now accessible.
4217 4226
4218 4227 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4219 4228 handling of readline options. Now users can specify any string to
4220 4229 be passed to parse_and_bind(), as well as the delimiters to be
4221 4230 removed.
4222 4231 (InteractiveShell.__init__): Added __name__ to the global
4223 4232 namespace so that things like Itpl which rely on its existence
4224 4233 don't crash.
4225 4234 (InteractiveShell._prefilter): Defined the default with a _ so
4226 4235 that prefilter() is easier to override, while the default one
4227 4236 remains available.
4228 4237
4229 4238 2002-04-18 Fernando Perez <fperez@colorado.edu>
4230 4239
4231 4240 * Added information about pdb in the docs.
4232 4241
4233 4242 2002-04-17 Fernando Perez <fperez@colorado.edu>
4234 4243
4235 4244 * IPython/ipmaker.py (make_IPython): added rc_override option to
4236 4245 allow passing config options at creation time which may override
4237 4246 anything set in the config files or command line. This is
4238 4247 particularly useful for configuring embedded instances.
4239 4248
4240 4249 2002-04-15 Fernando Perez <fperez@colorado.edu>
4241 4250
4242 4251 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4243 4252 crash embedded instances because of the input cache falling out of
4244 4253 sync with the output counter.
4245 4254
4246 4255 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4247 4256 mode which calls pdb after an uncaught exception in IPython itself.
4248 4257
4249 4258 2002-04-14 Fernando Perez <fperez@colorado.edu>
4250 4259
4251 4260 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4252 4261 readline, fix it back after each call.
4253 4262
4254 4263 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4255 4264 method to force all access via __call__(), which guarantees that
4256 4265 traceback references are properly deleted.
4257 4266
4258 4267 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4259 4268 improve printing when pprint is in use.
4260 4269
4261 4270 2002-04-13 Fernando Perez <fperez@colorado.edu>
4262 4271
4263 4272 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4264 4273 exceptions aren't caught anymore. If the user triggers one, he
4265 4274 should know why he's doing it and it should go all the way up,
4266 4275 just like any other exception. So now @abort will fully kill the
4267 4276 embedded interpreter and the embedding code (unless that happens
4268 4277 to catch SystemExit).
4269 4278
4270 4279 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4271 4280 and a debugger() method to invoke the interactive pdb debugger
4272 4281 after printing exception information. Also added the corresponding
4273 4282 -pdb option and @pdb magic to control this feature, and updated
4274 4283 the docs. After a suggestion from Christopher Hart
4275 4284 (hart-AT-caltech.edu).
4276 4285
4277 4286 2002-04-12 Fernando Perez <fperez@colorado.edu>
4278 4287
4279 4288 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4280 4289 the exception handlers defined by the user (not the CrashHandler)
4281 4290 so that user exceptions don't trigger an ipython bug report.
4282 4291
4283 4292 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4284 4293 configurable (it should have always been so).
4285 4294
4286 4295 2002-03-26 Fernando Perez <fperez@colorado.edu>
4287 4296
4288 4297 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4289 4298 and there to fix embedding namespace issues. This should all be
4290 4299 done in a more elegant way.
4291 4300
4292 4301 2002-03-25 Fernando Perez <fperez@colorado.edu>
4293 4302
4294 4303 * IPython/genutils.py (get_home_dir): Try to make it work under
4295 4304 win9x also.
4296 4305
4297 4306 2002-03-20 Fernando Perez <fperez@colorado.edu>
4298 4307
4299 4308 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4300 4309 sys.displayhook untouched upon __init__.
4301 4310
4302 4311 2002-03-19 Fernando Perez <fperez@colorado.edu>
4303 4312
4304 4313 * Released 0.2.9 (for embedding bug, basically).
4305 4314
4306 4315 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4307 4316 exceptions so that enclosing shell's state can be restored.
4308 4317
4309 4318 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4310 4319 naming conventions in the .ipython/ dir.
4311 4320
4312 4321 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4313 4322 from delimiters list so filenames with - in them get expanded.
4314 4323
4315 4324 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4316 4325 sys.displayhook not being properly restored after an embedded call.
4317 4326
4318 4327 2002-03-18 Fernando Perez <fperez@colorado.edu>
4319 4328
4320 4329 * Released 0.2.8
4321 4330
4322 4331 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4323 4332 some files weren't being included in a -upgrade.
4324 4333 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4325 4334 on' so that the first tab completes.
4326 4335 (InteractiveShell.handle_magic): fixed bug with spaces around
4327 4336 quotes breaking many magic commands.
4328 4337
4329 4338 * setup.py: added note about ignoring the syntax error messages at
4330 4339 installation.
4331 4340
4332 4341 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4333 4342 streamlining the gnuplot interface, now there's only one magic @gp.
4334 4343
4335 4344 2002-03-17 Fernando Perez <fperez@colorado.edu>
4336 4345
4337 4346 * IPython/UserConfig/magic_gnuplot.py: new name for the
4338 4347 example-magic_pm.py file. Much enhanced system, now with a shell
4339 4348 for communicating directly with gnuplot, one command at a time.
4340 4349
4341 4350 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4342 4351 setting __name__=='__main__'.
4343 4352
4344 4353 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4345 4354 mini-shell for accessing gnuplot from inside ipython. Should
4346 4355 extend it later for grace access too. Inspired by Arnd's
4347 4356 suggestion.
4348 4357
4349 4358 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4350 4359 calling magic functions with () in their arguments. Thanks to Arnd
4351 4360 Baecker for pointing this to me.
4352 4361
4353 4362 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4354 4363 infinitely for integer or complex arrays (only worked with floats).
4355 4364
4356 4365 2002-03-16 Fernando Perez <fperez@colorado.edu>
4357 4366
4358 4367 * setup.py: Merged setup and setup_windows into a single script
4359 4368 which properly handles things for windows users.
4360 4369
4361 4370 2002-03-15 Fernando Perez <fperez@colorado.edu>
4362 4371
4363 4372 * Big change to the manual: now the magics are all automatically
4364 4373 documented. This information is generated from their docstrings
4365 4374 and put in a latex file included by the manual lyx file. This way
4366 4375 we get always up to date information for the magics. The manual
4367 4376 now also has proper version information, also auto-synced.
4368 4377
4369 4378 For this to work, an undocumented --magic_docstrings option was added.
4370 4379
4371 4380 2002-03-13 Fernando Perez <fperez@colorado.edu>
4372 4381
4373 4382 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4374 4383 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4375 4384
4376 4385 2002-03-12 Fernando Perez <fperez@colorado.edu>
4377 4386
4378 4387 * IPython/ultraTB.py (TermColors): changed color escapes again to
4379 4388 fix the (old, reintroduced) line-wrapping bug. Basically, if
4380 4389 \001..\002 aren't given in the color escapes, lines get wrapped
4381 4390 weirdly. But giving those screws up old xterms and emacs terms. So
4382 4391 I added some logic for emacs terms to be ok, but I can't identify old
4383 4392 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4384 4393
4385 4394 2002-03-10 Fernando Perez <fperez@colorado.edu>
4386 4395
4387 4396 * IPython/usage.py (__doc__): Various documentation cleanups and
4388 4397 updates, both in usage docstrings and in the manual.
4389 4398
4390 4399 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4391 4400 handling of caching. Set minimum acceptabe value for having a
4392 4401 cache at 20 values.
4393 4402
4394 4403 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4395 4404 install_first_time function to a method, renamed it and added an
4396 4405 'upgrade' mode. Now people can update their config directory with
4397 4406 a simple command line switch (-upgrade, also new).
4398 4407
4399 4408 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4400 4409 @file (convenient for automagic users under Python >= 2.2).
4401 4410 Removed @files (it seemed more like a plural than an abbrev. of
4402 4411 'file show').
4403 4412
4404 4413 * IPython/iplib.py (install_first_time): Fixed crash if there were
4405 4414 backup files ('~') in .ipython/ install directory.
4406 4415
4407 4416 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4408 4417 system. Things look fine, but these changes are fairly
4409 4418 intrusive. Test them for a few days.
4410 4419
4411 4420 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4412 4421 the prompts system. Now all in/out prompt strings are user
4413 4422 controllable. This is particularly useful for embedding, as one
4414 4423 can tag embedded instances with particular prompts.
4415 4424
4416 4425 Also removed global use of sys.ps1/2, which now allows nested
4417 4426 embeddings without any problems. Added command-line options for
4418 4427 the prompt strings.
4419 4428
4420 4429 2002-03-08 Fernando Perez <fperez@colorado.edu>
4421 4430
4422 4431 * IPython/UserConfig/example-embed-short.py (ipshell): added
4423 4432 example file with the bare minimum code for embedding.
4424 4433
4425 4434 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4426 4435 functionality for the embeddable shell to be activated/deactivated
4427 4436 either globally or at each call.
4428 4437
4429 4438 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4430 4439 rewriting the prompt with '--->' for auto-inputs with proper
4431 4440 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4432 4441 this is handled by the prompts class itself, as it should.
4433 4442
4434 4443 2002-03-05 Fernando Perez <fperez@colorado.edu>
4435 4444
4436 4445 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4437 4446 @logstart to avoid name clashes with the math log function.
4438 4447
4439 4448 * Big updates to X/Emacs section of the manual.
4440 4449
4441 4450 * Removed ipython_emacs. Milan explained to me how to pass
4442 4451 arguments to ipython through Emacs. Some day I'm going to end up
4443 4452 learning some lisp...
4444 4453
4445 4454 2002-03-04 Fernando Perez <fperez@colorado.edu>
4446 4455
4447 4456 * IPython/ipython_emacs: Created script to be used as the
4448 4457 py-python-command Emacs variable so we can pass IPython
4449 4458 parameters. I can't figure out how to tell Emacs directly to pass
4450 4459 parameters to IPython, so a dummy shell script will do it.
4451 4460
4452 4461 Other enhancements made for things to work better under Emacs'
4453 4462 various types of terminals. Many thanks to Milan Zamazal
4454 4463 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4455 4464
4456 4465 2002-03-01 Fernando Perez <fperez@colorado.edu>
4457 4466
4458 4467 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4459 4468 that loading of readline is now optional. This gives better
4460 4469 control to emacs users.
4461 4470
4462 4471 * IPython/ultraTB.py (__date__): Modified color escape sequences
4463 4472 and now things work fine under xterm and in Emacs' term buffers
4464 4473 (though not shell ones). Well, in emacs you get colors, but all
4465 4474 seem to be 'light' colors (no difference between dark and light
4466 4475 ones). But the garbage chars are gone, and also in xterms. It
4467 4476 seems that now I'm using 'cleaner' ansi sequences.
4468 4477
4469 4478 2002-02-21 Fernando Perez <fperez@colorado.edu>
4470 4479
4471 4480 * Released 0.2.7 (mainly to publish the scoping fix).
4472 4481
4473 4482 * IPython/Logger.py (Logger.logstate): added. A corresponding
4474 4483 @logstate magic was created.
4475 4484
4476 4485 * IPython/Magic.py: fixed nested scoping problem under Python
4477 4486 2.1.x (automagic wasn't working).
4478 4487
4479 4488 2002-02-20 Fernando Perez <fperez@colorado.edu>
4480 4489
4481 4490 * Released 0.2.6.
4482 4491
4483 4492 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4484 4493 option so that logs can come out without any headers at all.
4485 4494
4486 4495 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4487 4496 SciPy.
4488 4497
4489 4498 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4490 4499 that embedded IPython calls don't require vars() to be explicitly
4491 4500 passed. Now they are extracted from the caller's frame (code
4492 4501 snatched from Eric Jones' weave). Added better documentation to
4493 4502 the section on embedding and the example file.
4494 4503
4495 4504 * IPython/genutils.py (page): Changed so that under emacs, it just
4496 4505 prints the string. You can then page up and down in the emacs
4497 4506 buffer itself. This is how the builtin help() works.
4498 4507
4499 4508 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4500 4509 macro scoping: macros need to be executed in the user's namespace
4501 4510 to work as if they had been typed by the user.
4502 4511
4503 4512 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4504 4513 execute automatically (no need to type 'exec...'). They then
4505 4514 behave like 'true macros'. The printing system was also modified
4506 4515 for this to work.
4507 4516
4508 4517 2002-02-19 Fernando Perez <fperez@colorado.edu>
4509 4518
4510 4519 * IPython/genutils.py (page_file): new function for paging files
4511 4520 in an OS-independent way. Also necessary for file viewing to work
4512 4521 well inside Emacs buffers.
4513 4522 (page): Added checks for being in an emacs buffer.
4514 4523 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4515 4524 same bug in iplib.
4516 4525
4517 4526 2002-02-18 Fernando Perez <fperez@colorado.edu>
4518 4527
4519 4528 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4520 4529 of readline so that IPython can work inside an Emacs buffer.
4521 4530
4522 4531 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4523 4532 method signatures (they weren't really bugs, but it looks cleaner
4524 4533 and keeps PyChecker happy).
4525 4534
4526 4535 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4527 4536 for implementing various user-defined hooks. Currently only
4528 4537 display is done.
4529 4538
4530 4539 * IPython/Prompts.py (CachedOutput._display): changed display
4531 4540 functions so that they can be dynamically changed by users easily.
4532 4541
4533 4542 * IPython/Extensions/numeric_formats.py (num_display): added an
4534 4543 extension for printing NumPy arrays in flexible manners. It
4535 4544 doesn't do anything yet, but all the structure is in
4536 4545 place. Ultimately the plan is to implement output format control
4537 4546 like in Octave.
4538 4547
4539 4548 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4540 4549 methods are found at run-time by all the automatic machinery.
4541 4550
4542 4551 2002-02-17 Fernando Perez <fperez@colorado.edu>
4543 4552
4544 4553 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4545 4554 whole file a little.
4546 4555
4547 4556 * ToDo: closed this document. Now there's a new_design.lyx
4548 4557 document for all new ideas. Added making a pdf of it for the
4549 4558 end-user distro.
4550 4559
4551 4560 * IPython/Logger.py (Logger.switch_log): Created this to replace
4552 4561 logon() and logoff(). It also fixes a nasty crash reported by
4553 4562 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4554 4563
4555 4564 * IPython/iplib.py (complete): got auto-completion to work with
4556 4565 automagic (I had wanted this for a long time).
4557 4566
4558 4567 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4559 4568 to @file, since file() is now a builtin and clashes with automagic
4560 4569 for @file.
4561 4570
4562 4571 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4563 4572 of this was previously in iplib, which had grown to more than 2000
4564 4573 lines, way too long. No new functionality, but it makes managing
4565 4574 the code a bit easier.
4566 4575
4567 4576 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4568 4577 information to crash reports.
4569 4578
4570 4579 2002-02-12 Fernando Perez <fperez@colorado.edu>
4571 4580
4572 4581 * Released 0.2.5.
4573 4582
4574 4583 2002-02-11 Fernando Perez <fperez@colorado.edu>
4575 4584
4576 4585 * Wrote a relatively complete Windows installer. It puts
4577 4586 everything in place, creates Start Menu entries and fixes the
4578 4587 color issues. Nothing fancy, but it works.
4579 4588
4580 4589 2002-02-10 Fernando Perez <fperez@colorado.edu>
4581 4590
4582 4591 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4583 4592 os.path.expanduser() call so that we can type @run ~/myfile.py and
4584 4593 have thigs work as expected.
4585 4594
4586 4595 * IPython/genutils.py (page): fixed exception handling so things
4587 4596 work both in Unix and Windows correctly. Quitting a pager triggers
4588 4597 an IOError/broken pipe in Unix, and in windows not finding a pager
4589 4598 is also an IOError, so I had to actually look at the return value
4590 4599 of the exception, not just the exception itself. Should be ok now.
4591 4600
4592 4601 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4593 4602 modified to allow case-insensitive color scheme changes.
4594 4603
4595 4604 2002-02-09 Fernando Perez <fperez@colorado.edu>
4596 4605
4597 4606 * IPython/genutils.py (native_line_ends): new function to leave
4598 4607 user config files with os-native line-endings.
4599 4608
4600 4609 * README and manual updates.
4601 4610
4602 4611 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4603 4612 instead of StringType to catch Unicode strings.
4604 4613
4605 4614 * IPython/genutils.py (filefind): fixed bug for paths with
4606 4615 embedded spaces (very common in Windows).
4607 4616
4608 4617 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4609 4618 files under Windows, so that they get automatically associated
4610 4619 with a text editor. Windows makes it a pain to handle
4611 4620 extension-less files.
4612 4621
4613 4622 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4614 4623 warning about readline only occur for Posix. In Windows there's no
4615 4624 way to get readline, so why bother with the warning.
4616 4625
4617 4626 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4618 4627 for __str__ instead of dir(self), since dir() changed in 2.2.
4619 4628
4620 4629 * Ported to Windows! Tested on XP, I suspect it should work fine
4621 4630 on NT/2000, but I don't think it will work on 98 et al. That
4622 4631 series of Windows is such a piece of junk anyway that I won't try
4623 4632 porting it there. The XP port was straightforward, showed a few
4624 4633 bugs here and there (fixed all), in particular some string
4625 4634 handling stuff which required considering Unicode strings (which
4626 4635 Windows uses). This is good, but hasn't been too tested :) No
4627 4636 fancy installer yet, I'll put a note in the manual so people at
4628 4637 least make manually a shortcut.
4629 4638
4630 4639 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4631 4640 into a single one, "colors". This now controls both prompt and
4632 4641 exception color schemes, and can be changed both at startup
4633 4642 (either via command-line switches or via ipythonrc files) and at
4634 4643 runtime, with @colors.
4635 4644 (Magic.magic_run): renamed @prun to @run and removed the old
4636 4645 @run. The two were too similar to warrant keeping both.
4637 4646
4638 4647 2002-02-03 Fernando Perez <fperez@colorado.edu>
4639 4648
4640 4649 * IPython/iplib.py (install_first_time): Added comment on how to
4641 4650 configure the color options for first-time users. Put a <return>
4642 4651 request at the end so that small-terminal users get a chance to
4643 4652 read the startup info.
4644 4653
4645 4654 2002-01-23 Fernando Perez <fperez@colorado.edu>
4646 4655
4647 4656 * IPython/iplib.py (CachedOutput.update): Changed output memory
4648 4657 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4649 4658 input history we still use _i. Did this b/c these variable are
4650 4659 very commonly used in interactive work, so the less we need to
4651 4660 type the better off we are.
4652 4661 (Magic.magic_prun): updated @prun to better handle the namespaces
4653 4662 the file will run in, including a fix for __name__ not being set
4654 4663 before.
4655 4664
4656 4665 2002-01-20 Fernando Perez <fperez@colorado.edu>
4657 4666
4658 4667 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4659 4668 extra garbage for Python 2.2. Need to look more carefully into
4660 4669 this later.
4661 4670
4662 4671 2002-01-19 Fernando Perez <fperez@colorado.edu>
4663 4672
4664 4673 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4665 4674 display SyntaxError exceptions properly formatted when they occur
4666 4675 (they can be triggered by imported code).
4667 4676
4668 4677 2002-01-18 Fernando Perez <fperez@colorado.edu>
4669 4678
4670 4679 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4671 4680 SyntaxError exceptions are reported nicely formatted, instead of
4672 4681 spitting out only offset information as before.
4673 4682 (Magic.magic_prun): Added the @prun function for executing
4674 4683 programs with command line args inside IPython.
4675 4684
4676 4685 2002-01-16 Fernando Perez <fperez@colorado.edu>
4677 4686
4678 4687 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4679 4688 to *not* include the last item given in a range. This brings their
4680 4689 behavior in line with Python's slicing:
4681 4690 a[n1:n2] -> a[n1]...a[n2-1]
4682 4691 It may be a bit less convenient, but I prefer to stick to Python's
4683 4692 conventions *everywhere*, so users never have to wonder.
4684 4693 (Magic.magic_macro): Added @macro function to ease the creation of
4685 4694 macros.
4686 4695
4687 4696 2002-01-05 Fernando Perez <fperez@colorado.edu>
4688 4697
4689 4698 * Released 0.2.4.
4690 4699
4691 4700 * IPython/iplib.py (Magic.magic_pdef):
4692 4701 (InteractiveShell.safe_execfile): report magic lines and error
4693 4702 lines without line numbers so one can easily copy/paste them for
4694 4703 re-execution.
4695 4704
4696 4705 * Updated manual with recent changes.
4697 4706
4698 4707 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4699 4708 docstring printing when class? is called. Very handy for knowing
4700 4709 how to create class instances (as long as __init__ is well
4701 4710 documented, of course :)
4702 4711 (Magic.magic_doc): print both class and constructor docstrings.
4703 4712 (Magic.magic_pdef): give constructor info if passed a class and
4704 4713 __call__ info for callable object instances.
4705 4714
4706 4715 2002-01-04 Fernando Perez <fperez@colorado.edu>
4707 4716
4708 4717 * Made deep_reload() off by default. It doesn't always work
4709 4718 exactly as intended, so it's probably safer to have it off. It's
4710 4719 still available as dreload() anyway, so nothing is lost.
4711 4720
4712 4721 2002-01-02 Fernando Perez <fperez@colorado.edu>
4713 4722
4714 4723 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4715 4724 so I wanted an updated release).
4716 4725
4717 4726 2001-12-27 Fernando Perez <fperez@colorado.edu>
4718 4727
4719 4728 * IPython/iplib.py (InteractiveShell.interact): Added the original
4720 4729 code from 'code.py' for this module in order to change the
4721 4730 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4722 4731 the history cache would break when the user hit Ctrl-C, and
4723 4732 interact() offers no way to add any hooks to it.
4724 4733
4725 4734 2001-12-23 Fernando Perez <fperez@colorado.edu>
4726 4735
4727 4736 * setup.py: added check for 'MANIFEST' before trying to remove
4728 4737 it. Thanks to Sean Reifschneider.
4729 4738
4730 4739 2001-12-22 Fernando Perez <fperez@colorado.edu>
4731 4740
4732 4741 * Released 0.2.2.
4733 4742
4734 4743 * Finished (reasonably) writing the manual. Later will add the
4735 4744 python-standard navigation stylesheets, but for the time being
4736 4745 it's fairly complete. Distribution will include html and pdf
4737 4746 versions.
4738 4747
4739 4748 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4740 4749 (MayaVi author).
4741 4750
4742 4751 2001-12-21 Fernando Perez <fperez@colorado.edu>
4743 4752
4744 4753 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4745 4754 good public release, I think (with the manual and the distutils
4746 4755 installer). The manual can use some work, but that can go
4747 4756 slowly. Otherwise I think it's quite nice for end users. Next
4748 4757 summer, rewrite the guts of it...
4749 4758
4750 4759 * Changed format of ipythonrc files to use whitespace as the
4751 4760 separator instead of an explicit '='. Cleaner.
4752 4761
4753 4762 2001-12-20 Fernando Perez <fperez@colorado.edu>
4754 4763
4755 4764 * Started a manual in LyX. For now it's just a quick merge of the
4756 4765 various internal docstrings and READMEs. Later it may grow into a
4757 4766 nice, full-blown manual.
4758 4767
4759 4768 * Set up a distutils based installer. Installation should now be
4760 4769 trivially simple for end-users.
4761 4770
4762 4771 2001-12-11 Fernando Perez <fperez@colorado.edu>
4763 4772
4764 4773 * Released 0.2.0. First public release, announced it at
4765 4774 comp.lang.python. From now on, just bugfixes...
4766 4775
4767 4776 * Went through all the files, set copyright/license notices and
4768 4777 cleaned up things. Ready for release.
4769 4778
4770 4779 2001-12-10 Fernando Perez <fperez@colorado.edu>
4771 4780
4772 4781 * Changed the first-time installer not to use tarfiles. It's more
4773 4782 robust now and less unix-dependent. Also makes it easier for
4774 4783 people to later upgrade versions.
4775 4784
4776 4785 * Changed @exit to @abort to reflect the fact that it's pretty
4777 4786 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4778 4787 becomes significant only when IPyhton is embedded: in that case,
4779 4788 C-D closes IPython only, but @abort kills the enclosing program
4780 4789 too (unless it had called IPython inside a try catching
4781 4790 SystemExit).
4782 4791
4783 4792 * Created Shell module which exposes the actuall IPython Shell
4784 4793 classes, currently the normal and the embeddable one. This at
4785 4794 least offers a stable interface we won't need to change when
4786 4795 (later) the internals are rewritten. That rewrite will be confined
4787 4796 to iplib and ipmaker, but the Shell interface should remain as is.
4788 4797
4789 4798 * Added embed module which offers an embeddable IPShell object,
4790 4799 useful to fire up IPython *inside* a running program. Great for
4791 4800 debugging or dynamical data analysis.
4792 4801
4793 4802 2001-12-08 Fernando Perez <fperez@colorado.edu>
4794 4803
4795 4804 * Fixed small bug preventing seeing info from methods of defined
4796 4805 objects (incorrect namespace in _ofind()).
4797 4806
4798 4807 * Documentation cleanup. Moved the main usage docstrings to a
4799 4808 separate file, usage.py (cleaner to maintain, and hopefully in the
4800 4809 future some perlpod-like way of producing interactive, man and
4801 4810 html docs out of it will be found).
4802 4811
4803 4812 * Added @profile to see your profile at any time.
4804 4813
4805 4814 * Added @p as an alias for 'print'. It's especially convenient if
4806 4815 using automagic ('p x' prints x).
4807 4816
4808 4817 * Small cleanups and fixes after a pychecker run.
4809 4818
4810 4819 * Changed the @cd command to handle @cd - and @cd -<n> for
4811 4820 visiting any directory in _dh.
4812 4821
4813 4822 * Introduced _dh, a history of visited directories. @dhist prints
4814 4823 it out with numbers.
4815 4824
4816 4825 2001-12-07 Fernando Perez <fperez@colorado.edu>
4817 4826
4818 4827 * Released 0.1.22
4819 4828
4820 4829 * Made initialization a bit more robust against invalid color
4821 4830 options in user input (exit, not traceback-crash).
4822 4831
4823 4832 * Changed the bug crash reporter to write the report only in the
4824 4833 user's .ipython directory. That way IPython won't litter people's
4825 4834 hard disks with crash files all over the place. Also print on
4826 4835 screen the necessary mail command.
4827 4836
4828 4837 * With the new ultraTB, implemented LightBG color scheme for light
4829 4838 background terminals. A lot of people like white backgrounds, so I
4830 4839 guess we should at least give them something readable.
4831 4840
4832 4841 2001-12-06 Fernando Perez <fperez@colorado.edu>
4833 4842
4834 4843 * Modified the structure of ultraTB. Now there's a proper class
4835 4844 for tables of color schemes which allow adding schemes easily and
4836 4845 switching the active scheme without creating a new instance every
4837 4846 time (which was ridiculous). The syntax for creating new schemes
4838 4847 is also cleaner. I think ultraTB is finally done, with a clean
4839 4848 class structure. Names are also much cleaner (now there's proper
4840 4849 color tables, no need for every variable to also have 'color' in
4841 4850 its name).
4842 4851
4843 4852 * Broke down genutils into separate files. Now genutils only
4844 4853 contains utility functions, and classes have been moved to their
4845 4854 own files (they had enough independent functionality to warrant
4846 4855 it): ConfigLoader, OutputTrap, Struct.
4847 4856
4848 4857 2001-12-05 Fernando Perez <fperez@colorado.edu>
4849 4858
4850 4859 * IPython turns 21! Released version 0.1.21, as a candidate for
4851 4860 public consumption. If all goes well, release in a few days.
4852 4861
4853 4862 * Fixed path bug (files in Extensions/ directory wouldn't be found
4854 4863 unless IPython/ was explicitly in sys.path).
4855 4864
4856 4865 * Extended the FlexCompleter class as MagicCompleter to allow
4857 4866 completion of @-starting lines.
4858 4867
4859 4868 * Created __release__.py file as a central repository for release
4860 4869 info that other files can read from.
4861 4870
4862 4871 * Fixed small bug in logging: when logging was turned on in
4863 4872 mid-session, old lines with special meanings (!@?) were being
4864 4873 logged without the prepended comment, which is necessary since
4865 4874 they are not truly valid python syntax. This should make session
4866 4875 restores produce less errors.
4867 4876
4868 4877 * The namespace cleanup forced me to make a FlexCompleter class
4869 4878 which is nothing but a ripoff of rlcompleter, but with selectable
4870 4879 namespace (rlcompleter only works in __main__.__dict__). I'll try
4871 4880 to submit a note to the authors to see if this change can be
4872 4881 incorporated in future rlcompleter releases (Dec.6: done)
4873 4882
4874 4883 * More fixes to namespace handling. It was a mess! Now all
4875 4884 explicit references to __main__.__dict__ are gone (except when
4876 4885 really needed) and everything is handled through the namespace
4877 4886 dicts in the IPython instance. We seem to be getting somewhere
4878 4887 with this, finally...
4879 4888
4880 4889 * Small documentation updates.
4881 4890
4882 4891 * Created the Extensions directory under IPython (with an
4883 4892 __init__.py). Put the PhysicalQ stuff there. This directory should
4884 4893 be used for all special-purpose extensions.
4885 4894
4886 4895 * File renaming:
4887 4896 ipythonlib --> ipmaker
4888 4897 ipplib --> iplib
4889 4898 This makes a bit more sense in terms of what these files actually do.
4890 4899
4891 4900 * Moved all the classes and functions in ipythonlib to ipplib, so
4892 4901 now ipythonlib only has make_IPython(). This will ease up its
4893 4902 splitting in smaller functional chunks later.
4894 4903
4895 4904 * Cleaned up (done, I think) output of @whos. Better column
4896 4905 formatting, and now shows str(var) for as much as it can, which is
4897 4906 typically what one gets with a 'print var'.
4898 4907
4899 4908 2001-12-04 Fernando Perez <fperez@colorado.edu>
4900 4909
4901 4910 * Fixed namespace problems. Now builtin/IPyhton/user names get
4902 4911 properly reported in their namespace. Internal namespace handling
4903 4912 is finally getting decent (not perfect yet, but much better than
4904 4913 the ad-hoc mess we had).
4905 4914
4906 4915 * Removed -exit option. If people just want to run a python
4907 4916 script, that's what the normal interpreter is for. Less
4908 4917 unnecessary options, less chances for bugs.
4909 4918
4910 4919 * Added a crash handler which generates a complete post-mortem if
4911 4920 IPython crashes. This will help a lot in tracking bugs down the
4912 4921 road.
4913 4922
4914 4923 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4915 4924 which were boud to functions being reassigned would bypass the
4916 4925 logger, breaking the sync of _il with the prompt counter. This
4917 4926 would then crash IPython later when a new line was logged.
4918 4927
4919 4928 2001-12-02 Fernando Perez <fperez@colorado.edu>
4920 4929
4921 4930 * Made IPython a package. This means people don't have to clutter
4922 4931 their sys.path with yet another directory. Changed the INSTALL
4923 4932 file accordingly.
4924 4933
4925 4934 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4926 4935 sorts its output (so @who shows it sorted) and @whos formats the
4927 4936 table according to the width of the first column. Nicer, easier to
4928 4937 read. Todo: write a generic table_format() which takes a list of
4929 4938 lists and prints it nicely formatted, with optional row/column
4930 4939 separators and proper padding and justification.
4931 4940
4932 4941 * Released 0.1.20
4933 4942
4934 4943 * Fixed bug in @log which would reverse the inputcache list (a
4935 4944 copy operation was missing).
4936 4945
4937 4946 * Code cleanup. @config was changed to use page(). Better, since
4938 4947 its output is always quite long.
4939 4948
4940 4949 * Itpl is back as a dependency. I was having too many problems
4941 4950 getting the parametric aliases to work reliably, and it's just
4942 4951 easier to code weird string operations with it than playing %()s
4943 4952 games. It's only ~6k, so I don't think it's too big a deal.
4944 4953
4945 4954 * Found (and fixed) a very nasty bug with history. !lines weren't
4946 4955 getting cached, and the out of sync caches would crash
4947 4956 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4948 4957 division of labor a bit better. Bug fixed, cleaner structure.
4949 4958
4950 4959 2001-12-01 Fernando Perez <fperez@colorado.edu>
4951 4960
4952 4961 * Released 0.1.19
4953 4962
4954 4963 * Added option -n to @hist to prevent line number printing. Much
4955 4964 easier to copy/paste code this way.
4956 4965
4957 4966 * Created global _il to hold the input list. Allows easy
4958 4967 re-execution of blocks of code by slicing it (inspired by Janko's
4959 4968 comment on 'macros').
4960 4969
4961 4970 * Small fixes and doc updates.
4962 4971
4963 4972 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4964 4973 much too fragile with automagic. Handles properly multi-line
4965 4974 statements and takes parameters.
4966 4975
4967 4976 2001-11-30 Fernando Perez <fperez@colorado.edu>
4968 4977
4969 4978 * Version 0.1.18 released.
4970 4979
4971 4980 * Fixed nasty namespace bug in initial module imports.
4972 4981
4973 4982 * Added copyright/license notes to all code files (except
4974 4983 DPyGetOpt). For the time being, LGPL. That could change.
4975 4984
4976 4985 * Rewrote a much nicer README, updated INSTALL, cleaned up
4977 4986 ipythonrc-* samples.
4978 4987
4979 4988 * Overall code/documentation cleanup. Basically ready for
4980 4989 release. Only remaining thing: licence decision (LGPL?).
4981 4990
4982 4991 * Converted load_config to a class, ConfigLoader. Now recursion
4983 4992 control is better organized. Doesn't include the same file twice.
4984 4993
4985 4994 2001-11-29 Fernando Perez <fperez@colorado.edu>
4986 4995
4987 4996 * Got input history working. Changed output history variables from
4988 4997 _p to _o so that _i is for input and _o for output. Just cleaner
4989 4998 convention.
4990 4999
4991 5000 * Implemented parametric aliases. This pretty much allows the
4992 5001 alias system to offer full-blown shell convenience, I think.
4993 5002
4994 5003 * Version 0.1.17 released, 0.1.18 opened.
4995 5004
4996 5005 * dot_ipython/ipythonrc (alias): added documentation.
4997 5006 (xcolor): Fixed small bug (xcolors -> xcolor)
4998 5007
4999 5008 * Changed the alias system. Now alias is a magic command to define
5000 5009 aliases just like the shell. Rationale: the builtin magics should
5001 5010 be there for things deeply connected to IPython's
5002 5011 architecture. And this is a much lighter system for what I think
5003 5012 is the really important feature: allowing users to define quickly
5004 5013 magics that will do shell things for them, so they can customize
5005 5014 IPython easily to match their work habits. If someone is really
5006 5015 desperate to have another name for a builtin alias, they can
5007 5016 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5008 5017 works.
5009 5018
5010 5019 2001-11-28 Fernando Perez <fperez@colorado.edu>
5011 5020
5012 5021 * Changed @file so that it opens the source file at the proper
5013 5022 line. Since it uses less, if your EDITOR environment is
5014 5023 configured, typing v will immediately open your editor of choice
5015 5024 right at the line where the object is defined. Not as quick as
5016 5025 having a direct @edit command, but for all intents and purposes it
5017 5026 works. And I don't have to worry about writing @edit to deal with
5018 5027 all the editors, less does that.
5019 5028
5020 5029 * Version 0.1.16 released, 0.1.17 opened.
5021 5030
5022 5031 * Fixed some nasty bugs in the page/page_dumb combo that could
5023 5032 crash IPython.
5024 5033
5025 5034 2001-11-27 Fernando Perez <fperez@colorado.edu>
5026 5035
5027 5036 * Version 0.1.15 released, 0.1.16 opened.
5028 5037
5029 5038 * Finally got ? and ?? to work for undefined things: now it's
5030 5039 possible to type {}.get? and get information about the get method
5031 5040 of dicts, or os.path? even if only os is defined (so technically
5032 5041 os.path isn't). Works at any level. For example, after import os,
5033 5042 os?, os.path?, os.path.abspath? all work. This is great, took some
5034 5043 work in _ofind.
5035 5044
5036 5045 * Fixed more bugs with logging. The sanest way to do it was to add
5037 5046 to @log a 'mode' parameter. Killed two in one shot (this mode
5038 5047 option was a request of Janko's). I think it's finally clean
5039 5048 (famous last words).
5040 5049
5041 5050 * Added a page_dumb() pager which does a decent job of paging on
5042 5051 screen, if better things (like less) aren't available. One less
5043 5052 unix dependency (someday maybe somebody will port this to
5044 5053 windows).
5045 5054
5046 5055 * Fixed problem in magic_log: would lock of logging out if log
5047 5056 creation failed (because it would still think it had succeeded).
5048 5057
5049 5058 * Improved the page() function using curses to auto-detect screen
5050 5059 size. Now it can make a much better decision on whether to print
5051 5060 or page a string. Option screen_length was modified: a value 0
5052 5061 means auto-detect, and that's the default now.
5053 5062
5054 5063 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5055 5064 go out. I'll test it for a few days, then talk to Janko about
5056 5065 licences and announce it.
5057 5066
5058 5067 * Fixed the length of the auto-generated ---> prompt which appears
5059 5068 for auto-parens and auto-quotes. Getting this right isn't trivial,
5060 5069 with all the color escapes, different prompt types and optional
5061 5070 separators. But it seems to be working in all the combinations.
5062 5071
5063 5072 2001-11-26 Fernando Perez <fperez@colorado.edu>
5064 5073
5065 5074 * Wrote a regexp filter to get option types from the option names
5066 5075 string. This eliminates the need to manually keep two duplicate
5067 5076 lists.
5068 5077
5069 5078 * Removed the unneeded check_option_names. Now options are handled
5070 5079 in a much saner manner and it's easy to visually check that things
5071 5080 are ok.
5072 5081
5073 5082 * Updated version numbers on all files I modified to carry a
5074 5083 notice so Janko and Nathan have clear version markers.
5075 5084
5076 5085 * Updated docstring for ultraTB with my changes. I should send
5077 5086 this to Nathan.
5078 5087
5079 5088 * Lots of small fixes. Ran everything through pychecker again.
5080 5089
5081 5090 * Made loading of deep_reload an cmd line option. If it's not too
5082 5091 kosher, now people can just disable it. With -nodeep_reload it's
5083 5092 still available as dreload(), it just won't overwrite reload().
5084 5093
5085 5094 * Moved many options to the no| form (-opt and -noopt
5086 5095 accepted). Cleaner.
5087 5096
5088 5097 * Changed magic_log so that if called with no parameters, it uses
5089 5098 'rotate' mode. That way auto-generated logs aren't automatically
5090 5099 over-written. For normal logs, now a backup is made if it exists
5091 5100 (only 1 level of backups). A new 'backup' mode was added to the
5092 5101 Logger class to support this. This was a request by Janko.
5093 5102
5094 5103 * Added @logoff/@logon to stop/restart an active log.
5095 5104
5096 5105 * Fixed a lot of bugs in log saving/replay. It was pretty
5097 5106 broken. Now special lines (!@,/) appear properly in the command
5098 5107 history after a log replay.
5099 5108
5100 5109 * Tried and failed to implement full session saving via pickle. My
5101 5110 idea was to pickle __main__.__dict__, but modules can't be
5102 5111 pickled. This would be a better alternative to replaying logs, but
5103 5112 seems quite tricky to get to work. Changed -session to be called
5104 5113 -logplay, which more accurately reflects what it does. And if we
5105 5114 ever get real session saving working, -session is now available.
5106 5115
5107 5116 * Implemented color schemes for prompts also. As for tracebacks,
5108 5117 currently only NoColor and Linux are supported. But now the
5109 5118 infrastructure is in place, based on a generic ColorScheme
5110 5119 class. So writing and activating new schemes both for the prompts
5111 5120 and the tracebacks should be straightforward.
5112 5121
5113 5122 * Version 0.1.13 released, 0.1.14 opened.
5114 5123
5115 5124 * Changed handling of options for output cache. Now counter is
5116 5125 hardwired starting at 1 and one specifies the maximum number of
5117 5126 entries *in the outcache* (not the max prompt counter). This is
5118 5127 much better, since many statements won't increase the cache
5119 5128 count. It also eliminated some confusing options, now there's only
5120 5129 one: cache_size.
5121 5130
5122 5131 * Added 'alias' magic function and magic_alias option in the
5123 5132 ipythonrc file. Now the user can easily define whatever names he
5124 5133 wants for the magic functions without having to play weird
5125 5134 namespace games. This gives IPython a real shell-like feel.
5126 5135
5127 5136 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5128 5137 @ or not).
5129 5138
5130 5139 This was one of the last remaining 'visible' bugs (that I know
5131 5140 of). I think if I can clean up the session loading so it works
5132 5141 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5133 5142 about licensing).
5134 5143
5135 5144 2001-11-25 Fernando Perez <fperez@colorado.edu>
5136 5145
5137 5146 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5138 5147 there's a cleaner distinction between what ? and ?? show.
5139 5148
5140 5149 * Added screen_length option. Now the user can define his own
5141 5150 screen size for page() operations.
5142 5151
5143 5152 * Implemented magic shell-like functions with automatic code
5144 5153 generation. Now adding another function is just a matter of adding
5145 5154 an entry to a dict, and the function is dynamically generated at
5146 5155 run-time. Python has some really cool features!
5147 5156
5148 5157 * Renamed many options to cleanup conventions a little. Now all
5149 5158 are lowercase, and only underscores where needed. Also in the code
5150 5159 option name tables are clearer.
5151 5160
5152 5161 * Changed prompts a little. Now input is 'In [n]:' instead of
5153 5162 'In[n]:='. This allows it the numbers to be aligned with the
5154 5163 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5155 5164 Python (it was a Mathematica thing). The '...' continuation prompt
5156 5165 was also changed a little to align better.
5157 5166
5158 5167 * Fixed bug when flushing output cache. Not all _p<n> variables
5159 5168 exist, so their deletion needs to be wrapped in a try:
5160 5169
5161 5170 * Figured out how to properly use inspect.formatargspec() (it
5162 5171 requires the args preceded by *). So I removed all the code from
5163 5172 _get_pdef in Magic, which was just replicating that.
5164 5173
5165 5174 * Added test to prefilter to allow redefining magic function names
5166 5175 as variables. This is ok, since the @ form is always available,
5167 5176 but whe should allow the user to define a variable called 'ls' if
5168 5177 he needs it.
5169 5178
5170 5179 * Moved the ToDo information from README into a separate ToDo.
5171 5180
5172 5181 * General code cleanup and small bugfixes. I think it's close to a
5173 5182 state where it can be released, obviously with a big 'beta'
5174 5183 warning on it.
5175 5184
5176 5185 * Got the magic function split to work. Now all magics are defined
5177 5186 in a separate class. It just organizes things a bit, and now
5178 5187 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5179 5188 was too long).
5180 5189
5181 5190 * Changed @clear to @reset to avoid potential confusions with
5182 5191 the shell command clear. Also renamed @cl to @clear, which does
5183 5192 exactly what people expect it to from their shell experience.
5184 5193
5185 5194 Added a check to the @reset command (since it's so
5186 5195 destructive, it's probably a good idea to ask for confirmation).
5187 5196 But now reset only works for full namespace resetting. Since the
5188 5197 del keyword is already there for deleting a few specific
5189 5198 variables, I don't see the point of having a redundant magic
5190 5199 function for the same task.
5191 5200
5192 5201 2001-11-24 Fernando Perez <fperez@colorado.edu>
5193 5202
5194 5203 * Updated the builtin docs (esp. the ? ones).
5195 5204
5196 5205 * Ran all the code through pychecker. Not terribly impressed with
5197 5206 it: lots of spurious warnings and didn't really find anything of
5198 5207 substance (just a few modules being imported and not used).
5199 5208
5200 5209 * Implemented the new ultraTB functionality into IPython. New
5201 5210 option: xcolors. This chooses color scheme. xmode now only selects
5202 5211 between Plain and Verbose. Better orthogonality.
5203 5212
5204 5213 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5205 5214 mode and color scheme for the exception handlers. Now it's
5206 5215 possible to have the verbose traceback with no coloring.
5207 5216
5208 5217 2001-11-23 Fernando Perez <fperez@colorado.edu>
5209 5218
5210 5219 * Version 0.1.12 released, 0.1.13 opened.
5211 5220
5212 5221 * Removed option to set auto-quote and auto-paren escapes by
5213 5222 user. The chances of breaking valid syntax are just too high. If
5214 5223 someone *really* wants, they can always dig into the code.
5215 5224
5216 5225 * Made prompt separators configurable.
5217 5226
5218 5227 2001-11-22 Fernando Perez <fperez@colorado.edu>
5219 5228
5220 5229 * Small bugfixes in many places.
5221 5230
5222 5231 * Removed the MyCompleter class from ipplib. It seemed redundant
5223 5232 with the C-p,C-n history search functionality. Less code to
5224 5233 maintain.
5225 5234
5226 5235 * Moved all the original ipython.py code into ipythonlib.py. Right
5227 5236 now it's just one big dump into a function called make_IPython, so
5228 5237 no real modularity has been gained. But at least it makes the
5229 5238 wrapper script tiny, and since ipythonlib is a module, it gets
5230 5239 compiled and startup is much faster.
5231 5240
5232 5241 This is a reasobably 'deep' change, so we should test it for a
5233 5242 while without messing too much more with the code.
5234 5243
5235 5244 2001-11-21 Fernando Perez <fperez@colorado.edu>
5236 5245
5237 5246 * Version 0.1.11 released, 0.1.12 opened for further work.
5238 5247
5239 5248 * Removed dependency on Itpl. It was only needed in one place. It
5240 5249 would be nice if this became part of python, though. It makes life
5241 5250 *a lot* easier in some cases.
5242 5251
5243 5252 * Simplified the prefilter code a bit. Now all handlers are
5244 5253 expected to explicitly return a value (at least a blank string).
5245 5254
5246 5255 * Heavy edits in ipplib. Removed the help system altogether. Now
5247 5256 obj?/?? is used for inspecting objects, a magic @doc prints
5248 5257 docstrings, and full-blown Python help is accessed via the 'help'
5249 5258 keyword. This cleans up a lot of code (less to maintain) and does
5250 5259 the job. Since 'help' is now a standard Python component, might as
5251 5260 well use it and remove duplicate functionality.
5252 5261
5253 5262 Also removed the option to use ipplib as a standalone program. By
5254 5263 now it's too dependent on other parts of IPython to function alone.
5255 5264
5256 5265 * Fixed bug in genutils.pager. It would crash if the pager was
5257 5266 exited immediately after opening (broken pipe).
5258 5267
5259 5268 * Trimmed down the VerboseTB reporting a little. The header is
5260 5269 much shorter now and the repeated exception arguments at the end
5261 5270 have been removed. For interactive use the old header seemed a bit
5262 5271 excessive.
5263 5272
5264 5273 * Fixed small bug in output of @whos for variables with multi-word
5265 5274 types (only first word was displayed).
5266 5275
5267 5276 2001-11-17 Fernando Perez <fperez@colorado.edu>
5268 5277
5269 5278 * Version 0.1.10 released, 0.1.11 opened for further work.
5270 5279
5271 5280 * Modified dirs and friends. dirs now *returns* the stack (not
5272 5281 prints), so one can manipulate it as a variable. Convenient to
5273 5282 travel along many directories.
5274 5283
5275 5284 * Fixed bug in magic_pdef: would only work with functions with
5276 5285 arguments with default values.
5277 5286
5278 5287 2001-11-14 Fernando Perez <fperez@colorado.edu>
5279 5288
5280 5289 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5281 5290 example with IPython. Various other minor fixes and cleanups.
5282 5291
5283 5292 * Version 0.1.9 released, 0.1.10 opened for further work.
5284 5293
5285 5294 * Added sys.path to the list of directories searched in the
5286 5295 execfile= option. It used to be the current directory and the
5287 5296 user's IPYTHONDIR only.
5288 5297
5289 5298 2001-11-13 Fernando Perez <fperez@colorado.edu>
5290 5299
5291 5300 * Reinstated the raw_input/prefilter separation that Janko had
5292 5301 initially. This gives a more convenient setup for extending the
5293 5302 pre-processor from the outside: raw_input always gets a string,
5294 5303 and prefilter has to process it. We can then redefine prefilter
5295 5304 from the outside and implement extensions for special
5296 5305 purposes.
5297 5306
5298 5307 Today I got one for inputting PhysicalQuantity objects
5299 5308 (from Scientific) without needing any function calls at
5300 5309 all. Extremely convenient, and it's all done as a user-level
5301 5310 extension (no IPython code was touched). Now instead of:
5302 5311 a = PhysicalQuantity(4.2,'m/s**2')
5303 5312 one can simply say
5304 5313 a = 4.2 m/s**2
5305 5314 or even
5306 5315 a = 4.2 m/s^2
5307 5316
5308 5317 I use this, but it's also a proof of concept: IPython really is
5309 5318 fully user-extensible, even at the level of the parsing of the
5310 5319 command line. It's not trivial, but it's perfectly doable.
5311 5320
5312 5321 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5313 5322 the problem of modules being loaded in the inverse order in which
5314 5323 they were defined in
5315 5324
5316 5325 * Version 0.1.8 released, 0.1.9 opened for further work.
5317 5326
5318 5327 * Added magics pdef, source and file. They respectively show the
5319 5328 definition line ('prototype' in C), source code and full python
5320 5329 file for any callable object. The object inspector oinfo uses
5321 5330 these to show the same information.
5322 5331
5323 5332 * Version 0.1.7 released, 0.1.8 opened for further work.
5324 5333
5325 5334 * Separated all the magic functions into a class called Magic. The
5326 5335 InteractiveShell class was becoming too big for Xemacs to handle
5327 5336 (de-indenting a line would lock it up for 10 seconds while it
5328 5337 backtracked on the whole class!)
5329 5338
5330 5339 FIXME: didn't work. It can be done, but right now namespaces are
5331 5340 all messed up. Do it later (reverted it for now, so at least
5332 5341 everything works as before).
5333 5342
5334 5343 * Got the object introspection system (magic_oinfo) working! I
5335 5344 think this is pretty much ready for release to Janko, so he can
5336 5345 test it for a while and then announce it. Pretty much 100% of what
5337 5346 I wanted for the 'phase 1' release is ready. Happy, tired.
5338 5347
5339 5348 2001-11-12 Fernando Perez <fperez@colorado.edu>
5340 5349
5341 5350 * Version 0.1.6 released, 0.1.7 opened for further work.
5342 5351
5343 5352 * Fixed bug in printing: it used to test for truth before
5344 5353 printing, so 0 wouldn't print. Now checks for None.
5345 5354
5346 5355 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5347 5356 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5348 5357 reaches by hand into the outputcache. Think of a better way to do
5349 5358 this later.
5350 5359
5351 5360 * Various small fixes thanks to Nathan's comments.
5352 5361
5353 5362 * Changed magic_pprint to magic_Pprint. This way it doesn't
5354 5363 collide with pprint() and the name is consistent with the command
5355 5364 line option.
5356 5365
5357 5366 * Changed prompt counter behavior to be fully like
5358 5367 Mathematica's. That is, even input that doesn't return a result
5359 5368 raises the prompt counter. The old behavior was kind of confusing
5360 5369 (getting the same prompt number several times if the operation
5361 5370 didn't return a result).
5362 5371
5363 5372 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5364 5373
5365 5374 * Fixed -Classic mode (wasn't working anymore).
5366 5375
5367 5376 * Added colored prompts using Nathan's new code. Colors are
5368 5377 currently hardwired, they can be user-configurable. For
5369 5378 developers, they can be chosen in file ipythonlib.py, at the
5370 5379 beginning of the CachedOutput class def.
5371 5380
5372 5381 2001-11-11 Fernando Perez <fperez@colorado.edu>
5373 5382
5374 5383 * Version 0.1.5 released, 0.1.6 opened for further work.
5375 5384
5376 5385 * Changed magic_env to *return* the environment as a dict (not to
5377 5386 print it). This way it prints, but it can also be processed.
5378 5387
5379 5388 * Added Verbose exception reporting to interactive
5380 5389 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5381 5390 traceback. Had to make some changes to the ultraTB file. This is
5382 5391 probably the last 'big' thing in my mental todo list. This ties
5383 5392 in with the next entry:
5384 5393
5385 5394 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5386 5395 has to specify is Plain, Color or Verbose for all exception
5387 5396 handling.
5388 5397
5389 5398 * Removed ShellServices option. All this can really be done via
5390 5399 the magic system. It's easier to extend, cleaner and has automatic
5391 5400 namespace protection and documentation.
5392 5401
5393 5402 2001-11-09 Fernando Perez <fperez@colorado.edu>
5394 5403
5395 5404 * Fixed bug in output cache flushing (missing parameter to
5396 5405 __init__). Other small bugs fixed (found using pychecker).
5397 5406
5398 5407 * Version 0.1.4 opened for bugfixing.
5399 5408
5400 5409 2001-11-07 Fernando Perez <fperez@colorado.edu>
5401 5410
5402 5411 * Version 0.1.3 released, mainly because of the raw_input bug.
5403 5412
5404 5413 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5405 5414 and when testing for whether things were callable, a call could
5406 5415 actually be made to certain functions. They would get called again
5407 5416 once 'really' executed, with a resulting double call. A disaster
5408 5417 in many cases (list.reverse() would never work!).
5409 5418
5410 5419 * Removed prefilter() function, moved its code to raw_input (which
5411 5420 after all was just a near-empty caller for prefilter). This saves
5412 5421 a function call on every prompt, and simplifies the class a tiny bit.
5413 5422
5414 5423 * Fix _ip to __ip name in magic example file.
5415 5424
5416 5425 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5417 5426 work with non-gnu versions of tar.
5418 5427
5419 5428 2001-11-06 Fernando Perez <fperez@colorado.edu>
5420 5429
5421 5430 * Version 0.1.2. Just to keep track of the recent changes.
5422 5431
5423 5432 * Fixed nasty bug in output prompt routine. It used to check 'if
5424 5433 arg != None...'. Problem is, this fails if arg implements a
5425 5434 special comparison (__cmp__) which disallows comparing to
5426 5435 None. Found it when trying to use the PhysicalQuantity module from
5427 5436 ScientificPython.
5428 5437
5429 5438 2001-11-05 Fernando Perez <fperez@colorado.edu>
5430 5439
5431 5440 * Also added dirs. Now the pushd/popd/dirs family functions
5432 5441 basically like the shell, with the added convenience of going home
5433 5442 when called with no args.
5434 5443
5435 5444 * pushd/popd slightly modified to mimic shell behavior more
5436 5445 closely.
5437 5446
5438 5447 * Added env,pushd,popd from ShellServices as magic functions. I
5439 5448 think the cleanest will be to port all desired functions from
5440 5449 ShellServices as magics and remove ShellServices altogether. This
5441 5450 will provide a single, clean way of adding functionality
5442 5451 (shell-type or otherwise) to IP.
5443 5452
5444 5453 2001-11-04 Fernando Perez <fperez@colorado.edu>
5445 5454
5446 5455 * Added .ipython/ directory to sys.path. This way users can keep
5447 5456 customizations there and access them via import.
5448 5457
5449 5458 2001-11-03 Fernando Perez <fperez@colorado.edu>
5450 5459
5451 5460 * Opened version 0.1.1 for new changes.
5452 5461
5453 5462 * Changed version number to 0.1.0: first 'public' release, sent to
5454 5463 Nathan and Janko.
5455 5464
5456 5465 * Lots of small fixes and tweaks.
5457 5466
5458 5467 * Minor changes to whos format. Now strings are shown, snipped if
5459 5468 too long.
5460 5469
5461 5470 * Changed ShellServices to work on __main__ so they show up in @who
5462 5471
5463 5472 * Help also works with ? at the end of a line:
5464 5473 ?sin and sin?
5465 5474 both produce the same effect. This is nice, as often I use the
5466 5475 tab-complete to find the name of a method, but I used to then have
5467 5476 to go to the beginning of the line to put a ? if I wanted more
5468 5477 info. Now I can just add the ? and hit return. Convenient.
5469 5478
5470 5479 2001-11-02 Fernando Perez <fperez@colorado.edu>
5471 5480
5472 5481 * Python version check (>=2.1) added.
5473 5482
5474 5483 * Added LazyPython documentation. At this point the docs are quite
5475 5484 a mess. A cleanup is in order.
5476 5485
5477 5486 * Auto-installer created. For some bizarre reason, the zipfiles
5478 5487 module isn't working on my system. So I made a tar version
5479 5488 (hopefully the command line options in various systems won't kill
5480 5489 me).
5481 5490
5482 5491 * Fixes to Struct in genutils. Now all dictionary-like methods are
5483 5492 protected (reasonably).
5484 5493
5485 5494 * Added pager function to genutils and changed ? to print usage
5486 5495 note through it (it was too long).
5487 5496
5488 5497 * Added the LazyPython functionality. Works great! I changed the
5489 5498 auto-quote escape to ';', it's on home row and next to '. But
5490 5499 both auto-quote and auto-paren (still /) escapes are command-line
5491 5500 parameters.
5492 5501
5493 5502
5494 5503 2001-11-01 Fernando Perez <fperez@colorado.edu>
5495 5504
5496 5505 * Version changed to 0.0.7. Fairly large change: configuration now
5497 5506 is all stored in a directory, by default .ipython. There, all
5498 5507 config files have normal looking names (not .names)
5499 5508
5500 5509 * Version 0.0.6 Released first to Lucas and Archie as a test
5501 5510 run. Since it's the first 'semi-public' release, change version to
5502 5511 > 0.0.6 for any changes now.
5503 5512
5504 5513 * Stuff I had put in the ipplib.py changelog:
5505 5514
5506 5515 Changes to InteractiveShell:
5507 5516
5508 5517 - Made the usage message a parameter.
5509 5518
5510 5519 - Require the name of the shell variable to be given. It's a bit
5511 5520 of a hack, but allows the name 'shell' not to be hardwire in the
5512 5521 magic (@) handler, which is problematic b/c it requires
5513 5522 polluting the global namespace with 'shell'. This in turn is
5514 5523 fragile: if a user redefines a variable called shell, things
5515 5524 break.
5516 5525
5517 5526 - magic @: all functions available through @ need to be defined
5518 5527 as magic_<name>, even though they can be called simply as
5519 5528 @<name>. This allows the special command @magic to gather
5520 5529 information automatically about all existing magic functions,
5521 5530 even if they are run-time user extensions, by parsing the shell
5522 5531 instance __dict__ looking for special magic_ names.
5523 5532
5524 5533 - mainloop: added *two* local namespace parameters. This allows
5525 5534 the class to differentiate between parameters which were there
5526 5535 before and after command line initialization was processed. This
5527 5536 way, later @who can show things loaded at startup by the
5528 5537 user. This trick was necessary to make session saving/reloading
5529 5538 really work: ideally after saving/exiting/reloading a session,
5530 5539 *everythin* should look the same, including the output of @who. I
5531 5540 was only able to make this work with this double namespace
5532 5541 trick.
5533 5542
5534 5543 - added a header to the logfile which allows (almost) full
5535 5544 session restoring.
5536 5545
5537 5546 - prepend lines beginning with @ or !, with a and log
5538 5547 them. Why? !lines: may be useful to know what you did @lines:
5539 5548 they may affect session state. So when restoring a session, at
5540 5549 least inform the user of their presence. I couldn't quite get
5541 5550 them to properly re-execute, but at least the user is warned.
5542 5551
5543 5552 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now