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