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