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