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