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