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