##// END OF EJS Templates
Now IPython works with OS X 10.5 (Leopards) libedit based readline module.
bgranger -
Show More
This diff has been collapsed as it changes many lines, (4752 lines changed) Show them Hide them
@@ -1,2570 +1,2578
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 2846 2007-10-24 14:44:48Z vivainio $
9 $Id: iplib.py 2854 2007-11-01 20:19:34Z bgranger $
10 10 """
11 11
12 12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 15 #
16 # Distributed under the terms of the BSD License. The full license is in
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 # Python standard library. Over time, all of that class has been copied
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 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 24 # allows for this, but it's always nice to acknowledge credit where credit is
25 25 # due.
26 26 #*****************************************************************************
27 27
28 28 #****************************************************************************
29 29 # Modules and globals
30 30
31 31 from IPython import Release
32 __author__ = '%s <%s>\n%s <%s>' % \
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
32 __author__ = '%s <%s>\n%s <%s>' % \
33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
34 34 __license__ = Release.license
35 35 __version__ = Release.version
36 36
37 37 # Python standard modules
38 38 import __main__
39 39 import __builtin__
40 40 import StringIO
41 41 import bdb
42 42 import cPickle as pickle
43 43 import codeop
44 44 import exceptions
45 45 import glob
46 46 import inspect
47 47 import keyword
48 48 import new
49 49 import os
50 50 import pydoc
51 51 import re
52 52 import shutil
53 53 import string
54 54 import sys
55 55 import tempfile
56 56 import traceback
57 57 import types
58 58 import pickleshare
59 59 from sets import Set
60 60 from pprint import pprint, pformat
61 61
62 62 # IPython's own modules
63 63 #import IPython
64 64 from IPython import Debugger,OInspect,PyColorize,ultraTB
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 66 from IPython.FakeModule import FakeModule
67 67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 68 from IPython.Logger import Logger
69 69 from IPython.Magic import Magic
70 70 from IPython.Prompts import CachedOutput
71 71 from IPython.ipstruct import Struct
72 72 from IPython.background_jobs import BackgroundJobManager
73 73 from IPython.usage import cmd_line_usage,interactive_usage
74 74 from IPython.genutils import *
75 75 from IPython.strdispatch import StrDispatch
76 76 import IPython.ipapi
77 77 import IPython.history
78 78 import IPython.prefilter as prefilter
79 79 import IPython.shadowns
80 80 # Globals
81 81
82 82 # store the builtin raw_input globally, and use this always, in case user code
83 83 # overwrites it (like wx.py.PyShell does)
84 84 raw_input_original = raw_input
85 85
86 86 # compiled regexps for autoindent management
87 87 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
88 88
89 89
90 90 #****************************************************************************
91 91 # Some utility function definitions
92 92
93 93 ini_spaces_re = re.compile(r'^(\s+)')
94 94
95 95 def num_ini_spaces(strng):
96 """Return the number of initial spaces in a string"""
96 """Return the number of initial spaces in a string"""
97 97
98 ini_spaces = ini_spaces_re.match(strng)
99 if ini_spaces:
100 return ini_spaces.end()
101 else:
102 return 0
98 ini_spaces = ini_spaces_re.match(strng)
99 if ini_spaces:
100 return ini_spaces.end()
101 else:
102 return 0
103 103
104 104 def softspace(file, newvalue):
105 """Copied from code.py, to remove the dependency"""
105 """Copied from code.py, to remove the dependency"""
106 106
107 oldvalue = 0
108 try:
109 oldvalue = file.softspace
110 except AttributeError:
111 pass
112 try:
113 file.softspace = newvalue
114 except (AttributeError, TypeError):
115 # "attribute-less object" or "read-only attributes"
116 pass
117 return oldvalue
107 oldvalue = 0
108 try:
109 oldvalue = file.softspace
110 except AttributeError:
111 pass
112 try:
113 file.softspace = newvalue
114 except (AttributeError, TypeError):
115 # "attribute-less object" or "read-only attributes"
116 pass
117 return oldvalue
118 118
119 119
120 120 #****************************************************************************
121 121 # Local use exceptions
122 122 class SpaceInInput(exceptions.Exception): pass
123 123
124 124
125 125 #****************************************************************************
126 126 # Local use classes
127 127 class Bunch: pass
128 128
129 129 class Undefined: pass
130 130
131 131 class Quitter(object):
132 """Simple class to handle exit, similar to Python 2.5's.
133
134 It handles exiting in an ipython-safe manner, which the one in Python 2.5
135 doesn't do (obviously, since it doesn't know about ipython)."""
136
137 def __init__(self,shell,name):
138 self.shell = shell
139 self.name = name
140
141 def __repr__(self):
142 return 'Type %s() to exit.' % self.name
143 __str__ = __repr__
144
145 def __call__(self):
146 self.shell.exit()
132 """Simple class to handle exit, similar to Python 2.5's.
133
134 It handles exiting in an ipython-safe manner, which the one in Python 2.5
135 doesn't do (obviously, since it doesn't know about ipython)."""
136
137 def __init__(self,shell,name):
138 self.shell = shell
139 self.name = name
140
141 def __repr__(self):
142 return 'Type %s() to exit.' % self.name
143 __str__ = __repr__
144
145 def __call__(self):
146 self.shell.exit()
147 147
148 148 class InputList(list):
149 """Class to store user input.
149 """Class to store user input.
150 150
151 It's basically a list, but slices return a string instead of a list, thus
152 allowing things like (assuming 'In' is an instance):
151 It's basically a list, but slices return a string instead of a list, thus
152 allowing things like (assuming 'In' is an instance):
153 153
154 exec In[4:7]
154 exec In[4:7]
155 155
156 or
156 or
157 157
158 exec In[5:9] + In[14] + In[21:25]"""
158 exec In[5:9] + In[14] + In[21:25]"""
159 159
160 def __getslice__(self,i,j):
161 return ''.join(list.__getslice__(self,i,j))
160 def __getslice__(self,i,j):
161 return ''.join(list.__getslice__(self,i,j))
162 162
163 163 class SyntaxTB(ultraTB.ListTB):
164 """Extension which holds some state: the last exception value"""
164 """Extension which holds some state: the last exception value"""
165 165
166 def __init__(self,color_scheme = 'NoColor'):
167 ultraTB.ListTB.__init__(self,color_scheme)
168 self.last_syntax_error = None
166 def __init__(self,color_scheme = 'NoColor'):
167 ultraTB.ListTB.__init__(self,color_scheme)
168 self.last_syntax_error = None
169 169
170 def __call__(self, etype, value, elist):
171 self.last_syntax_error = value
172 ultraTB.ListTB.__call__(self,etype,value,elist)
170 def __call__(self, etype, value, elist):
171 self.last_syntax_error = value
172 ultraTB.ListTB.__call__(self,etype,value,elist)
173 173
174 def clear_err_state(self):
175 """Return the current error state and clear it"""
176 e = self.last_syntax_error
177 self.last_syntax_error = None
178 return e
174 def clear_err_state(self):
175 """Return the current error state and clear it"""
176 e = self.last_syntax_error
177 self.last_syntax_error = None
178 return e
179 179
180 180 #****************************************************************************
181 181 # Main IPython class
182 182
183 183 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
184 # until a full rewrite is made. I've cleaned all cross-class uses of
184 # until a full rewrite is made. I've cleaned all cross-class uses of
185 185 # attributes and methods, but too much user code out there relies on the
186 186 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
187 187 #
188 188 # But at least now, all the pieces have been separated and we could, in
189 # principle, stop using the mixin. This will ease the transition to the
189 # principle, stop using the mixin. This will ease the transition to the
190 190 # chainsaw branch.
191 191
192 192 # For reference, the following is the list of 'self.foo' uses in the Magic
193 193 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
194 194 # class, to prevent clashes.
195 195
196 196 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
197 197 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
198 198 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
199 199 # 'self.value']
200 200
201 201 class InteractiveShell(object,Magic):
202 """An enhanced console for Python."""
203
204 # class attribute to indicate whether the class supports threads or not.
205 # Subclasses with thread support should override this as needed.
206 isthreaded = False
207
208 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
209 user_ns = None,user_global_ns=None,banner2='',
210 custom_exceptions=((),None),embedded=False):
211
212 # log system
213 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
214
215 # some minimal strict typechecks. For some core data structures, I
216 # want actual basic python types, not just anything that looks like
217 # one. This is especially true for namespaces.
218 for ns in (user_ns,user_global_ns):
219 if ns is not None and type(ns) != types.DictType:
220 raise TypeError,'namespace must be a dictionary'
221
222 # Job manager (for jobs run as background threads)
223 self.jobs = BackgroundJobManager()
224
225 # Store the actual shell's name
226 self.name = name
227
228 # We need to know whether the instance is meant for embedding, since
229 # global/local namespaces need to be handled differently in that case
230 self.embedded = embedded
231 if embedded:
232 # Control variable so users can, from within the embedded instance,
233 # permanently deactivate it.
234 self.embedded_active = True
235
236 # command compiler
237 self.compile = codeop.CommandCompiler()
238
239 # User input buffer
240 self.buffer = []
241
242 # Default name given in compilation of code
243 self.filename = '<ipython console>'
244
245 # Install our own quitter instead of the builtins. For python2.3-2.4,
246 # this brings in behavior like 2.5, and for 2.5 it's identical.
247 __builtin__.exit = Quitter(self,'exit')
248 __builtin__.quit = Quitter(self,'quit')
249
250 # Make an empty namespace, which extension writers can rely on both
251 # existing and NEVER being used by ipython itself. This gives them a
252 # convenient location for storing additional information and state
253 # their extensions may require, without fear of collisions with other
254 # ipython names that may develop later.
255 self.meta = Struct()
256
257 # Create the namespace where the user will operate. user_ns is
258 # normally the only one used, and it is passed to the exec calls as
259 # the locals argument. But we do carry a user_global_ns namespace
260 # given as the exec 'globals' argument, This is useful in embedding
261 # situations where the ipython shell opens in a context where the
262 # distinction between locals and globals is meaningful.
263
264 # FIXME. For some strange reason, __builtins__ is showing up at user
265 # level as a dict instead of a module. This is a manual fix, but I
266 # should really track down where the problem is coming from. Alex
267 # Schmolck reported this problem first.
268
269 # A useful post by Alex Martelli on this topic:
270 # Re: inconsistent value from __builtins__
271 # Von: Alex Martelli <aleaxit@yahoo.com>
272 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
273 # Gruppen: comp.lang.python
274
275 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
276 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
277 # > <type 'dict'>
278 # > >>> print type(__builtins__)
279 # > <type 'module'>
280 # > Is this difference in return value intentional?
281
282 # Well, it's documented that '__builtins__' can be either a dictionary
283 # or a module, and it's been that way for a long time. Whether it's
284 # intentional (or sensible), I don't know. In any case, the idea is
285 # that if you need to access the built-in namespace directly, you
286 # should start with "import __builtin__" (note, no 's') which will
287 # definitely give you a module. Yeah, it's somewhat confusing:-(.
288
289 # These routines return properly built dicts as needed by the rest of
290 # the code, and can also be used by extension writers to generate
291 # properly initialized namespaces.
292 user_ns = IPython.ipapi.make_user_ns(user_ns)
293 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
294
295 # Assign namespaces
296 # This is the namespace where all normal user variables live
297 self.user_ns = user_ns
298 # Embedded instances require a separate namespace for globals.
299 # Normally this one is unused by non-embedded instances.
300 self.user_global_ns = user_global_ns
301 # A namespace to keep track of internal data structures to prevent
302 # them from cluttering user-visible stuff. Will be updated later
303 self.internal_ns = {}
304
305 # Namespace of system aliases. Each entry in the alias
306 # table must be a 2-tuple of the form (N,name), where N is the number
307 # of positional arguments of the alias.
308 self.alias_table = {}
309
310 # A table holding all the namespaces IPython deals with, so that
311 # introspection facilities can search easily.
312 self.ns_table = {'user':user_ns,
313 'user_global':user_global_ns,
314 'alias':self.alias_table,
315 'internal':self.internal_ns,
316 'builtin':__builtin__.__dict__
317 }
318 # The user namespace MUST have a pointer to the shell itself.
319 self.user_ns[name] = self
320
321 # We need to insert into sys.modules something that looks like a
322 # module but which accesses the IPython namespace, for shelve and
323 # pickle to work interactively. Normally they rely on getting
324 # everything out of __main__, but for embedding purposes each IPython
325 # instance has its own private namespace, so we can't go shoving
326 # everything into __main__.
327
328 # note, however, that we should only do this for non-embedded
329 # ipythons, which really mimic the __main__.__dict__ with their own
330 # namespace. Embedded instances, on the other hand, should not do
331 # this because they need to manage the user local/global namespaces
332 # only, but they live within a 'normal' __main__ (meaning, they
333 # shouldn't overtake the execution environment of the script they're
334 # embedded in).
335
336 if not embedded:
337 try:
338 main_name = self.user_ns['__name__']
339 except KeyError:
340 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
341 else:
342 #print "pickle hack in place" # dbg
343 #print 'main_name:',main_name # dbg
344 sys.modules[main_name] = FakeModule(self.user_ns)
345
346 # Now that FakeModule produces a real module, we've run into a nasty
347 # problem: after script execution (via %run), the module where the user
348 # code ran is deleted. Now that this object is a true module (needed
349 # so docetst and other tools work correctly), the Python module
350 # teardown mechanism runs over it, and sets to None every variable
351 # present in that module. This means that later calls to functions
352 # defined in the script (which have become interactively visible after
353 # script exit) fail, because they hold references to objects that have
354 # become overwritten into None. The only solution I see right now is
355 # to protect every FakeModule used by %run by holding an internal
356 # reference to it. This private list will be used for that. The
357 # %reset command will flush it as well.
358 self._user_main_modules = []
359
360 # List of input with multi-line handling.
361 # Fill its zero entry, user counter starts at 1
362 self.input_hist = InputList(['\n'])
363 # This one will hold the 'raw' input history, without any
364 # pre-processing. This will allow users to retrieve the input just as
365 # it was exactly typed in by the user, with %hist -r.
366 self.input_hist_raw = InputList(['\n'])
367
368 # list of visited directories
369 try:
370 self.dir_hist = [os.getcwd()]
371 except OSError:
372 self.dir_hist = []
373
374 # dict of output history
375 self.output_hist = {}
376
377 # Get system encoding at startup time. Certain terminals (like Emacs
378 # under Win32 have it set to None, and we need to have a known valid
379 # encoding to use in the raw_input() method
380 self.stdin_encoding = sys.stdin.encoding or 'ascii'
381
382 # dict of things NOT to alias (keywords, builtins and some magics)
383 no_alias = {}
384 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
385 for key in keyword.kwlist + no_alias_magics:
386 no_alias[key] = 1
387 no_alias.update(__builtin__.__dict__)
388 self.no_alias = no_alias
389
390 # make global variables for user access to these
391 self.user_ns['_ih'] = self.input_hist
392 self.user_ns['_oh'] = self.output_hist
393 self.user_ns['_dh'] = self.dir_hist
394
395 # user aliases to input and output histories
396 self.user_ns['In'] = self.input_hist
397 self.user_ns['Out'] = self.output_hist
398
399 self.user_ns['_sh'] = IPython.shadowns
400 # Object variable to store code object waiting execution. This is
401 # used mainly by the multithreaded shells, but it can come in handy in
402 # other situations. No need to use a Queue here, since it's a single
403 # item which gets cleared once run.
404 self.code_to_run = None
405
406 # escapes for automatic behavior on the command line
407 self.ESC_SHELL = '!'
408 self.ESC_SH_CAP = '!!'
409 self.ESC_HELP = '?'
410 self.ESC_MAGIC = '%'
411 self.ESC_QUOTE = ','
412 self.ESC_QUOTE2 = ';'
413 self.ESC_PAREN = '/'
414
415 # And their associated handlers
416 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
417 self.ESC_QUOTE : self.handle_auto,
418 self.ESC_QUOTE2 : self.handle_auto,
419 self.ESC_MAGIC : self.handle_magic,
420 self.ESC_HELP : self.handle_help,
421 self.ESC_SHELL : self.handle_shell_escape,
422 self.ESC_SH_CAP : self.handle_shell_escape,
423 }
424
425 # class initializations
426 Magic.__init__(self,self)
427
428 # Python source parser/formatter for syntax highlighting
429 pyformat = PyColorize.Parser().format
430 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
431
432 # hooks holds pointers used for user-side customizations
433 self.hooks = Struct()
434
435 self.strdispatchers = {}
436
437 # Set all default hooks, defined in the IPython.hooks module.
438 hooks = IPython.hooks
439 for hook_name in hooks.__all__:
440 # default hooks have priority 100, i.e. low; user hooks should have
441 # 0-100 priority
442 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
443 #print "bound hook",hook_name
444
445 # Flag to mark unconditional exit
446 self.exit_now = False
447
448 self.usage_min = """\
449 An enhanced console for Python.
450 Some of its features are:
451 - Readline support if the readline library is present.
452 - Tab completion in the local namespace.
453 - Logging of input, see command-line options.
454 - System shell escape via ! , eg !ls.
455 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
456 - Keeps track of locally defined variables via %who, %whos.
457 - Show object information with a ? eg ?x or x? (use ?? for more info).
458 """
459 if usage: self.usage = usage
460 else: self.usage = self.usage_min
461
462 # Storage
463 self.rc = rc # This will hold all configuration information
464 self.pager = 'less'
465 # temporary files used for various purposes. Deleted at exit.
466 self.tempfiles = []
467
468 # Keep track of readline usage (later set by init_readline)
469 self.has_readline = False
470
471 # template for logfile headers. It gets resolved at runtime by the
472 # logstart method.
473 self.loghead_tpl = \
202 """An enhanced console for Python."""
203
204 # class attribute to indicate whether the class supports threads or not.
205 # Subclasses with thread support should override this as needed.
206 isthreaded = False
207
208 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
209 user_ns = None,user_global_ns=None,banner2='',
210 custom_exceptions=((),None),embedded=False):
211
212 # log system
213 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
214
215 # some minimal strict typechecks. For some core data structures, I
216 # want actual basic python types, not just anything that looks like
217 # one. This is especially true for namespaces.
218 for ns in (user_ns,user_global_ns):
219 if ns is not None and type(ns) != types.DictType:
220 raise TypeError,'namespace must be a dictionary'
221
222 # Job manager (for jobs run as background threads)
223 self.jobs = BackgroundJobManager()
224
225 # Store the actual shell's name
226 self.name = name
227
228 # We need to know whether the instance is meant for embedding, since
229 # global/local namespaces need to be handled differently in that case
230 self.embedded = embedded
231 if embedded:
232 # Control variable so users can, from within the embedded instance,
233 # permanently deactivate it.
234 self.embedded_active = True
235
236 # command compiler
237 self.compile = codeop.CommandCompiler()
238
239 # User input buffer
240 self.buffer = []
241
242 # Default name given in compilation of code
243 self.filename = '<ipython console>'
244
245 # Install our own quitter instead of the builtins. For python2.3-2.4,
246 # this brings in behavior like 2.5, and for 2.5 it's identical.
247 __builtin__.exit = Quitter(self,'exit')
248 __builtin__.quit = Quitter(self,'quit')
249
250 # Make an empty namespace, which extension writers can rely on both
251 # existing and NEVER being used by ipython itself. This gives them a
252 # convenient location for storing additional information and state
253 # their extensions may require, without fear of collisions with other
254 # ipython names that may develop later.
255 self.meta = Struct()
256
257 # Create the namespace where the user will operate. user_ns is
258 # normally the only one used, and it is passed to the exec calls as
259 # the locals argument. But we do carry a user_global_ns namespace
260 # given as the exec 'globals' argument, This is useful in embedding
261 # situations where the ipython shell opens in a context where the
262 # distinction between locals and globals is meaningful.
263
264 # FIXME. For some strange reason, __builtins__ is showing up at user
265 # level as a dict instead of a module. This is a manual fix, but I
266 # should really track down where the problem is coming from. Alex
267 # Schmolck reported this problem first.
268
269 # A useful post by Alex Martelli on this topic:
270 # Re: inconsistent value from __builtins__
271 # Von: Alex Martelli <aleaxit@yahoo.com>
272 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
273 # Gruppen: comp.lang.python
274
275 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
276 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
277 # > <type 'dict'>
278 # > >>> print type(__builtins__)
279 # > <type 'module'>
280 # > Is this difference in return value intentional?
281
282 # Well, it's documented that '__builtins__' can be either a dictionary
283 # or a module, and it's been that way for a long time. Whether it's
284 # intentional (or sensible), I don't know. In any case, the idea is
285 # that if you need to access the built-in namespace directly, you
286 # should start with "import __builtin__" (note, no 's') which will
287 # definitely give you a module. Yeah, it's somewhat confusing:-(.
288
289 # These routines return properly built dicts as needed by the rest of
290 # the code, and can also be used by extension writers to generate
291 # properly initialized namespaces.
292 user_ns = IPython.ipapi.make_user_ns(user_ns)
293 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
294
295 # Assign namespaces
296 # This is the namespace where all normal user variables live
297 self.user_ns = user_ns
298 # Embedded instances require a separate namespace for globals.
299 # Normally this one is unused by non-embedded instances.
300 self.user_global_ns = user_global_ns
301 # A namespace to keep track of internal data structures to prevent
302 # them from cluttering user-visible stuff. Will be updated later
303 self.internal_ns = {}
304
305 # Namespace of system aliases. Each entry in the alias
306 # table must be a 2-tuple of the form (N,name), where N is the number
307 # of positional arguments of the alias.
308 self.alias_table = {}
309
310 # A table holding all the namespaces IPython deals with, so that
311 # introspection facilities can search easily.
312 self.ns_table = {'user':user_ns,
313 'user_global':user_global_ns,
314 'alias':self.alias_table,
315 'internal':self.internal_ns,
316 'builtin':__builtin__.__dict__
317 }
318 # The user namespace MUST have a pointer to the shell itself.
319 self.user_ns[name] = self
320
321 # We need to insert into sys.modules something that looks like a
322 # module but which accesses the IPython namespace, for shelve and
323 # pickle to work interactively. Normally they rely on getting
324 # everything out of __main__, but for embedding purposes each IPython
325 # instance has its own private namespace, so we can't go shoving
326 # everything into __main__.
327
328 # note, however, that we should only do this for non-embedded
329 # ipythons, which really mimic the __main__.__dict__ with their own
330 # namespace. Embedded instances, on the other hand, should not do
331 # this because they need to manage the user local/global namespaces
332 # only, but they live within a 'normal' __main__ (meaning, they
333 # shouldn't overtake the execution environment of the script they're
334 # embedded in).
335
336 if not embedded:
337 try:
338 main_name = self.user_ns['__name__']
339 except KeyError:
340 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
341 else:
342 #print "pickle hack in place" # dbg
343 #print 'main_name:',main_name # dbg
344 sys.modules[main_name] = FakeModule(self.user_ns)
345
346 # Now that FakeModule produces a real module, we've run into a nasty
347 # problem: after script execution (via %run), the module where the user
348 # code ran is deleted. Now that this object is a true module (needed
349 # so docetst and other tools work correctly), the Python module
350 # teardown mechanism runs over it, and sets to None every variable
351 # present in that module. This means that later calls to functions
352 # defined in the script (which have become interactively visible after
353 # script exit) fail, because they hold references to objects that have
354 # become overwritten into None. The only solution I see right now is
355 # to protect every FakeModule used by %run by holding an internal
356 # reference to it. This private list will be used for that. The
357 # %reset command will flush it as well.
358 self._user_main_modules = []
359
360 # List of input with multi-line handling.
361 # Fill its zero entry, user counter starts at 1
362 self.input_hist = InputList(['\n'])
363 # This one will hold the 'raw' input history, without any
364 # pre-processing. This will allow users to retrieve the input just as
365 # it was exactly typed in by the user, with %hist -r.
366 self.input_hist_raw = InputList(['\n'])
367
368 # list of visited directories
369 try:
370 self.dir_hist = [os.getcwd()]
371 except OSError:
372 self.dir_hist = []
373
374 # dict of output history
375 self.output_hist = {}
376
377 # Get system encoding at startup time. Certain terminals (like Emacs
378 # under Win32 have it set to None, and we need to have a known valid
379 # encoding to use in the raw_input() method
380 self.stdin_encoding = sys.stdin.encoding or 'ascii'
381
382 # dict of things NOT to alias (keywords, builtins and some magics)
383 no_alias = {}
384 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
385 for key in keyword.kwlist + no_alias_magics:
386 no_alias[key] = 1
387 no_alias.update(__builtin__.__dict__)
388 self.no_alias = no_alias
389
390 # make global variables for user access to these
391 self.user_ns['_ih'] = self.input_hist
392 self.user_ns['_oh'] = self.output_hist
393 self.user_ns['_dh'] = self.dir_hist
394
395 # user aliases to input and output histories
396 self.user_ns['In'] = self.input_hist
397 self.user_ns['Out'] = self.output_hist
398
399 self.user_ns['_sh'] = IPython.shadowns
400 # Object variable to store code object waiting execution. This is
401 # used mainly by the multithreaded shells, but it can come in handy in
402 # other situations. No need to use a Queue here, since it's a single
403 # item which gets cleared once run.
404 self.code_to_run = None
405
406 # escapes for automatic behavior on the command line
407 self.ESC_SHELL = '!'
408 self.ESC_SH_CAP = '!!'
409 self.ESC_HELP = '?'
410 self.ESC_MAGIC = '%'
411 self.ESC_QUOTE = ','
412 self.ESC_QUOTE2 = ';'
413 self.ESC_PAREN = '/'
414
415 # And their associated handlers
416 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
417 self.ESC_QUOTE : self.handle_auto,
418 self.ESC_QUOTE2 : self.handle_auto,
419 self.ESC_MAGIC : self.handle_magic,
420 self.ESC_HELP : self.handle_help,
421 self.ESC_SHELL : self.handle_shell_escape,
422 self.ESC_SH_CAP : self.handle_shell_escape,
423 }
424
425 # class initializations
426 Magic.__init__(self,self)
427
428 # Python source parser/formatter for syntax highlighting
429 pyformat = PyColorize.Parser().format
430 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
431
432 # hooks holds pointers used for user-side customizations
433 self.hooks = Struct()
434
435 self.strdispatchers = {}
436
437 # Set all default hooks, defined in the IPython.hooks module.
438 hooks = IPython.hooks
439 for hook_name in hooks.__all__:
440 # default hooks have priority 100, i.e. low; user hooks should have
441 # 0-100 priority
442 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
443 #print "bound hook",hook_name
444
445 # Flag to mark unconditional exit
446 self.exit_now = False
447
448 self.usage_min = """\
449 An enhanced console for Python.
450 Some of its features are:
451 - Readline support if the readline library is present.
452 - Tab completion in the local namespace.
453 - Logging of input, see command-line options.
454 - System shell escape via ! , eg !ls.
455 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
456 - Keeps track of locally defined variables via %who, %whos.
457 - Show object information with a ? eg ?x or x? (use ?? for more info).
458 """
459 if usage: self.usage = usage
460 else: self.usage = self.usage_min
461
462 # Storage
463 self.rc = rc # This will hold all configuration information
464 self.pager = 'less'
465 # temporary files used for various purposes. Deleted at exit.
466 self.tempfiles = []
467
468 # Keep track of readline usage (later set by init_readline)
469 self.has_readline = False
470
471 # template for logfile headers. It gets resolved at runtime by the
472 # logstart method.
473 self.loghead_tpl = \
474 474 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
475 475 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
476 476 #log# opts = %s
477 477 #log# args = %s
478 478 #log# It is safe to make manual edits below here.
479 479 #log#-----------------------------------------------------------------------
480 480 """
481 # for pushd/popd management
482 try:
483 self.home_dir = get_home_dir()
484 except HomeDirError,msg:
485 fatal(msg)
486
487 self.dir_stack = []
488
489 # Functions to call the underlying shell.
490
491 # The first is similar to os.system, but it doesn't return a value,
492 # and it allows interpolation of variables in the user's namespace.
493 self.system = lambda cmd: \
494 shell(self.var_expand(cmd,depth=2),
495 header=self.rc.system_header,
496 verbose=self.rc.system_verbose)
497
498 # These are for getoutput and getoutputerror:
499 self.getoutput = lambda cmd: \
500 getoutput(self.var_expand(cmd,depth=2),
501 header=self.rc.system_header,
502 verbose=self.rc.system_verbose)
503
504 self.getoutputerror = lambda cmd: \
505 getoutputerror(self.var_expand(cmd,depth=2),
506 header=self.rc.system_header,
507 verbose=self.rc.system_verbose)
481 # for pushd/popd management
482 try:
483 self.home_dir = get_home_dir()
484 except HomeDirError,msg:
485 fatal(msg)
486
487 self.dir_stack = []
488
489 # Functions to call the underlying shell.
490
491 # The first is similar to os.system, but it doesn't return a value,
492 # and it allows interpolation of variables in the user's namespace.
493 self.system = lambda cmd: \
494 shell(self.var_expand(cmd,depth=2),
495 header=self.rc.system_header,
496 verbose=self.rc.system_verbose)
497
498 # These are for getoutput and getoutputerror:
499 self.getoutput = lambda cmd: \
500 getoutput(self.var_expand(cmd,depth=2),
501 header=self.rc.system_header,
502 verbose=self.rc.system_verbose)
503
504 self.getoutputerror = lambda cmd: \
505 getoutputerror(self.var_expand(cmd,depth=2),
506 header=self.rc.system_header,
507 verbose=self.rc.system_verbose)
508 508
509 509
510 # keep track of where we started running (mainly for crash post-mortem)
511 self.starting_dir = os.getcwd()
512
513 # Various switches which can be set
514 self.CACHELENGTH = 5000 # this is cheap, it's just text
515 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
516 self.banner2 = banner2
517
518 # TraceBack handlers:
519
520 # Syntax error handler.
521 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
522
523 # The interactive one is initialized with an offset, meaning we always
524 # want to remove the topmost item in the traceback, which is our own
525 # internal code. Valid modes: ['Plain','Context','Verbose']
526 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
527 color_scheme='NoColor',
528 tb_offset = 1)
529
530 # IPython itself shouldn't crash. This will produce a detailed
531 # post-mortem if it does. But we only install the crash handler for
532 # non-threaded shells, the threaded ones use a normal verbose reporter
533 # and lose the crash handler. This is because exceptions in the main
534 # thread (such as in GUI code) propagate directly to sys.excepthook,
535 # and there's no point in printing crash dumps for every user exception.
536 if self.isthreaded:
537 ipCrashHandler = ultraTB.FormattedTB()
538 else:
539 from IPython import CrashHandler
540 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
541 self.set_crash_handler(ipCrashHandler)
542
543 # and add any custom exception handlers the user may have specified
544 self.set_custom_exc(*custom_exceptions)
545
546 # indentation management
547 self.autoindent = False
548 self.indent_current_nsp = 0
549
550 # Make some aliases automatically
551 # Prepare list of shell aliases to auto-define
552 if os.name == 'posix':
553 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
554 'mv mv -i','rm rm -i','cp cp -i',
555 'cat cat','less less','clear clear',
556 # a better ls
557 'ls ls -F',
558 # long ls
559 'll ls -lF')
560 # Extra ls aliases with color, which need special treatment on BSD
561 # variants
562 ls_extra = ( # color ls
563 'lc ls -F -o --color',
564 # ls normal files only
565 'lf ls -F -o --color %l | grep ^-',
566 # ls symbolic links
567 'lk ls -F -o --color %l | grep ^l',
568 # directories or links to directories,
569 'ldir ls -F -o --color %l | grep /$',
570 # things which are executable
571 'lx ls -F -o --color %l | grep ^-..x',
572 )
573 # The BSDs don't ship GNU ls, so they don't understand the
574 # --color switch out of the box
575 if 'bsd' in sys.platform:
576 ls_extra = ( # ls normal files only
577 'lf ls -lF | grep ^-',
578 # ls symbolic links
579 'lk ls -lF | grep ^l',
580 # directories or links to directories,
581 'ldir ls -lF | grep /$',
582 # things which are executable
583 'lx ls -lF | grep ^-..x',
584 )
585 auto_alias = auto_alias + ls_extra
586 elif os.name in ['nt','dos']:
587 auto_alias = ('ls dir /on',
588 'ddir dir /ad /on', 'ldir dir /ad /on',
589 'mkdir mkdir','rmdir rmdir','echo echo',
590 'ren ren','cls cls','copy copy')
591 else:
592 auto_alias = ()
593 self.auto_alias = [s.split(None,1) for s in auto_alias]
594
595 # Produce a public API instance
596 self.api = IPython.ipapi.IPApi(self)
597
598 # Call the actual (public) initializer
599 self.init_auto_alias()
600
601 # track which builtins we add, so we can clean up later
602 self.builtins_added = {}
603 # This method will add the necessary builtins for operation, but
604 # tracking what it did via the builtins_added dict.
605 self.add_builtins()
606
607
608
609 # end __init__
610
611 def var_expand(self,cmd,depth=0):
612 """Expand python variables in a string.
613
614 The depth argument indicates how many frames above the caller should
615 be walked to look for the local namespace where to expand variables.
616
617 The global namespace for expansion is always the user's interactive
618 namespace.
619 """
620
621 return str(ItplNS(cmd.replace('#','\#'),
622 self.user_ns, # globals
623 # Skip our own frame in searching for locals:
624 sys._getframe(depth+1).f_locals # locals
625 ))
626
627 def pre_config_initialization(self):
628 """Pre-configuration init method
629
630 This is called before the configuration files are processed to
631 prepare the services the config files might need.
632
633 self.rc already has reasonable default values at this point.
634 """
635 rc = self.rc
636 try:
637 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
638 except exceptions.UnicodeDecodeError:
639 print "Your ipythondir can't be decoded to unicode!"
640 print "Please set HOME environment variable to something that"
641 print r"only has ASCII characters, e.g. c:\home"
642 print "Now it is",rc.ipythondir
643 sys.exit()
644 self.shadowhist = IPython.history.ShadowHist(self.db)
645
646
647 def post_config_initialization(self):
648 """Post configuration init method
649
650 This is called after the configuration files have been processed to
651 'finalize' the initialization."""
652
653 rc = self.rc
654
655 # Object inspector
656 self.inspector = OInspect.Inspector(OInspect.InspectColors,
657 PyColorize.ANSICodeColors,
658 'NoColor',
659 rc.object_info_string_level)
660
661 self.rl_next_input = None
662 self.rl_do_indent = False
663 # Load readline proper
664 if rc.readline:
665 self.init_readline()
666
667
668 # local shortcut, this is used a LOT
669 self.log = self.logger.log
670
671 # Initialize cache, set in/out prompts and printing system
672 self.outputcache = CachedOutput(self,
673 rc.cache_size,
674 rc.pprint,
675 input_sep = rc.separate_in,
676 output_sep = rc.separate_out,
677 output_sep2 = rc.separate_out2,
678 ps1 = rc.prompt_in1,
679 ps2 = rc.prompt_in2,
680 ps_out = rc.prompt_out,
681 pad_left = rc.prompts_pad_left)
682
683 # user may have over-ridden the default print hook:
684 try:
685 self.outputcache.__class__.display = self.hooks.display
686 except AttributeError:
687 pass
688
689 # I don't like assigning globally to sys, because it means when
690 # embedding instances, each embedded instance overrides the previous
691 # choice. But sys.displayhook seems to be called internally by exec,
692 # so I don't see a way around it. We first save the original and then
693 # overwrite it.
694 self.sys_displayhook = sys.displayhook
695 sys.displayhook = self.outputcache
696
697 # Do a proper resetting of doctest, including the necessary displayhook
698 # monkeypatching
699 doctest_reload()
700
701 # Set user colors (don't do it in the constructor above so that it
702 # doesn't crash if colors option is invalid)
703 self.magic_colors(rc.colors)
704
705 # Set calling of pdb on exceptions
706 self.call_pdb = rc.pdb
707
708 # Load user aliases
709 for alias in rc.alias:
710 self.magic_alias(alias)
711
712 self.hooks.late_startup_hook()
713
714 batchrun = False
715 for batchfile in [path(arg) for arg in self.rc.args
716 if arg.lower().endswith('.ipy')]:
717 if not batchfile.isfile():
718 print "No such batch file:", batchfile
719 continue
720 self.api.runlines(batchfile.text())
721 batchrun = True
722 # without -i option, exit after running the batch file
723 if batchrun and not self.rc.interact:
724 self.exit_now = True
725
726 def add_builtins(self):
727 """Store ipython references into the builtin namespace.
728
729 Some parts of ipython operate via builtins injected here, which hold a
730 reference to IPython itself."""
731
732 # TODO: deprecate all except _ip; 'jobs' should be installed
733 # by an extension and the rest are under _ip, ipalias is redundant
734 builtins_new = dict(__IPYTHON__ = self,
735 ip_set_hook = self.set_hook,
736 jobs = self.jobs,
737 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
738 ipalias = wrap_deprecated(self.ipalias),
739 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
740 _ip = self.api
741 )
742 for biname,bival in builtins_new.items():
743 try:
744 # store the orignal value so we can restore it
745 self.builtins_added[biname] = __builtin__.__dict__[biname]
746 except KeyError:
747 # or mark that it wasn't defined, and we'll just delete it at
748 # cleanup
749 self.builtins_added[biname] = Undefined
750 __builtin__.__dict__[biname] = bival
751
752 # Keep in the builtins a flag for when IPython is active. We set it
753 # with setdefault so that multiple nested IPythons don't clobber one
754 # another. Each will increase its value by one upon being activated,
755 # which also gives us a way to determine the nesting level.
756 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
757
758 def clean_builtins(self):
759 """Remove any builtins which might have been added by add_builtins, or
760 restore overwritten ones to their previous values."""
761 for biname,bival in self.builtins_added.items():
762 if bival is Undefined:
763 del __builtin__.__dict__[biname]
764 else:
765 __builtin__.__dict__[biname] = bival
766 self.builtins_added.clear()
767
768 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
769 """set_hook(name,hook) -> sets an internal IPython hook.
770
771 IPython exposes some of its internal API as user-modifiable hooks. By
772 adding your function to one of these hooks, you can modify IPython's
773 behavior to call at runtime your own routines."""
774
775 # At some point in the future, this should validate the hook before it
776 # accepts it. Probably at least check that the hook takes the number
777 # of args it's supposed to.
778
779 f = new.instancemethod(hook,self,self.__class__)
780
781 # check if the hook is for strdispatcher first
782 if str_key is not None:
783 sdp = self.strdispatchers.get(name, StrDispatch())
784 sdp.add_s(str_key, f, priority )
785 self.strdispatchers[name] = sdp
786 return
787 if re_key is not None:
788 sdp = self.strdispatchers.get(name, StrDispatch())
789 sdp.add_re(re.compile(re_key), f, priority )
790 self.strdispatchers[name] = sdp
791 return
792
793 dp = getattr(self.hooks, name, None)
794 if name not in IPython.hooks.__all__:
795 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
796 if not dp:
797 dp = IPython.hooks.CommandChainDispatcher()
798
799 try:
800 dp.add(f,priority)
801 except AttributeError:
802 # it was not commandchain, plain old func - replace
803 dp = f
804
805 setattr(self.hooks,name, dp)
806
807
808 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
809
810 def set_crash_handler(self,crashHandler):
811 """Set the IPython crash handler.
812
813 This must be a callable with a signature suitable for use as
814 sys.excepthook."""
815
816 # Install the given crash handler as the Python exception hook
817 sys.excepthook = crashHandler
818
819 # The instance will store a pointer to this, so that runtime code
820 # (such as magics) can access it. This is because during the
821 # read-eval loop, it gets temporarily overwritten (to deal with GUI
822 # frameworks).
823 self.sys_excepthook = sys.excepthook
824
825
826 def set_custom_exc(self,exc_tuple,handler):
827 """set_custom_exc(exc_tuple,handler)
828
829 Set a custom exception handler, which will be called if any of the
830 exceptions in exc_tuple occur in the mainloop (specifically, in the
831 runcode() method.
832
833 Inputs:
834
835 - exc_tuple: a *tuple* of valid exceptions to call the defined
836 handler for. It is very important that you use a tuple, and NOT A
837 LIST here, because of the way Python's except statement works. If
838 you only want to trap a single exception, use a singleton tuple:
839
840 exc_tuple == (MyCustomException,)
841
842 - handler: this must be defined as a function with the following
843 basic interface: def my_handler(self,etype,value,tb).
844
845 This will be made into an instance method (via new.instancemethod)
846 of IPython itself, and it will be called if any of the exceptions
847 listed in the exc_tuple are caught. If the handler is None, an
848 internal basic one is used, which just prints basic info.
849
850 WARNING: by putting in your own exception handler into IPython's main
851 execution loop, you run a very good chance of nasty crashes. This
852 facility should only be used if you really know what you are doing."""
853
854 assert type(exc_tuple)==type(()) , \
855 "The custom exceptions must be given AS A TUPLE."
856
857 def dummy_handler(self,etype,value,tb):
858 print '*** Simple custom exception handler ***'
859 print 'Exception type :',etype
860 print 'Exception value:',value
861 print 'Traceback :',tb
862 print 'Source code :','\n'.join(self.buffer)
863
864 if handler is None: handler = dummy_handler
865
866 self.CustomTB = new.instancemethod(handler,self,self.__class__)
867 self.custom_exceptions = exc_tuple
868
869 def set_custom_completer(self,completer,pos=0):
870 """set_custom_completer(completer,pos=0)
871
872 Adds a new custom completer function.
873
874 The position argument (defaults to 0) is the index in the completers
875 list where you want the completer to be inserted."""
876
877 newcomp = new.instancemethod(completer,self.Completer,
878 self.Completer.__class__)
879 self.Completer.matchers.insert(pos,newcomp)
880
881 def set_completer(self):
882 """reset readline's completer to be our own."""
883 self.readline.set_completer(self.Completer.complete)
884
885 def _get_call_pdb(self):
886 return self._call_pdb
887
888 def _set_call_pdb(self,val):
889
890 if val not in (0,1,False,True):
891 raise ValueError,'new call_pdb value must be boolean'
892
893 # store value in instance
894 self._call_pdb = val
510 # keep track of where we started running (mainly for crash post-mortem)
511 self.starting_dir = os.getcwd()
512
513 # Various switches which can be set
514 self.CACHELENGTH = 5000 # this is cheap, it's just text
515 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
516 self.banner2 = banner2
517
518 # TraceBack handlers:
519
520 # Syntax error handler.
521 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
522
523 # The interactive one is initialized with an offset, meaning we always
524 # want to remove the topmost item in the traceback, which is our own
525 # internal code. Valid modes: ['Plain','Context','Verbose']
526 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
527 color_scheme='NoColor',
528 tb_offset = 1)
529
530 # IPython itself shouldn't crash. This will produce a detailed
531 # post-mortem if it does. But we only install the crash handler for
532 # non-threaded shells, the threaded ones use a normal verbose reporter
533 # and lose the crash handler. This is because exceptions in the main
534 # thread (such as in GUI code) propagate directly to sys.excepthook,
535 # and there's no point in printing crash dumps for every user exception.
536 if self.isthreaded:
537 ipCrashHandler = ultraTB.FormattedTB()
538 else:
539 from IPython import CrashHandler
540 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
541 self.set_crash_handler(ipCrashHandler)
542
543 # and add any custom exception handlers the user may have specified
544 self.set_custom_exc(*custom_exceptions)
545
546 # indentation management
547 self.autoindent = False
548 self.indent_current_nsp = 0
549
550 # Make some aliases automatically
551 # Prepare list of shell aliases to auto-define
552 if os.name == 'posix':
553 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
554 'mv mv -i','rm rm -i','cp cp -i',
555 'cat cat','less less','clear clear',
556 # a better ls
557 'ls ls -F',
558 # long ls
559 'll ls -lF')
560 # Extra ls aliases with color, which need special treatment on BSD
561 # variants
562 ls_extra = ( # color ls
563 'lc ls -F -o --color',
564 # ls normal files only
565 'lf ls -F -o --color %l | grep ^-',
566 # ls symbolic links
567 'lk ls -F -o --color %l | grep ^l',
568 # directories or links to directories,
569 'ldir ls -F -o --color %l | grep /$',
570 # things which are executable
571 'lx ls -F -o --color %l | grep ^-..x',
572 )
573 # The BSDs don't ship GNU ls, so they don't understand the
574 # --color switch out of the box
575 if 'bsd' in sys.platform:
576 ls_extra = ( # ls normal files only
577 'lf ls -lF | grep ^-',
578 # ls symbolic links
579 'lk ls -lF | grep ^l',
580 # directories or links to directories,
581 'ldir ls -lF | grep /$',
582 # things which are executable
583 'lx ls -lF | grep ^-..x',
584 )
585 auto_alias = auto_alias + ls_extra
586 elif os.name in ['nt','dos']:
587 auto_alias = ('ls dir /on',
588 'ddir dir /ad /on', 'ldir dir /ad /on',
589 'mkdir mkdir','rmdir rmdir','echo echo',
590 'ren ren','cls cls','copy copy')
591 else:
592 auto_alias = ()
593 self.auto_alias = [s.split(None,1) for s in auto_alias]
594
595 # Produce a public API instance
596 self.api = IPython.ipapi.IPApi(self)
597
598 # Call the actual (public) initializer
599 self.init_auto_alias()
600
601 # track which builtins we add, so we can clean up later
602 self.builtins_added = {}
603 # This method will add the necessary builtins for operation, but
604 # tracking what it did via the builtins_added dict.
605 self.add_builtins()
606
607
608
609 # end __init__
610
611 def var_expand(self,cmd,depth=0):
612 """Expand python variables in a string.
613
614 The depth argument indicates how many frames above the caller should
615 be walked to look for the local namespace where to expand variables.
616
617 The global namespace for expansion is always the user's interactive
618 namespace.
619 """
620
621 return str(ItplNS(cmd.replace('#','\#'),
622 self.user_ns, # globals
623 # Skip our own frame in searching for locals:
624 sys._getframe(depth+1).f_locals # locals
625 ))
626
627 def pre_config_initialization(self):
628 """Pre-configuration init method
629
630 This is called before the configuration files are processed to
631 prepare the services the config files might need.
632
633 self.rc already has reasonable default values at this point.
634 """
635 rc = self.rc
636 try:
637 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
638 except exceptions.UnicodeDecodeError:
639 print "Your ipythondir can't be decoded to unicode!"
640 print "Please set HOME environment variable to something that"
641 print r"only has ASCII characters, e.g. c:\home"
642 print "Now it is",rc.ipythondir
643 sys.exit()
644 self.shadowhist = IPython.history.ShadowHist(self.db)
645
646
647 def post_config_initialization(self):
648 """Post configuration init method
649
650 This is called after the configuration files have been processed to
651 'finalize' the initialization."""
652
653 rc = self.rc
654
655 # Object inspector
656 self.inspector = OInspect.Inspector(OInspect.InspectColors,
657 PyColorize.ANSICodeColors,
658 'NoColor',
659 rc.object_info_string_level)
660
661 self.rl_next_input = None
662 self.rl_do_indent = False
663 # Load readline proper
664 if rc.readline:
665 self.init_readline()
666
667
668 # local shortcut, this is used a LOT
669 self.log = self.logger.log
670
671 # Initialize cache, set in/out prompts and printing system
672 self.outputcache = CachedOutput(self,
673 rc.cache_size,
674 rc.pprint,
675 input_sep = rc.separate_in,
676 output_sep = rc.separate_out,
677 output_sep2 = rc.separate_out2,
678 ps1 = rc.prompt_in1,
679 ps2 = rc.prompt_in2,
680 ps_out = rc.prompt_out,
681 pad_left = rc.prompts_pad_left)
682
683 # user may have over-ridden the default print hook:
684 try:
685 self.outputcache.__class__.display = self.hooks.display
686 except AttributeError:
687 pass
688
689 # I don't like assigning globally to sys, because it means when
690 # embedding instances, each embedded instance overrides the previous
691 # choice. But sys.displayhook seems to be called internally by exec,
692 # so I don't see a way around it. We first save the original and then
693 # overwrite it.
694 self.sys_displayhook = sys.displayhook
695 sys.displayhook = self.outputcache
696
697 # Do a proper resetting of doctest, including the necessary displayhook
698 # monkeypatching
699 doctest_reload()
700
701 # Set user colors (don't do it in the constructor above so that it
702 # doesn't crash if colors option is invalid)
703 self.magic_colors(rc.colors)
704
705 # Set calling of pdb on exceptions
706 self.call_pdb = rc.pdb
707
708 # Load user aliases
709 for alias in rc.alias:
710 self.magic_alias(alias)
711
712 self.hooks.late_startup_hook()
713
714 batchrun = False
715 for batchfile in [path(arg) for arg in self.rc.args
716 if arg.lower().endswith('.ipy')]:
717 if not batchfile.isfile():
718 print "No such batch file:", batchfile
719 continue
720 self.api.runlines(batchfile.text())
721 batchrun = True
722 # without -i option, exit after running the batch file
723 if batchrun and not self.rc.interact:
724 self.exit_now = True
725
726 def add_builtins(self):
727 """Store ipython references into the builtin namespace.
728
729 Some parts of ipython operate via builtins injected here, which hold a
730 reference to IPython itself."""
731
732 # TODO: deprecate all except _ip; 'jobs' should be installed
733 # by an extension and the rest are under _ip, ipalias is redundant
734 builtins_new = dict(__IPYTHON__ = self,
735 ip_set_hook = self.set_hook,
736 jobs = self.jobs,
737 ipmagic = wrap_deprecated(self.ipmagic,'_ip.magic()'),
738 ipalias = wrap_deprecated(self.ipalias),
739 ipsystem = wrap_deprecated(self.ipsystem,'_ip.system()'),
740 _ip = self.api
741 )
742 for biname,bival in builtins_new.items():
743 try:
744 # store the orignal value so we can restore it
745 self.builtins_added[biname] = __builtin__.__dict__[biname]
746 except KeyError:
747 # or mark that it wasn't defined, and we'll just delete it at
748 # cleanup
749 self.builtins_added[biname] = Undefined
750 __builtin__.__dict__[biname] = bival
751
752 # Keep in the builtins a flag for when IPython is active. We set it
753 # with setdefault so that multiple nested IPythons don't clobber one
754 # another. Each will increase its value by one upon being activated,
755 # which also gives us a way to determine the nesting level.
756 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
757
758 def clean_builtins(self):
759 """Remove any builtins which might have been added by add_builtins, or
760 restore overwritten ones to their previous values."""
761 for biname,bival in self.builtins_added.items():
762 if bival is Undefined:
763 del __builtin__.__dict__[biname]
764 else:
765 __builtin__.__dict__[biname] = bival
766 self.builtins_added.clear()
767
768 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
769 """set_hook(name,hook) -> sets an internal IPython hook.
770
771 IPython exposes some of its internal API as user-modifiable hooks. By
772 adding your function to one of these hooks, you can modify IPython's
773 behavior to call at runtime your own routines."""
774
775 # At some point in the future, this should validate the hook before it
776 # accepts it. Probably at least check that the hook takes the number
777 # of args it's supposed to.
778
779 f = new.instancemethod(hook,self,self.__class__)
780
781 # check if the hook is for strdispatcher first
782 if str_key is not None:
783 sdp = self.strdispatchers.get(name, StrDispatch())
784 sdp.add_s(str_key, f, priority )
785 self.strdispatchers[name] = sdp
786 return
787 if re_key is not None:
788 sdp = self.strdispatchers.get(name, StrDispatch())
789 sdp.add_re(re.compile(re_key), f, priority )
790 self.strdispatchers[name] = sdp
791 return
792
793 dp = getattr(self.hooks, name, None)
794 if name not in IPython.hooks.__all__:
795 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
796 if not dp:
797 dp = IPython.hooks.CommandChainDispatcher()
798
799 try:
800 dp.add(f,priority)
801 except AttributeError:
802 # it was not commandchain, plain old func - replace
803 dp = f
804
805 setattr(self.hooks,name, dp)
806
807
808 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
809
810 def set_crash_handler(self,crashHandler):
811 """Set the IPython crash handler.
812
813 This must be a callable with a signature suitable for use as
814 sys.excepthook."""
815
816 # Install the given crash handler as the Python exception hook
817 sys.excepthook = crashHandler
818
819 # The instance will store a pointer to this, so that runtime code
820 # (such as magics) can access it. This is because during the
821 # read-eval loop, it gets temporarily overwritten (to deal with GUI
822 # frameworks).
823 self.sys_excepthook = sys.excepthook
824
825
826 def set_custom_exc(self,exc_tuple,handler):
827 """set_custom_exc(exc_tuple,handler)
828
829 Set a custom exception handler, which will be called if any of the
830 exceptions in exc_tuple occur in the mainloop (specifically, in the
831 runcode() method.
832
833 Inputs:
834
835 - exc_tuple: a *tuple* of valid exceptions to call the defined
836 handler for. It is very important that you use a tuple, and NOT A
837 LIST here, because of the way Python's except statement works. If
838 you only want to trap a single exception, use a singleton tuple:
839
840 exc_tuple == (MyCustomException,)
841
842 - handler: this must be defined as a function with the following
843 basic interface: def my_handler(self,etype,value,tb).
844
845 This will be made into an instance method (via new.instancemethod)
846 of IPython itself, and it will be called if any of the exceptions
847 listed in the exc_tuple are caught. If the handler is None, an
848 internal basic one is used, which just prints basic info.
849
850 WARNING: by putting in your own exception handler into IPython's main
851 execution loop, you run a very good chance of nasty crashes. This
852 facility should only be used if you really know what you are doing."""
853
854 assert type(exc_tuple)==type(()) , \
855 "The custom exceptions must be given AS A TUPLE."
856
857 def dummy_handler(self,etype,value,tb):
858 print '*** Simple custom exception handler ***'
859 print 'Exception type :',etype
860 print 'Exception value:',value
861 print 'Traceback :',tb
862 print 'Source code :','\n'.join(self.buffer)
863
864 if handler is None: handler = dummy_handler
865
866 self.CustomTB = new.instancemethod(handler,self,self.__class__)
867 self.custom_exceptions = exc_tuple
868
869 def set_custom_completer(self,completer,pos=0):
870 """set_custom_completer(completer,pos=0)
871
872 Adds a new custom completer function.
873
874 The position argument (defaults to 0) is the index in the completers
875 list where you want the completer to be inserted."""
876
877 newcomp = new.instancemethod(completer,self.Completer,
878 self.Completer.__class__)
879 self.Completer.matchers.insert(pos,newcomp)
880
881 def set_completer(self):
882 """reset readline's completer to be our own."""
883 self.readline.set_completer(self.Completer.complete)
884
885 def _get_call_pdb(self):
886 return self._call_pdb
887
888 def _set_call_pdb(self,val):
889
890 if val not in (0,1,False,True):
891 raise ValueError,'new call_pdb value must be boolean'
892
893 # store value in instance
894 self._call_pdb = val
895 895
896 # notify the actual exception handlers
897 self.InteractiveTB.call_pdb = val
898 if self.isthreaded:
899 try:
900 self.sys_excepthook.call_pdb = val
901 except:
902 warn('Failed to activate pdb for threaded exception handler')
896 # notify the actual exception handlers
897 self.InteractiveTB.call_pdb = val
898 if self.isthreaded:
899 try:
900 self.sys_excepthook.call_pdb = val
901 except:
902 warn('Failed to activate pdb for threaded exception handler')
903 903
904 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
905 'Control auto-activation of pdb at exceptions')
904 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
905 'Control auto-activation of pdb at exceptions')
906 906
907 907
908 # These special functions get installed in the builtin namespace, to
909 # provide programmatic (pure python) access to magics, aliases and system
910 # calls. This is important for logging, user scripting, and more.
908 # These special functions get installed in the builtin namespace, to
909 # provide programmatic (pure python) access to magics, aliases and system
910 # calls. This is important for logging, user scripting, and more.
911 911
912 # We are basically exposing, via normal python functions, the three
913 # mechanisms in which ipython offers special call modes (magics for
914 # internal control, aliases for direct system access via pre-selected
915 # names, and !cmd for calling arbitrary system commands).
916
917 def ipmagic(self,arg_s):
918 """Call a magic function by name.
919
920 Input: a string containing the name of the magic function to call and any
921 additional arguments to be passed to the magic.
922
923 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
924 prompt:
925
926 In[1]: %name -opt foo bar
927
928 To call a magic without arguments, simply use ipmagic('name').
929
930 This provides a proper Python function to call IPython's magics in any
931 valid Python code you can type at the interpreter, including loops and
932 compound statements. It is added by IPython to the Python builtin
933 namespace upon initialization."""
934
935 args = arg_s.split(' ',1)
936 magic_name = args[0]
937 magic_name = magic_name.lstrip(self.ESC_MAGIC)
938
939 try:
940 magic_args = args[1]
941 except IndexError:
942 magic_args = ''
943 fn = getattr(self,'magic_'+magic_name,None)
944 if fn is None:
945 error("Magic function `%s` not found." % magic_name)
946 else:
947 magic_args = self.var_expand(magic_args,1)
948 return fn(magic_args)
949
950 def ipalias(self,arg_s):
951 """Call an alias by name.
952
953 Input: a string containing the name of the alias to call and any
954 additional arguments to be passed to the magic.
955
956 ipalias('name -opt foo bar') is equivalent to typing at the ipython
957 prompt:
958
959 In[1]: name -opt foo bar
960
961 To call an alias without arguments, simply use ipalias('name').
962
963 This provides a proper Python function to call IPython's aliases in any
964 valid Python code you can type at the interpreter, including loops and
965 compound statements. It is added by IPython to the Python builtin
966 namespace upon initialization."""
967
968 args = arg_s.split(' ',1)
969 alias_name = args[0]
970 try:
971 alias_args = args[1]
972 except IndexError:
973 alias_args = ''
974 if alias_name in self.alias_table:
975 self.call_alias(alias_name,alias_args)
976 else:
977 error("Alias `%s` not found." % alias_name)
978
979 def ipsystem(self,arg_s):
980 """Make a system call, using IPython."""
981
982 self.system(arg_s)
983
984 def complete(self,text):
985 """Return a sorted list of all possible completions on text.
986
987 Inputs:
988
989 - text: a string of text to be completed on.
990
991 This is a wrapper around the completion mechanism, similar to what
992 readline does at the command line when the TAB key is hit. By
993 exposing it as a method, it can be used by other non-readline
994 environments (such as GUIs) for text completion.
995
996 Simple usage example:
997
998 In [1]: x = 'hello'
999
1000 In [2]: __IP.complete('x.l')
1001 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
1002
1003 complete = self.Completer.complete
1004 state = 0
1005 # use a dict so we get unique keys, since ipyhton's multiple
1006 # completers can return duplicates. When we make 2.4 a requirement,
1007 # start using sets instead, which are faster.
1008 comps = {}
1009 while True:
1010 newcomp = complete(text,state,line_buffer=text)
1011 if newcomp is None:
1012 break
1013 comps[newcomp] = 1
1014 state += 1
1015 outcomps = comps.keys()
1016 outcomps.sort()
1017 return outcomps
1018
1019 def set_completer_frame(self, frame=None):
1020 if frame:
1021 self.Completer.namespace = frame.f_locals
1022 self.Completer.global_namespace = frame.f_globals
1023 else:
1024 self.Completer.namespace = self.user_ns
1025 self.Completer.global_namespace = self.user_global_ns
1026
1027 def init_auto_alias(self):
1028 """Define some aliases automatically.
1029
1030 These are ALL parameter-less aliases"""
1031
1032 for alias,cmd in self.auto_alias:
1033 self.getapi().defalias(alias,cmd)
1034
1035
1036 def alias_table_validate(self,verbose=0):
1037 """Update information about the alias table.
1038
1039 In particular, make sure no Python keywords/builtins are in it."""
1040
1041 no_alias = self.no_alias
1042 for k in self.alias_table.keys():
1043 if k in no_alias:
1044 del self.alias_table[k]
1045 if verbose:
1046 print ("Deleting alias <%s>, it's a Python "
1047 "keyword or builtin." % k)
1048
1049 def set_autoindent(self,value=None):
1050 """Set the autoindent flag, checking for readline support.
1051
1052 If called with no arguments, it acts as a toggle."""
1053
1054 if not self.has_readline:
1055 if os.name == 'posix':
1056 warn("The auto-indent feature requires the readline library")
1057 self.autoindent = 0
1058 return
1059 if value is None:
1060 self.autoindent = not self.autoindent
1061 else:
1062 self.autoindent = value
1063
1064 def rc_set_toggle(self,rc_field,value=None):
1065 """Set or toggle a field in IPython's rc config. structure.
1066
1067 If called with no arguments, it acts as a toggle.
1068
1069 If called with a non-existent field, the resulting AttributeError
1070 exception will propagate out."""
1071
1072 rc_val = getattr(self.rc,rc_field)
1073 if value is None:
1074 value = not rc_val
1075 setattr(self.rc,rc_field,value)
1076
1077 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1078 """Install the user configuration directory.
1079
1080 Can be called when running for the first time or to upgrade the user's
1081 .ipython/ directory with the mode parameter. Valid modes are 'install'
1082 and 'upgrade'."""
1083
1084 def wait():
1085 try:
1086 raw_input("Please press <RETURN> to start IPython.")
1087 except EOFError:
1088 print >> Term.cout
1089 print '*'*70
1090
1091 cwd = os.getcwd() # remember where we started
1092 glb = glob.glob
1093 print '*'*70
1094 if mode == 'install':
1095 print \
912 # We are basically exposing, via normal python functions, the three
913 # mechanisms in which ipython offers special call modes (magics for
914 # internal control, aliases for direct system access via pre-selected
915 # names, and !cmd for calling arbitrary system commands).
916
917 def ipmagic(self,arg_s):
918 """Call a magic function by name.
919
920 Input: a string containing the name of the magic function to call and any
921 additional arguments to be passed to the magic.
922
923 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
924 prompt:
925
926 In[1]: %name -opt foo bar
927
928 To call a magic without arguments, simply use ipmagic('name').
929
930 This provides a proper Python function to call IPython's magics in any
931 valid Python code you can type at the interpreter, including loops and
932 compound statements. It is added by IPython to the Python builtin
933 namespace upon initialization."""
934
935 args = arg_s.split(' ',1)
936 magic_name = args[0]
937 magic_name = magic_name.lstrip(self.ESC_MAGIC)
938
939 try:
940 magic_args = args[1]
941 except IndexError:
942 magic_args = ''
943 fn = getattr(self,'magic_'+magic_name,None)
944 if fn is None:
945 error("Magic function `%s` not found." % magic_name)
946 else:
947 magic_args = self.var_expand(magic_args,1)
948 return fn(magic_args)
949
950 def ipalias(self,arg_s):
951 """Call an alias by name.
952
953 Input: a string containing the name of the alias to call and any
954 additional arguments to be passed to the magic.
955
956 ipalias('name -opt foo bar') is equivalent to typing at the ipython
957 prompt:
958
959 In[1]: name -opt foo bar
960
961 To call an alias without arguments, simply use ipalias('name').
962
963 This provides a proper Python function to call IPython's aliases in any
964 valid Python code you can type at the interpreter, including loops and
965 compound statements. It is added by IPython to the Python builtin
966 namespace upon initialization."""
967
968 args = arg_s.split(' ',1)
969 alias_name = args[0]
970 try:
971 alias_args = args[1]
972 except IndexError:
973 alias_args = ''
974 if alias_name in self.alias_table:
975 self.call_alias(alias_name,alias_args)
976 else:
977 error("Alias `%s` not found." % alias_name)
978
979 def ipsystem(self,arg_s):
980 """Make a system call, using IPython."""
981
982 self.system(arg_s)
983
984 def complete(self,text):
985 """Return a sorted list of all possible completions on text.
986
987 Inputs:
988
989 - text: a string of text to be completed on.
990
991 This is a wrapper around the completion mechanism, similar to what
992 readline does at the command line when the TAB key is hit. By
993 exposing it as a method, it can be used by other non-readline
994 environments (such as GUIs) for text completion.
995
996 Simple usage example:
997
998 In [1]: x = 'hello'
999
1000 In [2]: __IP.complete('x.l')
1001 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
1002
1003 complete = self.Completer.complete
1004 state = 0
1005 # use a dict so we get unique keys, since ipyhton's multiple
1006 # completers can return duplicates. When we make 2.4 a requirement,
1007 # start using sets instead, which are faster.
1008 comps = {}
1009 while True:
1010 newcomp = complete(text,state,line_buffer=text)
1011 if newcomp is None:
1012 break
1013 comps[newcomp] = 1
1014 state += 1
1015 outcomps = comps.keys()
1016 outcomps.sort()
1017 return outcomps
1018
1019 def set_completer_frame(self, frame=None):
1020 if frame:
1021 self.Completer.namespace = frame.f_locals
1022 self.Completer.global_namespace = frame.f_globals
1023 else:
1024 self.Completer.namespace = self.user_ns
1025 self.Completer.global_namespace = self.user_global_ns
1026
1027 def init_auto_alias(self):
1028 """Define some aliases automatically.
1029
1030 These are ALL parameter-less aliases"""
1031
1032 for alias,cmd in self.auto_alias:
1033 self.getapi().defalias(alias,cmd)
1034
1035
1036 def alias_table_validate(self,verbose=0):
1037 """Update information about the alias table.
1038
1039 In particular, make sure no Python keywords/builtins are in it."""
1040
1041 no_alias = self.no_alias
1042 for k in self.alias_table.keys():
1043 if k in no_alias:
1044 del self.alias_table[k]
1045 if verbose:
1046 print ("Deleting alias <%s>, it's a Python "
1047 "keyword or builtin." % k)
1048
1049 def set_autoindent(self,value=None):
1050 """Set the autoindent flag, checking for readline support.
1051
1052 If called with no arguments, it acts as a toggle."""
1053
1054 if not self.has_readline:
1055 if os.name == 'posix':
1056 warn("The auto-indent feature requires the readline library")
1057 self.autoindent = 0
1058 return
1059 if value is None:
1060 self.autoindent = not self.autoindent
1061 else:
1062 self.autoindent = value
1063
1064 def rc_set_toggle(self,rc_field,value=None):
1065 """Set or toggle a field in IPython's rc config. structure.
1066
1067 If called with no arguments, it acts as a toggle.
1068
1069 If called with a non-existent field, the resulting AttributeError
1070 exception will propagate out."""
1071
1072 rc_val = getattr(self.rc,rc_field)
1073 if value is None:
1074 value = not rc_val
1075 setattr(self.rc,rc_field,value)
1076
1077 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1078 """Install the user configuration directory.
1079
1080 Can be called when running for the first time or to upgrade the user's
1081 .ipython/ directory with the mode parameter. Valid modes are 'install'
1082 and 'upgrade'."""
1083
1084 def wait():
1085 try:
1086 raw_input("Please press <RETURN> to start IPython.")
1087 except EOFError:
1088 print >> Term.cout
1089 print '*'*70
1090
1091 cwd = os.getcwd() # remember where we started
1092 glb = glob.glob
1093 print '*'*70
1094 if mode == 'install':
1095 print \
1096 1096 """Welcome to IPython. I will try to create a personal configuration directory
1097 1097 where you can customize many aspects of IPython's functionality in:\n"""
1098 else:
1099 print 'I am going to upgrade your configuration in:'
1100
1101 print ipythondir
1102
1103 rcdirend = os.path.join('IPython','UserConfig')
1104 cfg = lambda d: os.path.join(d,rcdirend)
1105 try:
1106 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1107 print "Initializing from configuration",rcdir
1108 except IndexError:
1109 warning = """
1098 else:
1099 print 'I am going to upgrade your configuration in:'
1100
1101 print ipythondir
1102
1103 rcdirend = os.path.join('IPython','UserConfig')
1104 cfg = lambda d: os.path.join(d,rcdirend)
1105 try:
1106 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1107 print "Initializing from configuration",rcdir
1108 except IndexError:
1109 warning = """
1110 1110 Installation error. IPython's directory was not found.
1111 1111
1112 1112 Check the following:
1113 1113
1114 1114 The ipython/IPython directory should be in a directory belonging to your
1115 1115 PYTHONPATH environment variable (that is, it should be in a directory
1116 1116 belonging to sys.path). You can copy it explicitly there or just link to it.
1117 1117
1118 1118 IPython will create a minimal default configuration for you.
1119 1119
1120 1120 """
1121 warn(warning)
1122 wait()
1123
1124 if sys.platform =='win32':
1125 inif = 'ipythonrc.ini'
1126 else:
1127 inif = 'ipythonrc'
1128 minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults', inif : '# intentionally left blank' }
1129 os.makedirs(ipythondir)
1130 for f, cont in minimal_setup.items():
1131 open(ipythondir + '/' + f,'w').write(cont)
1132
1133 return
1134
1135 if mode == 'install':
1136 try:
1137 shutil.copytree(rcdir,ipythondir)
1138 os.chdir(ipythondir)
1139 rc_files = glb("ipythonrc*")
1140 for rc_file in rc_files:
1141 os.rename(rc_file,rc_file+rc_suffix)
1142 except:
1143 warning = """
1121 warn(warning)
1122 wait()
1123
1124 if sys.platform =='win32':
1125 inif = 'ipythonrc.ini'
1126 else:
1127 inif = 'ipythonrc'
1128 minimal_setup = {'ipy_user_conf.py' : 'import ipy_defaults', inif : '# intentionally left blank' }
1129 os.makedirs(ipythondir)
1130 for f, cont in minimal_setup.items():
1131 open(ipythondir + '/' + f,'w').write(cont)
1132
1133 return
1134
1135 if mode == 'install':
1136 try:
1137 shutil.copytree(rcdir,ipythondir)
1138 os.chdir(ipythondir)
1139 rc_files = glb("ipythonrc*")
1140 for rc_file in rc_files:
1141 os.rename(rc_file,rc_file+rc_suffix)
1142 except:
1143 warning = """
1144 1144
1145 1145 There was a problem with the installation:
1146 1146 %s
1147 1147 Try to correct it or contact the developers if you think it's a bug.
1148 1148 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1149 warn(warning)
1150 wait()
1151 return
1152
1153 elif mode == 'upgrade':
1154 try:
1155 os.chdir(ipythondir)
1156 except:
1157 print """
1149 warn(warning)
1150 wait()
1151 return
1152
1153 elif mode == 'upgrade':
1154 try:
1155 os.chdir(ipythondir)
1156 except:
1157 print """
1158 1158 Can not upgrade: changing to directory %s failed. Details:
1159 1159 %s
1160 1160 """ % (ipythondir,sys.exc_info()[1])
1161 wait()
1162 return
1163 else:
1164 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1165 for new_full_path in sources:
1166 new_filename = os.path.basename(new_full_path)
1167 if new_filename.startswith('ipythonrc'):
1168 new_filename = new_filename + rc_suffix
1169 # The config directory should only contain files, skip any
1170 # directories which may be there (like CVS)
1171 if os.path.isdir(new_full_path):
1172 continue
1173 if os.path.exists(new_filename):
1174 old_file = new_filename+'.old'
1175 if os.path.exists(old_file):
1176 os.remove(old_file)
1177 os.rename(new_filename,old_file)
1178 shutil.copy(new_full_path,new_filename)
1179 else:
1180 raise ValueError,'unrecognized mode for install:',`mode`
1181
1182 # Fix line-endings to those native to each platform in the config
1183 # directory.
1184 try:
1185 os.chdir(ipythondir)
1186 except:
1187 print """
1161 wait()
1162 return
1163 else:
1164 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1165 for new_full_path in sources:
1166 new_filename = os.path.basename(new_full_path)
1167 if new_filename.startswith('ipythonrc'):
1168 new_filename = new_filename + rc_suffix
1169 # The config directory should only contain files, skip any
1170 # directories which may be there (like CVS)
1171 if os.path.isdir(new_full_path):
1172 continue
1173 if os.path.exists(new_filename):
1174 old_file = new_filename+'.old'
1175 if os.path.exists(old_file):
1176 os.remove(old_file)
1177 os.rename(new_filename,old_file)
1178 shutil.copy(new_full_path,new_filename)
1179 else:
1180 raise ValueError,'unrecognized mode for install:',`mode`
1181
1182 # Fix line-endings to those native to each platform in the config
1183 # directory.
1184 try:
1185 os.chdir(ipythondir)
1186 except:
1187 print """
1188 1188 Problem: changing to directory %s failed.
1189 1189 Details:
1190 1190 %s
1191 1191
1192 1192 Some configuration files may have incorrect line endings. This should not
1193 1193 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1194 wait()
1195 else:
1196 for fname in glb('ipythonrc*'):
1197 try:
1198 native_line_ends(fname,backup=0)
1199 except IOError:
1200 pass
1201
1202 if mode == 'install':
1203 print """
1194 wait()
1195 else:
1196 for fname in glb('ipythonrc*'):
1197 try:
1198 native_line_ends(fname,backup=0)
1199 except IOError:
1200 pass
1201
1202 if mode == 'install':
1203 print """
1204 1204 Successful installation!
1205 1205
1206 1206 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1207 1207 IPython manual (there are both HTML and PDF versions supplied with the
1208 1208 distribution) to make sure that your system environment is properly configured
1209 1209 to take advantage of IPython's features.
1210 1210
1211 1211 Important note: the configuration system has changed! The old system is
1212 1212 still in place, but its setting may be partly overridden by the settings in
1213 1213 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1214 1214 if some of the new settings bother you.
1215 1215
1216 1216 """
1217 else:
1218 print """
1217 else:
1218 print """
1219 1219 Successful upgrade!
1220 1220
1221 1221 All files in your directory:
1222 1222 %(ipythondir)s
1223 1223 which would have been overwritten by the upgrade were backed up with a .old
1224 extension. If you had made particular customizations in those files you may
1224 extension. If you had made particular customizations in those files you may
1225 1225 want to merge them back into the new files.""" % locals()
1226 wait()
1227 os.chdir(cwd)
1228 # end user_setup()
1229
1230 def atexit_operations(self):
1231 """This will be executed at the time of exit.
1232
1233 Saving of persistent data should be performed here. """
1234
1235 #print '*** IPython exit cleanup ***' # dbg
1236 # input history
1237 self.savehist()
1238
1239 # Cleanup all tempfiles left around
1240 for tfile in self.tempfiles:
1241 try:
1242 os.unlink(tfile)
1243 except OSError:
1244 pass
1245
1246 self.hooks.shutdown_hook()
1247
1248 def savehist(self):
1249 """Save input history to a file (via readline library)."""
1250 try:
1251 self.readline.write_history_file(self.histfile)
1252 except:
1253 print 'Unable to save IPython command history to file: ' + \
1254 `self.histfile`
1255
1256 def reloadhist(self):
1257 """Reload the input history from disk file."""
1258
1259 if self.has_readline:
1260 self.readline.clear_history()
1261 self.readline.read_history_file(self.shell.histfile)
1262
1263 def history_saving_wrapper(self, func):
1264 """ Wrap func for readline history saving
1265
1266 Convert func into callable that saves & restores
1267 history around the call """
1268
1269 if not self.has_readline:
1270 return func
1271
1272 def wrapper():
1273 self.savehist()
1274 try:
1275 func()
1276 finally:
1277 readline.read_history_file(self.histfile)
1278 return wrapper
1279
1280
1281 def pre_readline(self):
1282 """readline hook to be used at the start of each line.
1283
1284 Currently it handles auto-indent only."""
1285
1286 #debugx('self.indent_current_nsp','pre_readline:')
1287
1288 if self.rl_do_indent:
1289 self.readline.insert_text(self.indent_current_str())
1290 if self.rl_next_input is not None:
1291 self.readline.insert_text(self.rl_next_input)
1292 self.rl_next_input = None
1293
1294 def init_readline(self):
1295 """Command history completion/saving/reloading."""
1296
1297
1298 import IPython.rlineimpl as readline
1299
1300 if not readline.have_readline:
1301 self.has_readline = 0
1302 self.readline = None
1303 # no point in bugging windows users with this every time:
1304 warn('Readline services not available on this platform.')
1305 else:
1306 sys.modules['readline'] = readline
1307 import atexit
1308 from IPython.completer import IPCompleter
1309 self.Completer = IPCompleter(self,
1310 self.user_ns,
1311 self.user_global_ns,
1312 self.rc.readline_omit__names,
1313 self.alias_table)
1314 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1315 self.strdispatchers['complete_command'] = sdisp
1316 self.Completer.custom_completers = sdisp
1317 # Platform-specific configuration
1318 if os.name == 'nt':
1319 self.readline_startup_hook = readline.set_pre_input_hook
1320 else:
1321 self.readline_startup_hook = readline.set_startup_hook
1322
1323 # Load user's initrc file (readline config)
1324 inputrc_name = os.environ.get('INPUTRC')
1325 if inputrc_name is None:
1326 home_dir = get_home_dir()
1327 if home_dir is not None:
1328 inputrc_name = os.path.join(home_dir,'.inputrc')
1329 if os.path.isfile(inputrc_name):
1330 try:
1331 readline.read_init_file(inputrc_name)
1332 except:
1333 warn('Problems reading readline initialization file <%s>'
1334 % inputrc_name)
1335
1336 self.has_readline = 1
1337 self.readline = readline
1338 # save this in sys so embedded copies can restore it properly
1339 sys.ipcompleter = self.Completer.complete
1340 self.set_completer()
1341
1342 # Configure readline according to user's prefs
1343 for rlcommand in self.rc.readline_parse_and_bind:
1344 readline.parse_and_bind(rlcommand)
1345
1346 # remove some chars from the delimiters list
1347 delims = readline.get_completer_delims()
1348 delims = delims.translate(string._idmap,
1349 self.rc.readline_remove_delims)
1350 readline.set_completer_delims(delims)
1351 # otherwise we end up with a monster history after a while:
1352 readline.set_history_length(1000)
1353 try:
1354 #print '*** Reading readline history' # dbg
1355 readline.read_history_file(self.histfile)
1356 except IOError:
1357 pass # It doesn't exist yet.
1358
1359 atexit.register(self.atexit_operations)
1360 del atexit
1361
1362 # Configure auto-indent for all platforms
1363 self.set_autoindent(self.rc.autoindent)
1364
1365 def ask_yes_no(self,prompt,default=True):
1366 if self.rc.quiet:
1367 return True
1368 return ask_yes_no(prompt,default)
1369
1370 def _should_recompile(self,e):
1371 """Utility routine for edit_syntax_error"""
1372
1373 if e.filename in ('<ipython console>','<input>','<string>',
1374 '<console>','<BackgroundJob compilation>',
1375 None):
1376
1377 return False
1378 try:
1379 if (self.rc.autoedit_syntax and
1380 not self.ask_yes_no('Return to editor to correct syntax error? '
1381 '[Y/n] ','y')):
1382 return False
1383 except EOFError:
1384 return False
1385
1386 def int0(x):
1387 try:
1388 return int(x)
1389 except TypeError:
1390 return 0
1391 # always pass integer line and offset values to editor hook
1392 self.hooks.fix_error_editor(e.filename,
1393 int0(e.lineno),int0(e.offset),e.msg)
1394 return True
1395
1396 def edit_syntax_error(self):
1397 """The bottom half of the syntax error handler called in the main loop.
1398
1399 Loop until syntax error is fixed or user cancels.
1400 """
1401
1402 while self.SyntaxTB.last_syntax_error:
1403 # copy and clear last_syntax_error
1404 err = self.SyntaxTB.clear_err_state()
1405 if not self._should_recompile(err):
1406 return
1407 try:
1408 # may set last_syntax_error again if a SyntaxError is raised
1409 self.safe_execfile(err.filename,self.user_ns)
1410 except:
1411 self.showtraceback()
1412 else:
1413 try:
1414 f = file(err.filename)
1415 try:
1416 sys.displayhook(f.read())
1417 finally:
1418 f.close()
1419 except:
1420 self.showtraceback()
1421
1422 def showsyntaxerror(self, filename=None):
1423 """Display the syntax error that just occurred.
1424
1425 This doesn't display a stack trace because there isn't one.
1426
1427 If a filename is given, it is stuffed in the exception instead
1428 of what was there before (because Python's parser always uses
1429 "<string>" when reading from a string).
1430 """
1431 etype, value, last_traceback = sys.exc_info()
1432
1433 # See note about these variables in showtraceback() below
1434 sys.last_type = etype
1435 sys.last_value = value
1436 sys.last_traceback = last_traceback
1437
1438 if filename and etype is SyntaxError:
1439 # Work hard to stuff the correct filename in the exception
1440 try:
1441 msg, (dummy_filename, lineno, offset, line) = value
1442 except:
1443 # Not the format we expect; leave it alone
1444 pass
1445 else:
1446 # Stuff in the right filename
1447 try:
1448 # Assume SyntaxError is a class exception
1449 value = SyntaxError(msg, (filename, lineno, offset, line))
1450 except:
1451 # If that failed, assume SyntaxError is a string
1452 value = msg, (filename, lineno, offset, line)
1453 self.SyntaxTB(etype,value,[])
1454
1455 def debugger(self,force=False):
1456 """Call the pydb/pdb debugger.
1457
1458 Keywords:
1459
1460 - force(False): by default, this routine checks the instance call_pdb
1461 flag and does not actually invoke the debugger if the flag is false.
1462 The 'force' option forces the debugger to activate even if the flag
1463 is false.
1464 """
1465
1466 if not (force or self.call_pdb):
1467 return
1468
1469 if not hasattr(sys,'last_traceback'):
1470 error('No traceback has been produced, nothing to debug.')
1471 return
1472
1473 # use pydb if available
1474 if Debugger.has_pydb:
1475 from pydb import pm
1476 else:
1477 # fallback to our internal debugger
1478 pm = lambda : self.InteractiveTB.debugger(force=True)
1479 self.history_saving_wrapper(pm)()
1480
1481 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1482 """Display the exception that just occurred.
1483
1484 If nothing is known about the exception, this is the method which
1485 should be used throughout the code for presenting user tracebacks,
1486 rather than directly invoking the InteractiveTB object.
1487
1488 A specific showsyntaxerror() also exists, but this method can take
1489 care of calling it if needed, so unless you are explicitly catching a
1490 SyntaxError exception, don't try to analyze the stack manually and
1491 simply call this method."""
1492
1493
1494 # Though this won't be called by syntax errors in the input line,
1495 # there may be SyntaxError cases whith imported code.
1496
1497
1498 if exc_tuple is None:
1499 etype, value, tb = sys.exc_info()
1500 else:
1501 etype, value, tb = exc_tuple
1502
1503 if etype is SyntaxError:
1504 self.showsyntaxerror(filename)
1505 elif etype is IPython.ipapi.UsageError:
1506 print "UsageError:", value
1507 else:
1508 # WARNING: these variables are somewhat deprecated and not
1509 # necessarily safe to use in a threaded environment, but tools
1510 # like pdb depend on their existence, so let's set them. If we
1511 # find problems in the field, we'll need to revisit their use.
1512 sys.last_type = etype
1513 sys.last_value = value
1514 sys.last_traceback = tb
1515
1516 if etype in self.custom_exceptions:
1517 self.CustomTB(etype,value,tb)
1518 else:
1519 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1520 if self.InteractiveTB.call_pdb and self.has_readline:
1521 # pdb mucks up readline, fix it back
1522 self.set_completer()
1523
1524
1525 def mainloop(self,banner=None):
1526 """Creates the local namespace and starts the mainloop.
1527
1528 If an optional banner argument is given, it will override the
1529 internally created default banner."""
1530
1531 if self.rc.c: # Emulate Python's -c option
1532 self.exec_init_cmd()
1533 if banner is None:
1534 if not self.rc.banner:
1535 banner = ''
1536 # banner is string? Use it directly!
1537 elif isinstance(self.rc.banner,basestring):
1538 banner = self.rc.banner
1539 else:
1540 banner = self.BANNER+self.banner2
1541
1542 self.interact(banner)
1543
1544 def exec_init_cmd(self):
1545 """Execute a command given at the command line.
1546
1547 This emulates Python's -c option."""
1548
1549 #sys.argv = ['-c']
1550 self.push(self.prefilter(self.rc.c, False))
1551 if not self.rc.interact:
1552 self.exit_now = True
1553
1554 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1555 """Embeds IPython into a running python program.
1556
1557 Input:
1558
1559 - header: An optional header message can be specified.
1560
1561 - local_ns, global_ns: working namespaces. If given as None, the
1562 IPython-initialized one is updated with __main__.__dict__, so that
1563 program variables become visible but user-specific configuration
1564 remains possible.
1565
1566 - stack_depth: specifies how many levels in the stack to go to
1567 looking for namespaces (when local_ns and global_ns are None). This
1568 allows an intermediate caller to make sure that this function gets
1569 the namespace from the intended level in the stack. By default (0)
1570 it will get its locals and globals from the immediate caller.
1571
1572 Warning: it's possible to use this in a program which is being run by
1573 IPython itself (via %run), but some funny things will happen (a few
1574 globals get overwritten). In the future this will be cleaned up, as
1575 there is no fundamental reason why it can't work perfectly."""
1576
1577 # Get locals and globals from caller
1578 if local_ns is None or global_ns is None:
1579 call_frame = sys._getframe(stack_depth).f_back
1580
1581 if local_ns is None:
1582 local_ns = call_frame.f_locals
1583 if global_ns is None:
1584 global_ns = call_frame.f_globals
1585
1586 # Update namespaces and fire up interpreter
1587
1588 # The global one is easy, we can just throw it in
1589 self.user_global_ns = global_ns
1590
1591 # but the user/local one is tricky: ipython needs it to store internal
1592 # data, but we also need the locals. We'll copy locals in the user
1593 # one, but will track what got copied so we can delete them at exit.
1594 # This is so that a later embedded call doesn't see locals from a
1595 # previous call (which most likely existed in a separate scope).
1596 local_varnames = local_ns.keys()
1597 self.user_ns.update(local_ns)
1598
1599 # Patch for global embedding to make sure that things don't overwrite
1600 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1601 # FIXME. Test this a bit more carefully (the if.. is new)
1602 if local_ns is None and global_ns is None:
1603 self.user_global_ns.update(__main__.__dict__)
1604
1605 # make sure the tab-completer has the correct frame information, so it
1606 # actually completes using the frame's locals/globals
1607 self.set_completer_frame()
1608
1609 # before activating the interactive mode, we need to make sure that
1610 # all names in the builtin namespace needed by ipython point to
1611 # ourselves, and not to other instances.
1612 self.add_builtins()
1613
1614 self.interact(header)
1615
1616 # now, purge out the user namespace from anything we might have added
1617 # from the caller's local namespace
1618 delvar = self.user_ns.pop
1619 for var in local_varnames:
1620 delvar(var,None)
1621 # and clean builtins we may have overridden
1622 self.clean_builtins()
1623
1624 def interact(self, banner=None):
1625 """Closely emulate the interactive Python console.
1626
1627 The optional banner argument specify the banner to print
1628 before the first interaction; by default it prints a banner
1629 similar to the one printed by the real Python interpreter,
1630 followed by the current class name in parentheses (so as not
1631 to confuse this with the real interpreter -- since it's so
1632 close!).
1633
1634 """
1635
1636 if self.exit_now:
1637 # batch run -> do not interact
1638 return
1639 cprt = 'Type "copyright", "credits" or "license" for more information.'
1640 if banner is None:
1641 self.write("Python %s on %s\n%s\n(%s)\n" %
1642 (sys.version, sys.platform, cprt,
1643 self.__class__.__name__))
1644 else:
1645 self.write(banner)
1646
1647 more = 0
1648
1649 # Mark activity in the builtins
1650 __builtin__.__dict__['__IPYTHON__active'] += 1
1651
1652 if self.has_readline:
1653 self.readline_startup_hook(self.pre_readline)
1654 # exit_now is set by a call to %Exit or %Quit
1655
1656 while not self.exit_now:
1657 if more:
1658 prompt = self.hooks.generate_prompt(True)
1659 if self.autoindent:
1660 self.rl_do_indent = True
1661
1662 else:
1663 prompt = self.hooks.generate_prompt(False)
1664 try:
1665 line = self.raw_input(prompt,more)
1666 if self.exit_now:
1667 # quick exit on sys.std[in|out] close
1668 break
1669 if self.autoindent:
1670 self.rl_do_indent = False
1671
1672 except KeyboardInterrupt:
1673 self.write('\nKeyboardInterrupt\n')
1674 self.resetbuffer()
1675 # keep cache in sync with the prompt counter:
1676 self.outputcache.prompt_count -= 1
1677
1678 if self.autoindent:
1679 self.indent_current_nsp = 0
1680 more = 0
1681 except EOFError:
1682 if self.autoindent:
1683 self.rl_do_indent = False
1684 self.readline_startup_hook(None)
1685 self.write('\n')
1686 self.exit()
1687 except bdb.BdbQuit:
1688 warn('The Python debugger has exited with a BdbQuit exception.\n'
1689 'Because of how pdb handles the stack, it is impossible\n'
1690 'for IPython to properly format this particular exception.\n'
1691 'IPython will resume normal operation.')
1692 except:
1693 # exceptions here are VERY RARE, but they can be triggered
1694 # asynchronously by signal handlers, for example.
1695 self.showtraceback()
1696 else:
1697 more = self.push(line)
1698 if (self.SyntaxTB.last_syntax_error and
1699 self.rc.autoedit_syntax):
1700 self.edit_syntax_error()
1701
1702 # We are off again...
1703 __builtin__.__dict__['__IPYTHON__active'] -= 1
1704
1705 def excepthook(self, etype, value, tb):
1706 """One more defense for GUI apps that call sys.excepthook.
1707
1708 GUI frameworks like wxPython trap exceptions and call
1709 sys.excepthook themselves. I guess this is a feature that
1710 enables them to keep running after exceptions that would
1711 otherwise kill their mainloop. This is a bother for IPython
1712 which excepts to catch all of the program exceptions with a try:
1713 except: statement.
1714
1715 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1716 any app directly invokes sys.excepthook, it will look to the user like
1717 IPython crashed. In order to work around this, we can disable the
1718 CrashHandler and replace it with this excepthook instead, which prints a
1719 regular traceback using our InteractiveTB. In this fashion, apps which
1720 call sys.excepthook will generate a regular-looking exception from
1721 IPython, and the CrashHandler will only be triggered by real IPython
1722 crashes.
1723
1724 This hook should be used sparingly, only in places which are not likely
1725 to be true IPython errors.
1726 """
1727 self.showtraceback((etype,value,tb),tb_offset=0)
1728
1729 def expand_aliases(self,fn,rest):
1730 """ Expand multiple levels of aliases:
1731
1732 if:
1733
1734 alias foo bar /tmp
1735 alias baz foo
1736
1737 then:
1738
1739 baz huhhahhei -> bar /tmp huhhahhei
1740
1741 """
1742 line = fn + " " + rest
1743
1744 done = Set()
1745 while 1:
1746 pre,fn,rest = prefilter.splitUserInput(line,
1747 prefilter.shell_line_split)
1748 if fn in self.alias_table:
1749 if fn in done:
1750 warn("Cyclic alias definition, repeated '%s'" % fn)
1751 return ""
1752 done.add(fn)
1753
1754 l2 = self.transform_alias(fn,rest)
1755 # dir -> dir
1756 # print "alias",line, "->",l2 #dbg
1757 if l2 == line:
1758 break
1759 # ls -> ls -F should not recurse forever
1760 if l2.split(None,1)[0] == line.split(None,1)[0]:
1761 line = l2
1762 break
1763
1764 line=l2
1765
1766
1767 # print "al expand to",line #dbg
1768 else:
1769 break
1770
1771 return line
1772
1773 def transform_alias(self, alias,rest=''):
1774 """ Transform alias to system command string.
1775 """
1776 trg = self.alias_table[alias]
1777
1778 nargs,cmd = trg
1779 # print trg #dbg
1780 if ' ' in cmd and os.path.isfile(cmd):
1781 cmd = '"%s"' % cmd
1782
1783 # Expand the %l special to be the user's input line
1784 if cmd.find('%l') >= 0:
1785 cmd = cmd.replace('%l',rest)
1786 rest = ''
1787 if nargs==0:
1788 # Simple, argument-less aliases
1789 cmd = '%s %s' % (cmd,rest)
1790 else:
1791 # Handle aliases with positional arguments
1792 args = rest.split(None,nargs)
1793 if len(args)< nargs:
1794 error('Alias <%s> requires %s arguments, %s given.' %
1795 (alias,nargs,len(args)))
1796 return None
1797 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1798 # Now call the macro, evaluating in the user's namespace
1799 #print 'new command: <%r>' % cmd # dbg
1800 return cmd
1801
1802 def call_alias(self,alias,rest=''):
1803 """Call an alias given its name and the rest of the line.
1804
1805 This is only used to provide backwards compatibility for users of
1806 ipalias(), use of which is not recommended for anymore."""
1807
1808 # Now call the macro, evaluating in the user's namespace
1809 cmd = self.transform_alias(alias, rest)
1810 try:
1811 self.system(cmd)
1812 except:
1813 self.showtraceback()
1814
1815 def indent_current_str(self):
1816 """return the current level of indentation as a string"""
1817 return self.indent_current_nsp * ' '
1818
1819 def autoindent_update(self,line):
1820 """Keep track of the indent level."""
1821
1822 #debugx('line')
1823 #debugx('self.indent_current_nsp')
1824 if self.autoindent:
1825 if line:
1826 inisp = num_ini_spaces(line)
1827 if inisp < self.indent_current_nsp:
1828 self.indent_current_nsp = inisp
1829
1830 if line[-1] == ':':
1831 self.indent_current_nsp += 4
1832 elif dedent_re.match(line):
1833 self.indent_current_nsp -= 4
1834 else:
1835 self.indent_current_nsp = 0
1836 def runlines(self,lines):
1837 """Run a string of one or more lines of source.
1838
1839 This method is capable of running a string containing multiple source
1840 lines, as if they had been entered at the IPython prompt. Since it
1841 exposes IPython's processing machinery, the given strings can contain
1842 magic calls (%magic), special shell access (!cmd), etc."""
1843
1844 # We must start with a clean buffer, in case this is run from an
1845 # interactive IPython session (via a magic, for example).
1846 self.resetbuffer()
1847 lines = lines.split('\n')
1848 more = 0
1849
1850 for line in lines:
1851 # skip blank lines so we don't mess up the prompt counter, but do
1852 # NOT skip even a blank line if we are in a code block (more is
1853 # true)
1854
1855
1856 if line or more:
1857 # push to raw history, so hist line numbers stay in sync
1858 self.input_hist_raw.append("# " + line + "\n")
1859 more = self.push(self.prefilter(line,more))
1860 # IPython's runsource returns None if there was an error
1861 # compiling the code. This allows us to stop processing right
1862 # away, so the user gets the error message at the right place.
1863 if more is None:
1864 break
1865 else:
1866 self.input_hist_raw.append("\n")
1867 # final newline in case the input didn't have it, so that the code
1868 # actually does get executed
1869 if more:
1870 self.push('\n')
1871
1872 def runsource(self, source, filename='<input>', symbol='single'):
1873 """Compile and run some source in the interpreter.
1874
1875 Arguments are as for compile_command().
1876
1877 One several things can happen:
1878
1879 1) The input is incorrect; compile_command() raised an
1880 exception (SyntaxError or OverflowError). A syntax traceback
1881 will be printed by calling the showsyntaxerror() method.
1882
1883 2) The input is incomplete, and more input is required;
1884 compile_command() returned None. Nothing happens.
1885
1886 3) The input is complete; compile_command() returned a code
1887 object. The code is executed by calling self.runcode() (which
1888 also handles run-time exceptions, except for SystemExit).
1889
1890 The return value is:
1891
1892 - True in case 2
1893
1894 - False in the other cases, unless an exception is raised, where
1895 None is returned instead. This can be used by external callers to
1896 know whether to continue feeding input or not.
1897
1898 The return value can be used to decide whether to use sys.ps1 or
1899 sys.ps2 to prompt the next line."""
1900
1901 # if the source code has leading blanks, add 'if 1:\n' to it
1902 # this allows execution of indented pasted code. It is tempting
1903 # to add '\n' at the end of source to run commands like ' a=1'
1904 # directly, but this fails for more complicated scenarios
1905 source=source.encode(self.stdin_encoding)
1906 if source[:1] in [' ', '\t']:
1907 source = 'if 1:\n%s' % source
1908
1909 try:
1910 code = self.compile(source,filename,symbol)
1911 except (OverflowError, SyntaxError, ValueError):
1912 # Case 1
1913 self.showsyntaxerror(filename)
1914 return None
1915
1916 if code is None:
1917 # Case 2
1918 return True
1919
1920 # Case 3
1921 # We store the code object so that threaded shells and
1922 # custom exception handlers can access all this info if needed.
1923 # The source corresponding to this can be obtained from the
1924 # buffer attribute as '\n'.join(self.buffer).
1925 self.code_to_run = code
1926 # now actually execute the code object
1927 if self.runcode(code) == 0:
1928 return False
1929 else:
1930 return None
1931
1932 def runcode(self,code_obj):
1933 """Execute a code object.
1934
1935 When an exception occurs, self.showtraceback() is called to display a
1936 traceback.
1937
1938 Return value: a flag indicating whether the code to be run completed
1939 successfully:
1940
1941 - 0: successful execution.
1942 - 1: an error occurred.
1943 """
1944
1945 # Set our own excepthook in case the user code tries to call it
1946 # directly, so that the IPython crash handler doesn't get triggered
1947 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1948
1949 # we save the original sys.excepthook in the instance, in case config
1950 # code (such as magics) needs access to it.
1951 self.sys_excepthook = old_excepthook
1952 outflag = 1 # happens in more places, so it's easier as default
1953 try:
1954 try:
1955 # Embedded instances require separate global/local namespaces
1956 # so they can see both the surrounding (local) namespace and
1957 # the module-level globals when called inside another function.
1958 if self.embedded:
1959 exec code_obj in self.user_global_ns, self.user_ns
1960 # Normal (non-embedded) instances should only have a single
1961 # namespace for user code execution, otherwise functions won't
1962 # see interactive top-level globals.
1963 else:
1964 exec code_obj in self.user_ns
1965 finally:
1966 # Reset our crash handler in place
1967 sys.excepthook = old_excepthook
1968 except SystemExit:
1969 self.resetbuffer()
1970 self.showtraceback()
1971 warn("Type %exit or %quit to exit IPython "
1972 "(%Exit or %Quit do so unconditionally).",level=1)
1973 except self.custom_exceptions:
1974 etype,value,tb = sys.exc_info()
1975 self.CustomTB(etype,value,tb)
1976 except:
1977 self.showtraceback()
1978 else:
1979 outflag = 0
1980 if softspace(sys.stdout, 0):
1981 print
1982 # Flush out code object which has been run (and source)
1983 self.code_to_run = None
1984 return outflag
1985
1986 def push(self, line):
1987 """Push a line to the interpreter.
1988
1989 The line should not have a trailing newline; it may have
1990 internal newlines. The line is appended to a buffer and the
1991 interpreter's runsource() method is called with the
1992 concatenated contents of the buffer as source. If this
1993 indicates that the command was executed or invalid, the buffer
1994 is reset; otherwise, the command is incomplete, and the buffer
1995 is left as it was after the line was appended. The return
1996 value is 1 if more input is required, 0 if the line was dealt
1997 with in some way (this is the same as runsource()).
1998 """
1999
2000 # autoindent management should be done here, and not in the
2001 # interactive loop, since that one is only seen by keyboard input. We
2002 # need this done correctly even for code run via runlines (which uses
2003 # push).
2004
2005 #print 'push line: <%s>' % line # dbg
2006 for subline in line.splitlines():
2007 self.autoindent_update(subline)
2008 self.buffer.append(line)
2009 more = self.runsource('\n'.join(self.buffer), self.filename)
2010 if not more:
2011 self.resetbuffer()
2012 return more
2013
2014 def split_user_input(self, line):
2015 # This is really a hold-over to support ipapi and some extensions
2016 return prefilter.splitUserInput(line)
2017
2018 def resetbuffer(self):
2019 """Reset the input buffer."""
2020 self.buffer[:] = []
2021
2022 def raw_input(self,prompt='',continue_prompt=False):
2023 """Write a prompt and read a line.
2024
2025 The returned line does not include the trailing newline.
2026 When the user enters the EOF key sequence, EOFError is raised.
2027
2028 Optional inputs:
2029
2030 - prompt(''): a string to be printed to prompt the user.
2031
2032 - continue_prompt(False): whether this line is the first one or a
2033 continuation in a sequence of inputs.
2034 """
2035
2036 # Code run by the user may have modified the readline completer state.
2037 # We must ensure that our completer is back in place.
2038 if self.has_readline:
2039 self.set_completer()
2040
2041 try:
2042 line = raw_input_original(prompt).decode(self.stdin_encoding)
2043 except ValueError:
2044 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2045 " or sys.stdout.close()!\nExiting IPython!")
2046 self.exit_now = True
2047 return ""
2048
2049 # Try to be reasonably smart about not re-indenting pasted input more
2050 # than necessary. We do this by trimming out the auto-indent initial
2051 # spaces, if the user's actual input started itself with whitespace.
2052 #debugx('self.buffer[-1]')
2053
2054 if self.autoindent:
2055 if num_ini_spaces(line) > self.indent_current_nsp:
2056 line = line[self.indent_current_nsp:]
2057 self.indent_current_nsp = 0
2058
2059 # store the unfiltered input before the user has any chance to modify
2060 # it.
2061 if line.strip():
2062 if continue_prompt:
2063 self.input_hist_raw[-1] += '%s\n' % line
2064 if self.has_readline: # and some config option is set?
2065 try:
2066 histlen = self.readline.get_current_history_length()
2067 newhist = self.input_hist_raw[-1].rstrip()
2068 self.readline.remove_history_item(histlen-1)
2069 self.readline.replace_history_item(histlen-2,newhist)
2070 except AttributeError:
2071 pass # re{move,place}_history_item are new in 2.4.
2072 else:
2073 self.input_hist_raw.append('%s\n' % line)
2074 # only entries starting at first column go to shadow history
2075 if line.lstrip() == line:
2076 self.shadowhist.add(line.strip())
2077 elif not continue_prompt:
2078 self.input_hist_raw.append('\n')
2079 try:
2080 lineout = self.prefilter(line,continue_prompt)
2081 except:
2082 # blanket except, in case a user-defined prefilter crashes, so it
2083 # can't take all of ipython with it.
2084 self.showtraceback()
2085 return ''
2086 else:
2087 return lineout
2088
2089 def _prefilter(self, line, continue_prompt):
2090 """Calls different preprocessors, depending on the form of line."""
2091
2092 # All handlers *must* return a value, even if it's blank ('').
2093
2094 # Lines are NOT logged here. Handlers should process the line as
2095 # needed, update the cache AND log it (so that the input cache array
2096 # stays synced).
2097
2098 #.....................................................................
2099 # Code begins
2100
2101 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2102
2103 # save the line away in case we crash, so the post-mortem handler can
2104 # record it
2105 self._last_input_line = line
2106
2107 #print '***line: <%s>' % line # dbg
2108
2109 if not line:
2110 # Return immediately on purely empty lines, so that if the user
2111 # previously typed some whitespace that started a continuation
2112 # prompt, he can break out of that loop with just an empty line.
2113 # This is how the default python prompt works.
2114
2115 # Only return if the accumulated input buffer was just whitespace!
2116 if ''.join(self.buffer).isspace():
2117 self.buffer[:] = []
2118 return ''
2119
2120 line_info = prefilter.LineInfo(line, continue_prompt)
2121
2122 # the input history needs to track even empty lines
2123 stripped = line.strip()
2124
2125 if not stripped:
2126 if not continue_prompt:
2127 self.outputcache.prompt_count -= 1
2128 return self.handle_normal(line_info)
2129
2130 # print '***cont',continue_prompt # dbg
2131 # special handlers are only allowed for single line statements
2132 if continue_prompt and not self.rc.multi_line_specials:
2133 return self.handle_normal(line_info)
2134
2135
2136 # See whether any pre-existing handler can take care of it
2137 rewritten = self.hooks.input_prefilter(stripped)
2138 if rewritten != stripped: # ok, some prefilter did something
2139 rewritten = line_info.pre + rewritten # add indentation
2140 return self.handle_normal(prefilter.LineInfo(rewritten,
2141 continue_prompt))
2142
2143 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2144
2145 return prefilter.prefilter(line_info, self)
2146
2147
2148 def _prefilter_dumb(self, line, continue_prompt):
2149 """simple prefilter function, for debugging"""
2150 return self.handle_normal(line,continue_prompt)
2151
2152
2153 def multiline_prefilter(self, line, continue_prompt):
2154 """ Run _prefilter for each line of input
2155
2156 Covers cases where there are multiple lines in the user entry,
2157 which is the case when the user goes back to a multiline history
2158 entry and presses enter.
2159
2160 """
2161 out = []
2162 for l in line.rstrip('\n').split('\n'):
2163 out.append(self._prefilter(l, continue_prompt))
2164 return '\n'.join(out)
2165
2166 # Set the default prefilter() function (this can be user-overridden)
2167 prefilter = multiline_prefilter
2168
2169 def handle_normal(self,line_info):
2170 """Handle normal input lines. Use as a template for handlers."""
2171
2172 # With autoindent on, we need some way to exit the input loop, and I
2173 # don't want to force the user to have to backspace all the way to
2174 # clear the line. The rule will be in this case, that either two
2175 # lines of pure whitespace in a row, or a line of pure whitespace but
2176 # of a size different to the indent level, will exit the input loop.
2177 line = line_info.line
2178 continue_prompt = line_info.continue_prompt
2179
2180 if (continue_prompt and self.autoindent and line.isspace() and
2181 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2182 (self.buffer[-1]).isspace() )):
2183 line = ''
2184
2185 self.log(line,line,continue_prompt)
2186 return line
2187
2188 def handle_alias(self,line_info):
2189 """Handle alias input lines. """
2190 tgt = self.alias_table[line_info.iFun]
2191 # print "=>",tgt #dbg
2192 if callable(tgt):
2193 if '$' in line_info.line:
2194 call_meth = '(_ip, _ip.itpl(%s))'
2195 else:
2196 call_meth = '(_ip,%s)'
2197 line_out = ("%s_sh.%s" + call_meth) % (line_info.preWhitespace,
2198 line_info.iFun,
2199 make_quoted_expr(line_info.line))
2200 else:
2201 transformed = self.expand_aliases(line_info.iFun,line_info.theRest)
2202
2203 # pre is needed, because it carries the leading whitespace. Otherwise
2204 # aliases won't work in indented sections.
2205 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2206 make_quoted_expr( transformed ))
2207
2208 self.log(line_info.line,line_out,line_info.continue_prompt)
2209 #print 'line out:',line_out # dbg
2210 return line_out
2211
2212 def handle_shell_escape(self, line_info):
2213 """Execute the line in a shell, empty return value"""
2214 #print 'line in :', `line` # dbg
2215 line = line_info.line
2216 if line.lstrip().startswith('!!'):
2217 # rewrite LineInfo's line, iFun and theRest to properly hold the
2218 # call to %sx and the actual command to be executed, so
2219 # handle_magic can work correctly. Note that this works even if
2220 # the line is indented, so it handles multi_line_specials
2221 # properly.
2222 new_rest = line.lstrip()[2:]
2223 line_info.line = '%ssx %s' % (self.ESC_MAGIC,new_rest)
2224 line_info.iFun = 'sx'
2225 line_info.theRest = new_rest
2226 return self.handle_magic(line_info)
2227 else:
2228 cmd = line.lstrip().lstrip('!')
2229 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2230 make_quoted_expr(cmd))
2231 # update cache/log and return
2232 self.log(line,line_out,line_info.continue_prompt)
2233 return line_out
2234
2235 def handle_magic(self, line_info):
2236 """Execute magic functions."""
2237 iFun = line_info.iFun
2238 theRest = line_info.theRest
2239 cmd = '%s_ip.magic(%s)' % (line_info.preWhitespace,
2240 make_quoted_expr(iFun + " " + theRest))
2241 self.log(line_info.line,cmd,line_info.continue_prompt)
2242 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2243 return cmd
2244
2245 def handle_auto(self, line_info):
2246 """Hande lines which can be auto-executed, quoting if requested."""
2247
2248 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2249 line = line_info.line
2250 iFun = line_info.iFun
2251 theRest = line_info.theRest
2252 pre = line_info.pre
2253 continue_prompt = line_info.continue_prompt
2254 obj = line_info.ofind(self)['obj']
2255
2256 # This should only be active for single-line input!
2257 if continue_prompt:
2258 self.log(line,line,continue_prompt)
2259 return line
2260
2261 force_auto = isinstance(obj, IPython.ipapi.IPyAutocall)
2262 auto_rewrite = True
2263
2264 if pre == self.ESC_QUOTE:
2265 # Auto-quote splitting on whitespace
2266 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2267 elif pre == self.ESC_QUOTE2:
2268 # Auto-quote whole string
2269 newcmd = '%s("%s")' % (iFun,theRest)
2270 elif pre == self.ESC_PAREN:
2271 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2272 else:
2273 # Auto-paren.
2274 # We only apply it to argument-less calls if the autocall
2275 # parameter is set to 2. We only need to check that autocall is <
2276 # 2, since this function isn't called unless it's at least 1.
2277 if not theRest and (self.rc.autocall < 2) and not force_auto:
2278 newcmd = '%s %s' % (iFun,theRest)
2279 auto_rewrite = False
2280 else:
2281 if not force_auto and theRest.startswith('['):
2282 if hasattr(obj,'__getitem__'):
2283 # Don't autocall in this case: item access for an object
2284 # which is BOTH callable and implements __getitem__.
2285 newcmd = '%s %s' % (iFun,theRest)
2286 auto_rewrite = False
2287 else:
2288 # if the object doesn't support [] access, go ahead and
2289 # autocall
2290 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2291 elif theRest.endswith(';'):
2292 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2293 else:
2294 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2295
2296 if auto_rewrite:
2297 rw = self.outputcache.prompt1.auto_rewrite() + newcmd
2298
2299 try:
2300 # plain ascii works better w/ pyreadline, on some machines, so
2301 # we use it and only print uncolored rewrite if we have unicode
2302 rw = str(rw)
2303 print >>Term.cout, rw
2304 except UnicodeEncodeError:
2305 print "-------------->" + newcmd
2306
2307 # log what is now valid Python, not the actual user input (without the
2308 # final newline)
2309 self.log(line,newcmd,continue_prompt)
2310 return newcmd
2311
2312 def handle_help(self, line_info):
2313 """Try to get some help for the object.
2314
2315 obj? or ?obj -> basic information.
2316 obj?? or ??obj -> more details.
2317 """
2318
2319 line = line_info.line
2320 # We need to make sure that we don't process lines which would be
2321 # otherwise valid python, such as "x=1 # what?"
2322 try:
2323 codeop.compile_command(line)
2324 except SyntaxError:
2325 # We should only handle as help stuff which is NOT valid syntax
2326 if line[0]==self.ESC_HELP:
2327 line = line[1:]
2328 elif line[-1]==self.ESC_HELP:
2329 line = line[:-1]
2330 self.log(line,'#?'+line,line_info.continue_prompt)
2331 if line:
2332 #print 'line:<%r>' % line # dbg
2333 self.magic_pinfo(line)
2334 else:
2335 page(self.usage,screen_lines=self.rc.screen_length)
2336 return '' # Empty string is needed here!
2337 except:
2338 # Pass any other exceptions through to the normal handler
2339 return self.handle_normal(line_info)
2340 else:
2341 # If the code compiles ok, we should handle it normally
2342 return self.handle_normal(line_info)
2343
2344 def getapi(self):
2345 """ Get an IPApi object for this shell instance
2346
2347 Getting an IPApi object is always preferable to accessing the shell
2348 directly, but this holds true especially for extensions.
2349
2350 It should always be possible to implement an extension with IPApi
2351 alone. If not, contact maintainer to request an addition.
2352
2353 """
2354 return self.api
2355
2356 def handle_emacs(self, line_info):
2357 """Handle input lines marked by python-mode."""
2358
2359 # Currently, nothing is done. Later more functionality can be added
2360 # here if needed.
2361
2362 # The input cache shouldn't be updated
2363 return line_info.line
2364
2365
2366 def mktempfile(self,data=None):
2367 """Make a new tempfile and return its filename.
2368
2369 This makes a call to tempfile.mktemp, but it registers the created
2370 filename internally so ipython cleans it up at exit time.
2371
2372 Optional inputs:
2373
2374 - data(None): if data is given, it gets written out to the temp file
2375 immediately, and the file is closed again."""
2376
2377 filename = tempfile.mktemp('.py','ipython_edit_')
2378 self.tempfiles.append(filename)
2379
2380 if data:
2381 tmp_file = open(filename,'w')
2382 tmp_file.write(data)
2383 tmp_file.close()
2384 return filename
2385
2386 def write(self,data):
2387 """Write a string to the default output"""
2388 Term.cout.write(data)
2389
2390 def write_err(self,data):
2391 """Write a string to the default error output"""
2392 Term.cerr.write(data)
2393
2394 def exit(self):
2395 """Handle interactive exit.
2396
2397 This method sets the exit_now attribute."""
2398
2399 if self.rc.confirm_exit:
2400 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2401 self.exit_now = True
2402 else:
2403 self.exit_now = True
2404
2405 def safe_execfile(self,fname,*where,**kw):
2406 """A safe version of the builtin execfile().
2407
2408 This version will never throw an exception, and knows how to handle
2409 ipython logs as well.
2410
2411 :Parameters:
2412 fname : string
2413 Name of the file to be executed.
2414
2415 where : tuple
2416 One or two namespaces, passed to execfile() as (globals,locals).
2417 If only one is given, it is passed as both.
2418
2419 :Keywords:
2420 islog : boolean (False)
2421
2422 quiet : boolean (True)
2423
2424 exit_ignore : boolean (False)
2425 """
2426
2427 def syspath_cleanup():
2428 """Internal cleanup routine for sys.path."""
2429 if add_dname:
2430 try:
2431 sys.path.remove(dname)
2432 except ValueError:
2433 # For some reason the user has already removed it, ignore.
2434 pass
2435
2436 fname = os.path.expanduser(fname)
2437
2438 # Find things also in current directory. This is needed to mimic the
2439 # behavior of running a script from the system command line, where
2440 # Python inserts the script's directory into sys.path
2441 dname = os.path.dirname(os.path.abspath(fname))
2442 add_dname = False
2443 if dname not in sys.path:
2444 sys.path.insert(0,dname)
2445 add_dname = True
2446
2447 try:
2448 xfile = open(fname)
2449 except:
2450 print >> Term.cerr, \
2451 'Could not open file <%s> for safe execution.' % fname
2452 syspath_cleanup()
2453 return None
2454
2455 kw.setdefault('islog',0)
2456 kw.setdefault('quiet',1)
2457 kw.setdefault('exit_ignore',0)
2458
2459 first = xfile.readline()
2460 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2461 xfile.close()
2462 # line by line execution
2463 if first.startswith(loghead) or kw['islog']:
2464 print 'Loading log file <%s> one line at a time...' % fname
2465 if kw['quiet']:
2466 stdout_save = sys.stdout
2467 sys.stdout = StringIO.StringIO()
2468 try:
2469 globs,locs = where[0:2]
2470 except:
2471 try:
2472 globs = locs = where[0]
2473 except:
2474 globs = locs = globals()
2475 badblocks = []
2476
2477 # we also need to identify indented blocks of code when replaying
2478 # logs and put them together before passing them to an exec
2479 # statement. This takes a bit of regexp and look-ahead work in the
2480 # file. It's easiest if we swallow the whole thing in memory
2481 # first, and manually walk through the lines list moving the
2482 # counter ourselves.
2483 indent_re = re.compile('\s+\S')
2484 xfile = open(fname)
2485 filelines = xfile.readlines()
2486 xfile.close()
2487 nlines = len(filelines)
2488 lnum = 0
2489 while lnum < nlines:
2490 line = filelines[lnum]
2491 lnum += 1
2492 # don't re-insert logger status info into cache
2493 if line.startswith('#log#'):
2494 continue
2495 else:
2496 # build a block of code (maybe a single line) for execution
2497 block = line
2498 try:
2499 next = filelines[lnum] # lnum has already incremented
2500 except:
2501 next = None
2502 while next and indent_re.match(next):
2503 block += next
2504 lnum += 1
2505 try:
2506 next = filelines[lnum]
2507 except:
2508 next = None
2509 # now execute the block of one or more lines
2510 try:
2511 exec block in globs,locs
2512 except SystemExit:
2513 pass
2514 except:
2515 badblocks.append(block.rstrip())
2516 if kw['quiet']: # restore stdout
2517 sys.stdout.close()
2518 sys.stdout = stdout_save
2519 print 'Finished replaying log file <%s>' % fname
2520 if badblocks:
2521 print >> sys.stderr, ('\nThe following lines/blocks in file '
2522 '<%s> reported errors:' % fname)
2523
2524 for badline in badblocks:
2525 print >> sys.stderr, badline
2526 else: # regular file execution
2527 try:
2528 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2529 # Work around a bug in Python for Windows. The bug was
2530 # fixed in in Python 2.5 r54159 and 54158, but that's still
2531 # SVN Python as of March/07. For details, see:
2532 # http://projects.scipy.org/ipython/ipython/ticket/123
2533 try:
2534 globs,locs = where[0:2]
2535 except:
2536 try:
2537 globs = locs = where[0]
2538 except:
2539 globs = locs = globals()
2540 exec file(fname) in globs,locs
2541 else:
2542 execfile(fname,*where)
2543 except SyntaxError:
2544 self.showsyntaxerror()
2545 warn('Failure executing file: <%s>' % fname)
2546 except SystemExit,status:
2547 # Code that correctly sets the exit status flag to success (0)
2548 # shouldn't be bothered with a traceback. Note that a plain
2549 # sys.exit() does NOT set the message to 0 (it's empty) so that
2550 # will still get a traceback. Note that the structure of the
2551 # SystemExit exception changed between Python 2.4 and 2.5, so
2552 # the checks must be done in a version-dependent way.
2553 show = False
2554
2555 if sys.version_info[:2] > (2,5):
2556 if status.message!=0 and not kw['exit_ignore']:
2557 show = True
2558 else:
2559 if status.code and not kw['exit_ignore']:
2560 show = True
2561 if show:
2562 self.showtraceback()
2563 warn('Failure executing file: <%s>' % fname)
2564 except:
2565 self.showtraceback()
2566 warn('Failure executing file: <%s>' % fname)
2567
2568 syspath_cleanup()
1226 wait()
1227 os.chdir(cwd)
1228 # end user_setup()
1229
1230 def atexit_operations(self):
1231 """This will be executed at the time of exit.
1232
1233 Saving of persistent data should be performed here. """
1234
1235 #print '*** IPython exit cleanup ***' # dbg
1236 # input history
1237 self.savehist()
1238
1239 # Cleanup all tempfiles left around
1240 for tfile in self.tempfiles:
1241 try:
1242 os.unlink(tfile)
1243 except OSError:
1244 pass
1245
1246 self.hooks.shutdown_hook()
1247
1248 def savehist(self):
1249 """Save input history to a file (via readline library)."""
1250 try:
1251 self.readline.write_history_file(self.histfile)
1252 except:
1253 print 'Unable to save IPython command history to file: ' + \
1254 `self.histfile`
1255
1256 def reloadhist(self):
1257 """Reload the input history from disk file."""
1258
1259 if self.has_readline:
1260 self.readline.clear_history()
1261 self.readline.read_history_file(self.shell.histfile)
1262
1263 def history_saving_wrapper(self, func):
1264 """ Wrap func for readline history saving
1265
1266 Convert func into callable that saves & restores
1267 history around the call """
1268
1269 if not self.has_readline:
1270 return func
1271
1272 def wrapper():
1273 self.savehist()
1274 try:
1275 func()
1276 finally:
1277 readline.read_history_file(self.histfile)
1278 return wrapper
1279
1280
1281 def pre_readline(self):
1282 """readline hook to be used at the start of each line.
1283
1284 Currently it handles auto-indent only."""
1285
1286 #debugx('self.indent_current_nsp','pre_readline:')
1287
1288 if self.rl_do_indent:
1289 self.readline.insert_text(self.indent_current_str())
1290 if self.rl_next_input is not None:
1291 self.readline.insert_text(self.rl_next_input)
1292 self.rl_next_input = None
1293
1294 def init_readline(self):
1295 """Command history completion/saving/reloading."""
1296
1297
1298 import IPython.rlineimpl as readline
1299
1300 if not readline.have_readline:
1301 self.has_readline = 0
1302 self.readline = None
1303 # no point in bugging windows users with this every time:
1304 warn('Readline services not available on this platform.')
1305 else:
1306 sys.modules['readline'] = readline
1307 import atexit
1308 from IPython.completer import IPCompleter
1309 self.Completer = IPCompleter(self,
1310 self.user_ns,
1311 self.user_global_ns,
1312 self.rc.readline_omit__names,
1313 self.alias_table)
1314 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1315 self.strdispatchers['complete_command'] = sdisp
1316 self.Completer.custom_completers = sdisp
1317 # Platform-specific configuration
1318 if os.name == 'nt':
1319 self.readline_startup_hook = readline.set_pre_input_hook
1320 else:
1321 self.readline_startup_hook = readline.set_startup_hook
1322
1323 # Load user's initrc file (readline config)
1324 # Or if libedit is used, load editrc.
1325 inputrc_name = os.environ.get('INPUTRC')
1326 if inputrc_name is None:
1327 home_dir = get_home_dir()
1328 if home_dir is not None:
1329 inputrc_name = '.inputrc'
1330 if readline.uses_libedit:
1331 inputrc_name = '.editrc'
1332 inputrc_name = os.path.join(home_dir, inputrc_name)
1333 if os.path.isfile(inputrc_name):
1334 try:
1335 readline.read_init_file(inputrc_name)
1336 except:
1337 warn('Problems reading readline initialization file <%s>'
1338 % inputrc_name)
1339
1340 self.has_readline = 1
1341 self.readline = readline
1342 # save this in sys so embedded copies can restore it properly
1343 sys.ipcompleter = self.Completer.complete
1344 self.set_completer()
1345
1346 # Configure readline according to user's prefs
1347 # This is only done if GNU readline is being used. If libedit
1348 # is being used (as on Leopard) the readline config is
1349 # not run as the syntax for libedit is different.
1350 if not readline.uses_libedit:
1351 for rlcommand in self.rc.readline_parse_and_bind:
1352 readline.parse_and_bind(rlcommand)
1353
1354 # remove some chars from the delimiters list
1355 delims = readline.get_completer_delims()
1356 delims = delims.translate(string._idmap,
1357 self.rc.readline_remove_delims)
1358 readline.set_completer_delims(delims)
1359 # otherwise we end up with a monster history after a while:
1360 readline.set_history_length(1000)
1361 try:
1362 #print '*** Reading readline history' # dbg
1363 readline.read_history_file(self.histfile)
1364 except IOError:
1365 pass # It doesn't exist yet.
1366
1367 atexit.register(self.atexit_operations)
1368 del atexit
1369
1370 # Configure auto-indent for all platforms
1371 self.set_autoindent(self.rc.autoindent)
1372
1373 def ask_yes_no(self,prompt,default=True):
1374 if self.rc.quiet:
1375 return True
1376 return ask_yes_no(prompt,default)
1377
1378 def _should_recompile(self,e):
1379 """Utility routine for edit_syntax_error"""
1380
1381 if e.filename in ('<ipython console>','<input>','<string>',
1382 '<console>','<BackgroundJob compilation>',
1383 None):
1384
1385 return False
1386 try:
1387 if (self.rc.autoedit_syntax and
1388 not self.ask_yes_no('Return to editor to correct syntax error? '
1389 '[Y/n] ','y')):
1390 return False
1391 except EOFError:
1392 return False
1393
1394 def int0(x):
1395 try:
1396 return int(x)
1397 except TypeError:
1398 return 0
1399 # always pass integer line and offset values to editor hook
1400 self.hooks.fix_error_editor(e.filename,
1401 int0(e.lineno),int0(e.offset),e.msg)
1402 return True
1403
1404 def edit_syntax_error(self):
1405 """The bottom half of the syntax error handler called in the main loop.
1406
1407 Loop until syntax error is fixed or user cancels.
1408 """
1409
1410 while self.SyntaxTB.last_syntax_error:
1411 # copy and clear last_syntax_error
1412 err = self.SyntaxTB.clear_err_state()
1413 if not self._should_recompile(err):
1414 return
1415 try:
1416 # may set last_syntax_error again if a SyntaxError is raised
1417 self.safe_execfile(err.filename,self.user_ns)
1418 except:
1419 self.showtraceback()
1420 else:
1421 try:
1422 f = file(err.filename)
1423 try:
1424 sys.displayhook(f.read())
1425 finally:
1426 f.close()
1427 except:
1428 self.showtraceback()
1429
1430 def showsyntaxerror(self, filename=None):
1431 """Display the syntax error that just occurred.
1432
1433 This doesn't display a stack trace because there isn't one.
1434
1435 If a filename is given, it is stuffed in the exception instead
1436 of what was there before (because Python's parser always uses
1437 "<string>" when reading from a string).
1438 """
1439 etype, value, last_traceback = sys.exc_info()
1440
1441 # See note about these variables in showtraceback() below
1442 sys.last_type = etype
1443 sys.last_value = value
1444 sys.last_traceback = last_traceback
1445
1446 if filename and etype is SyntaxError:
1447 # Work hard to stuff the correct filename in the exception
1448 try:
1449 msg, (dummy_filename, lineno, offset, line) = value
1450 except:
1451 # Not the format we expect; leave it alone
1452 pass
1453 else:
1454 # Stuff in the right filename
1455 try:
1456 # Assume SyntaxError is a class exception
1457 value = SyntaxError(msg, (filename, lineno, offset, line))
1458 except:
1459 # If that failed, assume SyntaxError is a string
1460 value = msg, (filename, lineno, offset, line)
1461 self.SyntaxTB(etype,value,[])
1462
1463 def debugger(self,force=False):
1464 """Call the pydb/pdb debugger.
1465
1466 Keywords:
1467
1468 - force(False): by default, this routine checks the instance call_pdb
1469 flag and does not actually invoke the debugger if the flag is false.
1470 The 'force' option forces the debugger to activate even if the flag
1471 is false.
1472 """
1473
1474 if not (force or self.call_pdb):
1475 return
1476
1477 if not hasattr(sys,'last_traceback'):
1478 error('No traceback has been produced, nothing to debug.')
1479 return
1480
1481 # use pydb if available
1482 if Debugger.has_pydb:
1483 from pydb import pm
1484 else:
1485 # fallback to our internal debugger
1486 pm = lambda : self.InteractiveTB.debugger(force=True)
1487 self.history_saving_wrapper(pm)()
1488
1489 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1490 """Display the exception that just occurred.
1491
1492 If nothing is known about the exception, this is the method which
1493 should be used throughout the code for presenting user tracebacks,
1494 rather than directly invoking the InteractiveTB object.
1495
1496 A specific showsyntaxerror() also exists, but this method can take
1497 care of calling it if needed, so unless you are explicitly catching a
1498 SyntaxError exception, don't try to analyze the stack manually and
1499 simply call this method."""
1500
1501
1502 # Though this won't be called by syntax errors in the input line,
1503 # there may be SyntaxError cases whith imported code.
1504
1505
1506 if exc_tuple is None:
1507 etype, value, tb = sys.exc_info()
1508 else:
1509 etype, value, tb = exc_tuple
1510
1511 if etype is SyntaxError:
1512 self.showsyntaxerror(filename)
1513 elif etype is IPython.ipapi.UsageError:
1514 print "UsageError:", value
1515 else:
1516 # WARNING: these variables are somewhat deprecated and not
1517 # necessarily safe to use in a threaded environment, but tools
1518 # like pdb depend on their existence, so let's set them. If we
1519 # find problems in the field, we'll need to revisit their use.
1520 sys.last_type = etype
1521 sys.last_value = value
1522 sys.last_traceback = tb
1523
1524 if etype in self.custom_exceptions:
1525 self.CustomTB(etype,value,tb)
1526 else:
1527 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1528 if self.InteractiveTB.call_pdb and self.has_readline:
1529 # pdb mucks up readline, fix it back
1530 self.set_completer()
1531
1532
1533 def mainloop(self,banner=None):
1534 """Creates the local namespace and starts the mainloop.
1535
1536 If an optional banner argument is given, it will override the
1537 internally created default banner."""
1538
1539 if self.rc.c: # Emulate Python's -c option
1540 self.exec_init_cmd()
1541 if banner is None:
1542 if not self.rc.banner:
1543 banner = ''
1544 # banner is string? Use it directly!
1545 elif isinstance(self.rc.banner,basestring):
1546 banner = self.rc.banner
1547 else:
1548 banner = self.BANNER+self.banner2
1549
1550 self.interact(banner)
1551
1552 def exec_init_cmd(self):
1553 """Execute a command given at the command line.
1554
1555 This emulates Python's -c option."""
1556
1557 #sys.argv = ['-c']
1558 self.push(self.prefilter(self.rc.c, False))
1559 if not self.rc.interact:
1560 self.exit_now = True
1561
1562 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1563 """Embeds IPython into a running python program.
1564
1565 Input:
1566
1567 - header: An optional header message can be specified.
1568
1569 - local_ns, global_ns: working namespaces. If given as None, the
1570 IPython-initialized one is updated with __main__.__dict__, so that
1571 program variables become visible but user-specific configuration
1572 remains possible.
1573
1574 - stack_depth: specifies how many levels in the stack to go to
1575 looking for namespaces (when local_ns and global_ns are None). This
1576 allows an intermediate caller to make sure that this function gets
1577 the namespace from the intended level in the stack. By default (0)
1578 it will get its locals and globals from the immediate caller.
1579
1580 Warning: it's possible to use this in a program which is being run by
1581 IPython itself (via %run), but some funny things will happen (a few
1582 globals get overwritten). In the future this will be cleaned up, as
1583 there is no fundamental reason why it can't work perfectly."""
1584
1585 # Get locals and globals from caller
1586 if local_ns is None or global_ns is None:
1587 call_frame = sys._getframe(stack_depth).f_back
1588
1589 if local_ns is None:
1590 local_ns = call_frame.f_locals
1591 if global_ns is None:
1592 global_ns = call_frame.f_globals
1593
1594 # Update namespaces and fire up interpreter
1595
1596 # The global one is easy, we can just throw it in
1597 self.user_global_ns = global_ns
1598
1599 # but the user/local one is tricky: ipython needs it to store internal
1600 # data, but we also need the locals. We'll copy locals in the user
1601 # one, but will track what got copied so we can delete them at exit.
1602 # This is so that a later embedded call doesn't see locals from a
1603 # previous call (which most likely existed in a separate scope).
1604 local_varnames = local_ns.keys()
1605 self.user_ns.update(local_ns)
1606
1607 # Patch for global embedding to make sure that things don't overwrite
1608 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1609 # FIXME. Test this a bit more carefully (the if.. is new)
1610 if local_ns is None and global_ns is None:
1611 self.user_global_ns.update(__main__.__dict__)
1612
1613 # make sure the tab-completer has the correct frame information, so it
1614 # actually completes using the frame's locals/globals
1615 self.set_completer_frame()
1616
1617 # before activating the interactive mode, we need to make sure that
1618 # all names in the builtin namespace needed by ipython point to
1619 # ourselves, and not to other instances.
1620 self.add_builtins()
1621
1622 self.interact(header)
1623
1624 # now, purge out the user namespace from anything we might have added
1625 # from the caller's local namespace
1626 delvar = self.user_ns.pop
1627 for var in local_varnames:
1628 delvar(var,None)
1629 # and clean builtins we may have overridden
1630 self.clean_builtins()
1631
1632 def interact(self, banner=None):
1633 """Closely emulate the interactive Python console.
1634
1635 The optional banner argument specify the banner to print
1636 before the first interaction; by default it prints a banner
1637 similar to the one printed by the real Python interpreter,
1638 followed by the current class name in parentheses (so as not
1639 to confuse this with the real interpreter -- since it's so
1640 close!).
1641
1642 """
1643
1644 if self.exit_now:
1645 # batch run -> do not interact
1646 return
1647 cprt = 'Type "copyright", "credits" or "license" for more information.'
1648 if banner is None:
1649 self.write("Python %s on %s\n%s\n(%s)\n" %
1650 (sys.version, sys.platform, cprt,
1651 self.__class__.__name__))
1652 else:
1653 self.write(banner)
1654
1655 more = 0
1656
1657 # Mark activity in the builtins
1658 __builtin__.__dict__['__IPYTHON__active'] += 1
1659
1660 if self.has_readline:
1661 self.readline_startup_hook(self.pre_readline)
1662 # exit_now is set by a call to %Exit or %Quit
1663
1664 while not self.exit_now:
1665 if more:
1666 prompt = self.hooks.generate_prompt(True)
1667 if self.autoindent:
1668 self.rl_do_indent = True
1669
1670 else:
1671 prompt = self.hooks.generate_prompt(False)
1672 try:
1673 line = self.raw_input(prompt,more)
1674 if self.exit_now:
1675 # quick exit on sys.std[in|out] close
1676 break
1677 if self.autoindent:
1678 self.rl_do_indent = False
1679
1680 except KeyboardInterrupt:
1681 self.write('\nKeyboardInterrupt\n')
1682 self.resetbuffer()
1683 # keep cache in sync with the prompt counter:
1684 self.outputcache.prompt_count -= 1
1685
1686 if self.autoindent:
1687 self.indent_current_nsp = 0
1688 more = 0
1689 except EOFError:
1690 if self.autoindent:
1691 self.rl_do_indent = False
1692 self.readline_startup_hook(None)
1693 self.write('\n')
1694 self.exit()
1695 except bdb.BdbQuit:
1696 warn('The Python debugger has exited with a BdbQuit exception.\n'
1697 'Because of how pdb handles the stack, it is impossible\n'
1698 'for IPython to properly format this particular exception.\n'
1699 'IPython will resume normal operation.')
1700 except:
1701 # exceptions here are VERY RARE, but they can be triggered
1702 # asynchronously by signal handlers, for example.
1703 self.showtraceback()
1704 else:
1705 more = self.push(line)
1706 if (self.SyntaxTB.last_syntax_error and
1707 self.rc.autoedit_syntax):
1708 self.edit_syntax_error()
1709
1710 # We are off again...
1711 __builtin__.__dict__['__IPYTHON__active'] -= 1
1712
1713 def excepthook(self, etype, value, tb):
1714 """One more defense for GUI apps that call sys.excepthook.
1715
1716 GUI frameworks like wxPython trap exceptions and call
1717 sys.excepthook themselves. I guess this is a feature that
1718 enables them to keep running after exceptions that would
1719 otherwise kill their mainloop. This is a bother for IPython
1720 which excepts to catch all of the program exceptions with a try:
1721 except: statement.
1722
1723 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1724 any app directly invokes sys.excepthook, it will look to the user like
1725 IPython crashed. In order to work around this, we can disable the
1726 CrashHandler and replace it with this excepthook instead, which prints a
1727 regular traceback using our InteractiveTB. In this fashion, apps which
1728 call sys.excepthook will generate a regular-looking exception from
1729 IPython, and the CrashHandler will only be triggered by real IPython
1730 crashes.
1731
1732 This hook should be used sparingly, only in places which are not likely
1733 to be true IPython errors.
1734 """
1735 self.showtraceback((etype,value,tb),tb_offset=0)
1736
1737 def expand_aliases(self,fn,rest):
1738 """ Expand multiple levels of aliases:
1739
1740 if:
1741
1742 alias foo bar /tmp
1743 alias baz foo
1744
1745 then:
1746
1747 baz huhhahhei -> bar /tmp huhhahhei
1748
1749 """
1750 line = fn + " " + rest
1751
1752 done = Set()
1753 while 1:
1754 pre,fn,rest = prefilter.splitUserInput(line,
1755 prefilter.shell_line_split)
1756 if fn in self.alias_table:
1757 if fn in done:
1758 warn("Cyclic alias definition, repeated '%s'" % fn)
1759 return ""
1760 done.add(fn)
1761
1762 l2 = self.transform_alias(fn,rest)
1763 # dir -> dir
1764 # print "alias",line, "->",l2 #dbg
1765 if l2 == line:
1766 break
1767 # ls -> ls -F should not recurse forever
1768 if l2.split(None,1)[0] == line.split(None,1)[0]:
1769 line = l2
1770 break
1771
1772 line=l2
1773
1774
1775 # print "al expand to",line #dbg
1776 else:
1777 break
1778
1779 return line
1780
1781 def transform_alias(self, alias,rest=''):
1782 """ Transform alias to system command string.
1783 """
1784 trg = self.alias_table[alias]
1785
1786 nargs,cmd = trg
1787 # print trg #dbg
1788 if ' ' in cmd and os.path.isfile(cmd):
1789 cmd = '"%s"' % cmd
1790
1791 # Expand the %l special to be the user's input line
1792 if cmd.find('%l') >= 0:
1793 cmd = cmd.replace('%l',rest)
1794 rest = ''
1795 if nargs==0:
1796 # Simple, argument-less aliases
1797 cmd = '%s %s' % (cmd,rest)
1798 else:
1799 # Handle aliases with positional arguments
1800 args = rest.split(None,nargs)
1801 if len(args)< nargs:
1802 error('Alias <%s> requires %s arguments, %s given.' %
1803 (alias,nargs,len(args)))
1804 return None
1805 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1806 # Now call the macro, evaluating in the user's namespace
1807 #print 'new command: <%r>' % cmd # dbg
1808 return cmd
1809
1810 def call_alias(self,alias,rest=''):
1811 """Call an alias given its name and the rest of the line.
1812
1813 This is only used to provide backwards compatibility for users of
1814 ipalias(), use of which is not recommended for anymore."""
1815
1816 # Now call the macro, evaluating in the user's namespace
1817 cmd = self.transform_alias(alias, rest)
1818 try:
1819 self.system(cmd)
1820 except:
1821 self.showtraceback()
1822
1823 def indent_current_str(self):
1824 """return the current level of indentation as a string"""
1825 return self.indent_current_nsp * ' '
1826
1827 def autoindent_update(self,line):
1828 """Keep track of the indent level."""
1829
1830 #debugx('line')
1831 #debugx('self.indent_current_nsp')
1832 if self.autoindent:
1833 if line:
1834 inisp = num_ini_spaces(line)
1835 if inisp < self.indent_current_nsp:
1836 self.indent_current_nsp = inisp
1837
1838 if line[-1] == ':':
1839 self.indent_current_nsp += 4
1840 elif dedent_re.match(line):
1841 self.indent_current_nsp -= 4
1842 else:
1843 self.indent_current_nsp = 0
1844 def runlines(self,lines):
1845 """Run a string of one or more lines of source.
1846
1847 This method is capable of running a string containing multiple source
1848 lines, as if they had been entered at the IPython prompt. Since it
1849 exposes IPython's processing machinery, the given strings can contain
1850 magic calls (%magic), special shell access (!cmd), etc."""
1851
1852 # We must start with a clean buffer, in case this is run from an
1853 # interactive IPython session (via a magic, for example).
1854 self.resetbuffer()
1855 lines = lines.split('\n')
1856 more = 0
1857
1858 for line in lines:
1859 # skip blank lines so we don't mess up the prompt counter, but do
1860 # NOT skip even a blank line if we are in a code block (more is
1861 # true)
1862
1863
1864 if line or more:
1865 # push to raw history, so hist line numbers stay in sync
1866 self.input_hist_raw.append("# " + line + "\n")
1867 more = self.push(self.prefilter(line,more))
1868 # IPython's runsource returns None if there was an error
1869 # compiling the code. This allows us to stop processing right
1870 # away, so the user gets the error message at the right place.
1871 if more is None:
1872 break
1873 else:
1874 self.input_hist_raw.append("\n")
1875 # final newline in case the input didn't have it, so that the code
1876 # actually does get executed
1877 if more:
1878 self.push('\n')
1879
1880 def runsource(self, source, filename='<input>', symbol='single'):
1881 """Compile and run some source in the interpreter.
1882
1883 Arguments are as for compile_command().
1884
1885 One several things can happen:
1886
1887 1) The input is incorrect; compile_command() raised an
1888 exception (SyntaxError or OverflowError). A syntax traceback
1889 will be printed by calling the showsyntaxerror() method.
1890
1891 2) The input is incomplete, and more input is required;
1892 compile_command() returned None. Nothing happens.
1893
1894 3) The input is complete; compile_command() returned a code
1895 object. The code is executed by calling self.runcode() (which
1896 also handles run-time exceptions, except for SystemExit).
1897
1898 The return value is:
1899
1900 - True in case 2
1901
1902 - False in the other cases, unless an exception is raised, where
1903 None is returned instead. This can be used by external callers to
1904 know whether to continue feeding input or not.
1905
1906 The return value can be used to decide whether to use sys.ps1 or
1907 sys.ps2 to prompt the next line."""
1908
1909 # if the source code has leading blanks, add 'if 1:\n' to it
1910 # this allows execution of indented pasted code. It is tempting
1911 # to add '\n' at the end of source to run commands like ' a=1'
1912 # directly, but this fails for more complicated scenarios
1913 source=source.encode(self.stdin_encoding)
1914 if source[:1] in [' ', '\t']:
1915 source = 'if 1:\n%s' % source
1916
1917 try:
1918 code = self.compile(source,filename,symbol)
1919 except (OverflowError, SyntaxError, ValueError):
1920 # Case 1
1921 self.showsyntaxerror(filename)
1922 return None
1923
1924 if code is None:
1925 # Case 2
1926 return True
1927
1928 # Case 3
1929 # We store the code object so that threaded shells and
1930 # custom exception handlers can access all this info if needed.
1931 # The source corresponding to this can be obtained from the
1932 # buffer attribute as '\n'.join(self.buffer).
1933 self.code_to_run = code
1934 # now actually execute the code object
1935 if self.runcode(code) == 0:
1936 return False
1937 else:
1938 return None
1939
1940 def runcode(self,code_obj):
1941 """Execute a code object.
1942
1943 When an exception occurs, self.showtraceback() is called to display a
1944 traceback.
1945
1946 Return value: a flag indicating whether the code to be run completed
1947 successfully:
1948
1949 - 0: successful execution.
1950 - 1: an error occurred.
1951 """
1952
1953 # Set our own excepthook in case the user code tries to call it
1954 # directly, so that the IPython crash handler doesn't get triggered
1955 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1956
1957 # we save the original sys.excepthook in the instance, in case config
1958 # code (such as magics) needs access to it.
1959 self.sys_excepthook = old_excepthook
1960 outflag = 1 # happens in more places, so it's easier as default
1961 try:
1962 try:
1963 # Embedded instances require separate global/local namespaces
1964 # so they can see both the surrounding (local) namespace and
1965 # the module-level globals when called inside another function.
1966 if self.embedded:
1967 exec code_obj in self.user_global_ns, self.user_ns
1968 # Normal (non-embedded) instances should only have a single
1969 # namespace for user code execution, otherwise functions won't
1970 # see interactive top-level globals.
1971 else:
1972 exec code_obj in self.user_ns
1973 finally:
1974 # Reset our crash handler in place
1975 sys.excepthook = old_excepthook
1976 except SystemExit:
1977 self.resetbuffer()
1978 self.showtraceback()
1979 warn("Type %exit or %quit to exit IPython "
1980 "(%Exit or %Quit do so unconditionally).",level=1)
1981 except self.custom_exceptions:
1982 etype,value,tb = sys.exc_info()
1983 self.CustomTB(etype,value,tb)
1984 except:
1985 self.showtraceback()
1986 else:
1987 outflag = 0
1988 if softspace(sys.stdout, 0):
1989 print
1990 # Flush out code object which has been run (and source)
1991 self.code_to_run = None
1992 return outflag
1993
1994 def push(self, line):
1995 """Push a line to the interpreter.
1996
1997 The line should not have a trailing newline; it may have
1998 internal newlines. The line is appended to a buffer and the
1999 interpreter's runsource() method is called with the
2000 concatenated contents of the buffer as source. If this
2001 indicates that the command was executed or invalid, the buffer
2002 is reset; otherwise, the command is incomplete, and the buffer
2003 is left as it was after the line was appended. The return
2004 value is 1 if more input is required, 0 if the line was dealt
2005 with in some way (this is the same as runsource()).
2006 """
2007
2008 # autoindent management should be done here, and not in the
2009 # interactive loop, since that one is only seen by keyboard input. We
2010 # need this done correctly even for code run via runlines (which uses
2011 # push).
2012
2013 #print 'push line: <%s>' % line # dbg
2014 for subline in line.splitlines():
2015 self.autoindent_update(subline)
2016 self.buffer.append(line)
2017 more = self.runsource('\n'.join(self.buffer), self.filename)
2018 if not more:
2019 self.resetbuffer()
2020 return more
2021
2022 def split_user_input(self, line):
2023 # This is really a hold-over to support ipapi and some extensions
2024 return prefilter.splitUserInput(line)
2025
2026 def resetbuffer(self):
2027 """Reset the input buffer."""
2028 self.buffer[:] = []
2029
2030 def raw_input(self,prompt='',continue_prompt=False):
2031 """Write a prompt and read a line.
2032
2033 The returned line does not include the trailing newline.
2034 When the user enters the EOF key sequence, EOFError is raised.
2035
2036 Optional inputs:
2037
2038 - prompt(''): a string to be printed to prompt the user.
2039
2040 - continue_prompt(False): whether this line is the first one or a
2041 continuation in a sequence of inputs.
2042 """
2043
2044 # Code run by the user may have modified the readline completer state.
2045 # We must ensure that our completer is back in place.
2046 if self.has_readline:
2047 self.set_completer()
2048
2049 try:
2050 line = raw_input_original(prompt).decode(self.stdin_encoding)
2051 except ValueError:
2052 warn("\n********\nYou or a %run:ed script called sys.stdin.close()"
2053 " or sys.stdout.close()!\nExiting IPython!")
2054 self.exit_now = True
2055 return ""
2056
2057 # Try to be reasonably smart about not re-indenting pasted input more
2058 # than necessary. We do this by trimming out the auto-indent initial
2059 # spaces, if the user's actual input started itself with whitespace.
2060 #debugx('self.buffer[-1]')
2061
2062 if self.autoindent:
2063 if num_ini_spaces(line) > self.indent_current_nsp:
2064 line = line[self.indent_current_nsp:]
2065 self.indent_current_nsp = 0
2066
2067 # store the unfiltered input before the user has any chance to modify
2068 # it.
2069 if line.strip():
2070 if continue_prompt:
2071 self.input_hist_raw[-1] += '%s\n' % line
2072 if self.has_readline: # and some config option is set?
2073 try:
2074 histlen = self.readline.get_current_history_length()
2075 newhist = self.input_hist_raw[-1].rstrip()
2076 self.readline.remove_history_item(histlen-1)
2077 self.readline.replace_history_item(histlen-2,newhist)
2078 except AttributeError:
2079 pass # re{move,place}_history_item are new in 2.4.
2080 else:
2081 self.input_hist_raw.append('%s\n' % line)
2082 # only entries starting at first column go to shadow history
2083 if line.lstrip() == line:
2084 self.shadowhist.add(line.strip())
2085 elif not continue_prompt:
2086 self.input_hist_raw.append('\n')
2087 try:
2088 lineout = self.prefilter(line,continue_prompt)
2089 except:
2090 # blanket except, in case a user-defined prefilter crashes, so it
2091 # can't take all of ipython with it.
2092 self.showtraceback()
2093 return ''
2094 else:
2095 return lineout
2096
2097 def _prefilter(self, line, continue_prompt):
2098 """Calls different preprocessors, depending on the form of line."""
2099
2100 # All handlers *must* return a value, even if it's blank ('').
2101
2102 # Lines are NOT logged here. Handlers should process the line as
2103 # needed, update the cache AND log it (so that the input cache array
2104 # stays synced).
2105
2106 #.....................................................................
2107 # Code begins
2108
2109 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
2110
2111 # save the line away in case we crash, so the post-mortem handler can
2112 # record it
2113 self._last_input_line = line
2114
2115 #print '***line: <%s>' % line # dbg
2116
2117 if not line:
2118 # Return immediately on purely empty lines, so that if the user
2119 # previously typed some whitespace that started a continuation
2120 # prompt, he can break out of that loop with just an empty line.
2121 # This is how the default python prompt works.
2122
2123 # Only return if the accumulated input buffer was just whitespace!
2124 if ''.join(self.buffer).isspace():
2125 self.buffer[:] = []
2126 return ''
2127
2128 line_info = prefilter.LineInfo(line, continue_prompt)
2129
2130 # the input history needs to track even empty lines
2131 stripped = line.strip()
2132
2133 if not stripped:
2134 if not continue_prompt:
2135 self.outputcache.prompt_count -= 1
2136 return self.handle_normal(line_info)
2137
2138 # print '***cont',continue_prompt # dbg
2139 # special handlers are only allowed for single line statements
2140 if continue_prompt and not self.rc.multi_line_specials:
2141 return self.handle_normal(line_info)
2142
2143
2144 # See whether any pre-existing handler can take care of it
2145 rewritten = self.hooks.input_prefilter(stripped)
2146 if rewritten != stripped: # ok, some prefilter did something
2147 rewritten = line_info.pre + rewritten # add indentation
2148 return self.handle_normal(prefilter.LineInfo(rewritten,
2149 continue_prompt))
2150
2151 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2152
2153 return prefilter.prefilter(line_info, self)
2154
2155
2156 def _prefilter_dumb(self, line, continue_prompt):
2157 """simple prefilter function, for debugging"""
2158 return self.handle_normal(line,continue_prompt)
2159
2160
2161 def multiline_prefilter(self, line, continue_prompt):
2162 """ Run _prefilter for each line of input
2163
2164 Covers cases where there are multiple lines in the user entry,
2165 which is the case when the user goes back to a multiline history
2166 entry and presses enter.
2167
2168 """
2169 out = []
2170 for l in line.rstrip('\n').split('\n'):
2171 out.append(self._prefilter(l, continue_prompt))
2172 return '\n'.join(out)
2173
2174 # Set the default prefilter() function (this can be user-overridden)
2175 prefilter = multiline_prefilter
2176
2177 def handle_normal(self,line_info):
2178 """Handle normal input lines. Use as a template for handlers."""
2179
2180 # With autoindent on, we need some way to exit the input loop, and I
2181 # don't want to force the user to have to backspace all the way to
2182 # clear the line. The rule will be in this case, that either two
2183 # lines of pure whitespace in a row, or a line of pure whitespace but
2184 # of a size different to the indent level, will exit the input loop.
2185 line = line_info.line
2186 continue_prompt = line_info.continue_prompt
2187
2188 if (continue_prompt and self.autoindent and line.isspace() and
2189 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2190 (self.buffer[-1]).isspace() )):
2191 line = ''
2192
2193 self.log(line,line,continue_prompt)
2194 return line
2195
2196 def handle_alias(self,line_info):
2197 """Handle alias input lines. """
2198 tgt = self.alias_table[line_info.iFun]
2199 # print "=>",tgt #dbg
2200 if callable(tgt):
2201 if '$' in line_info.line:
2202 call_meth = '(_ip, _ip.itpl(%s))'
2203 else:
2204 call_meth = '(_ip,%s)'
2205 line_out = ("%s_sh.%s" + call_meth) % (line_info.preWhitespace,
2206 line_info.iFun,
2207 make_quoted_expr(line_info.line))
2208 else:
2209 transformed = self.expand_aliases(line_info.iFun,line_info.theRest)
2210
2211 # pre is needed, because it carries the leading whitespace. Otherwise
2212 # aliases won't work in indented sections.
2213 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2214 make_quoted_expr( transformed ))
2215
2216 self.log(line_info.line,line_out,line_info.continue_prompt)
2217 #print 'line out:',line_out # dbg
2218 return line_out
2219
2220 def handle_shell_escape(self, line_info):
2221 """Execute the line in a shell, empty return value"""
2222 #print 'line in :', `line` # dbg
2223 line = line_info.line
2224 if line.lstrip().startswith('!!'):
2225 # rewrite LineInfo's line, iFun and theRest to properly hold the
2226 # call to %sx and the actual command to be executed, so
2227 # handle_magic can work correctly. Note that this works even if
2228 # the line is indented, so it handles multi_line_specials
2229 # properly.
2230 new_rest = line.lstrip()[2:]
2231 line_info.line = '%ssx %s' % (self.ESC_MAGIC,new_rest)
2232 line_info.iFun = 'sx'
2233 line_info.theRest = new_rest
2234 return self.handle_magic(line_info)
2235 else:
2236 cmd = line.lstrip().lstrip('!')
2237 line_out = '%s_ip.system(%s)' % (line_info.preWhitespace,
2238 make_quoted_expr(cmd))
2239 # update cache/log and return
2240 self.log(line,line_out,line_info.continue_prompt)
2241 return line_out
2242
2243 def handle_magic(self, line_info):
2244 """Execute magic functions."""
2245 iFun = line_info.iFun
2246 theRest = line_info.theRest
2247 cmd = '%s_ip.magic(%s)' % (line_info.preWhitespace,
2248 make_quoted_expr(iFun + " " + theRest))
2249 self.log(line_info.line,cmd,line_info.continue_prompt)
2250 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2251 return cmd
2252
2253 def handle_auto(self, line_info):
2254 """Hande lines which can be auto-executed, quoting if requested."""
2255
2256 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2257 line = line_info.line
2258 iFun = line_info.iFun
2259 theRest = line_info.theRest
2260 pre = line_info.pre
2261 continue_prompt = line_info.continue_prompt
2262 obj = line_info.ofind(self)['obj']
2263
2264 # This should only be active for single-line input!
2265 if continue_prompt:
2266 self.log(line,line,continue_prompt)
2267 return line
2268
2269 force_auto = isinstance(obj, IPython.ipapi.IPyAutocall)
2270 auto_rewrite = True
2271
2272 if pre == self.ESC_QUOTE:
2273 # Auto-quote splitting on whitespace
2274 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2275 elif pre == self.ESC_QUOTE2:
2276 # Auto-quote whole string
2277 newcmd = '%s("%s")' % (iFun,theRest)
2278 elif pre == self.ESC_PAREN:
2279 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2280 else:
2281 # Auto-paren.
2282 # We only apply it to argument-less calls if the autocall
2283 # parameter is set to 2. We only need to check that autocall is <
2284 # 2, since this function isn't called unless it's at least 1.
2285 if not theRest and (self.rc.autocall < 2) and not force_auto:
2286 newcmd = '%s %s' % (iFun,theRest)
2287 auto_rewrite = False
2288 else:
2289 if not force_auto and theRest.startswith('['):
2290 if hasattr(obj,'__getitem__'):
2291 # Don't autocall in this case: item access for an object
2292 # which is BOTH callable and implements __getitem__.
2293 newcmd = '%s %s' % (iFun,theRest)
2294 auto_rewrite = False
2295 else:
2296 # if the object doesn't support [] access, go ahead and
2297 # autocall
2298 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2299 elif theRest.endswith(';'):
2300 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2301 else:
2302 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2303
2304 if auto_rewrite:
2305 rw = self.outputcache.prompt1.auto_rewrite() + newcmd
2306
2307 try:
2308 # plain ascii works better w/ pyreadline, on some machines, so
2309 # we use it and only print uncolored rewrite if we have unicode
2310 rw = str(rw)
2311 print >>Term.cout, rw
2312 except UnicodeEncodeError:
2313 print "-------------->" + newcmd
2314
2315 # log what is now valid Python, not the actual user input (without the
2316 # final newline)
2317 self.log(line,newcmd,continue_prompt)
2318 return newcmd
2319
2320 def handle_help(self, line_info):
2321 """Try to get some help for the object.
2322
2323 obj? or ?obj -> basic information.
2324 obj?? or ??obj -> more details.
2325 """
2326
2327 line = line_info.line
2328 # We need to make sure that we don't process lines which would be
2329 # otherwise valid python, such as "x=1 # what?"
2330 try:
2331 codeop.compile_command(line)
2332 except SyntaxError:
2333 # We should only handle as help stuff which is NOT valid syntax
2334 if line[0]==self.ESC_HELP:
2335 line = line[1:]
2336 elif line[-1]==self.ESC_HELP:
2337 line = line[:-1]
2338 self.log(line,'#?'+line,line_info.continue_prompt)
2339 if line:
2340 #print 'line:<%r>' % line # dbg
2341 self.magic_pinfo(line)
2342 else:
2343 page(self.usage,screen_lines=self.rc.screen_length)
2344 return '' # Empty string is needed here!
2345 except:
2346 # Pass any other exceptions through to the normal handler
2347 return self.handle_normal(line_info)
2348 else:
2349 # If the code compiles ok, we should handle it normally
2350 return self.handle_normal(line_info)
2351
2352 def getapi(self):
2353 """ Get an IPApi object for this shell instance
2354
2355 Getting an IPApi object is always preferable to accessing the shell
2356 directly, but this holds true especially for extensions.
2357
2358 It should always be possible to implement an extension with IPApi
2359 alone. If not, contact maintainer to request an addition.
2360
2361 """
2362 return self.api
2363
2364 def handle_emacs(self, line_info):
2365 """Handle input lines marked by python-mode."""
2366
2367 # Currently, nothing is done. Later more functionality can be added
2368 # here if needed.
2369
2370 # The input cache shouldn't be updated
2371 return line_info.line
2372
2373
2374 def mktempfile(self,data=None):
2375 """Make a new tempfile and return its filename.
2376
2377 This makes a call to tempfile.mktemp, but it registers the created
2378 filename internally so ipython cleans it up at exit time.
2379
2380 Optional inputs:
2381
2382 - data(None): if data is given, it gets written out to the temp file
2383 immediately, and the file is closed again."""
2384
2385 filename = tempfile.mktemp('.py','ipython_edit_')
2386 self.tempfiles.append(filename)
2387
2388 if data:
2389 tmp_file = open(filename,'w')
2390 tmp_file.write(data)
2391 tmp_file.close()
2392 return filename
2393
2394 def write(self,data):
2395 """Write a string to the default output"""
2396 Term.cout.write(data)
2397
2398 def write_err(self,data):
2399 """Write a string to the default error output"""
2400 Term.cerr.write(data)
2401
2402 def exit(self):
2403 """Handle interactive exit.
2404
2405 This method sets the exit_now attribute."""
2406
2407 if self.rc.confirm_exit:
2408 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2409 self.exit_now = True
2410 else:
2411 self.exit_now = True
2412
2413 def safe_execfile(self,fname,*where,**kw):
2414 """A safe version of the builtin execfile().
2415
2416 This version will never throw an exception, and knows how to handle
2417 ipython logs as well.
2418
2419 :Parameters:
2420 fname : string
2421 Name of the file to be executed.
2422
2423 where : tuple
2424 One or two namespaces, passed to execfile() as (globals,locals).
2425 If only one is given, it is passed as both.
2426
2427 :Keywords:
2428 islog : boolean (False)
2429
2430 quiet : boolean (True)
2431
2432 exit_ignore : boolean (False)
2433 """
2434
2435 def syspath_cleanup():
2436 """Internal cleanup routine for sys.path."""
2437 if add_dname:
2438 try:
2439 sys.path.remove(dname)
2440 except ValueError:
2441 # For some reason the user has already removed it, ignore.
2442 pass
2443
2444 fname = os.path.expanduser(fname)
2445
2446 # Find things also in current directory. This is needed to mimic the
2447 # behavior of running a script from the system command line, where
2448 # Python inserts the script's directory into sys.path
2449 dname = os.path.dirname(os.path.abspath(fname))
2450 add_dname = False
2451 if dname not in sys.path:
2452 sys.path.insert(0,dname)
2453 add_dname = True
2454
2455 try:
2456 xfile = open(fname)
2457 except:
2458 print >> Term.cerr, \
2459 'Could not open file <%s> for safe execution.' % fname
2460 syspath_cleanup()
2461 return None
2462
2463 kw.setdefault('islog',0)
2464 kw.setdefault('quiet',1)
2465 kw.setdefault('exit_ignore',0)
2466
2467 first = xfile.readline()
2468 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2469 xfile.close()
2470 # line by line execution
2471 if first.startswith(loghead) or kw['islog']:
2472 print 'Loading log file <%s> one line at a time...' % fname
2473 if kw['quiet']:
2474 stdout_save = sys.stdout
2475 sys.stdout = StringIO.StringIO()
2476 try:
2477 globs,locs = where[0:2]
2478 except:
2479 try:
2480 globs = locs = where[0]
2481 except:
2482 globs = locs = globals()
2483 badblocks = []
2484
2485 # we also need to identify indented blocks of code when replaying
2486 # logs and put them together before passing them to an exec
2487 # statement. This takes a bit of regexp and look-ahead work in the
2488 # file. It's easiest if we swallow the whole thing in memory
2489 # first, and manually walk through the lines list moving the
2490 # counter ourselves.
2491 indent_re = re.compile('\s+\S')
2492 xfile = open(fname)
2493 filelines = xfile.readlines()
2494 xfile.close()
2495 nlines = len(filelines)
2496 lnum = 0
2497 while lnum < nlines:
2498 line = filelines[lnum]
2499 lnum += 1
2500 # don't re-insert logger status info into cache
2501 if line.startswith('#log#'):
2502 continue
2503 else:
2504 # build a block of code (maybe a single line) for execution
2505 block = line
2506 try:
2507 next = filelines[lnum] # lnum has already incremented
2508 except:
2509 next = None
2510 while next and indent_re.match(next):
2511 block += next
2512 lnum += 1
2513 try:
2514 next = filelines[lnum]
2515 except:
2516 next = None
2517 # now execute the block of one or more lines
2518 try:
2519 exec block in globs,locs
2520 except SystemExit:
2521 pass
2522 except:
2523 badblocks.append(block.rstrip())
2524 if kw['quiet']: # restore stdout
2525 sys.stdout.close()
2526 sys.stdout = stdout_save
2527 print 'Finished replaying log file <%s>' % fname
2528 if badblocks:
2529 print >> sys.stderr, ('\nThe following lines/blocks in file '
2530 '<%s> reported errors:' % fname)
2531
2532 for badline in badblocks:
2533 print >> sys.stderr, badline
2534 else: # regular file execution
2535 try:
2536 if sys.platform == 'win32' and sys.version_info < (2,5,1):
2537 # Work around a bug in Python for Windows. The bug was
2538 # fixed in in Python 2.5 r54159 and 54158, but that's still
2539 # SVN Python as of March/07. For details, see:
2540 # http://projects.scipy.org/ipython/ipython/ticket/123
2541 try:
2542 globs,locs = where[0:2]
2543 except:
2544 try:
2545 globs = locs = where[0]
2546 except:
2547 globs = locs = globals()
2548 exec file(fname) in globs,locs
2549 else:
2550 execfile(fname,*where)
2551 except SyntaxError:
2552 self.showsyntaxerror()
2553 warn('Failure executing file: <%s>' % fname)
2554 except SystemExit,status:
2555 # Code that correctly sets the exit status flag to success (0)
2556 # shouldn't be bothered with a traceback. Note that a plain
2557 # sys.exit() does NOT set the message to 0 (it's empty) so that
2558 # will still get a traceback. Note that the structure of the
2559 # SystemExit exception changed between Python 2.4 and 2.5, so
2560 # the checks must be done in a version-dependent way.
2561 show = False
2562
2563 if sys.version_info[:2] > (2,5):
2564 if status.message!=0 and not kw['exit_ignore']:
2565 show = True
2566 else:
2567 if status.code and not kw['exit_ignore']:
2568 show = True
2569 if show:
2570 self.showtraceback()
2571 warn('Failure executing file: <%s>' % fname)
2572 except:
2573 self.showtraceback()
2574 warn('Failure executing file: <%s>' % fname)
2575
2576 syspath_cleanup()
2569 2577
2570 2578 #************************* end of file <iplib.py> *****************************
@@ -1,43 +1,56
1 1 # -*- coding: utf-8 -*-
2 2 """ Imports and provides the 'correct' version of readline for the platform.
3 3
4 4 Readline is used throughout IPython as 'import IPython.rlineimpl as readline'.
5 5
6 6 In addition to normal readline stuff, this module provides have_readline
7 7 boolean and _outputfile variable used in genutils.
8 8
9 9 $Id: Magic.py 1096 2006-01-28 20:08:02Z vivainio $"""
10 10
11 11 import sys
12 12
13 13 try:
14 14 from readline import *
15 15 import readline as _rl
16 16 have_readline = True
17 17 except ImportError:
18 18 try:
19 19 from pyreadline import *
20 20 import pyreadline as _rl
21 21 have_readline = True
22 22 except ImportError:
23 23 have_readline = False
24 24
25 25 if sys.platform == 'win32' and have_readline:
26 26 try:
27 27 _outputfile=_rl.GetOutputFile()
28 28 except AttributeError:
29 29 print "Failed GetOutputFile"
30 30 have_readline = False
31
31
32 # Test to see if libedit is being used instead of GNU readline.
33 # Thanks to Boyd Waters for this patch.
34 uses_libedit = False
35 if sys.platform == 'darwin' and have_readline:
36 import commands
37 (status, result) = commands.getstatusoutput( "otool -L %s | grep libedit" % _rl.__file__ )
38 if status == 0 and len(result) > 0:
39 # we are bound to libedit - new in Leopard
40 _rl.parse_and_bind("bind ^I rl_complete")
41 print "Leopard libedit detected."
42 uses_libedit = True
43
44
32 45 # the clear_history() function was only introduced in Python 2.4 and is
33 46 # actually optional in the readline API, so we must explicitly check for its
34 47 # existence. Some known platforms actually don't have it. This thread:
35 48 # http://mail.python.org/pipermail/python-dev/2003-August/037845.html
36 49 # has the original discussion.
37 50
38 51 if have_readline:
39 52 try:
40 53 _rl.clear_history
41 54 except AttributeError:
42 55 def clear_history(): pass
43 56 _rl.clear_history = clear_history No newline at end of file
@@ -1,7208 +1,7213
1 2007-11-01 Brian Granger <ellisonbg@gmail.com>
2
3 * iplib.py, rlineimpl.py: Applied Body Water's patches to get IPython
4 working with OS X 10.5 libedit implementation of readline.
5
1 6 2007-10-24 Ville Vainio <vivainio@gmail.com>
2 7
3 8 * iplib.py(user_setup): To route around buggy installations where
4 9 UserConfig is not available, create a minimal _ipython.
5 10
6 11 2007-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
7 12
8 13 * IPython/OInspect.py (Inspector.pinfo): fix bug that could arise
9 14 when querying objects with no __class__ attribute (such as
10 15 f2py-generated modules).
11 16
12 17 2007-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
13 18
14 19 * IPython/Magic.py (magic_time): track compilation time and report
15 20 it if longer than 0.1s (fix done to %time and %timeit). After a
16 21 SAGE bug report: http://trac.sagemath.org/sage_trac/ticket/632.
17 22
18 23 2007-09-18 Ville Vainio <vivainio@gmail.com>
19 24
20 25 * genutils.py(make_quoted_expr): Do not use Itpl, it does
21 26 not support unicode at the moment. Fixes (many) magic calls with
22 27 special characters.
23 28
24 29 2007-09-14 Fernando Perez <Fernando.Perez@colorado.edu>
25 30
26 31 * IPython/genutils.py (doctest_reload): expose the doctest
27 32 reloader to the user so that people can easily reset doctest while
28 33 using it interactively. Fixes a problem reported by Jorgen.
29 34
30 35 * IPython/iplib.py (InteractiveShell.__init__): protect the
31 36 FakeModule instances used for __main__ in %run calls from
32 37 deletion, so that user code defined in them isn't left with
33 38 dangling references due to the Python module deletion machinery.
34 39 This should fix the problems reported by Darren.
35 40
36 41 2007-09-10 Darren Dale <dd55@cornell.edu>
37 42
38 43 * Cleanup of IPShellQt and IPShellQt4
39 44
40 45 2007-09-09 Fernando Perez <Fernando.Perez@colorado.edu>
41 46
42 47 * IPython/FakeModule.py (FakeModule.__init__): further fixes for
43 48 doctest support.
44 49
45 50 * IPython/iplib.py (safe_execfile): minor docstring improvements.
46 51
47 52 2007-09-08 Ville Vainio <vivainio@gmail.com>
48 53
49 54 * Magic.py (%pushd, %popd, %dirs): Fix dir stack - push *current*
50 55 directory, not the target directory.
51 56
52 57 * ipapi.py, Magic.py, iplib.py: Add ipapi.UsageError, a lighter weight
53 58 exception that won't print the tracebacks. Switched many magics to
54 59 raise them on error situations, also GetoptError is not printed
55 60 anymore.
56 61
57 62 2007-09-07 Ville Vainio <vivainio@gmail.com>
58 63
59 64 * iplib.py: do not auto-alias "dir", it screws up other dir auto
60 65 aliases.
61 66
62 67 * genutils.py: SList.grep() implemented.
63 68
64 69 * ipy_editors.py, UserConfig/ipy_user_conf.py: Add some editors
65 70 for easy "out of the box" setup of several common editors, so that
66 71 e.g. '%edit os.path.isfile' will jump to the correct line
67 72 automatically. Contributions for command lines of your favourite
68 73 editors welcome.
69 74
70 75 2007-09-07 Fernando Perez <Fernando.Perez@colorado.edu>
71 76
72 77 * IPython/OInspect.py (Inspector.pinfo): fixed bug that was
73 78 preventing source display in certain cases. In reality I think
74 79 the problem is with Ubuntu's Python build, but this change works
75 80 around the issue in some cases (not in all, unfortunately). I'd
76 81 filed a Python bug on this with more details, but in the change of
77 82 bug trackers it seems to have been lost.
78 83
79 84 * IPython/Magic.py (magic_dhist): restore %dhist. No, cd -TAB is
80 85 not the same, it's not self-documenting, doesn't allow range
81 86 selection, and sorts alphabetically instead of numerically.
82 87 (magic_r): restore %r. No, "up + enter. One char magic" is not
83 88 the same thing, since %r takes parameters to allow fast retrieval
84 89 of old commands. I've received emails from users who use this a
85 90 LOT, so it stays.
86 91 (magic_automagic): restore %automagic. "use _ip.option.automagic"
87 92 is not a valid replacement b/c it doesn't provide an complete
88 93 explanation (which the automagic docstring does).
89 94 (magic_autocall): restore %autocall, with improved docstring.
90 95 Same argument as for others, "use _ip.options.autocall" is not a
91 96 valid replacement.
92 97 (magic_pdef): restore %pdef & friends. Used widely, mentioned in
93 98 tutorials and online docs.
94 99
95 100 2007-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
96 101
97 102 * IPython/usage.py (quick_reference): mention magics in quickref,
98 103 modified main banner to mention %quickref.
99 104
100 105 * IPython/FakeModule.py (FakeModule): fixes for doctest compatibility.
101 106
102 107 2007-09-06 Ville Vainio <vivainio@gmail.com>
103 108
104 109 * ipy_rehashdir.py, ipy_workdir.py, ipy_fsops.py, iplib.py:
105 110 Callable aliases now pass the _ip as first arg. This breaks
106 111 compatibility with earlier 0.8.2.svn series! (though they should
107 112 not have been in use yet outside these few extensions)
108 113
109 114 2007-09-05 Ville Vainio <vivainio@gmail.com>
110 115
111 116 * external/mglob.py: expand('dirname') => ['dirname'], instead
112 117 of ['dirname/foo','dirname/bar', ...].
113 118
114 119 * Extensions/ipy_fsops.py: added, has usefull shell utils for plain
115 120 win32 installations: icp, imv, imkdir, igrep, irm, collect (collect
116 121 is useful for others as well).
117 122
118 123 * iplib.py: on callable aliases (as opposed to old style aliases),
119 124 do var_expand() immediately, and use make_quoted_expr instead
120 125 of hardcoded r"""
121 126
122 127 * Extensions/ipy_profile_sh.py: Try to detect cygwin on win32,
123 128 if not available load ipy_fsops.py for cp, mv, etc. replacements
124 129
125 130 * OInspect.py, ipy_which.py: improve %which and obj? for callable
126 131 aliases
127 132
128 133 2007-09-04 Ville Vainio <vivainio@gmail.com>
129 134
130 135 * ipy_profile_zope.py: add zope profile, by Stefan Eletzhofer.
131 136 Relicensed under BSD with the authors approval.
132 137
133 138 * ipmaker.py, usage.py: Remove %magic from default banner, improve
134 139 %quickref
135 140
136 141 2007-09-03 Ville Vainio <vivainio@gmail.com>
137 142
138 143 * Magic.py: %time now passes expression through prefilter,
139 144 allowing IPython syntax.
140 145
141 146 2007-09-01 Ville Vainio <vivainio@gmail.com>
142 147
143 148 * ipmaker.py: Always show full traceback when newstyle config fails
144 149
145 150 2007-08-27 Ville Vainio <vivainio@gmail.com>
146 151
147 152 * Magic.py: fix %cd for nonexistent dir when dhist is empty, close #180
148 153
149 154 2007-08-26 Ville Vainio <vivainio@gmail.com>
150 155
151 156 * ipmaker.py: Command line args have the highest priority again
152 157
153 158 * iplib.py, ipmaker.py: -i command line argument now behaves as in
154 159 normal python, i.e. leaves the IPython session running after -c
155 160 command or running a batch file from command line.
156 161
157 162 2007-08-22 Ville Vainio <vivainio@gmail.com>
158 163
159 164 * iplib.py: no extra empty (last) line in raw hist w/ multiline
160 165 statements
161 166
162 167 * logger.py: Fix bug where blank lines in history were not
163 168 added until AFTER adding the current line; translated and raw
164 169 history should finally be in sync with prompt now.
165 170
166 171 * ipy_completers.py: quick_completer now makes it easy to create
167 172 trivial custom completers
168 173
169 174 * clearcmd.py: shadow history compression & erasing, fixed input hist
170 175 clearing.
171 176
172 177 * envpersist.py, history.py: %env (sh profile only), %hist completers
173 178
174 179 * genutils.py, Prompts.py, Magic.py: win32 - prompt (with \yDEPTH) and
175 180 term title now include the drive letter, and always use / instead of
176 181 os.sep (as per recommended approach for win32 ipython in general).
177 182
178 183 * ipykit.py, ipy_kitcfg.py: special launcher for ipykit. Allows running
179 184 plain python scripts from ipykit command line by running
180 185 "py myscript.py", even w/o installed python.
181 186
182 187 2007-08-21 Ville Vainio <vivainio@gmail.com>
183 188
184 189 * ipmaker.py: finding ipythonrc-PROF now skips ipy_profile_PROF.
185 190 (for backwards compatibility)
186 191
187 192 * history.py: switch back to %hist -t from %hist -r as default.
188 193 At least until raw history is fixed for good.
189 194
190 195 2007-08-20 Ville Vainio <vivainio@gmail.com>
191 196
192 197 * ipapi.py, iplib.py: DebugTools accessible via _ip.dbg, to catch &
193 198 locate alias redeclarations etc. Also, avoid handling
194 199 _ip.IP.alias_table directly, prefer using _ip.defalias.
195 200
196 201
197 202 2007-08-15 Ville Vainio <vivainio@gmail.com>
198 203
199 204 * prefilter.py: ! is now always served first
200 205
201 206 2007-08-15 Fernando Perez <Fernando.Perez@colorado.edu>
202 207
203 208 * IPython/iplib.py (safe_execfile): fix the SystemExit
204 209 auto-suppression code to work in Python2.4 (the internal structure
205 210 of that exception changed and I'd only tested the code with 2.5).
206 211 Bug reported by a SciPy attendee.
207 212
208 213 2007-08-13 Ville Vainio <vivainio@gmail.com>
209 214
210 215 * prefilter.py: reverted !c:/bin/foo fix, made % in
211 216 multiline specials work again
212 217
213 218 2007-08-13 Ville Vainio <vivainio@gmail.com>
214 219
215 220 * prefilter.py: Take more care to special-case !, so that
216 221 !c:/bin/foo.exe works.
217 222
218 223 * setup.py: if we are building eggs, strip all docs and
219 224 examples (it doesn't make sense to bytecompile examples,
220 225 and docs would be in an awkward place anyway).
221 226
222 227 * Ryan Krauss' patch fixes start menu shortcuts when IPython
223 228 is installed into a directory that has spaces in the name.
224 229
225 230 2007-08-13 Fernando Perez <Fernando.Perez@colorado.edu>
226 231
227 232 * IPython/Magic.py (magic_doctest_mode): fix prompt separators in
228 233 doctest profile and %doctest_mode, so they actually generate the
229 234 blank lines needed by doctest to separate individual tests.
230 235
231 236 * IPython/iplib.py (safe_execfile): modify so that running code
232 237 which calls sys.exit(0) (or equivalently, raise SystemExit(0))
233 238 doesn't get a printed traceback. Any other value in sys.exit(),
234 239 including the empty call, still generates a traceback. This
235 240 enables use of %run without having to pass '-e' for codes that
236 241 correctly set the exit status flag.
237 242
238 243 2007-08-12 Fernando Perez <Fernando.Perez@colorado.edu>
239 244
240 245 * IPython/iplib.py (InteractiveShell.post_config_initialization):
241 246 fix problems with doctests failing when run inside IPython due to
242 247 IPython's modifications of sys.displayhook.
243 248
244 249 2007-8-9 Fernando Perez <fperez@planck.colorado.edu>
245 250
246 251 * IPython/ipapi.py (to_user_ns): update to accept a dict as well as
247 252 a string with names.
248 253
249 254 2007-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
250 255
251 256 * IPython/Magic.py (magic_doctest_mode): added new %doctest_mode
252 257 magic to toggle on/off the doctest pasting support without having
253 258 to leave a session to switch to a separate profile.
254 259
255 260 2007-08-08 Fernando Perez <Fernando.Perez@colorado.edu>
256 261
257 262 * IPython/Extensions/ipy_profile_doctest.py (main): fix prompt to
258 263 introduce a blank line between inputs, to conform to doctest
259 264 requirements.
260 265
261 266 * IPython/OInspect.py (Inspector.pinfo): fix another part where
262 267 auto-generated docstrings for new-style classes were showing up.
263 268
264 269 2007-08-07 Fernando Perez <Fernando.Perez@colorado.edu>
265 270
266 271 * api_changes: Add new file to track backward-incompatible
267 272 user-visible changes.
268 273
269 274 2007-08-06 Ville Vainio <vivainio@gmail.com>
270 275
271 276 * ipmaker.py: fix bug where user_config_ns didn't exist at all
272 277 before all the config files were handled.
273 278
274 279 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu>
275 280
276 281 * IPython/irunner.py (RunnerFactory): Add new factory class for
277 282 creating reusable runners based on filenames.
278 283
279 284 * IPython/Extensions/ipy_profile_doctest.py: New profile for
280 285 doctest support. It sets prompts/exceptions as similar to
281 286 standard Python as possible, so that ipython sessions in this
282 287 profile can be easily pasted as doctests with minimal
283 288 modifications. It also enables pasting of doctests from external
284 289 sources (even if they have leading whitespace), so that you can
285 290 rerun doctests from existing sources.
286 291
287 292 * IPython/iplib.py (_prefilter): fix a buglet where after entering
288 293 some whitespace, the prompt would become a continuation prompt
289 294 with no way of exiting it other than Ctrl-C. This fix brings us
290 295 into conformity with how the default python prompt works.
291 296
292 297 * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste):
293 298 Add support for pasting not only lines that start with '>>>', but
294 299 also with ' >>>'. That is, arbitrary whitespace can now precede
295 300 the prompts. This makes the system useful for pasting doctests
296 301 from docstrings back into a normal session.
297 302
298 303 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu>
299 304
300 305 * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in
301 306 r1357, which had killed multiple invocations of an embedded
302 307 ipython (this means that example-embed has been broken for over 1
303 308 year!!!). Rather than possibly breaking the batch stuff for which
304 309 the code in iplib.py/interact was introduced, I worked around the
305 310 problem in the embedding class in Shell.py. We really need a
306 311 bloody test suite for this code, I'm sick of finding stuff that
307 312 used to work breaking left and right every time I use an old
308 313 feature I hadn't touched in a few months.
309 314 (kill_embedded): Add a new magic that only shows up in embedded
310 315 mode, to allow users to permanently deactivate an embedded instance.
311 316
312 317 2007-08-01 Ville Vainio <vivainio@gmail.com>
313 318
314 319 * iplib.py, ipy_profile_sh.py (runlines): Fix the bug where raw
315 320 history gets out of sync on runlines (e.g. when running macros).
316 321
317 322 2007-07-31 Fernando Perez <Fernando.Perez@colorado.edu>
318 323
319 324 * IPython/Magic.py (magic_colors): fix win32-related error message
320 325 that could appear under *nix when readline was missing. Patch by
321 326 Scott Jackson, closes #175.
322 327
323 328 2007-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
324 329
325 330 * IPython/Extensions/ipy_traits_completer.py: Add a new custom
326 331 completer that it traits-aware, so that traits objects don't show
327 332 all of their internal attributes all the time.
328 333
329 334 * IPython/genutils.py (dir2): moved this code from inside
330 335 completer.py to expose it publicly, so I could use it in the
331 336 wildcards bugfix.
332 337
333 338 * IPython/wildcard.py (NameSpace.__init__): fix a bug reported by
334 339 Stefan with Traits.
335 340
336 341 * IPython/completer.py (Completer.attr_matches): change internal
337 342 var name from 'object' to 'obj', since 'object' is now a builtin
338 343 and this can lead to weird bugs if reusing this code elsewhere.
339 344
340 345 2007-07-25 Fernando Perez <Fernando.Perez@colorado.edu>
341 346
342 347 * IPython/OInspect.py (Inspector.pinfo): fix small glitches in
343 348 'foo?' and update the code to prevent printing of default
344 349 docstrings that started appearing after I added support for
345 350 new-style classes. The approach I'm using isn't ideal (I just
346 351 special-case those strings) but I'm not sure how to more robustly
347 352 differentiate between truly user-written strings and Python's
348 353 automatic ones.
349 354
350 355 2007-07-09 Ville Vainio <vivainio@gmail.com>
351 356
352 357 * completer.py: Applied Matthew Neeley's patch:
353 358 Dynamic attributes from trait_names and _getAttributeNames are added
354 359 to the list of tab completions, but when this happens, the attribute
355 360 list is turned into a set, so the attributes are unordered when
356 361 printed, which makes it hard to find the right completion. This patch
357 362 turns this set back into a list and sort it.
358 363
359 364 2007-07-06 Fernando Perez <Fernando.Perez@colorado.edu>
360 365
361 366 * IPython/OInspect.py (Inspector.pinfo): Add support for new-style
362 367 classes in various inspector functions.
363 368
364 369 2007-06-28 Ville Vainio <vivainio@gmail.com>
365 370
366 371 * shadowns.py, iplib.py, ipapi.py, OInspect.py:
367 372 Implement "shadow" namespace, and callable aliases that reside there.
368 373 Use them by:
369 374
370 375 _ip.defalias('foo',myfunc) # creates _sh.foo that points to myfunc
371 376
372 377 foo hello world
373 378 (gets translated to:)
374 379 _sh.foo(r"""hello world""")
375 380
376 381 In practice, this kind of alias can take the role of a magic function
377 382
378 383 * New generic inspect_object, called on obj? and obj??
379 384
380 385 2007-06-15 Fernando Perez <Fernando.Perez@colorado.edu>
381 386
382 387 * IPython/ultraTB.py (findsource): fix a problem with
383 388 inspect.getfile that can cause crashes during traceback construction.
384 389
385 390 2007-06-14 Ville Vainio <vivainio@gmail.com>
386 391
387 392 * iplib.py (handle_auto): Try to use ascii for printing "--->"
388 393 autocall rewrite indication, becausesometimes unicode fails to print
389 394 properly (and you get ' - - - '). Use plain uncoloured ---> for
390 395 unicode.
391 396
392 397 * shadow history. Usable through "%hist -g <pat>" and "%rep 0123".
393 398
394 399 . pickleshare 'hash' commands (hget, hset, hcompress,
395 400 hdict) for efficient shadow history storage.
396 401
397 402 2007-06-13 Ville Vainio <vivainio@gmail.com>
398 403
399 404 * ipapi.py: _ip.to_user_ns(vars, interactive = True).
400 405 Added kw arg 'interactive', tell whether vars should be visible
401 406 with %whos.
402 407
403 408 2007-06-11 Ville Vainio <vivainio@gmail.com>
404 409
405 410 * pspersistence.py, Magic.py, iplib.py: directory history now saved
406 411 to db
407 412
408 413 * iplib.py: "ipython -c <cmd>" now passes the command through prefilter.
409 414 Also, it exits IPython immediately after evaluating the command (just like
410 415 std python)
411 416
412 417 2007-06-05 Walter Doerwald <walter@livinglogic.de>
413 418
414 419 * IPython/Extensions/ipipe.py: Added a new table icap, which executes a
415 420 Python string and captures the output. (Idea and original patch by
416 421 Stefan van der Walt)
417 422
418 423 2007-06-01 Fernando Perez <Fernando.Perez@colorado.edu>
419 424
420 425 * IPython/ultraTB.py (VerboseTB.text): update printing of
421 426 exception types for Python 2.5 (now all exceptions in the stdlib
422 427 are new-style classes).
423 428
424 429 2007-05-31 Walter Doerwald <walter@livinglogic.de>
425 430
426 431 * IPython/Extensions/igrid.py: Add new commands refresh and
427 432 refresh_timer (mapped to "R"/"F5" and to the menu) which restarts
428 433 the iterator once (refresh) or after every x seconds (refresh_timer).
429 434 Add a working implementation of "searchexpression", where the text
430 435 entered is not the text to search for, but an expression that must
431 436 be true. Added display of shortcuts to the menu. Added commands "pickinput"
432 437 and "pickinputattr" that put the object or attribute under the cursor
433 438 in the input line. Split the statusbar to be able to display the currently
434 439 active refresh interval. (Patch by Nik Tautenhahn)
435 440
436 441 2007-05-29 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
437 442
438 443 * fixing set_term_title to use ctypes as default
439 444
440 445 * fixing set_term_title fallback to work when curent dir
441 446 is on a windows network share
442 447
443 448 2007-05-28 Ville Vainio <vivainio@gmail.com>
444 449
445 450 * %cpaste: strip + with > from left (diffs).
446 451
447 452 * iplib.py: Fix crash when readline not installed
448 453
449 454 2007-05-26 Ville Vainio <vivainio@gmail.com>
450 455
451 456 * generics.py: intruduce easy to extend result_display generic
452 457 function (using simplegeneric.py).
453 458
454 459 * Fixed the append functionality of %set.
455 460
456 461 2007-05-25 Ville Vainio <vivainio@gmail.com>
457 462
458 463 * New magic: %rep (fetch / run old commands from history)
459 464
460 465 * New extension: mglob (%mglob magic), for powerful glob / find /filter
461 466 like functionality
462 467
463 468 % maghistory.py: %hist -g PATTERM greps the history for pattern
464 469
465 470 2007-05-24 Walter Doerwald <walter@livinglogic.de>
466 471
467 472 * IPython/Extensions/ipipe.py: Added a Table ihist that can be used to
468 473 browse the IPython input history
469 474
470 475 * IPython/Extensions/ibrowse.py: Added two command to ibrowse: pickinput
471 476 (mapped to "i") can be used to put the object under the curser in the input
472 477 line. pickinputattr (mapped to "I") does the same for the attribute under
473 478 the cursor.
474 479
475 480 2007-05-24 Ville Vainio <vivainio@gmail.com>
476 481
477 482 * Grand magic cleansing (changeset [2380]):
478 483
479 484 * Introduce ipy_legacy.py where the following magics were
480 485 moved:
481 486
482 487 pdef pdoc psource pfile rehash dhist Quit p r automagic autocall
483 488
484 489 If you need them, either use default profile or "import ipy_legacy"
485 490 in your ipy_user_conf.py
486 491
487 492 * Move sh and scipy profile to Extensions from UserConfig. this implies
488 493 you should not edit them, but you don't need to run %upgrade when
489 494 upgrading IPython anymore.
490 495
491 496 * %hist/%history now operates in "raw" mode by default. To get the old
492 497 behaviour, run '%hist -n' (native mode).
493 498
494 499 * split ipy_stock_completers.py to ipy_stock_completers.py and
495 500 ipy_app_completers.py. Stock completers (%cd, import, %run) are now
496 501 installed as default.
497 502
498 503 * sh profile now installs ipy_signals.py, for (hopefully) better ctrl+c
499 504 handling.
500 505
501 506 * iplib.py, ipapi.py: _ip.set_next_input(s) sets the next ("default")
502 507 input if readline is available.
503 508
504 509 2007-05-23 Ville Vainio <vivainio@gmail.com>
505 510
506 511 * macro.py: %store uses __getstate__ properly
507 512
508 513 * exesetup.py: added new setup script for creating
509 514 standalone IPython executables with py2exe (i.e.
510 515 no python installation required).
511 516
512 517 * Removed ipythonrc-scipy, ipy_profile_scipy.py takes
513 518 its place.
514 519
515 520 * rlineimpl.py, genutils.py (get_home_dir): py2exe support
516 521
517 522 2007-05-21 Ville Vainio <vivainio@gmail.com>
518 523
519 524 * platutil_win32.py (set_term_title): handle
520 525 failure of 'title' system call properly.
521 526
522 527 2007-05-17 Walter Doerwald <walter@livinglogic.de>
523 528
524 529 * IPython/Extensions/ipipe.py: Fix xrepr for ifiles.
525 530 (Bug detected by Paul Mueller).
526 531
527 532 2007-05-16 Ville Vainio <vivainio@gmail.com>
528 533
529 534 * ipy_profile_sci.py, ipython_win_post_install.py: Create
530 535 new "sci" profile, effectively a modern version of the old
531 536 "scipy" profile (which is now slated for deprecation).
532 537
533 538 2007-05-15 Ville Vainio <vivainio@gmail.com>
534 539
535 540 * pycolorize.py, pycolor.1: Paul Mueller's patches that
536 541 make pycolorize read input from stdin when run without arguments.
537 542
538 543 * Magic.py: do not require 'PATH' in %rehash/%rehashx. Closes #155
539 544
540 545 * ipy_rehashdir.py: rename ext_rehashdir to ipy_rehashdir, import
541 546 it in sh profile (instead of ipy_system_conf.py).
542 547
543 548 * Magic.py, ipy_rehashdir.py, ipy_profile_sh.py: System command
544 549 aliases are now lower case on windows (MyCommand.exe => mycommand).
545 550
546 551 * macro.py, ipapi.py, iplib.py, Prompts.py: Macro system rehaul.
547 552 Macros are now callable objects that inherit from ipapi.IPyAutocall,
548 553 i.e. get autocalled regardless of system autocall setting.
549 554
550 555 2007-05-10 Fernando Perez <Fernando.Perez@colorado.edu>
551 556
552 557 * IPython/rlineimpl.py: check for clear_history in readline and
553 558 make it a dummy no-op if not available. This function isn't
554 559 guaranteed to be in the API and appeared in Python 2.4, so we need
555 560 to check it ourselves. Also, clean up this file quite a bit.
556 561
557 562 * ipython.1: update man page and full manual with information
558 563 about threads (remove outdated warning). Closes #151.
559 564
560 565 2007-05-09 Fernando Perez <Fernando.Perez@colorado.edu>
561 566
562 567 * IPython/Extensions/ipy_constants.py: Add Gael's constants module
563 568 in trunk (note that this made it into the 0.8.1 release already,
564 569 but the changelogs didn't get coordinated). Many thanks to Gael
565 570 Varoquaux <gael.varoquaux-AT-normalesup.org>
566 571
567 572 2007-05-09 *** Released version 0.8.1
568 573
569 574 2007-05-10 Walter Doerwald <walter@livinglogic.de>
570 575
571 576 * IPython/Extensions/igrid.py: Incorporate html help into
572 577 the module, so we don't have to search for the file.
573 578
574 579 2007-05-02 Fernando Perez <Fernando.Perez@colorado.edu>
575 580
576 581 * test/test_irunner.py (RunnerTestCase._test_runner): Close #147.
577 582
578 583 2007-04-30 Ville Vainio <vivainio@gmail.com>
579 584
580 585 * iplib.py: (pre_config_initialization) Catch UnicodeDecodeError if the
581 586 user has illegal (non-ascii) home directory name
582 587
583 588 2007-04-27 Ville Vainio <vivainio@gmail.com>
584 589
585 590 * platutils_win32.py: implement set_term_title for windows
586 591
587 592 * Update version number
588 593
589 594 * ipy_profile_sh.py: more informative prompt (2 dir levels)
590 595
591 596 2007-04-26 Walter Doerwald <walter@livinglogic.de>
592 597
593 598 * IPython/Extensions/igrid.py: (igrid) Fix bug that surfaced
594 599 when the igrid input raised an exception. (Patch by Nik Tautenhahn,
595 600 bug discovered by Ville).
596 601
597 602 2007-04-26 Ville Vainio <vivainio@gmail.com>
598 603
599 604 * Extensions/ipy_completers.py: Olivier's module completer now
600 605 saves the list of root modules if it takes > 4 secs on the first run.
601 606
602 607 * Magic.py (%rehashx): %rehashx now clears the completer cache
603 608
604 609
605 610 2007-04-26 Fernando Perez <Fernando.Perez@colorado.edu>
606 611
607 612 * ipython.el: fix incorrect color scheme, reported by Stefan.
608 613 Closes #149.
609 614
610 615 * IPython/PyColorize.py (Parser.format2): fix state-handling
611 616 logic. I still don't like how that code handles state, but at
612 617 least now it should be correct, if inelegant. Closes #146.
613 618
614 619 2007-04-25 Ville Vainio <vivainio@gmail.com>
615 620
616 621 * Extensions/ipy_which.py: added extension for %which magic, works
617 622 a lot like unix 'which' but also finds and expands aliases, and
618 623 allows wildcards.
619 624
620 625 * ipapi.py (expand_alias): Now actually *return* the expanded alias,
621 626 as opposed to returning nothing.
622 627
623 628 * UserConfig/ipy_user_conf.py, ipy_profile_sh.py: do not import
624 629 ipy_stock_completers on default profile, do import on sh profile.
625 630
626 631 2007-04-22 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
627 632
628 633 * Fix bug in iplib.py/safe_execfile when launching ipython with a script
629 634 like ipython.py foo.py which raised a IndexError.
630 635
631 636 2007-04-21 Ville Vainio <vivainio@gmail.com>
632 637
633 638 * Extensions/ipy_extutil.py: added extension to manage other ipython
634 639 extensions. Now only supports 'ls' == list extensions.
635 640
636 641 2007-04-20 Fernando Perez <Fernando.Perez@colorado.edu>
637 642
638 643 * IPython/Debugger.py (BdbQuit_excepthook): fix small bug that
639 644 would prevent use of the exception system outside of a running
640 645 IPython instance.
641 646
642 647 2007-04-20 Ville Vainio <vivainio@gmail.com>
643 648
644 649 * Extensions/ipy_render.py: added extension for easy
645 650 interactive text template rendering (to clipboard). Uses Ka-Ping Yee's
646 651 'Iptl' template notation,
647 652
648 653 * Extensions/ipy_completers.py: introduced Olivier Lauzanne's
649 654 safer & faster 'import' completer.
650 655
651 656 * ipapi.py: Introduced new ipapi methods, _ip.defmacro(name, value)
652 657 and _ip.defalias(name, command).
653 658
654 659 * Extensions/ipy_exportdb.py: New extension for exporting all the
655 660 %store'd data in a portable format (normal ipapi calls like
656 661 defmacro() etc.)
657 662
658 663 2007-04-19 Ville Vainio <vivainio@gmail.com>
659 664
660 665 * upgrade_dir.py: skip junk files like *.pyc
661 666
662 667 * Release.py: version number to 0.8.1
663 668
664 669 2007-04-18 Ville Vainio <vivainio@gmail.com>
665 670
666 671 * iplib.py (safe_execfile): make "ipython foo.py" work with 2.5.1c1
667 672 and later on win32.
668 673
669 674 2007-04-16 Ville Vainio <vivainio@gmail.com>
670 675
671 676 * iplib.py (showtraceback): Do not crash when running w/o readline.
672 677
673 678 2007-04-12 Walter Doerwald <walter@livinglogic.de>
674 679
675 680 * IPython/Extensions/ipipe.py: (ils) Directoy listings are now
676 681 sorted (case sensitive with files and dirs mixed).
677 682
678 683 2007-04-10 Fernando Perez <Fernando.Perez@colorado.edu>
679 684
680 685 * IPython/Release.py (version): Open trunk for 0.8.1 development.
681 686
682 687 2007-04-10 *** Released version 0.8.0
683 688
684 689 2007-04-07 Fernando Perez <Fernando.Perez@colorado.edu>
685 690
686 691 * Tag 0.8.0 for release.
687 692
688 693 * IPython/iplib.py (reloadhist): add API function to cleanly
689 694 reload the readline history, which was growing inappropriately on
690 695 every %run call.
691 696
692 697 * win32_manual_post_install.py (run): apply last part of Nicolas
693 698 Pernetty's patch (I'd accidentally applied it in a different
694 699 directory and this particular file didn't get patched).
695 700
696 701 2007-04-05 Fernando Perez <Fernando.Perez@colorado.edu>
697 702
698 703 * IPython/Shell.py (MAIN_THREAD_ID): get rid of my stupid hack to
699 704 find the main thread id and use the proper API call. Thanks to
700 705 Stefan for the fix.
701 706
702 707 * test/test_prefilter.py (esc_handler_tests): udpate one of Dan's
703 708 unit tests to reflect fixed ticket #52, and add more tests sent by
704 709 him.
705 710
706 711 * IPython/iplib.py (raw_input): restore the readline completer
707 712 state on every input, in case third-party code messed it up.
708 713 (_prefilter): revert recent addition of early-escape checks which
709 714 prevent many valid alias calls from working.
710 715
711 716 * IPython/Shell.py (MTInteractiveShell.runcode): add a tracking
712 717 flag for sigint handler so we don't run a full signal() call on
713 718 each runcode access.
714 719
715 720 * IPython/Magic.py (magic_whos): small improvement to diagnostic
716 721 message.
717 722
718 723 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
719 724
720 725 * IPython/Shell.py (sigint_handler): I *THINK* I finally got
721 726 asynchronous exceptions working, i.e., Ctrl-C can actually
722 727 interrupt long-running code in the multithreaded shells.
723 728
724 729 This is using Tomer Filiba's great ctypes-based trick:
725 730 http://sebulba.wikispaces.com/recipe+thread2. I'd already tried
726 731 this in the past, but hadn't been able to make it work before. So
727 732 far it looks like it's actually running, but this needs more
728 733 testing. If it really works, I'll be *very* happy, and we'll owe
729 734 a huge thank you to Tomer. My current implementation is ugly,
730 735 hackish and uses nasty globals, but I don't want to try and clean
731 736 anything up until we know if it actually works.
732 737
733 738 NOTE: this feature needs ctypes to work. ctypes is included in
734 739 Python2.5, but 2.4 users will need to manually install it. This
735 740 feature makes multi-threaded shells so much more usable that it's
736 741 a minor price to pay (ctypes is very easy to install, already a
737 742 requirement for win32 and available in major linux distros).
738 743
739 744 2007-04-04 Ville Vainio <vivainio@gmail.com>
740 745
741 746 * Extensions/ipy_completers.py, ipy_stock_completers.py:
742 747 Moved implementations of 'bundled' completers to ipy_completers.py,
743 748 they are only enabled in ipy_stock_completers.py.
744 749
745 750 2007-04-04 Fernando Perez <Fernando.Perez@colorado.edu>
746 751
747 752 * IPython/PyColorize.py (Parser.format2): Fix identation of
748 753 colorzied output and return early if color scheme is NoColor, to
749 754 avoid unnecessary and expensive tokenization. Closes #131.
750 755
751 756 2007-04-03 Fernando Perez <Fernando.Perez@colorado.edu>
752 757
753 758 * IPython/Debugger.py: disable the use of pydb version 1.17. It
754 759 has a critical bug (a missing import that makes post-mortem not
755 760 work at all). Unfortunately as of this time, this is the version
756 761 shipped with Ubuntu Edgy, so quite a few people have this one. I
757 762 hope Edgy will update to a more recent package.
758 763
759 764 2007-04-02 Fernando Perez <Fernando.Perez@colorado.edu>
760 765
761 766 * IPython/iplib.py (_prefilter): close #52, second part of a patch
762 767 set by Stefan (only the first part had been applied before).
763 768
764 769 * IPython/Extensions/ipy_stock_completers.py (module_completer):
765 770 remove usage of the dangerous pkgutil.walk_packages(). See
766 771 details in comments left in the code.
767 772
768 773 * IPython/Magic.py (magic_whos): add support for numpy arrays
769 774 similar to what we had for Numeric.
770 775
771 776 * IPython/completer.py (IPCompleter.complete): extend the
772 777 complete() call API to support completions by other mechanisms
773 778 than readline. Closes #109.
774 779
775 780 * IPython/iplib.py (safe_execfile): add a safeguard under Win32 to
776 781 protect against a bug in Python's execfile(). Closes #123.
777 782
778 783 2007-04-01 Fernando Perez <Fernando.Perez@colorado.edu>
779 784
780 785 * IPython/iplib.py (split_user_input): ensure that when splitting
781 786 user input, the part that can be treated as a python name is pure
782 787 ascii (Python identifiers MUST be pure ascii). Part of the
783 788 ongoing Unicode support work.
784 789
785 790 * IPython/Prompts.py (prompt_specials_color): Add \N for the
786 791 actual prompt number, without any coloring. This allows users to
787 792 produce numbered prompts with their own colors. Added after a
788 793 report/request by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
789 794
790 795 2007-03-31 Walter Doerwald <walter@livinglogic.de>
791 796
792 797 * IPython/Extensions/igrid.py: Map the return key
793 798 to enter() and shift-return to enterattr().
794 799
795 800 2007-03-30 Fernando Perez <Fernando.Perez@colorado.edu>
796 801
797 802 * IPython/Magic.py (magic_psearch): add unicode support by
798 803 encoding to ascii the input, since this routine also only deals
799 804 with valid Python names. Fixes a bug reported by Stefan.
800 805
801 806 2007-03-29 Fernando Perez <Fernando.Perez@colorado.edu>
802 807
803 808 * IPython/Magic.py (_inspect): convert unicode input into ascii
804 809 before trying to evaluate it as a Python identifier. This fixes a
805 810 problem that the new unicode support had introduced when analyzing
806 811 long definition lines for functions.
807 812
808 813 2007-03-24 Walter Doerwald <walter@livinglogic.de>
809 814
810 815 * IPython/Extensions/igrid.py: Fix picking. Using
811 816 igrid with wxPython 2.6 and -wthread should work now.
812 817 igrid.display() simply tries to create a frame without
813 818 an application. Only if this fails an application is created.
814 819
815 820 2007-03-23 Walter Doerwald <walter@livinglogic.de>
816 821
817 822 * IPython/Extensions/path.py: Updated to version 2.2.
818 823
819 824 2007-03-23 Ville Vainio <vivainio@gmail.com>
820 825
821 826 * iplib.py: recursive alias expansion now works better, so that
822 827 cases like 'top' -> 'd:/cygwin/top' -> 'ls :/cygwin/top'
823 828 doesn't trip up the process, if 'd' has been aliased to 'ls'.
824 829
825 830 * Extensions/ipy_gnuglobal.py added, provides %global magic
826 831 for users of http://www.gnu.org/software/global
827 832
828 833 * iplib.py: '!command /?' now doesn't invoke IPython's help system.
829 834 Closes #52. Patch by Stefan van der Walt.
830 835
831 836 2007-03-23 Fernando Perez <Fernando.Perez@colorado.edu>
832 837
833 838 * IPython/FakeModule.py (FakeModule.__init__): Small fix to
834 839 respect the __file__ attribute when using %run. Thanks to a bug
835 840 report by Sebastian Rooks <sebastian.rooks-AT-free.fr>.
836 841
837 842 2007-03-22 Fernando Perez <Fernando.Perez@colorado.edu>
838 843
839 844 * IPython/iplib.py (raw_input): Fix mishandling of unicode at
840 845 input. Patch sent by Stefan.
841 846
842 847 2007-03-20 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
843 848 * IPython/Extensions/ipy_stock_completer.py
844 849 shlex_split, fix bug in shlex_split. len function
845 850 call was missing an if statement. Caused shlex_split to
846 851 sometimes return "" as last element.
847 852
848 853 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
849 854
850 855 * IPython/completer.py
851 856 (IPCompleter.file_matches.single_dir_expand): fix a problem
852 857 reported by Stefan, where directories containign a single subdir
853 858 would be completed too early.
854 859
855 860 * IPython/Shell.py (_load_pylab): Make the execution of 'from
856 861 pylab import *' when -pylab is given be optional. A new flag,
857 862 pylab_import_all controls this behavior, the default is True for
858 863 backwards compatibility.
859 864
860 865 * IPython/ultraTB.py (_formatTracebackLines): Added (slightly
861 866 modified) R. Bernstein's patch for fully syntax highlighted
862 867 tracebacks. The functionality is also available under ultraTB for
863 868 non-ipython users (someone using ultraTB but outside an ipython
864 869 session). They can select the color scheme by setting the
865 870 module-level global DEFAULT_SCHEME. The highlight functionality
866 871 also works when debugging.
867 872
868 873 * IPython/genutils.py (IOStream.close): small patch by
869 874 R. Bernstein for improved pydb support.
870 875
871 876 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
872 877 DaveS <davls@telus.net> to improve support of debugging under
873 878 NTEmacs, including improved pydb behavior.
874 879
875 880 * IPython/Magic.py (magic_prun): Fix saving of profile info for
876 881 Python 2.5, where the stats object API changed a little. Thanks
877 882 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
878 883
879 884 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
880 885 Pernetty's patch to improve support for (X)Emacs under Win32.
881 886
882 887 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
883 888
884 889 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
885 890 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
886 891 a report by Nik Tautenhahn.
887 892
888 893 2007-03-16 Walter Doerwald <walter@livinglogic.de>
889 894
890 895 * setup.py: Add the igrid help files to the list of data files
891 896 to be installed alongside igrid.
892 897 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
893 898 Show the input object of the igrid browser as the window tile.
894 899 Show the object the cursor is on in the statusbar.
895 900
896 901 2007-03-15 Ville Vainio <vivainio@gmail.com>
897 902
898 903 * Extensions/ipy_stock_completers.py: Fixed exception
899 904 on mismatching quotes in %run completer. Patch by
900 905 Jorgen Stenarson. Closes #127.
901 906
902 907 2007-03-14 Ville Vainio <vivainio@gmail.com>
903 908
904 909 * Extensions/ext_rehashdir.py: Do not do auto_alias
905 910 in %rehashdir, it clobbers %store'd aliases.
906 911
907 912 * UserConfig/ipy_profile_sh.py: envpersist.py extension
908 913 (beefed up %env) imported for sh profile.
909 914
910 915 2007-03-10 Walter Doerwald <walter@livinglogic.de>
911 916
912 917 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
913 918 as the default browser.
914 919 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
915 920 As igrid displays all attributes it ever encounters, fetch() (which has
916 921 been renamed to _fetch()) doesn't have to recalculate the display attributes
917 922 every time a new item is fetched. This should speed up scrolling.
918 923
919 924 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
920 925
921 926 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
922 927 Schmolck's recently reported tab-completion bug (my previous one
923 928 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
924 929
925 930 2007-03-09 Walter Doerwald <walter@livinglogic.de>
926 931
927 932 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
928 933 Close help window if exiting igrid.
929 934
930 935 2007-03-02 Jorgen Stenarson <jorgen.stenarson@bostream.nu>
931 936
932 937 * IPython/Extensions/ipy_defaults.py: Check if readline is available
933 938 before calling functions from readline.
934 939
935 940 2007-03-02 Walter Doerwald <walter@livinglogic.de>
936 941
937 942 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
938 943 igrid is a wxPython-based display object for ipipe. If your system has
939 944 wx installed igrid will be the default display. Without wx ipipe falls
940 945 back to ibrowse (which needs curses). If no curses is installed ipipe
941 946 falls back to idump.
942 947
943 948 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
944 949
945 950 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
946 951 my changes from yesterday, they introduced bugs. Will reactivate
947 952 once I get a correct solution, which will be much easier thanks to
948 953 Dan Milstein's new prefilter test suite.
949 954
950 955 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
951 956
952 957 * IPython/iplib.py (split_user_input): fix input splitting so we
953 958 don't attempt attribute accesses on things that can't possibly be
954 959 valid Python attributes. After a bug report by Alex Schmolck.
955 960 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
956 961 %magic with explicit % prefix.
957 962
958 963 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
959 964
960 965 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
961 966 avoid a DeprecationWarning from GTK.
962 967
963 968 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
964 969
965 970 * IPython/genutils.py (clock): I modified clock() to return total
966 971 time, user+system. This is a more commonly needed metric. I also
967 972 introduced the new clocku/clocks to get only user/system time if
968 973 one wants those instead.
969 974
970 975 ***WARNING: API CHANGE*** clock() used to return only user time,
971 976 so if you want exactly the same results as before, use clocku
972 977 instead.
973 978
974 979 2007-02-22 Ville Vainio <vivainio@gmail.com>
975 980
976 981 * IPython/Extensions/ipy_p4.py: Extension for improved
977 982 p4 (perforce version control system) experience.
978 983 Adds %p4 magic with p4 command completion and
979 984 automatic -G argument (marshall output as python dict)
980 985
981 986 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
982 987
983 988 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
984 989 stop marks.
985 990 (ClearingMixin): a simple mixin to easily make a Demo class clear
986 991 the screen in between blocks and have empty marquees. The
987 992 ClearDemo and ClearIPDemo classes that use it are included.
988 993
989 994 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
990 995
991 996 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
992 997 protect against exceptions at Python shutdown time. Patch
993 998 sumbmitted to upstream.
994 999
995 1000 2007-02-14 Walter Doerwald <walter@livinglogic.de>
996 1001
997 1002 * IPython/Extensions/ibrowse.py: If entering the first object level
998 1003 (i.e. the object for which the browser has been started) fails,
999 1004 now the error is raised directly (aborting the browser) instead of
1000 1005 running into an empty levels list later.
1001 1006
1002 1007 2007-02-03 Walter Doerwald <walter@livinglogic.de>
1003 1008
1004 1009 * IPython/Extensions/ipipe.py: Add an xrepr implementation
1005 1010 for the noitem object.
1006 1011
1007 1012 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
1008 1013
1009 1014 * IPython/completer.py (Completer.attr_matches): Fix small
1010 1015 tab-completion bug with Enthought Traits objects with units.
1011 1016 Thanks to a bug report by Tom Denniston
1012 1017 <tom.denniston-AT-alum.dartmouth.org>.
1013 1018
1014 1019 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
1015 1020
1016 1021 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
1017 1022 bug where only .ipy or .py would be completed. Once the first
1018 1023 argument to %run has been given, all completions are valid because
1019 1024 they are the arguments to the script, which may well be non-python
1020 1025 filenames.
1021 1026
1022 1027 * IPython/irunner.py (InteractiveRunner.run_source): major updates
1023 1028 to irunner to allow it to correctly support real doctesting of
1024 1029 out-of-process ipython code.
1025 1030
1026 1031 * IPython/Magic.py (magic_cd): Make the setting of the terminal
1027 1032 title an option (-noterm_title) because it completely breaks
1028 1033 doctesting.
1029 1034
1030 1035 * IPython/demo.py: fix IPythonDemo class that was not actually working.
1031 1036
1032 1037 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
1033 1038
1034 1039 * IPython/irunner.py (main): fix small bug where extensions were
1035 1040 not being correctly recognized.
1036 1041
1037 1042 2007-01-23 Walter Doerwald <walter@livinglogic.de>
1038 1043
1039 1044 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
1040 1045 a string containing a single line yields the string itself as the
1041 1046 only item.
1042 1047
1043 1048 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
1044 1049 object if it's the same as the one on the last level (This avoids
1045 1050 infinite recursion for one line strings).
1046 1051
1047 1052 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1048 1053
1049 1054 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
1050 1055 all output streams before printing tracebacks. This ensures that
1051 1056 user output doesn't end up interleaved with traceback output.
1052 1057
1053 1058 2007-01-10 Ville Vainio <vivainio@gmail.com>
1054 1059
1055 1060 * Extensions/envpersist.py: Turbocharged %env that remembers
1056 1061 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
1057 1062 "%env VISUAL=jed".
1058 1063
1059 1064 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
1060 1065
1061 1066 * IPython/iplib.py (showtraceback): ensure that we correctly call
1062 1067 custom handlers in all cases (some with pdb were slipping through,
1063 1068 but I'm not exactly sure why).
1064 1069
1065 1070 * IPython/Debugger.py (Tracer.__init__): added new class to
1066 1071 support set_trace-like usage of IPython's enhanced debugger.
1067 1072
1068 1073 2006-12-24 Ville Vainio <vivainio@gmail.com>
1069 1074
1070 1075 * ipmaker.py: more informative message when ipy_user_conf
1071 1076 import fails (suggest running %upgrade).
1072 1077
1073 1078 * tools/run_ipy_in_profiler.py: Utility to see where
1074 1079 the time during IPython startup is spent.
1075 1080
1076 1081 2006-12-20 Ville Vainio <vivainio@gmail.com>
1077 1082
1078 1083 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
1079 1084
1080 1085 * ipapi.py: Add new ipapi method, expand_alias.
1081 1086
1082 1087 * Release.py: Bump up version to 0.7.4.svn
1083 1088
1084 1089 2006-12-17 Ville Vainio <vivainio@gmail.com>
1085 1090
1086 1091 * Extensions/jobctrl.py: Fixed &cmd arg arg...
1087 1092 to work properly on posix too
1088 1093
1089 1094 * Release.py: Update revnum (version is still just 0.7.3).
1090 1095
1091 1096 2006-12-15 Ville Vainio <vivainio@gmail.com>
1092 1097
1093 1098 * scripts/ipython_win_post_install: create ipython.py in
1094 1099 prefix + "/scripts".
1095 1100
1096 1101 * Release.py: Update version to 0.7.3.
1097 1102
1098 1103 2006-12-14 Ville Vainio <vivainio@gmail.com>
1099 1104
1100 1105 * scripts/ipython_win_post_install: Overwrite old shortcuts
1101 1106 if they already exist
1102 1107
1103 1108 * Release.py: release 0.7.3rc2
1104 1109
1105 1110 2006-12-13 Ville Vainio <vivainio@gmail.com>
1106 1111
1107 1112 * Branch and update Release.py for 0.7.3rc1
1108 1113
1109 1114 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
1110 1115
1111 1116 * IPython/Shell.py (IPShellWX): update for current WX naming
1112 1117 conventions, to avoid a deprecation warning with current WX
1113 1118 versions. Thanks to a report by Danny Shevitz.
1114 1119
1115 1120 2006-12-12 Ville Vainio <vivainio@gmail.com>
1116 1121
1117 1122 * ipmaker.py: apply david cournapeau's patch to make
1118 1123 import_some work properly even when ipythonrc does
1119 1124 import_some on empty list (it was an old bug!).
1120 1125
1121 1126 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
1122 1127 Add deprecation note to ipythonrc and a url to wiki
1123 1128 in ipy_user_conf.py
1124 1129
1125 1130
1126 1131 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
1127 1132 as if it was typed on IPython command prompt, i.e.
1128 1133 as IPython script.
1129 1134
1130 1135 * example-magic.py, magic_grepl.py: remove outdated examples
1131 1136
1132 1137 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
1133 1138
1134 1139 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
1135 1140 is called before any exception has occurred.
1136 1141
1137 1142 2006-12-08 Ville Vainio <vivainio@gmail.com>
1138 1143
1139 1144 * Extensions/ipy_stock_completers.py: fix cd completer
1140 1145 to translate /'s to \'s again.
1141 1146
1142 1147 * completer.py: prevent traceback on file completions w/
1143 1148 backslash.
1144 1149
1145 1150 * Release.py: Update release number to 0.7.3b3 for release
1146 1151
1147 1152 2006-12-07 Ville Vainio <vivainio@gmail.com>
1148 1153
1149 1154 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
1150 1155 while executing external code. Provides more shell-like behaviour
1151 1156 and overall better response to ctrl + C / ctrl + break.
1152 1157
1153 1158 * tools/make_tarball.py: new script to create tarball straight from svn
1154 1159 (setup.py sdist doesn't work on win32).
1155 1160
1156 1161 * Extensions/ipy_stock_completers.py: fix cd completer to give up
1157 1162 on dirnames with spaces and use the default completer instead.
1158 1163
1159 1164 * Revision.py: Change version to 0.7.3b2 for release.
1160 1165
1161 1166 2006-12-05 Ville Vainio <vivainio@gmail.com>
1162 1167
1163 1168 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
1164 1169 pydb patch 4 (rm debug printing, py 2.5 checking)
1165 1170
1166 1171 2006-11-30 Walter Doerwald <walter@livinglogic.de>
1167 1172 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
1168 1173 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
1169 1174 "refreshfind" (mapped to "R") does the same but tries to go back to the same
1170 1175 object the cursor was on before the refresh. The command "markrange" is
1171 1176 mapped to "%" now.
1172 1177 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
1173 1178
1174 1179 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
1175 1180
1176 1181 * IPython/Magic.py (magic_debug): new %debug magic to activate the
1177 1182 interactive debugger on the last traceback, without having to call
1178 1183 %pdb and rerun your code. Made minor changes in various modules,
1179 1184 should automatically recognize pydb if available.
1180 1185
1181 1186 2006-11-28 Ville Vainio <vivainio@gmail.com>
1182 1187
1183 1188 * completer.py: If the text start with !, show file completions
1184 1189 properly. This helps when trying to complete command name
1185 1190 for shell escapes.
1186 1191
1187 1192 2006-11-27 Ville Vainio <vivainio@gmail.com>
1188 1193
1189 1194 * ipy_stock_completers.py: bzr completer submitted by Stefan van
1190 1195 der Walt. Clean up svn and hg completers by using a common
1191 1196 vcs_completer.
1192 1197
1193 1198 2006-11-26 Ville Vainio <vivainio@gmail.com>
1194 1199
1195 1200 * Remove ipconfig and %config; you should use _ip.options structure
1196 1201 directly instead!
1197 1202
1198 1203 * genutils.py: add wrap_deprecated function for deprecating callables
1199 1204
1200 1205 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
1201 1206 _ip.system instead. ipalias is redundant.
1202 1207
1203 1208 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
1204 1209 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
1205 1210 explicit.
1206 1211
1207 1212 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
1208 1213 completer. Try it by entering 'hg ' and pressing tab.
1209 1214
1210 1215 * macro.py: Give Macro a useful __repr__ method
1211 1216
1212 1217 * Magic.py: %whos abbreviates the typename of Macro for brevity.
1213 1218
1214 1219 2006-11-24 Walter Doerwald <walter@livinglogic.de>
1215 1220 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
1216 1221 we don't get a duplicate ipipe module, where registration of the xrepr
1217 1222 implementation for Text is useless.
1218 1223
1219 1224 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
1220 1225
1221 1226 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
1222 1227
1223 1228 2006-11-24 Ville Vainio <vivainio@gmail.com>
1224 1229
1225 1230 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
1226 1231 try to use "cProfile" instead of the slower pure python
1227 1232 "profile"
1228 1233
1229 1234 2006-11-23 Ville Vainio <vivainio@gmail.com>
1230 1235
1231 1236 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
1232 1237 Qt+IPython+Designer link in documentation.
1233 1238
1234 1239 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
1235 1240 correct Pdb object to %pydb.
1236 1241
1237 1242
1238 1243 2006-11-22 Walter Doerwald <walter@livinglogic.de>
1239 1244 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
1240 1245 generic xrepr(), otherwise the list implementation would kick in.
1241 1246
1242 1247 2006-11-21 Ville Vainio <vivainio@gmail.com>
1243 1248
1244 1249 * upgrade_dir.py: Now actually overwrites a nonmodified user file
1245 1250 with one from UserConfig.
1246 1251
1247 1252 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
1248 1253 it was missing which broke the sh profile.
1249 1254
1250 1255 * completer.py: file completer now uses explicit '/' instead
1251 1256 of os.path.join, expansion of 'foo' was broken on win32
1252 1257 if there was one directory with name 'foobar'.
1253 1258
1254 1259 * A bunch of patches from Kirill Smelkov:
1255 1260
1256 1261 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
1257 1262
1258 1263 * [patch 7/9] Implement %page -r (page in raw mode) -
1259 1264
1260 1265 * [patch 5/9] ScientificPython webpage has moved
1261 1266
1262 1267 * [patch 4/9] The manual mentions %ds, should be %dhist
1263 1268
1264 1269 * [patch 3/9] Kill old bits from %prun doc.
1265 1270
1266 1271 * [patch 1/9] Fix typos here and there.
1267 1272
1268 1273 2006-11-08 Ville Vainio <vivainio@gmail.com>
1269 1274
1270 1275 * completer.py (attr_matches): catch all exceptions raised
1271 1276 by eval of expr with dots.
1272 1277
1273 1278 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
1274 1279
1275 1280 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
1276 1281 input if it starts with whitespace. This allows you to paste
1277 1282 indented input from any editor without manually having to type in
1278 1283 the 'if 1:', which is convenient when working interactively.
1279 1284 Slightly modifed version of a patch by Bo Peng
1280 1285 <bpeng-AT-rice.edu>.
1281 1286
1282 1287 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1283 1288
1284 1289 * IPython/irunner.py (main): modified irunner so it automatically
1285 1290 recognizes the right runner to use based on the extension (.py for
1286 1291 python, .ipy for ipython and .sage for sage).
1287 1292
1288 1293 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
1289 1294 visible in ipapi as ip.config(), to programatically control the
1290 1295 internal rc object. There's an accompanying %config magic for
1291 1296 interactive use, which has been enhanced to match the
1292 1297 funtionality in ipconfig.
1293 1298
1294 1299 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
1295 1300 so it's not just a toggle, it now takes an argument. Add support
1296 1301 for a customizable header when making system calls, as the new
1297 1302 system_header variable in the ipythonrc file.
1298 1303
1299 1304 2006-11-03 Walter Doerwald <walter@livinglogic.de>
1300 1305
1301 1306 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
1302 1307 generic functions (using Philip J. Eby's simplegeneric package).
1303 1308 This makes it possible to customize the display of third-party classes
1304 1309 without having to monkeypatch them. xiter() no longer supports a mode
1305 1310 argument and the XMode class has been removed. The same functionality can
1306 1311 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
1307 1312 One consequence of the switch to generic functions is that xrepr() and
1308 1313 xattrs() implementation must define the default value for the mode
1309 1314 argument themselves and xattrs() implementations must return real
1310 1315 descriptors.
1311 1316
1312 1317 * IPython/external: This new subpackage will contain all third-party
1313 1318 packages that are bundled with IPython. (The first one is simplegeneric).
1314 1319
1315 1320 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
1316 1321 directory which as been dropped in r1703.
1317 1322
1318 1323 * IPython/Extensions/ipipe.py (iless): Fixed.
1319 1324
1320 1325 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
1321 1326
1322 1327 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
1323 1328
1324 1329 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
1325 1330 handling in variable expansion so that shells and magics recognize
1326 1331 function local scopes correctly. Bug reported by Brian.
1327 1332
1328 1333 * scripts/ipython: remove the very first entry in sys.path which
1329 1334 Python auto-inserts for scripts, so that sys.path under IPython is
1330 1335 as similar as possible to that under plain Python.
1331 1336
1332 1337 * IPython/completer.py (IPCompleter.file_matches): Fix
1333 1338 tab-completion so that quotes are not closed unless the completion
1334 1339 is unambiguous. After a request by Stefan. Minor cleanups in
1335 1340 ipy_stock_completers.
1336 1341
1337 1342 2006-11-02 Ville Vainio <vivainio@gmail.com>
1338 1343
1339 1344 * ipy_stock_completers.py: Add %run and %cd completers.
1340 1345
1341 1346 * completer.py: Try running custom completer for both
1342 1347 "foo" and "%foo" if the command is just "foo". Ignore case
1343 1348 when filtering possible completions.
1344 1349
1345 1350 * UserConfig/ipy_user_conf.py: install stock completers as default
1346 1351
1347 1352 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
1348 1353 simplified readline history save / restore through a wrapper
1349 1354 function
1350 1355
1351 1356
1352 1357 2006-10-31 Ville Vainio <vivainio@gmail.com>
1353 1358
1354 1359 * strdispatch.py, completer.py, ipy_stock_completers.py:
1355 1360 Allow str_key ("command") in completer hooks. Implement
1356 1361 trivial completer for 'import' (stdlib modules only). Rename
1357 1362 ipy_linux_package_managers.py to ipy_stock_completers.py.
1358 1363 SVN completer.
1359 1364
1360 1365 * Extensions/ledit.py: %magic line editor for easily and
1361 1366 incrementally manipulating lists of strings. The magic command
1362 1367 name is %led.
1363 1368
1364 1369 2006-10-30 Ville Vainio <vivainio@gmail.com>
1365 1370
1366 1371 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
1367 1372 Bernsteins's patches for pydb integration.
1368 1373 http://bashdb.sourceforge.net/pydb/
1369 1374
1370 1375 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
1371 1376 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
1372 1377 custom completer hook to allow the users to implement their own
1373 1378 completers. See ipy_linux_package_managers.py for example. The
1374 1379 hook name is 'complete_command'.
1375 1380
1376 1381 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
1377 1382
1378 1383 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
1379 1384 Numeric leftovers.
1380 1385
1381 1386 * ipython.el (py-execute-region): apply Stefan's patch to fix
1382 1387 garbled results if the python shell hasn't been previously started.
1383 1388
1384 1389 * IPython/genutils.py (arg_split): moved to genutils, since it's a
1385 1390 pretty generic function and useful for other things.
1386 1391
1387 1392 * IPython/OInspect.py (getsource): Add customizable source
1388 1393 extractor. After a request/patch form W. Stein (SAGE).
1389 1394
1390 1395 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
1391 1396 window size to a more reasonable value from what pexpect does,
1392 1397 since their choice causes wrapping bugs with long input lines.
1393 1398
1394 1399 2006-10-28 Ville Vainio <vivainio@gmail.com>
1395 1400
1396 1401 * Magic.py (%run): Save and restore the readline history from
1397 1402 file around %run commands to prevent side effects from
1398 1403 %runned programs that might use readline (e.g. pydb).
1399 1404
1400 1405 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
1401 1406 invoking the pydb enhanced debugger.
1402 1407
1403 1408 2006-10-23 Walter Doerwald <walter@livinglogic.de>
1404 1409
1405 1410 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
1406 1411 call the base class method and propagate the return value to
1407 1412 ifile. This is now done by path itself.
1408 1413
1409 1414 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1410 1415
1411 1416 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
1412 1417 api: set_crash_handler(), to expose the ability to change the
1413 1418 internal crash handler.
1414 1419
1415 1420 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
1416 1421 the various parameters of the crash handler so that apps using
1417 1422 IPython as their engine can customize crash handling. Ipmlemented
1418 1423 at the request of SAGE.
1419 1424
1420 1425 2006-10-14 Ville Vainio <vivainio@gmail.com>
1421 1426
1422 1427 * Magic.py, ipython.el: applied first "safe" part of Rocky
1423 1428 Bernstein's patch set for pydb integration.
1424 1429
1425 1430 * Magic.py (%unalias, %alias): %store'd aliases can now be
1426 1431 removed with '%unalias'. %alias w/o args now shows most
1427 1432 interesting (stored / manually defined) aliases last
1428 1433 where they catch the eye w/o scrolling.
1429 1434
1430 1435 * Magic.py (%rehashx), ext_rehashdir.py: files with
1431 1436 'py' extension are always considered executable, even
1432 1437 when not in PATHEXT environment variable.
1433 1438
1434 1439 2006-10-12 Ville Vainio <vivainio@gmail.com>
1435 1440
1436 1441 * jobctrl.py: Add new "jobctrl" extension for spawning background
1437 1442 processes with "&find /". 'import jobctrl' to try it out. Requires
1438 1443 'subprocess' module, standard in python 2.4+.
1439 1444
1440 1445 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
1441 1446 so if foo -> bar and bar -> baz, then foo -> baz.
1442 1447
1443 1448 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
1444 1449
1445 1450 * IPython/Magic.py (Magic.parse_options): add a new posix option
1446 1451 to allow parsing of input args in magics that doesn't strip quotes
1447 1452 (if posix=False). This also closes %timeit bug reported by
1448 1453 Stefan.
1449 1454
1450 1455 2006-10-03 Ville Vainio <vivainio@gmail.com>
1451 1456
1452 1457 * iplib.py (raw_input, interact): Return ValueError catching for
1453 1458 raw_input. Fixes infinite loop for sys.stdin.close() or
1454 1459 sys.stdout.close().
1455 1460
1456 1461 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1457 1462
1458 1463 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
1459 1464 to help in handling doctests. irunner is now pretty useful for
1460 1465 running standalone scripts and simulate a full interactive session
1461 1466 in a format that can be then pasted as a doctest.
1462 1467
1463 1468 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
1464 1469 on top of the default (useless) ones. This also fixes the nasty
1465 1470 way in which 2.5's Quitter() exits (reverted [1785]).
1466 1471
1467 1472 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
1468 1473 2.5.
1469 1474
1470 1475 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
1471 1476 color scheme is updated as well when color scheme is changed
1472 1477 interactively.
1473 1478
1474 1479 2006-09-27 Ville Vainio <vivainio@gmail.com>
1475 1480
1476 1481 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
1477 1482 infinite loop and just exit. It's a hack, but will do for a while.
1478 1483
1479 1484 2006-08-25 Walter Doerwald <walter@livinglogic.de>
1480 1485
1481 1486 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
1482 1487 the constructor, this makes it possible to get a list of only directories
1483 1488 or only files.
1484 1489
1485 1490 2006-08-12 Ville Vainio <vivainio@gmail.com>
1486 1491
1487 1492 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
1488 1493 they broke unittest
1489 1494
1490 1495 2006-08-11 Ville Vainio <vivainio@gmail.com>
1491 1496
1492 1497 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
1493 1498 by resolving issue properly, i.e. by inheriting FakeModule
1494 1499 from types.ModuleType. Pickling ipython interactive data
1495 1500 should still work as usual (testing appreciated).
1496 1501
1497 1502 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
1498 1503
1499 1504 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
1500 1505 running under python 2.3 with code from 2.4 to fix a bug with
1501 1506 help(). Reported by the Debian maintainers, Norbert Tretkowski
1502 1507 <norbert-AT-tretkowski.de> and Alexandre Fayolle
1503 1508 <afayolle-AT-debian.org>.
1504 1509
1505 1510 2006-08-04 Walter Doerwald <walter@livinglogic.de>
1506 1511
1507 1512 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
1508 1513 (which was displaying "quit" twice).
1509 1514
1510 1515 2006-07-28 Walter Doerwald <walter@livinglogic.de>
1511 1516
1512 1517 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
1513 1518 the mode argument).
1514 1519
1515 1520 2006-07-27 Walter Doerwald <walter@livinglogic.de>
1516 1521
1517 1522 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
1518 1523 not running under IPython.
1519 1524
1520 1525 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
1521 1526 and make it iterable (iterating over the attribute itself). Add two new
1522 1527 magic strings for __xattrs__(): If the string starts with "-", the attribute
1523 1528 will not be displayed in ibrowse's detail view (but it can still be
1524 1529 iterated over). This makes it possible to add attributes that are large
1525 1530 lists or generator methods to the detail view. Replace magic attribute names
1526 1531 and _attrname() and _getattr() with "descriptors": For each type of magic
1527 1532 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
1528 1533 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
1529 1534 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
1530 1535 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
1531 1536 are still supported.
1532 1537
1533 1538 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
1534 1539 fails in ibrowse.fetch(), the exception object is added as the last item
1535 1540 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
1536 1541 a generator throws an exception midway through execution.
1537 1542
1538 1543 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
1539 1544 encoding into methods.
1540 1545
1541 1546 2006-07-26 Ville Vainio <vivainio@gmail.com>
1542 1547
1543 1548 * iplib.py: history now stores multiline input as single
1544 1549 history entries. Patch by Jorgen Cederlof.
1545 1550
1546 1551 2006-07-18 Walter Doerwald <walter@livinglogic.de>
1547 1552
1548 1553 * IPython/Extensions/ibrowse.py: Make cursor visible over
1549 1554 non existing attributes.
1550 1555
1551 1556 2006-07-14 Walter Doerwald <walter@livinglogic.de>
1552 1557
1553 1558 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
1554 1559 error output of the running command doesn't mess up the screen.
1555 1560
1556 1561 2006-07-13 Walter Doerwald <walter@livinglogic.de>
1557 1562
1558 1563 * IPython/Extensions/ipipe.py (isort): Make isort usable without
1559 1564 argument. This sorts the items themselves.
1560 1565
1561 1566 2006-07-12 Walter Doerwald <walter@livinglogic.de>
1562 1567
1563 1568 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
1564 1569 Compile expression strings into code objects. This should speed
1565 1570 up ifilter and friends somewhat.
1566 1571
1567 1572 2006-07-08 Ville Vainio <vivainio@gmail.com>
1568 1573
1569 1574 * Magic.py: %cpaste now strips > from the beginning of lines
1570 1575 to ease pasting quoted code from emails. Contributed by
1571 1576 Stefan van der Walt.
1572 1577
1573 1578 2006-06-29 Ville Vainio <vivainio@gmail.com>
1574 1579
1575 1580 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
1576 1581 mode, patch contributed by Darren Dale. NEEDS TESTING!
1577 1582
1578 1583 2006-06-28 Walter Doerwald <walter@livinglogic.de>
1579 1584
1580 1585 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
1581 1586 a blue background. Fix fetching new display rows when the browser
1582 1587 scrolls more than a screenful (e.g. by using the goto command).
1583 1588
1584 1589 2006-06-27 Ville Vainio <vivainio@gmail.com>
1585 1590
1586 1591 * Magic.py (_inspect, _ofind) Apply David Huard's
1587 1592 patch for displaying the correct docstring for 'property'
1588 1593 attributes.
1589 1594
1590 1595 2006-06-23 Walter Doerwald <walter@livinglogic.de>
1591 1596
1592 1597 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
1593 1598 commands into the methods implementing them.
1594 1599
1595 1600 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
1596 1601
1597 1602 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
1598 1603 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
1599 1604 autoindent support was authored by Jin Liu.
1600 1605
1601 1606 2006-06-22 Walter Doerwald <walter@livinglogic.de>
1602 1607
1603 1608 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
1604 1609 for keymaps with a custom class that simplifies handling.
1605 1610
1606 1611 2006-06-19 Walter Doerwald <walter@livinglogic.de>
1607 1612
1608 1613 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
1609 1614 resizing. This requires Python 2.5 to work.
1610 1615
1611 1616 2006-06-16 Walter Doerwald <walter@livinglogic.de>
1612 1617
1613 1618 * IPython/Extensions/ibrowse.py: Add two new commands to
1614 1619 ibrowse: "hideattr" (mapped to "h") hides the attribute under
1615 1620 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
1616 1621 attributes again. Remapped the help command to "?". Display
1617 1622 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
1618 1623 as keys for the "home" and "end" commands. Add three new commands
1619 1624 to the input mode for "find" and friends: "delend" (CTRL-K)
1620 1625 deletes to the end of line. "incsearchup" searches upwards in the
1621 1626 command history for an input that starts with the text before the cursor.
1622 1627 "incsearchdown" does the same downwards. Removed a bogus mapping of
1623 1628 the x key to "delete".
1624 1629
1625 1630 2006-06-15 Ville Vainio <vivainio@gmail.com>
1626 1631
1627 1632 * iplib.py, hooks.py: Added new generate_prompt hook that can be
1628 1633 used to create prompts dynamically, instead of the "old" way of
1629 1634 assigning "magic" strings to prompt_in1 and prompt_in2. The old
1630 1635 way still works (it's invoked by the default hook), of course.
1631 1636
1632 1637 * Prompts.py: added generate_output_prompt hook for altering output
1633 1638 prompt
1634 1639
1635 1640 * Release.py: Changed version string to 0.7.3.svn.
1636 1641
1637 1642 2006-06-15 Walter Doerwald <walter@livinglogic.de>
1638 1643
1639 1644 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
1640 1645 the call to fetch() always tries to fetch enough data for at least one
1641 1646 full screen. This makes it possible to simply call moveto(0,0,True) in
1642 1647 the constructor. Fix typos and removed the obsolete goto attribute.
1643 1648
1644 1649 2006-06-12 Ville Vainio <vivainio@gmail.com>
1645 1650
1646 1651 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
1647 1652 allowing $variable interpolation within multiline statements,
1648 1653 though so far only with "sh" profile for a testing period.
1649 1654 The patch also enables splitting long commands with \ but it
1650 1655 doesn't work properly yet.
1651 1656
1652 1657 2006-06-12 Walter Doerwald <walter@livinglogic.de>
1653 1658
1654 1659 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
1655 1660 input history and the position of the cursor in the input history for
1656 1661 the find, findbackwards and goto command.
1657 1662
1658 1663 2006-06-10 Walter Doerwald <walter@livinglogic.de>
1659 1664
1660 1665 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
1661 1666 implements the basic functionality of browser commands that require
1662 1667 input. Reimplement the goto, find and findbackwards commands as
1663 1668 subclasses of _CommandInput. Add an input history and keymaps to those
1664 1669 commands. Add "\r" as a keyboard shortcut for the enterdefault and
1665 1670 execute commands.
1666 1671
1667 1672 2006-06-07 Ville Vainio <vivainio@gmail.com>
1668 1673
1669 1674 * iplib.py: ipython mybatch.ipy exits ipython immediately after
1670 1675 running the batch files instead of leaving the session open.
1671 1676
1672 1677 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
1673 1678
1674 1679 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
1675 1680 the original fix was incomplete. Patch submitted by W. Maier.
1676 1681
1677 1682 2006-06-07 Ville Vainio <vivainio@gmail.com>
1678 1683
1679 1684 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
1680 1685 Confirmation prompts can be supressed by 'quiet' option.
1681 1686 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
1682 1687
1683 1688 2006-06-06 *** Released version 0.7.2
1684 1689
1685 1690 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
1686 1691
1687 1692 * IPython/Release.py (version): Made 0.7.2 final for release.
1688 1693 Repo tagged and release cut.
1689 1694
1690 1695 2006-06-05 Ville Vainio <vivainio@gmail.com>
1691 1696
1692 1697 * Magic.py (magic_rehashx): Honor no_alias list earlier in
1693 1698 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
1694 1699
1695 1700 * upgrade_dir.py: try import 'path' module a bit harder
1696 1701 (for %upgrade)
1697 1702
1698 1703 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
1699 1704
1700 1705 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
1701 1706 instead of looping 20 times.
1702 1707
1703 1708 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
1704 1709 correctly at initialization time. Bug reported by Krishna Mohan
1705 1710 Gundu <gkmohan-AT-gmail.com> on the user list.
1706 1711
1707 1712 * IPython/Release.py (version): Mark 0.7.2 version to start
1708 1713 testing for release on 06/06.
1709 1714
1710 1715 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
1711 1716
1712 1717 * scripts/irunner: thin script interface so users don't have to
1713 1718 find the module and call it as an executable, since modules rarely
1714 1719 live in people's PATH.
1715 1720
1716 1721 * IPython/irunner.py (InteractiveRunner.__init__): added
1717 1722 delaybeforesend attribute to control delays with newer versions of
1718 1723 pexpect. Thanks to detailed help from pexpect's author, Noah
1719 1724 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
1720 1725 correctly (it works in NoColor mode).
1721 1726
1722 1727 * IPython/iplib.py (handle_normal): fix nasty crash reported on
1723 1728 SAGE list, from improper log() calls.
1724 1729
1725 1730 2006-05-31 Ville Vainio <vivainio@gmail.com>
1726 1731
1727 1732 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
1728 1733 with args in parens to work correctly with dirs that have spaces.
1729 1734
1730 1735 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
1731 1736
1732 1737 * IPython/Logger.py (Logger.logstart): add option to log raw input
1733 1738 instead of the processed one. A -r flag was added to the
1734 1739 %logstart magic used for controlling logging.
1735 1740
1736 1741 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
1737 1742
1738 1743 * IPython/iplib.py (InteractiveShell.__init__): add check for the
1739 1744 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
1740 1745 recognize the option. After a bug report by Will Maier. This
1741 1746 closes #64 (will do it after confirmation from W. Maier).
1742 1747
1743 1748 * IPython/irunner.py: New module to run scripts as if manually
1744 1749 typed into an interactive environment, based on pexpect. After a
1745 1750 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
1746 1751 ipython-user list. Simple unittests in the tests/ directory.
1747 1752
1748 1753 * tools/release: add Will Maier, OpenBSD port maintainer, to
1749 1754 recepients list. We are now officially part of the OpenBSD ports:
1750 1755 http://www.openbsd.org/ports.html ! Many thanks to Will for the
1751 1756 work.
1752 1757
1753 1758 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
1754 1759
1755 1760 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
1756 1761 so that it doesn't break tkinter apps.
1757 1762
1758 1763 * IPython/iplib.py (_prefilter): fix bug where aliases would
1759 1764 shadow variables when autocall was fully off. Reported by SAGE
1760 1765 author William Stein.
1761 1766
1762 1767 * IPython/OInspect.py (Inspector.__init__): add a flag to control
1763 1768 at what detail level strings are computed when foo? is requested.
1764 1769 This allows users to ask for example that the string form of an
1765 1770 object is only computed when foo?? is called, or even never, by
1766 1771 setting the object_info_string_level >= 2 in the configuration
1767 1772 file. This new option has been added and documented. After a
1768 1773 request by SAGE to be able to control the printing of very large
1769 1774 objects more easily.
1770 1775
1771 1776 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
1772 1777
1773 1778 * IPython/ipmaker.py (make_IPython): remove the ipython call path
1774 1779 from sys.argv, to be 100% consistent with how Python itself works
1775 1780 (as seen for example with python -i file.py). After a bug report
1776 1781 by Jeffrey Collins.
1777 1782
1778 1783 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
1779 1784 nasty bug which was preventing custom namespaces with -pylab,
1780 1785 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
1781 1786 compatibility (long gone from mpl).
1782 1787
1783 1788 * IPython/ipapi.py (make_session): name change: create->make. We
1784 1789 use make in other places (ipmaker,...), it's shorter and easier to
1785 1790 type and say, etc. I'm trying to clean things before 0.7.2 so
1786 1791 that I can keep things stable wrt to ipapi in the chainsaw branch.
1787 1792
1788 1793 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
1789 1794 python-mode recognizes our debugger mode. Add support for
1790 1795 autoindent inside (X)emacs. After a patch sent in by Jin Liu
1791 1796 <m.liu.jin-AT-gmail.com> originally written by
1792 1797 doxgen-AT-newsmth.net (with minor modifications for xemacs
1793 1798 compatibility)
1794 1799
1795 1800 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
1796 1801 tracebacks when walking the stack so that the stack tracking system
1797 1802 in emacs' python-mode can identify the frames correctly.
1798 1803
1799 1804 * IPython/ipmaker.py (make_IPython): make the internal (and
1800 1805 default config) autoedit_syntax value false by default. Too many
1801 1806 users have complained to me (both on and off-list) about problems
1802 1807 with this option being on by default, so I'm making it default to
1803 1808 off. It can still be enabled by anyone via the usual mechanisms.
1804 1809
1805 1810 * IPython/completer.py (Completer.attr_matches): add support for
1806 1811 PyCrust-style _getAttributeNames magic method. Patch contributed
1807 1812 by <mscott-AT-goldenspud.com>. Closes #50.
1808 1813
1809 1814 * IPython/iplib.py (InteractiveShell.__init__): remove the
1810 1815 deletion of exit/quit from __builtin__, which can break
1811 1816 third-party tools like the Zope debugging console. The
1812 1817 %exit/%quit magics remain. In general, it's probably a good idea
1813 1818 not to delete anything from __builtin__, since we never know what
1814 1819 that will break. In any case, python now (for 2.5) will support
1815 1820 'real' exit/quit, so this issue is moot. Closes #55.
1816 1821
1817 1822 * IPython/genutils.py (with_obj): rename the 'with' function to
1818 1823 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
1819 1824 becomes a language keyword. Closes #53.
1820 1825
1821 1826 * IPython/FakeModule.py (FakeModule.__init__): add a proper
1822 1827 __file__ attribute to this so it fools more things into thinking
1823 1828 it is a real module. Closes #59.
1824 1829
1825 1830 * IPython/Magic.py (magic_edit): add -n option to open the editor
1826 1831 at a specific line number. After a patch by Stefan van der Walt.
1827 1832
1828 1833 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
1829 1834
1830 1835 * IPython/iplib.py (edit_syntax_error): fix crash when for some
1831 1836 reason the file could not be opened. After automatic crash
1832 1837 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
1833 1838 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
1834 1839 (_should_recompile): Don't fire editor if using %bg, since there
1835 1840 is no file in the first place. From the same report as above.
1836 1841 (raw_input): protect against faulty third-party prefilters. After
1837 1842 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
1838 1843 while running under SAGE.
1839 1844
1840 1845 2006-05-23 Ville Vainio <vivainio@gmail.com>
1841 1846
1842 1847 * ipapi.py: Stripped down ip.to_user_ns() to work only as
1843 1848 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
1844 1849 now returns None (again), unless dummy is specifically allowed by
1845 1850 ipapi.get(allow_dummy=True).
1846 1851
1847 1852 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
1848 1853
1849 1854 * IPython: remove all 2.2-compatibility objects and hacks from
1850 1855 everywhere, since we only support 2.3 at this point. Docs
1851 1856 updated.
1852 1857
1853 1858 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
1854 1859 Anything requiring extra validation can be turned into a Python
1855 1860 property in the future. I used a property for the db one b/c
1856 1861 there was a nasty circularity problem with the initialization
1857 1862 order, which right now I don't have time to clean up.
1858 1863
1859 1864 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
1860 1865 another locking bug reported by Jorgen. I'm not 100% sure though,
1861 1866 so more testing is needed...
1862 1867
1863 1868 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
1864 1869
1865 1870 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
1866 1871 local variables from any routine in user code (typically executed
1867 1872 with %run) directly into the interactive namespace. Very useful
1868 1873 when doing complex debugging.
1869 1874 (IPythonNotRunning): Changed the default None object to a dummy
1870 1875 whose attributes can be queried as well as called without
1871 1876 exploding, to ease writing code which works transparently both in
1872 1877 and out of ipython and uses some of this API.
1873 1878
1874 1879 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1875 1880
1876 1881 * IPython/hooks.py (result_display): Fix the fact that our display
1877 1882 hook was using str() instead of repr(), as the default python
1878 1883 console does. This had gone unnoticed b/c it only happened if
1879 1884 %Pprint was off, but the inconsistency was there.
1880 1885
1881 1886 2006-05-15 Ville Vainio <vivainio@gmail.com>
1882 1887
1883 1888 * Oinspect.py: Only show docstring for nonexisting/binary files
1884 1889 when doing object??, closing ticket #62
1885 1890
1886 1891 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1887 1892
1888 1893 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1889 1894 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1890 1895 was being released in a routine which hadn't checked if it had
1891 1896 been the one to acquire it.
1892 1897
1893 1898 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1894 1899
1895 1900 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1896 1901
1897 1902 2006-04-11 Ville Vainio <vivainio@gmail.com>
1898 1903
1899 1904 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1900 1905 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1901 1906 prefilters, allowing stuff like magics and aliases in the file.
1902 1907
1903 1908 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1904 1909 added. Supported now are "%clear in" and "%clear out" (clear input and
1905 1910 output history, respectively). Also fixed CachedOutput.flush to
1906 1911 properly flush the output cache.
1907 1912
1908 1913 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1909 1914 half-success (and fail explicitly).
1910 1915
1911 1916 2006-03-28 Ville Vainio <vivainio@gmail.com>
1912 1917
1913 1918 * iplib.py: Fix quoting of aliases so that only argless ones
1914 1919 are quoted
1915 1920
1916 1921 2006-03-28 Ville Vainio <vivainio@gmail.com>
1917 1922
1918 1923 * iplib.py: Quote aliases with spaces in the name.
1919 1924 "c:\program files\blah\bin" is now legal alias target.
1920 1925
1921 1926 * ext_rehashdir.py: Space no longer allowed as arg
1922 1927 separator, since space is legal in path names.
1923 1928
1924 1929 2006-03-16 Ville Vainio <vivainio@gmail.com>
1925 1930
1926 1931 * upgrade_dir.py: Take path.py from Extensions, correcting
1927 1932 %upgrade magic
1928 1933
1929 1934 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1930 1935
1931 1936 * hooks.py: Only enclose editor binary in quotes if legal and
1932 1937 necessary (space in the name, and is an existing file). Fixes a bug
1933 1938 reported by Zachary Pincus.
1934 1939
1935 1940 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1936 1941
1937 1942 * Manual: thanks to a tip on proper color handling for Emacs, by
1938 1943 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1939 1944
1940 1945 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1941 1946 by applying the provided patch. Thanks to Liu Jin
1942 1947 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1943 1948 XEmacs/Linux, I'm trusting the submitter that it actually helps
1944 1949 under win32/GNU Emacs. Will revisit if any problems are reported.
1945 1950
1946 1951 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1947 1952
1948 1953 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1949 1954 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1950 1955
1951 1956 2006-03-12 Ville Vainio <vivainio@gmail.com>
1952 1957
1953 1958 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1954 1959 Torsten Marek.
1955 1960
1956 1961 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1957 1962
1958 1963 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1959 1964 line ranges works again.
1960 1965
1961 1966 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1962 1967
1963 1968 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1964 1969 and friends, after a discussion with Zach Pincus on ipython-user.
1965 1970 I'm not 100% sure, but after thinking about it quite a bit, it may
1966 1971 be OK. Testing with the multithreaded shells didn't reveal any
1967 1972 problems, but let's keep an eye out.
1968 1973
1969 1974 In the process, I fixed a few things which were calling
1970 1975 self.InteractiveTB() directly (like safe_execfile), which is a
1971 1976 mistake: ALL exception reporting should be done by calling
1972 1977 self.showtraceback(), which handles state and tab-completion and
1973 1978 more.
1974 1979
1975 1980 2006-03-01 Ville Vainio <vivainio@gmail.com>
1976 1981
1977 1982 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1978 1983 To use, do "from ipipe import *".
1979 1984
1980 1985 2006-02-24 Ville Vainio <vivainio@gmail.com>
1981 1986
1982 1987 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1983 1988 "cleanly" and safely than the older upgrade mechanism.
1984 1989
1985 1990 2006-02-21 Ville Vainio <vivainio@gmail.com>
1986 1991
1987 1992 * Magic.py: %save works again.
1988 1993
1989 1994 2006-02-15 Ville Vainio <vivainio@gmail.com>
1990 1995
1991 1996 * Magic.py: %Pprint works again
1992 1997
1993 1998 * Extensions/ipy_sane_defaults.py: Provide everything provided
1994 1999 in default ipythonrc, to make it possible to have a completely empty
1995 2000 ipythonrc (and thus completely rc-file free configuration)
1996 2001
1997 2002 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1998 2003
1999 2004 * IPython/hooks.py (editor): quote the call to the editor command,
2000 2005 to allow commands with spaces in them. Problem noted by watching
2001 2006 Ian Oswald's video about textpad under win32 at
2002 2007 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
2003 2008
2004 2009 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
2005 2010 describing magics (we haven't used @ for a loong time).
2006 2011
2007 2012 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
2008 2013 contributed by marienz to close
2009 2014 http://www.scipy.net/roundup/ipython/issue53.
2010 2015
2011 2016 2006-02-10 Ville Vainio <vivainio@gmail.com>
2012 2017
2013 2018 * genutils.py: getoutput now works in win32 too
2014 2019
2015 2020 * completer.py: alias and magic completion only invoked
2016 2021 at the first "item" in the line, to avoid "cd %store"
2017 2022 nonsense.
2018 2023
2019 2024 2006-02-09 Ville Vainio <vivainio@gmail.com>
2020 2025
2021 2026 * test/*: Added a unit testing framework (finally).
2022 2027 '%run runtests.py' to run test_*.
2023 2028
2024 2029 * ipapi.py: Exposed runlines and set_custom_exc
2025 2030
2026 2031 2006-02-07 Ville Vainio <vivainio@gmail.com>
2027 2032
2028 2033 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
2029 2034 instead use "f(1 2)" as before.
2030 2035
2031 2036 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
2032 2037
2033 2038 * IPython/demo.py (IPythonDemo): Add new classes to the demo
2034 2039 facilities, for demos processed by the IPython input filter
2035 2040 (IPythonDemo), and for running a script one-line-at-a-time as a
2036 2041 demo, both for pure Python (LineDemo) and for IPython-processed
2037 2042 input (IPythonLineDemo). After a request by Dave Kohel, from the
2038 2043 SAGE team.
2039 2044 (Demo.edit): added an edit() method to the demo objects, to edit
2040 2045 the in-memory copy of the last executed block.
2041 2046
2042 2047 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
2043 2048 processing to %edit, %macro and %save. These commands can now be
2044 2049 invoked on the unprocessed input as it was typed by the user
2045 2050 (without any prefilters applied). After requests by the SAGE team
2046 2051 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
2047 2052
2048 2053 2006-02-01 Ville Vainio <vivainio@gmail.com>
2049 2054
2050 2055 * setup.py, eggsetup.py: easy_install ipython==dev works
2051 2056 correctly now (on Linux)
2052 2057
2053 2058 * ipy_user_conf,ipmaker: user config changes, removed spurious
2054 2059 warnings
2055 2060
2056 2061 * iplib: if rc.banner is string, use it as is.
2057 2062
2058 2063 * Magic: %pycat accepts a string argument and pages it's contents.
2059 2064
2060 2065
2061 2066 2006-01-30 Ville Vainio <vivainio@gmail.com>
2062 2067
2063 2068 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
2064 2069 Now %store and bookmarks work through PickleShare, meaning that
2065 2070 concurrent access is possible and all ipython sessions see the
2066 2071 same database situation all the time, instead of snapshot of
2067 2072 the situation when the session was started. Hence, %bookmark
2068 2073 results are immediately accessible from othes sessions. The database
2069 2074 is also available for use by user extensions. See:
2070 2075 http://www.python.org/pypi/pickleshare
2071 2076
2072 2077 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
2073 2078
2074 2079 * aliases can now be %store'd
2075 2080
2076 2081 * path.py moved to Extensions so that pickleshare does not need
2077 2082 IPython-specific import. Extensions added to pythonpath right
2078 2083 at __init__.
2079 2084
2080 2085 * iplib.py: ipalias deprecated/redundant; aliases are converted and
2081 2086 called with _ip.system and the pre-transformed command string.
2082 2087
2083 2088 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
2084 2089
2085 2090 * IPython/iplib.py (interact): Fix that we were not catching
2086 2091 KeyboardInterrupt exceptions properly. I'm not quite sure why the
2087 2092 logic here had to change, but it's fixed now.
2088 2093
2089 2094 2006-01-29 Ville Vainio <vivainio@gmail.com>
2090 2095
2091 2096 * iplib.py: Try to import pyreadline on Windows.
2092 2097
2093 2098 2006-01-27 Ville Vainio <vivainio@gmail.com>
2094 2099
2095 2100 * iplib.py: Expose ipapi as _ip in builtin namespace.
2096 2101 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
2097 2102 and ip_set_hook (-> _ip.set_hook) redundant. % and !
2098 2103 syntax now produce _ip.* variant of the commands.
2099 2104
2100 2105 * "_ip.options().autoedit_syntax = 2" automatically throws
2101 2106 user to editor for syntax error correction without prompting.
2102 2107
2103 2108 2006-01-27 Ville Vainio <vivainio@gmail.com>
2104 2109
2105 2110 * ipmaker.py: Give "realistic" sys.argv for scripts (without
2106 2111 'ipython' at argv[0]) executed through command line.
2107 2112 NOTE: this DEPRECATES calling ipython with multiple scripts
2108 2113 ("ipython a.py b.py c.py")
2109 2114
2110 2115 * iplib.py, hooks.py: Added configurable input prefilter,
2111 2116 named 'input_prefilter'. See ext_rescapture.py for example
2112 2117 usage.
2113 2118
2114 2119 * ext_rescapture.py, Magic.py: Better system command output capture
2115 2120 through 'var = !ls' (deprecates user-visible %sc). Same notation
2116 2121 applies for magics, 'var = %alias' assigns alias list to var.
2117 2122
2118 2123 * ipapi.py: added meta() for accessing extension-usable data store.
2119 2124
2120 2125 * iplib.py: added InteractiveShell.getapi(). New magics should be
2121 2126 written doing self.getapi() instead of using the shell directly.
2122 2127
2123 2128 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
2124 2129 %store foo >> ~/myfoo.txt to store variables to files (in clean
2125 2130 textual form, not a restorable pickle).
2126 2131
2127 2132 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
2128 2133
2129 2134 * usage.py, Magic.py: added %quickref
2130 2135
2131 2136 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
2132 2137
2133 2138 * GetoptErrors when invoking magics etc. with wrong args
2134 2139 are now more helpful:
2135 2140 GetoptError: option -l not recognized (allowed: "qb" )
2136 2141
2137 2142 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
2138 2143
2139 2144 * IPython/demo.py (Demo.show): Flush stdout after each block, so
2140 2145 computationally intensive blocks don't appear to stall the demo.
2141 2146
2142 2147 2006-01-24 Ville Vainio <vivainio@gmail.com>
2143 2148
2144 2149 * iplib.py, hooks.py: 'result_display' hook can return a non-None
2145 2150 value to manipulate resulting history entry.
2146 2151
2147 2152 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
2148 2153 to instance methods of IPApi class, to make extending an embedded
2149 2154 IPython feasible. See ext_rehashdir.py for example usage.
2150 2155
2151 2156 * Merged 1071-1076 from branches/0.7.1
2152 2157
2153 2158
2154 2159 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
2155 2160
2156 2161 * tools/release (daystamp): Fix build tools to use the new
2157 2162 eggsetup.py script to build lightweight eggs.
2158 2163
2159 2164 * Applied changesets 1062 and 1064 before 0.7.1 release.
2160 2165
2161 2166 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
2162 2167 see the raw input history (without conversions like %ls ->
2163 2168 ipmagic("ls")). After a request from W. Stein, SAGE
2164 2169 (http://modular.ucsd.edu/sage) developer. This information is
2165 2170 stored in the input_hist_raw attribute of the IPython instance, so
2166 2171 developers can access it if needed (it's an InputList instance).
2167 2172
2168 2173 * Versionstring = 0.7.2.svn
2169 2174
2170 2175 * eggsetup.py: A separate script for constructing eggs, creates
2171 2176 proper launch scripts even on Windows (an .exe file in
2172 2177 \python24\scripts).
2173 2178
2174 2179 * ipapi.py: launch_new_instance, launch entry point needed for the
2175 2180 egg.
2176 2181
2177 2182 2006-01-23 Ville Vainio <vivainio@gmail.com>
2178 2183
2179 2184 * Added %cpaste magic for pasting python code
2180 2185
2181 2186 2006-01-22 Ville Vainio <vivainio@gmail.com>
2182 2187
2183 2188 * Merge from branches/0.7.1 into trunk, revs 1052-1057
2184 2189
2185 2190 * Versionstring = 0.7.2.svn
2186 2191
2187 2192 * eggsetup.py: A separate script for constructing eggs, creates
2188 2193 proper launch scripts even on Windows (an .exe file in
2189 2194 \python24\scripts).
2190 2195
2191 2196 * ipapi.py: launch_new_instance, launch entry point needed for the
2192 2197 egg.
2193 2198
2194 2199 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
2195 2200
2196 2201 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
2197 2202 %pfile foo would print the file for foo even if it was a binary.
2198 2203 Now, extensions '.so' and '.dll' are skipped.
2199 2204
2200 2205 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
2201 2206 bug, where macros would fail in all threaded modes. I'm not 100%
2202 2207 sure, so I'm going to put out an rc instead of making a release
2203 2208 today, and wait for feedback for at least a few days.
2204 2209
2205 2210 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
2206 2211 it...) the handling of pasting external code with autoindent on.
2207 2212 To get out of a multiline input, the rule will appear for most
2208 2213 users unchanged: two blank lines or change the indent level
2209 2214 proposed by IPython. But there is a twist now: you can
2210 2215 add/subtract only *one or two spaces*. If you add/subtract three
2211 2216 or more (unless you completely delete the line), IPython will
2212 2217 accept that line, and you'll need to enter a second one of pure
2213 2218 whitespace. I know it sounds complicated, but I can't find a
2214 2219 different solution that covers all the cases, with the right
2215 2220 heuristics. Hopefully in actual use, nobody will really notice
2216 2221 all these strange rules and things will 'just work'.
2217 2222
2218 2223 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
2219 2224
2220 2225 * IPython/iplib.py (interact): catch exceptions which can be
2221 2226 triggered asynchronously by signal handlers. Thanks to an
2222 2227 automatic crash report, submitted by Colin Kingsley
2223 2228 <tercel-AT-gentoo.org>.
2224 2229
2225 2230 2006-01-20 Ville Vainio <vivainio@gmail.com>
2226 2231
2227 2232 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
2228 2233 (%rehashdir, very useful, try it out) of how to extend ipython
2229 2234 with new magics. Also added Extensions dir to pythonpath to make
2230 2235 importing extensions easy.
2231 2236
2232 2237 * %store now complains when trying to store interactively declared
2233 2238 classes / instances of those classes.
2234 2239
2235 2240 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
2236 2241 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
2237 2242 if they exist, and ipy_user_conf.py with some defaults is created for
2238 2243 the user.
2239 2244
2240 2245 * Startup rehashing done by the config file, not InterpreterExec.
2241 2246 This means system commands are available even without selecting the
2242 2247 pysh profile. It's the sensible default after all.
2243 2248
2244 2249 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
2245 2250
2246 2251 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
2247 2252 multiline code with autoindent on working. But I am really not
2248 2253 sure, so this needs more testing. Will commit a debug-enabled
2249 2254 version for now, while I test it some more, so that Ville and
2250 2255 others may also catch any problems. Also made
2251 2256 self.indent_current_str() a method, to ensure that there's no
2252 2257 chance of the indent space count and the corresponding string
2253 2258 falling out of sync. All code needing the string should just call
2254 2259 the method.
2255 2260
2256 2261 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
2257 2262
2258 2263 * IPython/Magic.py (magic_edit): fix check for when users don't
2259 2264 save their output files, the try/except was in the wrong section.
2260 2265
2261 2266 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
2262 2267
2263 2268 * IPython/Magic.py (magic_run): fix __file__ global missing from
2264 2269 script's namespace when executed via %run. After a report by
2265 2270 Vivian.
2266 2271
2267 2272 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
2268 2273 when using python 2.4. The parent constructor changed in 2.4, and
2269 2274 we need to track it directly (we can't call it, as it messes up
2270 2275 readline and tab-completion inside our pdb would stop working).
2271 2276 After a bug report by R. Bernstein <rocky-AT-panix.com>.
2272 2277
2273 2278 2006-01-16 Ville Vainio <vivainio@gmail.com>
2274 2279
2275 2280 * Ipython/magic.py: Reverted back to old %edit functionality
2276 2281 that returns file contents on exit.
2277 2282
2278 2283 * IPython/path.py: Added Jason Orendorff's "path" module to
2279 2284 IPython tree, http://www.jorendorff.com/articles/python/path/.
2280 2285 You can get path objects conveniently through %sc, and !!, e.g.:
2281 2286 sc files=ls
2282 2287 for p in files.paths: # or files.p
2283 2288 print p,p.mtime
2284 2289
2285 2290 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
2286 2291 now work again without considering the exclusion regexp -
2287 2292 hence, things like ',foo my/path' turn to 'foo("my/path")'
2288 2293 instead of syntax error.
2289 2294
2290 2295
2291 2296 2006-01-14 Ville Vainio <vivainio@gmail.com>
2292 2297
2293 2298 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
2294 2299 ipapi decorators for python 2.4 users, options() provides access to rc
2295 2300 data.
2296 2301
2297 2302 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
2298 2303 as path separators (even on Linux ;-). Space character after
2299 2304 backslash (as yielded by tab completer) is still space;
2300 2305 "%cd long\ name" works as expected.
2301 2306
2302 2307 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
2303 2308 as "chain of command", with priority. API stays the same,
2304 2309 TryNext exception raised by a hook function signals that
2305 2310 current hook failed and next hook should try handling it, as
2306 2311 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
2307 2312 requested configurable display hook, which is now implemented.
2308 2313
2309 2314 2006-01-13 Ville Vainio <vivainio@gmail.com>
2310 2315
2311 2316 * IPython/platutils*.py: platform specific utility functions,
2312 2317 so far only set_term_title is implemented (change terminal
2313 2318 label in windowing systems). %cd now changes the title to
2314 2319 current dir.
2315 2320
2316 2321 * IPython/Release.py: Added myself to "authors" list,
2317 2322 had to create new files.
2318 2323
2319 2324 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
2320 2325 shell escape; not a known bug but had potential to be one in the
2321 2326 future.
2322 2327
2323 2328 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
2324 2329 extension API for IPython! See the module for usage example. Fix
2325 2330 OInspect for docstring-less magic functions.
2326 2331
2327 2332
2328 2333 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2329 2334
2330 2335 * IPython/iplib.py (raw_input): temporarily deactivate all
2331 2336 attempts at allowing pasting of code with autoindent on. It
2332 2337 introduced bugs (reported by Prabhu) and I can't seem to find a
2333 2338 robust combination which works in all cases. Will have to revisit
2334 2339 later.
2335 2340
2336 2341 * IPython/genutils.py: remove isspace() function. We've dropped
2337 2342 2.2 compatibility, so it's OK to use the string method.
2338 2343
2339 2344 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2340 2345
2341 2346 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
2342 2347 matching what NOT to autocall on, to include all python binary
2343 2348 operators (including things like 'and', 'or', 'is' and 'in').
2344 2349 Prompted by a bug report on 'foo & bar', but I realized we had
2345 2350 many more potential bug cases with other operators. The regexp is
2346 2351 self.re_exclude_auto, it's fairly commented.
2347 2352
2348 2353 2006-01-12 Ville Vainio <vivainio@gmail.com>
2349 2354
2350 2355 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
2351 2356 Prettified and hardened string/backslash quoting with ipsystem(),
2352 2357 ipalias() and ipmagic(). Now even \ characters are passed to
2353 2358 %magics, !shell escapes and aliases exactly as they are in the
2354 2359 ipython command line. Should improve backslash experience,
2355 2360 particularly in Windows (path delimiter for some commands that
2356 2361 won't understand '/'), but Unix benefits as well (regexps). %cd
2357 2362 magic still doesn't support backslash path delimiters, though. Also
2358 2363 deleted all pretense of supporting multiline command strings in
2359 2364 !system or %magic commands. Thanks to Jerry McRae for suggestions.
2360 2365
2361 2366 * doc/build_doc_instructions.txt added. Documentation on how to
2362 2367 use doc/update_manual.py, added yesterday. Both files contributed
2363 2368 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
2364 2369 doc/*.sh for deprecation at a later date.
2365 2370
2366 2371 * /ipython.py Added ipython.py to root directory for
2367 2372 zero-installation (tar xzvf ipython.tgz; cd ipython; python
2368 2373 ipython.py) and development convenience (no need to keep doing
2369 2374 "setup.py install" between changes).
2370 2375
2371 2376 * Made ! and !! shell escapes work (again) in multiline expressions:
2372 2377 if 1:
2373 2378 !ls
2374 2379 !!ls
2375 2380
2376 2381 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
2377 2382
2378 2383 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
2379 2384 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
2380 2385 module in case-insensitive installation. Was causing crashes
2381 2386 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
2382 2387
2383 2388 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
2384 2389 <marienz-AT-gentoo.org>, closes
2385 2390 http://www.scipy.net/roundup/ipython/issue51.
2386 2391
2387 2392 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
2388 2393
2389 2394 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
2390 2395 problem of excessive CPU usage under *nix and keyboard lag under
2391 2396 win32.
2392 2397
2393 2398 2006-01-10 *** Released version 0.7.0
2394 2399
2395 2400 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
2396 2401
2397 2402 * IPython/Release.py (revision): tag version number to 0.7.0,
2398 2403 ready for release.
2399 2404
2400 2405 * IPython/Magic.py (magic_edit): Add print statement to %edit so
2401 2406 it informs the user of the name of the temp. file used. This can
2402 2407 help if you decide later to reuse that same file, so you know
2403 2408 where to copy the info from.
2404 2409
2405 2410 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
2406 2411
2407 2412 * setup_bdist_egg.py: little script to build an egg. Added
2408 2413 support in the release tools as well.
2409 2414
2410 2415 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2411 2416
2412 2417 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
2413 2418 version selection (new -wxversion command line and ipythonrc
2414 2419 parameter). Patch contributed by Arnd Baecker
2415 2420 <arnd.baecker-AT-web.de>.
2416 2421
2417 2422 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2418 2423 embedded instances, for variables defined at the interactive
2419 2424 prompt of the embedded ipython. Reported by Arnd.
2420 2425
2421 2426 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
2422 2427 it can be used as a (stateful) toggle, or with a direct parameter.
2423 2428
2424 2429 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
2425 2430 could be triggered in certain cases and cause the traceback
2426 2431 printer not to work.
2427 2432
2428 2433 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
2429 2434
2430 2435 * IPython/iplib.py (_should_recompile): Small fix, closes
2431 2436 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
2432 2437
2433 2438 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
2434 2439
2435 2440 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
2436 2441 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
2437 2442 Moad for help with tracking it down.
2438 2443
2439 2444 * IPython/iplib.py (handle_auto): fix autocall handling for
2440 2445 objects which support BOTH __getitem__ and __call__ (so that f [x]
2441 2446 is left alone, instead of becoming f([x]) automatically).
2442 2447
2443 2448 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
2444 2449 Ville's patch.
2445 2450
2446 2451 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
2447 2452
2448 2453 * IPython/iplib.py (handle_auto): changed autocall semantics to
2449 2454 include 'smart' mode, where the autocall transformation is NOT
2450 2455 applied if there are no arguments on the line. This allows you to
2451 2456 just type 'foo' if foo is a callable to see its internal form,
2452 2457 instead of having it called with no arguments (typically a
2453 2458 mistake). The old 'full' autocall still exists: for that, you
2454 2459 need to set the 'autocall' parameter to 2 in your ipythonrc file.
2455 2460
2456 2461 * IPython/completer.py (Completer.attr_matches): add
2457 2462 tab-completion support for Enthoughts' traits. After a report by
2458 2463 Arnd and a patch by Prabhu.
2459 2464
2460 2465 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
2461 2466
2462 2467 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
2463 2468 Schmolck's patch to fix inspect.getinnerframes().
2464 2469
2465 2470 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
2466 2471 for embedded instances, regarding handling of namespaces and items
2467 2472 added to the __builtin__ one. Multiple embedded instances and
2468 2473 recursive embeddings should work better now (though I'm not sure
2469 2474 I've got all the corner cases fixed, that code is a bit of a brain
2470 2475 twister).
2471 2476
2472 2477 * IPython/Magic.py (magic_edit): added support to edit in-memory
2473 2478 macros (automatically creates the necessary temp files). %edit
2474 2479 also doesn't return the file contents anymore, it's just noise.
2475 2480
2476 2481 * IPython/completer.py (Completer.attr_matches): revert change to
2477 2482 complete only on attributes listed in __all__. I realized it
2478 2483 cripples the tab-completion system as a tool for exploring the
2479 2484 internals of unknown libraries (it renders any non-__all__
2480 2485 attribute off-limits). I got bit by this when trying to see
2481 2486 something inside the dis module.
2482 2487
2483 2488 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
2484 2489
2485 2490 * IPython/iplib.py (InteractiveShell.__init__): add .meta
2486 2491 namespace for users and extension writers to hold data in. This
2487 2492 follows the discussion in
2488 2493 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
2489 2494
2490 2495 * IPython/completer.py (IPCompleter.complete): small patch to help
2491 2496 tab-completion under Emacs, after a suggestion by John Barnard
2492 2497 <barnarj-AT-ccf.org>.
2493 2498
2494 2499 * IPython/Magic.py (Magic.extract_input_slices): added support for
2495 2500 the slice notation in magics to use N-M to represent numbers N...M
2496 2501 (closed endpoints). This is used by %macro and %save.
2497 2502
2498 2503 * IPython/completer.py (Completer.attr_matches): for modules which
2499 2504 define __all__, complete only on those. After a patch by Jeffrey
2500 2505 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
2501 2506 speed up this routine.
2502 2507
2503 2508 * IPython/Logger.py (Logger.log): fix a history handling bug. I
2504 2509 don't know if this is the end of it, but the behavior now is
2505 2510 certainly much more correct. Note that coupled with macros,
2506 2511 slightly surprising (at first) behavior may occur: a macro will in
2507 2512 general expand to multiple lines of input, so upon exiting, the
2508 2513 in/out counters will both be bumped by the corresponding amount
2509 2514 (as if the macro's contents had been typed interactively). Typing
2510 2515 %hist will reveal the intermediate (silently processed) lines.
2511 2516
2512 2517 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
2513 2518 pickle to fail (%run was overwriting __main__ and not restoring
2514 2519 it, but pickle relies on __main__ to operate).
2515 2520
2516 2521 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
2517 2522 using properties, but forgot to make the main InteractiveShell
2518 2523 class a new-style class. Properties fail silently, and
2519 2524 mysteriously, with old-style class (getters work, but
2520 2525 setters don't do anything).
2521 2526
2522 2527 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
2523 2528
2524 2529 * IPython/Magic.py (magic_history): fix history reporting bug (I
2525 2530 know some nasties are still there, I just can't seem to find a
2526 2531 reproducible test case to track them down; the input history is
2527 2532 falling out of sync...)
2528 2533
2529 2534 * IPython/iplib.py (handle_shell_escape): fix bug where both
2530 2535 aliases and system accesses where broken for indented code (such
2531 2536 as loops).
2532 2537
2533 2538 * IPython/genutils.py (shell): fix small but critical bug for
2534 2539 win32 system access.
2535 2540
2536 2541 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
2537 2542
2538 2543 * IPython/iplib.py (showtraceback): remove use of the
2539 2544 sys.last_{type/value/traceback} structures, which are non
2540 2545 thread-safe.
2541 2546 (_prefilter): change control flow to ensure that we NEVER
2542 2547 introspect objects when autocall is off. This will guarantee that
2543 2548 having an input line of the form 'x.y', where access to attribute
2544 2549 'y' has side effects, doesn't trigger the side effect TWICE. It
2545 2550 is important to note that, with autocall on, these side effects
2546 2551 can still happen.
2547 2552 (ipsystem): new builtin, to complete the ip{magic/alias/system}
2548 2553 trio. IPython offers these three kinds of special calls which are
2549 2554 not python code, and it's a good thing to have their call method
2550 2555 be accessible as pure python functions (not just special syntax at
2551 2556 the command line). It gives us a better internal implementation
2552 2557 structure, as well as exposing these for user scripting more
2553 2558 cleanly.
2554 2559
2555 2560 * IPython/macro.py (Macro.__init__): moved macros to a standalone
2556 2561 file. Now that they'll be more likely to be used with the
2557 2562 persistance system (%store), I want to make sure their module path
2558 2563 doesn't change in the future, so that we don't break things for
2559 2564 users' persisted data.
2560 2565
2561 2566 * IPython/iplib.py (autoindent_update): move indentation
2562 2567 management into the _text_ processing loop, not the keyboard
2563 2568 interactive one. This is necessary to correctly process non-typed
2564 2569 multiline input (such as macros).
2565 2570
2566 2571 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
2567 2572 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
2568 2573 which was producing problems in the resulting manual.
2569 2574 (magic_whos): improve reporting of instances (show their class,
2570 2575 instead of simply printing 'instance' which isn't terribly
2571 2576 informative).
2572 2577
2573 2578 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
2574 2579 (minor mods) to support network shares under win32.
2575 2580
2576 2581 * IPython/winconsole.py (get_console_size): add new winconsole
2577 2582 module and fixes to page_dumb() to improve its behavior under
2578 2583 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
2579 2584
2580 2585 * IPython/Magic.py (Macro): simplified Macro class to just
2581 2586 subclass list. We've had only 2.2 compatibility for a very long
2582 2587 time, yet I was still avoiding subclassing the builtin types. No
2583 2588 more (I'm also starting to use properties, though I won't shift to
2584 2589 2.3-specific features quite yet).
2585 2590 (magic_store): added Ville's patch for lightweight variable
2586 2591 persistence, after a request on the user list by Matt Wilkie
2587 2592 <maphew-AT-gmail.com>. The new %store magic's docstring has full
2588 2593 details.
2589 2594
2590 2595 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2591 2596 changed the default logfile name from 'ipython.log' to
2592 2597 'ipython_log.py'. These logs are real python files, and now that
2593 2598 we have much better multiline support, people are more likely to
2594 2599 want to use them as such. Might as well name them correctly.
2595 2600
2596 2601 * IPython/Magic.py: substantial cleanup. While we can't stop
2597 2602 using magics as mixins, due to the existing customizations 'out
2598 2603 there' which rely on the mixin naming conventions, at least I
2599 2604 cleaned out all cross-class name usage. So once we are OK with
2600 2605 breaking compatibility, the two systems can be separated.
2601 2606
2602 2607 * IPython/Logger.py: major cleanup. This one is NOT a mixin
2603 2608 anymore, and the class is a fair bit less hideous as well. New
2604 2609 features were also introduced: timestamping of input, and logging
2605 2610 of output results. These are user-visible with the -t and -o
2606 2611 options to %logstart. Closes
2607 2612 http://www.scipy.net/roundup/ipython/issue11 and a request by
2608 2613 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
2609 2614
2610 2615 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
2611 2616
2612 2617 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
2613 2618 better handle backslashes in paths. See the thread 'More Windows
2614 2619 questions part 2 - \/ characters revisited' on the iypthon user
2615 2620 list:
2616 2621 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
2617 2622
2618 2623 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
2619 2624
2620 2625 (InteractiveShell.__init__): change threaded shells to not use the
2621 2626 ipython crash handler. This was causing more problems than not,
2622 2627 as exceptions in the main thread (GUI code, typically) would
2623 2628 always show up as a 'crash', when they really weren't.
2624 2629
2625 2630 The colors and exception mode commands (%colors/%xmode) have been
2626 2631 synchronized to also take this into account, so users can get
2627 2632 verbose exceptions for their threaded code as well. I also added
2628 2633 support for activating pdb inside this exception handler as well,
2629 2634 so now GUI authors can use IPython's enhanced pdb at runtime.
2630 2635
2631 2636 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
2632 2637 true by default, and add it to the shipped ipythonrc file. Since
2633 2638 this asks the user before proceeding, I think it's OK to make it
2634 2639 true by default.
2635 2640
2636 2641 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
2637 2642 of the previous special-casing of input in the eval loop. I think
2638 2643 this is cleaner, as they really are commands and shouldn't have
2639 2644 a special role in the middle of the core code.
2640 2645
2641 2646 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
2642 2647
2643 2648 * IPython/iplib.py (edit_syntax_error): added support for
2644 2649 automatically reopening the editor if the file had a syntax error
2645 2650 in it. Thanks to scottt who provided the patch at:
2646 2651 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
2647 2652 version committed).
2648 2653
2649 2654 * IPython/iplib.py (handle_normal): add suport for multi-line
2650 2655 input with emtpy lines. This fixes
2651 2656 http://www.scipy.net/roundup/ipython/issue43 and a similar
2652 2657 discussion on the user list.
2653 2658
2654 2659 WARNING: a behavior change is necessarily introduced to support
2655 2660 blank lines: now a single blank line with whitespace does NOT
2656 2661 break the input loop, which means that when autoindent is on, by
2657 2662 default hitting return on the next (indented) line does NOT exit.
2658 2663
2659 2664 Instead, to exit a multiline input you can either have:
2660 2665
2661 2666 - TWO whitespace lines (just hit return again), or
2662 2667 - a single whitespace line of a different length than provided
2663 2668 by the autoindent (add or remove a space).
2664 2669
2665 2670 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
2666 2671 module to better organize all readline-related functionality.
2667 2672 I've deleted FlexCompleter and put all completion clases here.
2668 2673
2669 2674 * IPython/iplib.py (raw_input): improve indentation management.
2670 2675 It is now possible to paste indented code with autoindent on, and
2671 2676 the code is interpreted correctly (though it still looks bad on
2672 2677 screen, due to the line-oriented nature of ipython).
2673 2678 (MagicCompleter.complete): change behavior so that a TAB key on an
2674 2679 otherwise empty line actually inserts a tab, instead of completing
2675 2680 on the entire global namespace. This makes it easier to use the
2676 2681 TAB key for indentation. After a request by Hans Meine
2677 2682 <hans_meine-AT-gmx.net>
2678 2683 (_prefilter): add support so that typing plain 'exit' or 'quit'
2679 2684 does a sensible thing. Originally I tried to deviate as little as
2680 2685 possible from the default python behavior, but even that one may
2681 2686 change in this direction (thread on python-dev to that effect).
2682 2687 Regardless, ipython should do the right thing even if CPython's
2683 2688 '>>>' prompt doesn't.
2684 2689 (InteractiveShell): removed subclassing code.InteractiveConsole
2685 2690 class. By now we'd overridden just about all of its methods: I've
2686 2691 copied the remaining two over, and now ipython is a standalone
2687 2692 class. This will provide a clearer picture for the chainsaw
2688 2693 branch refactoring.
2689 2694
2690 2695 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
2691 2696
2692 2697 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
2693 2698 failures for objects which break when dir() is called on them.
2694 2699
2695 2700 * IPython/FlexCompleter.py (Completer.__init__): Added support for
2696 2701 distinct local and global namespaces in the completer API. This
2697 2702 change allows us to properly handle completion with distinct
2698 2703 scopes, including in embedded instances (this had never really
2699 2704 worked correctly).
2700 2705
2701 2706 Note: this introduces a change in the constructor for
2702 2707 MagicCompleter, as a new global_namespace parameter is now the
2703 2708 second argument (the others were bumped one position).
2704 2709
2705 2710 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
2706 2711
2707 2712 * IPython/iplib.py (embed_mainloop): fix tab-completion in
2708 2713 embedded instances (which can be done now thanks to Vivian's
2709 2714 frame-handling fixes for pdb).
2710 2715 (InteractiveShell.__init__): Fix namespace handling problem in
2711 2716 embedded instances. We were overwriting __main__ unconditionally,
2712 2717 and this should only be done for 'full' (non-embedded) IPython;
2713 2718 embedded instances must respect the caller's __main__. Thanks to
2714 2719 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
2715 2720
2716 2721 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
2717 2722
2718 2723 * setup.py: added download_url to setup(). This registers the
2719 2724 download address at PyPI, which is not only useful to humans
2720 2725 browsing the site, but is also picked up by setuptools (the Eggs
2721 2726 machinery). Thanks to Ville and R. Kern for the info/discussion
2722 2727 on this.
2723 2728
2724 2729 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
2725 2730
2726 2731 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
2727 2732 This brings a lot of nice functionality to the pdb mode, which now
2728 2733 has tab-completion, syntax highlighting, and better stack handling
2729 2734 than before. Many thanks to Vivian De Smedt
2730 2735 <vivian-AT-vdesmedt.com> for the original patches.
2731 2736
2732 2737 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
2733 2738
2734 2739 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
2735 2740 sequence to consistently accept the banner argument. The
2736 2741 inconsistency was tripping SAGE, thanks to Gary Zablackis
2737 2742 <gzabl-AT-yahoo.com> for the report.
2738 2743
2739 2744 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2740 2745
2741 2746 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2742 2747 Fix bug where a naked 'alias' call in the ipythonrc file would
2743 2748 cause a crash. Bug reported by Jorgen Stenarson.
2744 2749
2745 2750 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
2746 2751
2747 2752 * IPython/ipmaker.py (make_IPython): cleanups which should improve
2748 2753 startup time.
2749 2754
2750 2755 * IPython/iplib.py (runcode): my globals 'fix' for embedded
2751 2756 instances had introduced a bug with globals in normal code. Now
2752 2757 it's working in all cases.
2753 2758
2754 2759 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
2755 2760 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
2756 2761 has been introduced to set the default case sensitivity of the
2757 2762 searches. Users can still select either mode at runtime on a
2758 2763 per-search basis.
2759 2764
2760 2765 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
2761 2766
2762 2767 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
2763 2768 attributes in wildcard searches for subclasses. Modified version
2764 2769 of a patch by Jorgen.
2765 2770
2766 2771 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
2767 2772
2768 2773 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
2769 2774 embedded instances. I added a user_global_ns attribute to the
2770 2775 InteractiveShell class to handle this.
2771 2776
2772 2777 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
2773 2778
2774 2779 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
2775 2780 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
2776 2781 (reported under win32, but may happen also in other platforms).
2777 2782 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
2778 2783
2779 2784 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
2780 2785
2781 2786 * IPython/Magic.py (magic_psearch): new support for wildcard
2782 2787 patterns. Now, typing ?a*b will list all names which begin with a
2783 2788 and end in b, for example. The %psearch magic has full
2784 2789 docstrings. Many thanks to JΓΆrgen Stenarson
2785 2790 <jorgen.stenarson-AT-bostream.nu>, author of the patches
2786 2791 implementing this functionality.
2787 2792
2788 2793 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2789 2794
2790 2795 * Manual: fixed long-standing annoyance of double-dashes (as in
2791 2796 --prefix=~, for example) being stripped in the HTML version. This
2792 2797 is a latex2html bug, but a workaround was provided. Many thanks
2793 2798 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
2794 2799 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
2795 2800 rolling. This seemingly small issue had tripped a number of users
2796 2801 when first installing, so I'm glad to see it gone.
2797 2802
2798 2803 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
2799 2804
2800 2805 * IPython/Extensions/numeric_formats.py: fix missing import,
2801 2806 reported by Stephen Walton.
2802 2807
2803 2808 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
2804 2809
2805 2810 * IPython/demo.py: finish demo module, fully documented now.
2806 2811
2807 2812 * IPython/genutils.py (file_read): simple little utility to read a
2808 2813 file and ensure it's closed afterwards.
2809 2814
2810 2815 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
2811 2816
2812 2817 * IPython/demo.py (Demo.__init__): added support for individually
2813 2818 tagging blocks for automatic execution.
2814 2819
2815 2820 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
2816 2821 syntax-highlighted python sources, requested by John.
2817 2822
2818 2823 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
2819 2824
2820 2825 * IPython/demo.py (Demo.again): fix bug where again() blocks after
2821 2826 finishing.
2822 2827
2823 2828 * IPython/genutils.py (shlex_split): moved from Magic to here,
2824 2829 where all 2.2 compatibility stuff lives. I needed it for demo.py.
2825 2830
2826 2831 * IPython/demo.py (Demo.__init__): added support for silent
2827 2832 blocks, improved marks as regexps, docstrings written.
2828 2833 (Demo.__init__): better docstring, added support for sys.argv.
2829 2834
2830 2835 * IPython/genutils.py (marquee): little utility used by the demo
2831 2836 code, handy in general.
2832 2837
2833 2838 * IPython/demo.py (Demo.__init__): new class for interactive
2834 2839 demos. Not documented yet, I just wrote it in a hurry for
2835 2840 scipy'05. Will docstring later.
2836 2841
2837 2842 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
2838 2843
2839 2844 * IPython/Shell.py (sigint_handler): Drastic simplification which
2840 2845 also seems to make Ctrl-C work correctly across threads! This is
2841 2846 so simple, that I can't beleive I'd missed it before. Needs more
2842 2847 testing, though.
2843 2848 (KBINT): Never mind, revert changes. I'm sure I'd tried something
2844 2849 like this before...
2845 2850
2846 2851 * IPython/genutils.py (get_home_dir): add protection against
2847 2852 non-dirs in win32 registry.
2848 2853
2849 2854 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
2850 2855 bug where dict was mutated while iterating (pysh crash).
2851 2856
2852 2857 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
2853 2858
2854 2859 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
2855 2860 spurious newlines added by this routine. After a report by
2856 2861 F. Mantegazza.
2857 2862
2858 2863 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
2859 2864
2860 2865 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
2861 2866 calls. These were a leftover from the GTK 1.x days, and can cause
2862 2867 problems in certain cases (after a report by John Hunter).
2863 2868
2864 2869 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
2865 2870 os.getcwd() fails at init time. Thanks to patch from David Remahl
2866 2871 <chmod007-AT-mac.com>.
2867 2872 (InteractiveShell.__init__): prevent certain special magics from
2868 2873 being shadowed by aliases. Closes
2869 2874 http://www.scipy.net/roundup/ipython/issue41.
2870 2875
2871 2876 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2872 2877
2873 2878 * IPython/iplib.py (InteractiveShell.complete): Added new
2874 2879 top-level completion method to expose the completion mechanism
2875 2880 beyond readline-based environments.
2876 2881
2877 2882 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2878 2883
2879 2884 * tools/ipsvnc (svnversion): fix svnversion capture.
2880 2885
2881 2886 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2882 2887 attribute to self, which was missing. Before, it was set by a
2883 2888 routine which in certain cases wasn't being called, so the
2884 2889 instance could end up missing the attribute. This caused a crash.
2885 2890 Closes http://www.scipy.net/roundup/ipython/issue40.
2886 2891
2887 2892 2005-08-16 Fernando Perez <fperez@colorado.edu>
2888 2893
2889 2894 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2890 2895 contains non-string attribute. Closes
2891 2896 http://www.scipy.net/roundup/ipython/issue38.
2892 2897
2893 2898 2005-08-14 Fernando Perez <fperez@colorado.edu>
2894 2899
2895 2900 * tools/ipsvnc: Minor improvements, to add changeset info.
2896 2901
2897 2902 2005-08-12 Fernando Perez <fperez@colorado.edu>
2898 2903
2899 2904 * IPython/iplib.py (runsource): remove self.code_to_run_src
2900 2905 attribute. I realized this is nothing more than
2901 2906 '\n'.join(self.buffer), and having the same data in two different
2902 2907 places is just asking for synchronization bugs. This may impact
2903 2908 people who have custom exception handlers, so I need to warn
2904 2909 ipython-dev about it (F. Mantegazza may use them).
2905 2910
2906 2911 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2907 2912
2908 2913 * IPython/genutils.py: fix 2.2 compatibility (generators)
2909 2914
2910 2915 2005-07-18 Fernando Perez <fperez@colorado.edu>
2911 2916
2912 2917 * IPython/genutils.py (get_home_dir): fix to help users with
2913 2918 invalid $HOME under win32.
2914 2919
2915 2920 2005-07-17 Fernando Perez <fperez@colorado.edu>
2916 2921
2917 2922 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2918 2923 some old hacks and clean up a bit other routines; code should be
2919 2924 simpler and a bit faster.
2920 2925
2921 2926 * IPython/iplib.py (interact): removed some last-resort attempts
2922 2927 to survive broken stdout/stderr. That code was only making it
2923 2928 harder to abstract out the i/o (necessary for gui integration),
2924 2929 and the crashes it could prevent were extremely rare in practice
2925 2930 (besides being fully user-induced in a pretty violent manner).
2926 2931
2927 2932 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2928 2933 Nothing major yet, but the code is simpler to read; this should
2929 2934 make it easier to do more serious modifications in the future.
2930 2935
2931 2936 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2932 2937 which broke in .15 (thanks to a report by Ville).
2933 2938
2934 2939 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2935 2940 be quite correct, I know next to nothing about unicode). This
2936 2941 will allow unicode strings to be used in prompts, amongst other
2937 2942 cases. It also will prevent ipython from crashing when unicode
2938 2943 shows up unexpectedly in many places. If ascii encoding fails, we
2939 2944 assume utf_8. Currently the encoding is not a user-visible
2940 2945 setting, though it could be made so if there is demand for it.
2941 2946
2942 2947 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2943 2948
2944 2949 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2945 2950
2946 2951 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2947 2952
2948 2953 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2949 2954 code can work transparently for 2.2/2.3.
2950 2955
2951 2956 2005-07-16 Fernando Perez <fperez@colorado.edu>
2952 2957
2953 2958 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2954 2959 out of the color scheme table used for coloring exception
2955 2960 tracebacks. This allows user code to add new schemes at runtime.
2956 2961 This is a minimally modified version of the patch at
2957 2962 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2958 2963 for the contribution.
2959 2964
2960 2965 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2961 2966 slightly modified version of the patch in
2962 2967 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2963 2968 to remove the previous try/except solution (which was costlier).
2964 2969 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2965 2970
2966 2971 2005-06-08 Fernando Perez <fperez@colorado.edu>
2967 2972
2968 2973 * IPython/iplib.py (write/write_err): Add methods to abstract all
2969 2974 I/O a bit more.
2970 2975
2971 2976 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2972 2977 warning, reported by Aric Hagberg, fix by JD Hunter.
2973 2978
2974 2979 2005-06-02 *** Released version 0.6.15
2975 2980
2976 2981 2005-06-01 Fernando Perez <fperez@colorado.edu>
2977 2982
2978 2983 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2979 2984 tab-completion of filenames within open-quoted strings. Note that
2980 2985 this requires that in ~/.ipython/ipythonrc, users change the
2981 2986 readline delimiters configuration to read:
2982 2987
2983 2988 readline_remove_delims -/~
2984 2989
2985 2990
2986 2991 2005-05-31 *** Released version 0.6.14
2987 2992
2988 2993 2005-05-29 Fernando Perez <fperez@colorado.edu>
2989 2994
2990 2995 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2991 2996 with files not on the filesystem. Reported by Eliyahu Sandler
2992 2997 <eli@gondolin.net>
2993 2998
2994 2999 2005-05-22 Fernando Perez <fperez@colorado.edu>
2995 3000
2996 3001 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2997 3002 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2998 3003
2999 3004 2005-05-19 Fernando Perez <fperez@colorado.edu>
3000 3005
3001 3006 * IPython/iplib.py (safe_execfile): close a file which could be
3002 3007 left open (causing problems in win32, which locks open files).
3003 3008 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
3004 3009
3005 3010 2005-05-18 Fernando Perez <fperez@colorado.edu>
3006 3011
3007 3012 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
3008 3013 keyword arguments correctly to safe_execfile().
3009 3014
3010 3015 2005-05-13 Fernando Perez <fperez@colorado.edu>
3011 3016
3012 3017 * ipython.1: Added info about Qt to manpage, and threads warning
3013 3018 to usage page (invoked with --help).
3014 3019
3015 3020 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
3016 3021 new matcher (it goes at the end of the priority list) to do
3017 3022 tab-completion on named function arguments. Submitted by George
3018 3023 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
3019 3024 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
3020 3025 for more details.
3021 3026
3022 3027 * IPython/Magic.py (magic_run): Added new -e flag to ignore
3023 3028 SystemExit exceptions in the script being run. Thanks to a report
3024 3029 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
3025 3030 producing very annoying behavior when running unit tests.
3026 3031
3027 3032 2005-05-12 Fernando Perez <fperez@colorado.edu>
3028 3033
3029 3034 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
3030 3035 which I'd broken (again) due to a changed regexp. In the process,
3031 3036 added ';' as an escape to auto-quote the whole line without
3032 3037 splitting its arguments. Thanks to a report by Jerry McRae
3033 3038 <qrs0xyc02-AT-sneakemail.com>.
3034 3039
3035 3040 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
3036 3041 possible crashes caused by a TokenError. Reported by Ed Schofield
3037 3042 <schofield-AT-ftw.at>.
3038 3043
3039 3044 2005-05-06 Fernando Perez <fperez@colorado.edu>
3040 3045
3041 3046 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
3042 3047
3043 3048 2005-04-29 Fernando Perez <fperez@colorado.edu>
3044 3049
3045 3050 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
3046 3051 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
3047 3052 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
3048 3053 which provides support for Qt interactive usage (similar to the
3049 3054 existing one for WX and GTK). This had been often requested.
3050 3055
3051 3056 2005-04-14 *** Released version 0.6.13
3052 3057
3053 3058 2005-04-08 Fernando Perez <fperez@colorado.edu>
3054 3059
3055 3060 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
3056 3061 from _ofind, which gets called on almost every input line. Now,
3057 3062 we only try to get docstrings if they are actually going to be
3058 3063 used (the overhead of fetching unnecessary docstrings can be
3059 3064 noticeable for certain objects, such as Pyro proxies).
3060 3065
3061 3066 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
3062 3067 for completers. For some reason I had been passing them the state
3063 3068 variable, which completers never actually need, and was in
3064 3069 conflict with the rlcompleter API. Custom completers ONLY need to
3065 3070 take the text parameter.
3066 3071
3067 3072 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
3068 3073 work correctly in pysh. I've also moved all the logic which used
3069 3074 to be in pysh.py here, which will prevent problems with future
3070 3075 upgrades. However, this time I must warn users to update their
3071 3076 pysh profile to include the line
3072 3077
3073 3078 import_all IPython.Extensions.InterpreterExec
3074 3079
3075 3080 because otherwise things won't work for them. They MUST also
3076 3081 delete pysh.py and the line
3077 3082
3078 3083 execfile pysh.py
3079 3084
3080 3085 from their ipythonrc-pysh.
3081 3086
3082 3087 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
3083 3088 robust in the face of objects whose dir() returns non-strings
3084 3089 (which it shouldn't, but some broken libs like ITK do). Thanks to
3085 3090 a patch by John Hunter (implemented differently, though). Also
3086 3091 minor improvements by using .extend instead of + on lists.
3087 3092
3088 3093 * pysh.py:
3089 3094
3090 3095 2005-04-06 Fernando Perez <fperez@colorado.edu>
3091 3096
3092 3097 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
3093 3098 by default, so that all users benefit from it. Those who don't
3094 3099 want it can still turn it off.
3095 3100
3096 3101 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
3097 3102 config file, I'd forgotten about this, so users were getting it
3098 3103 off by default.
3099 3104
3100 3105 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
3101 3106 consistency. Now magics can be called in multiline statements,
3102 3107 and python variables can be expanded in magic calls via $var.
3103 3108 This makes the magic system behave just like aliases or !system
3104 3109 calls.
3105 3110
3106 3111 2005-03-28 Fernando Perez <fperez@colorado.edu>
3107 3112
3108 3113 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
3109 3114 expensive string additions for building command. Add support for
3110 3115 trailing ';' when autocall is used.
3111 3116
3112 3117 2005-03-26 Fernando Perez <fperez@colorado.edu>
3113 3118
3114 3119 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
3115 3120 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
3116 3121 ipython.el robust against prompts with any number of spaces
3117 3122 (including 0) after the ':' character.
3118 3123
3119 3124 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
3120 3125 continuation prompt, which misled users to think the line was
3121 3126 already indented. Closes debian Bug#300847, reported to me by
3122 3127 Norbert Tretkowski <tretkowski-AT-inittab.de>.
3123 3128
3124 3129 2005-03-23 Fernando Perez <fperez@colorado.edu>
3125 3130
3126 3131 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
3127 3132 properly aligned if they have embedded newlines.
3128 3133
3129 3134 * IPython/iplib.py (runlines): Add a public method to expose
3130 3135 IPython's code execution machinery, so that users can run strings
3131 3136 as if they had been typed at the prompt interactively.
3132 3137 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
3133 3138 methods which can call the system shell, but with python variable
3134 3139 expansion. The three such methods are: __IPYTHON__.system,
3135 3140 .getoutput and .getoutputerror. These need to be documented in a
3136 3141 'public API' section (to be written) of the manual.
3137 3142
3138 3143 2005-03-20 Fernando Perez <fperez@colorado.edu>
3139 3144
3140 3145 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
3141 3146 for custom exception handling. This is quite powerful, and it
3142 3147 allows for user-installable exception handlers which can trap
3143 3148 custom exceptions at runtime and treat them separately from
3144 3149 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
3145 3150 Mantegazza <mantegazza-AT-ill.fr>.
3146 3151 (InteractiveShell.set_custom_completer): public API function to
3147 3152 add new completers at runtime.
3148 3153
3149 3154 2005-03-19 Fernando Perez <fperez@colorado.edu>
3150 3155
3151 3156 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
3152 3157 allow objects which provide their docstrings via non-standard
3153 3158 mechanisms (like Pyro proxies) to still be inspected by ipython's
3154 3159 ? system.
3155 3160
3156 3161 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
3157 3162 automatic capture system. I tried quite hard to make it work
3158 3163 reliably, and simply failed. I tried many combinations with the
3159 3164 subprocess module, but eventually nothing worked in all needed
3160 3165 cases (not blocking stdin for the child, duplicating stdout
3161 3166 without blocking, etc). The new %sc/%sx still do capture to these
3162 3167 magical list/string objects which make shell use much more
3163 3168 conveninent, so not all is lost.
3164 3169
3165 3170 XXX - FIX MANUAL for the change above!
3166 3171
3167 3172 (runsource): I copied code.py's runsource() into ipython to modify
3168 3173 it a bit. Now the code object and source to be executed are
3169 3174 stored in ipython. This makes this info accessible to third-party
3170 3175 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
3171 3176 Mantegazza <mantegazza-AT-ill.fr>.
3172 3177
3173 3178 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
3174 3179 history-search via readline (like C-p/C-n). I'd wanted this for a
3175 3180 long time, but only recently found out how to do it. For users
3176 3181 who already have their ipythonrc files made and want this, just
3177 3182 add:
3178 3183
3179 3184 readline_parse_and_bind "\e[A": history-search-backward
3180 3185 readline_parse_and_bind "\e[B": history-search-forward
3181 3186
3182 3187 2005-03-18 Fernando Perez <fperez@colorado.edu>
3183 3188
3184 3189 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
3185 3190 LSString and SList classes which allow transparent conversions
3186 3191 between list mode and whitespace-separated string.
3187 3192 (magic_r): Fix recursion problem in %r.
3188 3193
3189 3194 * IPython/genutils.py (LSString): New class to be used for
3190 3195 automatic storage of the results of all alias/system calls in _o
3191 3196 and _e (stdout/err). These provide a .l/.list attribute which
3192 3197 does automatic splitting on newlines. This means that for most
3193 3198 uses, you'll never need to do capturing of output with %sc/%sx
3194 3199 anymore, since ipython keeps this always done for you. Note that
3195 3200 only the LAST results are stored, the _o/e variables are
3196 3201 overwritten on each call. If you need to save their contents
3197 3202 further, simply bind them to any other name.
3198 3203
3199 3204 2005-03-17 Fernando Perez <fperez@colorado.edu>
3200 3205
3201 3206 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
3202 3207 prompt namespace handling.
3203 3208
3204 3209 2005-03-16 Fernando Perez <fperez@colorado.edu>
3205 3210
3206 3211 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
3207 3212 classic prompts to be '>>> ' (final space was missing, and it
3208 3213 trips the emacs python mode).
3209 3214 (BasePrompt.__str__): Added safe support for dynamic prompt
3210 3215 strings. Now you can set your prompt string to be '$x', and the
3211 3216 value of x will be printed from your interactive namespace. The
3212 3217 interpolation syntax includes the full Itpl support, so
3213 3218 ${foo()+x+bar()} is a valid prompt string now, and the function
3214 3219 calls will be made at runtime.
3215 3220
3216 3221 2005-03-15 Fernando Perez <fperez@colorado.edu>
3217 3222
3218 3223 * IPython/Magic.py (magic_history): renamed %hist to %history, to
3219 3224 avoid name clashes in pylab. %hist still works, it just forwards
3220 3225 the call to %history.
3221 3226
3222 3227 2005-03-02 *** Released version 0.6.12
3223 3228
3224 3229 2005-03-02 Fernando Perez <fperez@colorado.edu>
3225 3230
3226 3231 * IPython/iplib.py (handle_magic): log magic calls properly as
3227 3232 ipmagic() function calls.
3228 3233
3229 3234 * IPython/Magic.py (magic_time): Improved %time to support
3230 3235 statements and provide wall-clock as well as CPU time.
3231 3236
3232 3237 2005-02-27 Fernando Perez <fperez@colorado.edu>
3233 3238
3234 3239 * IPython/hooks.py: New hooks module, to expose user-modifiable
3235 3240 IPython functionality in a clean manner. For now only the editor
3236 3241 hook is actually written, and other thigns which I intend to turn
3237 3242 into proper hooks aren't yet there. The display and prefilter
3238 3243 stuff, for example, should be hooks. But at least now the
3239 3244 framework is in place, and the rest can be moved here with more
3240 3245 time later. IPython had had a .hooks variable for a long time for
3241 3246 this purpose, but I'd never actually used it for anything.
3242 3247
3243 3248 2005-02-26 Fernando Perez <fperez@colorado.edu>
3244 3249
3245 3250 * IPython/ipmaker.py (make_IPython): make the default ipython
3246 3251 directory be called _ipython under win32, to follow more the
3247 3252 naming peculiarities of that platform (where buggy software like
3248 3253 Visual Sourcesafe breaks with .named directories). Reported by
3249 3254 Ville Vainio.
3250 3255
3251 3256 2005-02-23 Fernando Perez <fperez@colorado.edu>
3252 3257
3253 3258 * IPython/iplib.py (InteractiveShell.__init__): removed a few
3254 3259 auto_aliases for win32 which were causing problems. Users can
3255 3260 define the ones they personally like.
3256 3261
3257 3262 2005-02-21 Fernando Perez <fperez@colorado.edu>
3258 3263
3259 3264 * IPython/Magic.py (magic_time): new magic to time execution of
3260 3265 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
3261 3266
3262 3267 2005-02-19 Fernando Perez <fperez@colorado.edu>
3263 3268
3264 3269 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
3265 3270 into keys (for prompts, for example).
3266 3271
3267 3272 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
3268 3273 prompts in case users want them. This introduces a small behavior
3269 3274 change: ipython does not automatically add a space to all prompts
3270 3275 anymore. To get the old prompts with a space, users should add it
3271 3276 manually to their ipythonrc file, so for example prompt_in1 should
3272 3277 now read 'In [\#]: ' instead of 'In [\#]:'.
3273 3278 (BasePrompt.__init__): New option prompts_pad_left (only in rc
3274 3279 file) to control left-padding of secondary prompts.
3275 3280
3276 3281 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
3277 3282 the profiler can't be imported. Fix for Debian, which removed
3278 3283 profile.py because of License issues. I applied a slightly
3279 3284 modified version of the original Debian patch at
3280 3285 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
3281 3286
3282 3287 2005-02-17 Fernando Perez <fperez@colorado.edu>
3283 3288
3284 3289 * IPython/genutils.py (native_line_ends): Fix bug which would
3285 3290 cause improper line-ends under win32 b/c I was not opening files
3286 3291 in binary mode. Bug report and fix thanks to Ville.
3287 3292
3288 3293 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
3289 3294 trying to catch spurious foo[1] autocalls. My fix actually broke
3290 3295 ',/' autoquote/call with explicit escape (bad regexp).
3291 3296
3292 3297 2005-02-15 *** Released version 0.6.11
3293 3298
3294 3299 2005-02-14 Fernando Perez <fperez@colorado.edu>
3295 3300
3296 3301 * IPython/background_jobs.py: New background job management
3297 3302 subsystem. This is implemented via a new set of classes, and
3298 3303 IPython now provides a builtin 'jobs' object for background job
3299 3304 execution. A convenience %bg magic serves as a lightweight
3300 3305 frontend for starting the more common type of calls. This was
3301 3306 inspired by discussions with B. Granger and the BackgroundCommand
3302 3307 class described in the book Python Scripting for Computational
3303 3308 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
3304 3309 (although ultimately no code from this text was used, as IPython's
3305 3310 system is a separate implementation).
3306 3311
3307 3312 * IPython/iplib.py (MagicCompleter.python_matches): add new option
3308 3313 to control the completion of single/double underscore names
3309 3314 separately. As documented in the example ipytonrc file, the
3310 3315 readline_omit__names variable can now be set to 2, to omit even
3311 3316 single underscore names. Thanks to a patch by Brian Wong
3312 3317 <BrianWong-AT-AirgoNetworks.Com>.
3313 3318 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
3314 3319 be autocalled as foo([1]) if foo were callable. A problem for
3315 3320 things which are both callable and implement __getitem__.
3316 3321 (init_readline): Fix autoindentation for win32. Thanks to a patch
3317 3322 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
3318 3323
3319 3324 2005-02-12 Fernando Perez <fperez@colorado.edu>
3320 3325
3321 3326 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
3322 3327 which I had written long ago to sort out user error messages which
3323 3328 may occur during startup. This seemed like a good idea initially,
3324 3329 but it has proven a disaster in retrospect. I don't want to
3325 3330 change much code for now, so my fix is to set the internal 'debug'
3326 3331 flag to true everywhere, whose only job was precisely to control
3327 3332 this subsystem. This closes issue 28 (as well as avoiding all
3328 3333 sorts of strange hangups which occur from time to time).
3329 3334
3330 3335 2005-02-07 Fernando Perez <fperez@colorado.edu>
3331 3336
3332 3337 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
3333 3338 previous call produced a syntax error.
3334 3339
3335 3340 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3336 3341 classes without constructor.
3337 3342
3338 3343 2005-02-06 Fernando Perez <fperez@colorado.edu>
3339 3344
3340 3345 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
3341 3346 completions with the results of each matcher, so we return results
3342 3347 to the user from all namespaces. This breaks with ipython
3343 3348 tradition, but I think it's a nicer behavior. Now you get all
3344 3349 possible completions listed, from all possible namespaces (python,
3345 3350 filesystem, magics...) After a request by John Hunter
3346 3351 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3347 3352
3348 3353 2005-02-05 Fernando Perez <fperez@colorado.edu>
3349 3354
3350 3355 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
3351 3356 the call had quote characters in it (the quotes were stripped).
3352 3357
3353 3358 2005-01-31 Fernando Perez <fperez@colorado.edu>
3354 3359
3355 3360 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
3356 3361 Itpl.itpl() to make the code more robust against psyco
3357 3362 optimizations.
3358 3363
3359 3364 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
3360 3365 of causing an exception. Quicker, cleaner.
3361 3366
3362 3367 2005-01-28 Fernando Perez <fperez@colorado.edu>
3363 3368
3364 3369 * scripts/ipython_win_post_install.py (install): hardcode
3365 3370 sys.prefix+'python.exe' as the executable path. It turns out that
3366 3371 during the post-installation run, sys.executable resolves to the
3367 3372 name of the binary installer! I should report this as a distutils
3368 3373 bug, I think. I updated the .10 release with this tiny fix, to
3369 3374 avoid annoying the lists further.
3370 3375
3371 3376 2005-01-27 *** Released version 0.6.10
3372 3377
3373 3378 2005-01-27 Fernando Perez <fperez@colorado.edu>
3374 3379
3375 3380 * IPython/numutils.py (norm): Added 'inf' as optional name for
3376 3381 L-infinity norm, included references to mathworld.com for vector
3377 3382 norm definitions.
3378 3383 (amin/amax): added amin/amax for array min/max. Similar to what
3379 3384 pylab ships with after the recent reorganization of names.
3380 3385 (spike/spike_odd): removed deprecated spike/spike_odd functions.
3381 3386
3382 3387 * ipython.el: committed Alex's recent fixes and improvements.
3383 3388 Tested with python-mode from CVS, and it looks excellent. Since
3384 3389 python-mode hasn't released anything in a while, I'm temporarily
3385 3390 putting a copy of today's CVS (v 4.70) of python-mode in:
3386 3391 http://ipython.scipy.org/tmp/python-mode.el
3387 3392
3388 3393 * scripts/ipython_win_post_install.py (install): Win32 fix to use
3389 3394 sys.executable for the executable name, instead of assuming it's
3390 3395 called 'python.exe' (the post-installer would have produced broken
3391 3396 setups on systems with a differently named python binary).
3392 3397
3393 3398 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
3394 3399 references to os.linesep, to make the code more
3395 3400 platform-independent. This is also part of the win32 coloring
3396 3401 fixes.
3397 3402
3398 3403 * IPython/genutils.py (page_dumb): Remove attempts to chop long
3399 3404 lines, which actually cause coloring bugs because the length of
3400 3405 the line is very difficult to correctly compute with embedded
3401 3406 escapes. This was the source of all the coloring problems under
3402 3407 Win32. I think that _finally_, Win32 users have a properly
3403 3408 working ipython in all respects. This would never have happened
3404 3409 if not for Gary Bishop and Viktor Ransmayr's great help and work.
3405 3410
3406 3411 2005-01-26 *** Released version 0.6.9
3407 3412
3408 3413 2005-01-25 Fernando Perez <fperez@colorado.edu>
3409 3414
3410 3415 * setup.py: finally, we have a true Windows installer, thanks to
3411 3416 the excellent work of Viktor Ransmayr
3412 3417 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
3413 3418 Windows users. The setup routine is quite a bit cleaner thanks to
3414 3419 this, and the post-install script uses the proper functions to
3415 3420 allow a clean de-installation using the standard Windows Control
3416 3421 Panel.
3417 3422
3418 3423 * IPython/genutils.py (get_home_dir): changed to use the $HOME
3419 3424 environment variable under all OSes (including win32) if
3420 3425 available. This will give consistency to win32 users who have set
3421 3426 this variable for any reason. If os.environ['HOME'] fails, the
3422 3427 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
3423 3428
3424 3429 2005-01-24 Fernando Perez <fperez@colorado.edu>
3425 3430
3426 3431 * IPython/numutils.py (empty_like): add empty_like(), similar to
3427 3432 zeros_like() but taking advantage of the new empty() Numeric routine.
3428 3433
3429 3434 2005-01-23 *** Released version 0.6.8
3430 3435
3431 3436 2005-01-22 Fernando Perez <fperez@colorado.edu>
3432 3437
3433 3438 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
3434 3439 automatic show() calls. After discussing things with JDH, it
3435 3440 turns out there are too many corner cases where this can go wrong.
3436 3441 It's best not to try to be 'too smart', and simply have ipython
3437 3442 reproduce as much as possible the default behavior of a normal
3438 3443 python shell.
3439 3444
3440 3445 * IPython/iplib.py (InteractiveShell.__init__): Modified the
3441 3446 line-splitting regexp and _prefilter() to avoid calling getattr()
3442 3447 on assignments. This closes
3443 3448 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
3444 3449 readline uses getattr(), so a simple <TAB> keypress is still
3445 3450 enough to trigger getattr() calls on an object.
3446 3451
3447 3452 2005-01-21 Fernando Perez <fperez@colorado.edu>
3448 3453
3449 3454 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
3450 3455 docstring under pylab so it doesn't mask the original.
3451 3456
3452 3457 2005-01-21 *** Released version 0.6.7
3453 3458
3454 3459 2005-01-21 Fernando Perez <fperez@colorado.edu>
3455 3460
3456 3461 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
3457 3462 signal handling for win32 users in multithreaded mode.
3458 3463
3459 3464 2005-01-17 Fernando Perez <fperez@colorado.edu>
3460 3465
3461 3466 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
3462 3467 instances with no __init__. After a crash report by Norbert Nemec
3463 3468 <Norbert-AT-nemec-online.de>.
3464 3469
3465 3470 2005-01-14 Fernando Perez <fperez@colorado.edu>
3466 3471
3467 3472 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
3468 3473 names for verbose exceptions, when multiple dotted names and the
3469 3474 'parent' object were present on the same line.
3470 3475
3471 3476 2005-01-11 Fernando Perez <fperez@colorado.edu>
3472 3477
3473 3478 * IPython/genutils.py (flag_calls): new utility to trap and flag
3474 3479 calls in functions. I need it to clean up matplotlib support.
3475 3480 Also removed some deprecated code in genutils.
3476 3481
3477 3482 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
3478 3483 that matplotlib scripts called with %run, which don't call show()
3479 3484 themselves, still have their plotting windows open.
3480 3485
3481 3486 2005-01-05 Fernando Perez <fperez@colorado.edu>
3482 3487
3483 3488 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
3484 3489 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
3485 3490
3486 3491 2004-12-19 Fernando Perez <fperez@colorado.edu>
3487 3492
3488 3493 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
3489 3494 parent_runcode, which was an eyesore. The same result can be
3490 3495 obtained with Python's regular superclass mechanisms.
3491 3496
3492 3497 2004-12-17 Fernando Perez <fperez@colorado.edu>
3493 3498
3494 3499 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
3495 3500 reported by Prabhu.
3496 3501 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
3497 3502 sys.stderr) instead of explicitly calling sys.stderr. This helps
3498 3503 maintain our I/O abstractions clean, for future GUI embeddings.
3499 3504
3500 3505 * IPython/genutils.py (info): added new utility for sys.stderr
3501 3506 unified info message handling (thin wrapper around warn()).
3502 3507
3503 3508 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
3504 3509 composite (dotted) names on verbose exceptions.
3505 3510 (VerboseTB.nullrepr): harden against another kind of errors which
3506 3511 Python's inspect module can trigger, and which were crashing
3507 3512 IPython. Thanks to a report by Marco Lombardi
3508 3513 <mlombard-AT-ma010192.hq.eso.org>.
3509 3514
3510 3515 2004-12-13 *** Released version 0.6.6
3511 3516
3512 3517 2004-12-12 Fernando Perez <fperez@colorado.edu>
3513 3518
3514 3519 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
3515 3520 generated by pygtk upon initialization if it was built without
3516 3521 threads (for matplotlib users). After a crash reported by
3517 3522 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
3518 3523
3519 3524 * IPython/ipmaker.py (make_IPython): fix small bug in the
3520 3525 import_some parameter for multiple imports.
3521 3526
3522 3527 * IPython/iplib.py (ipmagic): simplified the interface of
3523 3528 ipmagic() to take a single string argument, just as it would be
3524 3529 typed at the IPython cmd line.
3525 3530 (ipalias): Added new ipalias() with an interface identical to
3526 3531 ipmagic(). This completes exposing a pure python interface to the
3527 3532 alias and magic system, which can be used in loops or more complex
3528 3533 code where IPython's automatic line mangling is not active.
3529 3534
3530 3535 * IPython/genutils.py (timing): changed interface of timing to
3531 3536 simply run code once, which is the most common case. timings()
3532 3537 remains unchanged, for the cases where you want multiple runs.
3533 3538
3534 3539 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
3535 3540 bug where Python2.2 crashes with exec'ing code which does not end
3536 3541 in a single newline. Python 2.3 is OK, so I hadn't noticed this
3537 3542 before.
3538 3543
3539 3544 2004-12-10 Fernando Perez <fperez@colorado.edu>
3540 3545
3541 3546 * IPython/Magic.py (Magic.magic_prun): changed name of option from
3542 3547 -t to -T, to accomodate the new -t flag in %run (the %run and
3543 3548 %prun options are kind of intermixed, and it's not easy to change
3544 3549 this with the limitations of python's getopt).
3545 3550
3546 3551 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
3547 3552 the execution of scripts. It's not as fine-tuned as timeit.py,
3548 3553 but it works from inside ipython (and under 2.2, which lacks
3549 3554 timeit.py). Optionally a number of runs > 1 can be given for
3550 3555 timing very short-running code.
3551 3556
3552 3557 * IPython/genutils.py (uniq_stable): new routine which returns a
3553 3558 list of unique elements in any iterable, but in stable order of
3554 3559 appearance. I needed this for the ultraTB fixes, and it's a handy
3555 3560 utility.
3556 3561
3557 3562 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
3558 3563 dotted names in Verbose exceptions. This had been broken since
3559 3564 the very start, now x.y will properly be printed in a Verbose
3560 3565 traceback, instead of x being shown and y appearing always as an
3561 3566 'undefined global'. Getting this to work was a bit tricky,
3562 3567 because by default python tokenizers are stateless. Saved by
3563 3568 python's ability to easily add a bit of state to an arbitrary
3564 3569 function (without needing to build a full-blown callable object).
3565 3570
3566 3571 Also big cleanup of this code, which had horrendous runtime
3567 3572 lookups of zillions of attributes for colorization. Moved all
3568 3573 this code into a few templates, which make it cleaner and quicker.
3569 3574
3570 3575 Printout quality was also improved for Verbose exceptions: one
3571 3576 variable per line, and memory addresses are printed (this can be
3572 3577 quite handy in nasty debugging situations, which is what Verbose
3573 3578 is for).
3574 3579
3575 3580 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
3576 3581 the command line as scripts to be loaded by embedded instances.
3577 3582 Doing so has the potential for an infinite recursion if there are
3578 3583 exceptions thrown in the process. This fixes a strange crash
3579 3584 reported by Philippe MULLER <muller-AT-irit.fr>.
3580 3585
3581 3586 2004-12-09 Fernando Perez <fperez@colorado.edu>
3582 3587
3583 3588 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
3584 3589 to reflect new names in matplotlib, which now expose the
3585 3590 matlab-compatible interface via a pylab module instead of the
3586 3591 'matlab' name. The new code is backwards compatible, so users of
3587 3592 all matplotlib versions are OK. Patch by J. Hunter.
3588 3593
3589 3594 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
3590 3595 of __init__ docstrings for instances (class docstrings are already
3591 3596 automatically printed). Instances with customized docstrings
3592 3597 (indep. of the class) are also recognized and all 3 separate
3593 3598 docstrings are printed (instance, class, constructor). After some
3594 3599 comments/suggestions by J. Hunter.
3595 3600
3596 3601 2004-12-05 Fernando Perez <fperez@colorado.edu>
3597 3602
3598 3603 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
3599 3604 warnings when tab-completion fails and triggers an exception.
3600 3605
3601 3606 2004-12-03 Fernando Perez <fperez@colorado.edu>
3602 3607
3603 3608 * IPython/Magic.py (magic_prun): Fix bug where an exception would
3604 3609 be triggered when using 'run -p'. An incorrect option flag was
3605 3610 being set ('d' instead of 'D').
3606 3611 (manpage): fix missing escaped \- sign.
3607 3612
3608 3613 2004-11-30 *** Released version 0.6.5
3609 3614
3610 3615 2004-11-30 Fernando Perez <fperez@colorado.edu>
3611 3616
3612 3617 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
3613 3618 setting with -d option.
3614 3619
3615 3620 * setup.py (docfiles): Fix problem where the doc glob I was using
3616 3621 was COMPLETELY BROKEN. It was giving the right files by pure
3617 3622 accident, but failed once I tried to include ipython.el. Note:
3618 3623 glob() does NOT allow you to do exclusion on multiple endings!
3619 3624
3620 3625 2004-11-29 Fernando Perez <fperez@colorado.edu>
3621 3626
3622 3627 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
3623 3628 the manpage as the source. Better formatting & consistency.
3624 3629
3625 3630 * IPython/Magic.py (magic_run): Added new -d option, to run
3626 3631 scripts under the control of the python pdb debugger. Note that
3627 3632 this required changing the %prun option -d to -D, to avoid a clash
3628 3633 (since %run must pass options to %prun, and getopt is too dumb to
3629 3634 handle options with string values with embedded spaces). Thanks
3630 3635 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
3631 3636 (magic_who_ls): added type matching to %who and %whos, so that one
3632 3637 can filter their output to only include variables of certain
3633 3638 types. Another suggestion by Matthew.
3634 3639 (magic_whos): Added memory summaries in kb and Mb for arrays.
3635 3640 (magic_who): Improve formatting (break lines every 9 vars).
3636 3641
3637 3642 2004-11-28 Fernando Perez <fperez@colorado.edu>
3638 3643
3639 3644 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
3640 3645 cache when empty lines were present.
3641 3646
3642 3647 2004-11-24 Fernando Perez <fperez@colorado.edu>
3643 3648
3644 3649 * IPython/usage.py (__doc__): document the re-activated threading
3645 3650 options for WX and GTK.
3646 3651
3647 3652 2004-11-23 Fernando Perez <fperez@colorado.edu>
3648 3653
3649 3654 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
3650 3655 the -wthread and -gthread options, along with a new -tk one to try
3651 3656 and coordinate Tk threading with wx/gtk. The tk support is very
3652 3657 platform dependent, since it seems to require Tcl and Tk to be
3653 3658 built with threads (Fedora1/2 appears NOT to have it, but in
3654 3659 Prabhu's Debian boxes it works OK). But even with some Tk
3655 3660 limitations, this is a great improvement.
3656 3661
3657 3662 * IPython/Prompts.py (prompt_specials_color): Added \t for time
3658 3663 info in user prompts. Patch by Prabhu.
3659 3664
3660 3665 2004-11-18 Fernando Perez <fperez@colorado.edu>
3661 3666
3662 3667 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
3663 3668 EOFErrors and bail, to avoid infinite loops if a non-terminating
3664 3669 file is fed into ipython. Patch submitted in issue 19 by user,
3665 3670 many thanks.
3666 3671
3667 3672 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
3668 3673 autoquote/parens in continuation prompts, which can cause lots of
3669 3674 problems. Closes roundup issue 20.
3670 3675
3671 3676 2004-11-17 Fernando Perez <fperez@colorado.edu>
3672 3677
3673 3678 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
3674 3679 reported as debian bug #280505. I'm not sure my local changelog
3675 3680 entry has the proper debian format (Jack?).
3676 3681
3677 3682 2004-11-08 *** Released version 0.6.4
3678 3683
3679 3684 2004-11-08 Fernando Perez <fperez@colorado.edu>
3680 3685
3681 3686 * IPython/iplib.py (init_readline): Fix exit message for Windows
3682 3687 when readline is active. Thanks to a report by Eric Jones
3683 3688 <eric-AT-enthought.com>.
3684 3689
3685 3690 2004-11-07 Fernando Perez <fperez@colorado.edu>
3686 3691
3687 3692 * IPython/genutils.py (page): Add a trap for OSError exceptions,
3688 3693 sometimes seen by win2k/cygwin users.
3689 3694
3690 3695 2004-11-06 Fernando Perez <fperez@colorado.edu>
3691 3696
3692 3697 * IPython/iplib.py (interact): Change the handling of %Exit from
3693 3698 trying to propagate a SystemExit to an internal ipython flag.
3694 3699 This is less elegant than using Python's exception mechanism, but
3695 3700 I can't get that to work reliably with threads, so under -pylab
3696 3701 %Exit was hanging IPython. Cross-thread exception handling is
3697 3702 really a bitch. Thaks to a bug report by Stephen Walton
3698 3703 <stephen.walton-AT-csun.edu>.
3699 3704
3700 3705 2004-11-04 Fernando Perez <fperez@colorado.edu>
3701 3706
3702 3707 * IPython/iplib.py (raw_input_original): store a pointer to the
3703 3708 true raw_input to harden against code which can modify it
3704 3709 (wx.py.PyShell does this and would otherwise crash ipython).
3705 3710 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
3706 3711
3707 3712 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
3708 3713 Ctrl-C problem, which does not mess up the input line.
3709 3714
3710 3715 2004-11-03 Fernando Perez <fperez@colorado.edu>
3711 3716
3712 3717 * IPython/Release.py: Changed licensing to BSD, in all files.
3713 3718 (name): lowercase name for tarball/RPM release.
3714 3719
3715 3720 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
3716 3721 use throughout ipython.
3717 3722
3718 3723 * IPython/Magic.py (Magic._ofind): Switch to using the new
3719 3724 OInspect.getdoc() function.
3720 3725
3721 3726 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
3722 3727 of the line currently being canceled via Ctrl-C. It's extremely
3723 3728 ugly, but I don't know how to do it better (the problem is one of
3724 3729 handling cross-thread exceptions).
3725 3730
3726 3731 2004-10-28 Fernando Perez <fperez@colorado.edu>
3727 3732
3728 3733 * IPython/Shell.py (signal_handler): add signal handlers to trap
3729 3734 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
3730 3735 report by Francesc Alted.
3731 3736
3732 3737 2004-10-21 Fernando Perez <fperez@colorado.edu>
3733 3738
3734 3739 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
3735 3740 to % for pysh syntax extensions.
3736 3741
3737 3742 2004-10-09 Fernando Perez <fperez@colorado.edu>
3738 3743
3739 3744 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
3740 3745 arrays to print a more useful summary, without calling str(arr).
3741 3746 This avoids the problem of extremely lengthy computations which
3742 3747 occur if arr is large, and appear to the user as a system lockup
3743 3748 with 100% cpu activity. After a suggestion by Kristian Sandberg
3744 3749 <Kristian.Sandberg@colorado.edu>.
3745 3750 (Magic.__init__): fix bug in global magic escapes not being
3746 3751 correctly set.
3747 3752
3748 3753 2004-10-08 Fernando Perez <fperez@colorado.edu>
3749 3754
3750 3755 * IPython/Magic.py (__license__): change to absolute imports of
3751 3756 ipython's own internal packages, to start adapting to the absolute
3752 3757 import requirement of PEP-328.
3753 3758
3754 3759 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
3755 3760 files, and standardize author/license marks through the Release
3756 3761 module instead of having per/file stuff (except for files with
3757 3762 particular licenses, like the MIT/PSF-licensed codes).
3758 3763
3759 3764 * IPython/Debugger.py: remove dead code for python 2.1
3760 3765
3761 3766 2004-10-04 Fernando Perez <fperez@colorado.edu>
3762 3767
3763 3768 * IPython/iplib.py (ipmagic): New function for accessing magics
3764 3769 via a normal python function call.
3765 3770
3766 3771 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
3767 3772 from '@' to '%', to accomodate the new @decorator syntax of python
3768 3773 2.4.
3769 3774
3770 3775 2004-09-29 Fernando Perez <fperez@colorado.edu>
3771 3776
3772 3777 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
3773 3778 matplotlib.use to prevent running scripts which try to switch
3774 3779 interactive backends from within ipython. This will just crash
3775 3780 the python interpreter, so we can't allow it (but a detailed error
3776 3781 is given to the user).
3777 3782
3778 3783 2004-09-28 Fernando Perez <fperez@colorado.edu>
3779 3784
3780 3785 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
3781 3786 matplotlib-related fixes so that using @run with non-matplotlib
3782 3787 scripts doesn't pop up spurious plot windows. This requires
3783 3788 matplotlib >= 0.63, where I had to make some changes as well.
3784 3789
3785 3790 * IPython/ipmaker.py (make_IPython): update version requirement to
3786 3791 python 2.2.
3787 3792
3788 3793 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
3789 3794 banner arg for embedded customization.
3790 3795
3791 3796 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
3792 3797 explicit uses of __IP as the IPython's instance name. Now things
3793 3798 are properly handled via the shell.name value. The actual code
3794 3799 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
3795 3800 is much better than before. I'll clean things completely when the
3796 3801 magic stuff gets a real overhaul.
3797 3802
3798 3803 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
3799 3804 minor changes to debian dir.
3800 3805
3801 3806 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
3802 3807 pointer to the shell itself in the interactive namespace even when
3803 3808 a user-supplied dict is provided. This is needed for embedding
3804 3809 purposes (found by tests with Michel Sanner).
3805 3810
3806 3811 2004-09-27 Fernando Perez <fperez@colorado.edu>
3807 3812
3808 3813 * IPython/UserConfig/ipythonrc: remove []{} from
3809 3814 readline_remove_delims, so that things like [modname.<TAB> do
3810 3815 proper completion. This disables [].TAB, but that's a less common
3811 3816 case than module names in list comprehensions, for example.
3812 3817 Thanks to a report by Andrea Riciputi.
3813 3818
3814 3819 2004-09-09 Fernando Perez <fperez@colorado.edu>
3815 3820
3816 3821 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
3817 3822 blocking problems in win32 and osx. Fix by John.
3818 3823
3819 3824 2004-09-08 Fernando Perez <fperez@colorado.edu>
3820 3825
3821 3826 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
3822 3827 for Win32 and OSX. Fix by John Hunter.
3823 3828
3824 3829 2004-08-30 *** Released version 0.6.3
3825 3830
3826 3831 2004-08-30 Fernando Perez <fperez@colorado.edu>
3827 3832
3828 3833 * setup.py (isfile): Add manpages to list of dependent files to be
3829 3834 updated.
3830 3835
3831 3836 2004-08-27 Fernando Perez <fperez@colorado.edu>
3832 3837
3833 3838 * IPython/Shell.py (start): I've disabled -wthread and -gthread
3834 3839 for now. They don't really work with standalone WX/GTK code
3835 3840 (though matplotlib IS working fine with both of those backends).
3836 3841 This will neeed much more testing. I disabled most things with
3837 3842 comments, so turning it back on later should be pretty easy.
3838 3843
3839 3844 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
3840 3845 autocalling of expressions like r'foo', by modifying the line
3841 3846 split regexp. Closes
3842 3847 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
3843 3848 Riley <ipythonbugs-AT-sabi.net>.
3844 3849 (InteractiveShell.mainloop): honor --nobanner with banner
3845 3850 extensions.
3846 3851
3847 3852 * IPython/Shell.py: Significant refactoring of all classes, so
3848 3853 that we can really support ALL matplotlib backends and threading
3849 3854 models (John spotted a bug with Tk which required this). Now we
3850 3855 should support single-threaded, WX-threads and GTK-threads, both
3851 3856 for generic code and for matplotlib.
3852 3857
3853 3858 * IPython/ipmaker.py (__call__): Changed -mpthread option to
3854 3859 -pylab, to simplify things for users. Will also remove the pylab
3855 3860 profile, since now all of matplotlib configuration is directly
3856 3861 handled here. This also reduces startup time.
3857 3862
3858 3863 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
3859 3864 shell wasn't being correctly called. Also in IPShellWX.
3860 3865
3861 3866 * IPython/iplib.py (InteractiveShell.__init__): Added option to
3862 3867 fine-tune banner.
3863 3868
3864 3869 * IPython/numutils.py (spike): Deprecate these spike functions,
3865 3870 delete (long deprecated) gnuplot_exec handler.
3866 3871
3867 3872 2004-08-26 Fernando Perez <fperez@colorado.edu>
3868 3873
3869 3874 * ipython.1: Update for threading options, plus some others which
3870 3875 were missing.
3871 3876
3872 3877 * IPython/ipmaker.py (__call__): Added -wthread option for
3873 3878 wxpython thread handling. Make sure threading options are only
3874 3879 valid at the command line.
3875 3880
3876 3881 * scripts/ipython: moved shell selection into a factory function
3877 3882 in Shell.py, to keep the starter script to a minimum.
3878 3883
3879 3884 2004-08-25 Fernando Perez <fperez@colorado.edu>
3880 3885
3881 3886 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3882 3887 John. Along with some recent changes he made to matplotlib, the
3883 3888 next versions of both systems should work very well together.
3884 3889
3885 3890 2004-08-24 Fernando Perez <fperez@colorado.edu>
3886 3891
3887 3892 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3888 3893 tried to switch the profiling to using hotshot, but I'm getting
3889 3894 strange errors from prof.runctx() there. I may be misreading the
3890 3895 docs, but it looks weird. For now the profiling code will
3891 3896 continue to use the standard profiler.
3892 3897
3893 3898 2004-08-23 Fernando Perez <fperez@colorado.edu>
3894 3899
3895 3900 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3896 3901 threaded shell, by John Hunter. It's not quite ready yet, but
3897 3902 close.
3898 3903
3899 3904 2004-08-22 Fernando Perez <fperez@colorado.edu>
3900 3905
3901 3906 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3902 3907 in Magic and ultraTB.
3903 3908
3904 3909 * ipython.1: document threading options in manpage.
3905 3910
3906 3911 * scripts/ipython: Changed name of -thread option to -gthread,
3907 3912 since this is GTK specific. I want to leave the door open for a
3908 3913 -wthread option for WX, which will most likely be necessary. This
3909 3914 change affects usage and ipmaker as well.
3910 3915
3911 3916 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3912 3917 handle the matplotlib shell issues. Code by John Hunter
3913 3918 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3914 3919 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3915 3920 broken (and disabled for end users) for now, but it puts the
3916 3921 infrastructure in place.
3917 3922
3918 3923 2004-08-21 Fernando Perez <fperez@colorado.edu>
3919 3924
3920 3925 * ipythonrc-pylab: Add matplotlib support.
3921 3926
3922 3927 * matplotlib_config.py: new files for matplotlib support, part of
3923 3928 the pylab profile.
3924 3929
3925 3930 * IPython/usage.py (__doc__): documented the threading options.
3926 3931
3927 3932 2004-08-20 Fernando Perez <fperez@colorado.edu>
3928 3933
3929 3934 * ipython: Modified the main calling routine to handle the -thread
3930 3935 and -mpthread options. This needs to be done as a top-level hack,
3931 3936 because it determines which class to instantiate for IPython
3932 3937 itself.
3933 3938
3934 3939 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3935 3940 classes to support multithreaded GTK operation without blocking,
3936 3941 and matplotlib with all backends. This is a lot of still very
3937 3942 experimental code, and threads are tricky. So it may still have a
3938 3943 few rough edges... This code owes a lot to
3939 3944 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3940 3945 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3941 3946 to John Hunter for all the matplotlib work.
3942 3947
3943 3948 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3944 3949 options for gtk thread and matplotlib support.
3945 3950
3946 3951 2004-08-16 Fernando Perez <fperez@colorado.edu>
3947 3952
3948 3953 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3949 3954 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3950 3955 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3951 3956
3952 3957 2004-08-11 Fernando Perez <fperez@colorado.edu>
3953 3958
3954 3959 * setup.py (isfile): Fix build so documentation gets updated for
3955 3960 rpms (it was only done for .tgz builds).
3956 3961
3957 3962 2004-08-10 Fernando Perez <fperez@colorado.edu>
3958 3963
3959 3964 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3960 3965
3961 3966 * iplib.py : Silence syntax error exceptions in tab-completion.
3962 3967
3963 3968 2004-08-05 Fernando Perez <fperez@colorado.edu>
3964 3969
3965 3970 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3966 3971 'color off' mark for continuation prompts. This was causing long
3967 3972 continuation lines to mis-wrap.
3968 3973
3969 3974 2004-08-01 Fernando Perez <fperez@colorado.edu>
3970 3975
3971 3976 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3972 3977 for building ipython to be a parameter. All this is necessary
3973 3978 right now to have a multithreaded version, but this insane
3974 3979 non-design will be cleaned up soon. For now, it's a hack that
3975 3980 works.
3976 3981
3977 3982 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3978 3983 args in various places. No bugs so far, but it's a dangerous
3979 3984 practice.
3980 3985
3981 3986 2004-07-31 Fernando Perez <fperez@colorado.edu>
3982 3987
3983 3988 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3984 3989 fix completion of files with dots in their names under most
3985 3990 profiles (pysh was OK because the completion order is different).
3986 3991
3987 3992 2004-07-27 Fernando Perez <fperez@colorado.edu>
3988 3993
3989 3994 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3990 3995 keywords manually, b/c the one in keyword.py was removed in python
3991 3996 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3992 3997 This is NOT a bug under python 2.3 and earlier.
3993 3998
3994 3999 2004-07-26 Fernando Perez <fperez@colorado.edu>
3995 4000
3996 4001 * IPython/ultraTB.py (VerboseTB.text): Add another
3997 4002 linecache.checkcache() call to try to prevent inspect.py from
3998 4003 crashing under python 2.3. I think this fixes
3999 4004 http://www.scipy.net/roundup/ipython/issue17.
4000 4005
4001 4006 2004-07-26 *** Released version 0.6.2
4002 4007
4003 4008 2004-07-26 Fernando Perez <fperez@colorado.edu>
4004 4009
4005 4010 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
4006 4011 fail for any number.
4007 4012 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
4008 4013 empty bookmarks.
4009 4014
4010 4015 2004-07-26 *** Released version 0.6.1
4011 4016
4012 4017 2004-07-26 Fernando Perez <fperez@colorado.edu>
4013 4018
4014 4019 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
4015 4020
4016 4021 * IPython/iplib.py (protect_filename): Applied Ville's patch for
4017 4022 escaping '()[]{}' in filenames.
4018 4023
4019 4024 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
4020 4025 Python 2.2 users who lack a proper shlex.split.
4021 4026
4022 4027 2004-07-19 Fernando Perez <fperez@colorado.edu>
4023 4028
4024 4029 * IPython/iplib.py (InteractiveShell.init_readline): Add support
4025 4030 for reading readline's init file. I follow the normal chain:
4026 4031 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
4027 4032 report by Mike Heeter. This closes
4028 4033 http://www.scipy.net/roundup/ipython/issue16.
4029 4034
4030 4035 2004-07-18 Fernando Perez <fperez@colorado.edu>
4031 4036
4032 4037 * IPython/iplib.py (__init__): Add better handling of '\' under
4033 4038 Win32 for filenames. After a patch by Ville.
4034 4039
4035 4040 2004-07-17 Fernando Perez <fperez@colorado.edu>
4036 4041
4037 4042 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4038 4043 autocalling would be triggered for 'foo is bar' if foo is
4039 4044 callable. I also cleaned up the autocall detection code to use a
4040 4045 regexp, which is faster. Bug reported by Alexander Schmolck.
4041 4046
4042 4047 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
4043 4048 '?' in them would confuse the help system. Reported by Alex
4044 4049 Schmolck.
4045 4050
4046 4051 2004-07-16 Fernando Perez <fperez@colorado.edu>
4047 4052
4048 4053 * IPython/GnuplotInteractive.py (__all__): added plot2.
4049 4054
4050 4055 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
4051 4056 plotting dictionaries, lists or tuples of 1d arrays.
4052 4057
4053 4058 * IPython/Magic.py (Magic.magic_hist): small clenaups and
4054 4059 optimizations.
4055 4060
4056 4061 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
4057 4062 the information which was there from Janko's original IPP code:
4058 4063
4059 4064 03.05.99 20:53 porto.ifm.uni-kiel.de
4060 4065 --Started changelog.
4061 4066 --make clear do what it say it does
4062 4067 --added pretty output of lines from inputcache
4063 4068 --Made Logger a mixin class, simplifies handling of switches
4064 4069 --Added own completer class. .string<TAB> expands to last history
4065 4070 line which starts with string. The new expansion is also present
4066 4071 with Ctrl-r from the readline library. But this shows, who this
4067 4072 can be done for other cases.
4068 4073 --Added convention that all shell functions should accept a
4069 4074 parameter_string This opens the door for different behaviour for
4070 4075 each function. @cd is a good example of this.
4071 4076
4072 4077 04.05.99 12:12 porto.ifm.uni-kiel.de
4073 4078 --added logfile rotation
4074 4079 --added new mainloop method which freezes first the namespace
4075 4080
4076 4081 07.05.99 21:24 porto.ifm.uni-kiel.de
4077 4082 --added the docreader classes. Now there is a help system.
4078 4083 -This is only a first try. Currently it's not easy to put new
4079 4084 stuff in the indices. But this is the way to go. Info would be
4080 4085 better, but HTML is every where and not everybody has an info
4081 4086 system installed and it's not so easy to change html-docs to info.
4082 4087 --added global logfile option
4083 4088 --there is now a hook for object inspection method pinfo needs to
4084 4089 be provided for this. Can be reached by two '??'.
4085 4090
4086 4091 08.05.99 20:51 porto.ifm.uni-kiel.de
4087 4092 --added a README
4088 4093 --bug in rc file. Something has changed so functions in the rc
4089 4094 file need to reference the shell and not self. Not clear if it's a
4090 4095 bug or feature.
4091 4096 --changed rc file for new behavior
4092 4097
4093 4098 2004-07-15 Fernando Perez <fperez@colorado.edu>
4094 4099
4095 4100 * IPython/Logger.py (Logger.log): fixed recent bug where the input
4096 4101 cache was falling out of sync in bizarre manners when multi-line
4097 4102 input was present. Minor optimizations and cleanup.
4098 4103
4099 4104 (Logger): Remove old Changelog info for cleanup. This is the
4100 4105 information which was there from Janko's original code:
4101 4106
4102 4107 Changes to Logger: - made the default log filename a parameter
4103 4108
4104 4109 - put a check for lines beginning with !@? in log(). Needed
4105 4110 (even if the handlers properly log their lines) for mid-session
4106 4111 logging activation to work properly. Without this, lines logged
4107 4112 in mid session, which get read from the cache, would end up
4108 4113 'bare' (with !@? in the open) in the log. Now they are caught
4109 4114 and prepended with a #.
4110 4115
4111 4116 * IPython/iplib.py (InteractiveShell.init_readline): added check
4112 4117 in case MagicCompleter fails to be defined, so we don't crash.
4113 4118
4114 4119 2004-07-13 Fernando Perez <fperez@colorado.edu>
4115 4120
4116 4121 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
4117 4122 of EPS if the requested filename ends in '.eps'.
4118 4123
4119 4124 2004-07-04 Fernando Perez <fperez@colorado.edu>
4120 4125
4121 4126 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
4122 4127 escaping of quotes when calling the shell.
4123 4128
4124 4129 2004-07-02 Fernando Perez <fperez@colorado.edu>
4125 4130
4126 4131 * IPython/Prompts.py (CachedOutput.update): Fix problem with
4127 4132 gettext not working because we were clobbering '_'. Fixes
4128 4133 http://www.scipy.net/roundup/ipython/issue6.
4129 4134
4130 4135 2004-07-01 Fernando Perez <fperez@colorado.edu>
4131 4136
4132 4137 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
4133 4138 into @cd. Patch by Ville.
4134 4139
4135 4140 * IPython/iplib.py (InteractiveShell.post_config_initialization):
4136 4141 new function to store things after ipmaker runs. Patch by Ville.
4137 4142 Eventually this will go away once ipmaker is removed and the class
4138 4143 gets cleaned up, but for now it's ok. Key functionality here is
4139 4144 the addition of the persistent storage mechanism, a dict for
4140 4145 keeping data across sessions (for now just bookmarks, but more can
4141 4146 be implemented later).
4142 4147
4143 4148 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
4144 4149 persistent across sections. Patch by Ville, I modified it
4145 4150 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
4146 4151 added a '-l' option to list all bookmarks.
4147 4152
4148 4153 * IPython/iplib.py (InteractiveShell.atexit_operations): new
4149 4154 center for cleanup. Registered with atexit.register(). I moved
4150 4155 here the old exit_cleanup(). After a patch by Ville.
4151 4156
4152 4157 * IPython/Magic.py (get_py_filename): added '~' to the accepted
4153 4158 characters in the hacked shlex_split for python 2.2.
4154 4159
4155 4160 * IPython/iplib.py (file_matches): more fixes to filenames with
4156 4161 whitespace in them. It's not perfect, but limitations in python's
4157 4162 readline make it impossible to go further.
4158 4163
4159 4164 2004-06-29 Fernando Perez <fperez@colorado.edu>
4160 4165
4161 4166 * IPython/iplib.py (file_matches): escape whitespace correctly in
4162 4167 filename completions. Bug reported by Ville.
4163 4168
4164 4169 2004-06-28 Fernando Perez <fperez@colorado.edu>
4165 4170
4166 4171 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
4167 4172 the history file will be called 'history-PROFNAME' (or just
4168 4173 'history' if no profile is loaded). I was getting annoyed at
4169 4174 getting my Numerical work history clobbered by pysh sessions.
4170 4175
4171 4176 * IPython/iplib.py (InteractiveShell.__init__): Internal
4172 4177 getoutputerror() function so that we can honor the system_verbose
4173 4178 flag for _all_ system calls. I also added escaping of #
4174 4179 characters here to avoid confusing Itpl.
4175 4180
4176 4181 * IPython/Magic.py (shlex_split): removed call to shell in
4177 4182 parse_options and replaced it with shlex.split(). The annoying
4178 4183 part was that in Python 2.2, shlex.split() doesn't exist, so I had
4179 4184 to backport it from 2.3, with several frail hacks (the shlex
4180 4185 module is rather limited in 2.2). Thanks to a suggestion by Ville
4181 4186 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
4182 4187 problem.
4183 4188
4184 4189 (Magic.magic_system_verbose): new toggle to print the actual
4185 4190 system calls made by ipython. Mainly for debugging purposes.
4186 4191
4187 4192 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
4188 4193 doesn't support persistence. Reported (and fix suggested) by
4189 4194 Travis Caldwell <travis_caldwell2000@yahoo.com>.
4190 4195
4191 4196 2004-06-26 Fernando Perez <fperez@colorado.edu>
4192 4197
4193 4198 * IPython/Logger.py (Logger.log): fix to handle correctly empty
4194 4199 continue prompts.
4195 4200
4196 4201 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
4197 4202 function (basically a big docstring) and a few more things here to
4198 4203 speedup startup. pysh.py is now very lightweight. We want because
4199 4204 it gets execfile'd, while InterpreterExec gets imported, so
4200 4205 byte-compilation saves time.
4201 4206
4202 4207 2004-06-25 Fernando Perez <fperez@colorado.edu>
4203 4208
4204 4209 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
4205 4210 -NUM', which was recently broken.
4206 4211
4207 4212 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
4208 4213 in multi-line input (but not !!, which doesn't make sense there).
4209 4214
4210 4215 * IPython/UserConfig/ipythonrc: made autoindent on by default.
4211 4216 It's just too useful, and people can turn it off in the less
4212 4217 common cases where it's a problem.
4213 4218
4214 4219 2004-06-24 Fernando Perez <fperez@colorado.edu>
4215 4220
4216 4221 * IPython/iplib.py (InteractiveShell._prefilter): big change -
4217 4222 special syntaxes (like alias calling) is now allied in multi-line
4218 4223 input. This is still _very_ experimental, but it's necessary for
4219 4224 efficient shell usage combining python looping syntax with system
4220 4225 calls. For now it's restricted to aliases, I don't think it
4221 4226 really even makes sense to have this for magics.
4222 4227
4223 4228 2004-06-23 Fernando Perez <fperez@colorado.edu>
4224 4229
4225 4230 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
4226 4231 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
4227 4232
4228 4233 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
4229 4234 extensions under Windows (after code sent by Gary Bishop). The
4230 4235 extensions considered 'executable' are stored in IPython's rc
4231 4236 structure as win_exec_ext.
4232 4237
4233 4238 * IPython/genutils.py (shell): new function, like system() but
4234 4239 without return value. Very useful for interactive shell work.
4235 4240
4236 4241 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
4237 4242 delete aliases.
4238 4243
4239 4244 * IPython/iplib.py (InteractiveShell.alias_table_update): make
4240 4245 sure that the alias table doesn't contain python keywords.
4241 4246
4242 4247 2004-06-21 Fernando Perez <fperez@colorado.edu>
4243 4248
4244 4249 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
4245 4250 non-existent items are found in $PATH. Reported by Thorsten.
4246 4251
4247 4252 2004-06-20 Fernando Perez <fperez@colorado.edu>
4248 4253
4249 4254 * IPython/iplib.py (complete): modified the completer so that the
4250 4255 order of priorities can be easily changed at runtime.
4251 4256
4252 4257 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
4253 4258 Modified to auto-execute all lines beginning with '~', '/' or '.'.
4254 4259
4255 4260 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
4256 4261 expand Python variables prepended with $ in all system calls. The
4257 4262 same was done to InteractiveShell.handle_shell_escape. Now all
4258 4263 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
4259 4264 expansion of python variables and expressions according to the
4260 4265 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
4261 4266
4262 4267 Though PEP-215 has been rejected, a similar (but simpler) one
4263 4268 seems like it will go into Python 2.4, PEP-292 -
4264 4269 http://www.python.org/peps/pep-0292.html.
4265 4270
4266 4271 I'll keep the full syntax of PEP-215, since IPython has since the
4267 4272 start used Ka-Ping Yee's reference implementation discussed there
4268 4273 (Itpl), and I actually like the powerful semantics it offers.
4269 4274
4270 4275 In order to access normal shell variables, the $ has to be escaped
4271 4276 via an extra $. For example:
4272 4277
4273 4278 In [7]: PATH='a python variable'
4274 4279
4275 4280 In [8]: !echo $PATH
4276 4281 a python variable
4277 4282
4278 4283 In [9]: !echo $$PATH
4279 4284 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
4280 4285
4281 4286 (Magic.parse_options): escape $ so the shell doesn't evaluate
4282 4287 things prematurely.
4283 4288
4284 4289 * IPython/iplib.py (InteractiveShell.call_alias): added the
4285 4290 ability for aliases to expand python variables via $.
4286 4291
4287 4292 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
4288 4293 system, now there's a @rehash/@rehashx pair of magics. These work
4289 4294 like the csh rehash command, and can be invoked at any time. They
4290 4295 build a table of aliases to everything in the user's $PATH
4291 4296 (@rehash uses everything, @rehashx is slower but only adds
4292 4297 executable files). With this, the pysh.py-based shell profile can
4293 4298 now simply call rehash upon startup, and full access to all
4294 4299 programs in the user's path is obtained.
4295 4300
4296 4301 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
4297 4302 functionality is now fully in place. I removed the old dynamic
4298 4303 code generation based approach, in favor of a much lighter one
4299 4304 based on a simple dict. The advantage is that this allows me to
4300 4305 now have thousands of aliases with negligible cost (unthinkable
4301 4306 with the old system).
4302 4307
4303 4308 2004-06-19 Fernando Perez <fperez@colorado.edu>
4304 4309
4305 4310 * IPython/iplib.py (__init__): extended MagicCompleter class to
4306 4311 also complete (last in priority) on user aliases.
4307 4312
4308 4313 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
4309 4314 call to eval.
4310 4315 (ItplNS.__init__): Added a new class which functions like Itpl,
4311 4316 but allows configuring the namespace for the evaluation to occur
4312 4317 in.
4313 4318
4314 4319 2004-06-18 Fernando Perez <fperez@colorado.edu>
4315 4320
4316 4321 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
4317 4322 better message when 'exit' or 'quit' are typed (a common newbie
4318 4323 confusion).
4319 4324
4320 4325 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
4321 4326 check for Windows users.
4322 4327
4323 4328 * IPython/iplib.py (InteractiveShell.user_setup): removed
4324 4329 disabling of colors for Windows. I'll test at runtime and issue a
4325 4330 warning if Gary's readline isn't found, as to nudge users to
4326 4331 download it.
4327 4332
4328 4333 2004-06-16 Fernando Perez <fperez@colorado.edu>
4329 4334
4330 4335 * IPython/genutils.py (Stream.__init__): changed to print errors
4331 4336 to sys.stderr. I had a circular dependency here. Now it's
4332 4337 possible to run ipython as IDLE's shell (consider this pre-alpha,
4333 4338 since true stdout things end up in the starting terminal instead
4334 4339 of IDLE's out).
4335 4340
4336 4341 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
4337 4342 users who haven't # updated their prompt_in2 definitions. Remove
4338 4343 eventually.
4339 4344 (multiple_replace): added credit to original ASPN recipe.
4340 4345
4341 4346 2004-06-15 Fernando Perez <fperez@colorado.edu>
4342 4347
4343 4348 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
4344 4349 list of auto-defined aliases.
4345 4350
4346 4351 2004-06-13 Fernando Perez <fperez@colorado.edu>
4347 4352
4348 4353 * setup.py (scriptfiles): Don't trigger win_post_install unless an
4349 4354 install was really requested (so setup.py can be used for other
4350 4355 things under Windows).
4351 4356
4352 4357 2004-06-10 Fernando Perez <fperez@colorado.edu>
4353 4358
4354 4359 * IPython/Logger.py (Logger.create_log): Manually remove any old
4355 4360 backup, since os.remove may fail under Windows. Fixes bug
4356 4361 reported by Thorsten.
4357 4362
4358 4363 2004-06-09 Fernando Perez <fperez@colorado.edu>
4359 4364
4360 4365 * examples/example-embed.py: fixed all references to %n (replaced
4361 4366 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
4362 4367 for all examples and the manual as well.
4363 4368
4364 4369 2004-06-08 Fernando Perez <fperez@colorado.edu>
4365 4370
4366 4371 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
4367 4372 alignment and color management. All 3 prompt subsystems now
4368 4373 inherit from BasePrompt.
4369 4374
4370 4375 * tools/release: updates for windows installer build and tag rpms
4371 4376 with python version (since paths are fixed).
4372 4377
4373 4378 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
4374 4379 which will become eventually obsolete. Also fixed the default
4375 4380 prompt_in2 to use \D, so at least new users start with the correct
4376 4381 defaults.
4377 4382 WARNING: Users with existing ipythonrc files will need to apply
4378 4383 this fix manually!
4379 4384
4380 4385 * setup.py: make windows installer (.exe). This is finally the
4381 4386 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
4382 4387 which I hadn't included because it required Python 2.3 (or recent
4383 4388 distutils).
4384 4389
4385 4390 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
4386 4391 usage of new '\D' escape.
4387 4392
4388 4393 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
4389 4394 lacks os.getuid())
4390 4395 (CachedOutput.set_colors): Added the ability to turn coloring
4391 4396 on/off with @colors even for manually defined prompt colors. It
4392 4397 uses a nasty global, but it works safely and via the generic color
4393 4398 handling mechanism.
4394 4399 (Prompt2.__init__): Introduced new escape '\D' for continuation
4395 4400 prompts. It represents the counter ('\#') as dots.
4396 4401 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
4397 4402 need to update their ipythonrc files and replace '%n' with '\D' in
4398 4403 their prompt_in2 settings everywhere. Sorry, but there's
4399 4404 otherwise no clean way to get all prompts to properly align. The
4400 4405 ipythonrc shipped with IPython has been updated.
4401 4406
4402 4407 2004-06-07 Fernando Perez <fperez@colorado.edu>
4403 4408
4404 4409 * setup.py (isfile): Pass local_icons option to latex2html, so the
4405 4410 resulting HTML file is self-contained. Thanks to
4406 4411 dryice-AT-liu.com.cn for the tip.
4407 4412
4408 4413 * pysh.py: I created a new profile 'shell', which implements a
4409 4414 _rudimentary_ IPython-based shell. This is in NO WAY a realy
4410 4415 system shell, nor will it become one anytime soon. It's mainly
4411 4416 meant to illustrate the use of the new flexible bash-like prompts.
4412 4417 I guess it could be used by hardy souls for true shell management,
4413 4418 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
4414 4419 profile. This uses the InterpreterExec extension provided by
4415 4420 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
4416 4421
4417 4422 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
4418 4423 auto-align itself with the length of the previous input prompt
4419 4424 (taking into account the invisible color escapes).
4420 4425 (CachedOutput.__init__): Large restructuring of this class. Now
4421 4426 all three prompts (primary1, primary2, output) are proper objects,
4422 4427 managed by the 'parent' CachedOutput class. The code is still a
4423 4428 bit hackish (all prompts share state via a pointer to the cache),
4424 4429 but it's overall far cleaner than before.
4425 4430
4426 4431 * IPython/genutils.py (getoutputerror): modified to add verbose,
4427 4432 debug and header options. This makes the interface of all getout*
4428 4433 functions uniform.
4429 4434 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
4430 4435
4431 4436 * IPython/Magic.py (Magic.default_option): added a function to
4432 4437 allow registering default options for any magic command. This
4433 4438 makes it easy to have profiles which customize the magics globally
4434 4439 for a certain use. The values set through this function are
4435 4440 picked up by the parse_options() method, which all magics should
4436 4441 use to parse their options.
4437 4442
4438 4443 * IPython/genutils.py (warn): modified the warnings framework to
4439 4444 use the Term I/O class. I'm trying to slowly unify all of
4440 4445 IPython's I/O operations to pass through Term.
4441 4446
4442 4447 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
4443 4448 the secondary prompt to correctly match the length of the primary
4444 4449 one for any prompt. Now multi-line code will properly line up
4445 4450 even for path dependent prompts, such as the new ones available
4446 4451 via the prompt_specials.
4447 4452
4448 4453 2004-06-06 Fernando Perez <fperez@colorado.edu>
4449 4454
4450 4455 * IPython/Prompts.py (prompt_specials): Added the ability to have
4451 4456 bash-like special sequences in the prompts, which get
4452 4457 automatically expanded. Things like hostname, current working
4453 4458 directory and username are implemented already, but it's easy to
4454 4459 add more in the future. Thanks to a patch by W.J. van der Laan
4455 4460 <gnufnork-AT-hetdigitalegat.nl>
4456 4461 (prompt_specials): Added color support for prompt strings, so
4457 4462 users can define arbitrary color setups for their prompts.
4458 4463
4459 4464 2004-06-05 Fernando Perez <fperez@colorado.edu>
4460 4465
4461 4466 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
4462 4467 code to load Gary Bishop's readline and configure it
4463 4468 automatically. Thanks to Gary for help on this.
4464 4469
4465 4470 2004-06-01 Fernando Perez <fperez@colorado.edu>
4466 4471
4467 4472 * IPython/Logger.py (Logger.create_log): fix bug for logging
4468 4473 with no filename (previous fix was incomplete).
4469 4474
4470 4475 2004-05-25 Fernando Perez <fperez@colorado.edu>
4471 4476
4472 4477 * IPython/Magic.py (Magic.parse_options): fix bug where naked
4473 4478 parens would get passed to the shell.
4474 4479
4475 4480 2004-05-20 Fernando Perez <fperez@colorado.edu>
4476 4481
4477 4482 * IPython/Magic.py (Magic.magic_prun): changed default profile
4478 4483 sort order to 'time' (the more common profiling need).
4479 4484
4480 4485 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
4481 4486 so that source code shown is guaranteed in sync with the file on
4482 4487 disk (also changed in psource). Similar fix to the one for
4483 4488 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
4484 4489 <yann.ledu-AT-noos.fr>.
4485 4490
4486 4491 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
4487 4492 with a single option would not be correctly parsed. Closes
4488 4493 http://www.scipy.net/roundup/ipython/issue14. This bug had been
4489 4494 introduced in 0.6.0 (on 2004-05-06).
4490 4495
4491 4496 2004-05-13 *** Released version 0.6.0
4492 4497
4493 4498 2004-05-13 Fernando Perez <fperez@colorado.edu>
4494 4499
4495 4500 * debian/: Added debian/ directory to CVS, so that debian support
4496 4501 is publicly accessible. The debian package is maintained by Jack
4497 4502 Moffit <jack-AT-xiph.org>.
4498 4503
4499 4504 * Documentation: included the notes about an ipython-based system
4500 4505 shell (the hypothetical 'pysh') into the new_design.pdf document,
4501 4506 so that these ideas get distributed to users along with the
4502 4507 official documentation.
4503 4508
4504 4509 2004-05-10 Fernando Perez <fperez@colorado.edu>
4505 4510
4506 4511 * IPython/Logger.py (Logger.create_log): fix recently introduced
4507 4512 bug (misindented line) where logstart would fail when not given an
4508 4513 explicit filename.
4509 4514
4510 4515 2004-05-09 Fernando Perez <fperez@colorado.edu>
4511 4516
4512 4517 * IPython/Magic.py (Magic.parse_options): skip system call when
4513 4518 there are no options to look for. Faster, cleaner for the common
4514 4519 case.
4515 4520
4516 4521 * Documentation: many updates to the manual: describing Windows
4517 4522 support better, Gnuplot updates, credits, misc small stuff. Also
4518 4523 updated the new_design doc a bit.
4519 4524
4520 4525 2004-05-06 *** Released version 0.6.0.rc1
4521 4526
4522 4527 2004-05-06 Fernando Perez <fperez@colorado.edu>
4523 4528
4524 4529 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
4525 4530 operations to use the vastly more efficient list/''.join() method.
4526 4531 (FormattedTB.text): Fix
4527 4532 http://www.scipy.net/roundup/ipython/issue12 - exception source
4528 4533 extract not updated after reload. Thanks to Mike Salib
4529 4534 <msalib-AT-mit.edu> for pinning the source of the problem.
4530 4535 Fortunately, the solution works inside ipython and doesn't require
4531 4536 any changes to python proper.
4532 4537
4533 4538 * IPython/Magic.py (Magic.parse_options): Improved to process the
4534 4539 argument list as a true shell would (by actually using the
4535 4540 underlying system shell). This way, all @magics automatically get
4536 4541 shell expansion for variables. Thanks to a comment by Alex
4537 4542 Schmolck.
4538 4543
4539 4544 2004-04-04 Fernando Perez <fperez@colorado.edu>
4540 4545
4541 4546 * IPython/iplib.py (InteractiveShell.interact): Added a special
4542 4547 trap for a debugger quit exception, which is basically impossible
4543 4548 to handle by normal mechanisms, given what pdb does to the stack.
4544 4549 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
4545 4550
4546 4551 2004-04-03 Fernando Perez <fperez@colorado.edu>
4547 4552
4548 4553 * IPython/genutils.py (Term): Standardized the names of the Term
4549 4554 class streams to cin/cout/cerr, following C++ naming conventions
4550 4555 (I can't use in/out/err because 'in' is not a valid attribute
4551 4556 name).
4552 4557
4553 4558 * IPython/iplib.py (InteractiveShell.interact): don't increment
4554 4559 the prompt if there's no user input. By Daniel 'Dang' Griffith
4555 4560 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
4556 4561 Francois Pinard.
4557 4562
4558 4563 2004-04-02 Fernando Perez <fperez@colorado.edu>
4559 4564
4560 4565 * IPython/genutils.py (Stream.__init__): Modified to survive at
4561 4566 least importing in contexts where stdin/out/err aren't true file
4562 4567 objects, such as PyCrust (they lack fileno() and mode). However,
4563 4568 the recovery facilities which rely on these things existing will
4564 4569 not work.
4565 4570
4566 4571 2004-04-01 Fernando Perez <fperez@colorado.edu>
4567 4572
4568 4573 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
4569 4574 use the new getoutputerror() function, so it properly
4570 4575 distinguishes stdout/err.
4571 4576
4572 4577 * IPython/genutils.py (getoutputerror): added a function to
4573 4578 capture separately the standard output and error of a command.
4574 4579 After a comment from dang on the mailing lists. This code is
4575 4580 basically a modified version of commands.getstatusoutput(), from
4576 4581 the standard library.
4577 4582
4578 4583 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
4579 4584 '!!' as a special syntax (shorthand) to access @sx.
4580 4585
4581 4586 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
4582 4587 command and return its output as a list split on '\n'.
4583 4588
4584 4589 2004-03-31 Fernando Perez <fperez@colorado.edu>
4585 4590
4586 4591 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
4587 4592 method to dictionaries used as FakeModule instances if they lack
4588 4593 it. At least pydoc in python2.3 breaks for runtime-defined
4589 4594 functions without this hack. At some point I need to _really_
4590 4595 understand what FakeModule is doing, because it's a gross hack.
4591 4596 But it solves Arnd's problem for now...
4592 4597
4593 4598 2004-02-27 Fernando Perez <fperez@colorado.edu>
4594 4599
4595 4600 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
4596 4601 mode would behave erratically. Also increased the number of
4597 4602 possible logs in rotate mod to 999. Thanks to Rod Holland
4598 4603 <rhh@StructureLABS.com> for the report and fixes.
4599 4604
4600 4605 2004-02-26 Fernando Perez <fperez@colorado.edu>
4601 4606
4602 4607 * IPython/genutils.py (page): Check that the curses module really
4603 4608 has the initscr attribute before trying to use it. For some
4604 4609 reason, the Solaris curses module is missing this. I think this
4605 4610 should be considered a Solaris python bug, but I'm not sure.
4606 4611
4607 4612 2004-01-17 Fernando Perez <fperez@colorado.edu>
4608 4613
4609 4614 * IPython/genutils.py (Stream.__init__): Changes to try to make
4610 4615 ipython robust against stdin/out/err being closed by the user.
4611 4616 This is 'user error' (and blocks a normal python session, at least
4612 4617 the stdout case). However, Ipython should be able to survive such
4613 4618 instances of abuse as gracefully as possible. To simplify the
4614 4619 coding and maintain compatibility with Gary Bishop's Term
4615 4620 contributions, I've made use of classmethods for this. I think
4616 4621 this introduces a dependency on python 2.2.
4617 4622
4618 4623 2004-01-13 Fernando Perez <fperez@colorado.edu>
4619 4624
4620 4625 * IPython/numutils.py (exp_safe): simplified the code a bit and
4621 4626 removed the need for importing the kinds module altogether.
4622 4627
4623 4628 2004-01-06 Fernando Perez <fperez@colorado.edu>
4624 4629
4625 4630 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
4626 4631 a magic function instead, after some community feedback. No
4627 4632 special syntax will exist for it, but its name is deliberately
4628 4633 very short.
4629 4634
4630 4635 2003-12-20 Fernando Perez <fperez@colorado.edu>
4631 4636
4632 4637 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
4633 4638 new functionality, to automagically assign the result of a shell
4634 4639 command to a variable. I'll solicit some community feedback on
4635 4640 this before making it permanent.
4636 4641
4637 4642 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
4638 4643 requested about callables for which inspect couldn't obtain a
4639 4644 proper argspec. Thanks to a crash report sent by Etienne
4640 4645 Posthumus <etienne-AT-apple01.cs.vu.nl>.
4641 4646
4642 4647 2003-12-09 Fernando Perez <fperez@colorado.edu>
4643 4648
4644 4649 * IPython/genutils.py (page): patch for the pager to work across
4645 4650 various versions of Windows. By Gary Bishop.
4646 4651
4647 4652 2003-12-04 Fernando Perez <fperez@colorado.edu>
4648 4653
4649 4654 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
4650 4655 Gnuplot.py version 1.7, whose internal names changed quite a bit.
4651 4656 While I tested this and it looks ok, there may still be corner
4652 4657 cases I've missed.
4653 4658
4654 4659 2003-12-01 Fernando Perez <fperez@colorado.edu>
4655 4660
4656 4661 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
4657 4662 where a line like 'p,q=1,2' would fail because the automagic
4658 4663 system would be triggered for @p.
4659 4664
4660 4665 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
4661 4666 cleanups, code unmodified.
4662 4667
4663 4668 * IPython/genutils.py (Term): added a class for IPython to handle
4664 4669 output. In most cases it will just be a proxy for stdout/err, but
4665 4670 having this allows modifications to be made for some platforms,
4666 4671 such as handling color escapes under Windows. All of this code
4667 4672 was contributed by Gary Bishop, with minor modifications by me.
4668 4673 The actual changes affect many files.
4669 4674
4670 4675 2003-11-30 Fernando Perez <fperez@colorado.edu>
4671 4676
4672 4677 * IPython/iplib.py (file_matches): new completion code, courtesy
4673 4678 of Jeff Collins. This enables filename completion again under
4674 4679 python 2.3, which disabled it at the C level.
4675 4680
4676 4681 2003-11-11 Fernando Perez <fperez@colorado.edu>
4677 4682
4678 4683 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
4679 4684 for Numeric.array(map(...)), but often convenient.
4680 4685
4681 4686 2003-11-05 Fernando Perez <fperez@colorado.edu>
4682 4687
4683 4688 * IPython/numutils.py (frange): Changed a call from int() to
4684 4689 int(round()) to prevent a problem reported with arange() in the
4685 4690 numpy list.
4686 4691
4687 4692 2003-10-06 Fernando Perez <fperez@colorado.edu>
4688 4693
4689 4694 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
4690 4695 prevent crashes if sys lacks an argv attribute (it happens with
4691 4696 embedded interpreters which build a bare-bones sys module).
4692 4697 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
4693 4698
4694 4699 2003-09-24 Fernando Perez <fperez@colorado.edu>
4695 4700
4696 4701 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
4697 4702 to protect against poorly written user objects where __getattr__
4698 4703 raises exceptions other than AttributeError. Thanks to a bug
4699 4704 report by Oliver Sander <osander-AT-gmx.de>.
4700 4705
4701 4706 * IPython/FakeModule.py (FakeModule.__repr__): this method was
4702 4707 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
4703 4708
4704 4709 2003-09-09 Fernando Perez <fperez@colorado.edu>
4705 4710
4706 4711 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
4707 4712 unpacking a list whith a callable as first element would
4708 4713 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
4709 4714 Collins.
4710 4715
4711 4716 2003-08-25 *** Released version 0.5.0
4712 4717
4713 4718 2003-08-22 Fernando Perez <fperez@colorado.edu>
4714 4719
4715 4720 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
4716 4721 improperly defined user exceptions. Thanks to feedback from Mark
4717 4722 Russell <mrussell-AT-verio.net>.
4718 4723
4719 4724 2003-08-20 Fernando Perez <fperez@colorado.edu>
4720 4725
4721 4726 * IPython/OInspect.py (Inspector.pinfo): changed String Form
4722 4727 printing so that it would print multi-line string forms starting
4723 4728 with a new line. This way the formatting is better respected for
4724 4729 objects which work hard to make nice string forms.
4725 4730
4726 4731 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
4727 4732 autocall would overtake data access for objects with both
4728 4733 __getitem__ and __call__.
4729 4734
4730 4735 2003-08-19 *** Released version 0.5.0-rc1
4731 4736
4732 4737 2003-08-19 Fernando Perez <fperez@colorado.edu>
4733 4738
4734 4739 * IPython/deep_reload.py (load_tail): single tiny change here
4735 4740 seems to fix the long-standing bug of dreload() failing to work
4736 4741 for dotted names. But this module is pretty tricky, so I may have
4737 4742 missed some subtlety. Needs more testing!.
4738 4743
4739 4744 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
4740 4745 exceptions which have badly implemented __str__ methods.
4741 4746 (VerboseTB.text): harden against inspect.getinnerframes crashing,
4742 4747 which I've been getting reports about from Python 2.3 users. I
4743 4748 wish I had a simple test case to reproduce the problem, so I could
4744 4749 either write a cleaner workaround or file a bug report if
4745 4750 necessary.
4746 4751
4747 4752 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
4748 4753 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
4749 4754 a bug report by Tjabo Kloppenburg.
4750 4755
4751 4756 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
4752 4757 crashes. Wrapped the pdb call in a blanket try/except, since pdb
4753 4758 seems rather unstable. Thanks to a bug report by Tjabo
4754 4759 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
4755 4760
4756 4761 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
4757 4762 this out soon because of the critical fixes in the inner loop for
4758 4763 generators.
4759 4764
4760 4765 * IPython/Magic.py (Magic.getargspec): removed. This (and
4761 4766 _get_def) have been obsoleted by OInspect for a long time, I
4762 4767 hadn't noticed that they were dead code.
4763 4768 (Magic._ofind): restored _ofind functionality for a few literals
4764 4769 (those in ["''",'""','[]','{}','()']). But it won't work anymore
4765 4770 for things like "hello".capitalize?, since that would require a
4766 4771 potentially dangerous eval() again.
4767 4772
4768 4773 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
4769 4774 logic a bit more to clean up the escapes handling and minimize the
4770 4775 use of _ofind to only necessary cases. The interactive 'feel' of
4771 4776 IPython should have improved quite a bit with the changes in
4772 4777 _prefilter and _ofind (besides being far safer than before).
4773 4778
4774 4779 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
4775 4780 obscure, never reported). Edit would fail to find the object to
4776 4781 edit under some circumstances.
4777 4782 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
4778 4783 which were causing double-calling of generators. Those eval calls
4779 4784 were _very_ dangerous, since code with side effects could be
4780 4785 triggered. As they say, 'eval is evil'... These were the
4781 4786 nastiest evals in IPython. Besides, _ofind is now far simpler,
4782 4787 and it should also be quite a bit faster. Its use of inspect is
4783 4788 also safer, so perhaps some of the inspect-related crashes I've
4784 4789 seen lately with Python 2.3 might be taken care of. That will
4785 4790 need more testing.
4786 4791
4787 4792 2003-08-17 Fernando Perez <fperez@colorado.edu>
4788 4793
4789 4794 * IPython/iplib.py (InteractiveShell._prefilter): significant
4790 4795 simplifications to the logic for handling user escapes. Faster
4791 4796 and simpler code.
4792 4797
4793 4798 2003-08-14 Fernando Perez <fperez@colorado.edu>
4794 4799
4795 4800 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
4796 4801 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
4797 4802 but it should be quite a bit faster. And the recursive version
4798 4803 generated O(log N) intermediate storage for all rank>1 arrays,
4799 4804 even if they were contiguous.
4800 4805 (l1norm): Added this function.
4801 4806 (norm): Added this function for arbitrary norms (including
4802 4807 l-infinity). l1 and l2 are still special cases for convenience
4803 4808 and speed.
4804 4809
4805 4810 2003-08-03 Fernando Perez <fperez@colorado.edu>
4806 4811
4807 4812 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
4808 4813 exceptions, which now raise PendingDeprecationWarnings in Python
4809 4814 2.3. There were some in Magic and some in Gnuplot2.
4810 4815
4811 4816 2003-06-30 Fernando Perez <fperez@colorado.edu>
4812 4817
4813 4818 * IPython/genutils.py (page): modified to call curses only for
4814 4819 terminals where TERM=='xterm'. After problems under many other
4815 4820 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
4816 4821
4817 4822 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
4818 4823 would be triggered when readline was absent. This was just an old
4819 4824 debugging statement I'd forgotten to take out.
4820 4825
4821 4826 2003-06-20 Fernando Perez <fperez@colorado.edu>
4822 4827
4823 4828 * IPython/genutils.py (clock): modified to return only user time
4824 4829 (not counting system time), after a discussion on scipy. While
4825 4830 system time may be a useful quantity occasionally, it may much
4826 4831 more easily be skewed by occasional swapping or other similar
4827 4832 activity.
4828 4833
4829 4834 2003-06-05 Fernando Perez <fperez@colorado.edu>
4830 4835
4831 4836 * IPython/numutils.py (identity): new function, for building
4832 4837 arbitrary rank Kronecker deltas (mostly backwards compatible with
4833 4838 Numeric.identity)
4834 4839
4835 4840 2003-06-03 Fernando Perez <fperez@colorado.edu>
4836 4841
4837 4842 * IPython/iplib.py (InteractiveShell.handle_magic): protect
4838 4843 arguments passed to magics with spaces, to allow trailing '\' to
4839 4844 work normally (mainly for Windows users).
4840 4845
4841 4846 2003-05-29 Fernando Perez <fperez@colorado.edu>
4842 4847
4843 4848 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
4844 4849 instead of pydoc.help. This fixes a bizarre behavior where
4845 4850 printing '%s' % locals() would trigger the help system. Now
4846 4851 ipython behaves like normal python does.
4847 4852
4848 4853 Note that if one does 'from pydoc import help', the bizarre
4849 4854 behavior returns, but this will also happen in normal python, so
4850 4855 it's not an ipython bug anymore (it has to do with how pydoc.help
4851 4856 is implemented).
4852 4857
4853 4858 2003-05-22 Fernando Perez <fperez@colorado.edu>
4854 4859
4855 4860 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
4856 4861 return [] instead of None when nothing matches, also match to end
4857 4862 of line. Patch by Gary Bishop.
4858 4863
4859 4864 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
4860 4865 protection as before, for files passed on the command line. This
4861 4866 prevents the CrashHandler from kicking in if user files call into
4862 4867 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
4863 4868 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
4864 4869
4865 4870 2003-05-20 *** Released version 0.4.0
4866 4871
4867 4872 2003-05-20 Fernando Perez <fperez@colorado.edu>
4868 4873
4869 4874 * setup.py: added support for manpages. It's a bit hackish b/c of
4870 4875 a bug in the way the bdist_rpm distutils target handles gzipped
4871 4876 manpages, but it works. After a patch by Jack.
4872 4877
4873 4878 2003-05-19 Fernando Perez <fperez@colorado.edu>
4874 4879
4875 4880 * IPython/numutils.py: added a mockup of the kinds module, since
4876 4881 it was recently removed from Numeric. This way, numutils will
4877 4882 work for all users even if they are missing kinds.
4878 4883
4879 4884 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4880 4885 failure, which can occur with SWIG-wrapped extensions. After a
4881 4886 crash report from Prabhu.
4882 4887
4883 4888 2003-05-16 Fernando Perez <fperez@colorado.edu>
4884 4889
4885 4890 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4886 4891 protect ipython from user code which may call directly
4887 4892 sys.excepthook (this looks like an ipython crash to the user, even
4888 4893 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4889 4894 This is especially important to help users of WxWindows, but may
4890 4895 also be useful in other cases.
4891 4896
4892 4897 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4893 4898 an optional tb_offset to be specified, and to preserve exception
4894 4899 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4895 4900
4896 4901 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4897 4902
4898 4903 2003-05-15 Fernando Perez <fperez@colorado.edu>
4899 4904
4900 4905 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4901 4906 installing for a new user under Windows.
4902 4907
4903 4908 2003-05-12 Fernando Perez <fperez@colorado.edu>
4904 4909
4905 4910 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4906 4911 handler for Emacs comint-based lines. Currently it doesn't do
4907 4912 much (but importantly, it doesn't update the history cache). In
4908 4913 the future it may be expanded if Alex needs more functionality
4909 4914 there.
4910 4915
4911 4916 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4912 4917 info to crash reports.
4913 4918
4914 4919 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4915 4920 just like Python's -c. Also fixed crash with invalid -color
4916 4921 option value at startup. Thanks to Will French
4917 4922 <wfrench-AT-bestweb.net> for the bug report.
4918 4923
4919 4924 2003-05-09 Fernando Perez <fperez@colorado.edu>
4920 4925
4921 4926 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4922 4927 to EvalDict (it's a mapping, after all) and simplified its code
4923 4928 quite a bit, after a nice discussion on c.l.py where Gustavo
4924 4929 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
4925 4930
4926 4931 2003-04-30 Fernando Perez <fperez@colorado.edu>
4927 4932
4928 4933 * IPython/genutils.py (timings_out): modified it to reduce its
4929 4934 overhead in the common reps==1 case.
4930 4935
4931 4936 2003-04-29 Fernando Perez <fperez@colorado.edu>
4932 4937
4933 4938 * IPython/genutils.py (timings_out): Modified to use the resource
4934 4939 module, which avoids the wraparound problems of time.clock().
4935 4940
4936 4941 2003-04-17 *** Released version 0.2.15pre4
4937 4942
4938 4943 2003-04-17 Fernando Perez <fperez@colorado.edu>
4939 4944
4940 4945 * setup.py (scriptfiles): Split windows-specific stuff over to a
4941 4946 separate file, in an attempt to have a Windows GUI installer.
4942 4947 That didn't work, but part of the groundwork is done.
4943 4948
4944 4949 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4945 4950 indent/unindent with 4 spaces. Particularly useful in combination
4946 4951 with the new auto-indent option.
4947 4952
4948 4953 2003-04-16 Fernando Perez <fperez@colorado.edu>
4949 4954
4950 4955 * IPython/Magic.py: various replacements of self.rc for
4951 4956 self.shell.rc. A lot more remains to be done to fully disentangle
4952 4957 this class from the main Shell class.
4953 4958
4954 4959 * IPython/GnuplotRuntime.py: added checks for mouse support so
4955 4960 that we don't try to enable it if the current gnuplot doesn't
4956 4961 really support it. Also added checks so that we don't try to
4957 4962 enable persist under Windows (where Gnuplot doesn't recognize the
4958 4963 option).
4959 4964
4960 4965 * IPython/iplib.py (InteractiveShell.interact): Added optional
4961 4966 auto-indenting code, after a patch by King C. Shu
4962 4967 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4963 4968 get along well with pasting indented code. If I ever figure out
4964 4969 how to make that part go well, it will become on by default.
4965 4970
4966 4971 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4967 4972 crash ipython if there was an unmatched '%' in the user's prompt
4968 4973 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4969 4974
4970 4975 * IPython/iplib.py (InteractiveShell.interact): removed the
4971 4976 ability to ask the user whether he wants to crash or not at the
4972 4977 'last line' exception handler. Calling functions at that point
4973 4978 changes the stack, and the error reports would have incorrect
4974 4979 tracebacks.
4975 4980
4976 4981 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4977 4982 pass through a peger a pretty-printed form of any object. After a
4978 4983 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4979 4984
4980 4985 2003-04-14 Fernando Perez <fperez@colorado.edu>
4981 4986
4982 4987 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4983 4988 all files in ~ would be modified at first install (instead of
4984 4989 ~/.ipython). This could be potentially disastrous, as the
4985 4990 modification (make line-endings native) could damage binary files.
4986 4991
4987 4992 2003-04-10 Fernando Perez <fperez@colorado.edu>
4988 4993
4989 4994 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4990 4995 handle only lines which are invalid python. This now means that
4991 4996 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4992 4997 for the bug report.
4993 4998
4994 4999 2003-04-01 Fernando Perez <fperez@colorado.edu>
4995 5000
4996 5001 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4997 5002 where failing to set sys.last_traceback would crash pdb.pm().
4998 5003 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4999 5004 report.
5000 5005
5001 5006 2003-03-25 Fernando Perez <fperez@colorado.edu>
5002 5007
5003 5008 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
5004 5009 before printing it (it had a lot of spurious blank lines at the
5005 5010 end).
5006 5011
5007 5012 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
5008 5013 output would be sent 21 times! Obviously people don't use this
5009 5014 too often, or I would have heard about it.
5010 5015
5011 5016 2003-03-24 Fernando Perez <fperez@colorado.edu>
5012 5017
5013 5018 * setup.py (scriptfiles): renamed the data_files parameter from
5014 5019 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
5015 5020 for the patch.
5016 5021
5017 5022 2003-03-20 Fernando Perez <fperez@colorado.edu>
5018 5023
5019 5024 * IPython/genutils.py (error): added error() and fatal()
5020 5025 functions.
5021 5026
5022 5027 2003-03-18 *** Released version 0.2.15pre3
5023 5028
5024 5029 2003-03-18 Fernando Perez <fperez@colorado.edu>
5025 5030
5026 5031 * setupext/install_data_ext.py
5027 5032 (install_data_ext.initialize_options): Class contributed by Jack
5028 5033 Moffit for fixing the old distutils hack. He is sending this to
5029 5034 the distutils folks so in the future we may not need it as a
5030 5035 private fix.
5031 5036
5032 5037 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
5033 5038 changes for Debian packaging. See his patch for full details.
5034 5039 The old distutils hack of making the ipythonrc* files carry a
5035 5040 bogus .py extension is gone, at last. Examples were moved to a
5036 5041 separate subdir under doc/, and the separate executable scripts
5037 5042 now live in their own directory. Overall a great cleanup. The
5038 5043 manual was updated to use the new files, and setup.py has been
5039 5044 fixed for this setup.
5040 5045
5041 5046 * IPython/PyColorize.py (Parser.usage): made non-executable and
5042 5047 created a pycolor wrapper around it to be included as a script.
5043 5048
5044 5049 2003-03-12 *** Released version 0.2.15pre2
5045 5050
5046 5051 2003-03-12 Fernando Perez <fperez@colorado.edu>
5047 5052
5048 5053 * IPython/ColorANSI.py (make_color_table): Finally fixed the
5049 5054 long-standing problem with garbage characters in some terminals.
5050 5055 The issue was really that the \001 and \002 escapes must _only_ be
5051 5056 passed to input prompts (which call readline), but _never_ to
5052 5057 normal text to be printed on screen. I changed ColorANSI to have
5053 5058 two classes: TermColors and InputTermColors, each with the
5054 5059 appropriate escapes for input prompts or normal text. The code in
5055 5060 Prompts.py got slightly more complicated, but this very old and
5056 5061 annoying bug is finally fixed.
5057 5062
5058 5063 All the credit for nailing down the real origin of this problem
5059 5064 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
5060 5065 *Many* thanks to him for spending quite a bit of effort on this.
5061 5066
5062 5067 2003-03-05 *** Released version 0.2.15pre1
5063 5068
5064 5069 2003-03-03 Fernando Perez <fperez@colorado.edu>
5065 5070
5066 5071 * IPython/FakeModule.py: Moved the former _FakeModule to a
5067 5072 separate file, because it's also needed by Magic (to fix a similar
5068 5073 pickle-related issue in @run).
5069 5074
5070 5075 2003-03-02 Fernando Perez <fperez@colorado.edu>
5071 5076
5072 5077 * IPython/Magic.py (Magic.magic_autocall): new magic to control
5073 5078 the autocall option at runtime.
5074 5079 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
5075 5080 across Magic.py to start separating Magic from InteractiveShell.
5076 5081 (Magic._ofind): Fixed to return proper namespace for dotted
5077 5082 names. Before, a dotted name would always return 'not currently
5078 5083 defined', because it would find the 'parent'. s.x would be found,
5079 5084 but since 'x' isn't defined by itself, it would get confused.
5080 5085 (Magic.magic_run): Fixed pickling problems reported by Ralf
5081 5086 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
5082 5087 that I'd used when Mike Heeter reported similar issues at the
5083 5088 top-level, but now for @run. It boils down to injecting the
5084 5089 namespace where code is being executed with something that looks
5085 5090 enough like a module to fool pickle.dump(). Since a pickle stores
5086 5091 a named reference to the importing module, we need this for
5087 5092 pickles to save something sensible.
5088 5093
5089 5094 * IPython/ipmaker.py (make_IPython): added an autocall option.
5090 5095
5091 5096 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
5092 5097 the auto-eval code. Now autocalling is an option, and the code is
5093 5098 also vastly safer. There is no more eval() involved at all.
5094 5099
5095 5100 2003-03-01 Fernando Perez <fperez@colorado.edu>
5096 5101
5097 5102 * IPython/Magic.py (Magic._ofind): Changed interface to return a
5098 5103 dict with named keys instead of a tuple.
5099 5104
5100 5105 * IPython: Started using CVS for IPython as of 0.2.15pre1.
5101 5106
5102 5107 * setup.py (make_shortcut): Fixed message about directories
5103 5108 created during Windows installation (the directories were ok, just
5104 5109 the printed message was misleading). Thanks to Chris Liechti
5105 5110 <cliechti-AT-gmx.net> for the heads up.
5106 5111
5107 5112 2003-02-21 Fernando Perez <fperez@colorado.edu>
5108 5113
5109 5114 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
5110 5115 of ValueError exception when checking for auto-execution. This
5111 5116 one is raised by things like Numeric arrays arr.flat when the
5112 5117 array is non-contiguous.
5113 5118
5114 5119 2003-01-31 Fernando Perez <fperez@colorado.edu>
5115 5120
5116 5121 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
5117 5122 not return any value at all (even though the command would get
5118 5123 executed).
5119 5124 (xsys): Flush stdout right after printing the command to ensure
5120 5125 proper ordering of commands and command output in the total
5121 5126 output.
5122 5127 (SystemExec/xsys/bq): Switched the names of xsys/bq and
5123 5128 system/getoutput as defaults. The old ones are kept for
5124 5129 compatibility reasons, so no code which uses this library needs
5125 5130 changing.
5126 5131
5127 5132 2003-01-27 *** Released version 0.2.14
5128 5133
5129 5134 2003-01-25 Fernando Perez <fperez@colorado.edu>
5130 5135
5131 5136 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
5132 5137 functions defined in previous edit sessions could not be re-edited
5133 5138 (because the temp files were immediately removed). Now temp files
5134 5139 are removed only at IPython's exit.
5135 5140 (Magic.magic_run): Improved @run to perform shell-like expansions
5136 5141 on its arguments (~users and $VARS). With this, @run becomes more
5137 5142 like a normal command-line.
5138 5143
5139 5144 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
5140 5145 bugs related to embedding and cleaned up that code. A fairly
5141 5146 important one was the impossibility to access the global namespace
5142 5147 through the embedded IPython (only local variables were visible).
5143 5148
5144 5149 2003-01-14 Fernando Perez <fperez@colorado.edu>
5145 5150
5146 5151 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
5147 5152 auto-calling to be a bit more conservative. Now it doesn't get
5148 5153 triggered if any of '!=()<>' are in the rest of the input line, to
5149 5154 allow comparing callables. Thanks to Alex for the heads up.
5150 5155
5151 5156 2003-01-07 Fernando Perez <fperez@colorado.edu>
5152 5157
5153 5158 * IPython/genutils.py (page): fixed estimation of the number of
5154 5159 lines in a string to be paged to simply count newlines. This
5155 5160 prevents over-guessing due to embedded escape sequences. A better
5156 5161 long-term solution would involve stripping out the control chars
5157 5162 for the count, but it's potentially so expensive I just don't
5158 5163 think it's worth doing.
5159 5164
5160 5165 2002-12-19 *** Released version 0.2.14pre50
5161 5166
5162 5167 2002-12-19 Fernando Perez <fperez@colorado.edu>
5163 5168
5164 5169 * tools/release (version): Changed release scripts to inform
5165 5170 Andrea and build a NEWS file with a list of recent changes.
5166 5171
5167 5172 * IPython/ColorANSI.py (__all__): changed terminal detection
5168 5173 code. Seems to work better for xterms without breaking
5169 5174 konsole. Will need more testing to determine if WinXP and Mac OSX
5170 5175 also work ok.
5171 5176
5172 5177 2002-12-18 *** Released version 0.2.14pre49
5173 5178
5174 5179 2002-12-18 Fernando Perez <fperez@colorado.edu>
5175 5180
5176 5181 * Docs: added new info about Mac OSX, from Andrea.
5177 5182
5178 5183 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
5179 5184 allow direct plotting of python strings whose format is the same
5180 5185 of gnuplot data files.
5181 5186
5182 5187 2002-12-16 Fernando Perez <fperez@colorado.edu>
5183 5188
5184 5189 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
5185 5190 value of exit question to be acknowledged.
5186 5191
5187 5192 2002-12-03 Fernando Perez <fperez@colorado.edu>
5188 5193
5189 5194 * IPython/ipmaker.py: removed generators, which had been added
5190 5195 by mistake in an earlier debugging run. This was causing trouble
5191 5196 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
5192 5197 for pointing this out.
5193 5198
5194 5199 2002-11-17 Fernando Perez <fperez@colorado.edu>
5195 5200
5196 5201 * Manual: updated the Gnuplot section.
5197 5202
5198 5203 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
5199 5204 a much better split of what goes in Runtime and what goes in
5200 5205 Interactive.
5201 5206
5202 5207 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
5203 5208 being imported from iplib.
5204 5209
5205 5210 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
5206 5211 for command-passing. Now the global Gnuplot instance is called
5207 5212 'gp' instead of 'g', which was really a far too fragile and
5208 5213 common name.
5209 5214
5210 5215 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
5211 5216 bounding boxes generated by Gnuplot for square plots.
5212 5217
5213 5218 * IPython/genutils.py (popkey): new function added. I should
5214 5219 suggest this on c.l.py as a dict method, it seems useful.
5215 5220
5216 5221 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
5217 5222 to transparently handle PostScript generation. MUCH better than
5218 5223 the previous plot_eps/replot_eps (which I removed now). The code
5219 5224 is also fairly clean and well documented now (including
5220 5225 docstrings).
5221 5226
5222 5227 2002-11-13 Fernando Perez <fperez@colorado.edu>
5223 5228
5224 5229 * IPython/Magic.py (Magic.magic_edit): fixed docstring
5225 5230 (inconsistent with options).
5226 5231
5227 5232 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
5228 5233 manually disabled, I don't know why. Fixed it.
5229 5234 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
5230 5235 eps output.
5231 5236
5232 5237 2002-11-12 Fernando Perez <fperez@colorado.edu>
5233 5238
5234 5239 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
5235 5240 don't propagate up to caller. Fixes crash reported by François
5236 5241 Pinard.
5237 5242
5238 5243 2002-11-09 Fernando Perez <fperez@colorado.edu>
5239 5244
5240 5245 * IPython/ipmaker.py (make_IPython): fixed problem with writing
5241 5246 history file for new users.
5242 5247 (make_IPython): fixed bug where initial install would leave the
5243 5248 user running in the .ipython dir.
5244 5249 (make_IPython): fixed bug where config dir .ipython would be
5245 5250 created regardless of the given -ipythondir option. Thanks to Cory
5246 5251 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
5247 5252
5248 5253 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
5249 5254 type confirmations. Will need to use it in all of IPython's code
5250 5255 consistently.
5251 5256
5252 5257 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
5253 5258 context to print 31 lines instead of the default 5. This will make
5254 5259 the crash reports extremely detailed in case the problem is in
5255 5260 libraries I don't have access to.
5256 5261
5257 5262 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
5258 5263 line of defense' code to still crash, but giving users fair
5259 5264 warning. I don't want internal errors to go unreported: if there's
5260 5265 an internal problem, IPython should crash and generate a full
5261 5266 report.
5262 5267
5263 5268 2002-11-08 Fernando Perez <fperez@colorado.edu>
5264 5269
5265 5270 * IPython/iplib.py (InteractiveShell.interact): added code to trap
5266 5271 otherwise uncaught exceptions which can appear if people set
5267 5272 sys.stdout to something badly broken. Thanks to a crash report
5268 5273 from henni-AT-mail.brainbot.com.
5269 5274
5270 5275 2002-11-04 Fernando Perez <fperez@colorado.edu>
5271 5276
5272 5277 * IPython/iplib.py (InteractiveShell.interact): added
5273 5278 __IPYTHON__active to the builtins. It's a flag which goes on when
5274 5279 the interaction starts and goes off again when it stops. This
5275 5280 allows embedding code to detect being inside IPython. Before this
5276 5281 was done via __IPYTHON__, but that only shows that an IPython
5277 5282 instance has been created.
5278 5283
5279 5284 * IPython/Magic.py (Magic.magic_env): I realized that in a
5280 5285 UserDict, instance.data holds the data as a normal dict. So I
5281 5286 modified @env to return os.environ.data instead of rebuilding a
5282 5287 dict by hand.
5283 5288
5284 5289 2002-11-02 Fernando Perez <fperez@colorado.edu>
5285 5290
5286 5291 * IPython/genutils.py (warn): changed so that level 1 prints no
5287 5292 header. Level 2 is now the default (with 'WARNING' header, as
5288 5293 before). I think I tracked all places where changes were needed in
5289 5294 IPython, but outside code using the old level numbering may have
5290 5295 broken.
5291 5296
5292 5297 * IPython/iplib.py (InteractiveShell.runcode): added this to
5293 5298 handle the tracebacks in SystemExit traps correctly. The previous
5294 5299 code (through interact) was printing more of the stack than
5295 5300 necessary, showing IPython internal code to the user.
5296 5301
5297 5302 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
5298 5303 default. Now that the default at the confirmation prompt is yes,
5299 5304 it's not so intrusive. François' argument that ipython sessions
5300 5305 tend to be complex enough not to lose them from an accidental C-d,
5301 5306 is a valid one.
5302 5307
5303 5308 * IPython/iplib.py (InteractiveShell.interact): added a
5304 5309 showtraceback() call to the SystemExit trap, and modified the exit
5305 5310 confirmation to have yes as the default.
5306 5311
5307 5312 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
5308 5313 this file. It's been gone from the code for a long time, this was
5309 5314 simply leftover junk.
5310 5315
5311 5316 2002-11-01 Fernando Perez <fperez@colorado.edu>
5312 5317
5313 5318 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
5314 5319 added. If set, IPython now traps EOF and asks for
5315 5320 confirmation. After a request by François Pinard.
5316 5321
5317 5322 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
5318 5323 of @abort, and with a new (better) mechanism for handling the
5319 5324 exceptions.
5320 5325
5321 5326 2002-10-27 Fernando Perez <fperez@colorado.edu>
5322 5327
5323 5328 * IPython/usage.py (__doc__): updated the --help information and
5324 5329 the ipythonrc file to indicate that -log generates
5325 5330 ./ipython.log. Also fixed the corresponding info in @logstart.
5326 5331 This and several other fixes in the manuals thanks to reports by
5327 5332 François Pinard <pinard-AT-iro.umontreal.ca>.
5328 5333
5329 5334 * IPython/Logger.py (Logger.switch_log): Fixed error message to
5330 5335 refer to @logstart (instead of @log, which doesn't exist).
5331 5336
5332 5337 * IPython/iplib.py (InteractiveShell._prefilter): fixed
5333 5338 AttributeError crash. Thanks to Christopher Armstrong
5334 5339 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
5335 5340 introduced recently (in 0.2.14pre37) with the fix to the eval
5336 5341 problem mentioned below.
5337 5342
5338 5343 2002-10-17 Fernando Perez <fperez@colorado.edu>
5339 5344
5340 5345 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
5341 5346 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
5342 5347
5343 5348 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
5344 5349 this function to fix a problem reported by Alex Schmolck. He saw
5345 5350 it with list comprehensions and generators, which were getting
5346 5351 called twice. The real problem was an 'eval' call in testing for
5347 5352 automagic which was evaluating the input line silently.
5348 5353
5349 5354 This is a potentially very nasty bug, if the input has side
5350 5355 effects which must not be repeated. The code is much cleaner now,
5351 5356 without any blanket 'except' left and with a regexp test for
5352 5357 actual function names.
5353 5358
5354 5359 But an eval remains, which I'm not fully comfortable with. I just
5355 5360 don't know how to find out if an expression could be a callable in
5356 5361 the user's namespace without doing an eval on the string. However
5357 5362 that string is now much more strictly checked so that no code
5358 5363 slips by, so the eval should only happen for things that can
5359 5364 really be only function/method names.
5360 5365
5361 5366 2002-10-15 Fernando Perez <fperez@colorado.edu>
5362 5367
5363 5368 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
5364 5369 OSX information to main manual, removed README_Mac_OSX file from
5365 5370 distribution. Also updated credits for recent additions.
5366 5371
5367 5372 2002-10-10 Fernando Perez <fperez@colorado.edu>
5368 5373
5369 5374 * README_Mac_OSX: Added a README for Mac OSX users for fixing
5370 5375 terminal-related issues. Many thanks to Andrea Riciputi
5371 5376 <andrea.riciputi-AT-libero.it> for writing it.
5372 5377
5373 5378 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
5374 5379 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
5375 5380
5376 5381 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
5377 5382 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
5378 5383 <syver-en-AT-online.no> who both submitted patches for this problem.
5379 5384
5380 5385 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
5381 5386 global embedding to make sure that things don't overwrite user
5382 5387 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
5383 5388
5384 5389 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
5385 5390 compatibility. Thanks to Hayden Callow
5386 5391 <h.callow-AT-elec.canterbury.ac.nz>
5387 5392
5388 5393 2002-10-04 Fernando Perez <fperez@colorado.edu>
5389 5394
5390 5395 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
5391 5396 Gnuplot.File objects.
5392 5397
5393 5398 2002-07-23 Fernando Perez <fperez@colorado.edu>
5394 5399
5395 5400 * IPython/genutils.py (timing): Added timings() and timing() for
5396 5401 quick access to the most commonly needed data, the execution
5397 5402 times. Old timing() renamed to timings_out().
5398 5403
5399 5404 2002-07-18 Fernando Perez <fperez@colorado.edu>
5400 5405
5401 5406 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
5402 5407 bug with nested instances disrupting the parent's tab completion.
5403 5408
5404 5409 * IPython/iplib.py (all_completions): Added Alex Schmolck's
5405 5410 all_completions code to begin the emacs integration.
5406 5411
5407 5412 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
5408 5413 argument to allow titling individual arrays when plotting.
5409 5414
5410 5415 2002-07-15 Fernando Perez <fperez@colorado.edu>
5411 5416
5412 5417 * setup.py (make_shortcut): changed to retrieve the value of
5413 5418 'Program Files' directory from the registry (this value changes in
5414 5419 non-english versions of Windows). Thanks to Thomas Fanslau
5415 5420 <tfanslau-AT-gmx.de> for the report.
5416 5421
5417 5422 2002-07-10 Fernando Perez <fperez@colorado.edu>
5418 5423
5419 5424 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
5420 5425 a bug in pdb, which crashes if a line with only whitespace is
5421 5426 entered. Bug report submitted to sourceforge.
5422 5427
5423 5428 2002-07-09 Fernando Perez <fperez@colorado.edu>
5424 5429
5425 5430 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
5426 5431 reporting exceptions (it's a bug in inspect.py, I just set a
5427 5432 workaround).
5428 5433
5429 5434 2002-07-08 Fernando Perez <fperez@colorado.edu>
5430 5435
5431 5436 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
5432 5437 __IPYTHON__ in __builtins__ to show up in user_ns.
5433 5438
5434 5439 2002-07-03 Fernando Perez <fperez@colorado.edu>
5435 5440
5436 5441 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
5437 5442 name from @gp_set_instance to @gp_set_default.
5438 5443
5439 5444 * IPython/ipmaker.py (make_IPython): default editor value set to
5440 5445 '0' (a string), to match the rc file. Otherwise will crash when
5441 5446 .strip() is called on it.
5442 5447
5443 5448
5444 5449 2002-06-28 Fernando Perez <fperez@colorado.edu>
5445 5450
5446 5451 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
5447 5452 of files in current directory when a file is executed via
5448 5453 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
5449 5454
5450 5455 * setup.py (manfiles): fix for rpm builds, submitted by RA
5451 5456 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
5452 5457
5453 5458 * IPython/ipmaker.py (make_IPython): fixed lookup of default
5454 5459 editor when set to '0'. Problem was, '0' evaluates to True (it's a
5455 5460 string!). A. Schmolck caught this one.
5456 5461
5457 5462 2002-06-27 Fernando Perez <fperez@colorado.edu>
5458 5463
5459 5464 * IPython/ipmaker.py (make_IPython): fixed bug when running user
5460 5465 defined files at the cmd line. __name__ wasn't being set to
5461 5466 __main__.
5462 5467
5463 5468 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
5464 5469 regular lists and tuples besides Numeric arrays.
5465 5470
5466 5471 * IPython/Prompts.py (CachedOutput.__call__): Added output
5467 5472 supression for input ending with ';'. Similar to Mathematica and
5468 5473 Matlab. The _* vars and Out[] list are still updated, just like
5469 5474 Mathematica behaves.
5470 5475
5471 5476 2002-06-25 Fernando Perez <fperez@colorado.edu>
5472 5477
5473 5478 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
5474 5479 .ini extensions for profiels under Windows.
5475 5480
5476 5481 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
5477 5482 string form. Fix contributed by Alexander Schmolck
5478 5483 <a.schmolck-AT-gmx.net>
5479 5484
5480 5485 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
5481 5486 pre-configured Gnuplot instance.
5482 5487
5483 5488 2002-06-21 Fernando Perez <fperez@colorado.edu>
5484 5489
5485 5490 * IPython/numutils.py (exp_safe): new function, works around the
5486 5491 underflow problems in Numeric.
5487 5492 (log2): New fn. Safe log in base 2: returns exact integer answer
5488 5493 for exact integer powers of 2.
5489 5494
5490 5495 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
5491 5496 properly.
5492 5497
5493 5498 2002-06-20 Fernando Perez <fperez@colorado.edu>
5494 5499
5495 5500 * IPython/genutils.py (timing): new function like
5496 5501 Mathematica's. Similar to time_test, but returns more info.
5497 5502
5498 5503 2002-06-18 Fernando Perez <fperez@colorado.edu>
5499 5504
5500 5505 * IPython/Magic.py (Magic.magic_save): modified @save and @r
5501 5506 according to Mike Heeter's suggestions.
5502 5507
5503 5508 2002-06-16 Fernando Perez <fperez@colorado.edu>
5504 5509
5505 5510 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
5506 5511 system. GnuplotMagic is gone as a user-directory option. New files
5507 5512 make it easier to use all the gnuplot stuff both from external
5508 5513 programs as well as from IPython. Had to rewrite part of
5509 5514 hardcopy() b/c of a strange bug: often the ps files simply don't
5510 5515 get created, and require a repeat of the command (often several
5511 5516 times).
5512 5517
5513 5518 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
5514 5519 resolve output channel at call time, so that if sys.stderr has
5515 5520 been redirected by user this gets honored.
5516 5521
5517 5522 2002-06-13 Fernando Perez <fperez@colorado.edu>
5518 5523
5519 5524 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
5520 5525 IPShell. Kept a copy with the old names to avoid breaking people's
5521 5526 embedded code.
5522 5527
5523 5528 * IPython/ipython: simplified it to the bare minimum after
5524 5529 Holger's suggestions. Added info about how to use it in
5525 5530 PYTHONSTARTUP.
5526 5531
5527 5532 * IPython/Shell.py (IPythonShell): changed the options passing
5528 5533 from a string with funky %s replacements to a straight list. Maybe
5529 5534 a bit more typing, but it follows sys.argv conventions, so there's
5530 5535 less special-casing to remember.
5531 5536
5532 5537 2002-06-12 Fernando Perez <fperez@colorado.edu>
5533 5538
5534 5539 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
5535 5540 command. Thanks to a suggestion by Mike Heeter.
5536 5541 (Magic.magic_pfile): added behavior to look at filenames if given
5537 5542 arg is not a defined object.
5538 5543 (Magic.magic_save): New @save function to save code snippets. Also
5539 5544 a Mike Heeter idea.
5540 5545
5541 5546 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
5542 5547 plot() and replot(). Much more convenient now, especially for
5543 5548 interactive use.
5544 5549
5545 5550 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
5546 5551 filenames.
5547 5552
5548 5553 2002-06-02 Fernando Perez <fperez@colorado.edu>
5549 5554
5550 5555 * IPython/Struct.py (Struct.__init__): modified to admit
5551 5556 initialization via another struct.
5552 5557
5553 5558 * IPython/genutils.py (SystemExec.__init__): New stateful
5554 5559 interface to xsys and bq. Useful for writing system scripts.
5555 5560
5556 5561 2002-05-30 Fernando Perez <fperez@colorado.edu>
5557 5562
5558 5563 * MANIFEST.in: Changed docfile selection to exclude all the lyx
5559 5564 documents. This will make the user download smaller (it's getting
5560 5565 too big).
5561 5566
5562 5567 2002-05-29 Fernando Perez <fperez@colorado.edu>
5563 5568
5564 5569 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
5565 5570 fix problems with shelve and pickle. Seems to work, but I don't
5566 5571 know if corner cases break it. Thanks to Mike Heeter
5567 5572 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
5568 5573
5569 5574 2002-05-24 Fernando Perez <fperez@colorado.edu>
5570 5575
5571 5576 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
5572 5577 macros having broken.
5573 5578
5574 5579 2002-05-21 Fernando Perez <fperez@colorado.edu>
5575 5580
5576 5581 * IPython/Magic.py (Magic.magic_logstart): fixed recently
5577 5582 introduced logging bug: all history before logging started was
5578 5583 being written one character per line! This came from the redesign
5579 5584 of the input history as a special list which slices to strings,
5580 5585 not to lists.
5581 5586
5582 5587 2002-05-20 Fernando Perez <fperez@colorado.edu>
5583 5588
5584 5589 * IPython/Prompts.py (CachedOutput.__init__): made the color table
5585 5590 be an attribute of all classes in this module. The design of these
5586 5591 classes needs some serious overhauling.
5587 5592
5588 5593 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
5589 5594 which was ignoring '_' in option names.
5590 5595
5591 5596 * IPython/ultraTB.py (FormattedTB.__init__): Changed
5592 5597 'Verbose_novars' to 'Context' and made it the new default. It's a
5593 5598 bit more readable and also safer than verbose.
5594 5599
5595 5600 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
5596 5601 triple-quoted strings.
5597 5602
5598 5603 * IPython/OInspect.py (__all__): new module exposing the object
5599 5604 introspection facilities. Now the corresponding magics are dummy
5600 5605 wrappers around this. Having this module will make it much easier
5601 5606 to put these functions into our modified pdb.
5602 5607 This new object inspector system uses the new colorizing module,
5603 5608 so source code and other things are nicely syntax highlighted.
5604 5609
5605 5610 2002-05-18 Fernando Perez <fperez@colorado.edu>
5606 5611
5607 5612 * IPython/ColorANSI.py: Split the coloring tools into a separate
5608 5613 module so I can use them in other code easier (they were part of
5609 5614 ultraTB).
5610 5615
5611 5616 2002-05-17 Fernando Perez <fperez@colorado.edu>
5612 5617
5613 5618 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5614 5619 fixed it to set the global 'g' also to the called instance, as
5615 5620 long as 'g' was still a gnuplot instance (so it doesn't overwrite
5616 5621 user's 'g' variables).
5617 5622
5618 5623 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
5619 5624 global variables (aliases to _ih,_oh) so that users which expect
5620 5625 In[5] or Out[7] to work aren't unpleasantly surprised.
5621 5626 (InputList.__getslice__): new class to allow executing slices of
5622 5627 input history directly. Very simple class, complements the use of
5623 5628 macros.
5624 5629
5625 5630 2002-05-16 Fernando Perez <fperez@colorado.edu>
5626 5631
5627 5632 * setup.py (docdirbase): make doc directory be just doc/IPython
5628 5633 without version numbers, it will reduce clutter for users.
5629 5634
5630 5635 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
5631 5636 execfile call to prevent possible memory leak. See for details:
5632 5637 http://mail.python.org/pipermail/python-list/2002-February/088476.html
5633 5638
5634 5639 2002-05-15 Fernando Perez <fperez@colorado.edu>
5635 5640
5636 5641 * IPython/Magic.py (Magic.magic_psource): made the object
5637 5642 introspection names be more standard: pdoc, pdef, pfile and
5638 5643 psource. They all print/page their output, and it makes
5639 5644 remembering them easier. Kept old names for compatibility as
5640 5645 aliases.
5641 5646
5642 5647 2002-05-14 Fernando Perez <fperez@colorado.edu>
5643 5648
5644 5649 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
5645 5650 what the mouse problem was. The trick is to use gnuplot with temp
5646 5651 files and NOT with pipes (for data communication), because having
5647 5652 both pipes and the mouse on is bad news.
5648 5653
5649 5654 2002-05-13 Fernando Perez <fperez@colorado.edu>
5650 5655
5651 5656 * IPython/Magic.py (Magic._ofind): fixed namespace order search
5652 5657 bug. Information would be reported about builtins even when
5653 5658 user-defined functions overrode them.
5654 5659
5655 5660 2002-05-11 Fernando Perez <fperez@colorado.edu>
5656 5661
5657 5662 * IPython/__init__.py (__all__): removed FlexCompleter from
5658 5663 __all__ so that things don't fail in platforms without readline.
5659 5664
5660 5665 2002-05-10 Fernando Perez <fperez@colorado.edu>
5661 5666
5662 5667 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
5663 5668 it requires Numeric, effectively making Numeric a dependency for
5664 5669 IPython.
5665 5670
5666 5671 * Released 0.2.13
5667 5672
5668 5673 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
5669 5674 profiler interface. Now all the major options from the profiler
5670 5675 module are directly supported in IPython, both for single
5671 5676 expressions (@prun) and for full programs (@run -p).
5672 5677
5673 5678 2002-05-09 Fernando Perez <fperez@colorado.edu>
5674 5679
5675 5680 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
5676 5681 magic properly formatted for screen.
5677 5682
5678 5683 * setup.py (make_shortcut): Changed things to put pdf version in
5679 5684 doc/ instead of doc/manual (had to change lyxport a bit).
5680 5685
5681 5686 * IPython/Magic.py (Profile.string_stats): made profile runs go
5682 5687 through pager (they are long and a pager allows searching, saving,
5683 5688 etc.)
5684 5689
5685 5690 2002-05-08 Fernando Perez <fperez@colorado.edu>
5686 5691
5687 5692 * Released 0.2.12
5688 5693
5689 5694 2002-05-06 Fernando Perez <fperez@colorado.edu>
5690 5695
5691 5696 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
5692 5697 introduced); 'hist n1 n2' was broken.
5693 5698 (Magic.magic_pdb): added optional on/off arguments to @pdb
5694 5699 (Magic.magic_run): added option -i to @run, which executes code in
5695 5700 the IPython namespace instead of a clean one. Also added @irun as
5696 5701 an alias to @run -i.
5697 5702
5698 5703 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
5699 5704 fixed (it didn't really do anything, the namespaces were wrong).
5700 5705
5701 5706 * IPython/Debugger.py (__init__): Added workaround for python 2.1
5702 5707
5703 5708 * IPython/__init__.py (__all__): Fixed package namespace, now
5704 5709 'import IPython' does give access to IPython.<all> as
5705 5710 expected. Also renamed __release__ to Release.
5706 5711
5707 5712 * IPython/Debugger.py (__license__): created new Pdb class which
5708 5713 functions like a drop-in for the normal pdb.Pdb but does NOT
5709 5714 import readline by default. This way it doesn't muck up IPython's
5710 5715 readline handling, and now tab-completion finally works in the
5711 5716 debugger -- sort of. It completes things globally visible, but the
5712 5717 completer doesn't track the stack as pdb walks it. That's a bit
5713 5718 tricky, and I'll have to implement it later.
5714 5719
5715 5720 2002-05-05 Fernando Perez <fperez@colorado.edu>
5716 5721
5717 5722 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
5718 5723 magic docstrings when printed via ? (explicit \'s were being
5719 5724 printed).
5720 5725
5721 5726 * IPython/ipmaker.py (make_IPython): fixed namespace
5722 5727 identification bug. Now variables loaded via logs or command-line
5723 5728 files are recognized in the interactive namespace by @who.
5724 5729
5725 5730 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
5726 5731 log replay system stemming from the string form of Structs.
5727 5732
5728 5733 * IPython/Magic.py (Macro.__init__): improved macros to properly
5729 5734 handle magic commands in them.
5730 5735 (Magic.magic_logstart): usernames are now expanded so 'logstart
5731 5736 ~/mylog' now works.
5732 5737
5733 5738 * IPython/iplib.py (complete): fixed bug where paths starting with
5734 5739 '/' would be completed as magic names.
5735 5740
5736 5741 2002-05-04 Fernando Perez <fperez@colorado.edu>
5737 5742
5738 5743 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
5739 5744 allow running full programs under the profiler's control.
5740 5745
5741 5746 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
5742 5747 mode to report exceptions verbosely but without formatting
5743 5748 variables. This addresses the issue of ipython 'freezing' (it's
5744 5749 not frozen, but caught in an expensive formatting loop) when huge
5745 5750 variables are in the context of an exception.
5746 5751 (VerboseTB.text): Added '--->' markers at line where exception was
5747 5752 triggered. Much clearer to read, especially in NoColor modes.
5748 5753
5749 5754 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
5750 5755 implemented in reverse when changing to the new parse_options().
5751 5756
5752 5757 2002-05-03 Fernando Perez <fperez@colorado.edu>
5753 5758
5754 5759 * IPython/Magic.py (Magic.parse_options): new function so that
5755 5760 magics can parse options easier.
5756 5761 (Magic.magic_prun): new function similar to profile.run(),
5757 5762 suggested by Chris Hart.
5758 5763 (Magic.magic_cd): fixed behavior so that it only changes if
5759 5764 directory actually is in history.
5760 5765
5761 5766 * IPython/usage.py (__doc__): added information about potential
5762 5767 slowness of Verbose exception mode when there are huge data
5763 5768 structures to be formatted (thanks to Archie Paulson).
5764 5769
5765 5770 * IPython/ipmaker.py (make_IPython): Changed default logging
5766 5771 (when simply called with -log) to use curr_dir/ipython.log in
5767 5772 rotate mode. Fixed crash which was occuring with -log before
5768 5773 (thanks to Jim Boyle).
5769 5774
5770 5775 2002-05-01 Fernando Perez <fperez@colorado.edu>
5771 5776
5772 5777 * Released 0.2.11 for these fixes (mainly the ultraTB one which
5773 5778 was nasty -- though somewhat of a corner case).
5774 5779
5775 5780 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
5776 5781 text (was a bug).
5777 5782
5778 5783 2002-04-30 Fernando Perez <fperez@colorado.edu>
5779 5784
5780 5785 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
5781 5786 a print after ^D or ^C from the user so that the In[] prompt
5782 5787 doesn't over-run the gnuplot one.
5783 5788
5784 5789 2002-04-29 Fernando Perez <fperez@colorado.edu>
5785 5790
5786 5791 * Released 0.2.10
5787 5792
5788 5793 * IPython/__release__.py (version): get date dynamically.
5789 5794
5790 5795 * Misc. documentation updates thanks to Arnd's comments. Also ran
5791 5796 a full spellcheck on the manual (hadn't been done in a while).
5792 5797
5793 5798 2002-04-27 Fernando Perez <fperez@colorado.edu>
5794 5799
5795 5800 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
5796 5801 starting a log in mid-session would reset the input history list.
5797 5802
5798 5803 2002-04-26 Fernando Perez <fperez@colorado.edu>
5799 5804
5800 5805 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
5801 5806 all files were being included in an update. Now anything in
5802 5807 UserConfig that matches [A-Za-z]*.py will go (this excludes
5803 5808 __init__.py)
5804 5809
5805 5810 2002-04-25 Fernando Perez <fperez@colorado.edu>
5806 5811
5807 5812 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
5808 5813 to __builtins__ so that any form of embedded or imported code can
5809 5814 test for being inside IPython.
5810 5815
5811 5816 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
5812 5817 changed to GnuplotMagic because it's now an importable module,
5813 5818 this makes the name follow that of the standard Gnuplot module.
5814 5819 GnuplotMagic can now be loaded at any time in mid-session.
5815 5820
5816 5821 2002-04-24 Fernando Perez <fperez@colorado.edu>
5817 5822
5818 5823 * IPython/numutils.py: removed SIUnits. It doesn't properly set
5819 5824 the globals (IPython has its own namespace) and the
5820 5825 PhysicalQuantity stuff is much better anyway.
5821 5826
5822 5827 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
5823 5828 embedding example to standard user directory for
5824 5829 distribution. Also put it in the manual.
5825 5830
5826 5831 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
5827 5832 instance as first argument (so it doesn't rely on some obscure
5828 5833 hidden global).
5829 5834
5830 5835 * IPython/UserConfig/ipythonrc.py: put () back in accepted
5831 5836 delimiters. While it prevents ().TAB from working, it allows
5832 5837 completions in open (... expressions. This is by far a more common
5833 5838 case.
5834 5839
5835 5840 2002-04-23 Fernando Perez <fperez@colorado.edu>
5836 5841
5837 5842 * IPython/Extensions/InterpreterPasteInput.py: new
5838 5843 syntax-processing module for pasting lines with >>> or ... at the
5839 5844 start.
5840 5845
5841 5846 * IPython/Extensions/PhysicalQ_Interactive.py
5842 5847 (PhysicalQuantityInteractive.__int__): fixed to work with either
5843 5848 Numeric or math.
5844 5849
5845 5850 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
5846 5851 provided profiles. Now we have:
5847 5852 -math -> math module as * and cmath with its own namespace.
5848 5853 -numeric -> Numeric as *, plus gnuplot & grace
5849 5854 -physics -> same as before
5850 5855
5851 5856 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
5852 5857 user-defined magics wouldn't be found by @magic if they were
5853 5858 defined as class methods. Also cleaned up the namespace search
5854 5859 logic and the string building (to use %s instead of many repeated
5855 5860 string adds).
5856 5861
5857 5862 * IPython/UserConfig/example-magic.py (magic_foo): updated example
5858 5863 of user-defined magics to operate with class methods (cleaner, in
5859 5864 line with the gnuplot code).
5860 5865
5861 5866 2002-04-22 Fernando Perez <fperez@colorado.edu>
5862 5867
5863 5868 * setup.py: updated dependency list so that manual is updated when
5864 5869 all included files change.
5865 5870
5866 5871 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
5867 5872 the delimiter removal option (the fix is ugly right now).
5868 5873
5869 5874 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
5870 5875 all of the math profile (quicker loading, no conflict between
5871 5876 g-9.8 and g-gnuplot).
5872 5877
5873 5878 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5874 5879 name of post-mortem files to IPython_crash_report.txt.
5875 5880
5876 5881 * Cleanup/update of the docs. Added all the new readline info and
5877 5882 formatted all lists as 'real lists'.
5878 5883
5879 5884 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5880 5885 tab-completion options, since the full readline parse_and_bind is
5881 5886 now accessible.
5882 5887
5883 5888 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5884 5889 handling of readline options. Now users can specify any string to
5885 5890 be passed to parse_and_bind(), as well as the delimiters to be
5886 5891 removed.
5887 5892 (InteractiveShell.__init__): Added __name__ to the global
5888 5893 namespace so that things like Itpl which rely on its existence
5889 5894 don't crash.
5890 5895 (InteractiveShell._prefilter): Defined the default with a _ so
5891 5896 that prefilter() is easier to override, while the default one
5892 5897 remains available.
5893 5898
5894 5899 2002-04-18 Fernando Perez <fperez@colorado.edu>
5895 5900
5896 5901 * Added information about pdb in the docs.
5897 5902
5898 5903 2002-04-17 Fernando Perez <fperez@colorado.edu>
5899 5904
5900 5905 * IPython/ipmaker.py (make_IPython): added rc_override option to
5901 5906 allow passing config options at creation time which may override
5902 5907 anything set in the config files or command line. This is
5903 5908 particularly useful for configuring embedded instances.
5904 5909
5905 5910 2002-04-15 Fernando Perez <fperez@colorado.edu>
5906 5911
5907 5912 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5908 5913 crash embedded instances because of the input cache falling out of
5909 5914 sync with the output counter.
5910 5915
5911 5916 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5912 5917 mode which calls pdb after an uncaught exception in IPython itself.
5913 5918
5914 5919 2002-04-14 Fernando Perez <fperez@colorado.edu>
5915 5920
5916 5921 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5917 5922 readline, fix it back after each call.
5918 5923
5919 5924 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5920 5925 method to force all access via __call__(), which guarantees that
5921 5926 traceback references are properly deleted.
5922 5927
5923 5928 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5924 5929 improve printing when pprint is in use.
5925 5930
5926 5931 2002-04-13 Fernando Perez <fperez@colorado.edu>
5927 5932
5928 5933 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5929 5934 exceptions aren't caught anymore. If the user triggers one, he
5930 5935 should know why he's doing it and it should go all the way up,
5931 5936 just like any other exception. So now @abort will fully kill the
5932 5937 embedded interpreter and the embedding code (unless that happens
5933 5938 to catch SystemExit).
5934 5939
5935 5940 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5936 5941 and a debugger() method to invoke the interactive pdb debugger
5937 5942 after printing exception information. Also added the corresponding
5938 5943 -pdb option and @pdb magic to control this feature, and updated
5939 5944 the docs. After a suggestion from Christopher Hart
5940 5945 (hart-AT-caltech.edu).
5941 5946
5942 5947 2002-04-12 Fernando Perez <fperez@colorado.edu>
5943 5948
5944 5949 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5945 5950 the exception handlers defined by the user (not the CrashHandler)
5946 5951 so that user exceptions don't trigger an ipython bug report.
5947 5952
5948 5953 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5949 5954 configurable (it should have always been so).
5950 5955
5951 5956 2002-03-26 Fernando Perez <fperez@colorado.edu>
5952 5957
5953 5958 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5954 5959 and there to fix embedding namespace issues. This should all be
5955 5960 done in a more elegant way.
5956 5961
5957 5962 2002-03-25 Fernando Perez <fperez@colorado.edu>
5958 5963
5959 5964 * IPython/genutils.py (get_home_dir): Try to make it work under
5960 5965 win9x also.
5961 5966
5962 5967 2002-03-20 Fernando Perez <fperez@colorado.edu>
5963 5968
5964 5969 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5965 5970 sys.displayhook untouched upon __init__.
5966 5971
5967 5972 2002-03-19 Fernando Perez <fperez@colorado.edu>
5968 5973
5969 5974 * Released 0.2.9 (for embedding bug, basically).
5970 5975
5971 5976 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5972 5977 exceptions so that enclosing shell's state can be restored.
5973 5978
5974 5979 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5975 5980 naming conventions in the .ipython/ dir.
5976 5981
5977 5982 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5978 5983 from delimiters list so filenames with - in them get expanded.
5979 5984
5980 5985 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5981 5986 sys.displayhook not being properly restored after an embedded call.
5982 5987
5983 5988 2002-03-18 Fernando Perez <fperez@colorado.edu>
5984 5989
5985 5990 * Released 0.2.8
5986 5991
5987 5992 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5988 5993 some files weren't being included in a -upgrade.
5989 5994 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5990 5995 on' so that the first tab completes.
5991 5996 (InteractiveShell.handle_magic): fixed bug with spaces around
5992 5997 quotes breaking many magic commands.
5993 5998
5994 5999 * setup.py: added note about ignoring the syntax error messages at
5995 6000 installation.
5996 6001
5997 6002 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5998 6003 streamlining the gnuplot interface, now there's only one magic @gp.
5999 6004
6000 6005 2002-03-17 Fernando Perez <fperez@colorado.edu>
6001 6006
6002 6007 * IPython/UserConfig/magic_gnuplot.py: new name for the
6003 6008 example-magic_pm.py file. Much enhanced system, now with a shell
6004 6009 for communicating directly with gnuplot, one command at a time.
6005 6010
6006 6011 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
6007 6012 setting __name__=='__main__'.
6008 6013
6009 6014 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
6010 6015 mini-shell for accessing gnuplot from inside ipython. Should
6011 6016 extend it later for grace access too. Inspired by Arnd's
6012 6017 suggestion.
6013 6018
6014 6019 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
6015 6020 calling magic functions with () in their arguments. Thanks to Arnd
6016 6021 Baecker for pointing this to me.
6017 6022
6018 6023 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
6019 6024 infinitely for integer or complex arrays (only worked with floats).
6020 6025
6021 6026 2002-03-16 Fernando Perez <fperez@colorado.edu>
6022 6027
6023 6028 * setup.py: Merged setup and setup_windows into a single script
6024 6029 which properly handles things for windows users.
6025 6030
6026 6031 2002-03-15 Fernando Perez <fperez@colorado.edu>
6027 6032
6028 6033 * Big change to the manual: now the magics are all automatically
6029 6034 documented. This information is generated from their docstrings
6030 6035 and put in a latex file included by the manual lyx file. This way
6031 6036 we get always up to date information for the magics. The manual
6032 6037 now also has proper version information, also auto-synced.
6033 6038
6034 6039 For this to work, an undocumented --magic_docstrings option was added.
6035 6040
6036 6041 2002-03-13 Fernando Perez <fperez@colorado.edu>
6037 6042
6038 6043 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
6039 6044 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
6040 6045
6041 6046 2002-03-12 Fernando Perez <fperez@colorado.edu>
6042 6047
6043 6048 * IPython/ultraTB.py (TermColors): changed color escapes again to
6044 6049 fix the (old, reintroduced) line-wrapping bug. Basically, if
6045 6050 \001..\002 aren't given in the color escapes, lines get wrapped
6046 6051 weirdly. But giving those screws up old xterms and emacs terms. So
6047 6052 I added some logic for emacs terms to be ok, but I can't identify old
6048 6053 xterms separately ($TERM=='xterm' for many terminals, like konsole).
6049 6054
6050 6055 2002-03-10 Fernando Perez <fperez@colorado.edu>
6051 6056
6052 6057 * IPython/usage.py (__doc__): Various documentation cleanups and
6053 6058 updates, both in usage docstrings and in the manual.
6054 6059
6055 6060 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
6056 6061 handling of caching. Set minimum acceptabe value for having a
6057 6062 cache at 20 values.
6058 6063
6059 6064 * IPython/iplib.py (InteractiveShell.user_setup): moved the
6060 6065 install_first_time function to a method, renamed it and added an
6061 6066 'upgrade' mode. Now people can update their config directory with
6062 6067 a simple command line switch (-upgrade, also new).
6063 6068
6064 6069 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
6065 6070 @file (convenient for automagic users under Python >= 2.2).
6066 6071 Removed @files (it seemed more like a plural than an abbrev. of
6067 6072 'file show').
6068 6073
6069 6074 * IPython/iplib.py (install_first_time): Fixed crash if there were
6070 6075 backup files ('~') in .ipython/ install directory.
6071 6076
6072 6077 * IPython/ipmaker.py (make_IPython): fixes for new prompt
6073 6078 system. Things look fine, but these changes are fairly
6074 6079 intrusive. Test them for a few days.
6075 6080
6076 6081 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
6077 6082 the prompts system. Now all in/out prompt strings are user
6078 6083 controllable. This is particularly useful for embedding, as one
6079 6084 can tag embedded instances with particular prompts.
6080 6085
6081 6086 Also removed global use of sys.ps1/2, which now allows nested
6082 6087 embeddings without any problems. Added command-line options for
6083 6088 the prompt strings.
6084 6089
6085 6090 2002-03-08 Fernando Perez <fperez@colorado.edu>
6086 6091
6087 6092 * IPython/UserConfig/example-embed-short.py (ipshell): added
6088 6093 example file with the bare minimum code for embedding.
6089 6094
6090 6095 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
6091 6096 functionality for the embeddable shell to be activated/deactivated
6092 6097 either globally or at each call.
6093 6098
6094 6099 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
6095 6100 rewriting the prompt with '--->' for auto-inputs with proper
6096 6101 coloring. Now the previous UGLY hack in handle_auto() is gone, and
6097 6102 this is handled by the prompts class itself, as it should.
6098 6103
6099 6104 2002-03-05 Fernando Perez <fperez@colorado.edu>
6100 6105
6101 6106 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
6102 6107 @logstart to avoid name clashes with the math log function.
6103 6108
6104 6109 * Big updates to X/Emacs section of the manual.
6105 6110
6106 6111 * Removed ipython_emacs. Milan explained to me how to pass
6107 6112 arguments to ipython through Emacs. Some day I'm going to end up
6108 6113 learning some lisp...
6109 6114
6110 6115 2002-03-04 Fernando Perez <fperez@colorado.edu>
6111 6116
6112 6117 * IPython/ipython_emacs: Created script to be used as the
6113 6118 py-python-command Emacs variable so we can pass IPython
6114 6119 parameters. I can't figure out how to tell Emacs directly to pass
6115 6120 parameters to IPython, so a dummy shell script will do it.
6116 6121
6117 6122 Other enhancements made for things to work better under Emacs'
6118 6123 various types of terminals. Many thanks to Milan Zamazal
6119 6124 <pdm-AT-zamazal.org> for all the suggestions and pointers.
6120 6125
6121 6126 2002-03-01 Fernando Perez <fperez@colorado.edu>
6122 6127
6123 6128 * IPython/ipmaker.py (make_IPython): added a --readline! option so
6124 6129 that loading of readline is now optional. This gives better
6125 6130 control to emacs users.
6126 6131
6127 6132 * IPython/ultraTB.py (__date__): Modified color escape sequences
6128 6133 and now things work fine under xterm and in Emacs' term buffers
6129 6134 (though not shell ones). Well, in emacs you get colors, but all
6130 6135 seem to be 'light' colors (no difference between dark and light
6131 6136 ones). But the garbage chars are gone, and also in xterms. It
6132 6137 seems that now I'm using 'cleaner' ansi sequences.
6133 6138
6134 6139 2002-02-21 Fernando Perez <fperez@colorado.edu>
6135 6140
6136 6141 * Released 0.2.7 (mainly to publish the scoping fix).
6137 6142
6138 6143 * IPython/Logger.py (Logger.logstate): added. A corresponding
6139 6144 @logstate magic was created.
6140 6145
6141 6146 * IPython/Magic.py: fixed nested scoping problem under Python
6142 6147 2.1.x (automagic wasn't working).
6143 6148
6144 6149 2002-02-20 Fernando Perez <fperez@colorado.edu>
6145 6150
6146 6151 * Released 0.2.6.
6147 6152
6148 6153 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
6149 6154 option so that logs can come out without any headers at all.
6150 6155
6151 6156 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
6152 6157 SciPy.
6153 6158
6154 6159 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
6155 6160 that embedded IPython calls don't require vars() to be explicitly
6156 6161 passed. Now they are extracted from the caller's frame (code
6157 6162 snatched from Eric Jones' weave). Added better documentation to
6158 6163 the section on embedding and the example file.
6159 6164
6160 6165 * IPython/genutils.py (page): Changed so that under emacs, it just
6161 6166 prints the string. You can then page up and down in the emacs
6162 6167 buffer itself. This is how the builtin help() works.
6163 6168
6164 6169 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
6165 6170 macro scoping: macros need to be executed in the user's namespace
6166 6171 to work as if they had been typed by the user.
6167 6172
6168 6173 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
6169 6174 execute automatically (no need to type 'exec...'). They then
6170 6175 behave like 'true macros'. The printing system was also modified
6171 6176 for this to work.
6172 6177
6173 6178 2002-02-19 Fernando Perez <fperez@colorado.edu>
6174 6179
6175 6180 * IPython/genutils.py (page_file): new function for paging files
6176 6181 in an OS-independent way. Also necessary for file viewing to work
6177 6182 well inside Emacs buffers.
6178 6183 (page): Added checks for being in an emacs buffer.
6179 6184 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
6180 6185 same bug in iplib.
6181 6186
6182 6187 2002-02-18 Fernando Perez <fperez@colorado.edu>
6183 6188
6184 6189 * IPython/iplib.py (InteractiveShell.init_readline): modified use
6185 6190 of readline so that IPython can work inside an Emacs buffer.
6186 6191
6187 6192 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
6188 6193 method signatures (they weren't really bugs, but it looks cleaner
6189 6194 and keeps PyChecker happy).
6190 6195
6191 6196 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
6192 6197 for implementing various user-defined hooks. Currently only
6193 6198 display is done.
6194 6199
6195 6200 * IPython/Prompts.py (CachedOutput._display): changed display
6196 6201 functions so that they can be dynamically changed by users easily.
6197 6202
6198 6203 * IPython/Extensions/numeric_formats.py (num_display): added an
6199 6204 extension for printing NumPy arrays in flexible manners. It
6200 6205 doesn't do anything yet, but all the structure is in
6201 6206 place. Ultimately the plan is to implement output format control
6202 6207 like in Octave.
6203 6208
6204 6209 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
6205 6210 methods are found at run-time by all the automatic machinery.
6206 6211
6207 6212 2002-02-17 Fernando Perez <fperez@colorado.edu>
6208 6213
6209 6214 * setup_Windows.py (make_shortcut): documented. Cleaned up the
6210 6215 whole file a little.
6211 6216
6212 6217 * ToDo: closed this document. Now there's a new_design.lyx
6213 6218 document for all new ideas. Added making a pdf of it for the
6214 6219 end-user distro.
6215 6220
6216 6221 * IPython/Logger.py (Logger.switch_log): Created this to replace
6217 6222 logon() and logoff(). It also fixes a nasty crash reported by
6218 6223 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
6219 6224
6220 6225 * IPython/iplib.py (complete): got auto-completion to work with
6221 6226 automagic (I had wanted this for a long time).
6222 6227
6223 6228 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
6224 6229 to @file, since file() is now a builtin and clashes with automagic
6225 6230 for @file.
6226 6231
6227 6232 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
6228 6233 of this was previously in iplib, which had grown to more than 2000
6229 6234 lines, way too long. No new functionality, but it makes managing
6230 6235 the code a bit easier.
6231 6236
6232 6237 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
6233 6238 information to crash reports.
6234 6239
6235 6240 2002-02-12 Fernando Perez <fperez@colorado.edu>
6236 6241
6237 6242 * Released 0.2.5.
6238 6243
6239 6244 2002-02-11 Fernando Perez <fperez@colorado.edu>
6240 6245
6241 6246 * Wrote a relatively complete Windows installer. It puts
6242 6247 everything in place, creates Start Menu entries and fixes the
6243 6248 color issues. Nothing fancy, but it works.
6244 6249
6245 6250 2002-02-10 Fernando Perez <fperez@colorado.edu>
6246 6251
6247 6252 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
6248 6253 os.path.expanduser() call so that we can type @run ~/myfile.py and
6249 6254 have thigs work as expected.
6250 6255
6251 6256 * IPython/genutils.py (page): fixed exception handling so things
6252 6257 work both in Unix and Windows correctly. Quitting a pager triggers
6253 6258 an IOError/broken pipe in Unix, and in windows not finding a pager
6254 6259 is also an IOError, so I had to actually look at the return value
6255 6260 of the exception, not just the exception itself. Should be ok now.
6256 6261
6257 6262 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
6258 6263 modified to allow case-insensitive color scheme changes.
6259 6264
6260 6265 2002-02-09 Fernando Perez <fperez@colorado.edu>
6261 6266
6262 6267 * IPython/genutils.py (native_line_ends): new function to leave
6263 6268 user config files with os-native line-endings.
6264 6269
6265 6270 * README and manual updates.
6266 6271
6267 6272 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
6268 6273 instead of StringType to catch Unicode strings.
6269 6274
6270 6275 * IPython/genutils.py (filefind): fixed bug for paths with
6271 6276 embedded spaces (very common in Windows).
6272 6277
6273 6278 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
6274 6279 files under Windows, so that they get automatically associated
6275 6280 with a text editor. Windows makes it a pain to handle
6276 6281 extension-less files.
6277 6282
6278 6283 * IPython/iplib.py (InteractiveShell.init_readline): Made the
6279 6284 warning about readline only occur for Posix. In Windows there's no
6280 6285 way to get readline, so why bother with the warning.
6281 6286
6282 6287 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
6283 6288 for __str__ instead of dir(self), since dir() changed in 2.2.
6284 6289
6285 6290 * Ported to Windows! Tested on XP, I suspect it should work fine
6286 6291 on NT/2000, but I don't think it will work on 98 et al. That
6287 6292 series of Windows is such a piece of junk anyway that I won't try
6288 6293 porting it there. The XP port was straightforward, showed a few
6289 6294 bugs here and there (fixed all), in particular some string
6290 6295 handling stuff which required considering Unicode strings (which
6291 6296 Windows uses). This is good, but hasn't been too tested :) No
6292 6297 fancy installer yet, I'll put a note in the manual so people at
6293 6298 least make manually a shortcut.
6294 6299
6295 6300 * IPython/iplib.py (Magic.magic_colors): Unified the color options
6296 6301 into a single one, "colors". This now controls both prompt and
6297 6302 exception color schemes, and can be changed both at startup
6298 6303 (either via command-line switches or via ipythonrc files) and at
6299 6304 runtime, with @colors.
6300 6305 (Magic.magic_run): renamed @prun to @run and removed the old
6301 6306 @run. The two were too similar to warrant keeping both.
6302 6307
6303 6308 2002-02-03 Fernando Perez <fperez@colorado.edu>
6304 6309
6305 6310 * IPython/iplib.py (install_first_time): Added comment on how to
6306 6311 configure the color options for first-time users. Put a <return>
6307 6312 request at the end so that small-terminal users get a chance to
6308 6313 read the startup info.
6309 6314
6310 6315 2002-01-23 Fernando Perez <fperez@colorado.edu>
6311 6316
6312 6317 * IPython/iplib.py (CachedOutput.update): Changed output memory
6313 6318 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
6314 6319 input history we still use _i. Did this b/c these variable are
6315 6320 very commonly used in interactive work, so the less we need to
6316 6321 type the better off we are.
6317 6322 (Magic.magic_prun): updated @prun to better handle the namespaces
6318 6323 the file will run in, including a fix for __name__ not being set
6319 6324 before.
6320 6325
6321 6326 2002-01-20 Fernando Perez <fperez@colorado.edu>
6322 6327
6323 6328 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
6324 6329 extra garbage for Python 2.2. Need to look more carefully into
6325 6330 this later.
6326 6331
6327 6332 2002-01-19 Fernando Perez <fperez@colorado.edu>
6328 6333
6329 6334 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
6330 6335 display SyntaxError exceptions properly formatted when they occur
6331 6336 (they can be triggered by imported code).
6332 6337
6333 6338 2002-01-18 Fernando Perez <fperez@colorado.edu>
6334 6339
6335 6340 * IPython/iplib.py (InteractiveShell.safe_execfile): now
6336 6341 SyntaxError exceptions are reported nicely formatted, instead of
6337 6342 spitting out only offset information as before.
6338 6343 (Magic.magic_prun): Added the @prun function for executing
6339 6344 programs with command line args inside IPython.
6340 6345
6341 6346 2002-01-16 Fernando Perez <fperez@colorado.edu>
6342 6347
6343 6348 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
6344 6349 to *not* include the last item given in a range. This brings their
6345 6350 behavior in line with Python's slicing:
6346 6351 a[n1:n2] -> a[n1]...a[n2-1]
6347 6352 It may be a bit less convenient, but I prefer to stick to Python's
6348 6353 conventions *everywhere*, so users never have to wonder.
6349 6354 (Magic.magic_macro): Added @macro function to ease the creation of
6350 6355 macros.
6351 6356
6352 6357 2002-01-05 Fernando Perez <fperez@colorado.edu>
6353 6358
6354 6359 * Released 0.2.4.
6355 6360
6356 6361 * IPython/iplib.py (Magic.magic_pdef):
6357 6362 (InteractiveShell.safe_execfile): report magic lines and error
6358 6363 lines without line numbers so one can easily copy/paste them for
6359 6364 re-execution.
6360 6365
6361 6366 * Updated manual with recent changes.
6362 6367
6363 6368 * IPython/iplib.py (Magic.magic_oinfo): added constructor
6364 6369 docstring printing when class? is called. Very handy for knowing
6365 6370 how to create class instances (as long as __init__ is well
6366 6371 documented, of course :)
6367 6372 (Magic.magic_doc): print both class and constructor docstrings.
6368 6373 (Magic.magic_pdef): give constructor info if passed a class and
6369 6374 __call__ info for callable object instances.
6370 6375
6371 6376 2002-01-04 Fernando Perez <fperez@colorado.edu>
6372 6377
6373 6378 * Made deep_reload() off by default. It doesn't always work
6374 6379 exactly as intended, so it's probably safer to have it off. It's
6375 6380 still available as dreload() anyway, so nothing is lost.
6376 6381
6377 6382 2002-01-02 Fernando Perez <fperez@colorado.edu>
6378 6383
6379 6384 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
6380 6385 so I wanted an updated release).
6381 6386
6382 6387 2001-12-27 Fernando Perez <fperez@colorado.edu>
6383 6388
6384 6389 * IPython/iplib.py (InteractiveShell.interact): Added the original
6385 6390 code from 'code.py' for this module in order to change the
6386 6391 handling of a KeyboardInterrupt. This was necessary b/c otherwise
6387 6392 the history cache would break when the user hit Ctrl-C, and
6388 6393 interact() offers no way to add any hooks to it.
6389 6394
6390 6395 2001-12-23 Fernando Perez <fperez@colorado.edu>
6391 6396
6392 6397 * setup.py: added check for 'MANIFEST' before trying to remove
6393 6398 it. Thanks to Sean Reifschneider.
6394 6399
6395 6400 2001-12-22 Fernando Perez <fperez@colorado.edu>
6396 6401
6397 6402 * Released 0.2.2.
6398 6403
6399 6404 * Finished (reasonably) writing the manual. Later will add the
6400 6405 python-standard navigation stylesheets, but for the time being
6401 6406 it's fairly complete. Distribution will include html and pdf
6402 6407 versions.
6403 6408
6404 6409 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
6405 6410 (MayaVi author).
6406 6411
6407 6412 2001-12-21 Fernando Perez <fperez@colorado.edu>
6408 6413
6409 6414 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
6410 6415 good public release, I think (with the manual and the distutils
6411 6416 installer). The manual can use some work, but that can go
6412 6417 slowly. Otherwise I think it's quite nice for end users. Next
6413 6418 summer, rewrite the guts of it...
6414 6419
6415 6420 * Changed format of ipythonrc files to use whitespace as the
6416 6421 separator instead of an explicit '='. Cleaner.
6417 6422
6418 6423 2001-12-20 Fernando Perez <fperez@colorado.edu>
6419 6424
6420 6425 * Started a manual in LyX. For now it's just a quick merge of the
6421 6426 various internal docstrings and READMEs. Later it may grow into a
6422 6427 nice, full-blown manual.
6423 6428
6424 6429 * Set up a distutils based installer. Installation should now be
6425 6430 trivially simple for end-users.
6426 6431
6427 6432 2001-12-11 Fernando Perez <fperez@colorado.edu>
6428 6433
6429 6434 * Released 0.2.0. First public release, announced it at
6430 6435 comp.lang.python. From now on, just bugfixes...
6431 6436
6432 6437 * Went through all the files, set copyright/license notices and
6433 6438 cleaned up things. Ready for release.
6434 6439
6435 6440 2001-12-10 Fernando Perez <fperez@colorado.edu>
6436 6441
6437 6442 * Changed the first-time installer not to use tarfiles. It's more
6438 6443 robust now and less unix-dependent. Also makes it easier for
6439 6444 people to later upgrade versions.
6440 6445
6441 6446 * Changed @exit to @abort to reflect the fact that it's pretty
6442 6447 brutal (a sys.exit()). The difference between @abort and Ctrl-D
6443 6448 becomes significant only when IPyhton is embedded: in that case,
6444 6449 C-D closes IPython only, but @abort kills the enclosing program
6445 6450 too (unless it had called IPython inside a try catching
6446 6451 SystemExit).
6447 6452
6448 6453 * Created Shell module which exposes the actuall IPython Shell
6449 6454 classes, currently the normal and the embeddable one. This at
6450 6455 least offers a stable interface we won't need to change when
6451 6456 (later) the internals are rewritten. That rewrite will be confined
6452 6457 to iplib and ipmaker, but the Shell interface should remain as is.
6453 6458
6454 6459 * Added embed module which offers an embeddable IPShell object,
6455 6460 useful to fire up IPython *inside* a running program. Great for
6456 6461 debugging or dynamical data analysis.
6457 6462
6458 6463 2001-12-08 Fernando Perez <fperez@colorado.edu>
6459 6464
6460 6465 * Fixed small bug preventing seeing info from methods of defined
6461 6466 objects (incorrect namespace in _ofind()).
6462 6467
6463 6468 * Documentation cleanup. Moved the main usage docstrings to a
6464 6469 separate file, usage.py (cleaner to maintain, and hopefully in the
6465 6470 future some perlpod-like way of producing interactive, man and
6466 6471 html docs out of it will be found).
6467 6472
6468 6473 * Added @profile to see your profile at any time.
6469 6474
6470 6475 * Added @p as an alias for 'print'. It's especially convenient if
6471 6476 using automagic ('p x' prints x).
6472 6477
6473 6478 * Small cleanups and fixes after a pychecker run.
6474 6479
6475 6480 * Changed the @cd command to handle @cd - and @cd -<n> for
6476 6481 visiting any directory in _dh.
6477 6482
6478 6483 * Introduced _dh, a history of visited directories. @dhist prints
6479 6484 it out with numbers.
6480 6485
6481 6486 2001-12-07 Fernando Perez <fperez@colorado.edu>
6482 6487
6483 6488 * Released 0.1.22
6484 6489
6485 6490 * Made initialization a bit more robust against invalid color
6486 6491 options in user input (exit, not traceback-crash).
6487 6492
6488 6493 * Changed the bug crash reporter to write the report only in the
6489 6494 user's .ipython directory. That way IPython won't litter people's
6490 6495 hard disks with crash files all over the place. Also print on
6491 6496 screen the necessary mail command.
6492 6497
6493 6498 * With the new ultraTB, implemented LightBG color scheme for light
6494 6499 background terminals. A lot of people like white backgrounds, so I
6495 6500 guess we should at least give them something readable.
6496 6501
6497 6502 2001-12-06 Fernando Perez <fperez@colorado.edu>
6498 6503
6499 6504 * Modified the structure of ultraTB. Now there's a proper class
6500 6505 for tables of color schemes which allow adding schemes easily and
6501 6506 switching the active scheme without creating a new instance every
6502 6507 time (which was ridiculous). The syntax for creating new schemes
6503 6508 is also cleaner. I think ultraTB is finally done, with a clean
6504 6509 class structure. Names are also much cleaner (now there's proper
6505 6510 color tables, no need for every variable to also have 'color' in
6506 6511 its name).
6507 6512
6508 6513 * Broke down genutils into separate files. Now genutils only
6509 6514 contains utility functions, and classes have been moved to their
6510 6515 own files (they had enough independent functionality to warrant
6511 6516 it): ConfigLoader, OutputTrap, Struct.
6512 6517
6513 6518 2001-12-05 Fernando Perez <fperez@colorado.edu>
6514 6519
6515 6520 * IPython turns 21! Released version 0.1.21, as a candidate for
6516 6521 public consumption. If all goes well, release in a few days.
6517 6522
6518 6523 * Fixed path bug (files in Extensions/ directory wouldn't be found
6519 6524 unless IPython/ was explicitly in sys.path).
6520 6525
6521 6526 * Extended the FlexCompleter class as MagicCompleter to allow
6522 6527 completion of @-starting lines.
6523 6528
6524 6529 * Created __release__.py file as a central repository for release
6525 6530 info that other files can read from.
6526 6531
6527 6532 * Fixed small bug in logging: when logging was turned on in
6528 6533 mid-session, old lines with special meanings (!@?) were being
6529 6534 logged without the prepended comment, which is necessary since
6530 6535 they are not truly valid python syntax. This should make session
6531 6536 restores produce less errors.
6532 6537
6533 6538 * The namespace cleanup forced me to make a FlexCompleter class
6534 6539 which is nothing but a ripoff of rlcompleter, but with selectable
6535 6540 namespace (rlcompleter only works in __main__.__dict__). I'll try
6536 6541 to submit a note to the authors to see if this change can be
6537 6542 incorporated in future rlcompleter releases (Dec.6: done)
6538 6543
6539 6544 * More fixes to namespace handling. It was a mess! Now all
6540 6545 explicit references to __main__.__dict__ are gone (except when
6541 6546 really needed) and everything is handled through the namespace
6542 6547 dicts in the IPython instance. We seem to be getting somewhere
6543 6548 with this, finally...
6544 6549
6545 6550 * Small documentation updates.
6546 6551
6547 6552 * Created the Extensions directory under IPython (with an
6548 6553 __init__.py). Put the PhysicalQ stuff there. This directory should
6549 6554 be used for all special-purpose extensions.
6550 6555
6551 6556 * File renaming:
6552 6557 ipythonlib --> ipmaker
6553 6558 ipplib --> iplib
6554 6559 This makes a bit more sense in terms of what these files actually do.
6555 6560
6556 6561 * Moved all the classes and functions in ipythonlib to ipplib, so
6557 6562 now ipythonlib only has make_IPython(). This will ease up its
6558 6563 splitting in smaller functional chunks later.
6559 6564
6560 6565 * Cleaned up (done, I think) output of @whos. Better column
6561 6566 formatting, and now shows str(var) for as much as it can, which is
6562 6567 typically what one gets with a 'print var'.
6563 6568
6564 6569 2001-12-04 Fernando Perez <fperez@colorado.edu>
6565 6570
6566 6571 * Fixed namespace problems. Now builtin/IPyhton/user names get
6567 6572 properly reported in their namespace. Internal namespace handling
6568 6573 is finally getting decent (not perfect yet, but much better than
6569 6574 the ad-hoc mess we had).
6570 6575
6571 6576 * Removed -exit option. If people just want to run a python
6572 6577 script, that's what the normal interpreter is for. Less
6573 6578 unnecessary options, less chances for bugs.
6574 6579
6575 6580 * Added a crash handler which generates a complete post-mortem if
6576 6581 IPython crashes. This will help a lot in tracking bugs down the
6577 6582 road.
6578 6583
6579 6584 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
6580 6585 which were boud to functions being reassigned would bypass the
6581 6586 logger, breaking the sync of _il with the prompt counter. This
6582 6587 would then crash IPython later when a new line was logged.
6583 6588
6584 6589 2001-12-02 Fernando Perez <fperez@colorado.edu>
6585 6590
6586 6591 * Made IPython a package. This means people don't have to clutter
6587 6592 their sys.path with yet another directory. Changed the INSTALL
6588 6593 file accordingly.
6589 6594
6590 6595 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
6591 6596 sorts its output (so @who shows it sorted) and @whos formats the
6592 6597 table according to the width of the first column. Nicer, easier to
6593 6598 read. Todo: write a generic table_format() which takes a list of
6594 6599 lists and prints it nicely formatted, with optional row/column
6595 6600 separators and proper padding and justification.
6596 6601
6597 6602 * Released 0.1.20
6598 6603
6599 6604 * Fixed bug in @log which would reverse the inputcache list (a
6600 6605 copy operation was missing).
6601 6606
6602 6607 * Code cleanup. @config was changed to use page(). Better, since
6603 6608 its output is always quite long.
6604 6609
6605 6610 * Itpl is back as a dependency. I was having too many problems
6606 6611 getting the parametric aliases to work reliably, and it's just
6607 6612 easier to code weird string operations with it than playing %()s
6608 6613 games. It's only ~6k, so I don't think it's too big a deal.
6609 6614
6610 6615 * Found (and fixed) a very nasty bug with history. !lines weren't
6611 6616 getting cached, and the out of sync caches would crash
6612 6617 IPython. Fixed it by reorganizing the prefilter/handlers/logger
6613 6618 division of labor a bit better. Bug fixed, cleaner structure.
6614 6619
6615 6620 2001-12-01 Fernando Perez <fperez@colorado.edu>
6616 6621
6617 6622 * Released 0.1.19
6618 6623
6619 6624 * Added option -n to @hist to prevent line number printing. Much
6620 6625 easier to copy/paste code this way.
6621 6626
6622 6627 * Created global _il to hold the input list. Allows easy
6623 6628 re-execution of blocks of code by slicing it (inspired by Janko's
6624 6629 comment on 'macros').
6625 6630
6626 6631 * Small fixes and doc updates.
6627 6632
6628 6633 * Rewrote @history function (was @h). Renamed it to @hist, @h is
6629 6634 much too fragile with automagic. Handles properly multi-line
6630 6635 statements and takes parameters.
6631 6636
6632 6637 2001-11-30 Fernando Perez <fperez@colorado.edu>
6633 6638
6634 6639 * Version 0.1.18 released.
6635 6640
6636 6641 * Fixed nasty namespace bug in initial module imports.
6637 6642
6638 6643 * Added copyright/license notes to all code files (except
6639 6644 DPyGetOpt). For the time being, LGPL. That could change.
6640 6645
6641 6646 * Rewrote a much nicer README, updated INSTALL, cleaned up
6642 6647 ipythonrc-* samples.
6643 6648
6644 6649 * Overall code/documentation cleanup. Basically ready for
6645 6650 release. Only remaining thing: licence decision (LGPL?).
6646 6651
6647 6652 * Converted load_config to a class, ConfigLoader. Now recursion
6648 6653 control is better organized. Doesn't include the same file twice.
6649 6654
6650 6655 2001-11-29 Fernando Perez <fperez@colorado.edu>
6651 6656
6652 6657 * Got input history working. Changed output history variables from
6653 6658 _p to _o so that _i is for input and _o for output. Just cleaner
6654 6659 convention.
6655 6660
6656 6661 * Implemented parametric aliases. This pretty much allows the
6657 6662 alias system to offer full-blown shell convenience, I think.
6658 6663
6659 6664 * Version 0.1.17 released, 0.1.18 opened.
6660 6665
6661 6666 * dot_ipython/ipythonrc (alias): added documentation.
6662 6667 (xcolor): Fixed small bug (xcolors -> xcolor)
6663 6668
6664 6669 * Changed the alias system. Now alias is a magic command to define
6665 6670 aliases just like the shell. Rationale: the builtin magics should
6666 6671 be there for things deeply connected to IPython's
6667 6672 architecture. And this is a much lighter system for what I think
6668 6673 is the really important feature: allowing users to define quickly
6669 6674 magics that will do shell things for them, so they can customize
6670 6675 IPython easily to match their work habits. If someone is really
6671 6676 desperate to have another name for a builtin alias, they can
6672 6677 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
6673 6678 works.
6674 6679
6675 6680 2001-11-28 Fernando Perez <fperez@colorado.edu>
6676 6681
6677 6682 * Changed @file so that it opens the source file at the proper
6678 6683 line. Since it uses less, if your EDITOR environment is
6679 6684 configured, typing v will immediately open your editor of choice
6680 6685 right at the line where the object is defined. Not as quick as
6681 6686 having a direct @edit command, but for all intents and purposes it
6682 6687 works. And I don't have to worry about writing @edit to deal with
6683 6688 all the editors, less does that.
6684 6689
6685 6690 * Version 0.1.16 released, 0.1.17 opened.
6686 6691
6687 6692 * Fixed some nasty bugs in the page/page_dumb combo that could
6688 6693 crash IPython.
6689 6694
6690 6695 2001-11-27 Fernando Perez <fperez@colorado.edu>
6691 6696
6692 6697 * Version 0.1.15 released, 0.1.16 opened.
6693 6698
6694 6699 * Finally got ? and ?? to work for undefined things: now it's
6695 6700 possible to type {}.get? and get information about the get method
6696 6701 of dicts, or os.path? even if only os is defined (so technically
6697 6702 os.path isn't). Works at any level. For example, after import os,
6698 6703 os?, os.path?, os.path.abspath? all work. This is great, took some
6699 6704 work in _ofind.
6700 6705
6701 6706 * Fixed more bugs with logging. The sanest way to do it was to add
6702 6707 to @log a 'mode' parameter. Killed two in one shot (this mode
6703 6708 option was a request of Janko's). I think it's finally clean
6704 6709 (famous last words).
6705 6710
6706 6711 * Added a page_dumb() pager which does a decent job of paging on
6707 6712 screen, if better things (like less) aren't available. One less
6708 6713 unix dependency (someday maybe somebody will port this to
6709 6714 windows).
6710 6715
6711 6716 * Fixed problem in magic_log: would lock of logging out if log
6712 6717 creation failed (because it would still think it had succeeded).
6713 6718
6714 6719 * Improved the page() function using curses to auto-detect screen
6715 6720 size. Now it can make a much better decision on whether to print
6716 6721 or page a string. Option screen_length was modified: a value 0
6717 6722 means auto-detect, and that's the default now.
6718 6723
6719 6724 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
6720 6725 go out. I'll test it for a few days, then talk to Janko about
6721 6726 licences and announce it.
6722 6727
6723 6728 * Fixed the length of the auto-generated ---> prompt which appears
6724 6729 for auto-parens and auto-quotes. Getting this right isn't trivial,
6725 6730 with all the color escapes, different prompt types and optional
6726 6731 separators. But it seems to be working in all the combinations.
6727 6732
6728 6733 2001-11-26 Fernando Perez <fperez@colorado.edu>
6729 6734
6730 6735 * Wrote a regexp filter to get option types from the option names
6731 6736 string. This eliminates the need to manually keep two duplicate
6732 6737 lists.
6733 6738
6734 6739 * Removed the unneeded check_option_names. Now options are handled
6735 6740 in a much saner manner and it's easy to visually check that things
6736 6741 are ok.
6737 6742
6738 6743 * Updated version numbers on all files I modified to carry a
6739 6744 notice so Janko and Nathan have clear version markers.
6740 6745
6741 6746 * Updated docstring for ultraTB with my changes. I should send
6742 6747 this to Nathan.
6743 6748
6744 6749 * Lots of small fixes. Ran everything through pychecker again.
6745 6750
6746 6751 * Made loading of deep_reload an cmd line option. If it's not too
6747 6752 kosher, now people can just disable it. With -nodeep_reload it's
6748 6753 still available as dreload(), it just won't overwrite reload().
6749 6754
6750 6755 * Moved many options to the no| form (-opt and -noopt
6751 6756 accepted). Cleaner.
6752 6757
6753 6758 * Changed magic_log so that if called with no parameters, it uses
6754 6759 'rotate' mode. That way auto-generated logs aren't automatically
6755 6760 over-written. For normal logs, now a backup is made if it exists
6756 6761 (only 1 level of backups). A new 'backup' mode was added to the
6757 6762 Logger class to support this. This was a request by Janko.
6758 6763
6759 6764 * Added @logoff/@logon to stop/restart an active log.
6760 6765
6761 6766 * Fixed a lot of bugs in log saving/replay. It was pretty
6762 6767 broken. Now special lines (!@,/) appear properly in the command
6763 6768 history after a log replay.
6764 6769
6765 6770 * Tried and failed to implement full session saving via pickle. My
6766 6771 idea was to pickle __main__.__dict__, but modules can't be
6767 6772 pickled. This would be a better alternative to replaying logs, but
6768 6773 seems quite tricky to get to work. Changed -session to be called
6769 6774 -logplay, which more accurately reflects what it does. And if we
6770 6775 ever get real session saving working, -session is now available.
6771 6776
6772 6777 * Implemented color schemes for prompts also. As for tracebacks,
6773 6778 currently only NoColor and Linux are supported. But now the
6774 6779 infrastructure is in place, based on a generic ColorScheme
6775 6780 class. So writing and activating new schemes both for the prompts
6776 6781 and the tracebacks should be straightforward.
6777 6782
6778 6783 * Version 0.1.13 released, 0.1.14 opened.
6779 6784
6780 6785 * Changed handling of options for output cache. Now counter is
6781 6786 hardwired starting at 1 and one specifies the maximum number of
6782 6787 entries *in the outcache* (not the max prompt counter). This is
6783 6788 much better, since many statements won't increase the cache
6784 6789 count. It also eliminated some confusing options, now there's only
6785 6790 one: cache_size.
6786 6791
6787 6792 * Added 'alias' magic function and magic_alias option in the
6788 6793 ipythonrc file. Now the user can easily define whatever names he
6789 6794 wants for the magic functions without having to play weird
6790 6795 namespace games. This gives IPython a real shell-like feel.
6791 6796
6792 6797 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
6793 6798 @ or not).
6794 6799
6795 6800 This was one of the last remaining 'visible' bugs (that I know
6796 6801 of). I think if I can clean up the session loading so it works
6797 6802 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
6798 6803 about licensing).
6799 6804
6800 6805 2001-11-25 Fernando Perez <fperez@colorado.edu>
6801 6806
6802 6807 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
6803 6808 there's a cleaner distinction between what ? and ?? show.
6804 6809
6805 6810 * Added screen_length option. Now the user can define his own
6806 6811 screen size for page() operations.
6807 6812
6808 6813 * Implemented magic shell-like functions with automatic code
6809 6814 generation. Now adding another function is just a matter of adding
6810 6815 an entry to a dict, and the function is dynamically generated at
6811 6816 run-time. Python has some really cool features!
6812 6817
6813 6818 * Renamed many options to cleanup conventions a little. Now all
6814 6819 are lowercase, and only underscores where needed. Also in the code
6815 6820 option name tables are clearer.
6816 6821
6817 6822 * Changed prompts a little. Now input is 'In [n]:' instead of
6818 6823 'In[n]:='. This allows it the numbers to be aligned with the
6819 6824 Out[n] numbers, and removes usage of ':=' which doesn't exist in
6820 6825 Python (it was a Mathematica thing). The '...' continuation prompt
6821 6826 was also changed a little to align better.
6822 6827
6823 6828 * Fixed bug when flushing output cache. Not all _p<n> variables
6824 6829 exist, so their deletion needs to be wrapped in a try:
6825 6830
6826 6831 * Figured out how to properly use inspect.formatargspec() (it
6827 6832 requires the args preceded by *). So I removed all the code from
6828 6833 _get_pdef in Magic, which was just replicating that.
6829 6834
6830 6835 * Added test to prefilter to allow redefining magic function names
6831 6836 as variables. This is ok, since the @ form is always available,
6832 6837 but whe should allow the user to define a variable called 'ls' if
6833 6838 he needs it.
6834 6839
6835 6840 * Moved the ToDo information from README into a separate ToDo.
6836 6841
6837 6842 * General code cleanup and small bugfixes. I think it's close to a
6838 6843 state where it can be released, obviously with a big 'beta'
6839 6844 warning on it.
6840 6845
6841 6846 * Got the magic function split to work. Now all magics are defined
6842 6847 in a separate class. It just organizes things a bit, and now
6843 6848 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
6844 6849 was too long).
6845 6850
6846 6851 * Changed @clear to @reset to avoid potential confusions with
6847 6852 the shell command clear. Also renamed @cl to @clear, which does
6848 6853 exactly what people expect it to from their shell experience.
6849 6854
6850 6855 Added a check to the @reset command (since it's so
6851 6856 destructive, it's probably a good idea to ask for confirmation).
6852 6857 But now reset only works for full namespace resetting. Since the
6853 6858 del keyword is already there for deleting a few specific
6854 6859 variables, I don't see the point of having a redundant magic
6855 6860 function for the same task.
6856 6861
6857 6862 2001-11-24 Fernando Perez <fperez@colorado.edu>
6858 6863
6859 6864 * Updated the builtin docs (esp. the ? ones).
6860 6865
6861 6866 * Ran all the code through pychecker. Not terribly impressed with
6862 6867 it: lots of spurious warnings and didn't really find anything of
6863 6868 substance (just a few modules being imported and not used).
6864 6869
6865 6870 * Implemented the new ultraTB functionality into IPython. New
6866 6871 option: xcolors. This chooses color scheme. xmode now only selects
6867 6872 between Plain and Verbose. Better orthogonality.
6868 6873
6869 6874 * Large rewrite of ultraTB. Much cleaner now, with a separation of
6870 6875 mode and color scheme for the exception handlers. Now it's
6871 6876 possible to have the verbose traceback with no coloring.
6872 6877
6873 6878 2001-11-23 Fernando Perez <fperez@colorado.edu>
6874 6879
6875 6880 * Version 0.1.12 released, 0.1.13 opened.
6876 6881
6877 6882 * Removed option to set auto-quote and auto-paren escapes by
6878 6883 user. The chances of breaking valid syntax are just too high. If
6879 6884 someone *really* wants, they can always dig into the code.
6880 6885
6881 6886 * Made prompt separators configurable.
6882 6887
6883 6888 2001-11-22 Fernando Perez <fperez@colorado.edu>
6884 6889
6885 6890 * Small bugfixes in many places.
6886 6891
6887 6892 * Removed the MyCompleter class from ipplib. It seemed redundant
6888 6893 with the C-p,C-n history search functionality. Less code to
6889 6894 maintain.
6890 6895
6891 6896 * Moved all the original ipython.py code into ipythonlib.py. Right
6892 6897 now it's just one big dump into a function called make_IPython, so
6893 6898 no real modularity has been gained. But at least it makes the
6894 6899 wrapper script tiny, and since ipythonlib is a module, it gets
6895 6900 compiled and startup is much faster.
6896 6901
6897 6902 This is a reasobably 'deep' change, so we should test it for a
6898 6903 while without messing too much more with the code.
6899 6904
6900 6905 2001-11-21 Fernando Perez <fperez@colorado.edu>
6901 6906
6902 6907 * Version 0.1.11 released, 0.1.12 opened for further work.
6903 6908
6904 6909 * Removed dependency on Itpl. It was only needed in one place. It
6905 6910 would be nice if this became part of python, though. It makes life
6906 6911 *a lot* easier in some cases.
6907 6912
6908 6913 * Simplified the prefilter code a bit. Now all handlers are
6909 6914 expected to explicitly return a value (at least a blank string).
6910 6915
6911 6916 * Heavy edits in ipplib. Removed the help system altogether. Now
6912 6917 obj?/?? is used for inspecting objects, a magic @doc prints
6913 6918 docstrings, and full-blown Python help is accessed via the 'help'
6914 6919 keyword. This cleans up a lot of code (less to maintain) and does
6915 6920 the job. Since 'help' is now a standard Python component, might as
6916 6921 well use it and remove duplicate functionality.
6917 6922
6918 6923 Also removed the option to use ipplib as a standalone program. By
6919 6924 now it's too dependent on other parts of IPython to function alone.
6920 6925
6921 6926 * Fixed bug in genutils.pager. It would crash if the pager was
6922 6927 exited immediately after opening (broken pipe).
6923 6928
6924 6929 * Trimmed down the VerboseTB reporting a little. The header is
6925 6930 much shorter now and the repeated exception arguments at the end
6926 6931 have been removed. For interactive use the old header seemed a bit
6927 6932 excessive.
6928 6933
6929 6934 * Fixed small bug in output of @whos for variables with multi-word
6930 6935 types (only first word was displayed).
6931 6936
6932 6937 2001-11-17 Fernando Perez <fperez@colorado.edu>
6933 6938
6934 6939 * Version 0.1.10 released, 0.1.11 opened for further work.
6935 6940
6936 6941 * Modified dirs and friends. dirs now *returns* the stack (not
6937 6942 prints), so one can manipulate it as a variable. Convenient to
6938 6943 travel along many directories.
6939 6944
6940 6945 * Fixed bug in magic_pdef: would only work with functions with
6941 6946 arguments with default values.
6942 6947
6943 6948 2001-11-14 Fernando Perez <fperez@colorado.edu>
6944 6949
6945 6950 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6946 6951 example with IPython. Various other minor fixes and cleanups.
6947 6952
6948 6953 * Version 0.1.9 released, 0.1.10 opened for further work.
6949 6954
6950 6955 * Added sys.path to the list of directories searched in the
6951 6956 execfile= option. It used to be the current directory and the
6952 6957 user's IPYTHONDIR only.
6953 6958
6954 6959 2001-11-13 Fernando Perez <fperez@colorado.edu>
6955 6960
6956 6961 * Reinstated the raw_input/prefilter separation that Janko had
6957 6962 initially. This gives a more convenient setup for extending the
6958 6963 pre-processor from the outside: raw_input always gets a string,
6959 6964 and prefilter has to process it. We can then redefine prefilter
6960 6965 from the outside and implement extensions for special
6961 6966 purposes.
6962 6967
6963 6968 Today I got one for inputting PhysicalQuantity objects
6964 6969 (from Scientific) without needing any function calls at
6965 6970 all. Extremely convenient, and it's all done as a user-level
6966 6971 extension (no IPython code was touched). Now instead of:
6967 6972 a = PhysicalQuantity(4.2,'m/s**2')
6968 6973 one can simply say
6969 6974 a = 4.2 m/s**2
6970 6975 or even
6971 6976 a = 4.2 m/s^2
6972 6977
6973 6978 I use this, but it's also a proof of concept: IPython really is
6974 6979 fully user-extensible, even at the level of the parsing of the
6975 6980 command line. It's not trivial, but it's perfectly doable.
6976 6981
6977 6982 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6978 6983 the problem of modules being loaded in the inverse order in which
6979 6984 they were defined in
6980 6985
6981 6986 * Version 0.1.8 released, 0.1.9 opened for further work.
6982 6987
6983 6988 * Added magics pdef, source and file. They respectively show the
6984 6989 definition line ('prototype' in C), source code and full python
6985 6990 file for any callable object. The object inspector oinfo uses
6986 6991 these to show the same information.
6987 6992
6988 6993 * Version 0.1.7 released, 0.1.8 opened for further work.
6989 6994
6990 6995 * Separated all the magic functions into a class called Magic. The
6991 6996 InteractiveShell class was becoming too big for Xemacs to handle
6992 6997 (de-indenting a line would lock it up for 10 seconds while it
6993 6998 backtracked on the whole class!)
6994 6999
6995 7000 FIXME: didn't work. It can be done, but right now namespaces are
6996 7001 all messed up. Do it later (reverted it for now, so at least
6997 7002 everything works as before).
6998 7003
6999 7004 * Got the object introspection system (magic_oinfo) working! I
7000 7005 think this is pretty much ready for release to Janko, so he can
7001 7006 test it for a while and then announce it. Pretty much 100% of what
7002 7007 I wanted for the 'phase 1' release is ready. Happy, tired.
7003 7008
7004 7009 2001-11-12 Fernando Perez <fperez@colorado.edu>
7005 7010
7006 7011 * Version 0.1.6 released, 0.1.7 opened for further work.
7007 7012
7008 7013 * Fixed bug in printing: it used to test for truth before
7009 7014 printing, so 0 wouldn't print. Now checks for None.
7010 7015
7011 7016 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
7012 7017 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
7013 7018 reaches by hand into the outputcache. Think of a better way to do
7014 7019 this later.
7015 7020
7016 7021 * Various small fixes thanks to Nathan's comments.
7017 7022
7018 7023 * Changed magic_pprint to magic_Pprint. This way it doesn't
7019 7024 collide with pprint() and the name is consistent with the command
7020 7025 line option.
7021 7026
7022 7027 * Changed prompt counter behavior to be fully like
7023 7028 Mathematica's. That is, even input that doesn't return a result
7024 7029 raises the prompt counter. The old behavior was kind of confusing
7025 7030 (getting the same prompt number several times if the operation
7026 7031 didn't return a result).
7027 7032
7028 7033 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
7029 7034
7030 7035 * Fixed -Classic mode (wasn't working anymore).
7031 7036
7032 7037 * Added colored prompts using Nathan's new code. Colors are
7033 7038 currently hardwired, they can be user-configurable. For
7034 7039 developers, they can be chosen in file ipythonlib.py, at the
7035 7040 beginning of the CachedOutput class def.
7036 7041
7037 7042 2001-11-11 Fernando Perez <fperez@colorado.edu>
7038 7043
7039 7044 * Version 0.1.5 released, 0.1.6 opened for further work.
7040 7045
7041 7046 * Changed magic_env to *return* the environment as a dict (not to
7042 7047 print it). This way it prints, but it can also be processed.
7043 7048
7044 7049 * Added Verbose exception reporting to interactive
7045 7050 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
7046 7051 traceback. Had to make some changes to the ultraTB file. This is
7047 7052 probably the last 'big' thing in my mental todo list. This ties
7048 7053 in with the next entry:
7049 7054
7050 7055 * Changed -Xi and -Xf to a single -xmode option. Now all the user
7051 7056 has to specify is Plain, Color or Verbose for all exception
7052 7057 handling.
7053 7058
7054 7059 * Removed ShellServices option. All this can really be done via
7055 7060 the magic system. It's easier to extend, cleaner and has automatic
7056 7061 namespace protection and documentation.
7057 7062
7058 7063 2001-11-09 Fernando Perez <fperez@colorado.edu>
7059 7064
7060 7065 * Fixed bug in output cache flushing (missing parameter to
7061 7066 __init__). Other small bugs fixed (found using pychecker).
7062 7067
7063 7068 * Version 0.1.4 opened for bugfixing.
7064 7069
7065 7070 2001-11-07 Fernando Perez <fperez@colorado.edu>
7066 7071
7067 7072 * Version 0.1.3 released, mainly because of the raw_input bug.
7068 7073
7069 7074 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
7070 7075 and when testing for whether things were callable, a call could
7071 7076 actually be made to certain functions. They would get called again
7072 7077 once 'really' executed, with a resulting double call. A disaster
7073 7078 in many cases (list.reverse() would never work!).
7074 7079
7075 7080 * Removed prefilter() function, moved its code to raw_input (which
7076 7081 after all was just a near-empty caller for prefilter). This saves
7077 7082 a function call on every prompt, and simplifies the class a tiny bit.
7078 7083
7079 7084 * Fix _ip to __ip name in magic example file.
7080 7085
7081 7086 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
7082 7087 work with non-gnu versions of tar.
7083 7088
7084 7089 2001-11-06 Fernando Perez <fperez@colorado.edu>
7085 7090
7086 7091 * Version 0.1.2. Just to keep track of the recent changes.
7087 7092
7088 7093 * Fixed nasty bug in output prompt routine. It used to check 'if
7089 7094 arg != None...'. Problem is, this fails if arg implements a
7090 7095 special comparison (__cmp__) which disallows comparing to
7091 7096 None. Found it when trying to use the PhysicalQuantity module from
7092 7097 ScientificPython.
7093 7098
7094 7099 2001-11-05 Fernando Perez <fperez@colorado.edu>
7095 7100
7096 7101 * Also added dirs. Now the pushd/popd/dirs family functions
7097 7102 basically like the shell, with the added convenience of going home
7098 7103 when called with no args.
7099 7104
7100 7105 * pushd/popd slightly modified to mimic shell behavior more
7101 7106 closely.
7102 7107
7103 7108 * Added env,pushd,popd from ShellServices as magic functions. I
7104 7109 think the cleanest will be to port all desired functions from
7105 7110 ShellServices as magics and remove ShellServices altogether. This
7106 7111 will provide a single, clean way of adding functionality
7107 7112 (shell-type or otherwise) to IP.
7108 7113
7109 7114 2001-11-04 Fernando Perez <fperez@colorado.edu>
7110 7115
7111 7116 * Added .ipython/ directory to sys.path. This way users can keep
7112 7117 customizations there and access them via import.
7113 7118
7114 7119 2001-11-03 Fernando Perez <fperez@colorado.edu>
7115 7120
7116 7121 * Opened version 0.1.1 for new changes.
7117 7122
7118 7123 * Changed version number to 0.1.0: first 'public' release, sent to
7119 7124 Nathan and Janko.
7120 7125
7121 7126 * Lots of small fixes and tweaks.
7122 7127
7123 7128 * Minor changes to whos format. Now strings are shown, snipped if
7124 7129 too long.
7125 7130
7126 7131 * Changed ShellServices to work on __main__ so they show up in @who
7127 7132
7128 7133 * Help also works with ? at the end of a line:
7129 7134 ?sin and sin?
7130 7135 both produce the same effect. This is nice, as often I use the
7131 7136 tab-complete to find the name of a method, but I used to then have
7132 7137 to go to the beginning of the line to put a ? if I wanted more
7133 7138 info. Now I can just add the ? and hit return. Convenient.
7134 7139
7135 7140 2001-11-02 Fernando Perez <fperez@colorado.edu>
7136 7141
7137 7142 * Python version check (>=2.1) added.
7138 7143
7139 7144 * Added LazyPython documentation. At this point the docs are quite
7140 7145 a mess. A cleanup is in order.
7141 7146
7142 7147 * Auto-installer created. For some bizarre reason, the zipfiles
7143 7148 module isn't working on my system. So I made a tar version
7144 7149 (hopefully the command line options in various systems won't kill
7145 7150 me).
7146 7151
7147 7152 * Fixes to Struct in genutils. Now all dictionary-like methods are
7148 7153 protected (reasonably).
7149 7154
7150 7155 * Added pager function to genutils and changed ? to print usage
7151 7156 note through it (it was too long).
7152 7157
7153 7158 * Added the LazyPython functionality. Works great! I changed the
7154 7159 auto-quote escape to ';', it's on home row and next to '. But
7155 7160 both auto-quote and auto-paren (still /) escapes are command-line
7156 7161 parameters.
7157 7162
7158 7163
7159 7164 2001-11-01 Fernando Perez <fperez@colorado.edu>
7160 7165
7161 7166 * Version changed to 0.0.7. Fairly large change: configuration now
7162 7167 is all stored in a directory, by default .ipython. There, all
7163 7168 config files have normal looking names (not .names)
7164 7169
7165 7170 * Version 0.0.6 Released first to Lucas and Archie as a test
7166 7171 run. Since it's the first 'semi-public' release, change version to
7167 7172 > 0.0.6 for any changes now.
7168 7173
7169 7174 * Stuff I had put in the ipplib.py changelog:
7170 7175
7171 7176 Changes to InteractiveShell:
7172 7177
7173 7178 - Made the usage message a parameter.
7174 7179
7175 7180 - Require the name of the shell variable to be given. It's a bit
7176 7181 of a hack, but allows the name 'shell' not to be hardwired in the
7177 7182 magic (@) handler, which is problematic b/c it requires
7178 7183 polluting the global namespace with 'shell'. This in turn is
7179 7184 fragile: if a user redefines a variable called shell, things
7180 7185 break.
7181 7186
7182 7187 - magic @: all functions available through @ need to be defined
7183 7188 as magic_<name>, even though they can be called simply as
7184 7189 @<name>. This allows the special command @magic to gather
7185 7190 information automatically about all existing magic functions,
7186 7191 even if they are run-time user extensions, by parsing the shell
7187 7192 instance __dict__ looking for special magic_ names.
7188 7193
7189 7194 - mainloop: added *two* local namespace parameters. This allows
7190 7195 the class to differentiate between parameters which were there
7191 7196 before and after command line initialization was processed. This
7192 7197 way, later @who can show things loaded at startup by the
7193 7198 user. This trick was necessary to make session saving/reloading
7194 7199 really work: ideally after saving/exiting/reloading a session,
7195 7200 *everything* should look the same, including the output of @who. I
7196 7201 was only able to make this work with this double namespace
7197 7202 trick.
7198 7203
7199 7204 - added a header to the logfile which allows (almost) full
7200 7205 session restoring.
7201 7206
7202 7207 - prepend lines beginning with @ or !, with a and log
7203 7208 them. Why? !lines: may be useful to know what you did @lines:
7204 7209 they may affect session state. So when restoring a session, at
7205 7210 least inform the user of their presence. I couldn't quite get
7206 7211 them to properly re-execute, but at least the user is warned.
7207 7212
7208 7213 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now