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