##// END OF EJS Templates
first part of rocky bernstein's pydb patch - Magic.py and ipython.el"
vivainio -
Show More
@@ -1,3011 +1,3011
1 1 # -*- coding: utf-8 -*-
2 2 """Magic functions for InteractiveShell.
3 3
4 $Id: Magic.py 1815 2006-10-10 04:46:24Z fptest $"""
4 $Id: Magic.py 1823 2006-10-13 15:09:08Z 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 shlex
30 30 import sys
31 31 import re
32 32 import tempfile
33 33 import time
34 34 import cPickle as pickle
35 35 import textwrap
36 36 from cStringIO import StringIO
37 37 from getopt import getopt,GetoptError
38 38 from pprint import pprint, pformat
39 39
40 40 # profile isn't bundled by default in Debian for license reasons
41 41 try:
42 42 import profile,pstats
43 43 except ImportError:
44 44 profile = pstats = None
45 45
46 46 # Homebrewed
47 47 import IPython
48 48 from IPython import Debugger, OInspect, wildcard
49 49 from IPython.FakeModule import FakeModule
50 50 from IPython.Itpl import Itpl, itpl, printpl,itplns
51 51 from IPython.PyColorize import Parser
52 52 from IPython.ipstruct import Struct
53 53 from IPython.macro import Macro
54 54 from IPython.genutils import *
55 55 from IPython import platutils
56 56
57 57 #***************************************************************************
58 58 # Utility functions
59 59 def on_off(tag):
60 60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
61 61 return ['OFF','ON'][tag]
62 62
63 63 class Bunch: pass
64 64
65 65 def arg_split(s,posix=True):
66 66 """Split a command line's arguments in a shell-like manner.
67 67
68 68 This is a modified version of the standard library's shlex.split()
69 69 function, but with a default of posix=False for splitting, so that quotes
70 70 in inputs are respected."""
71 71
72 72 lex = shlex.shlex(s, posix=posix)
73 73 lex.whitespace_split = True
74 74 return list(lex)
75 75
76 76 #***************************************************************************
77 77 # Main class implementing Magic functionality
78 78 class Magic:
79 79 """Magic functions for InteractiveShell.
80 80
81 81 Shell functions which can be reached as %function_name. All magic
82 82 functions should accept a string, which they can parse for their own
83 83 needs. This can make some functions easier to type, eg `%cd ../`
84 84 vs. `%cd("../")`
85 85
86 86 ALL definitions MUST begin with the prefix magic_. The user won't need it
87 87 at the command line, but it is is needed in the definition. """
88 88
89 89 # class globals
90 90 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
91 91 'Automagic is ON, % prefix NOT needed for magic functions.']
92 92
93 93 #......................................................................
94 94 # some utility functions
95 95
96 96 def __init__(self,shell):
97 97
98 98 self.options_table = {}
99 99 if profile is None:
100 100 self.magic_prun = self.profile_missing_notice
101 101 self.shell = shell
102 102
103 103 # namespace for holding state we may need
104 104 self._magic_state = Bunch()
105 105
106 106 def profile_missing_notice(self, *args, **kwargs):
107 107 error("""\
108 108 The profile module could not be found. If you are a Debian user,
109 109 it has been removed from the standard Debian package because of its non-free
110 110 license. To use profiling, please install"python2.3-profiler" from non-free.""")
111 111
112 112 def default_option(self,fn,optstr):
113 113 """Make an entry in the options_table for fn, with value optstr"""
114 114
115 115 if fn not in self.lsmagic():
116 116 error("%s is not a magic function" % fn)
117 117 self.options_table[fn] = optstr
118 118
119 119 def lsmagic(self):
120 120 """Return a list of currently available magic functions.
121 121
122 122 Gives a list of the bare names after mangling (['ls','cd', ...], not
123 123 ['magic_ls','magic_cd',...]"""
124 124
125 125 # FIXME. This needs a cleanup, in the way the magics list is built.
126 126
127 127 # magics in class definition
128 128 class_magic = lambda fn: fn.startswith('magic_') and \
129 129 callable(Magic.__dict__[fn])
130 130 # in instance namespace (run-time user additions)
131 131 inst_magic = lambda fn: fn.startswith('magic_') and \
132 132 callable(self.__dict__[fn])
133 133 # and bound magics by user (so they can access self):
134 134 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
135 135 callable(self.__class__.__dict__[fn])
136 136 magics = filter(class_magic,Magic.__dict__.keys()) + \
137 137 filter(inst_magic,self.__dict__.keys()) + \
138 138 filter(inst_bound_magic,self.__class__.__dict__.keys())
139 139 out = []
140 140 for fn in magics:
141 141 out.append(fn.replace('magic_','',1))
142 142 out.sort()
143 143 return out
144 144
145 145 def extract_input_slices(self,slices,raw=False):
146 146 """Return as a string a set of input history slices.
147 147
148 148 Inputs:
149 149
150 150 - slices: the set of slices is given as a list of strings (like
151 151 ['1','4:8','9'], since this function is for use by magic functions
152 152 which get their arguments as strings.
153 153
154 154 Optional inputs:
155 155
156 156 - raw(False): by default, the processed input is used. If this is
157 157 true, the raw input history is used instead.
158 158
159 159 Note that slices can be called with two notations:
160 160
161 161 N:M -> standard python form, means including items N...(M-1).
162 162
163 163 N-M -> include items N..M (closed endpoint)."""
164 164
165 165 if raw:
166 166 hist = self.shell.input_hist_raw
167 167 else:
168 168 hist = self.shell.input_hist
169 169
170 170 cmds = []
171 171 for chunk in slices:
172 172 if ':' in chunk:
173 173 ini,fin = map(int,chunk.split(':'))
174 174 elif '-' in chunk:
175 175 ini,fin = map(int,chunk.split('-'))
176 176 fin += 1
177 177 else:
178 178 ini = int(chunk)
179 179 fin = ini+1
180 180 cmds.append(hist[ini:fin])
181 181 return cmds
182 182
183 def _ofind(self,oname):
183 def _ofind(self, oname, namespaces=None):
184 184 """Find an object in the available namespaces.
185 185
186 186 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
187 187
188 188 Has special code to detect magic functions.
189 189 """
190 190
191 191 oname = oname.strip()
192 192
193 # Namespaces to search in:
194 user_ns = self.shell.user_ns
195 internal_ns = self.shell.internal_ns
196 builtin_ns = __builtin__.__dict__
197 alias_ns = self.shell.alias_table
198
199 # Put them in a list. The order is important so that we find things in
200 # the same order that Python finds them.
201 namespaces = [ ('Interactive',user_ns),
202 ('IPython internal',internal_ns),
203 ('Python builtin',builtin_ns),
204 ('Alias',alias_ns),
205 ]
193 alias_ns = None
194 if namespaces is None:
195 # Namespaces to search in:
196 # Put them in a list. The order is important so that we
197 # find things in the same order that Python finds them.
198 namespaces = [ ('Interactive', self.shell.user_ns),
199 ('IPython internal', self.shell.internal_ns),
200 ('Python builtin', __builtin__.__dict__),
201 ('Alias', self.shell.alias_table),
202 ]
203 alias_ns = self.shell.alias_table
206 204
207 205 # initialize results to 'null'
208 206 found = 0; obj = None; ospace = None; ds = None;
209 207 ismagic = 0; isalias = 0; parent = None
210 208
211 209 # Look for the given name by splitting it in parts. If the head is
212 210 # found, then we look for all the remaining parts as members, and only
213 211 # declare success if we can find them all.
214 212 oname_parts = oname.split('.')
215 213 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
216 214 for nsname,ns in namespaces:
217 215 try:
218 216 obj = ns[oname_head]
219 217 except KeyError:
220 218 continue
221 219 else:
222 220 for part in oname_rest:
223 221 try:
224 222 parent = obj
225 223 obj = getattr(obj,part)
226 224 except:
227 225 # Blanket except b/c some badly implemented objects
228 226 # allow __getattr__ to raise exceptions other than
229 227 # AttributeError, which then crashes IPython.
230 228 break
231 229 else:
232 230 # If we finish the for loop (no break), we got all members
233 231 found = 1
234 232 ospace = nsname
235 233 if ns == alias_ns:
236 234 isalias = 1
237 235 break # namespace loop
238 236
239 237 # Try to see if it's magic
240 238 if not found:
241 239 if oname.startswith(self.shell.ESC_MAGIC):
242 240 oname = oname[1:]
243 241 obj = getattr(self,'magic_'+oname,None)
244 242 if obj is not None:
245 243 found = 1
246 244 ospace = 'IPython internal'
247 245 ismagic = 1
248 246
249 247 # Last try: special-case some literals like '', [], {}, etc:
250 248 if not found and oname_head in ["''",'""','[]','{}','()']:
251 249 obj = eval(oname_head)
252 250 found = 1
253 251 ospace = 'Interactive'
254 252
255 253 return {'found':found, 'obj':obj, 'namespace':ospace,
256 254 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
257 255
258 256 def arg_err(self,func):
259 257 """Print docstring if incorrect arguments were passed"""
260 258 print 'Error in arguments:'
261 259 print OInspect.getdoc(func)
262 260
263 261 def format_latex(self,strng):
264 262 """Format a string for latex inclusion."""
265 263
266 264 # Characters that need to be escaped for latex:
267 265 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
268 266 # Magic command names as headers:
269 267 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
270 268 re.MULTILINE)
271 269 # Magic commands
272 270 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
273 271 re.MULTILINE)
274 272 # Paragraph continue
275 273 par_re = re.compile(r'\\$',re.MULTILINE)
276 274
277 275 # The "\n" symbol
278 276 newline_re = re.compile(r'\\n')
279 277
280 278 # Now build the string for output:
281 279 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
282 280 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
283 281 strng)
284 282 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
285 283 strng = par_re.sub(r'\\\\',strng)
286 284 strng = escape_re.sub(r'\\\1',strng)
287 285 strng = newline_re.sub(r'\\textbackslash{}n',strng)
288 286 return strng
289 287
290 288 def format_screen(self,strng):
291 289 """Format a string for screen printing.
292 290
293 291 This removes some latex-type format codes."""
294 292 # Paragraph continue
295 293 par_re = re.compile(r'\\$',re.MULTILINE)
296 294 strng = par_re.sub('',strng)
297 295 return strng
298 296
299 297 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
300 298 """Parse options passed to an argument string.
301 299
302 300 The interface is similar to that of getopt(), but it returns back a
303 301 Struct with the options as keys and the stripped argument string still
304 302 as a string.
305 303
306 304 arg_str is quoted as a true sys.argv vector by using shlex.split.
307 305 This allows us to easily expand variables, glob files, quote
308 306 arguments, etc.
309 307
310 308 Options:
311 309 -mode: default 'string'. If given as 'list', the argument string is
312 310 returned as a list (split on whitespace) instead of a string.
313 311
314 312 -list_all: put all option values in lists. Normally only options
315 313 appearing more than once are put in a list.
316 314
317 315 -posix (True): whether to split the input line in POSIX mode or not,
318 316 as per the conventions outlined in the shlex module from the
319 317 standard library."""
320 318
321 319 # inject default options at the beginning of the input line
322 320 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
323 321 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
324 322
325 323 mode = kw.get('mode','string')
326 324 if mode not in ['string','list']:
327 325 raise ValueError,'incorrect mode given: %s' % mode
328 326 # Get options
329 327 list_all = kw.get('list_all',0)
330 328 posix = kw.get('posix',True)
331 329
332 330 # Check if we have more than one argument to warrant extra processing:
333 331 odict = {} # Dictionary with options
334 332 args = arg_str.split()
335 333 if len(args) >= 1:
336 334 # If the list of inputs only has 0 or 1 thing in it, there's no
337 335 # need to look for options
338 336 argv = arg_split(arg_str,posix)
339 337 # Do regular option processing
340 338 try:
341 339 opts,args = getopt(argv,opt_str,*long_opts)
342 340 except GetoptError,e:
343 341 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
344 342 " ".join(long_opts)))
345 343 for o,a in opts:
346 344 if o.startswith('--'):
347 345 o = o[2:]
348 346 else:
349 347 o = o[1:]
350 348 try:
351 349 odict[o].append(a)
352 350 except AttributeError:
353 351 odict[o] = [odict[o],a]
354 352 except KeyError:
355 353 if list_all:
356 354 odict[o] = [a]
357 355 else:
358 356 odict[o] = a
359 357
360 358 # Prepare opts,args for return
361 359 opts = Struct(odict)
362 360 if mode == 'string':
363 361 args = ' '.join(args)
364 362
365 363 return opts,args
366 364
367 365 #......................................................................
368 366 # And now the actual magic functions
369 367
370 368 # Functions for IPython shell work (vars,funcs, config, etc)
371 369 def magic_lsmagic(self, parameter_s = ''):
372 370 """List currently available magic functions."""
373 371 mesc = self.shell.ESC_MAGIC
374 372 print 'Available magic functions:\n'+mesc+\
375 373 (' '+mesc).join(self.lsmagic())
376 374 print '\n' + Magic.auto_status[self.shell.rc.automagic]
377 375 return None
378 376
379 377 def magic_magic(self, parameter_s = ''):
380 378 """Print information about the magic function system."""
381 379
382 380 mode = ''
383 381 try:
384 382 if parameter_s.split()[0] == '-latex':
385 383 mode = 'latex'
386 384 if parameter_s.split()[0] == '-brief':
387 385 mode = 'brief'
388 386 except:
389 387 pass
390 388
391 389 magic_docs = []
392 390 for fname in self.lsmagic():
393 391 mname = 'magic_' + fname
394 392 for space in (Magic,self,self.__class__):
395 393 try:
396 394 fn = space.__dict__[mname]
397 395 except KeyError:
398 396 pass
399 397 else:
400 398 break
401 399 if mode == 'brief':
402 400 # only first line
403 401 fndoc = fn.__doc__.split('\n',1)[0]
404 402 else:
405 403 fndoc = fn.__doc__
406 404
407 405 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
408 406 fname,fndoc))
409 407 magic_docs = ''.join(magic_docs)
410 408
411 409 if mode == 'latex':
412 410 print self.format_latex(magic_docs)
413 411 return
414 412 else:
415 413 magic_docs = self.format_screen(magic_docs)
416 414 if mode == 'brief':
417 415 return magic_docs
418 416
419 417 outmsg = """
420 418 IPython's 'magic' functions
421 419 ===========================
422 420
423 421 The magic function system provides a series of functions which allow you to
424 422 control the behavior of IPython itself, plus a lot of system-type
425 423 features. All these functions are prefixed with a % character, but parameters
426 424 are given without parentheses or quotes.
427 425
428 426 NOTE: If you have 'automagic' enabled (via the command line option or with the
429 427 %automagic function), you don't need to type in the % explicitly. By default,
430 428 IPython ships with automagic on, so you should only rarely need the % escape.
431 429
432 430 Example: typing '%cd mydir' (without the quotes) changes you working directory
433 431 to 'mydir', if it exists.
434 432
435 433 You can define your own magic functions to extend the system. See the supplied
436 434 ipythonrc and example-magic.py files for details (in your ipython
437 435 configuration directory, typically $HOME/.ipython/).
438 436
439 437 You can also define your own aliased names for magic functions. In your
440 438 ipythonrc file, placing a line like:
441 439
442 440 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
443 441
444 442 will define %pf as a new name for %profile.
445 443
446 444 You can also call magics in code using the ipmagic() function, which IPython
447 445 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
448 446
449 447 For a list of the available magic functions, use %lsmagic. For a description
450 448 of any of them, type %magic_name?, e.g. '%cd?'.
451 449
452 450 Currently the magic system has the following functions:\n"""
453 451
454 452 mesc = self.shell.ESC_MAGIC
455 453 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
456 454 "\n\n%s%s\n\n%s" % (outmsg,
457 455 magic_docs,mesc,mesc,
458 456 (' '+mesc).join(self.lsmagic()),
459 457 Magic.auto_status[self.shell.rc.automagic] ) )
460 458
461 459 page(outmsg,screen_lines=self.shell.rc.screen_length)
462 460
463 461 def magic_automagic(self, parameter_s = ''):
464 462 """Make magic functions callable without having to type the initial %.
465 463
466 464 Toggles on/off (when off, you must call it as %automagic, of
467 465 course). Note that magic functions have lowest priority, so if there's
468 466 a variable whose name collides with that of a magic fn, automagic
469 467 won't work for that function (you get the variable instead). However,
470 468 if you delete the variable (del var), the previously shadowed magic
471 469 function becomes visible to automagic again."""
472 470
473 471 rc = self.shell.rc
474 472 rc.automagic = not rc.automagic
475 473 print '\n' + Magic.auto_status[rc.automagic]
476 474
477 475 def magic_autocall(self, parameter_s = ''):
478 476 """Make functions callable without having to type parentheses.
479 477
480 478 Usage:
481 479
482 480 %autocall [mode]
483 481
484 482 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
485 483 value is toggled on and off (remembering the previous state)."""
486 484
487 485 rc = self.shell.rc
488 486
489 487 if parameter_s:
490 488 arg = int(parameter_s)
491 489 else:
492 490 arg = 'toggle'
493 491
494 492 if not arg in (0,1,2,'toggle'):
495 493 error('Valid modes: (0->Off, 1->Smart, 2->Full')
496 494 return
497 495
498 496 if arg in (0,1,2):
499 497 rc.autocall = arg
500 498 else: # toggle
501 499 if rc.autocall:
502 500 self._magic_state.autocall_save = rc.autocall
503 501 rc.autocall = 0
504 502 else:
505 503 try:
506 504 rc.autocall = self._magic_state.autocall_save
507 505 except AttributeError:
508 506 rc.autocall = self._magic_state.autocall_save = 1
509 507
510 508 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
511 509
512 510 def magic_autoindent(self, parameter_s = ''):
513 511 """Toggle autoindent on/off (if available)."""
514 512
515 513 self.shell.set_autoindent()
516 514 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
517 515
518 516 def magic_system_verbose(self, parameter_s = ''):
519 517 """Toggle verbose printing of system calls on/off."""
520 518
521 519 self.shell.rc_set_toggle('system_verbose')
522 520 print "System verbose printing is:",\
523 521 ['OFF','ON'][self.shell.rc.system_verbose]
524 522
525 523 def magic_history(self, parameter_s = ''):
526 524 """Print input history (_i<n> variables), with most recent last.
527 525
528 526 %history -> print at most 40 inputs (some may be multi-line)\\
529 527 %history n -> print at most n inputs\\
530 528 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
531 529
532 530 Each input's number <n> is shown, and is accessible as the
533 531 automatically generated variable _i<n>. Multi-line statements are
534 532 printed starting at a new line for easy copy/paste.
535 533
536 534
537 535 Options:
538 536
539 537 -n: do NOT print line numbers. This is useful if you want to get a
540 538 printout of many lines which can be directly pasted into a text
541 539 editor.
542 540
543 541 This feature is only available if numbered prompts are in use.
544 542
545 543 -r: print the 'raw' history. IPython filters your input and
546 544 converts it all into valid Python source before executing it (things
547 545 like magics or aliases are turned into function calls, for
548 546 example). With this option, you'll see the unfiltered history
549 547 instead of the filtered version: '%cd /' will be seen as '%cd /'
550 548 instead of '_ip.magic("%cd /")'.
551 549 """
552 550
553 551 shell = self.shell
554 552 if not shell.outputcache.do_full_cache:
555 553 print 'This feature is only available if numbered prompts are in use.'
556 554 return
557 555 opts,args = self.parse_options(parameter_s,'nr',mode='list')
558 556
559 557 if opts.has_key('r'):
560 558 input_hist = shell.input_hist_raw
561 559 else:
562 560 input_hist = shell.input_hist
563 561
564 562 default_length = 40
565 563 if len(args) == 0:
566 564 final = len(input_hist)
567 565 init = max(1,final-default_length)
568 566 elif len(args) == 1:
569 567 final = len(input_hist)
570 568 init = max(1,final-int(args[0]))
571 569 elif len(args) == 2:
572 570 init,final = map(int,args)
573 571 else:
574 572 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
575 573 print self.magic_hist.__doc__
576 574 return
577 575 width = len(str(final))
578 576 line_sep = ['','\n']
579 577 print_nums = not opts.has_key('n')
580 578 for in_num in range(init,final):
581 579 inline = input_hist[in_num]
582 580 multiline = int(inline.count('\n') > 1)
583 581 if print_nums:
584 582 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
585 583 print inline,
586 584
587 585 def magic_hist(self, parameter_s=''):
588 586 """Alternate name for %history."""
589 587 return self.magic_history(parameter_s)
590 588
591 589 def magic_p(self, parameter_s=''):
592 590 """Just a short alias for Python's 'print'."""
593 591 exec 'print ' + parameter_s in self.shell.user_ns
594 592
595 593 def magic_r(self, parameter_s=''):
596 594 """Repeat previous input.
597 595
598 596 If given an argument, repeats the previous command which starts with
599 597 the same string, otherwise it just repeats the previous input.
600 598
601 599 Shell escaped commands (with ! as first character) are not recognized
602 600 by this system, only pure python code and magic commands.
603 601 """
604 602
605 603 start = parameter_s.strip()
606 604 esc_magic = self.shell.ESC_MAGIC
607 605 # Identify magic commands even if automagic is on (which means
608 606 # the in-memory version is different from that typed by the user).
609 607 if self.shell.rc.automagic:
610 608 start_magic = esc_magic+start
611 609 else:
612 610 start_magic = start
613 611 # Look through the input history in reverse
614 612 for n in range(len(self.shell.input_hist)-2,0,-1):
615 613 input = self.shell.input_hist[n]
616 614 # skip plain 'r' lines so we don't recurse to infinity
617 615 if input != '_ip.magic("r")\n' and \
618 616 (input.startswith(start) or input.startswith(start_magic)):
619 617 #print 'match',`input` # dbg
620 618 print 'Executing:',input,
621 619 self.shell.runlines(input)
622 620 return
623 621 print 'No previous input matching `%s` found.' % start
624 622
625 623 def magic_page(self, parameter_s=''):
626 624 """Pretty print the object and display it through a pager.
627 625
628 626 If no parameter is given, use _ (last output)."""
629 627 # After a function contributed by Olivier Aubert, slightly modified.
630 628
631 629 oname = parameter_s and parameter_s or '_'
632 630 info = self._ofind(oname)
633 631 if info['found']:
634 632 page(pformat(info['obj']))
635 633 else:
636 634 print 'Object `%s` not found' % oname
637 635
638 636 def magic_profile(self, parameter_s=''):
639 637 """Print your currently active IPyhton profile."""
640 638 if self.shell.rc.profile:
641 639 printpl('Current IPython profile: $self.shell.rc.profile.')
642 640 else:
643 641 print 'No profile active.'
644 642
645 def _inspect(self,meth,oname,**kw):
643 def _inspect(self,meth,oname,namespaces=None,**kw):
646 644 """Generic interface to the inspector system.
647 645
648 646 This function is meant to be called by pdef, pdoc & friends."""
649 647
650 648 oname = oname.strip()
651 info = Struct(self._ofind(oname))
649 info = Struct(self._ofind(oname, namespaces))
652 650
653 651 if info.found:
654 652 # Get the docstring of the class property if it exists.
655 653 path = oname.split('.')
656 654 root = '.'.join(path[:-1])
657 655 if info.parent is not None:
658 656 try:
659 657 target = getattr(info.parent, '__class__')
660 658 # The object belongs to a class instance.
661 659 try:
662 660 target = getattr(target, path[-1])
663 661 # The class defines the object.
664 662 if isinstance(target, property):
665 663 oname = root + '.__class__.' + path[-1]
666 664 info = Struct(self._ofind(oname))
667 665 except AttributeError: pass
668 666 except AttributeError: pass
669 667
670 668 pmethod = getattr(self.shell.inspector,meth)
671 669 formatter = info.ismagic and self.format_screen or None
672 670 if meth == 'pdoc':
673 671 pmethod(info.obj,oname,formatter)
674 672 elif meth == 'pinfo':
675 673 pmethod(info.obj,oname,formatter,info,**kw)
676 674 else:
677 675 pmethod(info.obj,oname)
678 676 else:
679 677 print 'Object `%s` not found.' % oname
680 678 return 'not found' # so callers can take other action
681 679
682 def magic_pdef(self, parameter_s=''):
680 def magic_pdef(self, parameter_s='', namespaces=None):
683 681 """Print the definition header for any callable object.
684 682
685 683 If the object is a class, print the constructor information."""
686 self._inspect('pdef',parameter_s)
684 print "+++"
685 self._inspect('pdef',parameter_s, namespaces)
687 686
688 def magic_pdoc(self, parameter_s=''):
687 def magic_pdoc(self, parameter_s='', namespaces=None):
689 688 """Print the docstring for an object.
690 689
691 690 If the given object is a class, it will print both the class and the
692 691 constructor docstrings."""
693 self._inspect('pdoc',parameter_s)
692 self._inspect('pdoc',parameter_s, namespaces)
694 693
695 def magic_psource(self, parameter_s=''):
694 def magic_psource(self, parameter_s='', namespaces=None):
696 695 """Print (or run through pager) the source code for an object."""
697 self._inspect('psource',parameter_s)
696 self._inspect('psource',parameter_s, namespaces)
698 697
699 698 def magic_pfile(self, parameter_s=''):
700 699 """Print (or run through pager) the file where an object is defined.
701 700
702 701 The file opens at the line where the object definition begins. IPython
703 702 will honor the environment variable PAGER if set, and otherwise will
704 703 do its best to print the file in a convenient form.
705 704
706 705 If the given argument is not an object currently defined, IPython will
707 706 try to interpret it as a filename (automatically adding a .py extension
708 707 if needed). You can thus use %pfile as a syntax highlighting code
709 708 viewer."""
710 709
711 710 # first interpret argument as an object name
712 711 out = self._inspect('pfile',parameter_s)
713 712 # if not, try the input as a filename
714 713 if out == 'not found':
715 714 try:
716 715 filename = get_py_filename(parameter_s)
717 716 except IOError,msg:
718 717 print msg
719 718 return
720 719 page(self.shell.inspector.format(file(filename).read()))
721 720
722 def magic_pinfo(self, parameter_s=''):
721 def magic_pinfo(self, parameter_s='', namespaces=None):
723 722 """Provide detailed information about an object.
724 723
725 724 '%pinfo object' is just a synonym for object? or ?object."""
726 725
727 726 #print 'pinfo par: <%s>' % parameter_s # dbg
728 727
729 728 # detail_level: 0 -> obj? , 1 -> obj??
730 729 detail_level = 0
731 730 # We need to detect if we got called as 'pinfo pinfo foo', which can
732 731 # happen if the user types 'pinfo foo?' at the cmd line.
733 732 pinfo,qmark1,oname,qmark2 = \
734 733 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
735 734 if pinfo or qmark1 or qmark2:
736 735 detail_level = 1
737 736 if "*" in oname:
738 737 self.magic_psearch(oname)
739 738 else:
740 self._inspect('pinfo',oname,detail_level=detail_level)
739 self._inspect('pinfo', oname, detail_level=detail_level,
740 namespaces=namespaces)
741 741
742 742 def magic_psearch(self, parameter_s=''):
743 743 """Search for object in namespaces by wildcard.
744 744
745 745 %psearch [options] PATTERN [OBJECT TYPE]
746 746
747 747 Note: ? can be used as a synonym for %psearch, at the beginning or at
748 748 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
749 749 rest of the command line must be unchanged (options come first), so
750 750 for example the following forms are equivalent
751 751
752 752 %psearch -i a* function
753 753 -i a* function?
754 754 ?-i a* function
755 755
756 756 Arguments:
757 757
758 758 PATTERN
759 759
760 760 where PATTERN is a string containing * as a wildcard similar to its
761 761 use in a shell. The pattern is matched in all namespaces on the
762 762 search path. By default objects starting with a single _ are not
763 763 matched, many IPython generated objects have a single
764 764 underscore. The default is case insensitive matching. Matching is
765 765 also done on the attributes of objects and not only on the objects
766 766 in a module.
767 767
768 768 [OBJECT TYPE]
769 769
770 770 Is the name of a python type from the types module. The name is
771 771 given in lowercase without the ending type, ex. StringType is
772 772 written string. By adding a type here only objects matching the
773 773 given type are matched. Using all here makes the pattern match all
774 774 types (this is the default).
775 775
776 776 Options:
777 777
778 778 -a: makes the pattern match even objects whose names start with a
779 779 single underscore. These names are normally ommitted from the
780 780 search.
781 781
782 782 -i/-c: make the pattern case insensitive/sensitive. If neither of
783 783 these options is given, the default is read from your ipythonrc
784 784 file. The option name which sets this value is
785 785 'wildcards_case_sensitive'. If this option is not specified in your
786 786 ipythonrc file, IPython's internal default is to do a case sensitive
787 787 search.
788 788
789 789 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
790 790 specifiy can be searched in any of the following namespaces:
791 791 'builtin', 'user', 'user_global','internal', 'alias', where
792 792 'builtin' and 'user' are the search defaults. Note that you should
793 793 not use quotes when specifying namespaces.
794 794
795 795 'Builtin' contains the python module builtin, 'user' contains all
796 796 user data, 'alias' only contain the shell aliases and no python
797 797 objects, 'internal' contains objects used by IPython. The
798 798 'user_global' namespace is only used by embedded IPython instances,
799 799 and it contains module-level globals. You can add namespaces to the
800 800 search with -s or exclude them with -e (these options can be given
801 801 more than once).
802 802
803 803 Examples:
804 804
805 805 %psearch a* -> objects beginning with an a
806 806 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
807 807 %psearch a* function -> all functions beginning with an a
808 808 %psearch re.e* -> objects beginning with an e in module re
809 809 %psearch r*.e* -> objects that start with e in modules starting in r
810 810 %psearch r*.* string -> all strings in modules beginning with r
811 811
812 812 Case sensitve search:
813 813
814 814 %psearch -c a* list all object beginning with lower case a
815 815
816 816 Show objects beginning with a single _:
817 817
818 818 %psearch -a _* list objects beginning with a single underscore"""
819 819
820 820 # default namespaces to be searched
821 821 def_search = ['user','builtin']
822 822
823 823 # Process options/args
824 824 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
825 825 opt = opts.get
826 826 shell = self.shell
827 827 psearch = shell.inspector.psearch
828 828
829 829 # select case options
830 830 if opts.has_key('i'):
831 831 ignore_case = True
832 832 elif opts.has_key('c'):
833 833 ignore_case = False
834 834 else:
835 835 ignore_case = not shell.rc.wildcards_case_sensitive
836 836
837 837 # Build list of namespaces to search from user options
838 838 def_search.extend(opt('s',[]))
839 839 ns_exclude = ns_exclude=opt('e',[])
840 840 ns_search = [nm for nm in def_search if nm not in ns_exclude]
841 841
842 842 # Call the actual search
843 843 try:
844 844 psearch(args,shell.ns_table,ns_search,
845 845 show_all=opt('a'),ignore_case=ignore_case)
846 846 except:
847 847 shell.showtraceback()
848 848
849 849 def magic_who_ls(self, parameter_s=''):
850 850 """Return a sorted list of all interactive variables.
851 851
852 852 If arguments are given, only variables of types matching these
853 853 arguments are returned."""
854 854
855 855 user_ns = self.shell.user_ns
856 856 internal_ns = self.shell.internal_ns
857 857 user_config_ns = self.shell.user_config_ns
858 858 out = []
859 859 typelist = parameter_s.split()
860 860
861 861 for i in user_ns:
862 862 if not (i.startswith('_') or i.startswith('_i')) \
863 863 and not (i in internal_ns or i in user_config_ns):
864 864 if typelist:
865 865 if type(user_ns[i]).__name__ in typelist:
866 866 out.append(i)
867 867 else:
868 868 out.append(i)
869 869 out.sort()
870 870 return out
871 871
872 872 def magic_who(self, parameter_s=''):
873 873 """Print all interactive variables, with some minimal formatting.
874 874
875 875 If any arguments are given, only variables whose type matches one of
876 876 these are printed. For example:
877 877
878 878 %who function str
879 879
880 880 will only list functions and strings, excluding all other types of
881 881 variables. To find the proper type names, simply use type(var) at a
882 882 command line to see how python prints type names. For example:
883 883
884 884 In [1]: type('hello')\\
885 885 Out[1]: <type 'str'>
886 886
887 887 indicates that the type name for strings is 'str'.
888 888
889 889 %who always excludes executed names loaded through your configuration
890 890 file and things which are internal to IPython.
891 891
892 892 This is deliberate, as typically you may load many modules and the
893 893 purpose of %who is to show you only what you've manually defined."""
894 894
895 895 varlist = self.magic_who_ls(parameter_s)
896 896 if not varlist:
897 897 print 'Interactive namespace is empty.'
898 898 return
899 899
900 900 # if we have variables, move on...
901 901
902 902 # stupid flushing problem: when prompts have no separators, stdout is
903 903 # getting lost. I'm starting to think this is a python bug. I'm having
904 904 # to force a flush with a print because even a sys.stdout.flush
905 905 # doesn't seem to do anything!
906 906
907 907 count = 0
908 908 for i in varlist:
909 909 print i+'\t',
910 910 count += 1
911 911 if count > 8:
912 912 count = 0
913 913 print
914 914 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
915 915
916 916 print # well, this does force a flush at the expense of an extra \n
917 917
918 918 def magic_whos(self, parameter_s=''):
919 919 """Like %who, but gives some extra information about each variable.
920 920
921 921 The same type filtering of %who can be applied here.
922 922
923 923 For all variables, the type is printed. Additionally it prints:
924 924
925 925 - For {},[],(): their length.
926 926
927 927 - For Numeric arrays, a summary with shape, number of elements,
928 928 typecode and size in memory.
929 929
930 930 - Everything else: a string representation, snipping their middle if
931 931 too long."""
932 932
933 933 varnames = self.magic_who_ls(parameter_s)
934 934 if not varnames:
935 935 print 'Interactive namespace is empty.'
936 936 return
937 937
938 938 # if we have variables, move on...
939 939
940 940 # for these types, show len() instead of data:
941 941 seq_types = [types.DictType,types.ListType,types.TupleType]
942 942
943 943 # for Numeric arrays, display summary info
944 944 try:
945 945 import Numeric
946 946 except ImportError:
947 947 array_type = None
948 948 else:
949 949 array_type = Numeric.ArrayType.__name__
950 950
951 951 # Find all variable names and types so we can figure out column sizes
952 952 get_vars = lambda i: self.shell.user_ns[i]
953 953 type_name = lambda v: type(v).__name__
954 954 varlist = map(get_vars,varnames)
955 955
956 956 typelist = []
957 957 for vv in varlist:
958 958 tt = type_name(vv)
959 959 if tt=='instance':
960 960 typelist.append(str(vv.__class__))
961 961 else:
962 962 typelist.append(tt)
963 963
964 964 # column labels and # of spaces as separator
965 965 varlabel = 'Variable'
966 966 typelabel = 'Type'
967 967 datalabel = 'Data/Info'
968 968 colsep = 3
969 969 # variable format strings
970 970 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
971 971 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
972 972 aformat = "%s: %s elems, type `%s`, %s bytes"
973 973 # find the size of the columns to format the output nicely
974 974 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
975 975 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
976 976 # table header
977 977 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
978 978 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
979 979 # and the table itself
980 980 kb = 1024
981 981 Mb = 1048576 # kb**2
982 982 for vname,var,vtype in zip(varnames,varlist,typelist):
983 983 print itpl(vformat),
984 984 if vtype in seq_types:
985 985 print len(var)
986 986 elif vtype==array_type:
987 987 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
988 988 vsize = Numeric.size(var)
989 989 vbytes = vsize*var.itemsize()
990 990 if vbytes < 100000:
991 991 print aformat % (vshape,vsize,var.typecode(),vbytes)
992 992 else:
993 993 print aformat % (vshape,vsize,var.typecode(),vbytes),
994 994 if vbytes < Mb:
995 995 print '(%s kb)' % (vbytes/kb,)
996 996 else:
997 997 print '(%s Mb)' % (vbytes/Mb,)
998 998 else:
999 999 vstr = str(var).replace('\n','\\n')
1000 1000 if len(vstr) < 50:
1001 1001 print vstr
1002 1002 else:
1003 1003 printpl(vfmt_short)
1004 1004
1005 1005 def magic_reset(self, parameter_s=''):
1006 1006 """Resets the namespace by removing all names defined by the user.
1007 1007
1008 1008 Input/Output history are left around in case you need them."""
1009 1009
1010 1010 ans = self.shell.ask_yes_no(
1011 1011 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1012 1012 if not ans:
1013 1013 print 'Nothing done.'
1014 1014 return
1015 1015 user_ns = self.shell.user_ns
1016 1016 for i in self.magic_who_ls():
1017 1017 del(user_ns[i])
1018 1018
1019 1019 def magic_config(self,parameter_s=''):
1020 1020 """Show IPython's internal configuration."""
1021 1021
1022 1022 page('Current configuration structure:\n'+
1023 1023 pformat(self.shell.rc.dict()))
1024 1024
1025 1025 def magic_logstart(self,parameter_s=''):
1026 1026 """Start logging anywhere in a session.
1027 1027
1028 1028 %logstart [-o|-r|-t] [log_name [log_mode]]
1029 1029
1030 1030 If no name is given, it defaults to a file named 'ipython_log.py' in your
1031 1031 current directory, in 'rotate' mode (see below).
1032 1032
1033 1033 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1034 1034 history up to that point and then continues logging.
1035 1035
1036 1036 %logstart takes a second optional parameter: logging mode. This can be one
1037 1037 of (note that the modes are given unquoted):\\
1038 1038 append: well, that says it.\\
1039 1039 backup: rename (if exists) to name~ and start name.\\
1040 1040 global: single logfile in your home dir, appended to.\\
1041 1041 over : overwrite existing log.\\
1042 1042 rotate: create rotating logs name.1~, name.2~, etc.
1043 1043
1044 1044 Options:
1045 1045
1046 1046 -o: log also IPython's output. In this mode, all commands which
1047 1047 generate an Out[NN] prompt are recorded to the logfile, right after
1048 1048 their corresponding input line. The output lines are always
1049 1049 prepended with a '#[Out]# ' marker, so that the log remains valid
1050 1050 Python code.
1051 1051
1052 1052 Since this marker is always the same, filtering only the output from
1053 1053 a log is very easy, using for example a simple awk call:
1054 1054
1055 1055 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1056 1056
1057 1057 -r: log 'raw' input. Normally, IPython's logs contain the processed
1058 1058 input, so that user lines are logged in their final form, converted
1059 1059 into valid Python. For example, %Exit is logged as
1060 1060 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1061 1061 exactly as typed, with no transformations applied.
1062 1062
1063 1063 -t: put timestamps before each input line logged (these are put in
1064 1064 comments)."""
1065 1065
1066 1066 opts,par = self.parse_options(parameter_s,'ort')
1067 1067 log_output = 'o' in opts
1068 1068 log_raw_input = 'r' in opts
1069 1069 timestamp = 't' in opts
1070 1070
1071 1071 rc = self.shell.rc
1072 1072 logger = self.shell.logger
1073 1073
1074 1074 # if no args are given, the defaults set in the logger constructor by
1075 1075 # ipytohn remain valid
1076 1076 if par:
1077 1077 try:
1078 1078 logfname,logmode = par.split()
1079 1079 except:
1080 1080 logfname = par
1081 1081 logmode = 'backup'
1082 1082 else:
1083 1083 logfname = logger.logfname
1084 1084 logmode = logger.logmode
1085 1085 # put logfname into rc struct as if it had been called on the command
1086 1086 # line, so it ends up saved in the log header Save it in case we need
1087 1087 # to restore it...
1088 1088 old_logfile = rc.opts.get('logfile','')
1089 1089 if logfname:
1090 1090 logfname = os.path.expanduser(logfname)
1091 1091 rc.opts.logfile = logfname
1092 1092 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1093 1093 try:
1094 1094 started = logger.logstart(logfname,loghead,logmode,
1095 1095 log_output,timestamp,log_raw_input)
1096 1096 except:
1097 1097 rc.opts.logfile = old_logfile
1098 1098 warn("Couldn't start log: %s" % sys.exc_info()[1])
1099 1099 else:
1100 1100 # log input history up to this point, optionally interleaving
1101 1101 # output if requested
1102 1102
1103 1103 if timestamp:
1104 1104 # disable timestamping for the previous history, since we've
1105 1105 # lost those already (no time machine here).
1106 1106 logger.timestamp = False
1107 1107
1108 1108 if log_raw_input:
1109 1109 input_hist = self.shell.input_hist_raw
1110 1110 else:
1111 1111 input_hist = self.shell.input_hist
1112 1112
1113 1113 if log_output:
1114 1114 log_write = logger.log_write
1115 1115 output_hist = self.shell.output_hist
1116 1116 for n in range(1,len(input_hist)-1):
1117 1117 log_write(input_hist[n].rstrip())
1118 1118 if n in output_hist:
1119 1119 log_write(repr(output_hist[n]),'output')
1120 1120 else:
1121 1121 logger.log_write(input_hist[1:])
1122 1122 if timestamp:
1123 1123 # re-enable timestamping
1124 1124 logger.timestamp = True
1125 1125
1126 1126 print ('Activating auto-logging. '
1127 1127 'Current session state plus future input saved.')
1128 1128 logger.logstate()
1129 1129
1130 1130 def magic_logoff(self,parameter_s=''):
1131 1131 """Temporarily stop logging.
1132 1132
1133 1133 You must have previously started logging."""
1134 1134 self.shell.logger.switch_log(0)
1135 1135
1136 1136 def magic_logon(self,parameter_s=''):
1137 1137 """Restart logging.
1138 1138
1139 1139 This function is for restarting logging which you've temporarily
1140 1140 stopped with %logoff. For starting logging for the first time, you
1141 1141 must use the %logstart function, which allows you to specify an
1142 1142 optional log filename."""
1143 1143
1144 1144 self.shell.logger.switch_log(1)
1145 1145
1146 1146 def magic_logstate(self,parameter_s=''):
1147 1147 """Print the status of the logging system."""
1148 1148
1149 1149 self.shell.logger.logstate()
1150 1150
1151 1151 def magic_pdb(self, parameter_s=''):
1152 1152 """Control the calling of the pdb interactive debugger.
1153 1153
1154 1154 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1155 1155 argument it works as a toggle.
1156 1156
1157 1157 When an exception is triggered, IPython can optionally call the
1158 1158 interactive pdb debugger after the traceback printout. %pdb toggles
1159 1159 this feature on and off."""
1160 1160
1161 1161 par = parameter_s.strip().lower()
1162 1162
1163 1163 if par:
1164 1164 try:
1165 1165 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1166 1166 except KeyError:
1167 1167 print ('Incorrect argument. Use on/1, off/0, '
1168 1168 'or nothing for a toggle.')
1169 1169 return
1170 1170 else:
1171 1171 # toggle
1172 1172 new_pdb = not self.shell.InteractiveTB.call_pdb
1173 1173
1174 1174 # set on the shell
1175 1175 self.shell.call_pdb = new_pdb
1176 1176 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1177 1177
1178 1178 def magic_prun(self, parameter_s ='',user_mode=1,
1179 1179 opts=None,arg_lst=None,prog_ns=None):
1180 1180
1181 1181 """Run a statement through the python code profiler.
1182 1182
1183 1183 Usage:\\
1184 1184 %prun [options] statement
1185 1185
1186 1186 The given statement (which doesn't require quote marks) is run via the
1187 1187 python profiler in a manner similar to the profile.run() function.
1188 1188 Namespaces are internally managed to work correctly; profile.run
1189 1189 cannot be used in IPython because it makes certain assumptions about
1190 1190 namespaces which do not hold under IPython.
1191 1191
1192 1192 Options:
1193 1193
1194 1194 -l <limit>: you can place restrictions on what or how much of the
1195 1195 profile gets printed. The limit value can be:
1196 1196
1197 1197 * A string: only information for function names containing this string
1198 1198 is printed.
1199 1199
1200 1200 * An integer: only these many lines are printed.
1201 1201
1202 1202 * A float (between 0 and 1): this fraction of the report is printed
1203 1203 (for example, use a limit of 0.4 to see the topmost 40% only).
1204 1204
1205 1205 You can combine several limits with repeated use of the option. For
1206 1206 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1207 1207 information about class constructors.
1208 1208
1209 1209 -r: return the pstats.Stats object generated by the profiling. This
1210 1210 object has all the information about the profile in it, and you can
1211 1211 later use it for further analysis or in other functions.
1212 1212
1213 1213 Since magic functions have a particular form of calling which prevents
1214 1214 you from writing something like:\\
1215 1215 In [1]: p = %prun -r print 4 # invalid!\\
1216 1216 you must instead use IPython's automatic variables to assign this:\\
1217 1217 In [1]: %prun -r print 4 \\
1218 1218 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1219 1219 In [2]: stats = _
1220 1220
1221 1221 If you really need to assign this value via an explicit function call,
1222 1222 you can always tap directly into the true name of the magic function
1223 1223 by using the _ip.magic function:\\
1224 1224 In [3]: stats = _ip.magic('prun','-r print 4')
1225 1225
1226 1226 You can type _ip.magic? for more details.
1227 1227
1228 1228 -s <key>: sort profile by given key. You can provide more than one key
1229 1229 by using the option several times: '-s key1 -s key2 -s key3...'. The
1230 1230 default sorting key is 'time'.
1231 1231
1232 1232 The following is copied verbatim from the profile documentation
1233 1233 referenced below:
1234 1234
1235 1235 When more than one key is provided, additional keys are used as
1236 1236 secondary criteria when the there is equality in all keys selected
1237 1237 before them.
1238 1238
1239 1239 Abbreviations can be used for any key names, as long as the
1240 1240 abbreviation is unambiguous. The following are the keys currently
1241 1241 defined:
1242 1242
1243 1243 Valid Arg Meaning\\
1244 1244 "calls" call count\\
1245 1245 "cumulative" cumulative time\\
1246 1246 "file" file name\\
1247 1247 "module" file name\\
1248 1248 "pcalls" primitive call count\\
1249 1249 "line" line number\\
1250 1250 "name" function name\\
1251 1251 "nfl" name/file/line\\
1252 1252 "stdname" standard name\\
1253 1253 "time" internal time
1254 1254
1255 1255 Note that all sorts on statistics are in descending order (placing
1256 1256 most time consuming items first), where as name, file, and line number
1257 1257 searches are in ascending order (i.e., alphabetical). The subtle
1258 1258 distinction between "nfl" and "stdname" is that the standard name is a
1259 1259 sort of the name as printed, which means that the embedded line
1260 1260 numbers get compared in an odd way. For example, lines 3, 20, and 40
1261 1261 would (if the file names were the same) appear in the string order
1262 1262 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1263 1263 line numbers. In fact, sort_stats("nfl") is the same as
1264 1264 sort_stats("name", "file", "line").
1265 1265
1266 1266 -T <filename>: save profile results as shown on screen to a text
1267 1267 file. The profile is still shown on screen.
1268 1268
1269 1269 -D <filename>: save (via dump_stats) profile statistics to given
1270 1270 filename. This data is in a format understod by the pstats module, and
1271 1271 is generated by a call to the dump_stats() method of profile
1272 1272 objects. The profile is still shown on screen.
1273 1273
1274 1274 If you want to run complete programs under the profiler's control, use
1275 1275 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1276 1276 contains profiler specific options as described here.
1277 1277
1278 1278 You can read the complete documentation for the profile module with:\\
1279 1279 In [1]: import profile; profile.help() """
1280 1280
1281 1281 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1282 1282 # protect user quote marks
1283 1283 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1284 1284
1285 1285 if user_mode: # regular user call
1286 1286 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1287 1287 list_all=1)
1288 1288 namespace = self.shell.user_ns
1289 1289 else: # called to run a program by %run -p
1290 1290 try:
1291 1291 filename = get_py_filename(arg_lst[0])
1292 1292 except IOError,msg:
1293 1293 error(msg)
1294 1294 return
1295 1295
1296 1296 arg_str = 'execfile(filename,prog_ns)'
1297 1297 namespace = locals()
1298 1298
1299 1299 opts.merge(opts_def)
1300 1300
1301 1301 prof = profile.Profile()
1302 1302 try:
1303 1303 prof = prof.runctx(arg_str,namespace,namespace)
1304 1304 sys_exit = ''
1305 1305 except SystemExit:
1306 1306 sys_exit = """*** SystemExit exception caught in code being profiled."""
1307 1307
1308 1308 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1309 1309
1310 1310 lims = opts.l
1311 1311 if lims:
1312 1312 lims = [] # rebuild lims with ints/floats/strings
1313 1313 for lim in opts.l:
1314 1314 try:
1315 1315 lims.append(int(lim))
1316 1316 except ValueError:
1317 1317 try:
1318 1318 lims.append(float(lim))
1319 1319 except ValueError:
1320 1320 lims.append(lim)
1321 1321
1322 1322 # trap output
1323 1323 sys_stdout = sys.stdout
1324 1324 stdout_trap = StringIO()
1325 1325 try:
1326 1326 sys.stdout = stdout_trap
1327 1327 stats.print_stats(*lims)
1328 1328 finally:
1329 1329 sys.stdout = sys_stdout
1330 1330 output = stdout_trap.getvalue()
1331 1331 output = output.rstrip()
1332 1332
1333 1333 page(output,screen_lines=self.shell.rc.screen_length)
1334 1334 print sys_exit,
1335 1335
1336 1336 dump_file = opts.D[0]
1337 1337 text_file = opts.T[0]
1338 1338 if dump_file:
1339 1339 prof.dump_stats(dump_file)
1340 1340 print '\n*** Profile stats marshalled to file',\
1341 1341 `dump_file`+'.',sys_exit
1342 1342 if text_file:
1343 1343 file(text_file,'w').write(output)
1344 1344 print '\n*** Profile printout saved to text file',\
1345 1345 `text_file`+'.',sys_exit
1346 1346
1347 1347 if opts.has_key('r'):
1348 1348 return stats
1349 1349 else:
1350 1350 return None
1351 1351
1352 1352 def magic_run(self, parameter_s ='',runner=None):
1353 1353 """Run the named file inside IPython as a program.
1354 1354
1355 1355 Usage:\\
1356 1356 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1357 1357
1358 1358 Parameters after the filename are passed as command-line arguments to
1359 1359 the program (put in sys.argv). Then, control returns to IPython's
1360 1360 prompt.
1361 1361
1362 1362 This is similar to running at a system prompt:\\
1363 1363 $ python file args\\
1364 1364 but with the advantage of giving you IPython's tracebacks, and of
1365 1365 loading all variables into your interactive namespace for further use
1366 1366 (unless -p is used, see below).
1367 1367
1368 1368 The file is executed in a namespace initially consisting only of
1369 1369 __name__=='__main__' and sys.argv constructed as indicated. It thus
1370 1370 sees its environment as if it were being run as a stand-alone
1371 1371 program. But after execution, the IPython interactive namespace gets
1372 1372 updated with all variables defined in the program (except for __name__
1373 1373 and sys.argv). This allows for very convenient loading of code for
1374 1374 interactive work, while giving each program a 'clean sheet' to run in.
1375 1375
1376 1376 Options:
1377 1377
1378 1378 -n: __name__ is NOT set to '__main__', but to the running file's name
1379 1379 without extension (as python does under import). This allows running
1380 1380 scripts and reloading the definitions in them without calling code
1381 1381 protected by an ' if __name__ == "__main__" ' clause.
1382 1382
1383 1383 -i: run the file in IPython's namespace instead of an empty one. This
1384 1384 is useful if you are experimenting with code written in a text editor
1385 1385 which depends on variables defined interactively.
1386 1386
1387 1387 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1388 1388 being run. This is particularly useful if IPython is being used to
1389 1389 run unittests, which always exit with a sys.exit() call. In such
1390 1390 cases you are interested in the output of the test results, not in
1391 1391 seeing a traceback of the unittest module.
1392 1392
1393 1393 -t: print timing information at the end of the run. IPython will give
1394 1394 you an estimated CPU time consumption for your script, which under
1395 1395 Unix uses the resource module to avoid the wraparound problems of
1396 1396 time.clock(). Under Unix, an estimate of time spent on system tasks
1397 1397 is also given (for Windows platforms this is reported as 0.0).
1398 1398
1399 1399 If -t is given, an additional -N<N> option can be given, where <N>
1400 1400 must be an integer indicating how many times you want the script to
1401 1401 run. The final timing report will include total and per run results.
1402 1402
1403 1403 For example (testing the script uniq_stable.py):
1404 1404
1405 1405 In [1]: run -t uniq_stable
1406 1406
1407 1407 IPython CPU timings (estimated):\\
1408 1408 User : 0.19597 s.\\
1409 1409 System: 0.0 s.\\
1410 1410
1411 1411 In [2]: run -t -N5 uniq_stable
1412 1412
1413 1413 IPython CPU timings (estimated):\\
1414 1414 Total runs performed: 5\\
1415 1415 Times : Total Per run\\
1416 1416 User : 0.910862 s, 0.1821724 s.\\
1417 1417 System: 0.0 s, 0.0 s.
1418 1418
1419 1419 -d: run your program under the control of pdb, the Python debugger.
1420 1420 This allows you to execute your program step by step, watch variables,
1421 1421 etc. Internally, what IPython does is similar to calling:
1422 1422
1423 1423 pdb.run('execfile("YOURFILENAME")')
1424 1424
1425 1425 with a breakpoint set on line 1 of your file. You can change the line
1426 1426 number for this automatic breakpoint to be <N> by using the -bN option
1427 1427 (where N must be an integer). For example:
1428 1428
1429 1429 %run -d -b40 myscript
1430 1430
1431 1431 will set the first breakpoint at line 40 in myscript.py. Note that
1432 1432 the first breakpoint must be set on a line which actually does
1433 1433 something (not a comment or docstring) for it to stop execution.
1434 1434
1435 1435 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1436 1436 first enter 'c' (without qoutes) to start execution up to the first
1437 1437 breakpoint.
1438 1438
1439 1439 Entering 'help' gives information about the use of the debugger. You
1440 1440 can easily see pdb's full documentation with "import pdb;pdb.help()"
1441 1441 at a prompt.
1442 1442
1443 1443 -p: run program under the control of the Python profiler module (which
1444 1444 prints a detailed report of execution times, function calls, etc).
1445 1445
1446 1446 You can pass other options after -p which affect the behavior of the
1447 1447 profiler itself. See the docs for %prun for details.
1448 1448
1449 1449 In this mode, the program's variables do NOT propagate back to the
1450 1450 IPython interactive namespace (because they remain in the namespace
1451 1451 where the profiler executes them).
1452 1452
1453 1453 Internally this triggers a call to %prun, see its documentation for
1454 1454 details on the options available specifically for profiling."""
1455 1455
1456 1456 # get arguments and set sys.argv for program to be run.
1457 1457 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1458 1458 mode='list',list_all=1)
1459 1459
1460 1460 try:
1461 1461 filename = get_py_filename(arg_lst[0])
1462 1462 except IndexError:
1463 1463 warn('you must provide at least a filename.')
1464 1464 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1465 1465 return
1466 1466 except IOError,msg:
1467 1467 error(msg)
1468 1468 return
1469 1469
1470 1470 # Control the response to exit() calls made by the script being run
1471 1471 exit_ignore = opts.has_key('e')
1472 1472
1473 1473 # Make sure that the running script gets a proper sys.argv as if it
1474 1474 # were run from a system shell.
1475 1475 save_argv = sys.argv # save it for later restoring
1476 1476 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1477 1477
1478 1478 if opts.has_key('i'):
1479 1479 prog_ns = self.shell.user_ns
1480 1480 __name__save = self.shell.user_ns['__name__']
1481 1481 prog_ns['__name__'] = '__main__'
1482 1482 else:
1483 1483 if opts.has_key('n'):
1484 1484 name = os.path.splitext(os.path.basename(filename))[0]
1485 1485 else:
1486 1486 name = '__main__'
1487 1487 prog_ns = {'__name__':name}
1488 1488
1489 1489 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1490 1490 # set the __file__ global in the script's namespace
1491 1491 prog_ns['__file__'] = filename
1492 1492
1493 1493 # pickle fix. See iplib for an explanation. But we need to make sure
1494 1494 # that, if we overwrite __main__, we replace it at the end
1495 1495 if prog_ns['__name__'] == '__main__':
1496 1496 restore_main = sys.modules['__main__']
1497 1497 else:
1498 1498 restore_main = False
1499 1499
1500 1500 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1501 1501
1502 1502 stats = None
1503 1503 try:
1504 1504 if opts.has_key('p'):
1505 1505 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1506 1506 else:
1507 1507 if opts.has_key('d'):
1508 1508 deb = Debugger.Pdb(self.shell.rc.colors)
1509 1509 # reset Breakpoint state, which is moronically kept
1510 1510 # in a class
1511 1511 bdb.Breakpoint.next = 1
1512 1512 bdb.Breakpoint.bplist = {}
1513 1513 bdb.Breakpoint.bpbynumber = [None]
1514 1514 # Set an initial breakpoint to stop execution
1515 1515 maxtries = 10
1516 1516 bp = int(opts.get('b',[1])[0])
1517 1517 checkline = deb.checkline(filename,bp)
1518 1518 if not checkline:
1519 1519 for bp in range(bp+1,bp+maxtries+1):
1520 1520 if deb.checkline(filename,bp):
1521 1521 break
1522 1522 else:
1523 1523 msg = ("\nI failed to find a valid line to set "
1524 1524 "a breakpoint\n"
1525 1525 "after trying up to line: %s.\n"
1526 1526 "Please set a valid breakpoint manually "
1527 1527 "with the -b option." % bp)
1528 1528 error(msg)
1529 1529 return
1530 1530 # if we find a good linenumber, set the breakpoint
1531 1531 deb.do_break('%s:%s' % (filename,bp))
1532 1532 # Start file run
1533 1533 print "NOTE: Enter 'c' at the",
1534 1534 print "ipdb> prompt to start your script."
1535 1535 try:
1536 1536 deb.run('execfile("%s")' % filename,prog_ns)
1537 1537 except:
1538 1538 etype, value, tb = sys.exc_info()
1539 1539 # Skip three frames in the traceback: the %run one,
1540 1540 # one inside bdb.py, and the command-line typed by the
1541 1541 # user (run by exec in pdb itself).
1542 1542 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1543 1543 else:
1544 1544 if runner is None:
1545 1545 runner = self.shell.safe_execfile
1546 1546 if opts.has_key('t'):
1547 1547 try:
1548 1548 nruns = int(opts['N'][0])
1549 1549 if nruns < 1:
1550 1550 error('Number of runs must be >=1')
1551 1551 return
1552 1552 except (KeyError):
1553 1553 nruns = 1
1554 1554 if nruns == 1:
1555 1555 t0 = clock2()
1556 1556 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1557 1557 t1 = clock2()
1558 1558 t_usr = t1[0]-t0[0]
1559 1559 t_sys = t1[1]-t1[1]
1560 1560 print "\nIPython CPU timings (estimated):"
1561 1561 print " User : %10s s." % t_usr
1562 1562 print " System: %10s s." % t_sys
1563 1563 else:
1564 1564 runs = range(nruns)
1565 1565 t0 = clock2()
1566 1566 for nr in runs:
1567 1567 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1568 1568 t1 = clock2()
1569 1569 t_usr = t1[0]-t0[0]
1570 1570 t_sys = t1[1]-t1[1]
1571 1571 print "\nIPython CPU timings (estimated):"
1572 1572 print "Total runs performed:",nruns
1573 1573 print " Times : %10s %10s" % ('Total','Per run')
1574 1574 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1575 1575 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1576 1576
1577 1577 else:
1578 1578 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1579 1579 if opts.has_key('i'):
1580 1580 self.shell.user_ns['__name__'] = __name__save
1581 1581 else:
1582 1582 # update IPython interactive namespace
1583 1583 del prog_ns['__name__']
1584 1584 self.shell.user_ns.update(prog_ns)
1585 1585 finally:
1586 1586 sys.argv = save_argv
1587 1587 if restore_main:
1588 1588 sys.modules['__main__'] = restore_main
1589 1589 return stats
1590 1590
1591 1591 def magic_runlog(self, parameter_s =''):
1592 1592 """Run files as logs.
1593 1593
1594 1594 Usage:\\
1595 1595 %runlog file1 file2 ...
1596 1596
1597 1597 Run the named files (treating them as log files) in sequence inside
1598 1598 the interpreter, and return to the prompt. This is much slower than
1599 1599 %run because each line is executed in a try/except block, but it
1600 1600 allows running files with syntax errors in them.
1601 1601
1602 1602 Normally IPython will guess when a file is one of its own logfiles, so
1603 1603 you can typically use %run even for logs. This shorthand allows you to
1604 1604 force any file to be treated as a log file."""
1605 1605
1606 1606 for f in parameter_s.split():
1607 1607 self.shell.safe_execfile(f,self.shell.user_ns,
1608 1608 self.shell.user_ns,islog=1)
1609 1609
1610 1610 def magic_timeit(self, parameter_s =''):
1611 1611 """Time execution of a Python statement or expression
1612 1612
1613 1613 Usage:\\
1614 1614 %timeit [-n<N> -r<R> [-t|-c]] statement
1615 1615
1616 1616 Time execution of a Python statement or expression using the timeit
1617 1617 module.
1618 1618
1619 1619 Options:
1620 1620 -n<N>: execute the given statement <N> times in a loop. If this value
1621 1621 is not given, a fitting value is chosen.
1622 1622
1623 1623 -r<R>: repeat the loop iteration <R> times and take the best result.
1624 1624 Default: 3
1625 1625
1626 1626 -t: use time.time to measure the time, which is the default on Unix.
1627 1627 This function measures wall time.
1628 1628
1629 1629 -c: use time.clock to measure the time, which is the default on
1630 1630 Windows and measures wall time. On Unix, resource.getrusage is used
1631 1631 instead and returns the CPU user time.
1632 1632
1633 1633 -p<P>: use a precision of <P> digits to display the timing result.
1634 1634 Default: 3
1635 1635
1636 1636
1637 1637 Examples:\\
1638 1638 In [1]: %timeit pass
1639 1639 10000000 loops, best of 3: 53.3 ns per loop
1640 1640
1641 1641 In [2]: u = None
1642 1642
1643 1643 In [3]: %timeit u is None
1644 1644 10000000 loops, best of 3: 184 ns per loop
1645 1645
1646 1646 In [4]: %timeit -r 4 u == None
1647 1647 1000000 loops, best of 4: 242 ns per loop
1648 1648
1649 1649 In [5]: import time
1650 1650
1651 1651 In [6]: %timeit -n1 time.sleep(2)
1652 1652 1 loops, best of 3: 2 s per loop
1653 1653
1654 1654
1655 1655 The times reported by %timeit will be slightly higher than those
1656 1656 reported by the timeit.py script when variables are accessed. This is
1657 1657 due to the fact that %timeit executes the statement in the namespace
1658 1658 of the shell, compared with timeit.py, which uses a single setup
1659 1659 statement to import function or create variables. Generally, the bias
1660 1660 does not matter as long as results from timeit.py are not mixed with
1661 1661 those from %timeit."""
1662 1662
1663 1663 import timeit
1664 1664 import math
1665 1665
1666 1666 units = ["s", "ms", "\xc2\xb5s", "ns"]
1667 1667 scaling = [1, 1e3, 1e6, 1e9]
1668 1668
1669 1669 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1670 1670 posix=False)
1671 1671 if stmt == "":
1672 1672 return
1673 1673 timefunc = timeit.default_timer
1674 1674 number = int(getattr(opts, "n", 0))
1675 1675 repeat = int(getattr(opts, "r", timeit.default_repeat))
1676 1676 precision = int(getattr(opts, "p", 3))
1677 1677 if hasattr(opts, "t"):
1678 1678 timefunc = time.time
1679 1679 if hasattr(opts, "c"):
1680 1680 timefunc = clock
1681 1681
1682 1682 timer = timeit.Timer(timer=timefunc)
1683 1683 # this code has tight coupling to the inner workings of timeit.Timer,
1684 1684 # but is there a better way to achieve that the code stmt has access
1685 1685 # to the shell namespace?
1686 1686
1687 1687 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1688 1688 'setup': "pass"}
1689 1689 code = compile(src, "<magic-timeit>", "exec")
1690 1690 ns = {}
1691 1691 exec code in self.shell.user_ns, ns
1692 1692 timer.inner = ns["inner"]
1693 1693
1694 1694 if number == 0:
1695 1695 # determine number so that 0.2 <= total time < 2.0
1696 1696 number = 1
1697 1697 for i in range(1, 10):
1698 1698 number *= 10
1699 1699 if timer.timeit(number) >= 0.2:
1700 1700 break
1701 1701
1702 1702 best = min(timer.repeat(repeat, number)) / number
1703 1703
1704 1704 if best > 0.0:
1705 1705 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1706 1706 else:
1707 1707 order = 3
1708 1708 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1709 1709 precision,
1710 1710 best * scaling[order],
1711 1711 units[order])
1712 1712
1713 1713 def magic_time(self,parameter_s = ''):
1714 1714 """Time execution of a Python statement or expression.
1715 1715
1716 1716 The CPU and wall clock times are printed, and the value of the
1717 1717 expression (if any) is returned. Note that under Win32, system time
1718 1718 is always reported as 0, since it can not be measured.
1719 1719
1720 1720 This function provides very basic timing functionality. In Python
1721 1721 2.3, the timeit module offers more control and sophistication, so this
1722 1722 could be rewritten to use it (patches welcome).
1723 1723
1724 1724 Some examples:
1725 1725
1726 1726 In [1]: time 2**128
1727 1727 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1728 1728 Wall time: 0.00
1729 1729 Out[1]: 340282366920938463463374607431768211456L
1730 1730
1731 1731 In [2]: n = 1000000
1732 1732
1733 1733 In [3]: time sum(range(n))
1734 1734 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1735 1735 Wall time: 1.37
1736 1736 Out[3]: 499999500000L
1737 1737
1738 1738 In [4]: time print 'hello world'
1739 1739 hello world
1740 1740 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1741 1741 Wall time: 0.00
1742 1742 """
1743 1743
1744 1744 # fail immediately if the given expression can't be compiled
1745 1745 try:
1746 1746 mode = 'eval'
1747 1747 code = compile(parameter_s,'<timed eval>',mode)
1748 1748 except SyntaxError:
1749 1749 mode = 'exec'
1750 1750 code = compile(parameter_s,'<timed exec>',mode)
1751 1751 # skew measurement as little as possible
1752 1752 glob = self.shell.user_ns
1753 1753 clk = clock2
1754 1754 wtime = time.time
1755 1755 # time execution
1756 1756 wall_st = wtime()
1757 1757 if mode=='eval':
1758 1758 st = clk()
1759 1759 out = eval(code,glob)
1760 1760 end = clk()
1761 1761 else:
1762 1762 st = clk()
1763 1763 exec code in glob
1764 1764 end = clk()
1765 1765 out = None
1766 1766 wall_end = wtime()
1767 1767 # Compute actual times and report
1768 1768 wall_time = wall_end-wall_st
1769 1769 cpu_user = end[0]-st[0]
1770 1770 cpu_sys = end[1]-st[1]
1771 1771 cpu_tot = cpu_user+cpu_sys
1772 1772 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1773 1773 (cpu_user,cpu_sys,cpu_tot)
1774 1774 print "Wall time: %.2f" % wall_time
1775 1775 return out
1776 1776
1777 1777 def magic_macro(self,parameter_s = ''):
1778 1778 """Define a set of input lines as a macro for future re-execution.
1779 1779
1780 1780 Usage:\\
1781 1781 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1782 1782
1783 1783 Options:
1784 1784
1785 1785 -r: use 'raw' input. By default, the 'processed' history is used,
1786 1786 so that magics are loaded in their transformed version to valid
1787 1787 Python. If this option is given, the raw input as typed as the
1788 1788 command line is used instead.
1789 1789
1790 1790 This will define a global variable called `name` which is a string
1791 1791 made of joining the slices and lines you specify (n1,n2,... numbers
1792 1792 above) from your input history into a single string. This variable
1793 1793 acts like an automatic function which re-executes those lines as if
1794 1794 you had typed them. You just type 'name' at the prompt and the code
1795 1795 executes.
1796 1796
1797 1797 The notation for indicating number ranges is: n1-n2 means 'use line
1798 1798 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1799 1799 using the lines numbered 5,6 and 7.
1800 1800
1801 1801 Note: as a 'hidden' feature, you can also use traditional python slice
1802 1802 notation, where N:M means numbers N through M-1.
1803 1803
1804 1804 For example, if your history contains (%hist prints it):
1805 1805
1806 1806 44: x=1\\
1807 1807 45: y=3\\
1808 1808 46: z=x+y\\
1809 1809 47: print x\\
1810 1810 48: a=5\\
1811 1811 49: print 'x',x,'y',y\\
1812 1812
1813 1813 you can create a macro with lines 44 through 47 (included) and line 49
1814 1814 called my_macro with:
1815 1815
1816 1816 In [51]: %macro my_macro 44-47 49
1817 1817
1818 1818 Now, typing `my_macro` (without quotes) will re-execute all this code
1819 1819 in one pass.
1820 1820
1821 1821 You don't need to give the line-numbers in order, and any given line
1822 1822 number can appear multiple times. You can assemble macros with any
1823 1823 lines from your input history in any order.
1824 1824
1825 1825 The macro is a simple object which holds its value in an attribute,
1826 1826 but IPython's display system checks for macros and executes them as
1827 1827 code instead of printing them when you type their name.
1828 1828
1829 1829 You can view a macro's contents by explicitly printing it with:
1830 1830
1831 1831 'print macro_name'.
1832 1832
1833 1833 For one-off cases which DON'T contain magic function calls in them you
1834 1834 can obtain similar results by explicitly executing slices from your
1835 1835 input history with:
1836 1836
1837 1837 In [60]: exec In[44:48]+In[49]"""
1838 1838
1839 1839 opts,args = self.parse_options(parameter_s,'r',mode='list')
1840 1840 name,ranges = args[0], args[1:]
1841 1841 #print 'rng',ranges # dbg
1842 1842 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1843 1843 macro = Macro(lines)
1844 1844 self.shell.user_ns.update({name:macro})
1845 1845 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1846 1846 print 'Macro contents:'
1847 1847 print macro,
1848 1848
1849 1849 def magic_save(self,parameter_s = ''):
1850 1850 """Save a set of lines to a given filename.
1851 1851
1852 1852 Usage:\\
1853 1853 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1854 1854
1855 1855 Options:
1856 1856
1857 1857 -r: use 'raw' input. By default, the 'processed' history is used,
1858 1858 so that magics are loaded in their transformed version to valid
1859 1859 Python. If this option is given, the raw input as typed as the
1860 1860 command line is used instead.
1861 1861
1862 1862 This function uses the same syntax as %macro for line extraction, but
1863 1863 instead of creating a macro it saves the resulting string to the
1864 1864 filename you specify.
1865 1865
1866 1866 It adds a '.py' extension to the file if you don't do so yourself, and
1867 1867 it asks for confirmation before overwriting existing files."""
1868 1868
1869 1869 opts,args = self.parse_options(parameter_s,'r',mode='list')
1870 1870 fname,ranges = args[0], args[1:]
1871 1871 if not fname.endswith('.py'):
1872 1872 fname += '.py'
1873 1873 if os.path.isfile(fname):
1874 1874 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1875 1875 if ans.lower() not in ['y','yes']:
1876 1876 print 'Operation cancelled.'
1877 1877 return
1878 1878 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1879 1879 f = file(fname,'w')
1880 1880 f.write(cmds)
1881 1881 f.close()
1882 1882 print 'The following commands were written to file `%s`:' % fname
1883 1883 print cmds
1884 1884
1885 1885 def _edit_macro(self,mname,macro):
1886 1886 """open an editor with the macro data in a file"""
1887 1887 filename = self.shell.mktempfile(macro.value)
1888 1888 self.shell.hooks.editor(filename)
1889 1889
1890 1890 # and make a new macro object, to replace the old one
1891 1891 mfile = open(filename)
1892 1892 mvalue = mfile.read()
1893 1893 mfile.close()
1894 1894 self.shell.user_ns[mname] = Macro(mvalue)
1895 1895
1896 1896 def magic_ed(self,parameter_s=''):
1897 1897 """Alias to %edit."""
1898 1898 return self.magic_edit(parameter_s)
1899 1899
1900 1900 def magic_edit(self,parameter_s='',last_call=['','']):
1901 1901 """Bring up an editor and execute the resulting code.
1902 1902
1903 1903 Usage:
1904 1904 %edit [options] [args]
1905 1905
1906 1906 %edit runs IPython's editor hook. The default version of this hook is
1907 1907 set to call the __IPYTHON__.rc.editor command. This is read from your
1908 1908 environment variable $EDITOR. If this isn't found, it will default to
1909 1909 vi under Linux/Unix and to notepad under Windows. See the end of this
1910 1910 docstring for how to change the editor hook.
1911 1911
1912 1912 You can also set the value of this editor via the command line option
1913 1913 '-editor' or in your ipythonrc file. This is useful if you wish to use
1914 1914 specifically for IPython an editor different from your typical default
1915 1915 (and for Windows users who typically don't set environment variables).
1916 1916
1917 1917 This command allows you to conveniently edit multi-line code right in
1918 1918 your IPython session.
1919 1919
1920 1920 If called without arguments, %edit opens up an empty editor with a
1921 1921 temporary file and will execute the contents of this file when you
1922 1922 close it (don't forget to save it!).
1923 1923
1924 1924
1925 1925 Options:
1926 1926
1927 1927 -n <number>: open the editor at a specified line number. By default,
1928 1928 the IPython editor hook uses the unix syntax 'editor +N filename', but
1929 1929 you can configure this by providing your own modified hook if your
1930 1930 favorite editor supports line-number specifications with a different
1931 1931 syntax.
1932 1932
1933 1933 -p: this will call the editor with the same data as the previous time
1934 1934 it was used, regardless of how long ago (in your current session) it
1935 1935 was.
1936 1936
1937 1937 -r: use 'raw' input. This option only applies to input taken from the
1938 1938 user's history. By default, the 'processed' history is used, so that
1939 1939 magics are loaded in their transformed version to valid Python. If
1940 1940 this option is given, the raw input as typed as the command line is
1941 1941 used instead. When you exit the editor, it will be executed by
1942 1942 IPython's own processor.
1943 1943
1944 1944 -x: do not execute the edited code immediately upon exit. This is
1945 1945 mainly useful if you are editing programs which need to be called with
1946 1946 command line arguments, which you can then do using %run.
1947 1947
1948 1948
1949 1949 Arguments:
1950 1950
1951 1951 If arguments are given, the following possibilites exist:
1952 1952
1953 1953 - The arguments are numbers or pairs of colon-separated numbers (like
1954 1954 1 4:8 9). These are interpreted as lines of previous input to be
1955 1955 loaded into the editor. The syntax is the same of the %macro command.
1956 1956
1957 1957 - If the argument doesn't start with a number, it is evaluated as a
1958 1958 variable and its contents loaded into the editor. You can thus edit
1959 1959 any string which contains python code (including the result of
1960 1960 previous edits).
1961 1961
1962 1962 - If the argument is the name of an object (other than a string),
1963 1963 IPython will try to locate the file where it was defined and open the
1964 1964 editor at the point where it is defined. You can use `%edit function`
1965 1965 to load an editor exactly at the point where 'function' is defined,
1966 1966 edit it and have the file be executed automatically.
1967 1967
1968 1968 If the object is a macro (see %macro for details), this opens up your
1969 1969 specified editor with a temporary file containing the macro's data.
1970 1970 Upon exit, the macro is reloaded with the contents of the file.
1971 1971
1972 1972 Note: opening at an exact line is only supported under Unix, and some
1973 1973 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1974 1974 '+NUMBER' parameter necessary for this feature. Good editors like
1975 1975 (X)Emacs, vi, jed, pico and joe all do.
1976 1976
1977 1977 - If the argument is not found as a variable, IPython will look for a
1978 1978 file with that name (adding .py if necessary) and load it into the
1979 1979 editor. It will execute its contents with execfile() when you exit,
1980 1980 loading any code in the file into your interactive namespace.
1981 1981
1982 1982 After executing your code, %edit will return as output the code you
1983 1983 typed in the editor (except when it was an existing file). This way
1984 1984 you can reload the code in further invocations of %edit as a variable,
1985 1985 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1986 1986 the output.
1987 1987
1988 1988 Note that %edit is also available through the alias %ed.
1989 1989
1990 1990 This is an example of creating a simple function inside the editor and
1991 1991 then modifying it. First, start up the editor:
1992 1992
1993 1993 In [1]: ed\\
1994 1994 Editing... done. Executing edited code...\\
1995 1995 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1996 1996
1997 1997 We can then call the function foo():
1998 1998
1999 1999 In [2]: foo()\\
2000 2000 foo() was defined in an editing session
2001 2001
2002 2002 Now we edit foo. IPython automatically loads the editor with the
2003 2003 (temporary) file where foo() was previously defined:
2004 2004
2005 2005 In [3]: ed foo\\
2006 2006 Editing... done. Executing edited code...
2007 2007
2008 2008 And if we call foo() again we get the modified version:
2009 2009
2010 2010 In [4]: foo()\\
2011 2011 foo() has now been changed!
2012 2012
2013 2013 Here is an example of how to edit a code snippet successive
2014 2014 times. First we call the editor:
2015 2015
2016 2016 In [8]: ed\\
2017 2017 Editing... done. Executing edited code...\\
2018 2018 hello\\
2019 2019 Out[8]: "print 'hello'\\n"
2020 2020
2021 2021 Now we call it again with the previous output (stored in _):
2022 2022
2023 2023 In [9]: ed _\\
2024 2024 Editing... done. Executing edited code...\\
2025 2025 hello world\\
2026 2026 Out[9]: "print 'hello world'\\n"
2027 2027
2028 2028 Now we call it with the output #8 (stored in _8, also as Out[8]):
2029 2029
2030 2030 In [10]: ed _8\\
2031 2031 Editing... done. Executing edited code...\\
2032 2032 hello again\\
2033 2033 Out[10]: "print 'hello again'\\n"
2034 2034
2035 2035
2036 2036 Changing the default editor hook:
2037 2037
2038 2038 If you wish to write your own editor hook, you can put it in a
2039 2039 configuration file which you load at startup time. The default hook
2040 2040 is defined in the IPython.hooks module, and you can use that as a
2041 2041 starting example for further modifications. That file also has
2042 2042 general instructions on how to set a new hook for use once you've
2043 2043 defined it."""
2044 2044
2045 2045 # FIXME: This function has become a convoluted mess. It needs a
2046 2046 # ground-up rewrite with clean, simple logic.
2047 2047
2048 2048 def make_filename(arg):
2049 2049 "Make a filename from the given args"
2050 2050 try:
2051 2051 filename = get_py_filename(arg)
2052 2052 except IOError:
2053 2053 if args.endswith('.py'):
2054 2054 filename = arg
2055 2055 else:
2056 2056 filename = None
2057 2057 return filename
2058 2058
2059 2059 # custom exceptions
2060 2060 class DataIsObject(Exception): pass
2061 2061
2062 2062 opts,args = self.parse_options(parameter_s,'prxn:')
2063 2063 # Set a few locals from the options for convenience:
2064 2064 opts_p = opts.has_key('p')
2065 2065 opts_r = opts.has_key('r')
2066 2066
2067 2067 # Default line number value
2068 2068 lineno = opts.get('n',None)
2069 2069
2070 2070 if opts_p:
2071 2071 args = '_%s' % last_call[0]
2072 2072 if not self.shell.user_ns.has_key(args):
2073 2073 args = last_call[1]
2074 2074
2075 2075 # use last_call to remember the state of the previous call, but don't
2076 2076 # let it be clobbered by successive '-p' calls.
2077 2077 try:
2078 2078 last_call[0] = self.shell.outputcache.prompt_count
2079 2079 if not opts_p:
2080 2080 last_call[1] = parameter_s
2081 2081 except:
2082 2082 pass
2083 2083
2084 2084 # by default this is done with temp files, except when the given
2085 2085 # arg is a filename
2086 2086 use_temp = 1
2087 2087
2088 2088 if re.match(r'\d',args):
2089 2089 # Mode where user specifies ranges of lines, like in %macro.
2090 2090 # This means that you can't edit files whose names begin with
2091 2091 # numbers this way. Tough.
2092 2092 ranges = args.split()
2093 2093 data = ''.join(self.extract_input_slices(ranges,opts_r))
2094 2094 elif args.endswith('.py'):
2095 2095 filename = make_filename(args)
2096 2096 data = ''
2097 2097 use_temp = 0
2098 2098 elif args:
2099 2099 try:
2100 2100 # Load the parameter given as a variable. If not a string,
2101 2101 # process it as an object instead (below)
2102 2102
2103 2103 #print '*** args',args,'type',type(args) # dbg
2104 2104 data = eval(args,self.shell.user_ns)
2105 2105 if not type(data) in StringTypes:
2106 2106 raise DataIsObject
2107 2107
2108 2108 except (NameError,SyntaxError):
2109 2109 # given argument is not a variable, try as a filename
2110 2110 filename = make_filename(args)
2111 2111 if filename is None:
2112 2112 warn("Argument given (%s) can't be found as a variable "
2113 2113 "or as a filename." % args)
2114 2114 return
2115 2115
2116 2116 data = ''
2117 2117 use_temp = 0
2118 2118 except DataIsObject:
2119 2119
2120 2120 # macros have a special edit function
2121 2121 if isinstance(data,Macro):
2122 2122 self._edit_macro(args,data)
2123 2123 return
2124 2124
2125 2125 # For objects, try to edit the file where they are defined
2126 2126 try:
2127 2127 filename = inspect.getabsfile(data)
2128 2128 datafile = 1
2129 2129 except TypeError:
2130 2130 filename = make_filename(args)
2131 2131 datafile = 1
2132 2132 warn('Could not find file where `%s` is defined.\n'
2133 2133 'Opening a file named `%s`' % (args,filename))
2134 2134 # Now, make sure we can actually read the source (if it was in
2135 2135 # a temp file it's gone by now).
2136 2136 if datafile:
2137 2137 try:
2138 2138 if lineno is None:
2139 2139 lineno = inspect.getsourcelines(data)[1]
2140 2140 except IOError:
2141 2141 filename = make_filename(args)
2142 2142 if filename is None:
2143 2143 warn('The file `%s` where `%s` was defined cannot '
2144 2144 'be read.' % (filename,data))
2145 2145 return
2146 2146 use_temp = 0
2147 2147 else:
2148 2148 data = ''
2149 2149
2150 2150 if use_temp:
2151 2151 filename = self.shell.mktempfile(data)
2152 2152 print 'IPython will make a temporary file named:',filename
2153 2153
2154 2154 # do actual editing here
2155 2155 print 'Editing...',
2156 2156 sys.stdout.flush()
2157 2157 self.shell.hooks.editor(filename,lineno)
2158 2158 if opts.has_key('x'): # -x prevents actual execution
2159 2159 print
2160 2160 else:
2161 2161 print 'done. Executing edited code...'
2162 2162 if opts_r:
2163 2163 self.shell.runlines(file_read(filename))
2164 2164 else:
2165 2165 self.shell.safe_execfile(filename,self.shell.user_ns)
2166 2166 if use_temp:
2167 2167 try:
2168 2168 return open(filename).read()
2169 2169 except IOError,msg:
2170 2170 if msg.filename == filename:
2171 2171 warn('File not found. Did you forget to save?')
2172 2172 return
2173 2173 else:
2174 2174 self.shell.showtraceback()
2175 2175
2176 2176 def magic_xmode(self,parameter_s = ''):
2177 2177 """Switch modes for the exception handlers.
2178 2178
2179 2179 Valid modes: Plain, Context and Verbose.
2180 2180
2181 2181 If called without arguments, acts as a toggle."""
2182 2182
2183 2183 def xmode_switch_err(name):
2184 2184 warn('Error changing %s exception modes.\n%s' %
2185 2185 (name,sys.exc_info()[1]))
2186 2186
2187 2187 shell = self.shell
2188 2188 new_mode = parameter_s.strip().capitalize()
2189 2189 try:
2190 2190 shell.InteractiveTB.set_mode(mode=new_mode)
2191 2191 print 'Exception reporting mode:',shell.InteractiveTB.mode
2192 2192 except:
2193 2193 xmode_switch_err('user')
2194 2194
2195 2195 # threaded shells use a special handler in sys.excepthook
2196 2196 if shell.isthreaded:
2197 2197 try:
2198 2198 shell.sys_excepthook.set_mode(mode=new_mode)
2199 2199 except:
2200 2200 xmode_switch_err('threaded')
2201 2201
2202 2202 def magic_colors(self,parameter_s = ''):
2203 2203 """Switch color scheme for prompts, info system and exception handlers.
2204 2204
2205 2205 Currently implemented schemes: NoColor, Linux, LightBG.
2206 2206
2207 2207 Color scheme names are not case-sensitive."""
2208 2208
2209 2209 def color_switch_err(name):
2210 2210 warn('Error changing %s color schemes.\n%s' %
2211 2211 (name,sys.exc_info()[1]))
2212 2212
2213 2213
2214 2214 new_scheme = parameter_s.strip()
2215 2215 if not new_scheme:
2216 2216 print 'You must specify a color scheme.'
2217 2217 return
2218 2218 import IPython.rlineimpl as readline
2219 2219 if not readline.have_readline:
2220 2220 msg = """\
2221 2221 Proper color support under MS Windows requires the pyreadline library.
2222 2222 You can find it at:
2223 2223 http://ipython.scipy.org/moin/PyReadline/Intro
2224 2224 Gary's readline needs the ctypes module, from:
2225 2225 http://starship.python.net/crew/theller/ctypes
2226 2226 (Note that ctypes is already part of Python versions 2.5 and newer).
2227 2227
2228 2228 Defaulting color scheme to 'NoColor'"""
2229 2229 new_scheme = 'NoColor'
2230 2230 warn(msg)
2231 2231 # local shortcut
2232 2232 shell = self.shell
2233 2233
2234 2234 # Set prompt colors
2235 2235 try:
2236 2236 shell.outputcache.set_colors(new_scheme)
2237 2237 except:
2238 2238 color_switch_err('prompt')
2239 2239 else:
2240 2240 shell.rc.colors = \
2241 2241 shell.outputcache.color_table.active_scheme_name
2242 2242 # Set exception colors
2243 2243 try:
2244 2244 shell.InteractiveTB.set_colors(scheme = new_scheme)
2245 2245 shell.SyntaxTB.set_colors(scheme = new_scheme)
2246 2246 except:
2247 2247 color_switch_err('exception')
2248 2248
2249 2249 # threaded shells use a verbose traceback in sys.excepthook
2250 2250 if shell.isthreaded:
2251 2251 try:
2252 2252 shell.sys_excepthook.set_colors(scheme=new_scheme)
2253 2253 except:
2254 2254 color_switch_err('system exception handler')
2255 2255
2256 2256 # Set info (for 'object?') colors
2257 2257 if shell.rc.color_info:
2258 2258 try:
2259 2259 shell.inspector.set_active_scheme(new_scheme)
2260 2260 except:
2261 2261 color_switch_err('object inspector')
2262 2262 else:
2263 2263 shell.inspector.set_active_scheme('NoColor')
2264 2264
2265 2265 def magic_color_info(self,parameter_s = ''):
2266 2266 """Toggle color_info.
2267 2267
2268 2268 The color_info configuration parameter controls whether colors are
2269 2269 used for displaying object details (by things like %psource, %pfile or
2270 2270 the '?' system). This function toggles this value with each call.
2271 2271
2272 2272 Note that unless you have a fairly recent pager (less works better
2273 2273 than more) in your system, using colored object information displays
2274 2274 will not work properly. Test it and see."""
2275 2275
2276 2276 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2277 2277 self.magic_colors(self.shell.rc.colors)
2278 2278 print 'Object introspection functions have now coloring:',
2279 2279 print ['OFF','ON'][self.shell.rc.color_info]
2280 2280
2281 2281 def magic_Pprint(self, parameter_s=''):
2282 2282 """Toggle pretty printing on/off."""
2283 2283
2284 2284 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2285 2285 print 'Pretty printing has been turned', \
2286 2286 ['OFF','ON'][self.shell.rc.pprint]
2287 2287
2288 2288 def magic_exit(self, parameter_s=''):
2289 2289 """Exit IPython, confirming if configured to do so.
2290 2290
2291 2291 You can configure whether IPython asks for confirmation upon exit by
2292 2292 setting the confirm_exit flag in the ipythonrc file."""
2293 2293
2294 2294 self.shell.exit()
2295 2295
2296 2296 def magic_quit(self, parameter_s=''):
2297 2297 """Exit IPython, confirming if configured to do so (like %exit)"""
2298 2298
2299 2299 self.shell.exit()
2300 2300
2301 2301 def magic_Exit(self, parameter_s=''):
2302 2302 """Exit IPython without confirmation."""
2303 2303
2304 2304 self.shell.exit_now = True
2305 2305
2306 2306 def magic_Quit(self, parameter_s=''):
2307 2307 """Exit IPython without confirmation (like %Exit)."""
2308 2308
2309 2309 self.shell.exit_now = True
2310 2310
2311 2311 #......................................................................
2312 2312 # Functions to implement unix shell-type things
2313 2313
2314 2314 def magic_alias(self, parameter_s = ''):
2315 2315 """Define an alias for a system command.
2316 2316
2317 2317 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2318 2318
2319 2319 Then, typing 'alias_name params' will execute the system command 'cmd
2320 2320 params' (from your underlying operating system).
2321 2321
2322 2322 Aliases have lower precedence than magic functions and Python normal
2323 2323 variables, so if 'foo' is both a Python variable and an alias, the
2324 2324 alias can not be executed until 'del foo' removes the Python variable.
2325 2325
2326 2326 You can use the %l specifier in an alias definition to represent the
2327 2327 whole line when the alias is called. For example:
2328 2328
2329 2329 In [2]: alias all echo "Input in brackets: <%l>"\\
2330 2330 In [3]: all hello world\\
2331 2331 Input in brackets: <hello world>
2332 2332
2333 2333 You can also define aliases with parameters using %s specifiers (one
2334 2334 per parameter):
2335 2335
2336 2336 In [1]: alias parts echo first %s second %s\\
2337 2337 In [2]: %parts A B\\
2338 2338 first A second B\\
2339 2339 In [3]: %parts A\\
2340 2340 Incorrect number of arguments: 2 expected.\\
2341 2341 parts is an alias to: 'echo first %s second %s'
2342 2342
2343 2343 Note that %l and %s are mutually exclusive. You can only use one or
2344 2344 the other in your aliases.
2345 2345
2346 2346 Aliases expand Python variables just like system calls using ! or !!
2347 2347 do: all expressions prefixed with '$' get expanded. For details of
2348 2348 the semantic rules, see PEP-215:
2349 2349 http://www.python.org/peps/pep-0215.html. This is the library used by
2350 2350 IPython for variable expansion. If you want to access a true shell
2351 2351 variable, an extra $ is necessary to prevent its expansion by IPython:
2352 2352
2353 2353 In [6]: alias show echo\\
2354 2354 In [7]: PATH='A Python string'\\
2355 2355 In [8]: show $PATH\\
2356 2356 A Python string\\
2357 2357 In [9]: show $$PATH\\
2358 2358 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2359 2359
2360 2360 You can use the alias facility to acess all of $PATH. See the %rehash
2361 2361 and %rehashx functions, which automatically create aliases for the
2362 2362 contents of your $PATH.
2363 2363
2364 2364 If called with no parameters, %alias prints the current alias table."""
2365 2365
2366 2366 par = parameter_s.strip()
2367 2367 if not par:
2368 2368 if self.shell.rc.automagic:
2369 2369 prechar = ''
2370 2370 else:
2371 2371 prechar = self.shell.ESC_MAGIC
2372 2372 #print 'Alias\t\tSystem Command\n'+'-'*30
2373 2373 atab = self.shell.alias_table
2374 2374 aliases = atab.keys()
2375 2375 aliases.sort()
2376 2376 res = []
2377 2377 for alias in aliases:
2378 2378 res.append((alias, atab[alias][1]))
2379 2379 print "Total number of aliases:",len(aliases)
2380 2380 return res
2381 2381 try:
2382 2382 alias,cmd = par.split(None,1)
2383 2383 except:
2384 2384 print OInspect.getdoc(self.magic_alias)
2385 2385 else:
2386 2386 nargs = cmd.count('%s')
2387 2387 if nargs>0 and cmd.find('%l')>=0:
2388 2388 error('The %s and %l specifiers are mutually exclusive '
2389 2389 'in alias definitions.')
2390 2390 else: # all looks OK
2391 2391 self.shell.alias_table[alias] = (nargs,cmd)
2392 2392 self.shell.alias_table_validate(verbose=0)
2393 2393 # end magic_alias
2394 2394
2395 2395 def magic_unalias(self, parameter_s = ''):
2396 2396 """Remove an alias"""
2397 2397
2398 2398 aname = parameter_s.strip()
2399 2399 if aname in self.shell.alias_table:
2400 2400 del self.shell.alias_table[aname]
2401 2401
2402 2402 def magic_rehash(self, parameter_s = ''):
2403 2403 """Update the alias table with all entries in $PATH.
2404 2404
2405 2405 This version does no checks on execute permissions or whether the
2406 2406 contents of $PATH are truly files (instead of directories or something
2407 2407 else). For such a safer (but slower) version, use %rehashx."""
2408 2408
2409 2409 # This function (and rehashx) manipulate the alias_table directly
2410 2410 # rather than calling magic_alias, for speed reasons. A rehash on a
2411 2411 # typical Linux box involves several thousand entries, so efficiency
2412 2412 # here is a top concern.
2413 2413
2414 2414 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2415 2415 alias_table = self.shell.alias_table
2416 2416 for pdir in path:
2417 2417 for ff in os.listdir(pdir):
2418 2418 # each entry in the alias table must be (N,name), where
2419 2419 # N is the number of positional arguments of the alias.
2420 2420 alias_table[ff] = (0,ff)
2421 2421 # Make sure the alias table doesn't contain keywords or builtins
2422 2422 self.shell.alias_table_validate()
2423 2423 # Call again init_auto_alias() so we get 'rm -i' and other modified
2424 2424 # aliases since %rehash will probably clobber them
2425 2425 self.shell.init_auto_alias()
2426 2426
2427 2427 def magic_rehashx(self, parameter_s = ''):
2428 2428 """Update the alias table with all executable files in $PATH.
2429 2429
2430 2430 This version explicitly checks that every entry in $PATH is a file
2431 2431 with execute access (os.X_OK), so it is much slower than %rehash.
2432 2432
2433 2433 Under Windows, it checks executability as a match agains a
2434 2434 '|'-separated string of extensions, stored in the IPython config
2435 2435 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2436 2436
2437 2437 path = [os.path.abspath(os.path.expanduser(p)) for p in
2438 2438 os.environ['PATH'].split(os.pathsep)]
2439 2439 path = filter(os.path.isdir,path)
2440 2440
2441 2441 alias_table = self.shell.alias_table
2442 2442 syscmdlist = []
2443 2443 if os.name == 'posix':
2444 2444 isexec = lambda fname:os.path.isfile(fname) and \
2445 2445 os.access(fname,os.X_OK)
2446 2446 else:
2447 2447
2448 2448 try:
2449 2449 winext = os.environ['pathext'].replace(';','|').replace('.','')
2450 2450 except KeyError:
2451 2451 winext = 'exe|com|bat'
2452 2452
2453 2453 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2454 2454 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2455 2455 savedir = os.getcwd()
2456 2456 try:
2457 2457 # write the whole loop for posix/Windows so we don't have an if in
2458 2458 # the innermost part
2459 2459 if os.name == 'posix':
2460 2460 for pdir in path:
2461 2461 os.chdir(pdir)
2462 2462 for ff in os.listdir(pdir):
2463 2463 if isexec(ff) and ff not in self.shell.no_alias:
2464 2464 # each entry in the alias table must be (N,name),
2465 2465 # where N is the number of positional arguments of the
2466 2466 # alias.
2467 2467 alias_table[ff] = (0,ff)
2468 2468 syscmdlist.append(ff)
2469 2469 else:
2470 2470 for pdir in path:
2471 2471 os.chdir(pdir)
2472 2472 for ff in os.listdir(pdir):
2473 2473 if isexec(ff) and os.path.splitext(ff)[0] not in self.shell.no_alias:
2474 2474 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2475 2475 syscmdlist.append(ff)
2476 2476 # Make sure the alias table doesn't contain keywords or builtins
2477 2477 self.shell.alias_table_validate()
2478 2478 # Call again init_auto_alias() so we get 'rm -i' and other
2479 2479 # modified aliases since %rehashx will probably clobber them
2480 2480 self.shell.init_auto_alias()
2481 2481 db = self.getapi().db
2482 2482 db['syscmdlist'] = syscmdlist
2483 2483 finally:
2484 2484 os.chdir(savedir)
2485 2485
2486 2486 def magic_pwd(self, parameter_s = ''):
2487 2487 """Return the current working directory path."""
2488 2488 return os.getcwd()
2489 2489
2490 2490 def magic_cd(self, parameter_s=''):
2491 2491 """Change the current working directory.
2492 2492
2493 2493 This command automatically maintains an internal list of directories
2494 2494 you visit during your IPython session, in the variable _dh. The
2495 2495 command %dhist shows this history nicely formatted.
2496 2496
2497 2497 Usage:
2498 2498
2499 2499 cd 'dir': changes to directory 'dir'.
2500 2500
2501 2501 cd -: changes to the last visited directory.
2502 2502
2503 2503 cd -<n>: changes to the n-th directory in the directory history.
2504 2504
2505 2505 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2506 2506 (note: cd <bookmark_name> is enough if there is no
2507 2507 directory <bookmark_name>, but a bookmark with the name exists.)
2508 2508
2509 2509 Options:
2510 2510
2511 2511 -q: quiet. Do not print the working directory after the cd command is
2512 2512 executed. By default IPython's cd command does print this directory,
2513 2513 since the default prompts do not display path information.
2514 2514
2515 2515 Note that !cd doesn't work for this purpose because the shell where
2516 2516 !command runs is immediately discarded after executing 'command'."""
2517 2517
2518 2518 parameter_s = parameter_s.strip()
2519 2519 #bkms = self.shell.persist.get("bookmarks",{})
2520 2520
2521 2521 numcd = re.match(r'(-)(\d+)$',parameter_s)
2522 2522 # jump in directory history by number
2523 2523 if numcd:
2524 2524 nn = int(numcd.group(2))
2525 2525 try:
2526 2526 ps = self.shell.user_ns['_dh'][nn]
2527 2527 except IndexError:
2528 2528 print 'The requested directory does not exist in history.'
2529 2529 return
2530 2530 else:
2531 2531 opts = {}
2532 2532 else:
2533 2533 #turn all non-space-escaping backslashes to slashes,
2534 2534 # for c:\windows\directory\names\
2535 2535 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2536 2536 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2537 2537 # jump to previous
2538 2538 if ps == '-':
2539 2539 try:
2540 2540 ps = self.shell.user_ns['_dh'][-2]
2541 2541 except IndexError:
2542 2542 print 'No previous directory to change to.'
2543 2543 return
2544 2544 # jump to bookmark if needed
2545 2545 else:
2546 2546 if not os.path.isdir(ps) or opts.has_key('b'):
2547 2547 bkms = self.db.get('bookmarks', {})
2548 2548
2549 2549 if bkms.has_key(ps):
2550 2550 target = bkms[ps]
2551 2551 print '(bookmark:%s) -> %s' % (ps,target)
2552 2552 ps = target
2553 2553 else:
2554 2554 if opts.has_key('b'):
2555 2555 error("Bookmark '%s' not found. "
2556 2556 "Use '%%bookmark -l' to see your bookmarks." % ps)
2557 2557 return
2558 2558
2559 2559 # at this point ps should point to the target dir
2560 2560 if ps:
2561 2561 try:
2562 2562 os.chdir(os.path.expanduser(ps))
2563 2563 ttitle = ("IPy:" + (
2564 2564 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2565 2565 platutils.set_term_title(ttitle)
2566 2566 except OSError:
2567 2567 print sys.exc_info()[1]
2568 2568 else:
2569 2569 self.shell.user_ns['_dh'].append(os.getcwd())
2570 2570 else:
2571 2571 os.chdir(self.shell.home_dir)
2572 2572 platutils.set_term_title("IPy:~")
2573 2573 self.shell.user_ns['_dh'].append(os.getcwd())
2574 2574 if not 'q' in opts:
2575 2575 print self.shell.user_ns['_dh'][-1]
2576 2576
2577 2577 def magic_dhist(self, parameter_s=''):
2578 2578 """Print your history of visited directories.
2579 2579
2580 2580 %dhist -> print full history\\
2581 2581 %dhist n -> print last n entries only\\
2582 2582 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2583 2583
2584 2584 This history is automatically maintained by the %cd command, and
2585 2585 always available as the global list variable _dh. You can use %cd -<n>
2586 2586 to go to directory number <n>."""
2587 2587
2588 2588 dh = self.shell.user_ns['_dh']
2589 2589 if parameter_s:
2590 2590 try:
2591 2591 args = map(int,parameter_s.split())
2592 2592 except:
2593 2593 self.arg_err(Magic.magic_dhist)
2594 2594 return
2595 2595 if len(args) == 1:
2596 2596 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2597 2597 elif len(args) == 2:
2598 2598 ini,fin = args
2599 2599 else:
2600 2600 self.arg_err(Magic.magic_dhist)
2601 2601 return
2602 2602 else:
2603 2603 ini,fin = 0,len(dh)
2604 2604 nlprint(dh,
2605 2605 header = 'Directory history (kept in _dh)',
2606 2606 start=ini,stop=fin)
2607 2607
2608 2608 def magic_env(self, parameter_s=''):
2609 2609 """List environment variables."""
2610 2610
2611 2611 return os.environ.data
2612 2612
2613 2613 def magic_pushd(self, parameter_s=''):
2614 2614 """Place the current dir on stack and change directory.
2615 2615
2616 2616 Usage:\\
2617 2617 %pushd ['dirname']
2618 2618
2619 2619 %pushd with no arguments does a %pushd to your home directory.
2620 2620 """
2621 2621 if parameter_s == '': parameter_s = '~'
2622 2622 dir_s = self.shell.dir_stack
2623 2623 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2624 2624 os.path.expanduser(self.shell.dir_stack[0]):
2625 2625 try:
2626 2626 self.magic_cd(parameter_s)
2627 2627 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2628 2628 self.magic_dirs()
2629 2629 except:
2630 2630 print 'Invalid directory'
2631 2631 else:
2632 2632 print 'You are already there!'
2633 2633
2634 2634 def magic_popd(self, parameter_s=''):
2635 2635 """Change to directory popped off the top of the stack.
2636 2636 """
2637 2637 if len (self.shell.dir_stack) > 1:
2638 2638 self.shell.dir_stack.pop(0)
2639 2639 self.magic_cd(self.shell.dir_stack[0])
2640 2640 print self.shell.dir_stack[0]
2641 2641 else:
2642 2642 print "You can't remove the starting directory from the stack:",\
2643 2643 self.shell.dir_stack
2644 2644
2645 2645 def magic_dirs(self, parameter_s=''):
2646 2646 """Return the current directory stack."""
2647 2647
2648 2648 return self.shell.dir_stack[:]
2649 2649
2650 2650 def magic_sc(self, parameter_s=''):
2651 2651 """Shell capture - execute a shell command and capture its output.
2652 2652
2653 2653 DEPRECATED. Suboptimal, retained for backwards compatibility.
2654 2654
2655 2655 You should use the form 'var = !command' instead. Example:
2656 2656
2657 2657 "%sc -l myfiles = ls ~" should now be written as
2658 2658
2659 2659 "myfiles = !ls ~"
2660 2660
2661 2661 myfiles.s, myfiles.l and myfiles.n still apply as documented
2662 2662 below.
2663 2663
2664 2664 --
2665 2665 %sc [options] varname=command
2666 2666
2667 2667 IPython will run the given command using commands.getoutput(), and
2668 2668 will then update the user's interactive namespace with a variable
2669 2669 called varname, containing the value of the call. Your command can
2670 2670 contain shell wildcards, pipes, etc.
2671 2671
2672 2672 The '=' sign in the syntax is mandatory, and the variable name you
2673 2673 supply must follow Python's standard conventions for valid names.
2674 2674
2675 2675 (A special format without variable name exists for internal use)
2676 2676
2677 2677 Options:
2678 2678
2679 2679 -l: list output. Split the output on newlines into a list before
2680 2680 assigning it to the given variable. By default the output is stored
2681 2681 as a single string.
2682 2682
2683 2683 -v: verbose. Print the contents of the variable.
2684 2684
2685 2685 In most cases you should not need to split as a list, because the
2686 2686 returned value is a special type of string which can automatically
2687 2687 provide its contents either as a list (split on newlines) or as a
2688 2688 space-separated string. These are convenient, respectively, either
2689 2689 for sequential processing or to be passed to a shell command.
2690 2690
2691 2691 For example:
2692 2692
2693 2693 # Capture into variable a
2694 2694 In [9]: sc a=ls *py
2695 2695
2696 2696 # a is a string with embedded newlines
2697 2697 In [10]: a
2698 2698 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2699 2699
2700 2700 # which can be seen as a list:
2701 2701 In [11]: a.l
2702 2702 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2703 2703
2704 2704 # or as a whitespace-separated string:
2705 2705 In [12]: a.s
2706 2706 Out[12]: 'setup.py win32_manual_post_install.py'
2707 2707
2708 2708 # a.s is useful to pass as a single command line:
2709 2709 In [13]: !wc -l $a.s
2710 2710 146 setup.py
2711 2711 130 win32_manual_post_install.py
2712 2712 276 total
2713 2713
2714 2714 # while the list form is useful to loop over:
2715 2715 In [14]: for f in a.l:
2716 2716 ....: !wc -l $f
2717 2717 ....:
2718 2718 146 setup.py
2719 2719 130 win32_manual_post_install.py
2720 2720
2721 2721 Similiarly, the lists returned by the -l option are also special, in
2722 2722 the sense that you can equally invoke the .s attribute on them to
2723 2723 automatically get a whitespace-separated string from their contents:
2724 2724
2725 2725 In [1]: sc -l b=ls *py
2726 2726
2727 2727 In [2]: b
2728 2728 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2729 2729
2730 2730 In [3]: b.s
2731 2731 Out[3]: 'setup.py win32_manual_post_install.py'
2732 2732
2733 2733 In summary, both the lists and strings used for ouptut capture have
2734 2734 the following special attributes:
2735 2735
2736 2736 .l (or .list) : value as list.
2737 2737 .n (or .nlstr): value as newline-separated string.
2738 2738 .s (or .spstr): value as space-separated string.
2739 2739 """
2740 2740
2741 2741 opts,args = self.parse_options(parameter_s,'lv')
2742 2742 # Try to get a variable name and command to run
2743 2743 try:
2744 2744 # the variable name must be obtained from the parse_options
2745 2745 # output, which uses shlex.split to strip options out.
2746 2746 var,_ = args.split('=',1)
2747 2747 var = var.strip()
2748 2748 # But the the command has to be extracted from the original input
2749 2749 # parameter_s, not on what parse_options returns, to avoid the
2750 2750 # quote stripping which shlex.split performs on it.
2751 2751 _,cmd = parameter_s.split('=',1)
2752 2752 except ValueError:
2753 2753 var,cmd = '',''
2754 2754 # If all looks ok, proceed
2755 2755 out,err = self.shell.getoutputerror(cmd)
2756 2756 if err:
2757 2757 print >> Term.cerr,err
2758 2758 if opts.has_key('l'):
2759 2759 out = SList(out.split('\n'))
2760 2760 else:
2761 2761 out = LSString(out)
2762 2762 if opts.has_key('v'):
2763 2763 print '%s ==\n%s' % (var,pformat(out))
2764 2764 if var:
2765 2765 self.shell.user_ns.update({var:out})
2766 2766 else:
2767 2767 return out
2768 2768
2769 2769 def magic_sx(self, parameter_s=''):
2770 2770 """Shell execute - run a shell command and capture its output.
2771 2771
2772 2772 %sx command
2773 2773
2774 2774 IPython will run the given command using commands.getoutput(), and
2775 2775 return the result formatted as a list (split on '\\n'). Since the
2776 2776 output is _returned_, it will be stored in ipython's regular output
2777 2777 cache Out[N] and in the '_N' automatic variables.
2778 2778
2779 2779 Notes:
2780 2780
2781 2781 1) If an input line begins with '!!', then %sx is automatically
2782 2782 invoked. That is, while:
2783 2783 !ls
2784 2784 causes ipython to simply issue system('ls'), typing
2785 2785 !!ls
2786 2786 is a shorthand equivalent to:
2787 2787 %sx ls
2788 2788
2789 2789 2) %sx differs from %sc in that %sx automatically splits into a list,
2790 2790 like '%sc -l'. The reason for this is to make it as easy as possible
2791 2791 to process line-oriented shell output via further python commands.
2792 2792 %sc is meant to provide much finer control, but requires more
2793 2793 typing.
2794 2794
2795 2795 3) Just like %sc -l, this is a list with special attributes:
2796 2796
2797 2797 .l (or .list) : value as list.
2798 2798 .n (or .nlstr): value as newline-separated string.
2799 2799 .s (or .spstr): value as whitespace-separated string.
2800 2800
2801 2801 This is very useful when trying to use such lists as arguments to
2802 2802 system commands."""
2803 2803
2804 2804 if parameter_s:
2805 2805 out,err = self.shell.getoutputerror(parameter_s)
2806 2806 if err:
2807 2807 print >> Term.cerr,err
2808 2808 return SList(out.split('\n'))
2809 2809
2810 2810 def magic_bg(self, parameter_s=''):
2811 2811 """Run a job in the background, in a separate thread.
2812 2812
2813 2813 For example,
2814 2814
2815 2815 %bg myfunc(x,y,z=1)
2816 2816
2817 2817 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2818 2818 execution starts, a message will be printed indicating the job
2819 2819 number. If your job number is 5, you can use
2820 2820
2821 2821 myvar = jobs.result(5) or myvar = jobs[5].result
2822 2822
2823 2823 to assign this result to variable 'myvar'.
2824 2824
2825 2825 IPython has a job manager, accessible via the 'jobs' object. You can
2826 2826 type jobs? to get more information about it, and use jobs.<TAB> to see
2827 2827 its attributes. All attributes not starting with an underscore are
2828 2828 meant for public use.
2829 2829
2830 2830 In particular, look at the jobs.new() method, which is used to create
2831 2831 new jobs. This magic %bg function is just a convenience wrapper
2832 2832 around jobs.new(), for expression-based jobs. If you want to create a
2833 2833 new job with an explicit function object and arguments, you must call
2834 2834 jobs.new() directly.
2835 2835
2836 2836 The jobs.new docstring also describes in detail several important
2837 2837 caveats associated with a thread-based model for background job
2838 2838 execution. Type jobs.new? for details.
2839 2839
2840 2840 You can check the status of all jobs with jobs.status().
2841 2841
2842 2842 The jobs variable is set by IPython into the Python builtin namespace.
2843 2843 If you ever declare a variable named 'jobs', you will shadow this
2844 2844 name. You can either delete your global jobs variable to regain
2845 2845 access to the job manager, or make a new name and assign it manually
2846 2846 to the manager (stored in IPython's namespace). For example, to
2847 2847 assign the job manager to the Jobs name, use:
2848 2848
2849 2849 Jobs = __builtins__.jobs"""
2850 2850
2851 2851 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2852 2852
2853 2853
2854 2854 def magic_bookmark(self, parameter_s=''):
2855 2855 """Manage IPython's bookmark system.
2856 2856
2857 2857 %bookmark <name> - set bookmark to current dir
2858 2858 %bookmark <name> <dir> - set bookmark to <dir>
2859 2859 %bookmark -l - list all bookmarks
2860 2860 %bookmark -d <name> - remove bookmark
2861 2861 %bookmark -r - remove all bookmarks
2862 2862
2863 2863 You can later on access a bookmarked folder with:
2864 2864 %cd -b <name>
2865 2865 or simply '%cd <name>' if there is no directory called <name> AND
2866 2866 there is such a bookmark defined.
2867 2867
2868 2868 Your bookmarks persist through IPython sessions, but they are
2869 2869 associated with each profile."""
2870 2870
2871 2871 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2872 2872 if len(args) > 2:
2873 2873 error('You can only give at most two arguments')
2874 2874 return
2875 2875
2876 2876 bkms = self.db.get('bookmarks',{})
2877 2877
2878 2878 if opts.has_key('d'):
2879 2879 try:
2880 2880 todel = args[0]
2881 2881 except IndexError:
2882 2882 error('You must provide a bookmark to delete')
2883 2883 else:
2884 2884 try:
2885 2885 del bkms[todel]
2886 2886 except:
2887 2887 error("Can't delete bookmark '%s'" % todel)
2888 2888 elif opts.has_key('r'):
2889 2889 bkms = {}
2890 2890 elif opts.has_key('l'):
2891 2891 bks = bkms.keys()
2892 2892 bks.sort()
2893 2893 if bks:
2894 2894 size = max(map(len,bks))
2895 2895 else:
2896 2896 size = 0
2897 2897 fmt = '%-'+str(size)+'s -> %s'
2898 2898 print 'Current bookmarks:'
2899 2899 for bk in bks:
2900 2900 print fmt % (bk,bkms[bk])
2901 2901 else:
2902 2902 if not args:
2903 2903 error("You must specify the bookmark name")
2904 2904 elif len(args)==1:
2905 2905 bkms[args[0]] = os.getcwd()
2906 2906 elif len(args)==2:
2907 2907 bkms[args[0]] = args[1]
2908 2908 self.db['bookmarks'] = bkms
2909 2909
2910 2910 def magic_pycat(self, parameter_s=''):
2911 2911 """Show a syntax-highlighted file through a pager.
2912 2912
2913 2913 This magic is similar to the cat utility, but it will assume the file
2914 2914 to be Python source and will show it with syntax highlighting. """
2915 2915
2916 2916 try:
2917 2917 filename = get_py_filename(parameter_s)
2918 2918 cont = file_read(filename)
2919 2919 except IOError:
2920 2920 try:
2921 2921 cont = eval(parameter_s,self.user_ns)
2922 2922 except NameError:
2923 2923 cont = None
2924 2924 if cont is None:
2925 2925 print "Error: no such file or variable"
2926 2926 return
2927 2927
2928 2928 page(self.shell.pycolorize(cont),
2929 2929 screen_lines=self.shell.rc.screen_length)
2930 2930
2931 2931 def magic_cpaste(self, parameter_s=''):
2932 2932 """Allows you to paste & execute a pre-formatted code block from clipboard
2933 2933
2934 2934 You must terminate the block with '--' (two minus-signs) alone on the
2935 2935 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2936 2936 is the new sentinel for this operation)
2937 2937
2938 2938 The block is dedented prior to execution to enable execution of
2939 2939 method definitions. '>' characters at the beginning of a line is
2940 2940 ignored, to allow pasting directly from e-mails. The executed block
2941 2941 is also assigned to variable named 'pasted_block' for later editing
2942 2942 with '%edit pasted_block'.
2943 2943
2944 2944 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2945 2945 This assigns the pasted block to variable 'foo' as string, without
2946 2946 dedenting or executing it.
2947 2947
2948 2948 Do not be alarmed by garbled output on Windows (it's a readline bug).
2949 2949 Just press enter and type -- (and press enter again) and the block
2950 2950 will be what was just pasted.
2951 2951
2952 2952 IPython statements (magics, shell escapes) are not supported (yet).
2953 2953 """
2954 2954 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2955 2955 par = args.strip()
2956 2956 sentinel = opts.get('s','--')
2957 2957
2958 2958 from IPython import iplib
2959 2959 lines = []
2960 2960 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2961 2961 while 1:
2962 2962 l = iplib.raw_input_original(':')
2963 2963 if l ==sentinel:
2964 2964 break
2965 2965 lines.append(l.lstrip('>'))
2966 2966 block = "\n".join(lines) + '\n'
2967 2967 #print "block:\n",block
2968 2968 if not par:
2969 2969 b = textwrap.dedent(block)
2970 2970 exec b in self.user_ns
2971 2971 self.user_ns['pasted_block'] = b
2972 2972 else:
2973 2973 self.user_ns[par] = block
2974 2974 print "Block assigned to '%s'" % par
2975 2975
2976 2976 def magic_quickref(self,arg):
2977 2977 """ Show a quick reference sheet """
2978 2978 import IPython.usage
2979 2979 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2980 2980
2981 2981 page(qr)
2982 2982
2983 2983 def magic_upgrade(self,arg):
2984 2984 """ Upgrade your IPython installation
2985 2985
2986 2986 This will copy the config files that don't yet exist in your
2987 2987 ipython dir from the system config dir. Use this after upgrading
2988 2988 IPython if you don't wish to delete your .ipython dir.
2989 2989
2990 2990 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2991 2991 new users)
2992 2992
2993 2993 """
2994 2994 ip = self.getapi()
2995 2995 ipinstallation = path(IPython.__file__).dirname()
2996 2996 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
2997 2997 src_config = ipinstallation / 'UserConfig'
2998 2998 userdir = path(ip.options.ipythondir)
2999 2999 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3000 3000 print ">",cmd
3001 3001 shell(cmd)
3002 3002 if arg == '-nolegacy':
3003 3003 legacy = userdir.files('ipythonrc*')
3004 3004 print "Nuking legacy files:",legacy
3005 3005
3006 3006 [p.remove() for p in legacy]
3007 3007 suffix = (sys.platform == 'win32' and '.ini' or '')
3008 3008 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3009 3009
3010 3010
3011 3011 # end Magic
@@ -1,5775 +1,5780
1 2006-10-14 Ville Vainio <vivainio@gmail.com>
2
3 * Magic.py, ipython.el: applied first part of Rocky Bernstein's
4 patch set for pydb integration.
5
1 6 2006-10-12 Ville Vainio <vivainio@gmail.com>
2 7
3 8 * jobctrl.py: Add new "jobctrl" extension for spawning background
4 9 processes with "&find /". 'import jobctrl' to try it out. Requires
5 10 'subprocess' module, standard in python 2.4+.
6 11
7 12 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
8 13 so if foo -> bar and bar -> baz, then foo -> baz.
9 14
10 15 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
11 16
12 17 * IPython/Magic.py (Magic.parse_options): add a new posix option
13 18 to allow parsing of input args in magics that doesn't strip quotes
14 19 (if posix=False). This also closes %timeit bug reported by
15 20 Stefan.
16 21
17 22 2006-10-03 Ville Vainio <vivainio@gmail.com>
18 23
19 24 * iplib.py (raw_input, interact): Return ValueError catching for
20 25 raw_input. Fixes infinite loop for sys.stdin.close() or
21 26 sys.stdout.close().
22 27
23 28 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
24 29
25 30 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
26 31 to help in handling doctests. irunner is now pretty useful for
27 32 running standalone scripts and simulate a full interactive session
28 33 in a format that can be then pasted as a doctest.
29 34
30 35 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
31 36 on top of the default (useless) ones. This also fixes the nasty
32 37 way in which 2.5's Quitter() exits (reverted [1785]).
33 38
34 39 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
35 40 2.5.
36 41
37 42 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
38 43 color scheme is updated as well when color scheme is changed
39 44 interactively.
40 45
41 46 2006-09-27 Ville Vainio <vivainio@gmail.com>
42 47
43 48 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
44 49 infinite loop and just exit. It's a hack, but will do for a while.
45 50
46 51 2006-08-25 Walter Doerwald <walter@livinglogic.de>
47 52
48 53 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
49 54 the constructor, this makes it possible to get a list of only directories
50 55 or only files.
51 56
52 57 2006-08-12 Ville Vainio <vivainio@gmail.com>
53 58
54 59 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
55 60 they broke unittest
56 61
57 62 2006-08-11 Ville Vainio <vivainio@gmail.com>
58 63
59 64 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
60 65 by resolving issue properly, i.e. by inheriting FakeModule
61 66 from types.ModuleType. Pickling ipython interactive data
62 67 should still work as usual (testing appreciated).
63 68
64 69 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
65 70
66 71 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
67 72 running under python 2.3 with code from 2.4 to fix a bug with
68 73 help(). Reported by the Debian maintainers, Norbert Tretkowski
69 74 <norbert-AT-tretkowski.de> and Alexandre Fayolle
70 75 <afayolle-AT-debian.org>.
71 76
72 77 2006-08-04 Walter Doerwald <walter@livinglogic.de>
73 78
74 79 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
75 80 (which was displaying "quit" twice).
76 81
77 82 2006-07-28 Walter Doerwald <walter@livinglogic.de>
78 83
79 84 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
80 85 the mode argument).
81 86
82 87 2006-07-27 Walter Doerwald <walter@livinglogic.de>
83 88
84 89 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
85 90 not running under IPython.
86 91
87 92 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
88 93 and make it iterable (iterating over the attribute itself). Add two new
89 94 magic strings for __xattrs__(): If the string starts with "-", the attribute
90 95 will not be displayed in ibrowse's detail view (but it can still be
91 96 iterated over). This makes it possible to add attributes that are large
92 97 lists or generator methods to the detail view. Replace magic attribute names
93 98 and _attrname() and _getattr() with "descriptors": For each type of magic
94 99 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
95 100 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
96 101 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
97 102 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
98 103 are still supported.
99 104
100 105 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
101 106 fails in ibrowse.fetch(), the exception object is added as the last item
102 107 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
103 108 a generator throws an exception midway through execution.
104 109
105 110 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
106 111 encoding into methods.
107 112
108 113 2006-07-26 Ville Vainio <vivainio@gmail.com>
109 114
110 115 * iplib.py: history now stores multiline input as single
111 116 history entries. Patch by Jorgen Cederlof.
112 117
113 118 2006-07-18 Walter Doerwald <walter@livinglogic.de>
114 119
115 120 * IPython/Extensions/ibrowse.py: Make cursor visible over
116 121 non existing attributes.
117 122
118 123 2006-07-14 Walter Doerwald <walter@livinglogic.de>
119 124
120 125 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
121 126 error output of the running command doesn't mess up the screen.
122 127
123 128 2006-07-13 Walter Doerwald <walter@livinglogic.de>
124 129
125 130 * IPython/Extensions/ipipe.py (isort): Make isort usable without
126 131 argument. This sorts the items themselves.
127 132
128 133 2006-07-12 Walter Doerwald <walter@livinglogic.de>
129 134
130 135 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
131 136 Compile expression strings into code objects. This should speed
132 137 up ifilter and friends somewhat.
133 138
134 139 2006-07-08 Ville Vainio <vivainio@gmail.com>
135 140
136 141 * Magic.py: %cpaste now strips > from the beginning of lines
137 142 to ease pasting quoted code from emails. Contributed by
138 143 Stefan van der Walt.
139 144
140 145 2006-06-29 Ville Vainio <vivainio@gmail.com>
141 146
142 147 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
143 148 mode, patch contributed by Darren Dale. NEEDS TESTING!
144 149
145 150 2006-06-28 Walter Doerwald <walter@livinglogic.de>
146 151
147 152 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
148 153 a blue background. Fix fetching new display rows when the browser
149 154 scrolls more than a screenful (e.g. by using the goto command).
150 155
151 156 2006-06-27 Ville Vainio <vivainio@gmail.com>
152 157
153 158 * Magic.py (_inspect, _ofind) Apply David Huard's
154 159 patch for displaying the correct docstring for 'property'
155 160 attributes.
156 161
157 162 2006-06-23 Walter Doerwald <walter@livinglogic.de>
158 163
159 164 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
160 165 commands into the methods implementing them.
161 166
162 167 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
163 168
164 169 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
165 170 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
166 171 autoindent support was authored by Jin Liu.
167 172
168 173 2006-06-22 Walter Doerwald <walter@livinglogic.de>
169 174
170 175 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
171 176 for keymaps with a custom class that simplifies handling.
172 177
173 178 2006-06-19 Walter Doerwald <walter@livinglogic.de>
174 179
175 180 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
176 181 resizing. This requires Python 2.5 to work.
177 182
178 183 2006-06-16 Walter Doerwald <walter@livinglogic.de>
179 184
180 185 * IPython/Extensions/ibrowse.py: Add two new commands to
181 186 ibrowse: "hideattr" (mapped to "h") hides the attribute under
182 187 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
183 188 attributes again. Remapped the help command to "?". Display
184 189 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
185 190 as keys for the "home" and "end" commands. Add three new commands
186 191 to the input mode for "find" and friends: "delend" (CTRL-K)
187 192 deletes to the end of line. "incsearchup" searches upwards in the
188 193 command history for an input that starts with the text before the cursor.
189 194 "incsearchdown" does the same downwards. Removed a bogus mapping of
190 195 the x key to "delete".
191 196
192 197 2006-06-15 Ville Vainio <vivainio@gmail.com>
193 198
194 199 * iplib.py, hooks.py: Added new generate_prompt hook that can be
195 200 used to create prompts dynamically, instead of the "old" way of
196 201 assigning "magic" strings to prompt_in1 and prompt_in2. The old
197 202 way still works (it's invoked by the default hook), of course.
198 203
199 204 * Prompts.py: added generate_output_prompt hook for altering output
200 205 prompt
201 206
202 207 * Release.py: Changed version string to 0.7.3.svn.
203 208
204 209 2006-06-15 Walter Doerwald <walter@livinglogic.de>
205 210
206 211 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
207 212 the call to fetch() always tries to fetch enough data for at least one
208 213 full screen. This makes it possible to simply call moveto(0,0,True) in
209 214 the constructor. Fix typos and removed the obsolete goto attribute.
210 215
211 216 2006-06-12 Ville Vainio <vivainio@gmail.com>
212 217
213 218 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
214 219 allowing $variable interpolation within multiline statements,
215 220 though so far only with "sh" profile for a testing period.
216 221 The patch also enables splitting long commands with \ but it
217 222 doesn't work properly yet.
218 223
219 224 2006-06-12 Walter Doerwald <walter@livinglogic.de>
220 225
221 226 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
222 227 input history and the position of the cursor in the input history for
223 228 the find, findbackwards and goto command.
224 229
225 230 2006-06-10 Walter Doerwald <walter@livinglogic.de>
226 231
227 232 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
228 233 implements the basic functionality of browser commands that require
229 234 input. Reimplement the goto, find and findbackwards commands as
230 235 subclasses of _CommandInput. Add an input history and keymaps to those
231 236 commands. Add "\r" as a keyboard shortcut for the enterdefault and
232 237 execute commands.
233 238
234 239 2006-06-07 Ville Vainio <vivainio@gmail.com>
235 240
236 241 * iplib.py: ipython mybatch.ipy exits ipython immediately after
237 242 running the batch files instead of leaving the session open.
238 243
239 244 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
240 245
241 246 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
242 247 the original fix was incomplete. Patch submitted by W. Maier.
243 248
244 249 2006-06-07 Ville Vainio <vivainio@gmail.com>
245 250
246 251 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
247 252 Confirmation prompts can be supressed by 'quiet' option.
248 253 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
249 254
250 255 2006-06-06 *** Released version 0.7.2
251 256
252 257 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
253 258
254 259 * IPython/Release.py (version): Made 0.7.2 final for release.
255 260 Repo tagged and release cut.
256 261
257 262 2006-06-05 Ville Vainio <vivainio@gmail.com>
258 263
259 264 * Magic.py (magic_rehashx): Honor no_alias list earlier in
260 265 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
261 266
262 267 * upgrade_dir.py: try import 'path' module a bit harder
263 268 (for %upgrade)
264 269
265 270 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
266 271
267 272 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
268 273 instead of looping 20 times.
269 274
270 275 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
271 276 correctly at initialization time. Bug reported by Krishna Mohan
272 277 Gundu <gkmohan-AT-gmail.com> on the user list.
273 278
274 279 * IPython/Release.py (version): Mark 0.7.2 version to start
275 280 testing for release on 06/06.
276 281
277 282 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
278 283
279 284 * scripts/irunner: thin script interface so users don't have to
280 285 find the module and call it as an executable, since modules rarely
281 286 live in people's PATH.
282 287
283 288 * IPython/irunner.py (InteractiveRunner.__init__): added
284 289 delaybeforesend attribute to control delays with newer versions of
285 290 pexpect. Thanks to detailed help from pexpect's author, Noah
286 291 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
287 292 correctly (it works in NoColor mode).
288 293
289 294 * IPython/iplib.py (handle_normal): fix nasty crash reported on
290 295 SAGE list, from improper log() calls.
291 296
292 297 2006-05-31 Ville Vainio <vivainio@gmail.com>
293 298
294 299 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
295 300 with args in parens to work correctly with dirs that have spaces.
296 301
297 302 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
298 303
299 304 * IPython/Logger.py (Logger.logstart): add option to log raw input
300 305 instead of the processed one. A -r flag was added to the
301 306 %logstart magic used for controlling logging.
302 307
303 308 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
304 309
305 310 * IPython/iplib.py (InteractiveShell.__init__): add check for the
306 311 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
307 312 recognize the option. After a bug report by Will Maier. This
308 313 closes #64 (will do it after confirmation from W. Maier).
309 314
310 315 * IPython/irunner.py: New module to run scripts as if manually
311 316 typed into an interactive environment, based on pexpect. After a
312 317 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
313 318 ipython-user list. Simple unittests in the tests/ directory.
314 319
315 320 * tools/release: add Will Maier, OpenBSD port maintainer, to
316 321 recepients list. We are now officially part of the OpenBSD ports:
317 322 http://www.openbsd.org/ports.html ! Many thanks to Will for the
318 323 work.
319 324
320 325 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
321 326
322 327 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
323 328 so that it doesn't break tkinter apps.
324 329
325 330 * IPython/iplib.py (_prefilter): fix bug where aliases would
326 331 shadow variables when autocall was fully off. Reported by SAGE
327 332 author William Stein.
328 333
329 334 * IPython/OInspect.py (Inspector.__init__): add a flag to control
330 335 at what detail level strings are computed when foo? is requested.
331 336 This allows users to ask for example that the string form of an
332 337 object is only computed when foo?? is called, or even never, by
333 338 setting the object_info_string_level >= 2 in the configuration
334 339 file. This new option has been added and documented. After a
335 340 request by SAGE to be able to control the printing of very large
336 341 objects more easily.
337 342
338 343 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
339 344
340 345 * IPython/ipmaker.py (make_IPython): remove the ipython call path
341 346 from sys.argv, to be 100% consistent with how Python itself works
342 347 (as seen for example with python -i file.py). After a bug report
343 348 by Jeffrey Collins.
344 349
345 350 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
346 351 nasty bug which was preventing custom namespaces with -pylab,
347 352 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
348 353 compatibility (long gone from mpl).
349 354
350 355 * IPython/ipapi.py (make_session): name change: create->make. We
351 356 use make in other places (ipmaker,...), it's shorter and easier to
352 357 type and say, etc. I'm trying to clean things before 0.7.2 so
353 358 that I can keep things stable wrt to ipapi in the chainsaw branch.
354 359
355 360 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
356 361 python-mode recognizes our debugger mode. Add support for
357 362 autoindent inside (X)emacs. After a patch sent in by Jin Liu
358 363 <m.liu.jin-AT-gmail.com> originally written by
359 364 doxgen-AT-newsmth.net (with minor modifications for xemacs
360 365 compatibility)
361 366
362 367 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
363 368 tracebacks when walking the stack so that the stack tracking system
364 369 in emacs' python-mode can identify the frames correctly.
365 370
366 371 * IPython/ipmaker.py (make_IPython): make the internal (and
367 372 default config) autoedit_syntax value false by default. Too many
368 373 users have complained to me (both on and off-list) about problems
369 374 with this option being on by default, so I'm making it default to
370 375 off. It can still be enabled by anyone via the usual mechanisms.
371 376
372 377 * IPython/completer.py (Completer.attr_matches): add support for
373 378 PyCrust-style _getAttributeNames magic method. Patch contributed
374 379 by <mscott-AT-goldenspud.com>. Closes #50.
375 380
376 381 * IPython/iplib.py (InteractiveShell.__init__): remove the
377 382 deletion of exit/quit from __builtin__, which can break
378 383 third-party tools like the Zope debugging console. The
379 384 %exit/%quit magics remain. In general, it's probably a good idea
380 385 not to delete anything from __builtin__, since we never know what
381 386 that will break. In any case, python now (for 2.5) will support
382 387 'real' exit/quit, so this issue is moot. Closes #55.
383 388
384 389 * IPython/genutils.py (with_obj): rename the 'with' function to
385 390 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
386 391 becomes a language keyword. Closes #53.
387 392
388 393 * IPython/FakeModule.py (FakeModule.__init__): add a proper
389 394 __file__ attribute to this so it fools more things into thinking
390 395 it is a real module. Closes #59.
391 396
392 397 * IPython/Magic.py (magic_edit): add -n option to open the editor
393 398 at a specific line number. After a patch by Stefan van der Walt.
394 399
395 400 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
396 401
397 402 * IPython/iplib.py (edit_syntax_error): fix crash when for some
398 403 reason the file could not be opened. After automatic crash
399 404 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
400 405 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
401 406 (_should_recompile): Don't fire editor if using %bg, since there
402 407 is no file in the first place. From the same report as above.
403 408 (raw_input): protect against faulty third-party prefilters. After
404 409 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
405 410 while running under SAGE.
406 411
407 412 2006-05-23 Ville Vainio <vivainio@gmail.com>
408 413
409 414 * ipapi.py: Stripped down ip.to_user_ns() to work only as
410 415 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
411 416 now returns None (again), unless dummy is specifically allowed by
412 417 ipapi.get(allow_dummy=True).
413 418
414 419 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
415 420
416 421 * IPython: remove all 2.2-compatibility objects and hacks from
417 422 everywhere, since we only support 2.3 at this point. Docs
418 423 updated.
419 424
420 425 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
421 426 Anything requiring extra validation can be turned into a Python
422 427 property in the future. I used a property for the db one b/c
423 428 there was a nasty circularity problem with the initialization
424 429 order, which right now I don't have time to clean up.
425 430
426 431 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
427 432 another locking bug reported by Jorgen. I'm not 100% sure though,
428 433 so more testing is needed...
429 434
430 435 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
431 436
432 437 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
433 438 local variables from any routine in user code (typically executed
434 439 with %run) directly into the interactive namespace. Very useful
435 440 when doing complex debugging.
436 441 (IPythonNotRunning): Changed the default None object to a dummy
437 442 whose attributes can be queried as well as called without
438 443 exploding, to ease writing code which works transparently both in
439 444 and out of ipython and uses some of this API.
440 445
441 446 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
442 447
443 448 * IPython/hooks.py (result_display): Fix the fact that our display
444 449 hook was using str() instead of repr(), as the default python
445 450 console does. This had gone unnoticed b/c it only happened if
446 451 %Pprint was off, but the inconsistency was there.
447 452
448 453 2006-05-15 Ville Vainio <vivainio@gmail.com>
449 454
450 455 * Oinspect.py: Only show docstring for nonexisting/binary files
451 456 when doing object??, closing ticket #62
452 457
453 458 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
454 459
455 460 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
456 461 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
457 462 was being released in a routine which hadn't checked if it had
458 463 been the one to acquire it.
459 464
460 465 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
461 466
462 467 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
463 468
464 469 2006-04-11 Ville Vainio <vivainio@gmail.com>
465 470
466 471 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
467 472 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
468 473 prefilters, allowing stuff like magics and aliases in the file.
469 474
470 475 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
471 476 added. Supported now are "%clear in" and "%clear out" (clear input and
472 477 output history, respectively). Also fixed CachedOutput.flush to
473 478 properly flush the output cache.
474 479
475 480 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
476 481 half-success (and fail explicitly).
477 482
478 483 2006-03-28 Ville Vainio <vivainio@gmail.com>
479 484
480 485 * iplib.py: Fix quoting of aliases so that only argless ones
481 486 are quoted
482 487
483 488 2006-03-28 Ville Vainio <vivainio@gmail.com>
484 489
485 490 * iplib.py: Quote aliases with spaces in the name.
486 491 "c:\program files\blah\bin" is now legal alias target.
487 492
488 493 * ext_rehashdir.py: Space no longer allowed as arg
489 494 separator, since space is legal in path names.
490 495
491 496 2006-03-16 Ville Vainio <vivainio@gmail.com>
492 497
493 498 * upgrade_dir.py: Take path.py from Extensions, correcting
494 499 %upgrade magic
495 500
496 501 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
497 502
498 503 * hooks.py: Only enclose editor binary in quotes if legal and
499 504 necessary (space in the name, and is an existing file). Fixes a bug
500 505 reported by Zachary Pincus.
501 506
502 507 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
503 508
504 509 * Manual: thanks to a tip on proper color handling for Emacs, by
505 510 Eric J Haywiser <ejh1-AT-MIT.EDU>.
506 511
507 512 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
508 513 by applying the provided patch. Thanks to Liu Jin
509 514 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
510 515 XEmacs/Linux, I'm trusting the submitter that it actually helps
511 516 under win32/GNU Emacs. Will revisit if any problems are reported.
512 517
513 518 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
514 519
515 520 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
516 521 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
517 522
518 523 2006-03-12 Ville Vainio <vivainio@gmail.com>
519 524
520 525 * Magic.py (magic_timeit): Added %timeit magic, contributed by
521 526 Torsten Marek.
522 527
523 528 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
524 529
525 530 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
526 531 line ranges works again.
527 532
528 533 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
529 534
530 535 * IPython/iplib.py (showtraceback): add back sys.last_traceback
531 536 and friends, after a discussion with Zach Pincus on ipython-user.
532 537 I'm not 100% sure, but after thinking about it quite a bit, it may
533 538 be OK. Testing with the multithreaded shells didn't reveal any
534 539 problems, but let's keep an eye out.
535 540
536 541 In the process, I fixed a few things which were calling
537 542 self.InteractiveTB() directly (like safe_execfile), which is a
538 543 mistake: ALL exception reporting should be done by calling
539 544 self.showtraceback(), which handles state and tab-completion and
540 545 more.
541 546
542 547 2006-03-01 Ville Vainio <vivainio@gmail.com>
543 548
544 549 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
545 550 To use, do "from ipipe import *".
546 551
547 552 2006-02-24 Ville Vainio <vivainio@gmail.com>
548 553
549 554 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
550 555 "cleanly" and safely than the older upgrade mechanism.
551 556
552 557 2006-02-21 Ville Vainio <vivainio@gmail.com>
553 558
554 559 * Magic.py: %save works again.
555 560
556 561 2006-02-15 Ville Vainio <vivainio@gmail.com>
557 562
558 563 * Magic.py: %Pprint works again
559 564
560 565 * Extensions/ipy_sane_defaults.py: Provide everything provided
561 566 in default ipythonrc, to make it possible to have a completely empty
562 567 ipythonrc (and thus completely rc-file free configuration)
563 568
564 569 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
565 570
566 571 * IPython/hooks.py (editor): quote the call to the editor command,
567 572 to allow commands with spaces in them. Problem noted by watching
568 573 Ian Oswald's video about textpad under win32 at
569 574 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
570 575
571 576 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
572 577 describing magics (we haven't used @ for a loong time).
573 578
574 579 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
575 580 contributed by marienz to close
576 581 http://www.scipy.net/roundup/ipython/issue53.
577 582
578 583 2006-02-10 Ville Vainio <vivainio@gmail.com>
579 584
580 585 * genutils.py: getoutput now works in win32 too
581 586
582 587 * completer.py: alias and magic completion only invoked
583 588 at the first "item" in the line, to avoid "cd %store"
584 589 nonsense.
585 590
586 591 2006-02-09 Ville Vainio <vivainio@gmail.com>
587 592
588 593 * test/*: Added a unit testing framework (finally).
589 594 '%run runtests.py' to run test_*.
590 595
591 596 * ipapi.py: Exposed runlines and set_custom_exc
592 597
593 598 2006-02-07 Ville Vainio <vivainio@gmail.com>
594 599
595 600 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
596 601 instead use "f(1 2)" as before.
597 602
598 603 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
599 604
600 605 * IPython/demo.py (IPythonDemo): Add new classes to the demo
601 606 facilities, for demos processed by the IPython input filter
602 607 (IPythonDemo), and for running a script one-line-at-a-time as a
603 608 demo, both for pure Python (LineDemo) and for IPython-processed
604 609 input (IPythonLineDemo). After a request by Dave Kohel, from the
605 610 SAGE team.
606 611 (Demo.edit): added an edit() method to the demo objects, to edit
607 612 the in-memory copy of the last executed block.
608 613
609 614 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
610 615 processing to %edit, %macro and %save. These commands can now be
611 616 invoked on the unprocessed input as it was typed by the user
612 617 (without any prefilters applied). After requests by the SAGE team
613 618 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
614 619
615 620 2006-02-01 Ville Vainio <vivainio@gmail.com>
616 621
617 622 * setup.py, eggsetup.py: easy_install ipython==dev works
618 623 correctly now (on Linux)
619 624
620 625 * ipy_user_conf,ipmaker: user config changes, removed spurious
621 626 warnings
622 627
623 628 * iplib: if rc.banner is string, use it as is.
624 629
625 630 * Magic: %pycat accepts a string argument and pages it's contents.
626 631
627 632
628 633 2006-01-30 Ville Vainio <vivainio@gmail.com>
629 634
630 635 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
631 636 Now %store and bookmarks work through PickleShare, meaning that
632 637 concurrent access is possible and all ipython sessions see the
633 638 same database situation all the time, instead of snapshot of
634 639 the situation when the session was started. Hence, %bookmark
635 640 results are immediately accessible from othes sessions. The database
636 641 is also available for use by user extensions. See:
637 642 http://www.python.org/pypi/pickleshare
638 643
639 644 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
640 645
641 646 * aliases can now be %store'd
642 647
643 648 * path.py moved to Extensions so that pickleshare does not need
644 649 IPython-specific import. Extensions added to pythonpath right
645 650 at __init__.
646 651
647 652 * iplib.py: ipalias deprecated/redundant; aliases are converted and
648 653 called with _ip.system and the pre-transformed command string.
649 654
650 655 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
651 656
652 657 * IPython/iplib.py (interact): Fix that we were not catching
653 658 KeyboardInterrupt exceptions properly. I'm not quite sure why the
654 659 logic here had to change, but it's fixed now.
655 660
656 661 2006-01-29 Ville Vainio <vivainio@gmail.com>
657 662
658 663 * iplib.py: Try to import pyreadline on Windows.
659 664
660 665 2006-01-27 Ville Vainio <vivainio@gmail.com>
661 666
662 667 * iplib.py: Expose ipapi as _ip in builtin namespace.
663 668 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
664 669 and ip_set_hook (-> _ip.set_hook) redundant. % and !
665 670 syntax now produce _ip.* variant of the commands.
666 671
667 672 * "_ip.options().autoedit_syntax = 2" automatically throws
668 673 user to editor for syntax error correction without prompting.
669 674
670 675 2006-01-27 Ville Vainio <vivainio@gmail.com>
671 676
672 677 * ipmaker.py: Give "realistic" sys.argv for scripts (without
673 678 'ipython' at argv[0]) executed through command line.
674 679 NOTE: this DEPRECATES calling ipython with multiple scripts
675 680 ("ipython a.py b.py c.py")
676 681
677 682 * iplib.py, hooks.py: Added configurable input prefilter,
678 683 named 'input_prefilter'. See ext_rescapture.py for example
679 684 usage.
680 685
681 686 * ext_rescapture.py, Magic.py: Better system command output capture
682 687 through 'var = !ls' (deprecates user-visible %sc). Same notation
683 688 applies for magics, 'var = %alias' assigns alias list to var.
684 689
685 690 * ipapi.py: added meta() for accessing extension-usable data store.
686 691
687 692 * iplib.py: added InteractiveShell.getapi(). New magics should be
688 693 written doing self.getapi() instead of using the shell directly.
689 694
690 695 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
691 696 %store foo >> ~/myfoo.txt to store variables to files (in clean
692 697 textual form, not a restorable pickle).
693 698
694 699 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
695 700
696 701 * usage.py, Magic.py: added %quickref
697 702
698 703 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
699 704
700 705 * GetoptErrors when invoking magics etc. with wrong args
701 706 are now more helpful:
702 707 GetoptError: option -l not recognized (allowed: "qb" )
703 708
704 709 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
705 710
706 711 * IPython/demo.py (Demo.show): Flush stdout after each block, so
707 712 computationally intensive blocks don't appear to stall the demo.
708 713
709 714 2006-01-24 Ville Vainio <vivainio@gmail.com>
710 715
711 716 * iplib.py, hooks.py: 'result_display' hook can return a non-None
712 717 value to manipulate resulting history entry.
713 718
714 719 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
715 720 to instance methods of IPApi class, to make extending an embedded
716 721 IPython feasible. See ext_rehashdir.py for example usage.
717 722
718 723 * Merged 1071-1076 from branches/0.7.1
719 724
720 725
721 726 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
722 727
723 728 * tools/release (daystamp): Fix build tools to use the new
724 729 eggsetup.py script to build lightweight eggs.
725 730
726 731 * Applied changesets 1062 and 1064 before 0.7.1 release.
727 732
728 733 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
729 734 see the raw input history (without conversions like %ls ->
730 735 ipmagic("ls")). After a request from W. Stein, SAGE
731 736 (http://modular.ucsd.edu/sage) developer. This information is
732 737 stored in the input_hist_raw attribute of the IPython instance, so
733 738 developers can access it if needed (it's an InputList instance).
734 739
735 740 * Versionstring = 0.7.2.svn
736 741
737 742 * eggsetup.py: A separate script for constructing eggs, creates
738 743 proper launch scripts even on Windows (an .exe file in
739 744 \python24\scripts).
740 745
741 746 * ipapi.py: launch_new_instance, launch entry point needed for the
742 747 egg.
743 748
744 749 2006-01-23 Ville Vainio <vivainio@gmail.com>
745 750
746 751 * Added %cpaste magic for pasting python code
747 752
748 753 2006-01-22 Ville Vainio <vivainio@gmail.com>
749 754
750 755 * Merge from branches/0.7.1 into trunk, revs 1052-1057
751 756
752 757 * Versionstring = 0.7.2.svn
753 758
754 759 * eggsetup.py: A separate script for constructing eggs, creates
755 760 proper launch scripts even on Windows (an .exe file in
756 761 \python24\scripts).
757 762
758 763 * ipapi.py: launch_new_instance, launch entry point needed for the
759 764 egg.
760 765
761 766 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
762 767
763 768 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
764 769 %pfile foo would print the file for foo even if it was a binary.
765 770 Now, extensions '.so' and '.dll' are skipped.
766 771
767 772 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
768 773 bug, where macros would fail in all threaded modes. I'm not 100%
769 774 sure, so I'm going to put out an rc instead of making a release
770 775 today, and wait for feedback for at least a few days.
771 776
772 777 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
773 778 it...) the handling of pasting external code with autoindent on.
774 779 To get out of a multiline input, the rule will appear for most
775 780 users unchanged: two blank lines or change the indent level
776 781 proposed by IPython. But there is a twist now: you can
777 782 add/subtract only *one or two spaces*. If you add/subtract three
778 783 or more (unless you completely delete the line), IPython will
779 784 accept that line, and you'll need to enter a second one of pure
780 785 whitespace. I know it sounds complicated, but I can't find a
781 786 different solution that covers all the cases, with the right
782 787 heuristics. Hopefully in actual use, nobody will really notice
783 788 all these strange rules and things will 'just work'.
784 789
785 790 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
786 791
787 792 * IPython/iplib.py (interact): catch exceptions which can be
788 793 triggered asynchronously by signal handlers. Thanks to an
789 794 automatic crash report, submitted by Colin Kingsley
790 795 <tercel-AT-gentoo.org>.
791 796
792 797 2006-01-20 Ville Vainio <vivainio@gmail.com>
793 798
794 799 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
795 800 (%rehashdir, very useful, try it out) of how to extend ipython
796 801 with new magics. Also added Extensions dir to pythonpath to make
797 802 importing extensions easy.
798 803
799 804 * %store now complains when trying to store interactively declared
800 805 classes / instances of those classes.
801 806
802 807 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
803 808 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
804 809 if they exist, and ipy_user_conf.py with some defaults is created for
805 810 the user.
806 811
807 812 * Startup rehashing done by the config file, not InterpreterExec.
808 813 This means system commands are available even without selecting the
809 814 pysh profile. It's the sensible default after all.
810 815
811 816 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
812 817
813 818 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
814 819 multiline code with autoindent on working. But I am really not
815 820 sure, so this needs more testing. Will commit a debug-enabled
816 821 version for now, while I test it some more, so that Ville and
817 822 others may also catch any problems. Also made
818 823 self.indent_current_str() a method, to ensure that there's no
819 824 chance of the indent space count and the corresponding string
820 825 falling out of sync. All code needing the string should just call
821 826 the method.
822 827
823 828 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
824 829
825 830 * IPython/Magic.py (magic_edit): fix check for when users don't
826 831 save their output files, the try/except was in the wrong section.
827 832
828 833 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
829 834
830 835 * IPython/Magic.py (magic_run): fix __file__ global missing from
831 836 script's namespace when executed via %run. After a report by
832 837 Vivian.
833 838
834 839 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
835 840 when using python 2.4. The parent constructor changed in 2.4, and
836 841 we need to track it directly (we can't call it, as it messes up
837 842 readline and tab-completion inside our pdb would stop working).
838 843 After a bug report by R. Bernstein <rocky-AT-panix.com>.
839 844
840 845 2006-01-16 Ville Vainio <vivainio@gmail.com>
841 846
842 847 * Ipython/magic.py: Reverted back to old %edit functionality
843 848 that returns file contents on exit.
844 849
845 850 * IPython/path.py: Added Jason Orendorff's "path" module to
846 851 IPython tree, http://www.jorendorff.com/articles/python/path/.
847 852 You can get path objects conveniently through %sc, and !!, e.g.:
848 853 sc files=ls
849 854 for p in files.paths: # or files.p
850 855 print p,p.mtime
851 856
852 857 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
853 858 now work again without considering the exclusion regexp -
854 859 hence, things like ',foo my/path' turn to 'foo("my/path")'
855 860 instead of syntax error.
856 861
857 862
858 863 2006-01-14 Ville Vainio <vivainio@gmail.com>
859 864
860 865 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
861 866 ipapi decorators for python 2.4 users, options() provides access to rc
862 867 data.
863 868
864 869 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
865 870 as path separators (even on Linux ;-). Space character after
866 871 backslash (as yielded by tab completer) is still space;
867 872 "%cd long\ name" works as expected.
868 873
869 874 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
870 875 as "chain of command", with priority. API stays the same,
871 876 TryNext exception raised by a hook function signals that
872 877 current hook failed and next hook should try handling it, as
873 878 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
874 879 requested configurable display hook, which is now implemented.
875 880
876 881 2006-01-13 Ville Vainio <vivainio@gmail.com>
877 882
878 883 * IPython/platutils*.py: platform specific utility functions,
879 884 so far only set_term_title is implemented (change terminal
880 885 label in windowing systems). %cd now changes the title to
881 886 current dir.
882 887
883 888 * IPython/Release.py: Added myself to "authors" list,
884 889 had to create new files.
885 890
886 891 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
887 892 shell escape; not a known bug but had potential to be one in the
888 893 future.
889 894
890 895 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
891 896 extension API for IPython! See the module for usage example. Fix
892 897 OInspect for docstring-less magic functions.
893 898
894 899
895 900 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
896 901
897 902 * IPython/iplib.py (raw_input): temporarily deactivate all
898 903 attempts at allowing pasting of code with autoindent on. It
899 904 introduced bugs (reported by Prabhu) and I can't seem to find a
900 905 robust combination which works in all cases. Will have to revisit
901 906 later.
902 907
903 908 * IPython/genutils.py: remove isspace() function. We've dropped
904 909 2.2 compatibility, so it's OK to use the string method.
905 910
906 911 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
907 912
908 913 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
909 914 matching what NOT to autocall on, to include all python binary
910 915 operators (including things like 'and', 'or', 'is' and 'in').
911 916 Prompted by a bug report on 'foo & bar', but I realized we had
912 917 many more potential bug cases with other operators. The regexp is
913 918 self.re_exclude_auto, it's fairly commented.
914 919
915 920 2006-01-12 Ville Vainio <vivainio@gmail.com>
916 921
917 922 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
918 923 Prettified and hardened string/backslash quoting with ipsystem(),
919 924 ipalias() and ipmagic(). Now even \ characters are passed to
920 925 %magics, !shell escapes and aliases exactly as they are in the
921 926 ipython command line. Should improve backslash experience,
922 927 particularly in Windows (path delimiter for some commands that
923 928 won't understand '/'), but Unix benefits as well (regexps). %cd
924 929 magic still doesn't support backslash path delimiters, though. Also
925 930 deleted all pretense of supporting multiline command strings in
926 931 !system or %magic commands. Thanks to Jerry McRae for suggestions.
927 932
928 933 * doc/build_doc_instructions.txt added. Documentation on how to
929 934 use doc/update_manual.py, added yesterday. Both files contributed
930 935 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
931 936 doc/*.sh for deprecation at a later date.
932 937
933 938 * /ipython.py Added ipython.py to root directory for
934 939 zero-installation (tar xzvf ipython.tgz; cd ipython; python
935 940 ipython.py) and development convenience (no need to keep doing
936 941 "setup.py install" between changes).
937 942
938 943 * Made ! and !! shell escapes work (again) in multiline expressions:
939 944 if 1:
940 945 !ls
941 946 !!ls
942 947
943 948 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
944 949
945 950 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
946 951 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
947 952 module in case-insensitive installation. Was causing crashes
948 953 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
949 954
950 955 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
951 956 <marienz-AT-gentoo.org>, closes
952 957 http://www.scipy.net/roundup/ipython/issue51.
953 958
954 959 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
955 960
956 961 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
957 962 problem of excessive CPU usage under *nix and keyboard lag under
958 963 win32.
959 964
960 965 2006-01-10 *** Released version 0.7.0
961 966
962 967 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
963 968
964 969 * IPython/Release.py (revision): tag version number to 0.7.0,
965 970 ready for release.
966 971
967 972 * IPython/Magic.py (magic_edit): Add print statement to %edit so
968 973 it informs the user of the name of the temp. file used. This can
969 974 help if you decide later to reuse that same file, so you know
970 975 where to copy the info from.
971 976
972 977 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
973 978
974 979 * setup_bdist_egg.py: little script to build an egg. Added
975 980 support in the release tools as well.
976 981
977 982 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
978 983
979 984 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
980 985 version selection (new -wxversion command line and ipythonrc
981 986 parameter). Patch contributed by Arnd Baecker
982 987 <arnd.baecker-AT-web.de>.
983 988
984 989 * IPython/iplib.py (embed_mainloop): fix tab-completion in
985 990 embedded instances, for variables defined at the interactive
986 991 prompt of the embedded ipython. Reported by Arnd.
987 992
988 993 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
989 994 it can be used as a (stateful) toggle, or with a direct parameter.
990 995
991 996 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
992 997 could be triggered in certain cases and cause the traceback
993 998 printer not to work.
994 999
995 1000 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
996 1001
997 1002 * IPython/iplib.py (_should_recompile): Small fix, closes
998 1003 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
999 1004
1000 1005 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1001 1006
1002 1007 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1003 1008 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1004 1009 Moad for help with tracking it down.
1005 1010
1006 1011 * IPython/iplib.py (handle_auto): fix autocall handling for
1007 1012 objects which support BOTH __getitem__ and __call__ (so that f [x]
1008 1013 is left alone, instead of becoming f([x]) automatically).
1009 1014
1010 1015 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1011 1016 Ville's patch.
1012 1017
1013 1018 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1014 1019
1015 1020 * IPython/iplib.py (handle_auto): changed autocall semantics to
1016 1021 include 'smart' mode, where the autocall transformation is NOT
1017 1022 applied if there are no arguments on the line. This allows you to
1018 1023 just type 'foo' if foo is a callable to see its internal form,
1019 1024 instead of having it called with no arguments (typically a
1020 1025 mistake). The old 'full' autocall still exists: for that, you
1021 1026 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1022 1027
1023 1028 * IPython/completer.py (Completer.attr_matches): add
1024 1029 tab-completion support for Enthoughts' traits. After a report by
1025 1030 Arnd and a patch by Prabhu.
1026 1031
1027 1032 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1028 1033
1029 1034 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1030 1035 Schmolck's patch to fix inspect.getinnerframes().
1031 1036
1032 1037 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1033 1038 for embedded instances, regarding handling of namespaces and items
1034 1039 added to the __builtin__ one. Multiple embedded instances and
1035 1040 recursive embeddings should work better now (though I'm not sure
1036 1041 I've got all the corner cases fixed, that code is a bit of a brain
1037 1042 twister).
1038 1043
1039 1044 * IPython/Magic.py (magic_edit): added support to edit in-memory
1040 1045 macros (automatically creates the necessary temp files). %edit
1041 1046 also doesn't return the file contents anymore, it's just noise.
1042 1047
1043 1048 * IPython/completer.py (Completer.attr_matches): revert change to
1044 1049 complete only on attributes listed in __all__. I realized it
1045 1050 cripples the tab-completion system as a tool for exploring the
1046 1051 internals of unknown libraries (it renders any non-__all__
1047 1052 attribute off-limits). I got bit by this when trying to see
1048 1053 something inside the dis module.
1049 1054
1050 1055 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1051 1056
1052 1057 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1053 1058 namespace for users and extension writers to hold data in. This
1054 1059 follows the discussion in
1055 1060 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1056 1061
1057 1062 * IPython/completer.py (IPCompleter.complete): small patch to help
1058 1063 tab-completion under Emacs, after a suggestion by John Barnard
1059 1064 <barnarj-AT-ccf.org>.
1060 1065
1061 1066 * IPython/Magic.py (Magic.extract_input_slices): added support for
1062 1067 the slice notation in magics to use N-M to represent numbers N...M
1063 1068 (closed endpoints). This is used by %macro and %save.
1064 1069
1065 1070 * IPython/completer.py (Completer.attr_matches): for modules which
1066 1071 define __all__, complete only on those. After a patch by Jeffrey
1067 1072 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1068 1073 speed up this routine.
1069 1074
1070 1075 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1071 1076 don't know if this is the end of it, but the behavior now is
1072 1077 certainly much more correct. Note that coupled with macros,
1073 1078 slightly surprising (at first) behavior may occur: a macro will in
1074 1079 general expand to multiple lines of input, so upon exiting, the
1075 1080 in/out counters will both be bumped by the corresponding amount
1076 1081 (as if the macro's contents had been typed interactively). Typing
1077 1082 %hist will reveal the intermediate (silently processed) lines.
1078 1083
1079 1084 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1080 1085 pickle to fail (%run was overwriting __main__ and not restoring
1081 1086 it, but pickle relies on __main__ to operate).
1082 1087
1083 1088 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1084 1089 using properties, but forgot to make the main InteractiveShell
1085 1090 class a new-style class. Properties fail silently, and
1086 1091 mysteriously, with old-style class (getters work, but
1087 1092 setters don't do anything).
1088 1093
1089 1094 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1090 1095
1091 1096 * IPython/Magic.py (magic_history): fix history reporting bug (I
1092 1097 know some nasties are still there, I just can't seem to find a
1093 1098 reproducible test case to track them down; the input history is
1094 1099 falling out of sync...)
1095 1100
1096 1101 * IPython/iplib.py (handle_shell_escape): fix bug where both
1097 1102 aliases and system accesses where broken for indented code (such
1098 1103 as loops).
1099 1104
1100 1105 * IPython/genutils.py (shell): fix small but critical bug for
1101 1106 win32 system access.
1102 1107
1103 1108 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1104 1109
1105 1110 * IPython/iplib.py (showtraceback): remove use of the
1106 1111 sys.last_{type/value/traceback} structures, which are non
1107 1112 thread-safe.
1108 1113 (_prefilter): change control flow to ensure that we NEVER
1109 1114 introspect objects when autocall is off. This will guarantee that
1110 1115 having an input line of the form 'x.y', where access to attribute
1111 1116 'y' has side effects, doesn't trigger the side effect TWICE. It
1112 1117 is important to note that, with autocall on, these side effects
1113 1118 can still happen.
1114 1119 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1115 1120 trio. IPython offers these three kinds of special calls which are
1116 1121 not python code, and it's a good thing to have their call method
1117 1122 be accessible as pure python functions (not just special syntax at
1118 1123 the command line). It gives us a better internal implementation
1119 1124 structure, as well as exposing these for user scripting more
1120 1125 cleanly.
1121 1126
1122 1127 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1123 1128 file. Now that they'll be more likely to be used with the
1124 1129 persistance system (%store), I want to make sure their module path
1125 1130 doesn't change in the future, so that we don't break things for
1126 1131 users' persisted data.
1127 1132
1128 1133 * IPython/iplib.py (autoindent_update): move indentation
1129 1134 management into the _text_ processing loop, not the keyboard
1130 1135 interactive one. This is necessary to correctly process non-typed
1131 1136 multiline input (such as macros).
1132 1137
1133 1138 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1134 1139 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1135 1140 which was producing problems in the resulting manual.
1136 1141 (magic_whos): improve reporting of instances (show their class,
1137 1142 instead of simply printing 'instance' which isn't terribly
1138 1143 informative).
1139 1144
1140 1145 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1141 1146 (minor mods) to support network shares under win32.
1142 1147
1143 1148 * IPython/winconsole.py (get_console_size): add new winconsole
1144 1149 module and fixes to page_dumb() to improve its behavior under
1145 1150 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1146 1151
1147 1152 * IPython/Magic.py (Macro): simplified Macro class to just
1148 1153 subclass list. We've had only 2.2 compatibility for a very long
1149 1154 time, yet I was still avoiding subclassing the builtin types. No
1150 1155 more (I'm also starting to use properties, though I won't shift to
1151 1156 2.3-specific features quite yet).
1152 1157 (magic_store): added Ville's patch for lightweight variable
1153 1158 persistence, after a request on the user list by Matt Wilkie
1154 1159 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1155 1160 details.
1156 1161
1157 1162 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1158 1163 changed the default logfile name from 'ipython.log' to
1159 1164 'ipython_log.py'. These logs are real python files, and now that
1160 1165 we have much better multiline support, people are more likely to
1161 1166 want to use them as such. Might as well name them correctly.
1162 1167
1163 1168 * IPython/Magic.py: substantial cleanup. While we can't stop
1164 1169 using magics as mixins, due to the existing customizations 'out
1165 1170 there' which rely on the mixin naming conventions, at least I
1166 1171 cleaned out all cross-class name usage. So once we are OK with
1167 1172 breaking compatibility, the two systems can be separated.
1168 1173
1169 1174 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1170 1175 anymore, and the class is a fair bit less hideous as well. New
1171 1176 features were also introduced: timestamping of input, and logging
1172 1177 of output results. These are user-visible with the -t and -o
1173 1178 options to %logstart. Closes
1174 1179 http://www.scipy.net/roundup/ipython/issue11 and a request by
1175 1180 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1176 1181
1177 1182 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1178 1183
1179 1184 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1180 1185 better handle backslashes in paths. See the thread 'More Windows
1181 1186 questions part 2 - \/ characters revisited' on the iypthon user
1182 1187 list:
1183 1188 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1184 1189
1185 1190 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1186 1191
1187 1192 (InteractiveShell.__init__): change threaded shells to not use the
1188 1193 ipython crash handler. This was causing more problems than not,
1189 1194 as exceptions in the main thread (GUI code, typically) would
1190 1195 always show up as a 'crash', when they really weren't.
1191 1196
1192 1197 The colors and exception mode commands (%colors/%xmode) have been
1193 1198 synchronized to also take this into account, so users can get
1194 1199 verbose exceptions for their threaded code as well. I also added
1195 1200 support for activating pdb inside this exception handler as well,
1196 1201 so now GUI authors can use IPython's enhanced pdb at runtime.
1197 1202
1198 1203 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1199 1204 true by default, and add it to the shipped ipythonrc file. Since
1200 1205 this asks the user before proceeding, I think it's OK to make it
1201 1206 true by default.
1202 1207
1203 1208 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1204 1209 of the previous special-casing of input in the eval loop. I think
1205 1210 this is cleaner, as they really are commands and shouldn't have
1206 1211 a special role in the middle of the core code.
1207 1212
1208 1213 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1209 1214
1210 1215 * IPython/iplib.py (edit_syntax_error): added support for
1211 1216 automatically reopening the editor if the file had a syntax error
1212 1217 in it. Thanks to scottt who provided the patch at:
1213 1218 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1214 1219 version committed).
1215 1220
1216 1221 * IPython/iplib.py (handle_normal): add suport for multi-line
1217 1222 input with emtpy lines. This fixes
1218 1223 http://www.scipy.net/roundup/ipython/issue43 and a similar
1219 1224 discussion on the user list.
1220 1225
1221 1226 WARNING: a behavior change is necessarily introduced to support
1222 1227 blank lines: now a single blank line with whitespace does NOT
1223 1228 break the input loop, which means that when autoindent is on, by
1224 1229 default hitting return on the next (indented) line does NOT exit.
1225 1230
1226 1231 Instead, to exit a multiline input you can either have:
1227 1232
1228 1233 - TWO whitespace lines (just hit return again), or
1229 1234 - a single whitespace line of a different length than provided
1230 1235 by the autoindent (add or remove a space).
1231 1236
1232 1237 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1233 1238 module to better organize all readline-related functionality.
1234 1239 I've deleted FlexCompleter and put all completion clases here.
1235 1240
1236 1241 * IPython/iplib.py (raw_input): improve indentation management.
1237 1242 It is now possible to paste indented code with autoindent on, and
1238 1243 the code is interpreted correctly (though it still looks bad on
1239 1244 screen, due to the line-oriented nature of ipython).
1240 1245 (MagicCompleter.complete): change behavior so that a TAB key on an
1241 1246 otherwise empty line actually inserts a tab, instead of completing
1242 1247 on the entire global namespace. This makes it easier to use the
1243 1248 TAB key for indentation. After a request by Hans Meine
1244 1249 <hans_meine-AT-gmx.net>
1245 1250 (_prefilter): add support so that typing plain 'exit' or 'quit'
1246 1251 does a sensible thing. Originally I tried to deviate as little as
1247 1252 possible from the default python behavior, but even that one may
1248 1253 change in this direction (thread on python-dev to that effect).
1249 1254 Regardless, ipython should do the right thing even if CPython's
1250 1255 '>>>' prompt doesn't.
1251 1256 (InteractiveShell): removed subclassing code.InteractiveConsole
1252 1257 class. By now we'd overridden just about all of its methods: I've
1253 1258 copied the remaining two over, and now ipython is a standalone
1254 1259 class. This will provide a clearer picture for the chainsaw
1255 1260 branch refactoring.
1256 1261
1257 1262 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1258 1263
1259 1264 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1260 1265 failures for objects which break when dir() is called on them.
1261 1266
1262 1267 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1263 1268 distinct local and global namespaces in the completer API. This
1264 1269 change allows us to properly handle completion with distinct
1265 1270 scopes, including in embedded instances (this had never really
1266 1271 worked correctly).
1267 1272
1268 1273 Note: this introduces a change in the constructor for
1269 1274 MagicCompleter, as a new global_namespace parameter is now the
1270 1275 second argument (the others were bumped one position).
1271 1276
1272 1277 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1273 1278
1274 1279 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1275 1280 embedded instances (which can be done now thanks to Vivian's
1276 1281 frame-handling fixes for pdb).
1277 1282 (InteractiveShell.__init__): Fix namespace handling problem in
1278 1283 embedded instances. We were overwriting __main__ unconditionally,
1279 1284 and this should only be done for 'full' (non-embedded) IPython;
1280 1285 embedded instances must respect the caller's __main__. Thanks to
1281 1286 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1282 1287
1283 1288 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1284 1289
1285 1290 * setup.py: added download_url to setup(). This registers the
1286 1291 download address at PyPI, which is not only useful to humans
1287 1292 browsing the site, but is also picked up by setuptools (the Eggs
1288 1293 machinery). Thanks to Ville and R. Kern for the info/discussion
1289 1294 on this.
1290 1295
1291 1296 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1292 1297
1293 1298 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1294 1299 This brings a lot of nice functionality to the pdb mode, which now
1295 1300 has tab-completion, syntax highlighting, and better stack handling
1296 1301 than before. Many thanks to Vivian De Smedt
1297 1302 <vivian-AT-vdesmedt.com> for the original patches.
1298 1303
1299 1304 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1300 1305
1301 1306 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1302 1307 sequence to consistently accept the banner argument. The
1303 1308 inconsistency was tripping SAGE, thanks to Gary Zablackis
1304 1309 <gzabl-AT-yahoo.com> for the report.
1305 1310
1306 1311 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1307 1312
1308 1313 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1309 1314 Fix bug where a naked 'alias' call in the ipythonrc file would
1310 1315 cause a crash. Bug reported by Jorgen Stenarson.
1311 1316
1312 1317 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1313 1318
1314 1319 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1315 1320 startup time.
1316 1321
1317 1322 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1318 1323 instances had introduced a bug with globals in normal code. Now
1319 1324 it's working in all cases.
1320 1325
1321 1326 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1322 1327 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1323 1328 has been introduced to set the default case sensitivity of the
1324 1329 searches. Users can still select either mode at runtime on a
1325 1330 per-search basis.
1326 1331
1327 1332 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1328 1333
1329 1334 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1330 1335 attributes in wildcard searches for subclasses. Modified version
1331 1336 of a patch by Jorgen.
1332 1337
1333 1338 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1334 1339
1335 1340 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1336 1341 embedded instances. I added a user_global_ns attribute to the
1337 1342 InteractiveShell class to handle this.
1338 1343
1339 1344 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1340 1345
1341 1346 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1342 1347 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1343 1348 (reported under win32, but may happen also in other platforms).
1344 1349 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1345 1350
1346 1351 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1347 1352
1348 1353 * IPython/Magic.py (magic_psearch): new support for wildcard
1349 1354 patterns. Now, typing ?a*b will list all names which begin with a
1350 1355 and end in b, for example. The %psearch magic has full
1351 1356 docstrings. Many thanks to JΓΆrgen Stenarson
1352 1357 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1353 1358 implementing this functionality.
1354 1359
1355 1360 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1356 1361
1357 1362 * Manual: fixed long-standing annoyance of double-dashes (as in
1358 1363 --prefix=~, for example) being stripped in the HTML version. This
1359 1364 is a latex2html bug, but a workaround was provided. Many thanks
1360 1365 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1361 1366 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1362 1367 rolling. This seemingly small issue had tripped a number of users
1363 1368 when first installing, so I'm glad to see it gone.
1364 1369
1365 1370 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1366 1371
1367 1372 * IPython/Extensions/numeric_formats.py: fix missing import,
1368 1373 reported by Stephen Walton.
1369 1374
1370 1375 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1371 1376
1372 1377 * IPython/demo.py: finish demo module, fully documented now.
1373 1378
1374 1379 * IPython/genutils.py (file_read): simple little utility to read a
1375 1380 file and ensure it's closed afterwards.
1376 1381
1377 1382 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1378 1383
1379 1384 * IPython/demo.py (Demo.__init__): added support for individually
1380 1385 tagging blocks for automatic execution.
1381 1386
1382 1387 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1383 1388 syntax-highlighted python sources, requested by John.
1384 1389
1385 1390 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1386 1391
1387 1392 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1388 1393 finishing.
1389 1394
1390 1395 * IPython/genutils.py (shlex_split): moved from Magic to here,
1391 1396 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1392 1397
1393 1398 * IPython/demo.py (Demo.__init__): added support for silent
1394 1399 blocks, improved marks as regexps, docstrings written.
1395 1400 (Demo.__init__): better docstring, added support for sys.argv.
1396 1401
1397 1402 * IPython/genutils.py (marquee): little utility used by the demo
1398 1403 code, handy in general.
1399 1404
1400 1405 * IPython/demo.py (Demo.__init__): new class for interactive
1401 1406 demos. Not documented yet, I just wrote it in a hurry for
1402 1407 scipy'05. Will docstring later.
1403 1408
1404 1409 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1405 1410
1406 1411 * IPython/Shell.py (sigint_handler): Drastic simplification which
1407 1412 also seems to make Ctrl-C work correctly across threads! This is
1408 1413 so simple, that I can't beleive I'd missed it before. Needs more
1409 1414 testing, though.
1410 1415 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1411 1416 like this before...
1412 1417
1413 1418 * IPython/genutils.py (get_home_dir): add protection against
1414 1419 non-dirs in win32 registry.
1415 1420
1416 1421 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1417 1422 bug where dict was mutated while iterating (pysh crash).
1418 1423
1419 1424 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1420 1425
1421 1426 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1422 1427 spurious newlines added by this routine. After a report by
1423 1428 F. Mantegazza.
1424 1429
1425 1430 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1426 1431
1427 1432 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1428 1433 calls. These were a leftover from the GTK 1.x days, and can cause
1429 1434 problems in certain cases (after a report by John Hunter).
1430 1435
1431 1436 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1432 1437 os.getcwd() fails at init time. Thanks to patch from David Remahl
1433 1438 <chmod007-AT-mac.com>.
1434 1439 (InteractiveShell.__init__): prevent certain special magics from
1435 1440 being shadowed by aliases. Closes
1436 1441 http://www.scipy.net/roundup/ipython/issue41.
1437 1442
1438 1443 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1439 1444
1440 1445 * IPython/iplib.py (InteractiveShell.complete): Added new
1441 1446 top-level completion method to expose the completion mechanism
1442 1447 beyond readline-based environments.
1443 1448
1444 1449 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1445 1450
1446 1451 * tools/ipsvnc (svnversion): fix svnversion capture.
1447 1452
1448 1453 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1449 1454 attribute to self, which was missing. Before, it was set by a
1450 1455 routine which in certain cases wasn't being called, so the
1451 1456 instance could end up missing the attribute. This caused a crash.
1452 1457 Closes http://www.scipy.net/roundup/ipython/issue40.
1453 1458
1454 1459 2005-08-16 Fernando Perez <fperez@colorado.edu>
1455 1460
1456 1461 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1457 1462 contains non-string attribute. Closes
1458 1463 http://www.scipy.net/roundup/ipython/issue38.
1459 1464
1460 1465 2005-08-14 Fernando Perez <fperez@colorado.edu>
1461 1466
1462 1467 * tools/ipsvnc: Minor improvements, to add changeset info.
1463 1468
1464 1469 2005-08-12 Fernando Perez <fperez@colorado.edu>
1465 1470
1466 1471 * IPython/iplib.py (runsource): remove self.code_to_run_src
1467 1472 attribute. I realized this is nothing more than
1468 1473 '\n'.join(self.buffer), and having the same data in two different
1469 1474 places is just asking for synchronization bugs. This may impact
1470 1475 people who have custom exception handlers, so I need to warn
1471 1476 ipython-dev about it (F. Mantegazza may use them).
1472 1477
1473 1478 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1474 1479
1475 1480 * IPython/genutils.py: fix 2.2 compatibility (generators)
1476 1481
1477 1482 2005-07-18 Fernando Perez <fperez@colorado.edu>
1478 1483
1479 1484 * IPython/genutils.py (get_home_dir): fix to help users with
1480 1485 invalid $HOME under win32.
1481 1486
1482 1487 2005-07-17 Fernando Perez <fperez@colorado.edu>
1483 1488
1484 1489 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1485 1490 some old hacks and clean up a bit other routines; code should be
1486 1491 simpler and a bit faster.
1487 1492
1488 1493 * IPython/iplib.py (interact): removed some last-resort attempts
1489 1494 to survive broken stdout/stderr. That code was only making it
1490 1495 harder to abstract out the i/o (necessary for gui integration),
1491 1496 and the crashes it could prevent were extremely rare in practice
1492 1497 (besides being fully user-induced in a pretty violent manner).
1493 1498
1494 1499 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1495 1500 Nothing major yet, but the code is simpler to read; this should
1496 1501 make it easier to do more serious modifications in the future.
1497 1502
1498 1503 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1499 1504 which broke in .15 (thanks to a report by Ville).
1500 1505
1501 1506 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1502 1507 be quite correct, I know next to nothing about unicode). This
1503 1508 will allow unicode strings to be used in prompts, amongst other
1504 1509 cases. It also will prevent ipython from crashing when unicode
1505 1510 shows up unexpectedly in many places. If ascii encoding fails, we
1506 1511 assume utf_8. Currently the encoding is not a user-visible
1507 1512 setting, though it could be made so if there is demand for it.
1508 1513
1509 1514 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1510 1515
1511 1516 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1512 1517
1513 1518 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1514 1519
1515 1520 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1516 1521 code can work transparently for 2.2/2.3.
1517 1522
1518 1523 2005-07-16 Fernando Perez <fperez@colorado.edu>
1519 1524
1520 1525 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1521 1526 out of the color scheme table used for coloring exception
1522 1527 tracebacks. This allows user code to add new schemes at runtime.
1523 1528 This is a minimally modified version of the patch at
1524 1529 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1525 1530 for the contribution.
1526 1531
1527 1532 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1528 1533 slightly modified version of the patch in
1529 1534 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1530 1535 to remove the previous try/except solution (which was costlier).
1531 1536 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1532 1537
1533 1538 2005-06-08 Fernando Perez <fperez@colorado.edu>
1534 1539
1535 1540 * IPython/iplib.py (write/write_err): Add methods to abstract all
1536 1541 I/O a bit more.
1537 1542
1538 1543 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1539 1544 warning, reported by Aric Hagberg, fix by JD Hunter.
1540 1545
1541 1546 2005-06-02 *** Released version 0.6.15
1542 1547
1543 1548 2005-06-01 Fernando Perez <fperez@colorado.edu>
1544 1549
1545 1550 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1546 1551 tab-completion of filenames within open-quoted strings. Note that
1547 1552 this requires that in ~/.ipython/ipythonrc, users change the
1548 1553 readline delimiters configuration to read:
1549 1554
1550 1555 readline_remove_delims -/~
1551 1556
1552 1557
1553 1558 2005-05-31 *** Released version 0.6.14
1554 1559
1555 1560 2005-05-29 Fernando Perez <fperez@colorado.edu>
1556 1561
1557 1562 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1558 1563 with files not on the filesystem. Reported by Eliyahu Sandler
1559 1564 <eli@gondolin.net>
1560 1565
1561 1566 2005-05-22 Fernando Perez <fperez@colorado.edu>
1562 1567
1563 1568 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1564 1569 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1565 1570
1566 1571 2005-05-19 Fernando Perez <fperez@colorado.edu>
1567 1572
1568 1573 * IPython/iplib.py (safe_execfile): close a file which could be
1569 1574 left open (causing problems in win32, which locks open files).
1570 1575 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1571 1576
1572 1577 2005-05-18 Fernando Perez <fperez@colorado.edu>
1573 1578
1574 1579 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1575 1580 keyword arguments correctly to safe_execfile().
1576 1581
1577 1582 2005-05-13 Fernando Perez <fperez@colorado.edu>
1578 1583
1579 1584 * ipython.1: Added info about Qt to manpage, and threads warning
1580 1585 to usage page (invoked with --help).
1581 1586
1582 1587 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1583 1588 new matcher (it goes at the end of the priority list) to do
1584 1589 tab-completion on named function arguments. Submitted by George
1585 1590 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1586 1591 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1587 1592 for more details.
1588 1593
1589 1594 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1590 1595 SystemExit exceptions in the script being run. Thanks to a report
1591 1596 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1592 1597 producing very annoying behavior when running unit tests.
1593 1598
1594 1599 2005-05-12 Fernando Perez <fperez@colorado.edu>
1595 1600
1596 1601 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1597 1602 which I'd broken (again) due to a changed regexp. In the process,
1598 1603 added ';' as an escape to auto-quote the whole line without
1599 1604 splitting its arguments. Thanks to a report by Jerry McRae
1600 1605 <qrs0xyc02-AT-sneakemail.com>.
1601 1606
1602 1607 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1603 1608 possible crashes caused by a TokenError. Reported by Ed Schofield
1604 1609 <schofield-AT-ftw.at>.
1605 1610
1606 1611 2005-05-06 Fernando Perez <fperez@colorado.edu>
1607 1612
1608 1613 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1609 1614
1610 1615 2005-04-29 Fernando Perez <fperez@colorado.edu>
1611 1616
1612 1617 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1613 1618 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1614 1619 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1615 1620 which provides support for Qt interactive usage (similar to the
1616 1621 existing one for WX and GTK). This had been often requested.
1617 1622
1618 1623 2005-04-14 *** Released version 0.6.13
1619 1624
1620 1625 2005-04-08 Fernando Perez <fperez@colorado.edu>
1621 1626
1622 1627 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1623 1628 from _ofind, which gets called on almost every input line. Now,
1624 1629 we only try to get docstrings if they are actually going to be
1625 1630 used (the overhead of fetching unnecessary docstrings can be
1626 1631 noticeable for certain objects, such as Pyro proxies).
1627 1632
1628 1633 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1629 1634 for completers. For some reason I had been passing them the state
1630 1635 variable, which completers never actually need, and was in
1631 1636 conflict with the rlcompleter API. Custom completers ONLY need to
1632 1637 take the text parameter.
1633 1638
1634 1639 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1635 1640 work correctly in pysh. I've also moved all the logic which used
1636 1641 to be in pysh.py here, which will prevent problems with future
1637 1642 upgrades. However, this time I must warn users to update their
1638 1643 pysh profile to include the line
1639 1644
1640 1645 import_all IPython.Extensions.InterpreterExec
1641 1646
1642 1647 because otherwise things won't work for them. They MUST also
1643 1648 delete pysh.py and the line
1644 1649
1645 1650 execfile pysh.py
1646 1651
1647 1652 from their ipythonrc-pysh.
1648 1653
1649 1654 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1650 1655 robust in the face of objects whose dir() returns non-strings
1651 1656 (which it shouldn't, but some broken libs like ITK do). Thanks to
1652 1657 a patch by John Hunter (implemented differently, though). Also
1653 1658 minor improvements by using .extend instead of + on lists.
1654 1659
1655 1660 * pysh.py:
1656 1661
1657 1662 2005-04-06 Fernando Perez <fperez@colorado.edu>
1658 1663
1659 1664 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1660 1665 by default, so that all users benefit from it. Those who don't
1661 1666 want it can still turn it off.
1662 1667
1663 1668 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1664 1669 config file, I'd forgotten about this, so users were getting it
1665 1670 off by default.
1666 1671
1667 1672 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1668 1673 consistency. Now magics can be called in multiline statements,
1669 1674 and python variables can be expanded in magic calls via $var.
1670 1675 This makes the magic system behave just like aliases or !system
1671 1676 calls.
1672 1677
1673 1678 2005-03-28 Fernando Perez <fperez@colorado.edu>
1674 1679
1675 1680 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1676 1681 expensive string additions for building command. Add support for
1677 1682 trailing ';' when autocall is used.
1678 1683
1679 1684 2005-03-26 Fernando Perez <fperez@colorado.edu>
1680 1685
1681 1686 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1682 1687 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1683 1688 ipython.el robust against prompts with any number of spaces
1684 1689 (including 0) after the ':' character.
1685 1690
1686 1691 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1687 1692 continuation prompt, which misled users to think the line was
1688 1693 already indented. Closes debian Bug#300847, reported to me by
1689 1694 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1690 1695
1691 1696 2005-03-23 Fernando Perez <fperez@colorado.edu>
1692 1697
1693 1698 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1694 1699 properly aligned if they have embedded newlines.
1695 1700
1696 1701 * IPython/iplib.py (runlines): Add a public method to expose
1697 1702 IPython's code execution machinery, so that users can run strings
1698 1703 as if they had been typed at the prompt interactively.
1699 1704 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1700 1705 methods which can call the system shell, but with python variable
1701 1706 expansion. The three such methods are: __IPYTHON__.system,
1702 1707 .getoutput and .getoutputerror. These need to be documented in a
1703 1708 'public API' section (to be written) of the manual.
1704 1709
1705 1710 2005-03-20 Fernando Perez <fperez@colorado.edu>
1706 1711
1707 1712 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1708 1713 for custom exception handling. This is quite powerful, and it
1709 1714 allows for user-installable exception handlers which can trap
1710 1715 custom exceptions at runtime and treat them separately from
1711 1716 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1712 1717 Mantegazza <mantegazza-AT-ill.fr>.
1713 1718 (InteractiveShell.set_custom_completer): public API function to
1714 1719 add new completers at runtime.
1715 1720
1716 1721 2005-03-19 Fernando Perez <fperez@colorado.edu>
1717 1722
1718 1723 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1719 1724 allow objects which provide their docstrings via non-standard
1720 1725 mechanisms (like Pyro proxies) to still be inspected by ipython's
1721 1726 ? system.
1722 1727
1723 1728 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1724 1729 automatic capture system. I tried quite hard to make it work
1725 1730 reliably, and simply failed. I tried many combinations with the
1726 1731 subprocess module, but eventually nothing worked in all needed
1727 1732 cases (not blocking stdin for the child, duplicating stdout
1728 1733 without blocking, etc). The new %sc/%sx still do capture to these
1729 1734 magical list/string objects which make shell use much more
1730 1735 conveninent, so not all is lost.
1731 1736
1732 1737 XXX - FIX MANUAL for the change above!
1733 1738
1734 1739 (runsource): I copied code.py's runsource() into ipython to modify
1735 1740 it a bit. Now the code object and source to be executed are
1736 1741 stored in ipython. This makes this info accessible to third-party
1737 1742 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1738 1743 Mantegazza <mantegazza-AT-ill.fr>.
1739 1744
1740 1745 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1741 1746 history-search via readline (like C-p/C-n). I'd wanted this for a
1742 1747 long time, but only recently found out how to do it. For users
1743 1748 who already have their ipythonrc files made and want this, just
1744 1749 add:
1745 1750
1746 1751 readline_parse_and_bind "\e[A": history-search-backward
1747 1752 readline_parse_and_bind "\e[B": history-search-forward
1748 1753
1749 1754 2005-03-18 Fernando Perez <fperez@colorado.edu>
1750 1755
1751 1756 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1752 1757 LSString and SList classes which allow transparent conversions
1753 1758 between list mode and whitespace-separated string.
1754 1759 (magic_r): Fix recursion problem in %r.
1755 1760
1756 1761 * IPython/genutils.py (LSString): New class to be used for
1757 1762 automatic storage of the results of all alias/system calls in _o
1758 1763 and _e (stdout/err). These provide a .l/.list attribute which
1759 1764 does automatic splitting on newlines. This means that for most
1760 1765 uses, you'll never need to do capturing of output with %sc/%sx
1761 1766 anymore, since ipython keeps this always done for you. Note that
1762 1767 only the LAST results are stored, the _o/e variables are
1763 1768 overwritten on each call. If you need to save their contents
1764 1769 further, simply bind them to any other name.
1765 1770
1766 1771 2005-03-17 Fernando Perez <fperez@colorado.edu>
1767 1772
1768 1773 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1769 1774 prompt namespace handling.
1770 1775
1771 1776 2005-03-16 Fernando Perez <fperez@colorado.edu>
1772 1777
1773 1778 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1774 1779 classic prompts to be '>>> ' (final space was missing, and it
1775 1780 trips the emacs python mode).
1776 1781 (BasePrompt.__str__): Added safe support for dynamic prompt
1777 1782 strings. Now you can set your prompt string to be '$x', and the
1778 1783 value of x will be printed from your interactive namespace. The
1779 1784 interpolation syntax includes the full Itpl support, so
1780 1785 ${foo()+x+bar()} is a valid prompt string now, and the function
1781 1786 calls will be made at runtime.
1782 1787
1783 1788 2005-03-15 Fernando Perez <fperez@colorado.edu>
1784 1789
1785 1790 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1786 1791 avoid name clashes in pylab. %hist still works, it just forwards
1787 1792 the call to %history.
1788 1793
1789 1794 2005-03-02 *** Released version 0.6.12
1790 1795
1791 1796 2005-03-02 Fernando Perez <fperez@colorado.edu>
1792 1797
1793 1798 * IPython/iplib.py (handle_magic): log magic calls properly as
1794 1799 ipmagic() function calls.
1795 1800
1796 1801 * IPython/Magic.py (magic_time): Improved %time to support
1797 1802 statements and provide wall-clock as well as CPU time.
1798 1803
1799 1804 2005-02-27 Fernando Perez <fperez@colorado.edu>
1800 1805
1801 1806 * IPython/hooks.py: New hooks module, to expose user-modifiable
1802 1807 IPython functionality in a clean manner. For now only the editor
1803 1808 hook is actually written, and other thigns which I intend to turn
1804 1809 into proper hooks aren't yet there. The display and prefilter
1805 1810 stuff, for example, should be hooks. But at least now the
1806 1811 framework is in place, and the rest can be moved here with more
1807 1812 time later. IPython had had a .hooks variable for a long time for
1808 1813 this purpose, but I'd never actually used it for anything.
1809 1814
1810 1815 2005-02-26 Fernando Perez <fperez@colorado.edu>
1811 1816
1812 1817 * IPython/ipmaker.py (make_IPython): make the default ipython
1813 1818 directory be called _ipython under win32, to follow more the
1814 1819 naming peculiarities of that platform (where buggy software like
1815 1820 Visual Sourcesafe breaks with .named directories). Reported by
1816 1821 Ville Vainio.
1817 1822
1818 1823 2005-02-23 Fernando Perez <fperez@colorado.edu>
1819 1824
1820 1825 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1821 1826 auto_aliases for win32 which were causing problems. Users can
1822 1827 define the ones they personally like.
1823 1828
1824 1829 2005-02-21 Fernando Perez <fperez@colorado.edu>
1825 1830
1826 1831 * IPython/Magic.py (magic_time): new magic to time execution of
1827 1832 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1828 1833
1829 1834 2005-02-19 Fernando Perez <fperez@colorado.edu>
1830 1835
1831 1836 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1832 1837 into keys (for prompts, for example).
1833 1838
1834 1839 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1835 1840 prompts in case users want them. This introduces a small behavior
1836 1841 change: ipython does not automatically add a space to all prompts
1837 1842 anymore. To get the old prompts with a space, users should add it
1838 1843 manually to their ipythonrc file, so for example prompt_in1 should
1839 1844 now read 'In [\#]: ' instead of 'In [\#]:'.
1840 1845 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1841 1846 file) to control left-padding of secondary prompts.
1842 1847
1843 1848 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1844 1849 the profiler can't be imported. Fix for Debian, which removed
1845 1850 profile.py because of License issues. I applied a slightly
1846 1851 modified version of the original Debian patch at
1847 1852 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1848 1853
1849 1854 2005-02-17 Fernando Perez <fperez@colorado.edu>
1850 1855
1851 1856 * IPython/genutils.py (native_line_ends): Fix bug which would
1852 1857 cause improper line-ends under win32 b/c I was not opening files
1853 1858 in binary mode. Bug report and fix thanks to Ville.
1854 1859
1855 1860 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1856 1861 trying to catch spurious foo[1] autocalls. My fix actually broke
1857 1862 ',/' autoquote/call with explicit escape (bad regexp).
1858 1863
1859 1864 2005-02-15 *** Released version 0.6.11
1860 1865
1861 1866 2005-02-14 Fernando Perez <fperez@colorado.edu>
1862 1867
1863 1868 * IPython/background_jobs.py: New background job management
1864 1869 subsystem. This is implemented via a new set of classes, and
1865 1870 IPython now provides a builtin 'jobs' object for background job
1866 1871 execution. A convenience %bg magic serves as a lightweight
1867 1872 frontend for starting the more common type of calls. This was
1868 1873 inspired by discussions with B. Granger and the BackgroundCommand
1869 1874 class described in the book Python Scripting for Computational
1870 1875 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1871 1876 (although ultimately no code from this text was used, as IPython's
1872 1877 system is a separate implementation).
1873 1878
1874 1879 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1875 1880 to control the completion of single/double underscore names
1876 1881 separately. As documented in the example ipytonrc file, the
1877 1882 readline_omit__names variable can now be set to 2, to omit even
1878 1883 single underscore names. Thanks to a patch by Brian Wong
1879 1884 <BrianWong-AT-AirgoNetworks.Com>.
1880 1885 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1881 1886 be autocalled as foo([1]) if foo were callable. A problem for
1882 1887 things which are both callable and implement __getitem__.
1883 1888 (init_readline): Fix autoindentation for win32. Thanks to a patch
1884 1889 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1885 1890
1886 1891 2005-02-12 Fernando Perez <fperez@colorado.edu>
1887 1892
1888 1893 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1889 1894 which I had written long ago to sort out user error messages which
1890 1895 may occur during startup. This seemed like a good idea initially,
1891 1896 but it has proven a disaster in retrospect. I don't want to
1892 1897 change much code for now, so my fix is to set the internal 'debug'
1893 1898 flag to true everywhere, whose only job was precisely to control
1894 1899 this subsystem. This closes issue 28 (as well as avoiding all
1895 1900 sorts of strange hangups which occur from time to time).
1896 1901
1897 1902 2005-02-07 Fernando Perez <fperez@colorado.edu>
1898 1903
1899 1904 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1900 1905 previous call produced a syntax error.
1901 1906
1902 1907 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1903 1908 classes without constructor.
1904 1909
1905 1910 2005-02-06 Fernando Perez <fperez@colorado.edu>
1906 1911
1907 1912 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1908 1913 completions with the results of each matcher, so we return results
1909 1914 to the user from all namespaces. This breaks with ipython
1910 1915 tradition, but I think it's a nicer behavior. Now you get all
1911 1916 possible completions listed, from all possible namespaces (python,
1912 1917 filesystem, magics...) After a request by John Hunter
1913 1918 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1914 1919
1915 1920 2005-02-05 Fernando Perez <fperez@colorado.edu>
1916 1921
1917 1922 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1918 1923 the call had quote characters in it (the quotes were stripped).
1919 1924
1920 1925 2005-01-31 Fernando Perez <fperez@colorado.edu>
1921 1926
1922 1927 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1923 1928 Itpl.itpl() to make the code more robust against psyco
1924 1929 optimizations.
1925 1930
1926 1931 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1927 1932 of causing an exception. Quicker, cleaner.
1928 1933
1929 1934 2005-01-28 Fernando Perez <fperez@colorado.edu>
1930 1935
1931 1936 * scripts/ipython_win_post_install.py (install): hardcode
1932 1937 sys.prefix+'python.exe' as the executable path. It turns out that
1933 1938 during the post-installation run, sys.executable resolves to the
1934 1939 name of the binary installer! I should report this as a distutils
1935 1940 bug, I think. I updated the .10 release with this tiny fix, to
1936 1941 avoid annoying the lists further.
1937 1942
1938 1943 2005-01-27 *** Released version 0.6.10
1939 1944
1940 1945 2005-01-27 Fernando Perez <fperez@colorado.edu>
1941 1946
1942 1947 * IPython/numutils.py (norm): Added 'inf' as optional name for
1943 1948 L-infinity norm, included references to mathworld.com for vector
1944 1949 norm definitions.
1945 1950 (amin/amax): added amin/amax for array min/max. Similar to what
1946 1951 pylab ships with after the recent reorganization of names.
1947 1952 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1948 1953
1949 1954 * ipython.el: committed Alex's recent fixes and improvements.
1950 1955 Tested with python-mode from CVS, and it looks excellent. Since
1951 1956 python-mode hasn't released anything in a while, I'm temporarily
1952 1957 putting a copy of today's CVS (v 4.70) of python-mode in:
1953 1958 http://ipython.scipy.org/tmp/python-mode.el
1954 1959
1955 1960 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1956 1961 sys.executable for the executable name, instead of assuming it's
1957 1962 called 'python.exe' (the post-installer would have produced broken
1958 1963 setups on systems with a differently named python binary).
1959 1964
1960 1965 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1961 1966 references to os.linesep, to make the code more
1962 1967 platform-independent. This is also part of the win32 coloring
1963 1968 fixes.
1964 1969
1965 1970 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1966 1971 lines, which actually cause coloring bugs because the length of
1967 1972 the line is very difficult to correctly compute with embedded
1968 1973 escapes. This was the source of all the coloring problems under
1969 1974 Win32. I think that _finally_, Win32 users have a properly
1970 1975 working ipython in all respects. This would never have happened
1971 1976 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1972 1977
1973 1978 2005-01-26 *** Released version 0.6.9
1974 1979
1975 1980 2005-01-25 Fernando Perez <fperez@colorado.edu>
1976 1981
1977 1982 * setup.py: finally, we have a true Windows installer, thanks to
1978 1983 the excellent work of Viktor Ransmayr
1979 1984 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1980 1985 Windows users. The setup routine is quite a bit cleaner thanks to
1981 1986 this, and the post-install script uses the proper functions to
1982 1987 allow a clean de-installation using the standard Windows Control
1983 1988 Panel.
1984 1989
1985 1990 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1986 1991 environment variable under all OSes (including win32) if
1987 1992 available. This will give consistency to win32 users who have set
1988 1993 this variable for any reason. If os.environ['HOME'] fails, the
1989 1994 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1990 1995
1991 1996 2005-01-24 Fernando Perez <fperez@colorado.edu>
1992 1997
1993 1998 * IPython/numutils.py (empty_like): add empty_like(), similar to
1994 1999 zeros_like() but taking advantage of the new empty() Numeric routine.
1995 2000
1996 2001 2005-01-23 *** Released version 0.6.8
1997 2002
1998 2003 2005-01-22 Fernando Perez <fperez@colorado.edu>
1999 2004
2000 2005 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2001 2006 automatic show() calls. After discussing things with JDH, it
2002 2007 turns out there are too many corner cases where this can go wrong.
2003 2008 It's best not to try to be 'too smart', and simply have ipython
2004 2009 reproduce as much as possible the default behavior of a normal
2005 2010 python shell.
2006 2011
2007 2012 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2008 2013 line-splitting regexp and _prefilter() to avoid calling getattr()
2009 2014 on assignments. This closes
2010 2015 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2011 2016 readline uses getattr(), so a simple <TAB> keypress is still
2012 2017 enough to trigger getattr() calls on an object.
2013 2018
2014 2019 2005-01-21 Fernando Perez <fperez@colorado.edu>
2015 2020
2016 2021 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2017 2022 docstring under pylab so it doesn't mask the original.
2018 2023
2019 2024 2005-01-21 *** Released version 0.6.7
2020 2025
2021 2026 2005-01-21 Fernando Perez <fperez@colorado.edu>
2022 2027
2023 2028 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2024 2029 signal handling for win32 users in multithreaded mode.
2025 2030
2026 2031 2005-01-17 Fernando Perez <fperez@colorado.edu>
2027 2032
2028 2033 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2029 2034 instances with no __init__. After a crash report by Norbert Nemec
2030 2035 <Norbert-AT-nemec-online.de>.
2031 2036
2032 2037 2005-01-14 Fernando Perez <fperez@colorado.edu>
2033 2038
2034 2039 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2035 2040 names for verbose exceptions, when multiple dotted names and the
2036 2041 'parent' object were present on the same line.
2037 2042
2038 2043 2005-01-11 Fernando Perez <fperez@colorado.edu>
2039 2044
2040 2045 * IPython/genutils.py (flag_calls): new utility to trap and flag
2041 2046 calls in functions. I need it to clean up matplotlib support.
2042 2047 Also removed some deprecated code in genutils.
2043 2048
2044 2049 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2045 2050 that matplotlib scripts called with %run, which don't call show()
2046 2051 themselves, still have their plotting windows open.
2047 2052
2048 2053 2005-01-05 Fernando Perez <fperez@colorado.edu>
2049 2054
2050 2055 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2051 2056 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2052 2057
2053 2058 2004-12-19 Fernando Perez <fperez@colorado.edu>
2054 2059
2055 2060 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2056 2061 parent_runcode, which was an eyesore. The same result can be
2057 2062 obtained with Python's regular superclass mechanisms.
2058 2063
2059 2064 2004-12-17 Fernando Perez <fperez@colorado.edu>
2060 2065
2061 2066 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2062 2067 reported by Prabhu.
2063 2068 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2064 2069 sys.stderr) instead of explicitly calling sys.stderr. This helps
2065 2070 maintain our I/O abstractions clean, for future GUI embeddings.
2066 2071
2067 2072 * IPython/genutils.py (info): added new utility for sys.stderr
2068 2073 unified info message handling (thin wrapper around warn()).
2069 2074
2070 2075 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2071 2076 composite (dotted) names on verbose exceptions.
2072 2077 (VerboseTB.nullrepr): harden against another kind of errors which
2073 2078 Python's inspect module can trigger, and which were crashing
2074 2079 IPython. Thanks to a report by Marco Lombardi
2075 2080 <mlombard-AT-ma010192.hq.eso.org>.
2076 2081
2077 2082 2004-12-13 *** Released version 0.6.6
2078 2083
2079 2084 2004-12-12 Fernando Perez <fperez@colorado.edu>
2080 2085
2081 2086 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2082 2087 generated by pygtk upon initialization if it was built without
2083 2088 threads (for matplotlib users). After a crash reported by
2084 2089 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2085 2090
2086 2091 * IPython/ipmaker.py (make_IPython): fix small bug in the
2087 2092 import_some parameter for multiple imports.
2088 2093
2089 2094 * IPython/iplib.py (ipmagic): simplified the interface of
2090 2095 ipmagic() to take a single string argument, just as it would be
2091 2096 typed at the IPython cmd line.
2092 2097 (ipalias): Added new ipalias() with an interface identical to
2093 2098 ipmagic(). This completes exposing a pure python interface to the
2094 2099 alias and magic system, which can be used in loops or more complex
2095 2100 code where IPython's automatic line mangling is not active.
2096 2101
2097 2102 * IPython/genutils.py (timing): changed interface of timing to
2098 2103 simply run code once, which is the most common case. timings()
2099 2104 remains unchanged, for the cases where you want multiple runs.
2100 2105
2101 2106 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2102 2107 bug where Python2.2 crashes with exec'ing code which does not end
2103 2108 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2104 2109 before.
2105 2110
2106 2111 2004-12-10 Fernando Perez <fperez@colorado.edu>
2107 2112
2108 2113 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2109 2114 -t to -T, to accomodate the new -t flag in %run (the %run and
2110 2115 %prun options are kind of intermixed, and it's not easy to change
2111 2116 this with the limitations of python's getopt).
2112 2117
2113 2118 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2114 2119 the execution of scripts. It's not as fine-tuned as timeit.py,
2115 2120 but it works from inside ipython (and under 2.2, which lacks
2116 2121 timeit.py). Optionally a number of runs > 1 can be given for
2117 2122 timing very short-running code.
2118 2123
2119 2124 * IPython/genutils.py (uniq_stable): new routine which returns a
2120 2125 list of unique elements in any iterable, but in stable order of
2121 2126 appearance. I needed this for the ultraTB fixes, and it's a handy
2122 2127 utility.
2123 2128
2124 2129 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2125 2130 dotted names in Verbose exceptions. This had been broken since
2126 2131 the very start, now x.y will properly be printed in a Verbose
2127 2132 traceback, instead of x being shown and y appearing always as an
2128 2133 'undefined global'. Getting this to work was a bit tricky,
2129 2134 because by default python tokenizers are stateless. Saved by
2130 2135 python's ability to easily add a bit of state to an arbitrary
2131 2136 function (without needing to build a full-blown callable object).
2132 2137
2133 2138 Also big cleanup of this code, which had horrendous runtime
2134 2139 lookups of zillions of attributes for colorization. Moved all
2135 2140 this code into a few templates, which make it cleaner and quicker.
2136 2141
2137 2142 Printout quality was also improved for Verbose exceptions: one
2138 2143 variable per line, and memory addresses are printed (this can be
2139 2144 quite handy in nasty debugging situations, which is what Verbose
2140 2145 is for).
2141 2146
2142 2147 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2143 2148 the command line as scripts to be loaded by embedded instances.
2144 2149 Doing so has the potential for an infinite recursion if there are
2145 2150 exceptions thrown in the process. This fixes a strange crash
2146 2151 reported by Philippe MULLER <muller-AT-irit.fr>.
2147 2152
2148 2153 2004-12-09 Fernando Perez <fperez@colorado.edu>
2149 2154
2150 2155 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2151 2156 to reflect new names in matplotlib, which now expose the
2152 2157 matlab-compatible interface via a pylab module instead of the
2153 2158 'matlab' name. The new code is backwards compatible, so users of
2154 2159 all matplotlib versions are OK. Patch by J. Hunter.
2155 2160
2156 2161 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2157 2162 of __init__ docstrings for instances (class docstrings are already
2158 2163 automatically printed). Instances with customized docstrings
2159 2164 (indep. of the class) are also recognized and all 3 separate
2160 2165 docstrings are printed (instance, class, constructor). After some
2161 2166 comments/suggestions by J. Hunter.
2162 2167
2163 2168 2004-12-05 Fernando Perez <fperez@colorado.edu>
2164 2169
2165 2170 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2166 2171 warnings when tab-completion fails and triggers an exception.
2167 2172
2168 2173 2004-12-03 Fernando Perez <fperez@colorado.edu>
2169 2174
2170 2175 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2171 2176 be triggered when using 'run -p'. An incorrect option flag was
2172 2177 being set ('d' instead of 'D').
2173 2178 (manpage): fix missing escaped \- sign.
2174 2179
2175 2180 2004-11-30 *** Released version 0.6.5
2176 2181
2177 2182 2004-11-30 Fernando Perez <fperez@colorado.edu>
2178 2183
2179 2184 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2180 2185 setting with -d option.
2181 2186
2182 2187 * setup.py (docfiles): Fix problem where the doc glob I was using
2183 2188 was COMPLETELY BROKEN. It was giving the right files by pure
2184 2189 accident, but failed once I tried to include ipython.el. Note:
2185 2190 glob() does NOT allow you to do exclusion on multiple endings!
2186 2191
2187 2192 2004-11-29 Fernando Perez <fperez@colorado.edu>
2188 2193
2189 2194 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2190 2195 the manpage as the source. Better formatting & consistency.
2191 2196
2192 2197 * IPython/Magic.py (magic_run): Added new -d option, to run
2193 2198 scripts under the control of the python pdb debugger. Note that
2194 2199 this required changing the %prun option -d to -D, to avoid a clash
2195 2200 (since %run must pass options to %prun, and getopt is too dumb to
2196 2201 handle options with string values with embedded spaces). Thanks
2197 2202 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2198 2203 (magic_who_ls): added type matching to %who and %whos, so that one
2199 2204 can filter their output to only include variables of certain
2200 2205 types. Another suggestion by Matthew.
2201 2206 (magic_whos): Added memory summaries in kb and Mb for arrays.
2202 2207 (magic_who): Improve formatting (break lines every 9 vars).
2203 2208
2204 2209 2004-11-28 Fernando Perez <fperez@colorado.edu>
2205 2210
2206 2211 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2207 2212 cache when empty lines were present.
2208 2213
2209 2214 2004-11-24 Fernando Perez <fperez@colorado.edu>
2210 2215
2211 2216 * IPython/usage.py (__doc__): document the re-activated threading
2212 2217 options for WX and GTK.
2213 2218
2214 2219 2004-11-23 Fernando Perez <fperez@colorado.edu>
2215 2220
2216 2221 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2217 2222 the -wthread and -gthread options, along with a new -tk one to try
2218 2223 and coordinate Tk threading with wx/gtk. The tk support is very
2219 2224 platform dependent, since it seems to require Tcl and Tk to be
2220 2225 built with threads (Fedora1/2 appears NOT to have it, but in
2221 2226 Prabhu's Debian boxes it works OK). But even with some Tk
2222 2227 limitations, this is a great improvement.
2223 2228
2224 2229 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2225 2230 info in user prompts. Patch by Prabhu.
2226 2231
2227 2232 2004-11-18 Fernando Perez <fperez@colorado.edu>
2228 2233
2229 2234 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2230 2235 EOFErrors and bail, to avoid infinite loops if a non-terminating
2231 2236 file is fed into ipython. Patch submitted in issue 19 by user,
2232 2237 many thanks.
2233 2238
2234 2239 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2235 2240 autoquote/parens in continuation prompts, which can cause lots of
2236 2241 problems. Closes roundup issue 20.
2237 2242
2238 2243 2004-11-17 Fernando Perez <fperez@colorado.edu>
2239 2244
2240 2245 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2241 2246 reported as debian bug #280505. I'm not sure my local changelog
2242 2247 entry has the proper debian format (Jack?).
2243 2248
2244 2249 2004-11-08 *** Released version 0.6.4
2245 2250
2246 2251 2004-11-08 Fernando Perez <fperez@colorado.edu>
2247 2252
2248 2253 * IPython/iplib.py (init_readline): Fix exit message for Windows
2249 2254 when readline is active. Thanks to a report by Eric Jones
2250 2255 <eric-AT-enthought.com>.
2251 2256
2252 2257 2004-11-07 Fernando Perez <fperez@colorado.edu>
2253 2258
2254 2259 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2255 2260 sometimes seen by win2k/cygwin users.
2256 2261
2257 2262 2004-11-06 Fernando Perez <fperez@colorado.edu>
2258 2263
2259 2264 * IPython/iplib.py (interact): Change the handling of %Exit from
2260 2265 trying to propagate a SystemExit to an internal ipython flag.
2261 2266 This is less elegant than using Python's exception mechanism, but
2262 2267 I can't get that to work reliably with threads, so under -pylab
2263 2268 %Exit was hanging IPython. Cross-thread exception handling is
2264 2269 really a bitch. Thaks to a bug report by Stephen Walton
2265 2270 <stephen.walton-AT-csun.edu>.
2266 2271
2267 2272 2004-11-04 Fernando Perez <fperez@colorado.edu>
2268 2273
2269 2274 * IPython/iplib.py (raw_input_original): store a pointer to the
2270 2275 true raw_input to harden against code which can modify it
2271 2276 (wx.py.PyShell does this and would otherwise crash ipython).
2272 2277 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2273 2278
2274 2279 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2275 2280 Ctrl-C problem, which does not mess up the input line.
2276 2281
2277 2282 2004-11-03 Fernando Perez <fperez@colorado.edu>
2278 2283
2279 2284 * IPython/Release.py: Changed licensing to BSD, in all files.
2280 2285 (name): lowercase name for tarball/RPM release.
2281 2286
2282 2287 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2283 2288 use throughout ipython.
2284 2289
2285 2290 * IPython/Magic.py (Magic._ofind): Switch to using the new
2286 2291 OInspect.getdoc() function.
2287 2292
2288 2293 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2289 2294 of the line currently being canceled via Ctrl-C. It's extremely
2290 2295 ugly, but I don't know how to do it better (the problem is one of
2291 2296 handling cross-thread exceptions).
2292 2297
2293 2298 2004-10-28 Fernando Perez <fperez@colorado.edu>
2294 2299
2295 2300 * IPython/Shell.py (signal_handler): add signal handlers to trap
2296 2301 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2297 2302 report by Francesc Alted.
2298 2303
2299 2304 2004-10-21 Fernando Perez <fperez@colorado.edu>
2300 2305
2301 2306 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2302 2307 to % for pysh syntax extensions.
2303 2308
2304 2309 2004-10-09 Fernando Perez <fperez@colorado.edu>
2305 2310
2306 2311 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2307 2312 arrays to print a more useful summary, without calling str(arr).
2308 2313 This avoids the problem of extremely lengthy computations which
2309 2314 occur if arr is large, and appear to the user as a system lockup
2310 2315 with 100% cpu activity. After a suggestion by Kristian Sandberg
2311 2316 <Kristian.Sandberg@colorado.edu>.
2312 2317 (Magic.__init__): fix bug in global magic escapes not being
2313 2318 correctly set.
2314 2319
2315 2320 2004-10-08 Fernando Perez <fperez@colorado.edu>
2316 2321
2317 2322 * IPython/Magic.py (__license__): change to absolute imports of
2318 2323 ipython's own internal packages, to start adapting to the absolute
2319 2324 import requirement of PEP-328.
2320 2325
2321 2326 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2322 2327 files, and standardize author/license marks through the Release
2323 2328 module instead of having per/file stuff (except for files with
2324 2329 particular licenses, like the MIT/PSF-licensed codes).
2325 2330
2326 2331 * IPython/Debugger.py: remove dead code for python 2.1
2327 2332
2328 2333 2004-10-04 Fernando Perez <fperez@colorado.edu>
2329 2334
2330 2335 * IPython/iplib.py (ipmagic): New function for accessing magics
2331 2336 via a normal python function call.
2332 2337
2333 2338 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2334 2339 from '@' to '%', to accomodate the new @decorator syntax of python
2335 2340 2.4.
2336 2341
2337 2342 2004-09-29 Fernando Perez <fperez@colorado.edu>
2338 2343
2339 2344 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2340 2345 matplotlib.use to prevent running scripts which try to switch
2341 2346 interactive backends from within ipython. This will just crash
2342 2347 the python interpreter, so we can't allow it (but a detailed error
2343 2348 is given to the user).
2344 2349
2345 2350 2004-09-28 Fernando Perez <fperez@colorado.edu>
2346 2351
2347 2352 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2348 2353 matplotlib-related fixes so that using @run with non-matplotlib
2349 2354 scripts doesn't pop up spurious plot windows. This requires
2350 2355 matplotlib >= 0.63, where I had to make some changes as well.
2351 2356
2352 2357 * IPython/ipmaker.py (make_IPython): update version requirement to
2353 2358 python 2.2.
2354 2359
2355 2360 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2356 2361 banner arg for embedded customization.
2357 2362
2358 2363 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2359 2364 explicit uses of __IP as the IPython's instance name. Now things
2360 2365 are properly handled via the shell.name value. The actual code
2361 2366 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2362 2367 is much better than before. I'll clean things completely when the
2363 2368 magic stuff gets a real overhaul.
2364 2369
2365 2370 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2366 2371 minor changes to debian dir.
2367 2372
2368 2373 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2369 2374 pointer to the shell itself in the interactive namespace even when
2370 2375 a user-supplied dict is provided. This is needed for embedding
2371 2376 purposes (found by tests with Michel Sanner).
2372 2377
2373 2378 2004-09-27 Fernando Perez <fperez@colorado.edu>
2374 2379
2375 2380 * IPython/UserConfig/ipythonrc: remove []{} from
2376 2381 readline_remove_delims, so that things like [modname.<TAB> do
2377 2382 proper completion. This disables [].TAB, but that's a less common
2378 2383 case than module names in list comprehensions, for example.
2379 2384 Thanks to a report by Andrea Riciputi.
2380 2385
2381 2386 2004-09-09 Fernando Perez <fperez@colorado.edu>
2382 2387
2383 2388 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2384 2389 blocking problems in win32 and osx. Fix by John.
2385 2390
2386 2391 2004-09-08 Fernando Perez <fperez@colorado.edu>
2387 2392
2388 2393 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2389 2394 for Win32 and OSX. Fix by John Hunter.
2390 2395
2391 2396 2004-08-30 *** Released version 0.6.3
2392 2397
2393 2398 2004-08-30 Fernando Perez <fperez@colorado.edu>
2394 2399
2395 2400 * setup.py (isfile): Add manpages to list of dependent files to be
2396 2401 updated.
2397 2402
2398 2403 2004-08-27 Fernando Perez <fperez@colorado.edu>
2399 2404
2400 2405 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2401 2406 for now. They don't really work with standalone WX/GTK code
2402 2407 (though matplotlib IS working fine with both of those backends).
2403 2408 This will neeed much more testing. I disabled most things with
2404 2409 comments, so turning it back on later should be pretty easy.
2405 2410
2406 2411 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2407 2412 autocalling of expressions like r'foo', by modifying the line
2408 2413 split regexp. Closes
2409 2414 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2410 2415 Riley <ipythonbugs-AT-sabi.net>.
2411 2416 (InteractiveShell.mainloop): honor --nobanner with banner
2412 2417 extensions.
2413 2418
2414 2419 * IPython/Shell.py: Significant refactoring of all classes, so
2415 2420 that we can really support ALL matplotlib backends and threading
2416 2421 models (John spotted a bug with Tk which required this). Now we
2417 2422 should support single-threaded, WX-threads and GTK-threads, both
2418 2423 for generic code and for matplotlib.
2419 2424
2420 2425 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2421 2426 -pylab, to simplify things for users. Will also remove the pylab
2422 2427 profile, since now all of matplotlib configuration is directly
2423 2428 handled here. This also reduces startup time.
2424 2429
2425 2430 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2426 2431 shell wasn't being correctly called. Also in IPShellWX.
2427 2432
2428 2433 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2429 2434 fine-tune banner.
2430 2435
2431 2436 * IPython/numutils.py (spike): Deprecate these spike functions,
2432 2437 delete (long deprecated) gnuplot_exec handler.
2433 2438
2434 2439 2004-08-26 Fernando Perez <fperez@colorado.edu>
2435 2440
2436 2441 * ipython.1: Update for threading options, plus some others which
2437 2442 were missing.
2438 2443
2439 2444 * IPython/ipmaker.py (__call__): Added -wthread option for
2440 2445 wxpython thread handling. Make sure threading options are only
2441 2446 valid at the command line.
2442 2447
2443 2448 * scripts/ipython: moved shell selection into a factory function
2444 2449 in Shell.py, to keep the starter script to a minimum.
2445 2450
2446 2451 2004-08-25 Fernando Perez <fperez@colorado.edu>
2447 2452
2448 2453 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2449 2454 John. Along with some recent changes he made to matplotlib, the
2450 2455 next versions of both systems should work very well together.
2451 2456
2452 2457 2004-08-24 Fernando Perez <fperez@colorado.edu>
2453 2458
2454 2459 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2455 2460 tried to switch the profiling to using hotshot, but I'm getting
2456 2461 strange errors from prof.runctx() there. I may be misreading the
2457 2462 docs, but it looks weird. For now the profiling code will
2458 2463 continue to use the standard profiler.
2459 2464
2460 2465 2004-08-23 Fernando Perez <fperez@colorado.edu>
2461 2466
2462 2467 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2463 2468 threaded shell, by John Hunter. It's not quite ready yet, but
2464 2469 close.
2465 2470
2466 2471 2004-08-22 Fernando Perez <fperez@colorado.edu>
2467 2472
2468 2473 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2469 2474 in Magic and ultraTB.
2470 2475
2471 2476 * ipython.1: document threading options in manpage.
2472 2477
2473 2478 * scripts/ipython: Changed name of -thread option to -gthread,
2474 2479 since this is GTK specific. I want to leave the door open for a
2475 2480 -wthread option for WX, which will most likely be necessary. This
2476 2481 change affects usage and ipmaker as well.
2477 2482
2478 2483 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2479 2484 handle the matplotlib shell issues. Code by John Hunter
2480 2485 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2481 2486 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2482 2487 broken (and disabled for end users) for now, but it puts the
2483 2488 infrastructure in place.
2484 2489
2485 2490 2004-08-21 Fernando Perez <fperez@colorado.edu>
2486 2491
2487 2492 * ipythonrc-pylab: Add matplotlib support.
2488 2493
2489 2494 * matplotlib_config.py: new files for matplotlib support, part of
2490 2495 the pylab profile.
2491 2496
2492 2497 * IPython/usage.py (__doc__): documented the threading options.
2493 2498
2494 2499 2004-08-20 Fernando Perez <fperez@colorado.edu>
2495 2500
2496 2501 * ipython: Modified the main calling routine to handle the -thread
2497 2502 and -mpthread options. This needs to be done as a top-level hack,
2498 2503 because it determines which class to instantiate for IPython
2499 2504 itself.
2500 2505
2501 2506 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2502 2507 classes to support multithreaded GTK operation without blocking,
2503 2508 and matplotlib with all backends. This is a lot of still very
2504 2509 experimental code, and threads are tricky. So it may still have a
2505 2510 few rough edges... This code owes a lot to
2506 2511 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2507 2512 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2508 2513 to John Hunter for all the matplotlib work.
2509 2514
2510 2515 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2511 2516 options for gtk thread and matplotlib support.
2512 2517
2513 2518 2004-08-16 Fernando Perez <fperez@colorado.edu>
2514 2519
2515 2520 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2516 2521 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2517 2522 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2518 2523
2519 2524 2004-08-11 Fernando Perez <fperez@colorado.edu>
2520 2525
2521 2526 * setup.py (isfile): Fix build so documentation gets updated for
2522 2527 rpms (it was only done for .tgz builds).
2523 2528
2524 2529 2004-08-10 Fernando Perez <fperez@colorado.edu>
2525 2530
2526 2531 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2527 2532
2528 2533 * iplib.py : Silence syntax error exceptions in tab-completion.
2529 2534
2530 2535 2004-08-05 Fernando Perez <fperez@colorado.edu>
2531 2536
2532 2537 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2533 2538 'color off' mark for continuation prompts. This was causing long
2534 2539 continuation lines to mis-wrap.
2535 2540
2536 2541 2004-08-01 Fernando Perez <fperez@colorado.edu>
2537 2542
2538 2543 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2539 2544 for building ipython to be a parameter. All this is necessary
2540 2545 right now to have a multithreaded version, but this insane
2541 2546 non-design will be cleaned up soon. For now, it's a hack that
2542 2547 works.
2543 2548
2544 2549 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2545 2550 args in various places. No bugs so far, but it's a dangerous
2546 2551 practice.
2547 2552
2548 2553 2004-07-31 Fernando Perez <fperez@colorado.edu>
2549 2554
2550 2555 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2551 2556 fix completion of files with dots in their names under most
2552 2557 profiles (pysh was OK because the completion order is different).
2553 2558
2554 2559 2004-07-27 Fernando Perez <fperez@colorado.edu>
2555 2560
2556 2561 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2557 2562 keywords manually, b/c the one in keyword.py was removed in python
2558 2563 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2559 2564 This is NOT a bug under python 2.3 and earlier.
2560 2565
2561 2566 2004-07-26 Fernando Perez <fperez@colorado.edu>
2562 2567
2563 2568 * IPython/ultraTB.py (VerboseTB.text): Add another
2564 2569 linecache.checkcache() call to try to prevent inspect.py from
2565 2570 crashing under python 2.3. I think this fixes
2566 2571 http://www.scipy.net/roundup/ipython/issue17.
2567 2572
2568 2573 2004-07-26 *** Released version 0.6.2
2569 2574
2570 2575 2004-07-26 Fernando Perez <fperez@colorado.edu>
2571 2576
2572 2577 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2573 2578 fail for any number.
2574 2579 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2575 2580 empty bookmarks.
2576 2581
2577 2582 2004-07-26 *** Released version 0.6.1
2578 2583
2579 2584 2004-07-26 Fernando Perez <fperez@colorado.edu>
2580 2585
2581 2586 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2582 2587
2583 2588 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2584 2589 escaping '()[]{}' in filenames.
2585 2590
2586 2591 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2587 2592 Python 2.2 users who lack a proper shlex.split.
2588 2593
2589 2594 2004-07-19 Fernando Perez <fperez@colorado.edu>
2590 2595
2591 2596 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2592 2597 for reading readline's init file. I follow the normal chain:
2593 2598 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2594 2599 report by Mike Heeter. This closes
2595 2600 http://www.scipy.net/roundup/ipython/issue16.
2596 2601
2597 2602 2004-07-18 Fernando Perez <fperez@colorado.edu>
2598 2603
2599 2604 * IPython/iplib.py (__init__): Add better handling of '\' under
2600 2605 Win32 for filenames. After a patch by Ville.
2601 2606
2602 2607 2004-07-17 Fernando Perez <fperez@colorado.edu>
2603 2608
2604 2609 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2605 2610 autocalling would be triggered for 'foo is bar' if foo is
2606 2611 callable. I also cleaned up the autocall detection code to use a
2607 2612 regexp, which is faster. Bug reported by Alexander Schmolck.
2608 2613
2609 2614 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2610 2615 '?' in them would confuse the help system. Reported by Alex
2611 2616 Schmolck.
2612 2617
2613 2618 2004-07-16 Fernando Perez <fperez@colorado.edu>
2614 2619
2615 2620 * IPython/GnuplotInteractive.py (__all__): added plot2.
2616 2621
2617 2622 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2618 2623 plotting dictionaries, lists or tuples of 1d arrays.
2619 2624
2620 2625 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2621 2626 optimizations.
2622 2627
2623 2628 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2624 2629 the information which was there from Janko's original IPP code:
2625 2630
2626 2631 03.05.99 20:53 porto.ifm.uni-kiel.de
2627 2632 --Started changelog.
2628 2633 --make clear do what it say it does
2629 2634 --added pretty output of lines from inputcache
2630 2635 --Made Logger a mixin class, simplifies handling of switches
2631 2636 --Added own completer class. .string<TAB> expands to last history
2632 2637 line which starts with string. The new expansion is also present
2633 2638 with Ctrl-r from the readline library. But this shows, who this
2634 2639 can be done for other cases.
2635 2640 --Added convention that all shell functions should accept a
2636 2641 parameter_string This opens the door for different behaviour for
2637 2642 each function. @cd is a good example of this.
2638 2643
2639 2644 04.05.99 12:12 porto.ifm.uni-kiel.de
2640 2645 --added logfile rotation
2641 2646 --added new mainloop method which freezes first the namespace
2642 2647
2643 2648 07.05.99 21:24 porto.ifm.uni-kiel.de
2644 2649 --added the docreader classes. Now there is a help system.
2645 2650 -This is only a first try. Currently it's not easy to put new
2646 2651 stuff in the indices. But this is the way to go. Info would be
2647 2652 better, but HTML is every where and not everybody has an info
2648 2653 system installed and it's not so easy to change html-docs to info.
2649 2654 --added global logfile option
2650 2655 --there is now a hook for object inspection method pinfo needs to
2651 2656 be provided for this. Can be reached by two '??'.
2652 2657
2653 2658 08.05.99 20:51 porto.ifm.uni-kiel.de
2654 2659 --added a README
2655 2660 --bug in rc file. Something has changed so functions in the rc
2656 2661 file need to reference the shell and not self. Not clear if it's a
2657 2662 bug or feature.
2658 2663 --changed rc file for new behavior
2659 2664
2660 2665 2004-07-15 Fernando Perez <fperez@colorado.edu>
2661 2666
2662 2667 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2663 2668 cache was falling out of sync in bizarre manners when multi-line
2664 2669 input was present. Minor optimizations and cleanup.
2665 2670
2666 2671 (Logger): Remove old Changelog info for cleanup. This is the
2667 2672 information which was there from Janko's original code:
2668 2673
2669 2674 Changes to Logger: - made the default log filename a parameter
2670 2675
2671 2676 - put a check for lines beginning with !@? in log(). Needed
2672 2677 (even if the handlers properly log their lines) for mid-session
2673 2678 logging activation to work properly. Without this, lines logged
2674 2679 in mid session, which get read from the cache, would end up
2675 2680 'bare' (with !@? in the open) in the log. Now they are caught
2676 2681 and prepended with a #.
2677 2682
2678 2683 * IPython/iplib.py (InteractiveShell.init_readline): added check
2679 2684 in case MagicCompleter fails to be defined, so we don't crash.
2680 2685
2681 2686 2004-07-13 Fernando Perez <fperez@colorado.edu>
2682 2687
2683 2688 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2684 2689 of EPS if the requested filename ends in '.eps'.
2685 2690
2686 2691 2004-07-04 Fernando Perez <fperez@colorado.edu>
2687 2692
2688 2693 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2689 2694 escaping of quotes when calling the shell.
2690 2695
2691 2696 2004-07-02 Fernando Perez <fperez@colorado.edu>
2692 2697
2693 2698 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2694 2699 gettext not working because we were clobbering '_'. Fixes
2695 2700 http://www.scipy.net/roundup/ipython/issue6.
2696 2701
2697 2702 2004-07-01 Fernando Perez <fperez@colorado.edu>
2698 2703
2699 2704 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2700 2705 into @cd. Patch by Ville.
2701 2706
2702 2707 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2703 2708 new function to store things after ipmaker runs. Patch by Ville.
2704 2709 Eventually this will go away once ipmaker is removed and the class
2705 2710 gets cleaned up, but for now it's ok. Key functionality here is
2706 2711 the addition of the persistent storage mechanism, a dict for
2707 2712 keeping data across sessions (for now just bookmarks, but more can
2708 2713 be implemented later).
2709 2714
2710 2715 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2711 2716 persistent across sections. Patch by Ville, I modified it
2712 2717 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2713 2718 added a '-l' option to list all bookmarks.
2714 2719
2715 2720 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2716 2721 center for cleanup. Registered with atexit.register(). I moved
2717 2722 here the old exit_cleanup(). After a patch by Ville.
2718 2723
2719 2724 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2720 2725 characters in the hacked shlex_split for python 2.2.
2721 2726
2722 2727 * IPython/iplib.py (file_matches): more fixes to filenames with
2723 2728 whitespace in them. It's not perfect, but limitations in python's
2724 2729 readline make it impossible to go further.
2725 2730
2726 2731 2004-06-29 Fernando Perez <fperez@colorado.edu>
2727 2732
2728 2733 * IPython/iplib.py (file_matches): escape whitespace correctly in
2729 2734 filename completions. Bug reported by Ville.
2730 2735
2731 2736 2004-06-28 Fernando Perez <fperez@colorado.edu>
2732 2737
2733 2738 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2734 2739 the history file will be called 'history-PROFNAME' (or just
2735 2740 'history' if no profile is loaded). I was getting annoyed at
2736 2741 getting my Numerical work history clobbered by pysh sessions.
2737 2742
2738 2743 * IPython/iplib.py (InteractiveShell.__init__): Internal
2739 2744 getoutputerror() function so that we can honor the system_verbose
2740 2745 flag for _all_ system calls. I also added escaping of #
2741 2746 characters here to avoid confusing Itpl.
2742 2747
2743 2748 * IPython/Magic.py (shlex_split): removed call to shell in
2744 2749 parse_options and replaced it with shlex.split(). The annoying
2745 2750 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2746 2751 to backport it from 2.3, with several frail hacks (the shlex
2747 2752 module is rather limited in 2.2). Thanks to a suggestion by Ville
2748 2753 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2749 2754 problem.
2750 2755
2751 2756 (Magic.magic_system_verbose): new toggle to print the actual
2752 2757 system calls made by ipython. Mainly for debugging purposes.
2753 2758
2754 2759 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2755 2760 doesn't support persistence. Reported (and fix suggested) by
2756 2761 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2757 2762
2758 2763 2004-06-26 Fernando Perez <fperez@colorado.edu>
2759 2764
2760 2765 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2761 2766 continue prompts.
2762 2767
2763 2768 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2764 2769 function (basically a big docstring) and a few more things here to
2765 2770 speedup startup. pysh.py is now very lightweight. We want because
2766 2771 it gets execfile'd, while InterpreterExec gets imported, so
2767 2772 byte-compilation saves time.
2768 2773
2769 2774 2004-06-25 Fernando Perez <fperez@colorado.edu>
2770 2775
2771 2776 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2772 2777 -NUM', which was recently broken.
2773 2778
2774 2779 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2775 2780 in multi-line input (but not !!, which doesn't make sense there).
2776 2781
2777 2782 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2778 2783 It's just too useful, and people can turn it off in the less
2779 2784 common cases where it's a problem.
2780 2785
2781 2786 2004-06-24 Fernando Perez <fperez@colorado.edu>
2782 2787
2783 2788 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2784 2789 special syntaxes (like alias calling) is now allied in multi-line
2785 2790 input. This is still _very_ experimental, but it's necessary for
2786 2791 efficient shell usage combining python looping syntax with system
2787 2792 calls. For now it's restricted to aliases, I don't think it
2788 2793 really even makes sense to have this for magics.
2789 2794
2790 2795 2004-06-23 Fernando Perez <fperez@colorado.edu>
2791 2796
2792 2797 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2793 2798 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2794 2799
2795 2800 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2796 2801 extensions under Windows (after code sent by Gary Bishop). The
2797 2802 extensions considered 'executable' are stored in IPython's rc
2798 2803 structure as win_exec_ext.
2799 2804
2800 2805 * IPython/genutils.py (shell): new function, like system() but
2801 2806 without return value. Very useful for interactive shell work.
2802 2807
2803 2808 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2804 2809 delete aliases.
2805 2810
2806 2811 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2807 2812 sure that the alias table doesn't contain python keywords.
2808 2813
2809 2814 2004-06-21 Fernando Perez <fperez@colorado.edu>
2810 2815
2811 2816 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2812 2817 non-existent items are found in $PATH. Reported by Thorsten.
2813 2818
2814 2819 2004-06-20 Fernando Perez <fperez@colorado.edu>
2815 2820
2816 2821 * IPython/iplib.py (complete): modified the completer so that the
2817 2822 order of priorities can be easily changed at runtime.
2818 2823
2819 2824 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2820 2825 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2821 2826
2822 2827 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2823 2828 expand Python variables prepended with $ in all system calls. The
2824 2829 same was done to InteractiveShell.handle_shell_escape. Now all
2825 2830 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2826 2831 expansion of python variables and expressions according to the
2827 2832 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2828 2833
2829 2834 Though PEP-215 has been rejected, a similar (but simpler) one
2830 2835 seems like it will go into Python 2.4, PEP-292 -
2831 2836 http://www.python.org/peps/pep-0292.html.
2832 2837
2833 2838 I'll keep the full syntax of PEP-215, since IPython has since the
2834 2839 start used Ka-Ping Yee's reference implementation discussed there
2835 2840 (Itpl), and I actually like the powerful semantics it offers.
2836 2841
2837 2842 In order to access normal shell variables, the $ has to be escaped
2838 2843 via an extra $. For example:
2839 2844
2840 2845 In [7]: PATH='a python variable'
2841 2846
2842 2847 In [8]: !echo $PATH
2843 2848 a python variable
2844 2849
2845 2850 In [9]: !echo $$PATH
2846 2851 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2847 2852
2848 2853 (Magic.parse_options): escape $ so the shell doesn't evaluate
2849 2854 things prematurely.
2850 2855
2851 2856 * IPython/iplib.py (InteractiveShell.call_alias): added the
2852 2857 ability for aliases to expand python variables via $.
2853 2858
2854 2859 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2855 2860 system, now there's a @rehash/@rehashx pair of magics. These work
2856 2861 like the csh rehash command, and can be invoked at any time. They
2857 2862 build a table of aliases to everything in the user's $PATH
2858 2863 (@rehash uses everything, @rehashx is slower but only adds
2859 2864 executable files). With this, the pysh.py-based shell profile can
2860 2865 now simply call rehash upon startup, and full access to all
2861 2866 programs in the user's path is obtained.
2862 2867
2863 2868 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2864 2869 functionality is now fully in place. I removed the old dynamic
2865 2870 code generation based approach, in favor of a much lighter one
2866 2871 based on a simple dict. The advantage is that this allows me to
2867 2872 now have thousands of aliases with negligible cost (unthinkable
2868 2873 with the old system).
2869 2874
2870 2875 2004-06-19 Fernando Perez <fperez@colorado.edu>
2871 2876
2872 2877 * IPython/iplib.py (__init__): extended MagicCompleter class to
2873 2878 also complete (last in priority) on user aliases.
2874 2879
2875 2880 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2876 2881 call to eval.
2877 2882 (ItplNS.__init__): Added a new class which functions like Itpl,
2878 2883 but allows configuring the namespace for the evaluation to occur
2879 2884 in.
2880 2885
2881 2886 2004-06-18 Fernando Perez <fperez@colorado.edu>
2882 2887
2883 2888 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2884 2889 better message when 'exit' or 'quit' are typed (a common newbie
2885 2890 confusion).
2886 2891
2887 2892 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2888 2893 check for Windows users.
2889 2894
2890 2895 * IPython/iplib.py (InteractiveShell.user_setup): removed
2891 2896 disabling of colors for Windows. I'll test at runtime and issue a
2892 2897 warning if Gary's readline isn't found, as to nudge users to
2893 2898 download it.
2894 2899
2895 2900 2004-06-16 Fernando Perez <fperez@colorado.edu>
2896 2901
2897 2902 * IPython/genutils.py (Stream.__init__): changed to print errors
2898 2903 to sys.stderr. I had a circular dependency here. Now it's
2899 2904 possible to run ipython as IDLE's shell (consider this pre-alpha,
2900 2905 since true stdout things end up in the starting terminal instead
2901 2906 of IDLE's out).
2902 2907
2903 2908 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2904 2909 users who haven't # updated their prompt_in2 definitions. Remove
2905 2910 eventually.
2906 2911 (multiple_replace): added credit to original ASPN recipe.
2907 2912
2908 2913 2004-06-15 Fernando Perez <fperez@colorado.edu>
2909 2914
2910 2915 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2911 2916 list of auto-defined aliases.
2912 2917
2913 2918 2004-06-13 Fernando Perez <fperez@colorado.edu>
2914 2919
2915 2920 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2916 2921 install was really requested (so setup.py can be used for other
2917 2922 things under Windows).
2918 2923
2919 2924 2004-06-10 Fernando Perez <fperez@colorado.edu>
2920 2925
2921 2926 * IPython/Logger.py (Logger.create_log): Manually remove any old
2922 2927 backup, since os.remove may fail under Windows. Fixes bug
2923 2928 reported by Thorsten.
2924 2929
2925 2930 2004-06-09 Fernando Perez <fperez@colorado.edu>
2926 2931
2927 2932 * examples/example-embed.py: fixed all references to %n (replaced
2928 2933 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2929 2934 for all examples and the manual as well.
2930 2935
2931 2936 2004-06-08 Fernando Perez <fperez@colorado.edu>
2932 2937
2933 2938 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2934 2939 alignment and color management. All 3 prompt subsystems now
2935 2940 inherit from BasePrompt.
2936 2941
2937 2942 * tools/release: updates for windows installer build and tag rpms
2938 2943 with python version (since paths are fixed).
2939 2944
2940 2945 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2941 2946 which will become eventually obsolete. Also fixed the default
2942 2947 prompt_in2 to use \D, so at least new users start with the correct
2943 2948 defaults.
2944 2949 WARNING: Users with existing ipythonrc files will need to apply
2945 2950 this fix manually!
2946 2951
2947 2952 * setup.py: make windows installer (.exe). This is finally the
2948 2953 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2949 2954 which I hadn't included because it required Python 2.3 (or recent
2950 2955 distutils).
2951 2956
2952 2957 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2953 2958 usage of new '\D' escape.
2954 2959
2955 2960 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2956 2961 lacks os.getuid())
2957 2962 (CachedOutput.set_colors): Added the ability to turn coloring
2958 2963 on/off with @colors even for manually defined prompt colors. It
2959 2964 uses a nasty global, but it works safely and via the generic color
2960 2965 handling mechanism.
2961 2966 (Prompt2.__init__): Introduced new escape '\D' for continuation
2962 2967 prompts. It represents the counter ('\#') as dots.
2963 2968 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2964 2969 need to update their ipythonrc files and replace '%n' with '\D' in
2965 2970 their prompt_in2 settings everywhere. Sorry, but there's
2966 2971 otherwise no clean way to get all prompts to properly align. The
2967 2972 ipythonrc shipped with IPython has been updated.
2968 2973
2969 2974 2004-06-07 Fernando Perez <fperez@colorado.edu>
2970 2975
2971 2976 * setup.py (isfile): Pass local_icons option to latex2html, so the
2972 2977 resulting HTML file is self-contained. Thanks to
2973 2978 dryice-AT-liu.com.cn for the tip.
2974 2979
2975 2980 * pysh.py: I created a new profile 'shell', which implements a
2976 2981 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2977 2982 system shell, nor will it become one anytime soon. It's mainly
2978 2983 meant to illustrate the use of the new flexible bash-like prompts.
2979 2984 I guess it could be used by hardy souls for true shell management,
2980 2985 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2981 2986 profile. This uses the InterpreterExec extension provided by
2982 2987 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2983 2988
2984 2989 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2985 2990 auto-align itself with the length of the previous input prompt
2986 2991 (taking into account the invisible color escapes).
2987 2992 (CachedOutput.__init__): Large restructuring of this class. Now
2988 2993 all three prompts (primary1, primary2, output) are proper objects,
2989 2994 managed by the 'parent' CachedOutput class. The code is still a
2990 2995 bit hackish (all prompts share state via a pointer to the cache),
2991 2996 but it's overall far cleaner than before.
2992 2997
2993 2998 * IPython/genutils.py (getoutputerror): modified to add verbose,
2994 2999 debug and header options. This makes the interface of all getout*
2995 3000 functions uniform.
2996 3001 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2997 3002
2998 3003 * IPython/Magic.py (Magic.default_option): added a function to
2999 3004 allow registering default options for any magic command. This
3000 3005 makes it easy to have profiles which customize the magics globally
3001 3006 for a certain use. The values set through this function are
3002 3007 picked up by the parse_options() method, which all magics should
3003 3008 use to parse their options.
3004 3009
3005 3010 * IPython/genutils.py (warn): modified the warnings framework to
3006 3011 use the Term I/O class. I'm trying to slowly unify all of
3007 3012 IPython's I/O operations to pass through Term.
3008 3013
3009 3014 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3010 3015 the secondary prompt to correctly match the length of the primary
3011 3016 one for any prompt. Now multi-line code will properly line up
3012 3017 even for path dependent prompts, such as the new ones available
3013 3018 via the prompt_specials.
3014 3019
3015 3020 2004-06-06 Fernando Perez <fperez@colorado.edu>
3016 3021
3017 3022 * IPython/Prompts.py (prompt_specials): Added the ability to have
3018 3023 bash-like special sequences in the prompts, which get
3019 3024 automatically expanded. Things like hostname, current working
3020 3025 directory and username are implemented already, but it's easy to
3021 3026 add more in the future. Thanks to a patch by W.J. van der Laan
3022 3027 <gnufnork-AT-hetdigitalegat.nl>
3023 3028 (prompt_specials): Added color support for prompt strings, so
3024 3029 users can define arbitrary color setups for their prompts.
3025 3030
3026 3031 2004-06-05 Fernando Perez <fperez@colorado.edu>
3027 3032
3028 3033 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3029 3034 code to load Gary Bishop's readline and configure it
3030 3035 automatically. Thanks to Gary for help on this.
3031 3036
3032 3037 2004-06-01 Fernando Perez <fperez@colorado.edu>
3033 3038
3034 3039 * IPython/Logger.py (Logger.create_log): fix bug for logging
3035 3040 with no filename (previous fix was incomplete).
3036 3041
3037 3042 2004-05-25 Fernando Perez <fperez@colorado.edu>
3038 3043
3039 3044 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3040 3045 parens would get passed to the shell.
3041 3046
3042 3047 2004-05-20 Fernando Perez <fperez@colorado.edu>
3043 3048
3044 3049 * IPython/Magic.py (Magic.magic_prun): changed default profile
3045 3050 sort order to 'time' (the more common profiling need).
3046 3051
3047 3052 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3048 3053 so that source code shown is guaranteed in sync with the file on
3049 3054 disk (also changed in psource). Similar fix to the one for
3050 3055 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3051 3056 <yann.ledu-AT-noos.fr>.
3052 3057
3053 3058 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3054 3059 with a single option would not be correctly parsed. Closes
3055 3060 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3056 3061 introduced in 0.6.0 (on 2004-05-06).
3057 3062
3058 3063 2004-05-13 *** Released version 0.6.0
3059 3064
3060 3065 2004-05-13 Fernando Perez <fperez@colorado.edu>
3061 3066
3062 3067 * debian/: Added debian/ directory to CVS, so that debian support
3063 3068 is publicly accessible. The debian package is maintained by Jack
3064 3069 Moffit <jack-AT-xiph.org>.
3065 3070
3066 3071 * Documentation: included the notes about an ipython-based system
3067 3072 shell (the hypothetical 'pysh') into the new_design.pdf document,
3068 3073 so that these ideas get distributed to users along with the
3069 3074 official documentation.
3070 3075
3071 3076 2004-05-10 Fernando Perez <fperez@colorado.edu>
3072 3077
3073 3078 * IPython/Logger.py (Logger.create_log): fix recently introduced
3074 3079 bug (misindented line) where logstart would fail when not given an
3075 3080 explicit filename.
3076 3081
3077 3082 2004-05-09 Fernando Perez <fperez@colorado.edu>
3078 3083
3079 3084 * IPython/Magic.py (Magic.parse_options): skip system call when
3080 3085 there are no options to look for. Faster, cleaner for the common
3081 3086 case.
3082 3087
3083 3088 * Documentation: many updates to the manual: describing Windows
3084 3089 support better, Gnuplot updates, credits, misc small stuff. Also
3085 3090 updated the new_design doc a bit.
3086 3091
3087 3092 2004-05-06 *** Released version 0.6.0.rc1
3088 3093
3089 3094 2004-05-06 Fernando Perez <fperez@colorado.edu>
3090 3095
3091 3096 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3092 3097 operations to use the vastly more efficient list/''.join() method.
3093 3098 (FormattedTB.text): Fix
3094 3099 http://www.scipy.net/roundup/ipython/issue12 - exception source
3095 3100 extract not updated after reload. Thanks to Mike Salib
3096 3101 <msalib-AT-mit.edu> for pinning the source of the problem.
3097 3102 Fortunately, the solution works inside ipython and doesn't require
3098 3103 any changes to python proper.
3099 3104
3100 3105 * IPython/Magic.py (Magic.parse_options): Improved to process the
3101 3106 argument list as a true shell would (by actually using the
3102 3107 underlying system shell). This way, all @magics automatically get
3103 3108 shell expansion for variables. Thanks to a comment by Alex
3104 3109 Schmolck.
3105 3110
3106 3111 2004-04-04 Fernando Perez <fperez@colorado.edu>
3107 3112
3108 3113 * IPython/iplib.py (InteractiveShell.interact): Added a special
3109 3114 trap for a debugger quit exception, which is basically impossible
3110 3115 to handle by normal mechanisms, given what pdb does to the stack.
3111 3116 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3112 3117
3113 3118 2004-04-03 Fernando Perez <fperez@colorado.edu>
3114 3119
3115 3120 * IPython/genutils.py (Term): Standardized the names of the Term
3116 3121 class streams to cin/cout/cerr, following C++ naming conventions
3117 3122 (I can't use in/out/err because 'in' is not a valid attribute
3118 3123 name).
3119 3124
3120 3125 * IPython/iplib.py (InteractiveShell.interact): don't increment
3121 3126 the prompt if there's no user input. By Daniel 'Dang' Griffith
3122 3127 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3123 3128 Francois Pinard.
3124 3129
3125 3130 2004-04-02 Fernando Perez <fperez@colorado.edu>
3126 3131
3127 3132 * IPython/genutils.py (Stream.__init__): Modified to survive at
3128 3133 least importing in contexts where stdin/out/err aren't true file
3129 3134 objects, such as PyCrust (they lack fileno() and mode). However,
3130 3135 the recovery facilities which rely on these things existing will
3131 3136 not work.
3132 3137
3133 3138 2004-04-01 Fernando Perez <fperez@colorado.edu>
3134 3139
3135 3140 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3136 3141 use the new getoutputerror() function, so it properly
3137 3142 distinguishes stdout/err.
3138 3143
3139 3144 * IPython/genutils.py (getoutputerror): added a function to
3140 3145 capture separately the standard output and error of a command.
3141 3146 After a comment from dang on the mailing lists. This code is
3142 3147 basically a modified version of commands.getstatusoutput(), from
3143 3148 the standard library.
3144 3149
3145 3150 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3146 3151 '!!' as a special syntax (shorthand) to access @sx.
3147 3152
3148 3153 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3149 3154 command and return its output as a list split on '\n'.
3150 3155
3151 3156 2004-03-31 Fernando Perez <fperez@colorado.edu>
3152 3157
3153 3158 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3154 3159 method to dictionaries used as FakeModule instances if they lack
3155 3160 it. At least pydoc in python2.3 breaks for runtime-defined
3156 3161 functions without this hack. At some point I need to _really_
3157 3162 understand what FakeModule is doing, because it's a gross hack.
3158 3163 But it solves Arnd's problem for now...
3159 3164
3160 3165 2004-02-27 Fernando Perez <fperez@colorado.edu>
3161 3166
3162 3167 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3163 3168 mode would behave erratically. Also increased the number of
3164 3169 possible logs in rotate mod to 999. Thanks to Rod Holland
3165 3170 <rhh@StructureLABS.com> for the report and fixes.
3166 3171
3167 3172 2004-02-26 Fernando Perez <fperez@colorado.edu>
3168 3173
3169 3174 * IPython/genutils.py (page): Check that the curses module really
3170 3175 has the initscr attribute before trying to use it. For some
3171 3176 reason, the Solaris curses module is missing this. I think this
3172 3177 should be considered a Solaris python bug, but I'm not sure.
3173 3178
3174 3179 2004-01-17 Fernando Perez <fperez@colorado.edu>
3175 3180
3176 3181 * IPython/genutils.py (Stream.__init__): Changes to try to make
3177 3182 ipython robust against stdin/out/err being closed by the user.
3178 3183 This is 'user error' (and blocks a normal python session, at least
3179 3184 the stdout case). However, Ipython should be able to survive such
3180 3185 instances of abuse as gracefully as possible. To simplify the
3181 3186 coding and maintain compatibility with Gary Bishop's Term
3182 3187 contributions, I've made use of classmethods for this. I think
3183 3188 this introduces a dependency on python 2.2.
3184 3189
3185 3190 2004-01-13 Fernando Perez <fperez@colorado.edu>
3186 3191
3187 3192 * IPython/numutils.py (exp_safe): simplified the code a bit and
3188 3193 removed the need for importing the kinds module altogether.
3189 3194
3190 3195 2004-01-06 Fernando Perez <fperez@colorado.edu>
3191 3196
3192 3197 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3193 3198 a magic function instead, after some community feedback. No
3194 3199 special syntax will exist for it, but its name is deliberately
3195 3200 very short.
3196 3201
3197 3202 2003-12-20 Fernando Perez <fperez@colorado.edu>
3198 3203
3199 3204 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3200 3205 new functionality, to automagically assign the result of a shell
3201 3206 command to a variable. I'll solicit some community feedback on
3202 3207 this before making it permanent.
3203 3208
3204 3209 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3205 3210 requested about callables for which inspect couldn't obtain a
3206 3211 proper argspec. Thanks to a crash report sent by Etienne
3207 3212 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3208 3213
3209 3214 2003-12-09 Fernando Perez <fperez@colorado.edu>
3210 3215
3211 3216 * IPython/genutils.py (page): patch for the pager to work across
3212 3217 various versions of Windows. By Gary Bishop.
3213 3218
3214 3219 2003-12-04 Fernando Perez <fperez@colorado.edu>
3215 3220
3216 3221 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3217 3222 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3218 3223 While I tested this and it looks ok, there may still be corner
3219 3224 cases I've missed.
3220 3225
3221 3226 2003-12-01 Fernando Perez <fperez@colorado.edu>
3222 3227
3223 3228 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3224 3229 where a line like 'p,q=1,2' would fail because the automagic
3225 3230 system would be triggered for @p.
3226 3231
3227 3232 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3228 3233 cleanups, code unmodified.
3229 3234
3230 3235 * IPython/genutils.py (Term): added a class for IPython to handle
3231 3236 output. In most cases it will just be a proxy for stdout/err, but
3232 3237 having this allows modifications to be made for some platforms,
3233 3238 such as handling color escapes under Windows. All of this code
3234 3239 was contributed by Gary Bishop, with minor modifications by me.
3235 3240 The actual changes affect many files.
3236 3241
3237 3242 2003-11-30 Fernando Perez <fperez@colorado.edu>
3238 3243
3239 3244 * IPython/iplib.py (file_matches): new completion code, courtesy
3240 3245 of Jeff Collins. This enables filename completion again under
3241 3246 python 2.3, which disabled it at the C level.
3242 3247
3243 3248 2003-11-11 Fernando Perez <fperez@colorado.edu>
3244 3249
3245 3250 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3246 3251 for Numeric.array(map(...)), but often convenient.
3247 3252
3248 3253 2003-11-05 Fernando Perez <fperez@colorado.edu>
3249 3254
3250 3255 * IPython/numutils.py (frange): Changed a call from int() to
3251 3256 int(round()) to prevent a problem reported with arange() in the
3252 3257 numpy list.
3253 3258
3254 3259 2003-10-06 Fernando Perez <fperez@colorado.edu>
3255 3260
3256 3261 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3257 3262 prevent crashes if sys lacks an argv attribute (it happens with
3258 3263 embedded interpreters which build a bare-bones sys module).
3259 3264 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3260 3265
3261 3266 2003-09-24 Fernando Perez <fperez@colorado.edu>
3262 3267
3263 3268 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3264 3269 to protect against poorly written user objects where __getattr__
3265 3270 raises exceptions other than AttributeError. Thanks to a bug
3266 3271 report by Oliver Sander <osander-AT-gmx.de>.
3267 3272
3268 3273 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3269 3274 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3270 3275
3271 3276 2003-09-09 Fernando Perez <fperez@colorado.edu>
3272 3277
3273 3278 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3274 3279 unpacking a list whith a callable as first element would
3275 3280 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3276 3281 Collins.
3277 3282
3278 3283 2003-08-25 *** Released version 0.5.0
3279 3284
3280 3285 2003-08-22 Fernando Perez <fperez@colorado.edu>
3281 3286
3282 3287 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3283 3288 improperly defined user exceptions. Thanks to feedback from Mark
3284 3289 Russell <mrussell-AT-verio.net>.
3285 3290
3286 3291 2003-08-20 Fernando Perez <fperez@colorado.edu>
3287 3292
3288 3293 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3289 3294 printing so that it would print multi-line string forms starting
3290 3295 with a new line. This way the formatting is better respected for
3291 3296 objects which work hard to make nice string forms.
3292 3297
3293 3298 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3294 3299 autocall would overtake data access for objects with both
3295 3300 __getitem__ and __call__.
3296 3301
3297 3302 2003-08-19 *** Released version 0.5.0-rc1
3298 3303
3299 3304 2003-08-19 Fernando Perez <fperez@colorado.edu>
3300 3305
3301 3306 * IPython/deep_reload.py (load_tail): single tiny change here
3302 3307 seems to fix the long-standing bug of dreload() failing to work
3303 3308 for dotted names. But this module is pretty tricky, so I may have
3304 3309 missed some subtlety. Needs more testing!.
3305 3310
3306 3311 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3307 3312 exceptions which have badly implemented __str__ methods.
3308 3313 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3309 3314 which I've been getting reports about from Python 2.3 users. I
3310 3315 wish I had a simple test case to reproduce the problem, so I could
3311 3316 either write a cleaner workaround or file a bug report if
3312 3317 necessary.
3313 3318
3314 3319 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3315 3320 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3316 3321 a bug report by Tjabo Kloppenburg.
3317 3322
3318 3323 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3319 3324 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3320 3325 seems rather unstable. Thanks to a bug report by Tjabo
3321 3326 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3322 3327
3323 3328 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3324 3329 this out soon because of the critical fixes in the inner loop for
3325 3330 generators.
3326 3331
3327 3332 * IPython/Magic.py (Magic.getargspec): removed. This (and
3328 3333 _get_def) have been obsoleted by OInspect for a long time, I
3329 3334 hadn't noticed that they were dead code.
3330 3335 (Magic._ofind): restored _ofind functionality for a few literals
3331 3336 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3332 3337 for things like "hello".capitalize?, since that would require a
3333 3338 potentially dangerous eval() again.
3334 3339
3335 3340 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3336 3341 logic a bit more to clean up the escapes handling and minimize the
3337 3342 use of _ofind to only necessary cases. The interactive 'feel' of
3338 3343 IPython should have improved quite a bit with the changes in
3339 3344 _prefilter and _ofind (besides being far safer than before).
3340 3345
3341 3346 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3342 3347 obscure, never reported). Edit would fail to find the object to
3343 3348 edit under some circumstances.
3344 3349 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3345 3350 which were causing double-calling of generators. Those eval calls
3346 3351 were _very_ dangerous, since code with side effects could be
3347 3352 triggered. As they say, 'eval is evil'... These were the
3348 3353 nastiest evals in IPython. Besides, _ofind is now far simpler,
3349 3354 and it should also be quite a bit faster. Its use of inspect is
3350 3355 also safer, so perhaps some of the inspect-related crashes I've
3351 3356 seen lately with Python 2.3 might be taken care of. That will
3352 3357 need more testing.
3353 3358
3354 3359 2003-08-17 Fernando Perez <fperez@colorado.edu>
3355 3360
3356 3361 * IPython/iplib.py (InteractiveShell._prefilter): significant
3357 3362 simplifications to the logic for handling user escapes. Faster
3358 3363 and simpler code.
3359 3364
3360 3365 2003-08-14 Fernando Perez <fperez@colorado.edu>
3361 3366
3362 3367 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3363 3368 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3364 3369 but it should be quite a bit faster. And the recursive version
3365 3370 generated O(log N) intermediate storage for all rank>1 arrays,
3366 3371 even if they were contiguous.
3367 3372 (l1norm): Added this function.
3368 3373 (norm): Added this function for arbitrary norms (including
3369 3374 l-infinity). l1 and l2 are still special cases for convenience
3370 3375 and speed.
3371 3376
3372 3377 2003-08-03 Fernando Perez <fperez@colorado.edu>
3373 3378
3374 3379 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3375 3380 exceptions, which now raise PendingDeprecationWarnings in Python
3376 3381 2.3. There were some in Magic and some in Gnuplot2.
3377 3382
3378 3383 2003-06-30 Fernando Perez <fperez@colorado.edu>
3379 3384
3380 3385 * IPython/genutils.py (page): modified to call curses only for
3381 3386 terminals where TERM=='xterm'. After problems under many other
3382 3387 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3383 3388
3384 3389 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3385 3390 would be triggered when readline was absent. This was just an old
3386 3391 debugging statement I'd forgotten to take out.
3387 3392
3388 3393 2003-06-20 Fernando Perez <fperez@colorado.edu>
3389 3394
3390 3395 * IPython/genutils.py (clock): modified to return only user time
3391 3396 (not counting system time), after a discussion on scipy. While
3392 3397 system time may be a useful quantity occasionally, it may much
3393 3398 more easily be skewed by occasional swapping or other similar
3394 3399 activity.
3395 3400
3396 3401 2003-06-05 Fernando Perez <fperez@colorado.edu>
3397 3402
3398 3403 * IPython/numutils.py (identity): new function, for building
3399 3404 arbitrary rank Kronecker deltas (mostly backwards compatible with
3400 3405 Numeric.identity)
3401 3406
3402 3407 2003-06-03 Fernando Perez <fperez@colorado.edu>
3403 3408
3404 3409 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3405 3410 arguments passed to magics with spaces, to allow trailing '\' to
3406 3411 work normally (mainly for Windows users).
3407 3412
3408 3413 2003-05-29 Fernando Perez <fperez@colorado.edu>
3409 3414
3410 3415 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3411 3416 instead of pydoc.help. This fixes a bizarre behavior where
3412 3417 printing '%s' % locals() would trigger the help system. Now
3413 3418 ipython behaves like normal python does.
3414 3419
3415 3420 Note that if one does 'from pydoc import help', the bizarre
3416 3421 behavior returns, but this will also happen in normal python, so
3417 3422 it's not an ipython bug anymore (it has to do with how pydoc.help
3418 3423 is implemented).
3419 3424
3420 3425 2003-05-22 Fernando Perez <fperez@colorado.edu>
3421 3426
3422 3427 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3423 3428 return [] instead of None when nothing matches, also match to end
3424 3429 of line. Patch by Gary Bishop.
3425 3430
3426 3431 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3427 3432 protection as before, for files passed on the command line. This
3428 3433 prevents the CrashHandler from kicking in if user files call into
3429 3434 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3430 3435 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3431 3436
3432 3437 2003-05-20 *** Released version 0.4.0
3433 3438
3434 3439 2003-05-20 Fernando Perez <fperez@colorado.edu>
3435 3440
3436 3441 * setup.py: added support for manpages. It's a bit hackish b/c of
3437 3442 a bug in the way the bdist_rpm distutils target handles gzipped
3438 3443 manpages, but it works. After a patch by Jack.
3439 3444
3440 3445 2003-05-19 Fernando Perez <fperez@colorado.edu>
3441 3446
3442 3447 * IPython/numutils.py: added a mockup of the kinds module, since
3443 3448 it was recently removed from Numeric. This way, numutils will
3444 3449 work for all users even if they are missing kinds.
3445 3450
3446 3451 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3447 3452 failure, which can occur with SWIG-wrapped extensions. After a
3448 3453 crash report from Prabhu.
3449 3454
3450 3455 2003-05-16 Fernando Perez <fperez@colorado.edu>
3451 3456
3452 3457 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3453 3458 protect ipython from user code which may call directly
3454 3459 sys.excepthook (this looks like an ipython crash to the user, even
3455 3460 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3456 3461 This is especially important to help users of WxWindows, but may
3457 3462 also be useful in other cases.
3458 3463
3459 3464 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3460 3465 an optional tb_offset to be specified, and to preserve exception
3461 3466 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3462 3467
3463 3468 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3464 3469
3465 3470 2003-05-15 Fernando Perez <fperez@colorado.edu>
3466 3471
3467 3472 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3468 3473 installing for a new user under Windows.
3469 3474
3470 3475 2003-05-12 Fernando Perez <fperez@colorado.edu>
3471 3476
3472 3477 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3473 3478 handler for Emacs comint-based lines. Currently it doesn't do
3474 3479 much (but importantly, it doesn't update the history cache). In
3475 3480 the future it may be expanded if Alex needs more functionality
3476 3481 there.
3477 3482
3478 3483 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3479 3484 info to crash reports.
3480 3485
3481 3486 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3482 3487 just like Python's -c. Also fixed crash with invalid -color
3483 3488 option value at startup. Thanks to Will French
3484 3489 <wfrench-AT-bestweb.net> for the bug report.
3485 3490
3486 3491 2003-05-09 Fernando Perez <fperez@colorado.edu>
3487 3492
3488 3493 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3489 3494 to EvalDict (it's a mapping, after all) and simplified its code
3490 3495 quite a bit, after a nice discussion on c.l.py where Gustavo
3491 3496 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3492 3497
3493 3498 2003-04-30 Fernando Perez <fperez@colorado.edu>
3494 3499
3495 3500 * IPython/genutils.py (timings_out): modified it to reduce its
3496 3501 overhead in the common reps==1 case.
3497 3502
3498 3503 2003-04-29 Fernando Perez <fperez@colorado.edu>
3499 3504
3500 3505 * IPython/genutils.py (timings_out): Modified to use the resource
3501 3506 module, which avoids the wraparound problems of time.clock().
3502 3507
3503 3508 2003-04-17 *** Released version 0.2.15pre4
3504 3509
3505 3510 2003-04-17 Fernando Perez <fperez@colorado.edu>
3506 3511
3507 3512 * setup.py (scriptfiles): Split windows-specific stuff over to a
3508 3513 separate file, in an attempt to have a Windows GUI installer.
3509 3514 That didn't work, but part of the groundwork is done.
3510 3515
3511 3516 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3512 3517 indent/unindent with 4 spaces. Particularly useful in combination
3513 3518 with the new auto-indent option.
3514 3519
3515 3520 2003-04-16 Fernando Perez <fperez@colorado.edu>
3516 3521
3517 3522 * IPython/Magic.py: various replacements of self.rc for
3518 3523 self.shell.rc. A lot more remains to be done to fully disentangle
3519 3524 this class from the main Shell class.
3520 3525
3521 3526 * IPython/GnuplotRuntime.py: added checks for mouse support so
3522 3527 that we don't try to enable it if the current gnuplot doesn't
3523 3528 really support it. Also added checks so that we don't try to
3524 3529 enable persist under Windows (where Gnuplot doesn't recognize the
3525 3530 option).
3526 3531
3527 3532 * IPython/iplib.py (InteractiveShell.interact): Added optional
3528 3533 auto-indenting code, after a patch by King C. Shu
3529 3534 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3530 3535 get along well with pasting indented code. If I ever figure out
3531 3536 how to make that part go well, it will become on by default.
3532 3537
3533 3538 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3534 3539 crash ipython if there was an unmatched '%' in the user's prompt
3535 3540 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3536 3541
3537 3542 * IPython/iplib.py (InteractiveShell.interact): removed the
3538 3543 ability to ask the user whether he wants to crash or not at the
3539 3544 'last line' exception handler. Calling functions at that point
3540 3545 changes the stack, and the error reports would have incorrect
3541 3546 tracebacks.
3542 3547
3543 3548 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3544 3549 pass through a peger a pretty-printed form of any object. After a
3545 3550 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3546 3551
3547 3552 2003-04-14 Fernando Perez <fperez@colorado.edu>
3548 3553
3549 3554 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3550 3555 all files in ~ would be modified at first install (instead of
3551 3556 ~/.ipython). This could be potentially disastrous, as the
3552 3557 modification (make line-endings native) could damage binary files.
3553 3558
3554 3559 2003-04-10 Fernando Perez <fperez@colorado.edu>
3555 3560
3556 3561 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3557 3562 handle only lines which are invalid python. This now means that
3558 3563 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3559 3564 for the bug report.
3560 3565
3561 3566 2003-04-01 Fernando Perez <fperez@colorado.edu>
3562 3567
3563 3568 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3564 3569 where failing to set sys.last_traceback would crash pdb.pm().
3565 3570 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3566 3571 report.
3567 3572
3568 3573 2003-03-25 Fernando Perez <fperez@colorado.edu>
3569 3574
3570 3575 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3571 3576 before printing it (it had a lot of spurious blank lines at the
3572 3577 end).
3573 3578
3574 3579 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3575 3580 output would be sent 21 times! Obviously people don't use this
3576 3581 too often, or I would have heard about it.
3577 3582
3578 3583 2003-03-24 Fernando Perez <fperez@colorado.edu>
3579 3584
3580 3585 * setup.py (scriptfiles): renamed the data_files parameter from
3581 3586 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3582 3587 for the patch.
3583 3588
3584 3589 2003-03-20 Fernando Perez <fperez@colorado.edu>
3585 3590
3586 3591 * IPython/genutils.py (error): added error() and fatal()
3587 3592 functions.
3588 3593
3589 3594 2003-03-18 *** Released version 0.2.15pre3
3590 3595
3591 3596 2003-03-18 Fernando Perez <fperez@colorado.edu>
3592 3597
3593 3598 * setupext/install_data_ext.py
3594 3599 (install_data_ext.initialize_options): Class contributed by Jack
3595 3600 Moffit for fixing the old distutils hack. He is sending this to
3596 3601 the distutils folks so in the future we may not need it as a
3597 3602 private fix.
3598 3603
3599 3604 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3600 3605 changes for Debian packaging. See his patch for full details.
3601 3606 The old distutils hack of making the ipythonrc* files carry a
3602 3607 bogus .py extension is gone, at last. Examples were moved to a
3603 3608 separate subdir under doc/, and the separate executable scripts
3604 3609 now live in their own directory. Overall a great cleanup. The
3605 3610 manual was updated to use the new files, and setup.py has been
3606 3611 fixed for this setup.
3607 3612
3608 3613 * IPython/PyColorize.py (Parser.usage): made non-executable and
3609 3614 created a pycolor wrapper around it to be included as a script.
3610 3615
3611 3616 2003-03-12 *** Released version 0.2.15pre2
3612 3617
3613 3618 2003-03-12 Fernando Perez <fperez@colorado.edu>
3614 3619
3615 3620 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3616 3621 long-standing problem with garbage characters in some terminals.
3617 3622 The issue was really that the \001 and \002 escapes must _only_ be
3618 3623 passed to input prompts (which call readline), but _never_ to
3619 3624 normal text to be printed on screen. I changed ColorANSI to have
3620 3625 two classes: TermColors and InputTermColors, each with the
3621 3626 appropriate escapes for input prompts or normal text. The code in
3622 3627 Prompts.py got slightly more complicated, but this very old and
3623 3628 annoying bug is finally fixed.
3624 3629
3625 3630 All the credit for nailing down the real origin of this problem
3626 3631 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3627 3632 *Many* thanks to him for spending quite a bit of effort on this.
3628 3633
3629 3634 2003-03-05 *** Released version 0.2.15pre1
3630 3635
3631 3636 2003-03-03 Fernando Perez <fperez@colorado.edu>
3632 3637
3633 3638 * IPython/FakeModule.py: Moved the former _FakeModule to a
3634 3639 separate file, because it's also needed by Magic (to fix a similar
3635 3640 pickle-related issue in @run).
3636 3641
3637 3642 2003-03-02 Fernando Perez <fperez@colorado.edu>
3638 3643
3639 3644 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3640 3645 the autocall option at runtime.
3641 3646 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3642 3647 across Magic.py to start separating Magic from InteractiveShell.
3643 3648 (Magic._ofind): Fixed to return proper namespace for dotted
3644 3649 names. Before, a dotted name would always return 'not currently
3645 3650 defined', because it would find the 'parent'. s.x would be found,
3646 3651 but since 'x' isn't defined by itself, it would get confused.
3647 3652 (Magic.magic_run): Fixed pickling problems reported by Ralf
3648 3653 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3649 3654 that I'd used when Mike Heeter reported similar issues at the
3650 3655 top-level, but now for @run. It boils down to injecting the
3651 3656 namespace where code is being executed with something that looks
3652 3657 enough like a module to fool pickle.dump(). Since a pickle stores
3653 3658 a named reference to the importing module, we need this for
3654 3659 pickles to save something sensible.
3655 3660
3656 3661 * IPython/ipmaker.py (make_IPython): added an autocall option.
3657 3662
3658 3663 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3659 3664 the auto-eval code. Now autocalling is an option, and the code is
3660 3665 also vastly safer. There is no more eval() involved at all.
3661 3666
3662 3667 2003-03-01 Fernando Perez <fperez@colorado.edu>
3663 3668
3664 3669 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3665 3670 dict with named keys instead of a tuple.
3666 3671
3667 3672 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3668 3673
3669 3674 * setup.py (make_shortcut): Fixed message about directories
3670 3675 created during Windows installation (the directories were ok, just
3671 3676 the printed message was misleading). Thanks to Chris Liechti
3672 3677 <cliechti-AT-gmx.net> for the heads up.
3673 3678
3674 3679 2003-02-21 Fernando Perez <fperez@colorado.edu>
3675 3680
3676 3681 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3677 3682 of ValueError exception when checking for auto-execution. This
3678 3683 one is raised by things like Numeric arrays arr.flat when the
3679 3684 array is non-contiguous.
3680 3685
3681 3686 2003-01-31 Fernando Perez <fperez@colorado.edu>
3682 3687
3683 3688 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3684 3689 not return any value at all (even though the command would get
3685 3690 executed).
3686 3691 (xsys): Flush stdout right after printing the command to ensure
3687 3692 proper ordering of commands and command output in the total
3688 3693 output.
3689 3694 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3690 3695 system/getoutput as defaults. The old ones are kept for
3691 3696 compatibility reasons, so no code which uses this library needs
3692 3697 changing.
3693 3698
3694 3699 2003-01-27 *** Released version 0.2.14
3695 3700
3696 3701 2003-01-25 Fernando Perez <fperez@colorado.edu>
3697 3702
3698 3703 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3699 3704 functions defined in previous edit sessions could not be re-edited
3700 3705 (because the temp files were immediately removed). Now temp files
3701 3706 are removed only at IPython's exit.
3702 3707 (Magic.magic_run): Improved @run to perform shell-like expansions
3703 3708 on its arguments (~users and $VARS). With this, @run becomes more
3704 3709 like a normal command-line.
3705 3710
3706 3711 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3707 3712 bugs related to embedding and cleaned up that code. A fairly
3708 3713 important one was the impossibility to access the global namespace
3709 3714 through the embedded IPython (only local variables were visible).
3710 3715
3711 3716 2003-01-14 Fernando Perez <fperez@colorado.edu>
3712 3717
3713 3718 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3714 3719 auto-calling to be a bit more conservative. Now it doesn't get
3715 3720 triggered if any of '!=()<>' are in the rest of the input line, to
3716 3721 allow comparing callables. Thanks to Alex for the heads up.
3717 3722
3718 3723 2003-01-07 Fernando Perez <fperez@colorado.edu>
3719 3724
3720 3725 * IPython/genutils.py (page): fixed estimation of the number of
3721 3726 lines in a string to be paged to simply count newlines. This
3722 3727 prevents over-guessing due to embedded escape sequences. A better
3723 3728 long-term solution would involve stripping out the control chars
3724 3729 for the count, but it's potentially so expensive I just don't
3725 3730 think it's worth doing.
3726 3731
3727 3732 2002-12-19 *** Released version 0.2.14pre50
3728 3733
3729 3734 2002-12-19 Fernando Perez <fperez@colorado.edu>
3730 3735
3731 3736 * tools/release (version): Changed release scripts to inform
3732 3737 Andrea and build a NEWS file with a list of recent changes.
3733 3738
3734 3739 * IPython/ColorANSI.py (__all__): changed terminal detection
3735 3740 code. Seems to work better for xterms without breaking
3736 3741 konsole. Will need more testing to determine if WinXP and Mac OSX
3737 3742 also work ok.
3738 3743
3739 3744 2002-12-18 *** Released version 0.2.14pre49
3740 3745
3741 3746 2002-12-18 Fernando Perez <fperez@colorado.edu>
3742 3747
3743 3748 * Docs: added new info about Mac OSX, from Andrea.
3744 3749
3745 3750 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3746 3751 allow direct plotting of python strings whose format is the same
3747 3752 of gnuplot data files.
3748 3753
3749 3754 2002-12-16 Fernando Perez <fperez@colorado.edu>
3750 3755
3751 3756 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3752 3757 value of exit question to be acknowledged.
3753 3758
3754 3759 2002-12-03 Fernando Perez <fperez@colorado.edu>
3755 3760
3756 3761 * IPython/ipmaker.py: removed generators, which had been added
3757 3762 by mistake in an earlier debugging run. This was causing trouble
3758 3763 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3759 3764 for pointing this out.
3760 3765
3761 3766 2002-11-17 Fernando Perez <fperez@colorado.edu>
3762 3767
3763 3768 * Manual: updated the Gnuplot section.
3764 3769
3765 3770 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3766 3771 a much better split of what goes in Runtime and what goes in
3767 3772 Interactive.
3768 3773
3769 3774 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3770 3775 being imported from iplib.
3771 3776
3772 3777 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3773 3778 for command-passing. Now the global Gnuplot instance is called
3774 3779 'gp' instead of 'g', which was really a far too fragile and
3775 3780 common name.
3776 3781
3777 3782 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3778 3783 bounding boxes generated by Gnuplot for square plots.
3779 3784
3780 3785 * IPython/genutils.py (popkey): new function added. I should
3781 3786 suggest this on c.l.py as a dict method, it seems useful.
3782 3787
3783 3788 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3784 3789 to transparently handle PostScript generation. MUCH better than
3785 3790 the previous plot_eps/replot_eps (which I removed now). The code
3786 3791 is also fairly clean and well documented now (including
3787 3792 docstrings).
3788 3793
3789 3794 2002-11-13 Fernando Perez <fperez@colorado.edu>
3790 3795
3791 3796 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3792 3797 (inconsistent with options).
3793 3798
3794 3799 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3795 3800 manually disabled, I don't know why. Fixed it.
3796 3801 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3797 3802 eps output.
3798 3803
3799 3804 2002-11-12 Fernando Perez <fperez@colorado.edu>
3800 3805
3801 3806 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3802 3807 don't propagate up to caller. Fixes crash reported by François
3803 3808 Pinard.
3804 3809
3805 3810 2002-11-09 Fernando Perez <fperez@colorado.edu>
3806 3811
3807 3812 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3808 3813 history file for new users.
3809 3814 (make_IPython): fixed bug where initial install would leave the
3810 3815 user running in the .ipython dir.
3811 3816 (make_IPython): fixed bug where config dir .ipython would be
3812 3817 created regardless of the given -ipythondir option. Thanks to Cory
3813 3818 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3814 3819
3815 3820 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3816 3821 type confirmations. Will need to use it in all of IPython's code
3817 3822 consistently.
3818 3823
3819 3824 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3820 3825 context to print 31 lines instead of the default 5. This will make
3821 3826 the crash reports extremely detailed in case the problem is in
3822 3827 libraries I don't have access to.
3823 3828
3824 3829 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3825 3830 line of defense' code to still crash, but giving users fair
3826 3831 warning. I don't want internal errors to go unreported: if there's
3827 3832 an internal problem, IPython should crash and generate a full
3828 3833 report.
3829 3834
3830 3835 2002-11-08 Fernando Perez <fperez@colorado.edu>
3831 3836
3832 3837 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3833 3838 otherwise uncaught exceptions which can appear if people set
3834 3839 sys.stdout to something badly broken. Thanks to a crash report
3835 3840 from henni-AT-mail.brainbot.com.
3836 3841
3837 3842 2002-11-04 Fernando Perez <fperez@colorado.edu>
3838 3843
3839 3844 * IPython/iplib.py (InteractiveShell.interact): added
3840 3845 __IPYTHON__active to the builtins. It's a flag which goes on when
3841 3846 the interaction starts and goes off again when it stops. This
3842 3847 allows embedding code to detect being inside IPython. Before this
3843 3848 was done via __IPYTHON__, but that only shows that an IPython
3844 3849 instance has been created.
3845 3850
3846 3851 * IPython/Magic.py (Magic.magic_env): I realized that in a
3847 3852 UserDict, instance.data holds the data as a normal dict. So I
3848 3853 modified @env to return os.environ.data instead of rebuilding a
3849 3854 dict by hand.
3850 3855
3851 3856 2002-11-02 Fernando Perez <fperez@colorado.edu>
3852 3857
3853 3858 * IPython/genutils.py (warn): changed so that level 1 prints no
3854 3859 header. Level 2 is now the default (with 'WARNING' header, as
3855 3860 before). I think I tracked all places where changes were needed in
3856 3861 IPython, but outside code using the old level numbering may have
3857 3862 broken.
3858 3863
3859 3864 * IPython/iplib.py (InteractiveShell.runcode): added this to
3860 3865 handle the tracebacks in SystemExit traps correctly. The previous
3861 3866 code (through interact) was printing more of the stack than
3862 3867 necessary, showing IPython internal code to the user.
3863 3868
3864 3869 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3865 3870 default. Now that the default at the confirmation prompt is yes,
3866 3871 it's not so intrusive. François' argument that ipython sessions
3867 3872 tend to be complex enough not to lose them from an accidental C-d,
3868 3873 is a valid one.
3869 3874
3870 3875 * IPython/iplib.py (InteractiveShell.interact): added a
3871 3876 showtraceback() call to the SystemExit trap, and modified the exit
3872 3877 confirmation to have yes as the default.
3873 3878
3874 3879 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3875 3880 this file. It's been gone from the code for a long time, this was
3876 3881 simply leftover junk.
3877 3882
3878 3883 2002-11-01 Fernando Perez <fperez@colorado.edu>
3879 3884
3880 3885 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3881 3886 added. If set, IPython now traps EOF and asks for
3882 3887 confirmation. After a request by François Pinard.
3883 3888
3884 3889 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3885 3890 of @abort, and with a new (better) mechanism for handling the
3886 3891 exceptions.
3887 3892
3888 3893 2002-10-27 Fernando Perez <fperez@colorado.edu>
3889 3894
3890 3895 * IPython/usage.py (__doc__): updated the --help information and
3891 3896 the ipythonrc file to indicate that -log generates
3892 3897 ./ipython.log. Also fixed the corresponding info in @logstart.
3893 3898 This and several other fixes in the manuals thanks to reports by
3894 3899 François Pinard <pinard-AT-iro.umontreal.ca>.
3895 3900
3896 3901 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3897 3902 refer to @logstart (instead of @log, which doesn't exist).
3898 3903
3899 3904 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3900 3905 AttributeError crash. Thanks to Christopher Armstrong
3901 3906 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3902 3907 introduced recently (in 0.2.14pre37) with the fix to the eval
3903 3908 problem mentioned below.
3904 3909
3905 3910 2002-10-17 Fernando Perez <fperez@colorado.edu>
3906 3911
3907 3912 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3908 3913 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3909 3914
3910 3915 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3911 3916 this function to fix a problem reported by Alex Schmolck. He saw
3912 3917 it with list comprehensions and generators, which were getting
3913 3918 called twice. The real problem was an 'eval' call in testing for
3914 3919 automagic which was evaluating the input line silently.
3915 3920
3916 3921 This is a potentially very nasty bug, if the input has side
3917 3922 effects which must not be repeated. The code is much cleaner now,
3918 3923 without any blanket 'except' left and with a regexp test for
3919 3924 actual function names.
3920 3925
3921 3926 But an eval remains, which I'm not fully comfortable with. I just
3922 3927 don't know how to find out if an expression could be a callable in
3923 3928 the user's namespace without doing an eval on the string. However
3924 3929 that string is now much more strictly checked so that no code
3925 3930 slips by, so the eval should only happen for things that can
3926 3931 really be only function/method names.
3927 3932
3928 3933 2002-10-15 Fernando Perez <fperez@colorado.edu>
3929 3934
3930 3935 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3931 3936 OSX information to main manual, removed README_Mac_OSX file from
3932 3937 distribution. Also updated credits for recent additions.
3933 3938
3934 3939 2002-10-10 Fernando Perez <fperez@colorado.edu>
3935 3940
3936 3941 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3937 3942 terminal-related issues. Many thanks to Andrea Riciputi
3938 3943 <andrea.riciputi-AT-libero.it> for writing it.
3939 3944
3940 3945 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3941 3946 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3942 3947
3943 3948 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3944 3949 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3945 3950 <syver-en-AT-online.no> who both submitted patches for this problem.
3946 3951
3947 3952 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3948 3953 global embedding to make sure that things don't overwrite user
3949 3954 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3950 3955
3951 3956 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3952 3957 compatibility. Thanks to Hayden Callow
3953 3958 <h.callow-AT-elec.canterbury.ac.nz>
3954 3959
3955 3960 2002-10-04 Fernando Perez <fperez@colorado.edu>
3956 3961
3957 3962 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3958 3963 Gnuplot.File objects.
3959 3964
3960 3965 2002-07-23 Fernando Perez <fperez@colorado.edu>
3961 3966
3962 3967 * IPython/genutils.py (timing): Added timings() and timing() for
3963 3968 quick access to the most commonly needed data, the execution
3964 3969 times. Old timing() renamed to timings_out().
3965 3970
3966 3971 2002-07-18 Fernando Perez <fperez@colorado.edu>
3967 3972
3968 3973 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3969 3974 bug with nested instances disrupting the parent's tab completion.
3970 3975
3971 3976 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3972 3977 all_completions code to begin the emacs integration.
3973 3978
3974 3979 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3975 3980 argument to allow titling individual arrays when plotting.
3976 3981
3977 3982 2002-07-15 Fernando Perez <fperez@colorado.edu>
3978 3983
3979 3984 * setup.py (make_shortcut): changed to retrieve the value of
3980 3985 'Program Files' directory from the registry (this value changes in
3981 3986 non-english versions of Windows). Thanks to Thomas Fanslau
3982 3987 <tfanslau-AT-gmx.de> for the report.
3983 3988
3984 3989 2002-07-10 Fernando Perez <fperez@colorado.edu>
3985 3990
3986 3991 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3987 3992 a bug in pdb, which crashes if a line with only whitespace is
3988 3993 entered. Bug report submitted to sourceforge.
3989 3994
3990 3995 2002-07-09 Fernando Perez <fperez@colorado.edu>
3991 3996
3992 3997 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3993 3998 reporting exceptions (it's a bug in inspect.py, I just set a
3994 3999 workaround).
3995 4000
3996 4001 2002-07-08 Fernando Perez <fperez@colorado.edu>
3997 4002
3998 4003 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3999 4004 __IPYTHON__ in __builtins__ to show up in user_ns.
4000 4005
4001 4006 2002-07-03 Fernando Perez <fperez@colorado.edu>
4002 4007
4003 4008 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4004 4009 name from @gp_set_instance to @gp_set_default.
4005 4010
4006 4011 * IPython/ipmaker.py (make_IPython): default editor value set to
4007 4012 '0' (a string), to match the rc file. Otherwise will crash when
4008 4013 .strip() is called on it.
4009 4014
4010 4015
4011 4016 2002-06-28 Fernando Perez <fperez@colorado.edu>
4012 4017
4013 4018 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4014 4019 of files in current directory when a file is executed via
4015 4020 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4016 4021
4017 4022 * setup.py (manfiles): fix for rpm builds, submitted by RA
4018 4023 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4019 4024
4020 4025 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4021 4026 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4022 4027 string!). A. Schmolck caught this one.
4023 4028
4024 4029 2002-06-27 Fernando Perez <fperez@colorado.edu>
4025 4030
4026 4031 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4027 4032 defined files at the cmd line. __name__ wasn't being set to
4028 4033 __main__.
4029 4034
4030 4035 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4031 4036 regular lists and tuples besides Numeric arrays.
4032 4037
4033 4038 * IPython/Prompts.py (CachedOutput.__call__): Added output
4034 4039 supression for input ending with ';'. Similar to Mathematica and
4035 4040 Matlab. The _* vars and Out[] list are still updated, just like
4036 4041 Mathematica behaves.
4037 4042
4038 4043 2002-06-25 Fernando Perez <fperez@colorado.edu>
4039 4044
4040 4045 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4041 4046 .ini extensions for profiels under Windows.
4042 4047
4043 4048 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4044 4049 string form. Fix contributed by Alexander Schmolck
4045 4050 <a.schmolck-AT-gmx.net>
4046 4051
4047 4052 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4048 4053 pre-configured Gnuplot instance.
4049 4054
4050 4055 2002-06-21 Fernando Perez <fperez@colorado.edu>
4051 4056
4052 4057 * IPython/numutils.py (exp_safe): new function, works around the
4053 4058 underflow problems in Numeric.
4054 4059 (log2): New fn. Safe log in base 2: returns exact integer answer
4055 4060 for exact integer powers of 2.
4056 4061
4057 4062 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4058 4063 properly.
4059 4064
4060 4065 2002-06-20 Fernando Perez <fperez@colorado.edu>
4061 4066
4062 4067 * IPython/genutils.py (timing): new function like
4063 4068 Mathematica's. Similar to time_test, but returns more info.
4064 4069
4065 4070 2002-06-18 Fernando Perez <fperez@colorado.edu>
4066 4071
4067 4072 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4068 4073 according to Mike Heeter's suggestions.
4069 4074
4070 4075 2002-06-16 Fernando Perez <fperez@colorado.edu>
4071 4076
4072 4077 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4073 4078 system. GnuplotMagic is gone as a user-directory option. New files
4074 4079 make it easier to use all the gnuplot stuff both from external
4075 4080 programs as well as from IPython. Had to rewrite part of
4076 4081 hardcopy() b/c of a strange bug: often the ps files simply don't
4077 4082 get created, and require a repeat of the command (often several
4078 4083 times).
4079 4084
4080 4085 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4081 4086 resolve output channel at call time, so that if sys.stderr has
4082 4087 been redirected by user this gets honored.
4083 4088
4084 4089 2002-06-13 Fernando Perez <fperez@colorado.edu>
4085 4090
4086 4091 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4087 4092 IPShell. Kept a copy with the old names to avoid breaking people's
4088 4093 embedded code.
4089 4094
4090 4095 * IPython/ipython: simplified it to the bare minimum after
4091 4096 Holger's suggestions. Added info about how to use it in
4092 4097 PYTHONSTARTUP.
4093 4098
4094 4099 * IPython/Shell.py (IPythonShell): changed the options passing
4095 4100 from a string with funky %s replacements to a straight list. Maybe
4096 4101 a bit more typing, but it follows sys.argv conventions, so there's
4097 4102 less special-casing to remember.
4098 4103
4099 4104 2002-06-12 Fernando Perez <fperez@colorado.edu>
4100 4105
4101 4106 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4102 4107 command. Thanks to a suggestion by Mike Heeter.
4103 4108 (Magic.magic_pfile): added behavior to look at filenames if given
4104 4109 arg is not a defined object.
4105 4110 (Magic.magic_save): New @save function to save code snippets. Also
4106 4111 a Mike Heeter idea.
4107 4112
4108 4113 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4109 4114 plot() and replot(). Much more convenient now, especially for
4110 4115 interactive use.
4111 4116
4112 4117 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4113 4118 filenames.
4114 4119
4115 4120 2002-06-02 Fernando Perez <fperez@colorado.edu>
4116 4121
4117 4122 * IPython/Struct.py (Struct.__init__): modified to admit
4118 4123 initialization via another struct.
4119 4124
4120 4125 * IPython/genutils.py (SystemExec.__init__): New stateful
4121 4126 interface to xsys and bq. Useful for writing system scripts.
4122 4127
4123 4128 2002-05-30 Fernando Perez <fperez@colorado.edu>
4124 4129
4125 4130 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4126 4131 documents. This will make the user download smaller (it's getting
4127 4132 too big).
4128 4133
4129 4134 2002-05-29 Fernando Perez <fperez@colorado.edu>
4130 4135
4131 4136 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4132 4137 fix problems with shelve and pickle. Seems to work, but I don't
4133 4138 know if corner cases break it. Thanks to Mike Heeter
4134 4139 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4135 4140
4136 4141 2002-05-24 Fernando Perez <fperez@colorado.edu>
4137 4142
4138 4143 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4139 4144 macros having broken.
4140 4145
4141 4146 2002-05-21 Fernando Perez <fperez@colorado.edu>
4142 4147
4143 4148 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4144 4149 introduced logging bug: all history before logging started was
4145 4150 being written one character per line! This came from the redesign
4146 4151 of the input history as a special list which slices to strings,
4147 4152 not to lists.
4148 4153
4149 4154 2002-05-20 Fernando Perez <fperez@colorado.edu>
4150 4155
4151 4156 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4152 4157 be an attribute of all classes in this module. The design of these
4153 4158 classes needs some serious overhauling.
4154 4159
4155 4160 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4156 4161 which was ignoring '_' in option names.
4157 4162
4158 4163 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4159 4164 'Verbose_novars' to 'Context' and made it the new default. It's a
4160 4165 bit more readable and also safer than verbose.
4161 4166
4162 4167 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4163 4168 triple-quoted strings.
4164 4169
4165 4170 * IPython/OInspect.py (__all__): new module exposing the object
4166 4171 introspection facilities. Now the corresponding magics are dummy
4167 4172 wrappers around this. Having this module will make it much easier
4168 4173 to put these functions into our modified pdb.
4169 4174 This new object inspector system uses the new colorizing module,
4170 4175 so source code and other things are nicely syntax highlighted.
4171 4176
4172 4177 2002-05-18 Fernando Perez <fperez@colorado.edu>
4173 4178
4174 4179 * IPython/ColorANSI.py: Split the coloring tools into a separate
4175 4180 module so I can use them in other code easier (they were part of
4176 4181 ultraTB).
4177 4182
4178 4183 2002-05-17 Fernando Perez <fperez@colorado.edu>
4179 4184
4180 4185 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4181 4186 fixed it to set the global 'g' also to the called instance, as
4182 4187 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4183 4188 user's 'g' variables).
4184 4189
4185 4190 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4186 4191 global variables (aliases to _ih,_oh) so that users which expect
4187 4192 In[5] or Out[7] to work aren't unpleasantly surprised.
4188 4193 (InputList.__getslice__): new class to allow executing slices of
4189 4194 input history directly. Very simple class, complements the use of
4190 4195 macros.
4191 4196
4192 4197 2002-05-16 Fernando Perez <fperez@colorado.edu>
4193 4198
4194 4199 * setup.py (docdirbase): make doc directory be just doc/IPython
4195 4200 without version numbers, it will reduce clutter for users.
4196 4201
4197 4202 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4198 4203 execfile call to prevent possible memory leak. See for details:
4199 4204 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4200 4205
4201 4206 2002-05-15 Fernando Perez <fperez@colorado.edu>
4202 4207
4203 4208 * IPython/Magic.py (Magic.magic_psource): made the object
4204 4209 introspection names be more standard: pdoc, pdef, pfile and
4205 4210 psource. They all print/page their output, and it makes
4206 4211 remembering them easier. Kept old names for compatibility as
4207 4212 aliases.
4208 4213
4209 4214 2002-05-14 Fernando Perez <fperez@colorado.edu>
4210 4215
4211 4216 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4212 4217 what the mouse problem was. The trick is to use gnuplot with temp
4213 4218 files and NOT with pipes (for data communication), because having
4214 4219 both pipes and the mouse on is bad news.
4215 4220
4216 4221 2002-05-13 Fernando Perez <fperez@colorado.edu>
4217 4222
4218 4223 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4219 4224 bug. Information would be reported about builtins even when
4220 4225 user-defined functions overrode them.
4221 4226
4222 4227 2002-05-11 Fernando Perez <fperez@colorado.edu>
4223 4228
4224 4229 * IPython/__init__.py (__all__): removed FlexCompleter from
4225 4230 __all__ so that things don't fail in platforms without readline.
4226 4231
4227 4232 2002-05-10 Fernando Perez <fperez@colorado.edu>
4228 4233
4229 4234 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4230 4235 it requires Numeric, effectively making Numeric a dependency for
4231 4236 IPython.
4232 4237
4233 4238 * Released 0.2.13
4234 4239
4235 4240 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4236 4241 profiler interface. Now all the major options from the profiler
4237 4242 module are directly supported in IPython, both for single
4238 4243 expressions (@prun) and for full programs (@run -p).
4239 4244
4240 4245 2002-05-09 Fernando Perez <fperez@colorado.edu>
4241 4246
4242 4247 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4243 4248 magic properly formatted for screen.
4244 4249
4245 4250 * setup.py (make_shortcut): Changed things to put pdf version in
4246 4251 doc/ instead of doc/manual (had to change lyxport a bit).
4247 4252
4248 4253 * IPython/Magic.py (Profile.string_stats): made profile runs go
4249 4254 through pager (they are long and a pager allows searching, saving,
4250 4255 etc.)
4251 4256
4252 4257 2002-05-08 Fernando Perez <fperez@colorado.edu>
4253 4258
4254 4259 * Released 0.2.12
4255 4260
4256 4261 2002-05-06 Fernando Perez <fperez@colorado.edu>
4257 4262
4258 4263 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4259 4264 introduced); 'hist n1 n2' was broken.
4260 4265 (Magic.magic_pdb): added optional on/off arguments to @pdb
4261 4266 (Magic.magic_run): added option -i to @run, which executes code in
4262 4267 the IPython namespace instead of a clean one. Also added @irun as
4263 4268 an alias to @run -i.
4264 4269
4265 4270 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4266 4271 fixed (it didn't really do anything, the namespaces were wrong).
4267 4272
4268 4273 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4269 4274
4270 4275 * IPython/__init__.py (__all__): Fixed package namespace, now
4271 4276 'import IPython' does give access to IPython.<all> as
4272 4277 expected. Also renamed __release__ to Release.
4273 4278
4274 4279 * IPython/Debugger.py (__license__): created new Pdb class which
4275 4280 functions like a drop-in for the normal pdb.Pdb but does NOT
4276 4281 import readline by default. This way it doesn't muck up IPython's
4277 4282 readline handling, and now tab-completion finally works in the
4278 4283 debugger -- sort of. It completes things globally visible, but the
4279 4284 completer doesn't track the stack as pdb walks it. That's a bit
4280 4285 tricky, and I'll have to implement it later.
4281 4286
4282 4287 2002-05-05 Fernando Perez <fperez@colorado.edu>
4283 4288
4284 4289 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4285 4290 magic docstrings when printed via ? (explicit \'s were being
4286 4291 printed).
4287 4292
4288 4293 * IPython/ipmaker.py (make_IPython): fixed namespace
4289 4294 identification bug. Now variables loaded via logs or command-line
4290 4295 files are recognized in the interactive namespace by @who.
4291 4296
4292 4297 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4293 4298 log replay system stemming from the string form of Structs.
4294 4299
4295 4300 * IPython/Magic.py (Macro.__init__): improved macros to properly
4296 4301 handle magic commands in them.
4297 4302 (Magic.magic_logstart): usernames are now expanded so 'logstart
4298 4303 ~/mylog' now works.
4299 4304
4300 4305 * IPython/iplib.py (complete): fixed bug where paths starting with
4301 4306 '/' would be completed as magic names.
4302 4307
4303 4308 2002-05-04 Fernando Perez <fperez@colorado.edu>
4304 4309
4305 4310 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4306 4311 allow running full programs under the profiler's control.
4307 4312
4308 4313 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4309 4314 mode to report exceptions verbosely but without formatting
4310 4315 variables. This addresses the issue of ipython 'freezing' (it's
4311 4316 not frozen, but caught in an expensive formatting loop) when huge
4312 4317 variables are in the context of an exception.
4313 4318 (VerboseTB.text): Added '--->' markers at line where exception was
4314 4319 triggered. Much clearer to read, especially in NoColor modes.
4315 4320
4316 4321 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4317 4322 implemented in reverse when changing to the new parse_options().
4318 4323
4319 4324 2002-05-03 Fernando Perez <fperez@colorado.edu>
4320 4325
4321 4326 * IPython/Magic.py (Magic.parse_options): new function so that
4322 4327 magics can parse options easier.
4323 4328 (Magic.magic_prun): new function similar to profile.run(),
4324 4329 suggested by Chris Hart.
4325 4330 (Magic.magic_cd): fixed behavior so that it only changes if
4326 4331 directory actually is in history.
4327 4332
4328 4333 * IPython/usage.py (__doc__): added information about potential
4329 4334 slowness of Verbose exception mode when there are huge data
4330 4335 structures to be formatted (thanks to Archie Paulson).
4331 4336
4332 4337 * IPython/ipmaker.py (make_IPython): Changed default logging
4333 4338 (when simply called with -log) to use curr_dir/ipython.log in
4334 4339 rotate mode. Fixed crash which was occuring with -log before
4335 4340 (thanks to Jim Boyle).
4336 4341
4337 4342 2002-05-01 Fernando Perez <fperez@colorado.edu>
4338 4343
4339 4344 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4340 4345 was nasty -- though somewhat of a corner case).
4341 4346
4342 4347 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4343 4348 text (was a bug).
4344 4349
4345 4350 2002-04-30 Fernando Perez <fperez@colorado.edu>
4346 4351
4347 4352 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4348 4353 a print after ^D or ^C from the user so that the In[] prompt
4349 4354 doesn't over-run the gnuplot one.
4350 4355
4351 4356 2002-04-29 Fernando Perez <fperez@colorado.edu>
4352 4357
4353 4358 * Released 0.2.10
4354 4359
4355 4360 * IPython/__release__.py (version): get date dynamically.
4356 4361
4357 4362 * Misc. documentation updates thanks to Arnd's comments. Also ran
4358 4363 a full spellcheck on the manual (hadn't been done in a while).
4359 4364
4360 4365 2002-04-27 Fernando Perez <fperez@colorado.edu>
4361 4366
4362 4367 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4363 4368 starting a log in mid-session would reset the input history list.
4364 4369
4365 4370 2002-04-26 Fernando Perez <fperez@colorado.edu>
4366 4371
4367 4372 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4368 4373 all files were being included in an update. Now anything in
4369 4374 UserConfig that matches [A-Za-z]*.py will go (this excludes
4370 4375 __init__.py)
4371 4376
4372 4377 2002-04-25 Fernando Perez <fperez@colorado.edu>
4373 4378
4374 4379 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4375 4380 to __builtins__ so that any form of embedded or imported code can
4376 4381 test for being inside IPython.
4377 4382
4378 4383 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4379 4384 changed to GnuplotMagic because it's now an importable module,
4380 4385 this makes the name follow that of the standard Gnuplot module.
4381 4386 GnuplotMagic can now be loaded at any time in mid-session.
4382 4387
4383 4388 2002-04-24 Fernando Perez <fperez@colorado.edu>
4384 4389
4385 4390 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4386 4391 the globals (IPython has its own namespace) and the
4387 4392 PhysicalQuantity stuff is much better anyway.
4388 4393
4389 4394 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4390 4395 embedding example to standard user directory for
4391 4396 distribution. Also put it in the manual.
4392 4397
4393 4398 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4394 4399 instance as first argument (so it doesn't rely on some obscure
4395 4400 hidden global).
4396 4401
4397 4402 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4398 4403 delimiters. While it prevents ().TAB from working, it allows
4399 4404 completions in open (... expressions. This is by far a more common
4400 4405 case.
4401 4406
4402 4407 2002-04-23 Fernando Perez <fperez@colorado.edu>
4403 4408
4404 4409 * IPython/Extensions/InterpreterPasteInput.py: new
4405 4410 syntax-processing module for pasting lines with >>> or ... at the
4406 4411 start.
4407 4412
4408 4413 * IPython/Extensions/PhysicalQ_Interactive.py
4409 4414 (PhysicalQuantityInteractive.__int__): fixed to work with either
4410 4415 Numeric or math.
4411 4416
4412 4417 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4413 4418 provided profiles. Now we have:
4414 4419 -math -> math module as * and cmath with its own namespace.
4415 4420 -numeric -> Numeric as *, plus gnuplot & grace
4416 4421 -physics -> same as before
4417 4422
4418 4423 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4419 4424 user-defined magics wouldn't be found by @magic if they were
4420 4425 defined as class methods. Also cleaned up the namespace search
4421 4426 logic and the string building (to use %s instead of many repeated
4422 4427 string adds).
4423 4428
4424 4429 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4425 4430 of user-defined magics to operate with class methods (cleaner, in
4426 4431 line with the gnuplot code).
4427 4432
4428 4433 2002-04-22 Fernando Perez <fperez@colorado.edu>
4429 4434
4430 4435 * setup.py: updated dependency list so that manual is updated when
4431 4436 all included files change.
4432 4437
4433 4438 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4434 4439 the delimiter removal option (the fix is ugly right now).
4435 4440
4436 4441 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4437 4442 all of the math profile (quicker loading, no conflict between
4438 4443 g-9.8 and g-gnuplot).
4439 4444
4440 4445 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4441 4446 name of post-mortem files to IPython_crash_report.txt.
4442 4447
4443 4448 * Cleanup/update of the docs. Added all the new readline info and
4444 4449 formatted all lists as 'real lists'.
4445 4450
4446 4451 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4447 4452 tab-completion options, since the full readline parse_and_bind is
4448 4453 now accessible.
4449 4454
4450 4455 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4451 4456 handling of readline options. Now users can specify any string to
4452 4457 be passed to parse_and_bind(), as well as the delimiters to be
4453 4458 removed.
4454 4459 (InteractiveShell.__init__): Added __name__ to the global
4455 4460 namespace so that things like Itpl which rely on its existence
4456 4461 don't crash.
4457 4462 (InteractiveShell._prefilter): Defined the default with a _ so
4458 4463 that prefilter() is easier to override, while the default one
4459 4464 remains available.
4460 4465
4461 4466 2002-04-18 Fernando Perez <fperez@colorado.edu>
4462 4467
4463 4468 * Added information about pdb in the docs.
4464 4469
4465 4470 2002-04-17 Fernando Perez <fperez@colorado.edu>
4466 4471
4467 4472 * IPython/ipmaker.py (make_IPython): added rc_override option to
4468 4473 allow passing config options at creation time which may override
4469 4474 anything set in the config files or command line. This is
4470 4475 particularly useful for configuring embedded instances.
4471 4476
4472 4477 2002-04-15 Fernando Perez <fperez@colorado.edu>
4473 4478
4474 4479 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4475 4480 crash embedded instances because of the input cache falling out of
4476 4481 sync with the output counter.
4477 4482
4478 4483 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4479 4484 mode which calls pdb after an uncaught exception in IPython itself.
4480 4485
4481 4486 2002-04-14 Fernando Perez <fperez@colorado.edu>
4482 4487
4483 4488 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4484 4489 readline, fix it back after each call.
4485 4490
4486 4491 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4487 4492 method to force all access via __call__(), which guarantees that
4488 4493 traceback references are properly deleted.
4489 4494
4490 4495 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4491 4496 improve printing when pprint is in use.
4492 4497
4493 4498 2002-04-13 Fernando Perez <fperez@colorado.edu>
4494 4499
4495 4500 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4496 4501 exceptions aren't caught anymore. If the user triggers one, he
4497 4502 should know why he's doing it and it should go all the way up,
4498 4503 just like any other exception. So now @abort will fully kill the
4499 4504 embedded interpreter and the embedding code (unless that happens
4500 4505 to catch SystemExit).
4501 4506
4502 4507 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4503 4508 and a debugger() method to invoke the interactive pdb debugger
4504 4509 after printing exception information. Also added the corresponding
4505 4510 -pdb option and @pdb magic to control this feature, and updated
4506 4511 the docs. After a suggestion from Christopher Hart
4507 4512 (hart-AT-caltech.edu).
4508 4513
4509 4514 2002-04-12 Fernando Perez <fperez@colorado.edu>
4510 4515
4511 4516 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4512 4517 the exception handlers defined by the user (not the CrashHandler)
4513 4518 so that user exceptions don't trigger an ipython bug report.
4514 4519
4515 4520 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4516 4521 configurable (it should have always been so).
4517 4522
4518 4523 2002-03-26 Fernando Perez <fperez@colorado.edu>
4519 4524
4520 4525 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4521 4526 and there to fix embedding namespace issues. This should all be
4522 4527 done in a more elegant way.
4523 4528
4524 4529 2002-03-25 Fernando Perez <fperez@colorado.edu>
4525 4530
4526 4531 * IPython/genutils.py (get_home_dir): Try to make it work under
4527 4532 win9x also.
4528 4533
4529 4534 2002-03-20 Fernando Perez <fperez@colorado.edu>
4530 4535
4531 4536 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4532 4537 sys.displayhook untouched upon __init__.
4533 4538
4534 4539 2002-03-19 Fernando Perez <fperez@colorado.edu>
4535 4540
4536 4541 * Released 0.2.9 (for embedding bug, basically).
4537 4542
4538 4543 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4539 4544 exceptions so that enclosing shell's state can be restored.
4540 4545
4541 4546 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4542 4547 naming conventions in the .ipython/ dir.
4543 4548
4544 4549 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4545 4550 from delimiters list so filenames with - in them get expanded.
4546 4551
4547 4552 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4548 4553 sys.displayhook not being properly restored after an embedded call.
4549 4554
4550 4555 2002-03-18 Fernando Perez <fperez@colorado.edu>
4551 4556
4552 4557 * Released 0.2.8
4553 4558
4554 4559 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4555 4560 some files weren't being included in a -upgrade.
4556 4561 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4557 4562 on' so that the first tab completes.
4558 4563 (InteractiveShell.handle_magic): fixed bug with spaces around
4559 4564 quotes breaking many magic commands.
4560 4565
4561 4566 * setup.py: added note about ignoring the syntax error messages at
4562 4567 installation.
4563 4568
4564 4569 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4565 4570 streamlining the gnuplot interface, now there's only one magic @gp.
4566 4571
4567 4572 2002-03-17 Fernando Perez <fperez@colorado.edu>
4568 4573
4569 4574 * IPython/UserConfig/magic_gnuplot.py: new name for the
4570 4575 example-magic_pm.py file. Much enhanced system, now with a shell
4571 4576 for communicating directly with gnuplot, one command at a time.
4572 4577
4573 4578 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4574 4579 setting __name__=='__main__'.
4575 4580
4576 4581 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4577 4582 mini-shell for accessing gnuplot from inside ipython. Should
4578 4583 extend it later for grace access too. Inspired by Arnd's
4579 4584 suggestion.
4580 4585
4581 4586 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4582 4587 calling magic functions with () in their arguments. Thanks to Arnd
4583 4588 Baecker for pointing this to me.
4584 4589
4585 4590 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4586 4591 infinitely for integer or complex arrays (only worked with floats).
4587 4592
4588 4593 2002-03-16 Fernando Perez <fperez@colorado.edu>
4589 4594
4590 4595 * setup.py: Merged setup and setup_windows into a single script
4591 4596 which properly handles things for windows users.
4592 4597
4593 4598 2002-03-15 Fernando Perez <fperez@colorado.edu>
4594 4599
4595 4600 * Big change to the manual: now the magics are all automatically
4596 4601 documented. This information is generated from their docstrings
4597 4602 and put in a latex file included by the manual lyx file. This way
4598 4603 we get always up to date information for the magics. The manual
4599 4604 now also has proper version information, also auto-synced.
4600 4605
4601 4606 For this to work, an undocumented --magic_docstrings option was added.
4602 4607
4603 4608 2002-03-13 Fernando Perez <fperez@colorado.edu>
4604 4609
4605 4610 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4606 4611 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4607 4612
4608 4613 2002-03-12 Fernando Perez <fperez@colorado.edu>
4609 4614
4610 4615 * IPython/ultraTB.py (TermColors): changed color escapes again to
4611 4616 fix the (old, reintroduced) line-wrapping bug. Basically, if
4612 4617 \001..\002 aren't given in the color escapes, lines get wrapped
4613 4618 weirdly. But giving those screws up old xterms and emacs terms. So
4614 4619 I added some logic for emacs terms to be ok, but I can't identify old
4615 4620 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4616 4621
4617 4622 2002-03-10 Fernando Perez <fperez@colorado.edu>
4618 4623
4619 4624 * IPython/usage.py (__doc__): Various documentation cleanups and
4620 4625 updates, both in usage docstrings and in the manual.
4621 4626
4622 4627 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4623 4628 handling of caching. Set minimum acceptabe value for having a
4624 4629 cache at 20 values.
4625 4630
4626 4631 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4627 4632 install_first_time function to a method, renamed it and added an
4628 4633 'upgrade' mode. Now people can update their config directory with
4629 4634 a simple command line switch (-upgrade, also new).
4630 4635
4631 4636 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4632 4637 @file (convenient for automagic users under Python >= 2.2).
4633 4638 Removed @files (it seemed more like a plural than an abbrev. of
4634 4639 'file show').
4635 4640
4636 4641 * IPython/iplib.py (install_first_time): Fixed crash if there were
4637 4642 backup files ('~') in .ipython/ install directory.
4638 4643
4639 4644 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4640 4645 system. Things look fine, but these changes are fairly
4641 4646 intrusive. Test them for a few days.
4642 4647
4643 4648 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4644 4649 the prompts system. Now all in/out prompt strings are user
4645 4650 controllable. This is particularly useful for embedding, as one
4646 4651 can tag embedded instances with particular prompts.
4647 4652
4648 4653 Also removed global use of sys.ps1/2, which now allows nested
4649 4654 embeddings without any problems. Added command-line options for
4650 4655 the prompt strings.
4651 4656
4652 4657 2002-03-08 Fernando Perez <fperez@colorado.edu>
4653 4658
4654 4659 * IPython/UserConfig/example-embed-short.py (ipshell): added
4655 4660 example file with the bare minimum code for embedding.
4656 4661
4657 4662 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4658 4663 functionality for the embeddable shell to be activated/deactivated
4659 4664 either globally or at each call.
4660 4665
4661 4666 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4662 4667 rewriting the prompt with '--->' for auto-inputs with proper
4663 4668 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4664 4669 this is handled by the prompts class itself, as it should.
4665 4670
4666 4671 2002-03-05 Fernando Perez <fperez@colorado.edu>
4667 4672
4668 4673 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4669 4674 @logstart to avoid name clashes with the math log function.
4670 4675
4671 4676 * Big updates to X/Emacs section of the manual.
4672 4677
4673 4678 * Removed ipython_emacs. Milan explained to me how to pass
4674 4679 arguments to ipython through Emacs. Some day I'm going to end up
4675 4680 learning some lisp...
4676 4681
4677 4682 2002-03-04 Fernando Perez <fperez@colorado.edu>
4678 4683
4679 4684 * IPython/ipython_emacs: Created script to be used as the
4680 4685 py-python-command Emacs variable so we can pass IPython
4681 4686 parameters. I can't figure out how to tell Emacs directly to pass
4682 4687 parameters to IPython, so a dummy shell script will do it.
4683 4688
4684 4689 Other enhancements made for things to work better under Emacs'
4685 4690 various types of terminals. Many thanks to Milan Zamazal
4686 4691 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4687 4692
4688 4693 2002-03-01 Fernando Perez <fperez@colorado.edu>
4689 4694
4690 4695 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4691 4696 that loading of readline is now optional. This gives better
4692 4697 control to emacs users.
4693 4698
4694 4699 * IPython/ultraTB.py (__date__): Modified color escape sequences
4695 4700 and now things work fine under xterm and in Emacs' term buffers
4696 4701 (though not shell ones). Well, in emacs you get colors, but all
4697 4702 seem to be 'light' colors (no difference between dark and light
4698 4703 ones). But the garbage chars are gone, and also in xterms. It
4699 4704 seems that now I'm using 'cleaner' ansi sequences.
4700 4705
4701 4706 2002-02-21 Fernando Perez <fperez@colorado.edu>
4702 4707
4703 4708 * Released 0.2.7 (mainly to publish the scoping fix).
4704 4709
4705 4710 * IPython/Logger.py (Logger.logstate): added. A corresponding
4706 4711 @logstate magic was created.
4707 4712
4708 4713 * IPython/Magic.py: fixed nested scoping problem under Python
4709 4714 2.1.x (automagic wasn't working).
4710 4715
4711 4716 2002-02-20 Fernando Perez <fperez@colorado.edu>
4712 4717
4713 4718 * Released 0.2.6.
4714 4719
4715 4720 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4716 4721 option so that logs can come out without any headers at all.
4717 4722
4718 4723 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4719 4724 SciPy.
4720 4725
4721 4726 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4722 4727 that embedded IPython calls don't require vars() to be explicitly
4723 4728 passed. Now they are extracted from the caller's frame (code
4724 4729 snatched from Eric Jones' weave). Added better documentation to
4725 4730 the section on embedding and the example file.
4726 4731
4727 4732 * IPython/genutils.py (page): Changed so that under emacs, it just
4728 4733 prints the string. You can then page up and down in the emacs
4729 4734 buffer itself. This is how the builtin help() works.
4730 4735
4731 4736 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4732 4737 macro scoping: macros need to be executed in the user's namespace
4733 4738 to work as if they had been typed by the user.
4734 4739
4735 4740 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4736 4741 execute automatically (no need to type 'exec...'). They then
4737 4742 behave like 'true macros'. The printing system was also modified
4738 4743 for this to work.
4739 4744
4740 4745 2002-02-19 Fernando Perez <fperez@colorado.edu>
4741 4746
4742 4747 * IPython/genutils.py (page_file): new function for paging files
4743 4748 in an OS-independent way. Also necessary for file viewing to work
4744 4749 well inside Emacs buffers.
4745 4750 (page): Added checks for being in an emacs buffer.
4746 4751 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4747 4752 same bug in iplib.
4748 4753
4749 4754 2002-02-18 Fernando Perez <fperez@colorado.edu>
4750 4755
4751 4756 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4752 4757 of readline so that IPython can work inside an Emacs buffer.
4753 4758
4754 4759 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4755 4760 method signatures (they weren't really bugs, but it looks cleaner
4756 4761 and keeps PyChecker happy).
4757 4762
4758 4763 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4759 4764 for implementing various user-defined hooks. Currently only
4760 4765 display is done.
4761 4766
4762 4767 * IPython/Prompts.py (CachedOutput._display): changed display
4763 4768 functions so that they can be dynamically changed by users easily.
4764 4769
4765 4770 * IPython/Extensions/numeric_formats.py (num_display): added an
4766 4771 extension for printing NumPy arrays in flexible manners. It
4767 4772 doesn't do anything yet, but all the structure is in
4768 4773 place. Ultimately the plan is to implement output format control
4769 4774 like in Octave.
4770 4775
4771 4776 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4772 4777 methods are found at run-time by all the automatic machinery.
4773 4778
4774 4779 2002-02-17 Fernando Perez <fperez@colorado.edu>
4775 4780
4776 4781 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4777 4782 whole file a little.
4778 4783
4779 4784 * ToDo: closed this document. Now there's a new_design.lyx
4780 4785 document for all new ideas. Added making a pdf of it for the
4781 4786 end-user distro.
4782 4787
4783 4788 * IPython/Logger.py (Logger.switch_log): Created this to replace
4784 4789 logon() and logoff(). It also fixes a nasty crash reported by
4785 4790 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4786 4791
4787 4792 * IPython/iplib.py (complete): got auto-completion to work with
4788 4793 automagic (I had wanted this for a long time).
4789 4794
4790 4795 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4791 4796 to @file, since file() is now a builtin and clashes with automagic
4792 4797 for @file.
4793 4798
4794 4799 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4795 4800 of this was previously in iplib, which had grown to more than 2000
4796 4801 lines, way too long. No new functionality, but it makes managing
4797 4802 the code a bit easier.
4798 4803
4799 4804 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4800 4805 information to crash reports.
4801 4806
4802 4807 2002-02-12 Fernando Perez <fperez@colorado.edu>
4803 4808
4804 4809 * Released 0.2.5.
4805 4810
4806 4811 2002-02-11 Fernando Perez <fperez@colorado.edu>
4807 4812
4808 4813 * Wrote a relatively complete Windows installer. It puts
4809 4814 everything in place, creates Start Menu entries and fixes the
4810 4815 color issues. Nothing fancy, but it works.
4811 4816
4812 4817 2002-02-10 Fernando Perez <fperez@colorado.edu>
4813 4818
4814 4819 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4815 4820 os.path.expanduser() call so that we can type @run ~/myfile.py and
4816 4821 have thigs work as expected.
4817 4822
4818 4823 * IPython/genutils.py (page): fixed exception handling so things
4819 4824 work both in Unix and Windows correctly. Quitting a pager triggers
4820 4825 an IOError/broken pipe in Unix, and in windows not finding a pager
4821 4826 is also an IOError, so I had to actually look at the return value
4822 4827 of the exception, not just the exception itself. Should be ok now.
4823 4828
4824 4829 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4825 4830 modified to allow case-insensitive color scheme changes.
4826 4831
4827 4832 2002-02-09 Fernando Perez <fperez@colorado.edu>
4828 4833
4829 4834 * IPython/genutils.py (native_line_ends): new function to leave
4830 4835 user config files with os-native line-endings.
4831 4836
4832 4837 * README and manual updates.
4833 4838
4834 4839 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4835 4840 instead of StringType to catch Unicode strings.
4836 4841
4837 4842 * IPython/genutils.py (filefind): fixed bug for paths with
4838 4843 embedded spaces (very common in Windows).
4839 4844
4840 4845 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4841 4846 files under Windows, so that they get automatically associated
4842 4847 with a text editor. Windows makes it a pain to handle
4843 4848 extension-less files.
4844 4849
4845 4850 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4846 4851 warning about readline only occur for Posix. In Windows there's no
4847 4852 way to get readline, so why bother with the warning.
4848 4853
4849 4854 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4850 4855 for __str__ instead of dir(self), since dir() changed in 2.2.
4851 4856
4852 4857 * Ported to Windows! Tested on XP, I suspect it should work fine
4853 4858 on NT/2000, but I don't think it will work on 98 et al. That
4854 4859 series of Windows is such a piece of junk anyway that I won't try
4855 4860 porting it there. The XP port was straightforward, showed a few
4856 4861 bugs here and there (fixed all), in particular some string
4857 4862 handling stuff which required considering Unicode strings (which
4858 4863 Windows uses). This is good, but hasn't been too tested :) No
4859 4864 fancy installer yet, I'll put a note in the manual so people at
4860 4865 least make manually a shortcut.
4861 4866
4862 4867 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4863 4868 into a single one, "colors". This now controls both prompt and
4864 4869 exception color schemes, and can be changed both at startup
4865 4870 (either via command-line switches or via ipythonrc files) and at
4866 4871 runtime, with @colors.
4867 4872 (Magic.magic_run): renamed @prun to @run and removed the old
4868 4873 @run. The two were too similar to warrant keeping both.
4869 4874
4870 4875 2002-02-03 Fernando Perez <fperez@colorado.edu>
4871 4876
4872 4877 * IPython/iplib.py (install_first_time): Added comment on how to
4873 4878 configure the color options for first-time users. Put a <return>
4874 4879 request at the end so that small-terminal users get a chance to
4875 4880 read the startup info.
4876 4881
4877 4882 2002-01-23 Fernando Perez <fperez@colorado.edu>
4878 4883
4879 4884 * IPython/iplib.py (CachedOutput.update): Changed output memory
4880 4885 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4881 4886 input history we still use _i. Did this b/c these variable are
4882 4887 very commonly used in interactive work, so the less we need to
4883 4888 type the better off we are.
4884 4889 (Magic.magic_prun): updated @prun to better handle the namespaces
4885 4890 the file will run in, including a fix for __name__ not being set
4886 4891 before.
4887 4892
4888 4893 2002-01-20 Fernando Perez <fperez@colorado.edu>
4889 4894
4890 4895 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4891 4896 extra garbage for Python 2.2. Need to look more carefully into
4892 4897 this later.
4893 4898
4894 4899 2002-01-19 Fernando Perez <fperez@colorado.edu>
4895 4900
4896 4901 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4897 4902 display SyntaxError exceptions properly formatted when they occur
4898 4903 (they can be triggered by imported code).
4899 4904
4900 4905 2002-01-18 Fernando Perez <fperez@colorado.edu>
4901 4906
4902 4907 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4903 4908 SyntaxError exceptions are reported nicely formatted, instead of
4904 4909 spitting out only offset information as before.
4905 4910 (Magic.magic_prun): Added the @prun function for executing
4906 4911 programs with command line args inside IPython.
4907 4912
4908 4913 2002-01-16 Fernando Perez <fperez@colorado.edu>
4909 4914
4910 4915 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4911 4916 to *not* include the last item given in a range. This brings their
4912 4917 behavior in line with Python's slicing:
4913 4918 a[n1:n2] -> a[n1]...a[n2-1]
4914 4919 It may be a bit less convenient, but I prefer to stick to Python's
4915 4920 conventions *everywhere*, so users never have to wonder.
4916 4921 (Magic.magic_macro): Added @macro function to ease the creation of
4917 4922 macros.
4918 4923
4919 4924 2002-01-05 Fernando Perez <fperez@colorado.edu>
4920 4925
4921 4926 * Released 0.2.4.
4922 4927
4923 4928 * IPython/iplib.py (Magic.magic_pdef):
4924 4929 (InteractiveShell.safe_execfile): report magic lines and error
4925 4930 lines without line numbers so one can easily copy/paste them for
4926 4931 re-execution.
4927 4932
4928 4933 * Updated manual with recent changes.
4929 4934
4930 4935 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4931 4936 docstring printing when class? is called. Very handy for knowing
4932 4937 how to create class instances (as long as __init__ is well
4933 4938 documented, of course :)
4934 4939 (Magic.magic_doc): print both class and constructor docstrings.
4935 4940 (Magic.magic_pdef): give constructor info if passed a class and
4936 4941 __call__ info for callable object instances.
4937 4942
4938 4943 2002-01-04 Fernando Perez <fperez@colorado.edu>
4939 4944
4940 4945 * Made deep_reload() off by default. It doesn't always work
4941 4946 exactly as intended, so it's probably safer to have it off. It's
4942 4947 still available as dreload() anyway, so nothing is lost.
4943 4948
4944 4949 2002-01-02 Fernando Perez <fperez@colorado.edu>
4945 4950
4946 4951 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4947 4952 so I wanted an updated release).
4948 4953
4949 4954 2001-12-27 Fernando Perez <fperez@colorado.edu>
4950 4955
4951 4956 * IPython/iplib.py (InteractiveShell.interact): Added the original
4952 4957 code from 'code.py' for this module in order to change the
4953 4958 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4954 4959 the history cache would break when the user hit Ctrl-C, and
4955 4960 interact() offers no way to add any hooks to it.
4956 4961
4957 4962 2001-12-23 Fernando Perez <fperez@colorado.edu>
4958 4963
4959 4964 * setup.py: added check for 'MANIFEST' before trying to remove
4960 4965 it. Thanks to Sean Reifschneider.
4961 4966
4962 4967 2001-12-22 Fernando Perez <fperez@colorado.edu>
4963 4968
4964 4969 * Released 0.2.2.
4965 4970
4966 4971 * Finished (reasonably) writing the manual. Later will add the
4967 4972 python-standard navigation stylesheets, but for the time being
4968 4973 it's fairly complete. Distribution will include html and pdf
4969 4974 versions.
4970 4975
4971 4976 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4972 4977 (MayaVi author).
4973 4978
4974 4979 2001-12-21 Fernando Perez <fperez@colorado.edu>
4975 4980
4976 4981 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4977 4982 good public release, I think (with the manual and the distutils
4978 4983 installer). The manual can use some work, but that can go
4979 4984 slowly. Otherwise I think it's quite nice for end users. Next
4980 4985 summer, rewrite the guts of it...
4981 4986
4982 4987 * Changed format of ipythonrc files to use whitespace as the
4983 4988 separator instead of an explicit '='. Cleaner.
4984 4989
4985 4990 2001-12-20 Fernando Perez <fperez@colorado.edu>
4986 4991
4987 4992 * Started a manual in LyX. For now it's just a quick merge of the
4988 4993 various internal docstrings and READMEs. Later it may grow into a
4989 4994 nice, full-blown manual.
4990 4995
4991 4996 * Set up a distutils based installer. Installation should now be
4992 4997 trivially simple for end-users.
4993 4998
4994 4999 2001-12-11 Fernando Perez <fperez@colorado.edu>
4995 5000
4996 5001 * Released 0.2.0. First public release, announced it at
4997 5002 comp.lang.python. From now on, just bugfixes...
4998 5003
4999 5004 * Went through all the files, set copyright/license notices and
5000 5005 cleaned up things. Ready for release.
5001 5006
5002 5007 2001-12-10 Fernando Perez <fperez@colorado.edu>
5003 5008
5004 5009 * Changed the first-time installer not to use tarfiles. It's more
5005 5010 robust now and less unix-dependent. Also makes it easier for
5006 5011 people to later upgrade versions.
5007 5012
5008 5013 * Changed @exit to @abort to reflect the fact that it's pretty
5009 5014 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5010 5015 becomes significant only when IPyhton is embedded: in that case,
5011 5016 C-D closes IPython only, but @abort kills the enclosing program
5012 5017 too (unless it had called IPython inside a try catching
5013 5018 SystemExit).
5014 5019
5015 5020 * Created Shell module which exposes the actuall IPython Shell
5016 5021 classes, currently the normal and the embeddable one. This at
5017 5022 least offers a stable interface we won't need to change when
5018 5023 (later) the internals are rewritten. That rewrite will be confined
5019 5024 to iplib and ipmaker, but the Shell interface should remain as is.
5020 5025
5021 5026 * Added embed module which offers an embeddable IPShell object,
5022 5027 useful to fire up IPython *inside* a running program. Great for
5023 5028 debugging or dynamical data analysis.
5024 5029
5025 5030 2001-12-08 Fernando Perez <fperez@colorado.edu>
5026 5031
5027 5032 * Fixed small bug preventing seeing info from methods of defined
5028 5033 objects (incorrect namespace in _ofind()).
5029 5034
5030 5035 * Documentation cleanup. Moved the main usage docstrings to a
5031 5036 separate file, usage.py (cleaner to maintain, and hopefully in the
5032 5037 future some perlpod-like way of producing interactive, man and
5033 5038 html docs out of it will be found).
5034 5039
5035 5040 * Added @profile to see your profile at any time.
5036 5041
5037 5042 * Added @p as an alias for 'print'. It's especially convenient if
5038 5043 using automagic ('p x' prints x).
5039 5044
5040 5045 * Small cleanups and fixes after a pychecker run.
5041 5046
5042 5047 * Changed the @cd command to handle @cd - and @cd -<n> for
5043 5048 visiting any directory in _dh.
5044 5049
5045 5050 * Introduced _dh, a history of visited directories. @dhist prints
5046 5051 it out with numbers.
5047 5052
5048 5053 2001-12-07 Fernando Perez <fperez@colorado.edu>
5049 5054
5050 5055 * Released 0.1.22
5051 5056
5052 5057 * Made initialization a bit more robust against invalid color
5053 5058 options in user input (exit, not traceback-crash).
5054 5059
5055 5060 * Changed the bug crash reporter to write the report only in the
5056 5061 user's .ipython directory. That way IPython won't litter people's
5057 5062 hard disks with crash files all over the place. Also print on
5058 5063 screen the necessary mail command.
5059 5064
5060 5065 * With the new ultraTB, implemented LightBG color scheme for light
5061 5066 background terminals. A lot of people like white backgrounds, so I
5062 5067 guess we should at least give them something readable.
5063 5068
5064 5069 2001-12-06 Fernando Perez <fperez@colorado.edu>
5065 5070
5066 5071 * Modified the structure of ultraTB. Now there's a proper class
5067 5072 for tables of color schemes which allow adding schemes easily and
5068 5073 switching the active scheme without creating a new instance every
5069 5074 time (which was ridiculous). The syntax for creating new schemes
5070 5075 is also cleaner. I think ultraTB is finally done, with a clean
5071 5076 class structure. Names are also much cleaner (now there's proper
5072 5077 color tables, no need for every variable to also have 'color' in
5073 5078 its name).
5074 5079
5075 5080 * Broke down genutils into separate files. Now genutils only
5076 5081 contains utility functions, and classes have been moved to their
5077 5082 own files (they had enough independent functionality to warrant
5078 5083 it): ConfigLoader, OutputTrap, Struct.
5079 5084
5080 5085 2001-12-05 Fernando Perez <fperez@colorado.edu>
5081 5086
5082 5087 * IPython turns 21! Released version 0.1.21, as a candidate for
5083 5088 public consumption. If all goes well, release in a few days.
5084 5089
5085 5090 * Fixed path bug (files in Extensions/ directory wouldn't be found
5086 5091 unless IPython/ was explicitly in sys.path).
5087 5092
5088 5093 * Extended the FlexCompleter class as MagicCompleter to allow
5089 5094 completion of @-starting lines.
5090 5095
5091 5096 * Created __release__.py file as a central repository for release
5092 5097 info that other files can read from.
5093 5098
5094 5099 * Fixed small bug in logging: when logging was turned on in
5095 5100 mid-session, old lines with special meanings (!@?) were being
5096 5101 logged without the prepended comment, which is necessary since
5097 5102 they are not truly valid python syntax. This should make session
5098 5103 restores produce less errors.
5099 5104
5100 5105 * The namespace cleanup forced me to make a FlexCompleter class
5101 5106 which is nothing but a ripoff of rlcompleter, but with selectable
5102 5107 namespace (rlcompleter only works in __main__.__dict__). I'll try
5103 5108 to submit a note to the authors to see if this change can be
5104 5109 incorporated in future rlcompleter releases (Dec.6: done)
5105 5110
5106 5111 * More fixes to namespace handling. It was a mess! Now all
5107 5112 explicit references to __main__.__dict__ are gone (except when
5108 5113 really needed) and everything is handled through the namespace
5109 5114 dicts in the IPython instance. We seem to be getting somewhere
5110 5115 with this, finally...
5111 5116
5112 5117 * Small documentation updates.
5113 5118
5114 5119 * Created the Extensions directory under IPython (with an
5115 5120 __init__.py). Put the PhysicalQ stuff there. This directory should
5116 5121 be used for all special-purpose extensions.
5117 5122
5118 5123 * File renaming:
5119 5124 ipythonlib --> ipmaker
5120 5125 ipplib --> iplib
5121 5126 This makes a bit more sense in terms of what these files actually do.
5122 5127
5123 5128 * Moved all the classes and functions in ipythonlib to ipplib, so
5124 5129 now ipythonlib only has make_IPython(). This will ease up its
5125 5130 splitting in smaller functional chunks later.
5126 5131
5127 5132 * Cleaned up (done, I think) output of @whos. Better column
5128 5133 formatting, and now shows str(var) for as much as it can, which is
5129 5134 typically what one gets with a 'print var'.
5130 5135
5131 5136 2001-12-04 Fernando Perez <fperez@colorado.edu>
5132 5137
5133 5138 * Fixed namespace problems. Now builtin/IPyhton/user names get
5134 5139 properly reported in their namespace. Internal namespace handling
5135 5140 is finally getting decent (not perfect yet, but much better than
5136 5141 the ad-hoc mess we had).
5137 5142
5138 5143 * Removed -exit option. If people just want to run a python
5139 5144 script, that's what the normal interpreter is for. Less
5140 5145 unnecessary options, less chances for bugs.
5141 5146
5142 5147 * Added a crash handler which generates a complete post-mortem if
5143 5148 IPython crashes. This will help a lot in tracking bugs down the
5144 5149 road.
5145 5150
5146 5151 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5147 5152 which were boud to functions being reassigned would bypass the
5148 5153 logger, breaking the sync of _il with the prompt counter. This
5149 5154 would then crash IPython later when a new line was logged.
5150 5155
5151 5156 2001-12-02 Fernando Perez <fperez@colorado.edu>
5152 5157
5153 5158 * Made IPython a package. This means people don't have to clutter
5154 5159 their sys.path with yet another directory. Changed the INSTALL
5155 5160 file accordingly.
5156 5161
5157 5162 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5158 5163 sorts its output (so @who shows it sorted) and @whos formats the
5159 5164 table according to the width of the first column. Nicer, easier to
5160 5165 read. Todo: write a generic table_format() which takes a list of
5161 5166 lists and prints it nicely formatted, with optional row/column
5162 5167 separators and proper padding and justification.
5163 5168
5164 5169 * Released 0.1.20
5165 5170
5166 5171 * Fixed bug in @log which would reverse the inputcache list (a
5167 5172 copy operation was missing).
5168 5173
5169 5174 * Code cleanup. @config was changed to use page(). Better, since
5170 5175 its output is always quite long.
5171 5176
5172 5177 * Itpl is back as a dependency. I was having too many problems
5173 5178 getting the parametric aliases to work reliably, and it's just
5174 5179 easier to code weird string operations with it than playing %()s
5175 5180 games. It's only ~6k, so I don't think it's too big a deal.
5176 5181
5177 5182 * Found (and fixed) a very nasty bug with history. !lines weren't
5178 5183 getting cached, and the out of sync caches would crash
5179 5184 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5180 5185 division of labor a bit better. Bug fixed, cleaner structure.
5181 5186
5182 5187 2001-12-01 Fernando Perez <fperez@colorado.edu>
5183 5188
5184 5189 * Released 0.1.19
5185 5190
5186 5191 * Added option -n to @hist to prevent line number printing. Much
5187 5192 easier to copy/paste code this way.
5188 5193
5189 5194 * Created global _il to hold the input list. Allows easy
5190 5195 re-execution of blocks of code by slicing it (inspired by Janko's
5191 5196 comment on 'macros').
5192 5197
5193 5198 * Small fixes and doc updates.
5194 5199
5195 5200 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5196 5201 much too fragile with automagic. Handles properly multi-line
5197 5202 statements and takes parameters.
5198 5203
5199 5204 2001-11-30 Fernando Perez <fperez@colorado.edu>
5200 5205
5201 5206 * Version 0.1.18 released.
5202 5207
5203 5208 * Fixed nasty namespace bug in initial module imports.
5204 5209
5205 5210 * Added copyright/license notes to all code files (except
5206 5211 DPyGetOpt). For the time being, LGPL. That could change.
5207 5212
5208 5213 * Rewrote a much nicer README, updated INSTALL, cleaned up
5209 5214 ipythonrc-* samples.
5210 5215
5211 5216 * Overall code/documentation cleanup. Basically ready for
5212 5217 release. Only remaining thing: licence decision (LGPL?).
5213 5218
5214 5219 * Converted load_config to a class, ConfigLoader. Now recursion
5215 5220 control is better organized. Doesn't include the same file twice.
5216 5221
5217 5222 2001-11-29 Fernando Perez <fperez@colorado.edu>
5218 5223
5219 5224 * Got input history working. Changed output history variables from
5220 5225 _p to _o so that _i is for input and _o for output. Just cleaner
5221 5226 convention.
5222 5227
5223 5228 * Implemented parametric aliases. This pretty much allows the
5224 5229 alias system to offer full-blown shell convenience, I think.
5225 5230
5226 5231 * Version 0.1.17 released, 0.1.18 opened.
5227 5232
5228 5233 * dot_ipython/ipythonrc (alias): added documentation.
5229 5234 (xcolor): Fixed small bug (xcolors -> xcolor)
5230 5235
5231 5236 * Changed the alias system. Now alias is a magic command to define
5232 5237 aliases just like the shell. Rationale: the builtin magics should
5233 5238 be there for things deeply connected to IPython's
5234 5239 architecture. And this is a much lighter system for what I think
5235 5240 is the really important feature: allowing users to define quickly
5236 5241 magics that will do shell things for them, so they can customize
5237 5242 IPython easily to match their work habits. If someone is really
5238 5243 desperate to have another name for a builtin alias, they can
5239 5244 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5240 5245 works.
5241 5246
5242 5247 2001-11-28 Fernando Perez <fperez@colorado.edu>
5243 5248
5244 5249 * Changed @file so that it opens the source file at the proper
5245 5250 line. Since it uses less, if your EDITOR environment is
5246 5251 configured, typing v will immediately open your editor of choice
5247 5252 right at the line where the object is defined. Not as quick as
5248 5253 having a direct @edit command, but for all intents and purposes it
5249 5254 works. And I don't have to worry about writing @edit to deal with
5250 5255 all the editors, less does that.
5251 5256
5252 5257 * Version 0.1.16 released, 0.1.17 opened.
5253 5258
5254 5259 * Fixed some nasty bugs in the page/page_dumb combo that could
5255 5260 crash IPython.
5256 5261
5257 5262 2001-11-27 Fernando Perez <fperez@colorado.edu>
5258 5263
5259 5264 * Version 0.1.15 released, 0.1.16 opened.
5260 5265
5261 5266 * Finally got ? and ?? to work for undefined things: now it's
5262 5267 possible to type {}.get? and get information about the get method
5263 5268 of dicts, or os.path? even if only os is defined (so technically
5264 5269 os.path isn't). Works at any level. For example, after import os,
5265 5270 os?, os.path?, os.path.abspath? all work. This is great, took some
5266 5271 work in _ofind.
5267 5272
5268 5273 * Fixed more bugs with logging. The sanest way to do it was to add
5269 5274 to @log a 'mode' parameter. Killed two in one shot (this mode
5270 5275 option was a request of Janko's). I think it's finally clean
5271 5276 (famous last words).
5272 5277
5273 5278 * Added a page_dumb() pager which does a decent job of paging on
5274 5279 screen, if better things (like less) aren't available. One less
5275 5280 unix dependency (someday maybe somebody will port this to
5276 5281 windows).
5277 5282
5278 5283 * Fixed problem in magic_log: would lock of logging out if log
5279 5284 creation failed (because it would still think it had succeeded).
5280 5285
5281 5286 * Improved the page() function using curses to auto-detect screen
5282 5287 size. Now it can make a much better decision on whether to print
5283 5288 or page a string. Option screen_length was modified: a value 0
5284 5289 means auto-detect, and that's the default now.
5285 5290
5286 5291 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5287 5292 go out. I'll test it for a few days, then talk to Janko about
5288 5293 licences and announce it.
5289 5294
5290 5295 * Fixed the length of the auto-generated ---> prompt which appears
5291 5296 for auto-parens and auto-quotes. Getting this right isn't trivial,
5292 5297 with all the color escapes, different prompt types and optional
5293 5298 separators. But it seems to be working in all the combinations.
5294 5299
5295 5300 2001-11-26 Fernando Perez <fperez@colorado.edu>
5296 5301
5297 5302 * Wrote a regexp filter to get option types from the option names
5298 5303 string. This eliminates the need to manually keep two duplicate
5299 5304 lists.
5300 5305
5301 5306 * Removed the unneeded check_option_names. Now options are handled
5302 5307 in a much saner manner and it's easy to visually check that things
5303 5308 are ok.
5304 5309
5305 5310 * Updated version numbers on all files I modified to carry a
5306 5311 notice so Janko and Nathan have clear version markers.
5307 5312
5308 5313 * Updated docstring for ultraTB with my changes. I should send
5309 5314 this to Nathan.
5310 5315
5311 5316 * Lots of small fixes. Ran everything through pychecker again.
5312 5317
5313 5318 * Made loading of deep_reload an cmd line option. If it's not too
5314 5319 kosher, now people can just disable it. With -nodeep_reload it's
5315 5320 still available as dreload(), it just won't overwrite reload().
5316 5321
5317 5322 * Moved many options to the no| form (-opt and -noopt
5318 5323 accepted). Cleaner.
5319 5324
5320 5325 * Changed magic_log so that if called with no parameters, it uses
5321 5326 'rotate' mode. That way auto-generated logs aren't automatically
5322 5327 over-written. For normal logs, now a backup is made if it exists
5323 5328 (only 1 level of backups). A new 'backup' mode was added to the
5324 5329 Logger class to support this. This was a request by Janko.
5325 5330
5326 5331 * Added @logoff/@logon to stop/restart an active log.
5327 5332
5328 5333 * Fixed a lot of bugs in log saving/replay. It was pretty
5329 5334 broken. Now special lines (!@,/) appear properly in the command
5330 5335 history after a log replay.
5331 5336
5332 5337 * Tried and failed to implement full session saving via pickle. My
5333 5338 idea was to pickle __main__.__dict__, but modules can't be
5334 5339 pickled. This would be a better alternative to replaying logs, but
5335 5340 seems quite tricky to get to work. Changed -session to be called
5336 5341 -logplay, which more accurately reflects what it does. And if we
5337 5342 ever get real session saving working, -session is now available.
5338 5343
5339 5344 * Implemented color schemes for prompts also. As for tracebacks,
5340 5345 currently only NoColor and Linux are supported. But now the
5341 5346 infrastructure is in place, based on a generic ColorScheme
5342 5347 class. So writing and activating new schemes both for the prompts
5343 5348 and the tracebacks should be straightforward.
5344 5349
5345 5350 * Version 0.1.13 released, 0.1.14 opened.
5346 5351
5347 5352 * Changed handling of options for output cache. Now counter is
5348 5353 hardwired starting at 1 and one specifies the maximum number of
5349 5354 entries *in the outcache* (not the max prompt counter). This is
5350 5355 much better, since many statements won't increase the cache
5351 5356 count. It also eliminated some confusing options, now there's only
5352 5357 one: cache_size.
5353 5358
5354 5359 * Added 'alias' magic function and magic_alias option in the
5355 5360 ipythonrc file. Now the user can easily define whatever names he
5356 5361 wants for the magic functions without having to play weird
5357 5362 namespace games. This gives IPython a real shell-like feel.
5358 5363
5359 5364 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5360 5365 @ or not).
5361 5366
5362 5367 This was one of the last remaining 'visible' bugs (that I know
5363 5368 of). I think if I can clean up the session loading so it works
5364 5369 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5365 5370 about licensing).
5366 5371
5367 5372 2001-11-25 Fernando Perez <fperez@colorado.edu>
5368 5373
5369 5374 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5370 5375 there's a cleaner distinction between what ? and ?? show.
5371 5376
5372 5377 * Added screen_length option. Now the user can define his own
5373 5378 screen size for page() operations.
5374 5379
5375 5380 * Implemented magic shell-like functions with automatic code
5376 5381 generation. Now adding another function is just a matter of adding
5377 5382 an entry to a dict, and the function is dynamically generated at
5378 5383 run-time. Python has some really cool features!
5379 5384
5380 5385 * Renamed many options to cleanup conventions a little. Now all
5381 5386 are lowercase, and only underscores where needed. Also in the code
5382 5387 option name tables are clearer.
5383 5388
5384 5389 * Changed prompts a little. Now input is 'In [n]:' instead of
5385 5390 'In[n]:='. This allows it the numbers to be aligned with the
5386 5391 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5387 5392 Python (it was a Mathematica thing). The '...' continuation prompt
5388 5393 was also changed a little to align better.
5389 5394
5390 5395 * Fixed bug when flushing output cache. Not all _p<n> variables
5391 5396 exist, so their deletion needs to be wrapped in a try:
5392 5397
5393 5398 * Figured out how to properly use inspect.formatargspec() (it
5394 5399 requires the args preceded by *). So I removed all the code from
5395 5400 _get_pdef in Magic, which was just replicating that.
5396 5401
5397 5402 * Added test to prefilter to allow redefining magic function names
5398 5403 as variables. This is ok, since the @ form is always available,
5399 5404 but whe should allow the user to define a variable called 'ls' if
5400 5405 he needs it.
5401 5406
5402 5407 * Moved the ToDo information from README into a separate ToDo.
5403 5408
5404 5409 * General code cleanup and small bugfixes. I think it's close to a
5405 5410 state where it can be released, obviously with a big 'beta'
5406 5411 warning on it.
5407 5412
5408 5413 * Got the magic function split to work. Now all magics are defined
5409 5414 in a separate class. It just organizes things a bit, and now
5410 5415 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5411 5416 was too long).
5412 5417
5413 5418 * Changed @clear to @reset to avoid potential confusions with
5414 5419 the shell command clear. Also renamed @cl to @clear, which does
5415 5420 exactly what people expect it to from their shell experience.
5416 5421
5417 5422 Added a check to the @reset command (since it's so
5418 5423 destructive, it's probably a good idea to ask for confirmation).
5419 5424 But now reset only works for full namespace resetting. Since the
5420 5425 del keyword is already there for deleting a few specific
5421 5426 variables, I don't see the point of having a redundant magic
5422 5427 function for the same task.
5423 5428
5424 5429 2001-11-24 Fernando Perez <fperez@colorado.edu>
5425 5430
5426 5431 * Updated the builtin docs (esp. the ? ones).
5427 5432
5428 5433 * Ran all the code through pychecker. Not terribly impressed with
5429 5434 it: lots of spurious warnings and didn't really find anything of
5430 5435 substance (just a few modules being imported and not used).
5431 5436
5432 5437 * Implemented the new ultraTB functionality into IPython. New
5433 5438 option: xcolors. This chooses color scheme. xmode now only selects
5434 5439 between Plain and Verbose. Better orthogonality.
5435 5440
5436 5441 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5437 5442 mode and color scheme for the exception handlers. Now it's
5438 5443 possible to have the verbose traceback with no coloring.
5439 5444
5440 5445 2001-11-23 Fernando Perez <fperez@colorado.edu>
5441 5446
5442 5447 * Version 0.1.12 released, 0.1.13 opened.
5443 5448
5444 5449 * Removed option to set auto-quote and auto-paren escapes by
5445 5450 user. The chances of breaking valid syntax are just too high. If
5446 5451 someone *really* wants, they can always dig into the code.
5447 5452
5448 5453 * Made prompt separators configurable.
5449 5454
5450 5455 2001-11-22 Fernando Perez <fperez@colorado.edu>
5451 5456
5452 5457 * Small bugfixes in many places.
5453 5458
5454 5459 * Removed the MyCompleter class from ipplib. It seemed redundant
5455 5460 with the C-p,C-n history search functionality. Less code to
5456 5461 maintain.
5457 5462
5458 5463 * Moved all the original ipython.py code into ipythonlib.py. Right
5459 5464 now it's just one big dump into a function called make_IPython, so
5460 5465 no real modularity has been gained. But at least it makes the
5461 5466 wrapper script tiny, and since ipythonlib is a module, it gets
5462 5467 compiled and startup is much faster.
5463 5468
5464 5469 This is a reasobably 'deep' change, so we should test it for a
5465 5470 while without messing too much more with the code.
5466 5471
5467 5472 2001-11-21 Fernando Perez <fperez@colorado.edu>
5468 5473
5469 5474 * Version 0.1.11 released, 0.1.12 opened for further work.
5470 5475
5471 5476 * Removed dependency on Itpl. It was only needed in one place. It
5472 5477 would be nice if this became part of python, though. It makes life
5473 5478 *a lot* easier in some cases.
5474 5479
5475 5480 * Simplified the prefilter code a bit. Now all handlers are
5476 5481 expected to explicitly return a value (at least a blank string).
5477 5482
5478 5483 * Heavy edits in ipplib. Removed the help system altogether. Now
5479 5484 obj?/?? is used for inspecting objects, a magic @doc prints
5480 5485 docstrings, and full-blown Python help is accessed via the 'help'
5481 5486 keyword. This cleans up a lot of code (less to maintain) and does
5482 5487 the job. Since 'help' is now a standard Python component, might as
5483 5488 well use it and remove duplicate functionality.
5484 5489
5485 5490 Also removed the option to use ipplib as a standalone program. By
5486 5491 now it's too dependent on other parts of IPython to function alone.
5487 5492
5488 5493 * Fixed bug in genutils.pager. It would crash if the pager was
5489 5494 exited immediately after opening (broken pipe).
5490 5495
5491 5496 * Trimmed down the VerboseTB reporting a little. The header is
5492 5497 much shorter now and the repeated exception arguments at the end
5493 5498 have been removed. For interactive use the old header seemed a bit
5494 5499 excessive.
5495 5500
5496 5501 * Fixed small bug in output of @whos for variables with multi-word
5497 5502 types (only first word was displayed).
5498 5503
5499 5504 2001-11-17 Fernando Perez <fperez@colorado.edu>
5500 5505
5501 5506 * Version 0.1.10 released, 0.1.11 opened for further work.
5502 5507
5503 5508 * Modified dirs and friends. dirs now *returns* the stack (not
5504 5509 prints), so one can manipulate it as a variable. Convenient to
5505 5510 travel along many directories.
5506 5511
5507 5512 * Fixed bug in magic_pdef: would only work with functions with
5508 5513 arguments with default values.
5509 5514
5510 5515 2001-11-14 Fernando Perez <fperez@colorado.edu>
5511 5516
5512 5517 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5513 5518 example with IPython. Various other minor fixes and cleanups.
5514 5519
5515 5520 * Version 0.1.9 released, 0.1.10 opened for further work.
5516 5521
5517 5522 * Added sys.path to the list of directories searched in the
5518 5523 execfile= option. It used to be the current directory and the
5519 5524 user's IPYTHONDIR only.
5520 5525
5521 5526 2001-11-13 Fernando Perez <fperez@colorado.edu>
5522 5527
5523 5528 * Reinstated the raw_input/prefilter separation that Janko had
5524 5529 initially. This gives a more convenient setup for extending the
5525 5530 pre-processor from the outside: raw_input always gets a string,
5526 5531 and prefilter has to process it. We can then redefine prefilter
5527 5532 from the outside and implement extensions for special
5528 5533 purposes.
5529 5534
5530 5535 Today I got one for inputting PhysicalQuantity objects
5531 5536 (from Scientific) without needing any function calls at
5532 5537 all. Extremely convenient, and it's all done as a user-level
5533 5538 extension (no IPython code was touched). Now instead of:
5534 5539 a = PhysicalQuantity(4.2,'m/s**2')
5535 5540 one can simply say
5536 5541 a = 4.2 m/s**2
5537 5542 or even
5538 5543 a = 4.2 m/s^2
5539 5544
5540 5545 I use this, but it's also a proof of concept: IPython really is
5541 5546 fully user-extensible, even at the level of the parsing of the
5542 5547 command line. It's not trivial, but it's perfectly doable.
5543 5548
5544 5549 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5545 5550 the problem of modules being loaded in the inverse order in which
5546 5551 they were defined in
5547 5552
5548 5553 * Version 0.1.8 released, 0.1.9 opened for further work.
5549 5554
5550 5555 * Added magics pdef, source and file. They respectively show the
5551 5556 definition line ('prototype' in C), source code and full python
5552 5557 file for any callable object. The object inspector oinfo uses
5553 5558 these to show the same information.
5554 5559
5555 5560 * Version 0.1.7 released, 0.1.8 opened for further work.
5556 5561
5557 5562 * Separated all the magic functions into a class called Magic. The
5558 5563 InteractiveShell class was becoming too big for Xemacs to handle
5559 5564 (de-indenting a line would lock it up for 10 seconds while it
5560 5565 backtracked on the whole class!)
5561 5566
5562 5567 FIXME: didn't work. It can be done, but right now namespaces are
5563 5568 all messed up. Do it later (reverted it for now, so at least
5564 5569 everything works as before).
5565 5570
5566 5571 * Got the object introspection system (magic_oinfo) working! I
5567 5572 think this is pretty much ready for release to Janko, so he can
5568 5573 test it for a while and then announce it. Pretty much 100% of what
5569 5574 I wanted for the 'phase 1' release is ready. Happy, tired.
5570 5575
5571 5576 2001-11-12 Fernando Perez <fperez@colorado.edu>
5572 5577
5573 5578 * Version 0.1.6 released, 0.1.7 opened for further work.
5574 5579
5575 5580 * Fixed bug in printing: it used to test for truth before
5576 5581 printing, so 0 wouldn't print. Now checks for None.
5577 5582
5578 5583 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5579 5584 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5580 5585 reaches by hand into the outputcache. Think of a better way to do
5581 5586 this later.
5582 5587
5583 5588 * Various small fixes thanks to Nathan's comments.
5584 5589
5585 5590 * Changed magic_pprint to magic_Pprint. This way it doesn't
5586 5591 collide with pprint() and the name is consistent with the command
5587 5592 line option.
5588 5593
5589 5594 * Changed prompt counter behavior to be fully like
5590 5595 Mathematica's. That is, even input that doesn't return a result
5591 5596 raises the prompt counter. The old behavior was kind of confusing
5592 5597 (getting the same prompt number several times if the operation
5593 5598 didn't return a result).
5594 5599
5595 5600 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5596 5601
5597 5602 * Fixed -Classic mode (wasn't working anymore).
5598 5603
5599 5604 * Added colored prompts using Nathan's new code. Colors are
5600 5605 currently hardwired, they can be user-configurable. For
5601 5606 developers, they can be chosen in file ipythonlib.py, at the
5602 5607 beginning of the CachedOutput class def.
5603 5608
5604 5609 2001-11-11 Fernando Perez <fperez@colorado.edu>
5605 5610
5606 5611 * Version 0.1.5 released, 0.1.6 opened for further work.
5607 5612
5608 5613 * Changed magic_env to *return* the environment as a dict (not to
5609 5614 print it). This way it prints, but it can also be processed.
5610 5615
5611 5616 * Added Verbose exception reporting to interactive
5612 5617 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5613 5618 traceback. Had to make some changes to the ultraTB file. This is
5614 5619 probably the last 'big' thing in my mental todo list. This ties
5615 5620 in with the next entry:
5616 5621
5617 5622 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5618 5623 has to specify is Plain, Color or Verbose for all exception
5619 5624 handling.
5620 5625
5621 5626 * Removed ShellServices option. All this can really be done via
5622 5627 the magic system. It's easier to extend, cleaner and has automatic
5623 5628 namespace protection and documentation.
5624 5629
5625 5630 2001-11-09 Fernando Perez <fperez@colorado.edu>
5626 5631
5627 5632 * Fixed bug in output cache flushing (missing parameter to
5628 5633 __init__). Other small bugs fixed (found using pychecker).
5629 5634
5630 5635 * Version 0.1.4 opened for bugfixing.
5631 5636
5632 5637 2001-11-07 Fernando Perez <fperez@colorado.edu>
5633 5638
5634 5639 * Version 0.1.3 released, mainly because of the raw_input bug.
5635 5640
5636 5641 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5637 5642 and when testing for whether things were callable, a call could
5638 5643 actually be made to certain functions. They would get called again
5639 5644 once 'really' executed, with a resulting double call. A disaster
5640 5645 in many cases (list.reverse() would never work!).
5641 5646
5642 5647 * Removed prefilter() function, moved its code to raw_input (which
5643 5648 after all was just a near-empty caller for prefilter). This saves
5644 5649 a function call on every prompt, and simplifies the class a tiny bit.
5645 5650
5646 5651 * Fix _ip to __ip name in magic example file.
5647 5652
5648 5653 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5649 5654 work with non-gnu versions of tar.
5650 5655
5651 5656 2001-11-06 Fernando Perez <fperez@colorado.edu>
5652 5657
5653 5658 * Version 0.1.2. Just to keep track of the recent changes.
5654 5659
5655 5660 * Fixed nasty bug in output prompt routine. It used to check 'if
5656 5661 arg != None...'. Problem is, this fails if arg implements a
5657 5662 special comparison (__cmp__) which disallows comparing to
5658 5663 None. Found it when trying to use the PhysicalQuantity module from
5659 5664 ScientificPython.
5660 5665
5661 5666 2001-11-05 Fernando Perez <fperez@colorado.edu>
5662 5667
5663 5668 * Also added dirs. Now the pushd/popd/dirs family functions
5664 5669 basically like the shell, with the added convenience of going home
5665 5670 when called with no args.
5666 5671
5667 5672 * pushd/popd slightly modified to mimic shell behavior more
5668 5673 closely.
5669 5674
5670 5675 * Added env,pushd,popd from ShellServices as magic functions. I
5671 5676 think the cleanest will be to port all desired functions from
5672 5677 ShellServices as magics and remove ShellServices altogether. This
5673 5678 will provide a single, clean way of adding functionality
5674 5679 (shell-type or otherwise) to IP.
5675 5680
5676 5681 2001-11-04 Fernando Perez <fperez@colorado.edu>
5677 5682
5678 5683 * Added .ipython/ directory to sys.path. This way users can keep
5679 5684 customizations there and access them via import.
5680 5685
5681 5686 2001-11-03 Fernando Perez <fperez@colorado.edu>
5682 5687
5683 5688 * Opened version 0.1.1 for new changes.
5684 5689
5685 5690 * Changed version number to 0.1.0: first 'public' release, sent to
5686 5691 Nathan and Janko.
5687 5692
5688 5693 * Lots of small fixes and tweaks.
5689 5694
5690 5695 * Minor changes to whos format. Now strings are shown, snipped if
5691 5696 too long.
5692 5697
5693 5698 * Changed ShellServices to work on __main__ so they show up in @who
5694 5699
5695 5700 * Help also works with ? at the end of a line:
5696 5701 ?sin and sin?
5697 5702 both produce the same effect. This is nice, as often I use the
5698 5703 tab-complete to find the name of a method, but I used to then have
5699 5704 to go to the beginning of the line to put a ? if I wanted more
5700 5705 info. Now I can just add the ? and hit return. Convenient.
5701 5706
5702 5707 2001-11-02 Fernando Perez <fperez@colorado.edu>
5703 5708
5704 5709 * Python version check (>=2.1) added.
5705 5710
5706 5711 * Added LazyPython documentation. At this point the docs are quite
5707 5712 a mess. A cleanup is in order.
5708 5713
5709 5714 * Auto-installer created. For some bizarre reason, the zipfiles
5710 5715 module isn't working on my system. So I made a tar version
5711 5716 (hopefully the command line options in various systems won't kill
5712 5717 me).
5713 5718
5714 5719 * Fixes to Struct in genutils. Now all dictionary-like methods are
5715 5720 protected (reasonably).
5716 5721
5717 5722 * Added pager function to genutils and changed ? to print usage
5718 5723 note through it (it was too long).
5719 5724
5720 5725 * Added the LazyPython functionality. Works great! I changed the
5721 5726 auto-quote escape to ';', it's on home row and next to '. But
5722 5727 both auto-quote and auto-paren (still /) escapes are command-line
5723 5728 parameters.
5724 5729
5725 5730
5726 5731 2001-11-01 Fernando Perez <fperez@colorado.edu>
5727 5732
5728 5733 * Version changed to 0.0.7. Fairly large change: configuration now
5729 5734 is all stored in a directory, by default .ipython. There, all
5730 5735 config files have normal looking names (not .names)
5731 5736
5732 5737 * Version 0.0.6 Released first to Lucas and Archie as a test
5733 5738 run. Since it's the first 'semi-public' release, change version to
5734 5739 > 0.0.6 for any changes now.
5735 5740
5736 5741 * Stuff I had put in the ipplib.py changelog:
5737 5742
5738 5743 Changes to InteractiveShell:
5739 5744
5740 5745 - Made the usage message a parameter.
5741 5746
5742 5747 - Require the name of the shell variable to be given. It's a bit
5743 5748 of a hack, but allows the name 'shell' not to be hardwired in the
5744 5749 magic (@) handler, which is problematic b/c it requires
5745 5750 polluting the global namespace with 'shell'. This in turn is
5746 5751 fragile: if a user redefines a variable called shell, things
5747 5752 break.
5748 5753
5749 5754 - magic @: all functions available through @ need to be defined
5750 5755 as magic_<name>, even though they can be called simply as
5751 5756 @<name>. This allows the special command @magic to gather
5752 5757 information automatically about all existing magic functions,
5753 5758 even if they are run-time user extensions, by parsing the shell
5754 5759 instance __dict__ looking for special magic_ names.
5755 5760
5756 5761 - mainloop: added *two* local namespace parameters. This allows
5757 5762 the class to differentiate between parameters which were there
5758 5763 before and after command line initialization was processed. This
5759 5764 way, later @who can show things loaded at startup by the
5760 5765 user. This trick was necessary to make session saving/reloading
5761 5766 really work: ideally after saving/exiting/reloading a session,
5762 5767 *everything* should look the same, including the output of @who. I
5763 5768 was only able to make this work with this double namespace
5764 5769 trick.
5765 5770
5766 5771 - added a header to the logfile which allows (almost) full
5767 5772 session restoring.
5768 5773
5769 5774 - prepend lines beginning with @ or !, with a and log
5770 5775 them. Why? !lines: may be useful to know what you did @lines:
5771 5776 they may affect session state. So when restoring a session, at
5772 5777 least inform the user of their presence. I couldn't quite get
5773 5778 them to properly re-execute, but at least the user is warned.
5774 5779
5775 5780 * Started ChangeLog.
@@ -1,477 +1,479
1 1 ;;; ipython.el --- Adds support for IPython to python-mode.el
2 2
3 3 ;; Copyright (C) 2002, 2003, 2004, 2005 Alexander Schmolck
4 4 ;; Author: Alexander Schmolck
5 5 ;; Keywords: ipython python languages oop
6 6 ;; URL: http://ipython.scipy.org
7 7 ;; Compatibility: Emacs21, XEmacs21
8 8 ;; FIXME: #$@! INPUT RING
9 (defconst ipython-version "$Revision: 1499 $"
9 (defconst ipython-version "$Revision: 1823 $"
10 10 "VC version number.")
11 11
12 12 ;;; Commentary
13 13 ;; This library makes all the functionality python-mode has when running with
14 14 ;; the normal python-interpreter available for ipython, too. It also enables a
15 15 ;; persistent py-shell command history across sessions (if you exit python
16 16 ;; with C-d in py-shell) and defines the command `ipython-to-doctest', which
17 17 ;; can be used to convert bits of a ipython session into something that can be
18 18 ;; used for doctests. To install, put this file somewhere in your emacs
19 19 ;; `load-path' [1] and add the following line to your ~/.emacs file (the first
20 20 ;; line only needed if the default (``"ipython"``) is wrong)::
21 21 ;;
22 22 ;; (setq ipython-command "/SOME-PATH/ipython")
23 23 ;; (require 'ipython)
24 24 ;;
25 25 ;; Ipython will be set as the default python shell, but only if the ipython
26 26 ;; executable is in the path. For ipython sessions autocompletion with <tab>
27 27 ;; is also enabled (experimental feature!). Please also note that all the
28 28 ;; terminal functions in py-shell are handled by emacs's comint, **not** by
29 29 ;; (i)python, so importing readline etc. will have 0 effect.
30 30 ;;
31 31 ;; To start an interactive ipython session run `py-shell' with ``M-x py-shell``
32 32 ;; (or the default keybinding ``C-c C-!``).
33 33 ;;
34 34 ;; NOTE: This mode is currently somewhat alpha and although I hope that it
35 35 ;; will work fine for most cases, doing certain things (like the
36 36 ;; autocompletion and a decent scheme to switch between python interpreters)
37 37 ;; properly will also require changes to ipython that will likely have to wait
38 38 ;; for a larger rewrite scheduled some time in the future.
39 39 ;;
40 40 ;; Also note that you currently NEED THE CVS VERSION OF PYTHON.EL.
41 41 ;;
42 42 ;; Further note that I don't know whether this runs under windows or not and
43 43 ;; that if it doesn't I can't really help much, not being afflicted myself.
44 44 ;;
45 45 ;;
46 46 ;; Hints for effective usage
47 47 ;; -------------------------
48 48 ;;
49 49 ;; - IMO the best feature by far of the ipython/emacs combo is how much easier it
50 50 ;; makes it to find and fix bugs thanks to the ``%pdb on``/ pdbtrack combo. Try
51 51 ;; it: first in the ipython to shell do ``%pdb on`` then do something that will
52 52 ;; raise an exception (FIXME nice example) -- and be amazed how easy it is to
53 53 ;; inspect the live objects in each stack frames and to jump to the
54 54 ;; corresponding sourcecode locations as you walk up and down the stack trace
55 55 ;; (even without ``%pdb on`` you can always use ``C-c -`` (`py-up-exception')
56 56 ;; to jump to the corresponding source code locations).
57 57 ;;
58 58 ;; - emacs gives you much more powerful commandline editing and output searching
59 59 ;; capabilities than ipython-standalone -- isearch is your friend if you
60 60 ;; quickly want to print 'DEBUG ...' to stdout out etc.
61 61 ;;
62 62 ;; - This is not really specific to ipython, but for more convenient history
63 63 ;; access you might want to add something like the following to *the beggining*
64 64 ;; of your ``.emacs`` (if you want behavior that's more similar to stand-alone
65 65 ;; ipython, you can change ``meta p`` etc. for ``control p``)::
66 66 ;;
67 67 ;; (require 'comint)
68 68 ;; (define-key comint-mode-map [(meta p)]
69 69 ;; 'comint-previous-matching-input-from-input)
70 70 ;; (define-key comint-mode-map [(meta n)]
71 71 ;; 'comint-next-matching-input-from-input)
72 72 ;; (define-key comint-mode-map [(control meta n)]
73 73 ;; 'comint-next-input)
74 74 ;; (define-key comint-mode-map [(control meta p)]
75 75 ;; 'comint-previous-input)
76 76 ;;
77 77 ;; - Be aware that if you customize py-python-command previously, this value
78 78 ;; will override what ipython.el does (because loading the customization
79 79 ;; variables comes later).
80 80 ;;
81 81 ;; Please send comments and feedback to the ipython-list
82 82 ;; (<ipython-user@scipy.net>) where I (a.s.) or someone else will try to
83 83 ;; answer them (it helps if you specify your emacs version, OS etc;
84 84 ;; familiarity with <http://www.catb.org/~esr/faqs/smart-questions.html> might
85 85 ;; speed up things further).
86 86 ;;
87 87 ;; Footnotes:
88 88 ;;
89 89 ;; [1] If you don't know what `load-path' is, C-h v load-path will tell
90 90 ;; you; if required you can also add a new directory. So assuming that
91 91 ;; ipython.el resides in ~/el/, put this in your emacs:
92 92 ;;
93 93 ;;
94 94 ;; (add-to-list 'load-path "~/el")
95 95 ;; (setq ipython-command "/some-path/ipython")
96 96 ;; (require 'ipython)
97 97 ;;
98 98 ;;
99 99 ;;
100 100 ;;
101 101 ;; TODO:
102 102 ;; - do autocompletion properly
103 103 ;; - implement a proper switching between python interpreters
104 104 ;;
105 105 ;; BUGS:
106 106 ;; - neither::
107 107 ;;
108 108 ;; (py-shell "-c print 'FOOBAR'")
109 109 ;;
110 110 ;; nor::
111 111 ;;
112 112 ;; (let ((py-python-command-args (append py-python-command-args
113 113 ;; '("-c" "print 'FOOBAR'"))))
114 114 ;; (py-shell))
115 115 ;;
116 116 ;; seem to print anything as they should
117 117 ;;
118 118 ;; - look into init priority issues with `py-python-command' (if it's set
119 119 ;; via custom)
120 120
121 121
122 122 ;;; Code
123 123 (require 'cl)
124 124 (require 'shell)
125 125 (require 'executable)
126 126 (require 'ansi-color)
127 127
128 128 (defcustom ipython-command "ipython"
129 129 "*Shell command used to start ipython."
130 130 :type 'string
131 131 :group 'python)
132 132
133 133 ;; Users can set this to nil
134 134 (defvar py-shell-initial-switch-buffers t
135 135 "If nil, don't switch to the *Python* buffer on the first call to
136 136 `py-shell'.")
137 137
138 138 (defvar ipython-backup-of-py-python-command nil
139 139 "HACK")
140 140
141 141
142 142 (defvar ipython-de-input-prompt-regexp "\\(?:
143 143 In \\[[0-9]+\\]: *.*
144 144 ----+> \\(.*
145 145 \\)[\n]?\\)\\|\\(?:
146 146 In \\[[0-9]+\\]: *\\(.*
147 147 \\)\\)\\|^[ ]\\{3\\}[.]\\{3,\\}: *\\(.*
148 148 \\)"
149 149 "A regular expression to match the IPython input prompt and the python
150 150 command after it. The first match group is for a command that is rewritten,
151 151 the second for a 'normal' command, and the third for a multiline command.")
152 152 (defvar ipython-de-output-prompt-regexp "^Out\\[[0-9]+\\]: "
153 153 "A regular expression to match the output prompt of IPython.")
154 154
155 155
156 156 (if (not (executable-find ipython-command))
157 157 (message (format "Can't find executable %s - ipython.el *NOT* activated!!!"
158 158 ipython-command))
159 159 ;; XXX load python-mode, so that we can screw around with its variables
160 160 ;; this has the disadvantage that python-mode is loaded even if no
161 161 ;; python-file is ever edited etc. but it means that `py-shell' works
162 162 ;; without loading a python-file first. Obviously screwing around with
163 163 ;; python-mode's variables like this is a mess, but well.
164 164 (require 'python-mode)
165 165 ;; turn on ansi colors for ipython and activate completion
166 166 (defun ipython-shell-hook ()
167 167 ;; the following is to synchronize dir-changes
168 168 (make-local-variable 'shell-dirstack)
169 169 (setq shell-dirstack nil)
170 170 (make-local-variable 'shell-last-dir)
171 171 (setq shell-last-dir nil)
172 172 (make-local-variable 'shell-dirtrackp)
173 173 (setq shell-dirtrackp t)
174 174 (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t)
175 175
176 176 (ansi-color-for-comint-mode-on)
177 177 (define-key py-shell-map [tab] 'ipython-complete)
178 178 ;;XXX this is really just a cheap hack, it only completes symbols in the
179 179 ;;interactive session -- useful nonetheless.
180 180 (define-key py-mode-map [(meta tab)] 'ipython-complete)
181 181
182 182 )
183 183 (add-hook 'py-shell-hook 'ipython-shell-hook)
184 184 ;; Regular expression that describes tracebacks for IPython in context and
185 185 ;; verbose mode.
186 186
187 187 ;;Adapt python-mode settings for ipython.
188 188 ;; (this works for %xmode 'verbose' or 'context')
189 189
190 190 ;; XXX putative regexps for syntax errors; unfortunately the
191 191 ;; current python-mode traceback-line-re scheme is too primitive,
192 192 ;; so it's either matching syntax errors, *or* everything else
193 193 ;; (XXX: should ask Fernando for a change)
194 194 ;;"^ File \"\\(.*?\\)\", line \\([0-9]+\\).*\n.*\n.*\nSyntaxError:"
195 195 ;;^ File \"\\(.*?\\)\", line \\([0-9]+\\)"
196 196
197 197 (setq py-traceback-line-re
198 198 "\\(^[^\t ].+?\\.py\\).*\n +[0-9]+[^\00]*?\n-+> \\([0-9]+\\) +")
199 199
200 ;; Recognize the ipython pdb, whose prompt is 'ipdb>' instead of '(Pdb)'
201 (setq py-pdbtrack-input-prompt "\n[(<]*[Ii]?[Pp]db[>)]+ ")
200 ;; Recognize the ipython pdb, whose prompt is 'ipdb>' or 'ipydb>'
201 ;;instead of '(Pdb)'
202 (setq py-pdbtrack-input-prompt "\n[(<]*[Ii]?[Pp]y?db[>)]+ ")
203 (setq py-pydbtrack-input-prompt "\n[(]*ipydb[>)]+ ")
202 204
203 205 (setq py-shell-input-prompt-1-regexp "^In \\[[0-9]+\\]: *"
204 206 py-shell-input-prompt-2-regexp "^ [.][.][.]+: *" )
205 207 ;; select a suitable color-scheme
206 208 (unless (member "-colors" py-python-command-args)
207 209 (setq py-python-command-args
208 210 (nconc py-python-command-args
209 211 (list "-colors"
210 212 (cond
211 213 ((eq frame-background-mode 'dark)
212 214 "DarkBG")
213 215 ((eq frame-background-mode 'light)
214 216 "LightBG")
215 217 (t ; default (backg-mode isn't always set by XEmacs)
216 218 "LightBG"))))))
217 219 (unless (equal ipython-backup-of-py-python-command py-python-command)
218 220 (setq ipython-backup-of-py-python-command py-python-command))
219 221 (setq py-python-command ipython-command))
220 222
221 223
222 224 ;; MODIFY py-shell so that it loads the editing history
223 225 (defadvice py-shell (around py-shell-with-history)
224 226 "Add persistent command-history support (in
225 227 $PYTHONHISTORY (or \"~/.ipython/history\", if we use IPython)). Also, if
226 228 `py-shell-initial-switch-buffers' is nil, it only switches to *Python* if that
227 229 buffer already exists."
228 230 (if (comint-check-proc "*Python*")
229 231 ad-do-it
230 232 (setq comint-input-ring-file-name
231 233 (if (string-equal py-python-command ipython-command)
232 234 (concat (or (getenv "IPYTHONDIR") "~/.ipython") "/history")
233 235 (or (getenv "PYTHONHISTORY") "~/.python-history.py")))
234 236 (comint-read-input-ring t)
235 237 (let ((buf (current-buffer)))
236 238 ad-do-it
237 239 (unless py-shell-initial-switch-buffers
238 240 (switch-to-buffer-other-window buf)))))
239 241 (ad-activate 'py-shell)
240 242 ;; (defadvice py-execute-region (before py-execute-buffer-ensure-process)
241 243 ;; "HACK: test that ipython is already running before executing something.
242 244 ;; Doing this properly seems not worth the bother (unless people actually
243 245 ;; request it)."
244 246 ;; (unless (comint-check-proc "*Python*")
245 247 ;; (error "Sorry you have to first do M-x py-shell to send something to ipython.")))
246 248 ;; (ad-activate 'py-execute-region)
247 249
248 250 (defadvice py-execute-region (around py-execute-buffer-ensure-process)
249 251 "HACK: if `py-shell' is not active or ASYNC is explicitly desired, fall back
250 252 to python instead of ipython."
251 253 (let ((py-python-command (if (and (comint-check-proc "*Python*") (not async))
252 254 py-python-command
253 255 ipython-backup-of-py-python-command)))
254 256 ad-do-it))
255 257 (ad-activate 'py-execute-region)
256 258
257 259 (defun ipython-to-doctest (start end)
258 260 "Transform a cut-and-pasted bit from an IPython session into something that
259 261 looks like it came from a normal interactive python session, so that it can
260 262 be used in doctests. Example:
261 263
262 264
263 265 In [1]: import sys
264 266
265 267 In [2]: sys.stdout.write 'Hi!\n'
266 268 ------> sys.stdout.write ('Hi!\n')
267 269 Hi!
268 270
269 271 In [3]: 3 + 4
270 272 Out[3]: 7
271 273
272 274 gets converted to:
273 275
274 276 >>> import sys
275 277 >>> sys.stdout.write ('Hi!\n')
276 278 Hi!
277 279 >>> 3 + 4
278 280 7
279 281
280 282 "
281 283 (interactive "*r\n")
282 284 ;(message (format "###DEBUG s:%de:%d" start end))
283 285 (save-excursion
284 286 (save-match-data
285 287 ;; replace ``In [3]: bla`` with ``>>> bla`` and
286 288 ;; ``... : bla`` with ``... bla``
287 289 (goto-char start)
288 290 (while (re-search-forward ipython-de-input-prompt-regexp end t)
289 291 ;(message "finding 1")
290 292 (cond ((match-string 3) ;continued
291 293 (replace-match "... \\3" t nil))
292 294 (t
293 295 (replace-match ">>> \\1\\2" t nil))))
294 296 ;; replace ``
295 297 (goto-char start)
296 298 (while (re-search-forward ipython-de-output-prompt-regexp end t)
297 299 (replace-match "" t nil)))))
298 300
299 301 (defvar ipython-completion-command-string
300 302 "print ';'.join(__IP.Completer.all_completions('%s')) #PYTHON-MODE SILENT\n"
301 303 "The string send to ipython to query for all possible completions")
302 304
303 305
304 306 ;; xemacs doesn't have `comint-preoutput-filter-functions' so we'll try the
305 307 ;; following wonderful hack to work around this case
306 308 (if (featurep 'xemacs)
307 309 ;;xemacs
308 310 (defun ipython-complete ()
309 311 "Try to complete the python symbol before point. Only knows about the stuff
310 312 in the current *Python* session."
311 313 (interactive)
312 314 (let* ((ugly-return nil)
313 315 (sep ";")
314 316 (python-process (or (get-buffer-process (current-buffer))
315 317 ;XXX hack for .py buffers
316 318 (get-process py-which-bufname)))
317 319 ;; XXX currently we go backwards to find the beginning of an
318 320 ;; expression part; a more powerful approach in the future might be
319 321 ;; to let ipython have the complete line, so that context can be used
320 322 ;; to do things like filename completion etc.
321 323 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
322 324 (point)))
323 325 (end (point))
324 326 (pattern (buffer-substring-no-properties beg end))
325 327 (completions nil)
326 328 (completion-table nil)
327 329 completion
328 330 (comint-output-filter-functions
329 331 (append comint-output-filter-functions
330 332 '(ansi-color-filter-apply
331 333 (lambda (string)
332 334 ;(message (format "DEBUG filtering: %s" string))
333 335 (setq ugly-return (concat ugly-return string))
334 336 (delete-region comint-last-output-start
335 337 (process-mark (get-buffer-process (current-buffer)))))))))
336 338 ;(message (format "#DEBUG pattern: '%s'" pattern))
337 339 (process-send-string python-process
338 340 (format ipython-completion-command-string pattern))
339 341 (accept-process-output python-process)
340 342 ;(message (format "DEBUG return: %s" ugly-return))
341 343 (setq completions
342 344 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
343 345 (setq completion-table (loop for str in completions
344 346 collect (list str nil)))
345 347 (setq completion (try-completion pattern completion-table))
346 348 (cond ((eq completion t))
347 349 ((null completion)
348 350 (message "Can't find completion for \"%s\"" pattern)
349 351 (ding))
350 352 ((not (string= pattern completion))
351 353 (delete-region beg end)
352 354 (insert completion))
353 355 (t
354 356 (message "Making completion list...")
355 357 (with-output-to-temp-buffer "*Python Completions*"
356 358 (display-completion-list (all-completions pattern completion-table)))
357 359 (message "Making completion list...%s" "done")))))
358 360 ;; emacs
359 361 (defun ipython-complete ()
360 362 "Try to complete the python symbol before point. Only knows about the stuff
361 363 in the current *Python* session."
362 364 (interactive)
363 365 (let* ((ugly-return nil)
364 366 (sep ";")
365 367 (python-process (or (get-buffer-process (current-buffer))
366 368 ;XXX hack for .py buffers
367 369 (get-process py-which-bufname)))
368 370 ;; XXX currently we go backwards to find the beginning of an
369 371 ;; expression part; a more powerful approach in the future might be
370 372 ;; to let ipython have the complete line, so that context can be used
371 373 ;; to do things like filename completion etc.
372 374 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
373 375 (point)))
374 376 (end (point))
375 377 (pattern (buffer-substring-no-properties beg end))
376 378 (completions nil)
377 379 (completion-table nil)
378 380 completion
379 381 (comint-preoutput-filter-functions
380 382 (append comint-preoutput-filter-functions
381 383 '(ansi-color-filter-apply
382 384 (lambda (string)
383 385 (setq ugly-return (concat ugly-return string))
384 386 "")))))
385 387 (process-send-string python-process
386 388 (format ipython-completion-command-string pattern))
387 389 (accept-process-output python-process)
388 390 (setq completions
389 391 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
390 392 ;(message (format "DEBUG completions: %S" completions))
391 393 (setq completion-table (loop for str in completions
392 394 collect (list str nil)))
393 395 (setq completion (try-completion pattern completion-table))
394 396 (cond ((eq completion t))
395 397 ((null completion)
396 398 (message "Can't find completion for \"%s\"" pattern)
397 399 (ding))
398 400 ((not (string= pattern completion))
399 401 (delete-region beg end)
400 402 (insert completion))
401 403 (t
402 404 (message "Making completion list...")
403 405 (with-output-to-temp-buffer "*IPython Completions*"
404 406 (display-completion-list (all-completions pattern completion-table)))
405 407 (message "Making completion list...%s" "done")))))
406 408 )
407 409
408 410 ;;; autoindent support: patch sent in by Jin Liu <m.liu.jin@gmail.com>,
409 411 ;;; originally written by doxgen@newsmth.net
410 412 ;;; Minor modifications by fperez for xemacs compatibility.
411 413
412 414 (defvar ipython-autoindent t
413 415 "If non-nil, enable autoindent for IPython shell through python-mode.")
414 416
415 417 (defvar ipython-indenting-buffer-name "*IPython Indentation Calculation*"
416 418 "Temporary buffer for indenting multiline statement.")
417 419
418 420 (defun ipython-get-indenting-buffer ()
419 421 "Return a temporary buffer set in python-mode. Create one if necessary."
420 422 (let ((buf (get-buffer-create ipython-indenting-buffer-name)))
421 423 (set-buffer buf)
422 424 (unless (eq major-mode 'python-mode)
423 425 (python-mode))
424 426 buf))
425 427
426 428 (defvar ipython-indentation-string nil
427 429 "Indentation for the next line in a multiline statement.")
428 430
429 431 (defun ipython-send-and-indent ()
430 432 "Send the current line to IPython, and calculate the indentation for
431 433 the next line."
432 434 (interactive)
433 435 (if ipython-autoindent
434 436 (let ((line (buffer-substring (point-at-bol) (point)))
435 437 (after-prompt1)
436 438 (after-prompt2))
437 439 (save-excursion
438 440 (comint-bol t)
439 441 (if (looking-at py-shell-input-prompt-1-regexp)
440 442 (setq after-prompt1 t)
441 443 (setq after-prompt2 (looking-at py-shell-input-prompt-2-regexp)))
442 444 (with-current-buffer (ipython-get-indenting-buffer)
443 445 (when after-prompt1
444 446 (erase-buffer))
445 447 (when (or after-prompt1 after-prompt2)
446 448 (delete-region (point-at-bol) (point))
447 449 (insert line)
448 450 (newline-and-indent))))))
449 451 ;; send input line to ipython interpreter
450 452 (comint-send-input))
451 453
452 454 (defun ipython-indentation-hook (string)
453 455 "Insert indentation string if py-shell-input-prompt-2-regexp
454 456 matches last process output."
455 457 (let* ((start-marker (or comint-last-output-start
456 458 (point-min-marker)))
457 459 (end-marker (process-mark (get-buffer-process (current-buffer))))
458 460 (text (ansi-color-filter-apply (buffer-substring start-marker end-marker))))
459 461 ;; XXX if `text' matches both pattern, it MUST be the last prompt-2
460 462 (when (and (string-match py-shell-input-prompt-2-regexp text)
461 463 (not (string-match "\n$" text)))
462 464 (with-current-buffer (ipython-get-indenting-buffer)
463 465 (setq ipython-indentation-string
464 466 (buffer-substring (point-at-bol) (point))))
465 467 (goto-char end-marker)
466 468 (insert ipython-indentation-string)
467 469 (setq ipython-indentation-string nil))))
468 470
469 471 (add-hook 'py-shell-hook
470 472 (lambda ()
471 473 (add-hook 'comint-output-filter-functions
472 474 'ipython-indentation-hook)))
473 475
474 476 (define-key py-shell-map (kbd "RET") 'ipython-send-and-indent)
475 477 ;;; / end autoindent support
476 478
477 479 (provide 'ipython)
General Comments 0
You need to be logged in to leave comments. Login now