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