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