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