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