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