##// END OF EJS Templates
Hooks now implement "Chain of Command" design pattern,...
vivainio -
Show More
@@ -1,95 +1,136 b''
1 """hooks for IPython.
1 """hooks for IPython.
2
2
3 In Python, it is possible to overwrite any method of any object if you really
3 In Python, it is possible to overwrite any method of any object if you really
4 want to. But IPython exposes a few 'hooks', methods which are _designed_ to
4 want to. But IPython exposes a few 'hooks', methods which are _designed_ to
5 be overwritten by users for customization purposes. This module defines the
5 be overwritten by users for customization purposes. This module defines the
6 default versions of all such hooks, which get used by IPython if not
6 default versions of all such hooks, which get used by IPython if not
7 overridden by the user.
7 overridden by the user.
8
8
9 hooks are simple functions, but they should be declared with 'self' as their
9 hooks are simple functions, but they should be declared with 'self' as their
10 first argument, because when activated they are registered into IPython as
10 first argument, because when activated they are registered into IPython as
11 instance methods. The self argument will be the IPython running instance
11 instance methods. The self argument will be the IPython running instance
12 itself, so hooks have full access to the entire IPython object.
12 itself, so hooks have full access to the entire IPython object.
13
13
14 If you wish to define a new hook and activate it, you need to put the
14 If you wish to define a new hook and activate it, you need to put the
15 necessary code into a python file which can be either imported or execfile()'d
15 necessary code into a python file which can be either imported or execfile()'d
16 from within your ipythonrc configuration.
16 from within your ipythonrc configuration.
17
17
18 For example, suppose that you have a module called 'myiphooks' in your
18 For example, suppose that you have a module called 'myiphooks' in your
19 PYTHONPATH, which contains the following definition:
19 PYTHONPATH, which contains the following definition:
20
20
21 import os
21 import os
22 def calljed(self,filename, linenum):
22 def calljed(self,filename, linenum):
23 "My editor hook calls the jed editor directly."
23 "My editor hook calls the jed editor directly."
24 print "Calling my own editor, jed ..."
24 print "Calling my own editor, jed ..."
25 os.system('jed +%d %s' % (linenum,filename))
25 os.system('jed +%d %s' % (linenum,filename))
26
26
27 You can then execute the following line of code to make it the new IPython
27 You can then execute the following line of code to make it the new IPython
28 editor hook, after having imported 'myiphooks':
28 editor hook, after having imported 'myiphooks':
29
29
30 ip_set_hook('editor',myiphooks.calljed)
30 ip_set_hook('editor',myiphooks.calljed)
31
31
32 The ip_set_hook function is put by IPython into the builtin namespace, so it
32 The ip_set_hook function is put by IPython into the builtin namespace, so it
33 is always available from all running code.
33 is always available from all running code.
34
34
35 $Id: hooks.py 988 2006-01-02 21:21:47Z fperez $"""
35 $Id: hooks.py 1019 2006-01-14 13:02:12Z vivainio $"""
36
36
37 #*****************************************************************************
37 #*****************************************************************************
38 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
38 # Copyright (C) 2005 Fernando Perez. <fperez@colorado.edu>
39 #
39 #
40 # Distributed under the terms of the BSD License. The full license is in
40 # Distributed under the terms of the BSD License. The full license is in
41 # the file COPYING, distributed as part of this software.
41 # the file COPYING, distributed as part of this software.
42 #*****************************************************************************
42 #*****************************************************************************
43
43
44 from IPython import Release
44 from IPython import Release
45 __author__ = '%s <%s>' % Release.authors['Fernando']
45 __author__ = '%s <%s>' % Release.authors['Fernando']
46 __license__ = Release.license
46 __license__ = Release.license
47 __version__ = Release.version
47 __version__ = Release.version
48
48
49 import os
49 import os,bisect
50
50
51 # List here all the default hooks. For now it's just the editor functions
51 # List here all the default hooks. For now it's just the editor functions
52 # but over time we'll move here all the public API for user-accessible things.
52 # but over time we'll move here all the public API for user-accessible things.
53 __all__ = ['editor', 'fix_error_editor']
53 __all__ = ['editor', 'fix_error_editor']
54
54
55 def editor(self,filename, linenum=None):
55 def editor(self,filename, linenum=None):
56 """Open the default editor at the given filename and linenumber.
56 """Open the default editor at the given filename and linenumber.
57
57
58 This is IPython's default editor hook, you can use it as an example to
58 This is IPython's default editor hook, you can use it as an example to
59 write your own modified one. To set your own editor function as the
59 write your own modified one. To set your own editor function as the
60 new editor hook, call ip_set_hook('editor',yourfunc)."""
60 new editor hook, call ip_set_hook('editor',yourfunc)."""
61
61
62 # IPython configures a default editor at startup by reading $EDITOR from
62 # IPython configures a default editor at startup by reading $EDITOR from
63 # the environment, and falling back on vi (unix) or notepad (win32).
63 # the environment, and falling back on vi (unix) or notepad (win32).
64 editor = self.rc.editor
64 editor = self.rc.editor
65
65
66 # marker for at which line to open the file (for existing objects)
66 # marker for at which line to open the file (for existing objects)
67 if linenum is None or editor=='notepad':
67 if linenum is None or editor=='notepad':
68 linemark = ''
68 linemark = ''
69 else:
69 else:
70 linemark = '+%d' % linenum
70 linemark = '+%d' % linenum
71 # Call the actual editor
71 # Call the actual editor
72 os.system('%s %s %s' % (editor,linemark,filename))
72 os.system('%s %s %s' % (editor,linemark,filename))
73
73
74 import tempfile
74 import tempfile
75 def fix_error_editor(self,filename,linenum,column,msg):
75 def fix_error_editor(self,filename,linenum,column,msg):
76 """Open the editor at the given filename, linenumber, column and
76 """Open the editor at the given filename, linenumber, column and
77 show an error message. This is used for correcting syntax errors.
77 show an error message. This is used for correcting syntax errors.
78 The current implementation only has special support for the VIM editor,
78 The current implementation only has special support for the VIM editor,
79 and falls back on the 'editor' hook if VIM is not used.
79 and falls back on the 'editor' hook if VIM is not used.
80
80
81 Call ip_set_hook('fix_error_editor',youfunc) to use your own function,
81 Call ip_set_hook('fix_error_editor',youfunc) to use your own function,
82 """
82 """
83 def vim_quickfix_file():
83 def vim_quickfix_file():
84 t = tempfile.NamedTemporaryFile()
84 t = tempfile.NamedTemporaryFile()
85 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
85 t.write('%s:%d:%d:%s\n' % (filename,linenum,column,msg))
86 t.flush()
86 t.flush()
87 return t
87 return t
88 if os.path.basename(self.rc.editor) != 'vim':
88 if os.path.basename(self.rc.editor) != 'vim':
89 self.hooks.editor(filename,linenum)
89 self.hooks.editor(filename,linenum)
90 return
90 return
91 t = vim_quickfix_file()
91 t = vim_quickfix_file()
92 try:
92 try:
93 os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name)
93 os.system('vim --cmd "set errorformat=%f:%l:%c:%m" -q ' + t.name)
94 finally:
94 finally:
95 t.close()
95 t.close()
96
97 class TryNext(Exception):
98 pass
99
100 class CommandChainDispatcher:
101 """ Dispatch calls to a chain of commands until some func can handle it
102
103 Usage: instantiate, execute "add" to add commands (with optional
104 priority), execute normally via f() calling mechanism.
105
106 """
107 def __init__(self,commands=None):
108 if commands is None:
109 self.chain = []
110 else:
111 self.chain = commands
112
113
114 def __call__(self,*args, **kw):
115 """ Command chain is called just like normal func.
116
117 This will call all funcs in chain with the same args as were given to this
118 function, and return the result of first func that didn't raise
119 TryNext """
120
121 for prio,cmd in self.chain:
122 #print "prio",prio,"cmd",cmd #dbg
123 try:
124 ret = cmd(*args, **kw)
125 return ret
126 except TryNext:
127 pass
128
129 def __str__(self):
130 return str(self.chain)
131
132 def add(self, func, priority=0):
133 """ Add a func to the cmd chain with given priority """
134 bisect.insort(self.chain,(priority,func))
135
136 No newline at end of file
@@ -1,134 +1,136 b''
1 ''' IPython customization API
1 ''' IPython customization API
2
2
3 Your one-stop module for configuring & extending ipython
3 Your one-stop module for configuring & extending ipython
4
4
5 The API will probably break when ipython 1.0 is released, but so
5 The API will probably break when ipython 1.0 is released, but so
6 will the other configuration method (rc files).
6 will the other configuration method (rc files).
7
7
8 All names prefixed by underscores are for internal use, not part
8 All names prefixed by underscores are for internal use, not part
9 of the public api.
9 of the public api.
10
10
11 Below is an example that you can just put to a module and import from ipython.
11 Below is an example that you can just put to a module and import from ipython.
12
12
13 A good practice is to install the config script below as e.g.
13 A good practice is to install the config script below as e.g.
14
14
15 ~/.ipython/my_private_conf.py
15 ~/.ipython/my_private_conf.py
16
16
17 And do
17 And do
18
18
19 import_mod my_private_conf
19 import_mod my_private_conf
20
20
21 in ~/.ipython/ipythonrc
21 in ~/.ipython/ipythonrc
22
22
23 That way the module is imported at startup and you can have all your
23 That way the module is imported at startup and you can have all your
24 personal configuration (as opposed to boilerplate ipythonrc-PROFILENAME
24 personal configuration (as opposed to boilerplate ipythonrc-PROFILENAME
25 stuff) in there.
25 stuff) in there.
26
26
27 -----------------------------------------------
27 -----------------------------------------------
28 import IPython.ipapi as ip
28 import IPython.ipapi as ip
29
29
30 def ankka_f(self, arg):
30 def ankka_f(self, arg):
31 print "Ankka",self,"says uppercase:",arg.upper()
31 print "Ankka",self,"says uppercase:",arg.upper()
32
32
33 ip.expose_magic("ankka",ankka_f)
33 ip.expose_magic("ankka",ankka_f)
34
34
35 ip.magic('alias sayhi echo "Testing, hi ok"')
35 ip.magic('alias sayhi echo "Testing, hi ok"')
36 ip.magic('alias helloworld echo "Hello world"')
36 ip.magic('alias helloworld echo "Hello world"')
37 ip.system('pwd')
37 ip.system('pwd')
38
38
39 ip.ex('import re')
39 ip.ex('import re')
40 ip.ex("""
40 ip.ex("""
41 def funcci(a,b):
41 def funcci(a,b):
42 print a+b
42 print a+b
43 print funcci(3,4)
43 print funcci(3,4)
44 """)
44 """)
45 ip.ex("funcci(348,9)")
45 ip.ex("funcci(348,9)")
46
46
47 def jed_editor(self,filename, linenum=None):
47 def jed_editor(self,filename, linenum=None):
48 print "Calling my own editor, jed ... via hook!"
48 print "Calling my own editor, jed ... via hook!"
49 import os
49 import os
50 if linenum is None: linenum = 0
50 if linenum is None: linenum = 0
51 os.system('jed +%d %s' % (linenum, filename))
51 os.system('jed +%d %s' % (linenum, filename))
52 print "exiting jed"
52 print "exiting jed"
53
53
54 ip.set_hook('editor',jed_editor)
54 ip.set_hook('editor',jed_editor)
55
55
56 o = ip.options()
56 o = ip.options()
57 o.autocall = 2 # FULL autocall mode
57 o.autocall = 2 # FULL autocall mode
58
58
59 print "done!"
59 print "done!"
60
60
61 '''
61 '''
62
62
63 def _init_with_shell(ip):
63 def _init_with_shell(ip):
64 global magic
64 global magic
65 magic = ip.ipmagic
65 magic = ip.ipmagic
66 global system
66 global system
67 system = ip.ipsystem
67 system = ip.ipsystem
68 global set_hook
68 global set_hook
69 set_hook = ip.set_hook
69 set_hook = ip.set_hook
70
70
71 global __IP
71 global __IP
72 __IP = ip
72 __IP = ip
73
73
74 def options():
74 def options():
75 """ All configurable variables """
75 """ All configurable variables """
76 return __IP.rc
76 return __IP.rc
77
77
78 def user_ns():
78 def user_ns():
79 return __IP.user_ns
79 return __IP.user_ns
80
80
81 def expose_magic(magicname, func):
81 def expose_magic(magicname, func):
82 ''' Expose own function as magic function for ipython
82 ''' Expose own function as magic function for ipython
83
83
84 def foo_impl(self,parameter_s=''):
84 def foo_impl(self,parameter_s=''):
85 """My very own magic!. (Use docstrings, IPython reads them)."""
85 """My very own magic!. (Use docstrings, IPython reads them)."""
86 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
86 print 'Magic function. Passed parameter is between < >: <'+parameter_s+'>'
87 print 'The self object is:',self
87 print 'The self object is:',self
88
88
89 ipapi.expose_magic("foo",foo_impl)
89 ipapi.expose_magic("foo",foo_impl)
90 '''
90 '''
91
91
92 from IPython import Magic
92 from IPython import Magic
93
93 import new
94 setattr(Magic.Magic, "magic_" + magicname, func)
94 im = new.instancemethod(func,__IP, __IP.__class__)
95 setattr(__IP, "magic_" + magicname, im)
95
96
96 class asmagic:
97 class asmagic:
97 """ Decorator for exposing magics in a friendly 2.4 decorator form
98 """ Decorator for exposing magics in a friendly 2.4 decorator form
98
99
99 @ip.asmagic("foo")
100 @ip.asmagic("foo")
100 def f(self,arg):
101 def f(self,arg):
101 pring "arg given:",arg
102 pring "arg given:",arg
102
103
103 After this, %foo is a magic function.
104 After this, %foo is a magic function.
104 """
105 """
105
106
106 def __init__(self,magicname):
107 def __init__(self,magicname):
107 self.name = magicname
108 self.name = magicname
108
109
109 def __call__(self,f):
110 def __call__(self,f):
110 expose_magic(self.name, f)
111 expose_magic(self.name, f)
111 return f
112 return f
112
113
113 class ashook:
114 class ashook:
114 """ Decorator for exposing magics in a friendly 2.4 decorator form
115 """ Decorator for exposing magics in a friendly 2.4 decorator form
115
116
116 @ip.ashook("editor")
117 @ip.ashook("editor")
117 def jed_editor(self,filename, linenum=None):
118 def jed_editor(self,filename, linenum=None):
118 import os
119 import os
119 if linenum is None: linenum = 0
120 if linenum is None: linenum = 0
120 os.system('jed +%d %s' % (linenum, filename))
121 os.system('jed +%d %s' % (linenum, filename))
121
122
122 """
123 """
123
124
124 def __init__(self,name):
125 def __init__(self,name,priority=50):
125 self.name = name
126 self.name = name
127 self.prio = priority
126
128
127 def __call__(self,f):
129 def __call__(self,f):
128 set_hook(self.name, f)
130 set_hook(self.name, f, self.prio)
129 return f
131 return f
130
132
131
133
132 def ex(cmd):
134 def ex(cmd):
133 """ Execute a normal python statement """
135 """ Execute a normal python statement """
134 exec cmd in user_ns() No newline at end of file
136 exec cmd in user_ns()
@@ -1,2198 +1,2213 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.3 or newer.
5 Requires Python 2.3 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 1017 2006-01-14 09:46:45Z vivainio $
9 $Id: iplib.py 1019 2006-01-14 13:02:12Z vivainio $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
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 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
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 # verbatim here for modifications which could not be accomplished by
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
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)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.ipstruct import Struct
73 from IPython.ipstruct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77 import IPython.ipapi
77 import IPython.ipapi
78
78
79 # Globals
79 # Globals
80
80
81 # store the builtin raw_input globally, and use this always, in case user code
81 # store the builtin raw_input globally, and use this always, in case user code
82 # overwrites it (like wx.py.PyShell does)
82 # overwrites it (like wx.py.PyShell does)
83 raw_input_original = raw_input
83 raw_input_original = raw_input
84
84
85 # compiled regexps for autoindent management
85 # compiled regexps for autoindent management
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87
87
88
88
89 #****************************************************************************
89 #****************************************************************************
90 # Some utility function definitions
90 # Some utility function definitions
91
91
92 ini_spaces_re = re.compile(r'^(\s+)')
92 ini_spaces_re = re.compile(r'^(\s+)')
93
93
94 def num_ini_spaces(strng):
94 def num_ini_spaces(strng):
95 """Return the number of initial spaces in a string"""
95 """Return the number of initial spaces in a string"""
96
96
97 ini_spaces = ini_spaces_re.match(strng)
97 ini_spaces = ini_spaces_re.match(strng)
98 if ini_spaces:
98 if ini_spaces:
99 return ini_spaces.end()
99 return ini_spaces.end()
100 else:
100 else:
101 return 0
101 return 0
102
102
103 def softspace(file, newvalue):
103 def softspace(file, newvalue):
104 """Copied from code.py, to remove the dependency"""
104 """Copied from code.py, to remove the dependency"""
105
105
106 oldvalue = 0
106 oldvalue = 0
107 try:
107 try:
108 oldvalue = file.softspace
108 oldvalue = file.softspace
109 except AttributeError:
109 except AttributeError:
110 pass
110 pass
111 try:
111 try:
112 file.softspace = newvalue
112 file.softspace = newvalue
113 except (AttributeError, TypeError):
113 except (AttributeError, TypeError):
114 # "attribute-less object" or "read-only attributes"
114 # "attribute-less object" or "read-only attributes"
115 pass
115 pass
116 return oldvalue
116 return oldvalue
117
117
118
118
119 #****************************************************************************
119 #****************************************************************************
120 # Local use exceptions
120 # Local use exceptions
121 class SpaceInInput(exceptions.Exception): pass
121 class SpaceInInput(exceptions.Exception): pass
122
122
123
123
124 #****************************************************************************
124 #****************************************************************************
125 # Local use classes
125 # Local use classes
126 class Bunch: pass
126 class Bunch: pass
127
127
128 class Undefined: pass
128 class Undefined: pass
129
129
130 class InputList(list):
130 class InputList(list):
131 """Class to store user input.
131 """Class to store user input.
132
132
133 It's basically a list, but slices return a string instead of a list, thus
133 It's basically a list, but slices return a string instead of a list, thus
134 allowing things like (assuming 'In' is an instance):
134 allowing things like (assuming 'In' is an instance):
135
135
136 exec In[4:7]
136 exec In[4:7]
137
137
138 or
138 or
139
139
140 exec In[5:9] + In[14] + In[21:25]"""
140 exec In[5:9] + In[14] + In[21:25]"""
141
141
142 def __getslice__(self,i,j):
142 def __getslice__(self,i,j):
143 return ''.join(list.__getslice__(self,i,j))
143 return ''.join(list.__getslice__(self,i,j))
144
144
145 class SyntaxTB(ultraTB.ListTB):
145 class SyntaxTB(ultraTB.ListTB):
146 """Extension which holds some state: the last exception value"""
146 """Extension which holds some state: the last exception value"""
147
147
148 def __init__(self,color_scheme = 'NoColor'):
148 def __init__(self,color_scheme = 'NoColor'):
149 ultraTB.ListTB.__init__(self,color_scheme)
149 ultraTB.ListTB.__init__(self,color_scheme)
150 self.last_syntax_error = None
150 self.last_syntax_error = None
151
151
152 def __call__(self, etype, value, elist):
152 def __call__(self, etype, value, elist):
153 self.last_syntax_error = value
153 self.last_syntax_error = value
154 ultraTB.ListTB.__call__(self,etype,value,elist)
154 ultraTB.ListTB.__call__(self,etype,value,elist)
155
155
156 def clear_err_state(self):
156 def clear_err_state(self):
157 """Return the current error state and clear it"""
157 """Return the current error state and clear it"""
158 e = self.last_syntax_error
158 e = self.last_syntax_error
159 self.last_syntax_error = None
159 self.last_syntax_error = None
160 return e
160 return e
161
161
162 #****************************************************************************
162 #****************************************************************************
163 # Main IPython class
163 # Main IPython class
164
164
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
165 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
166 # until a full rewrite is made. I've cleaned all cross-class uses of
166 # until a full rewrite is made. I've cleaned all cross-class uses of
167 # attributes and methods, but too much user code out there relies on the
167 # attributes and methods, but too much user code out there relies on the
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
168 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
169 #
169 #
170 # But at least now, all the pieces have been separated and we could, in
170 # But at least now, all the pieces have been separated and we could, in
171 # principle, stop using the mixin. This will ease the transition to the
171 # principle, stop using the mixin. This will ease the transition to the
172 # chainsaw branch.
172 # chainsaw branch.
173
173
174 # For reference, the following is the list of 'self.foo' uses in the Magic
174 # For reference, the following is the list of 'self.foo' uses in the Magic
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
175 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
176 # class, to prevent clashes.
176 # class, to prevent clashes.
177
177
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
178 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
179 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
180 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
181 # 'self.value']
181 # 'self.value']
182
182
183 class InteractiveShell(object,Magic):
183 class InteractiveShell(object,Magic):
184 """An enhanced console for Python."""
184 """An enhanced console for Python."""
185
185
186 # class attribute to indicate whether the class supports threads or not.
186 # class attribute to indicate whether the class supports threads or not.
187 # Subclasses with thread support should override this as needed.
187 # Subclasses with thread support should override this as needed.
188 isthreaded = False
188 isthreaded = False
189
189
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
190 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
191 user_ns = None,user_global_ns=None,banner2='',
191 user_ns = None,user_global_ns=None,banner2='',
192 custom_exceptions=((),None),embedded=False):
192 custom_exceptions=((),None),embedded=False):
193
193
194 # first thing: introduce ourselves to IPython.ipapi which is uncallable
194 # first thing: introduce ourselves to IPython.ipapi which is uncallable
195 # before it knows an InteractiveShell object.
195 # before it knows an InteractiveShell object.
196 IPython.ipapi._init_with_shell(self)
196 IPython.ipapi._init_with_shell(self)
197
197
198 # some minimal strict typechecks. For some core data structures, I
198 # some minimal strict typechecks. For some core data structures, I
199 # want actual basic python types, not just anything that looks like
199 # want actual basic python types, not just anything that looks like
200 # one. This is especially true for namespaces.
200 # one. This is especially true for namespaces.
201 for ns in (user_ns,user_global_ns):
201 for ns in (user_ns,user_global_ns):
202 if ns is not None and type(ns) != types.DictType:
202 if ns is not None and type(ns) != types.DictType:
203 raise TypeError,'namespace must be a dictionary'
203 raise TypeError,'namespace must be a dictionary'
204
204
205 # Job manager (for jobs run as background threads)
205 # Job manager (for jobs run as background threads)
206 self.jobs = BackgroundJobManager()
206 self.jobs = BackgroundJobManager()
207
207
208 # track which builtins we add, so we can clean up later
208 # track which builtins we add, so we can clean up later
209 self.builtins_added = {}
209 self.builtins_added = {}
210 # This method will add the necessary builtins for operation, but
210 # This method will add the necessary builtins for operation, but
211 # tracking what it did via the builtins_added dict.
211 # tracking what it did via the builtins_added dict.
212 self.add_builtins()
212 self.add_builtins()
213
213
214 # Do the intuitively correct thing for quit/exit: we remove the
214 # Do the intuitively correct thing for quit/exit: we remove the
215 # builtins if they exist, and our own magics will deal with this
215 # builtins if they exist, and our own magics will deal with this
216 try:
216 try:
217 del __builtin__.exit, __builtin__.quit
217 del __builtin__.exit, __builtin__.quit
218 except AttributeError:
218 except AttributeError:
219 pass
219 pass
220
220
221 # Store the actual shell's name
221 # Store the actual shell's name
222 self.name = name
222 self.name = name
223
223
224 # We need to know whether the instance is meant for embedding, since
224 # We need to know whether the instance is meant for embedding, since
225 # global/local namespaces need to be handled differently in that case
225 # global/local namespaces need to be handled differently in that case
226 self.embedded = embedded
226 self.embedded = embedded
227
227
228 # command compiler
228 # command compiler
229 self.compile = codeop.CommandCompiler()
229 self.compile = codeop.CommandCompiler()
230
230
231 # User input buffer
231 # User input buffer
232 self.buffer = []
232 self.buffer = []
233
233
234 # Default name given in compilation of code
234 # Default name given in compilation of code
235 self.filename = '<ipython console>'
235 self.filename = '<ipython console>'
236
236
237 # Make an empty namespace, which extension writers can rely on both
237 # Make an empty namespace, which extension writers can rely on both
238 # existing and NEVER being used by ipython itself. This gives them a
238 # existing and NEVER being used by ipython itself. This gives them a
239 # convenient location for storing additional information and state
239 # convenient location for storing additional information and state
240 # their extensions may require, without fear of collisions with other
240 # their extensions may require, without fear of collisions with other
241 # ipython names that may develop later.
241 # ipython names that may develop later.
242 self.meta = Bunch()
242 self.meta = Bunch()
243
243
244 # Create the namespace where the user will operate. user_ns is
244 # Create the namespace where the user will operate. user_ns is
245 # normally the only one used, and it is passed to the exec calls as
245 # normally the only one used, and it is passed to the exec calls as
246 # the locals argument. But we do carry a user_global_ns namespace
246 # the locals argument. But we do carry a user_global_ns namespace
247 # given as the exec 'globals' argument, This is useful in embedding
247 # given as the exec 'globals' argument, This is useful in embedding
248 # situations where the ipython shell opens in a context where the
248 # situations where the ipython shell opens in a context where the
249 # distinction between locals and globals is meaningful.
249 # distinction between locals and globals is meaningful.
250
250
251 # FIXME. For some strange reason, __builtins__ is showing up at user
251 # FIXME. For some strange reason, __builtins__ is showing up at user
252 # level as a dict instead of a module. This is a manual fix, but I
252 # level as a dict instead of a module. This is a manual fix, but I
253 # should really track down where the problem is coming from. Alex
253 # should really track down where the problem is coming from. Alex
254 # Schmolck reported this problem first.
254 # Schmolck reported this problem first.
255
255
256 # A useful post by Alex Martelli on this topic:
256 # A useful post by Alex Martelli on this topic:
257 # Re: inconsistent value from __builtins__
257 # Re: inconsistent value from __builtins__
258 # Von: Alex Martelli <aleaxit@yahoo.com>
258 # Von: Alex Martelli <aleaxit@yahoo.com>
259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
259 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
260 # Gruppen: comp.lang.python
260 # Gruppen: comp.lang.python
261
261
262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
262 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
263 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
264 # > <type 'dict'>
264 # > <type 'dict'>
265 # > >>> print type(__builtins__)
265 # > >>> print type(__builtins__)
266 # > <type 'module'>
266 # > <type 'module'>
267 # > Is this difference in return value intentional?
267 # > Is this difference in return value intentional?
268
268
269 # Well, it's documented that '__builtins__' can be either a dictionary
269 # Well, it's documented that '__builtins__' can be either a dictionary
270 # or a module, and it's been that way for a long time. Whether it's
270 # or a module, and it's been that way for a long time. Whether it's
271 # intentional (or sensible), I don't know. In any case, the idea is
271 # intentional (or sensible), I don't know. In any case, the idea is
272 # that if you need to access the built-in namespace directly, you
272 # that if you need to access the built-in namespace directly, you
273 # should start with "import __builtin__" (note, no 's') which will
273 # should start with "import __builtin__" (note, no 's') which will
274 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
274 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
275
275
276 if user_ns is None:
276 if user_ns is None:
277 # Set __name__ to __main__ to better match the behavior of the
277 # Set __name__ to __main__ to better match the behavior of the
278 # normal interpreter.
278 # normal interpreter.
279 user_ns = {'__name__' :'__main__',
279 user_ns = {'__name__' :'__main__',
280 '__builtins__' : __builtin__,
280 '__builtins__' : __builtin__,
281 }
281 }
282
282
283 if user_global_ns is None:
283 if user_global_ns is None:
284 user_global_ns = {}
284 user_global_ns = {}
285
285
286 # Assign namespaces
286 # Assign namespaces
287 # This is the namespace where all normal user variables live
287 # This is the namespace where all normal user variables live
288 self.user_ns = user_ns
288 self.user_ns = user_ns
289 # Embedded instances require a separate namespace for globals.
289 # Embedded instances require a separate namespace for globals.
290 # Normally this one is unused by non-embedded instances.
290 # Normally this one is unused by non-embedded instances.
291 self.user_global_ns = user_global_ns
291 self.user_global_ns = user_global_ns
292 # A namespace to keep track of internal data structures to prevent
292 # A namespace to keep track of internal data structures to prevent
293 # them from cluttering user-visible stuff. Will be updated later
293 # them from cluttering user-visible stuff. Will be updated later
294 self.internal_ns = {}
294 self.internal_ns = {}
295
295
296 # Namespace of system aliases. Each entry in the alias
296 # Namespace of system aliases. Each entry in the alias
297 # table must be a 2-tuple of the form (N,name), where N is the number
297 # table must be a 2-tuple of the form (N,name), where N is the number
298 # of positional arguments of the alias.
298 # of positional arguments of the alias.
299 self.alias_table = {}
299 self.alias_table = {}
300
300
301 # A table holding all the namespaces IPython deals with, so that
301 # A table holding all the namespaces IPython deals with, so that
302 # introspection facilities can search easily.
302 # introspection facilities can search easily.
303 self.ns_table = {'user':user_ns,
303 self.ns_table = {'user':user_ns,
304 'user_global':user_global_ns,
304 'user_global':user_global_ns,
305 'alias':self.alias_table,
305 'alias':self.alias_table,
306 'internal':self.internal_ns,
306 'internal':self.internal_ns,
307 'builtin':__builtin__.__dict__
307 'builtin':__builtin__.__dict__
308 }
308 }
309
309
310 # The user namespace MUST have a pointer to the shell itself.
310 # The user namespace MUST have a pointer to the shell itself.
311 self.user_ns[name] = self
311 self.user_ns[name] = self
312
312
313 # We need to insert into sys.modules something that looks like a
313 # We need to insert into sys.modules something that looks like a
314 # module but which accesses the IPython namespace, for shelve and
314 # module but which accesses the IPython namespace, for shelve and
315 # pickle to work interactively. Normally they rely on getting
315 # pickle to work interactively. Normally they rely on getting
316 # everything out of __main__, but for embedding purposes each IPython
316 # everything out of __main__, but for embedding purposes each IPython
317 # instance has its own private namespace, so we can't go shoving
317 # instance has its own private namespace, so we can't go shoving
318 # everything into __main__.
318 # everything into __main__.
319
319
320 # note, however, that we should only do this for non-embedded
320 # note, however, that we should only do this for non-embedded
321 # ipythons, which really mimic the __main__.__dict__ with their own
321 # ipythons, which really mimic the __main__.__dict__ with their own
322 # namespace. Embedded instances, on the other hand, should not do
322 # namespace. Embedded instances, on the other hand, should not do
323 # this because they need to manage the user local/global namespaces
323 # this because they need to manage the user local/global namespaces
324 # only, but they live within a 'normal' __main__ (meaning, they
324 # only, but they live within a 'normal' __main__ (meaning, they
325 # shouldn't overtake the execution environment of the script they're
325 # shouldn't overtake the execution environment of the script they're
326 # embedded in).
326 # embedded in).
327
327
328 if not embedded:
328 if not embedded:
329 try:
329 try:
330 main_name = self.user_ns['__name__']
330 main_name = self.user_ns['__name__']
331 except KeyError:
331 except KeyError:
332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
332 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
333 else:
333 else:
334 #print "pickle hack in place" # dbg
334 #print "pickle hack in place" # dbg
335 #print 'main_name:',main_name # dbg
335 #print 'main_name:',main_name # dbg
336 sys.modules[main_name] = FakeModule(self.user_ns)
336 sys.modules[main_name] = FakeModule(self.user_ns)
337
337
338 # List of input with multi-line handling.
338 # List of input with multi-line handling.
339 # Fill its zero entry, user counter starts at 1
339 # Fill its zero entry, user counter starts at 1
340 self.input_hist = InputList(['\n'])
340 self.input_hist = InputList(['\n'])
341
341
342 # list of visited directories
342 # list of visited directories
343 try:
343 try:
344 self.dir_hist = [os.getcwd()]
344 self.dir_hist = [os.getcwd()]
345 except IOError, e:
345 except IOError, e:
346 self.dir_hist = []
346 self.dir_hist = []
347
347
348 # dict of output history
348 # dict of output history
349 self.output_hist = {}
349 self.output_hist = {}
350
350
351 # dict of things NOT to alias (keywords, builtins and some magics)
351 # dict of things NOT to alias (keywords, builtins and some magics)
352 no_alias = {}
352 no_alias = {}
353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
353 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
354 for key in keyword.kwlist + no_alias_magics:
354 for key in keyword.kwlist + no_alias_magics:
355 no_alias[key] = 1
355 no_alias[key] = 1
356 no_alias.update(__builtin__.__dict__)
356 no_alias.update(__builtin__.__dict__)
357 self.no_alias = no_alias
357 self.no_alias = no_alias
358
358
359 # make global variables for user access to these
359 # make global variables for user access to these
360 self.user_ns['_ih'] = self.input_hist
360 self.user_ns['_ih'] = self.input_hist
361 self.user_ns['_oh'] = self.output_hist
361 self.user_ns['_oh'] = self.output_hist
362 self.user_ns['_dh'] = self.dir_hist
362 self.user_ns['_dh'] = self.dir_hist
363
363
364 # user aliases to input and output histories
364 # user aliases to input and output histories
365 self.user_ns['In'] = self.input_hist
365 self.user_ns['In'] = self.input_hist
366 self.user_ns['Out'] = self.output_hist
366 self.user_ns['Out'] = self.output_hist
367
367
368 # Object variable to store code object waiting execution. This is
368 # Object variable to store code object waiting execution. This is
369 # used mainly by the multithreaded shells, but it can come in handy in
369 # used mainly by the multithreaded shells, but it can come in handy in
370 # other situations. No need to use a Queue here, since it's a single
370 # other situations. No need to use a Queue here, since it's a single
371 # item which gets cleared once run.
371 # item which gets cleared once run.
372 self.code_to_run = None
372 self.code_to_run = None
373
373
374 # escapes for automatic behavior on the command line
374 # escapes for automatic behavior on the command line
375 self.ESC_SHELL = '!'
375 self.ESC_SHELL = '!'
376 self.ESC_HELP = '?'
376 self.ESC_HELP = '?'
377 self.ESC_MAGIC = '%'
377 self.ESC_MAGIC = '%'
378 self.ESC_QUOTE = ','
378 self.ESC_QUOTE = ','
379 self.ESC_QUOTE2 = ';'
379 self.ESC_QUOTE2 = ';'
380 self.ESC_PAREN = '/'
380 self.ESC_PAREN = '/'
381
381
382 # And their associated handlers
382 # And their associated handlers
383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
383 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
384 self.ESC_QUOTE : self.handle_auto,
384 self.ESC_QUOTE : self.handle_auto,
385 self.ESC_QUOTE2 : self.handle_auto,
385 self.ESC_QUOTE2 : self.handle_auto,
386 self.ESC_MAGIC : self.handle_magic,
386 self.ESC_MAGIC : self.handle_magic,
387 self.ESC_HELP : self.handle_help,
387 self.ESC_HELP : self.handle_help,
388 self.ESC_SHELL : self.handle_shell_escape,
388 self.ESC_SHELL : self.handle_shell_escape,
389 }
389 }
390
390
391 # class initializations
391 # class initializations
392 Magic.__init__(self,self)
392 Magic.__init__(self,self)
393
393
394 # Python source parser/formatter for syntax highlighting
394 # Python source parser/formatter for syntax highlighting
395 pyformat = PyColorize.Parser().format
395 pyformat = PyColorize.Parser().format
396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
396 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
397
397
398 # hooks holds pointers used for user-side customizations
398 # hooks holds pointers used for user-side customizations
399 self.hooks = Struct()
399 self.hooks = Struct()
400
400
401 # Set all default hooks, defined in the IPython.hooks module.
401 # Set all default hooks, defined in the IPython.hooks module.
402 hooks = IPython.hooks
402 hooks = IPython.hooks
403 for hook_name in hooks.__all__:
403 for hook_name in hooks.__all__:
404 self.set_hook(hook_name,getattr(hooks,hook_name))
404 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
405 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
405
406
406 # Flag to mark unconditional exit
407 # Flag to mark unconditional exit
407 self.exit_now = False
408 self.exit_now = False
408
409
409 self.usage_min = """\
410 self.usage_min = """\
410 An enhanced console for Python.
411 An enhanced console for Python.
411 Some of its features are:
412 Some of its features are:
412 - Readline support if the readline library is present.
413 - Readline support if the readline library is present.
413 - Tab completion in the local namespace.
414 - Tab completion in the local namespace.
414 - Logging of input, see command-line options.
415 - Logging of input, see command-line options.
415 - System shell escape via ! , eg !ls.
416 - System shell escape via ! , eg !ls.
416 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
417 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
417 - Keeps track of locally defined variables via %who, %whos.
418 - Keeps track of locally defined variables via %who, %whos.
418 - Show object information with a ? eg ?x or x? (use ?? for more info).
419 - Show object information with a ? eg ?x or x? (use ?? for more info).
419 """
420 """
420 if usage: self.usage = usage
421 if usage: self.usage = usage
421 else: self.usage = self.usage_min
422 else: self.usage = self.usage_min
422
423
423 # Storage
424 # Storage
424 self.rc = rc # This will hold all configuration information
425 self.rc = rc # This will hold all configuration information
425 self.pager = 'less'
426 self.pager = 'less'
426 # temporary files used for various purposes. Deleted at exit.
427 # temporary files used for various purposes. Deleted at exit.
427 self.tempfiles = []
428 self.tempfiles = []
428
429
429 # Keep track of readline usage (later set by init_readline)
430 # Keep track of readline usage (later set by init_readline)
430 self.has_readline = False
431 self.has_readline = False
431
432
432 # template for logfile headers. It gets resolved at runtime by the
433 # template for logfile headers. It gets resolved at runtime by the
433 # logstart method.
434 # logstart method.
434 self.loghead_tpl = \
435 self.loghead_tpl = \
435 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
436 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
436 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
437 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
437 #log# opts = %s
438 #log# opts = %s
438 #log# args = %s
439 #log# args = %s
439 #log# It is safe to make manual edits below here.
440 #log# It is safe to make manual edits below here.
440 #log#-----------------------------------------------------------------------
441 #log#-----------------------------------------------------------------------
441 """
442 """
442 # for pushd/popd management
443 # for pushd/popd management
443 try:
444 try:
444 self.home_dir = get_home_dir()
445 self.home_dir = get_home_dir()
445 except HomeDirError,msg:
446 except HomeDirError,msg:
446 fatal(msg)
447 fatal(msg)
447
448
448 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
449 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
449
450
450 # Functions to call the underlying shell.
451 # Functions to call the underlying shell.
451
452
452 # utility to expand user variables via Itpl
453 # utility to expand user variables via Itpl
453 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
454 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
454 self.user_ns))
455 self.user_ns))
455 # The first is similar to os.system, but it doesn't return a value,
456 # The first is similar to os.system, but it doesn't return a value,
456 # and it allows interpolation of variables in the user's namespace.
457 # and it allows interpolation of variables in the user's namespace.
457 self.system = lambda cmd: shell(self.var_expand(cmd),
458 self.system = lambda cmd: shell(self.var_expand(cmd),
458 header='IPython system call: ',
459 header='IPython system call: ',
459 verbose=self.rc.system_verbose)
460 verbose=self.rc.system_verbose)
460 # These are for getoutput and getoutputerror:
461 # These are for getoutput and getoutputerror:
461 self.getoutput = lambda cmd: \
462 self.getoutput = lambda cmd: \
462 getoutput(self.var_expand(cmd),
463 getoutput(self.var_expand(cmd),
463 header='IPython system call: ',
464 header='IPython system call: ',
464 verbose=self.rc.system_verbose)
465 verbose=self.rc.system_verbose)
465 self.getoutputerror = lambda cmd: \
466 self.getoutputerror = lambda cmd: \
466 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
467 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
467 self.user_ns)),
468 self.user_ns)),
468 header='IPython system call: ',
469 header='IPython system call: ',
469 verbose=self.rc.system_verbose)
470 verbose=self.rc.system_verbose)
470
471
471 # RegExp for splitting line contents into pre-char//first
472 # RegExp for splitting line contents into pre-char//first
472 # word-method//rest. For clarity, each group in on one line.
473 # word-method//rest. For clarity, each group in on one line.
473
474
474 # WARNING: update the regexp if the above escapes are changed, as they
475 # WARNING: update the regexp if the above escapes are changed, as they
475 # are hardwired in.
476 # are hardwired in.
476
477
477 # Don't get carried away with trying to make the autocalling catch too
478 # Don't get carried away with trying to make the autocalling catch too
478 # much: it's better to be conservative rather than to trigger hidden
479 # much: it's better to be conservative rather than to trigger hidden
479 # evals() somewhere and end up causing side effects.
480 # evals() somewhere and end up causing side effects.
480
481
481 self.line_split = re.compile(r'^([\s*,;/])'
482 self.line_split = re.compile(r'^([\s*,;/])'
482 r'([\?\w\.]+\w*\s*)'
483 r'([\?\w\.]+\w*\s*)'
483 r'(\(?.*$)')
484 r'(\(?.*$)')
484
485
485 # Original re, keep around for a while in case changes break something
486 # Original re, keep around for a while in case changes break something
486 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
487 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
487 # r'(\s*[\?\w\.]+\w*\s*)'
488 # r'(\s*[\?\w\.]+\w*\s*)'
488 # r'(\(?.*$)')
489 # r'(\(?.*$)')
489
490
490 # RegExp to identify potential function names
491 # RegExp to identify potential function names
491 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
492 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
492
493
493 # RegExp to exclude strings with this start from autocalling. In
494 # RegExp to exclude strings with this start from autocalling. In
494 # particular, all binary operators should be excluded, so that if foo
495 # particular, all binary operators should be excluded, so that if foo
495 # is callable, foo OP bar doesn't become foo(OP bar), which is
496 # is callable, foo OP bar doesn't become foo(OP bar), which is
496 # invalid. The characters '!=()' don't need to be checked for, as the
497 # invalid. The characters '!=()' don't need to be checked for, as the
497 # _prefilter routine explicitely does so, to catch direct calls and
498 # _prefilter routine explicitely does so, to catch direct calls and
498 # rebindings of existing names.
499 # rebindings of existing names.
499
500
500 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
501 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
501 # it affects the rest of the group in square brackets.
502 # it affects the rest of the group in square brackets.
502 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
503 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
503 '|^is |^not |^in |^and |^or ')
504 '|^is |^not |^in |^and |^or ')
504
505
505 # try to catch also methods for stuff in lists/tuples/dicts: off
506 # try to catch also methods for stuff in lists/tuples/dicts: off
506 # (experimental). For this to work, the line_split regexp would need
507 # (experimental). For this to work, the line_split regexp would need
507 # to be modified so it wouldn't break things at '['. That line is
508 # to be modified so it wouldn't break things at '['. That line is
508 # nasty enough that I shouldn't change it until I can test it _well_.
509 # nasty enough that I shouldn't change it until I can test it _well_.
509 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
510 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
510
511
511 # keep track of where we started running (mainly for crash post-mortem)
512 # keep track of where we started running (mainly for crash post-mortem)
512 self.starting_dir = os.getcwd()
513 self.starting_dir = os.getcwd()
513
514
514 # Various switches which can be set
515 # Various switches which can be set
515 self.CACHELENGTH = 5000 # this is cheap, it's just text
516 self.CACHELENGTH = 5000 # this is cheap, it's just text
516 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
517 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
517 self.banner2 = banner2
518 self.banner2 = banner2
518
519
519 # TraceBack handlers:
520 # TraceBack handlers:
520
521
521 # Syntax error handler.
522 # Syntax error handler.
522 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
523 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
523
524
524 # The interactive one is initialized with an offset, meaning we always
525 # The interactive one is initialized with an offset, meaning we always
525 # want to remove the topmost item in the traceback, which is our own
526 # want to remove the topmost item in the traceback, which is our own
526 # internal code. Valid modes: ['Plain','Context','Verbose']
527 # internal code. Valid modes: ['Plain','Context','Verbose']
527 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
528 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
528 color_scheme='NoColor',
529 color_scheme='NoColor',
529 tb_offset = 1)
530 tb_offset = 1)
530
531
531 # IPython itself shouldn't crash. This will produce a detailed
532 # IPython itself shouldn't crash. This will produce a detailed
532 # post-mortem if it does. But we only install the crash handler for
533 # post-mortem if it does. But we only install the crash handler for
533 # non-threaded shells, the threaded ones use a normal verbose reporter
534 # non-threaded shells, the threaded ones use a normal verbose reporter
534 # and lose the crash handler. This is because exceptions in the main
535 # and lose the crash handler. This is because exceptions in the main
535 # thread (such as in GUI code) propagate directly to sys.excepthook,
536 # thread (such as in GUI code) propagate directly to sys.excepthook,
536 # and there's no point in printing crash dumps for every user exception.
537 # and there's no point in printing crash dumps for every user exception.
537 if self.isthreaded:
538 if self.isthreaded:
538 sys.excepthook = ultraTB.FormattedTB()
539 sys.excepthook = ultraTB.FormattedTB()
539 else:
540 else:
540 from IPython import CrashHandler
541 from IPython import CrashHandler
541 sys.excepthook = CrashHandler.CrashHandler(self)
542 sys.excepthook = CrashHandler.CrashHandler(self)
542
543
543 # The instance will store a pointer to this, so that runtime code
544 # The instance will store a pointer to this, so that runtime code
544 # (such as magics) can access it. This is because during the
545 # (such as magics) can access it. This is because during the
545 # read-eval loop, it gets temporarily overwritten (to deal with GUI
546 # read-eval loop, it gets temporarily overwritten (to deal with GUI
546 # frameworks).
547 # frameworks).
547 self.sys_excepthook = sys.excepthook
548 self.sys_excepthook = sys.excepthook
548
549
549 # and add any custom exception handlers the user may have specified
550 # and add any custom exception handlers the user may have specified
550 self.set_custom_exc(*custom_exceptions)
551 self.set_custom_exc(*custom_exceptions)
551
552
552 # Object inspector
553 # Object inspector
553 self.inspector = OInspect.Inspector(OInspect.InspectColors,
554 self.inspector = OInspect.Inspector(OInspect.InspectColors,
554 PyColorize.ANSICodeColors,
555 PyColorize.ANSICodeColors,
555 'NoColor')
556 'NoColor')
556 # indentation management
557 # indentation management
557 self.autoindent = False
558 self.autoindent = False
558 self.indent_current_nsp = 0
559 self.indent_current_nsp = 0
559 self.indent_current = '' # actual indent string
560 self.indent_current = '' # actual indent string
560
561
561 # Make some aliases automatically
562 # Make some aliases automatically
562 # Prepare list of shell aliases to auto-define
563 # Prepare list of shell aliases to auto-define
563 if os.name == 'posix':
564 if os.name == 'posix':
564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
565 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
565 'mv mv -i','rm rm -i','cp cp -i',
566 'mv mv -i','rm rm -i','cp cp -i',
566 'cat cat','less less','clear clear',
567 'cat cat','less less','clear clear',
567 # a better ls
568 # a better ls
568 'ls ls -F',
569 'ls ls -F',
569 # long ls
570 # long ls
570 'll ls -lF',
571 'll ls -lF',
571 # color ls
572 # color ls
572 'lc ls -F -o --color',
573 'lc ls -F -o --color',
573 # ls normal files only
574 # ls normal files only
574 'lf ls -F -o --color %l | grep ^-',
575 'lf ls -F -o --color %l | grep ^-',
575 # ls symbolic links
576 # ls symbolic links
576 'lk ls -F -o --color %l | grep ^l',
577 'lk ls -F -o --color %l | grep ^l',
577 # directories or links to directories,
578 # directories or links to directories,
578 'ldir ls -F -o --color %l | grep /$',
579 'ldir ls -F -o --color %l | grep /$',
579 # things which are executable
580 # things which are executable
580 'lx ls -F -o --color %l | grep ^-..x',
581 'lx ls -F -o --color %l | grep ^-..x',
581 )
582 )
582 elif os.name in ['nt','dos']:
583 elif os.name in ['nt','dos']:
583 auto_alias = ('dir dir /on', 'ls dir /on',
584 auto_alias = ('dir dir /on', 'ls dir /on',
584 'ddir dir /ad /on', 'ldir dir /ad /on',
585 'ddir dir /ad /on', 'ldir dir /ad /on',
585 'mkdir mkdir','rmdir rmdir','echo echo',
586 'mkdir mkdir','rmdir rmdir','echo echo',
586 'ren ren','cls cls','copy copy')
587 'ren ren','cls cls','copy copy')
587 else:
588 else:
588 auto_alias = ()
589 auto_alias = ()
589 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
590 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
590 # Call the actual (public) initializer
591 # Call the actual (public) initializer
591 self.init_auto_alias()
592 self.init_auto_alias()
592 # end __init__
593 # end __init__
593
594
594 def post_config_initialization(self):
595 def post_config_initialization(self):
595 """Post configuration init method
596 """Post configuration init method
596
597
597 This is called after the configuration files have been processed to
598 This is called after the configuration files have been processed to
598 'finalize' the initialization."""
599 'finalize' the initialization."""
599
600
600 rc = self.rc
601 rc = self.rc
601
602
602 # Load readline proper
603 # Load readline proper
603 if rc.readline:
604 if rc.readline:
604 self.init_readline()
605 self.init_readline()
605
606
606 # log system
607 # log system
607 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
608 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
608 # local shortcut, this is used a LOT
609 # local shortcut, this is used a LOT
609 self.log = self.logger.log
610 self.log = self.logger.log
610
611
611 # Initialize cache, set in/out prompts and printing system
612 # Initialize cache, set in/out prompts and printing system
612 self.outputcache = CachedOutput(self,
613 self.outputcache = CachedOutput(self,
613 rc.cache_size,
614 rc.cache_size,
614 rc.pprint,
615 rc.pprint,
615 input_sep = rc.separate_in,
616 input_sep = rc.separate_in,
616 output_sep = rc.separate_out,
617 output_sep = rc.separate_out,
617 output_sep2 = rc.separate_out2,
618 output_sep2 = rc.separate_out2,
618 ps1 = rc.prompt_in1,
619 ps1 = rc.prompt_in1,
619 ps2 = rc.prompt_in2,
620 ps2 = rc.prompt_in2,
620 ps_out = rc.prompt_out,
621 ps_out = rc.prompt_out,
621 pad_left = rc.prompts_pad_left)
622 pad_left = rc.prompts_pad_left)
622
623
623 # user may have over-ridden the default print hook:
624 # user may have over-ridden the default print hook:
624 try:
625 try:
625 self.outputcache.__class__.display = self.hooks.display
626 self.outputcache.__class__.display = self.hooks.display
626 except AttributeError:
627 except AttributeError:
627 pass
628 pass
628
629
629 # I don't like assigning globally to sys, because it means when embedding
630 # I don't like assigning globally to sys, because it means when embedding
630 # instances, each embedded instance overrides the previous choice. But
631 # instances, each embedded instance overrides the previous choice. But
631 # sys.displayhook seems to be called internally by exec, so I don't see a
632 # sys.displayhook seems to be called internally by exec, so I don't see a
632 # way around it.
633 # way around it.
633 sys.displayhook = self.outputcache
634 sys.displayhook = self.outputcache
634
635
635 # Set user colors (don't do it in the constructor above so that it
636 # Set user colors (don't do it in the constructor above so that it
636 # doesn't crash if colors option is invalid)
637 # doesn't crash if colors option is invalid)
637 self.magic_colors(rc.colors)
638 self.magic_colors(rc.colors)
638
639
639 # Set calling of pdb on exceptions
640 # Set calling of pdb on exceptions
640 self.call_pdb = rc.pdb
641 self.call_pdb = rc.pdb
641
642
642 # Load user aliases
643 # Load user aliases
643 for alias in rc.alias:
644 for alias in rc.alias:
644 self.magic_alias(alias)
645 self.magic_alias(alias)
645
646
646 # dynamic data that survives through sessions
647 # dynamic data that survives through sessions
647 # XXX make the filename a config option?
648 # XXX make the filename a config option?
648 persist_base = 'persist'
649 persist_base = 'persist'
649 if rc.profile:
650 if rc.profile:
650 persist_base += '_%s' % rc.profile
651 persist_base += '_%s' % rc.profile
651 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
652 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
652
653
653 try:
654 try:
654 self.persist = pickle.load(file(self.persist_fname))
655 self.persist = pickle.load(file(self.persist_fname))
655 except:
656 except:
656 self.persist = {}
657 self.persist = {}
657
658
658
659
659 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
660 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
660 try:
661 try:
661 obj = pickle.loads(value)
662 obj = pickle.loads(value)
662 except:
663 except:
663
664
664 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
665 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
665 print "The error was:",sys.exc_info()[0]
666 print "The error was:",sys.exc_info()[0]
666 continue
667 continue
667
668
668
669
669 self.user_ns[key] = obj
670 self.user_ns[key] = obj
670
671
671 def add_builtins(self):
672 def add_builtins(self):
672 """Store ipython references into the builtin namespace.
673 """Store ipython references into the builtin namespace.
673
674
674 Some parts of ipython operate via builtins injected here, which hold a
675 Some parts of ipython operate via builtins injected here, which hold a
675 reference to IPython itself."""
676 reference to IPython itself."""
676
677
677 builtins_new = dict(__IPYTHON__ = self,
678 builtins_new = dict(__IPYTHON__ = self,
678 ip_set_hook = self.set_hook,
679 ip_set_hook = self.set_hook,
679 jobs = self.jobs,
680 jobs = self.jobs,
680 ipmagic = self.ipmagic,
681 ipmagic = self.ipmagic,
681 ipalias = self.ipalias,
682 ipalias = self.ipalias,
682 ipsystem = self.ipsystem,
683 ipsystem = self.ipsystem,
683 )
684 )
684 for biname,bival in builtins_new.items():
685 for biname,bival in builtins_new.items():
685 try:
686 try:
686 # store the orignal value so we can restore it
687 # store the orignal value so we can restore it
687 self.builtins_added[biname] = __builtin__.__dict__[biname]
688 self.builtins_added[biname] = __builtin__.__dict__[biname]
688 except KeyError:
689 except KeyError:
689 # or mark that it wasn't defined, and we'll just delete it at
690 # or mark that it wasn't defined, and we'll just delete it at
690 # cleanup
691 # cleanup
691 self.builtins_added[biname] = Undefined
692 self.builtins_added[biname] = Undefined
692 __builtin__.__dict__[biname] = bival
693 __builtin__.__dict__[biname] = bival
693
694
694 # Keep in the builtins a flag for when IPython is active. We set it
695 # Keep in the builtins a flag for when IPython is active. We set it
695 # with setdefault so that multiple nested IPythons don't clobber one
696 # with setdefault so that multiple nested IPythons don't clobber one
696 # another. Each will increase its value by one upon being activated,
697 # another. Each will increase its value by one upon being activated,
697 # which also gives us a way to determine the nesting level.
698 # which also gives us a way to determine the nesting level.
698 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
699 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
699
700
700 def clean_builtins(self):
701 def clean_builtins(self):
701 """Remove any builtins which might have been added by add_builtins, or
702 """Remove any builtins which might have been added by add_builtins, or
702 restore overwritten ones to their previous values."""
703 restore overwritten ones to their previous values."""
703 for biname,bival in self.builtins_added.items():
704 for biname,bival in self.builtins_added.items():
704 if bival is Undefined:
705 if bival is Undefined:
705 del __builtin__.__dict__[biname]
706 del __builtin__.__dict__[biname]
706 else:
707 else:
707 __builtin__.__dict__[biname] = bival
708 __builtin__.__dict__[biname] = bival
708 self.builtins_added.clear()
709 self.builtins_added.clear()
709
710
710 def set_hook(self,name,hook):
711 def set_hook(self,name,hook, priority = 50):
711 """set_hook(name,hook) -> sets an internal IPython hook.
712 """set_hook(name,hook) -> sets an internal IPython hook.
712
713
713 IPython exposes some of its internal API as user-modifiable hooks. By
714 IPython exposes some of its internal API as user-modifiable hooks. By
714 resetting one of these hooks, you can modify IPython's behavior to
715 adding your function to one of these hooks, you can modify IPython's
715 call at runtime your own routines."""
716 behavior to call at runtime your own routines."""
716
717
717 # At some point in the future, this should validate the hook before it
718 # At some point in the future, this should validate the hook before it
718 # accepts it. Probably at least check that the hook takes the number
719 # accepts it. Probably at least check that the hook takes the number
719 # of args it's supposed to.
720 # of args it's supposed to.
720 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
721 dp = getattr(self.hooks, name, None)
722 if not dp:
723 dp = IPython.hooks.CommandChainDispatcher()
724
725 f = new.instancemethod(hook,self,self.__class__)
726 try:
727 dp.add(f,priority)
728 except AttributeError:
729 # it was not commandchain, plain old func - replace
730 dp = f
731
732 setattr(self.hooks,name, dp)
733
734
735 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
721
736
722 def set_custom_exc(self,exc_tuple,handler):
737 def set_custom_exc(self,exc_tuple,handler):
723 """set_custom_exc(exc_tuple,handler)
738 """set_custom_exc(exc_tuple,handler)
724
739
725 Set a custom exception handler, which will be called if any of the
740 Set a custom exception handler, which will be called if any of the
726 exceptions in exc_tuple occur in the mainloop (specifically, in the
741 exceptions in exc_tuple occur in the mainloop (specifically, in the
727 runcode() method.
742 runcode() method.
728
743
729 Inputs:
744 Inputs:
730
745
731 - exc_tuple: a *tuple* of valid exceptions to call the defined
746 - exc_tuple: a *tuple* of valid exceptions to call the defined
732 handler for. It is very important that you use a tuple, and NOT A
747 handler for. It is very important that you use a tuple, and NOT A
733 LIST here, because of the way Python's except statement works. If
748 LIST here, because of the way Python's except statement works. If
734 you only want to trap a single exception, use a singleton tuple:
749 you only want to trap a single exception, use a singleton tuple:
735
750
736 exc_tuple == (MyCustomException,)
751 exc_tuple == (MyCustomException,)
737
752
738 - handler: this must be defined as a function with the following
753 - handler: this must be defined as a function with the following
739 basic interface: def my_handler(self,etype,value,tb).
754 basic interface: def my_handler(self,etype,value,tb).
740
755
741 This will be made into an instance method (via new.instancemethod)
756 This will be made into an instance method (via new.instancemethod)
742 of IPython itself, and it will be called if any of the exceptions
757 of IPython itself, and it will be called if any of the exceptions
743 listed in the exc_tuple are caught. If the handler is None, an
758 listed in the exc_tuple are caught. If the handler is None, an
744 internal basic one is used, which just prints basic info.
759 internal basic one is used, which just prints basic info.
745
760
746 WARNING: by putting in your own exception handler into IPython's main
761 WARNING: by putting in your own exception handler into IPython's main
747 execution loop, you run a very good chance of nasty crashes. This
762 execution loop, you run a very good chance of nasty crashes. This
748 facility should only be used if you really know what you are doing."""
763 facility should only be used if you really know what you are doing."""
749
764
750 assert type(exc_tuple)==type(()) , \
765 assert type(exc_tuple)==type(()) , \
751 "The custom exceptions must be given AS A TUPLE."
766 "The custom exceptions must be given AS A TUPLE."
752
767
753 def dummy_handler(self,etype,value,tb):
768 def dummy_handler(self,etype,value,tb):
754 print '*** Simple custom exception handler ***'
769 print '*** Simple custom exception handler ***'
755 print 'Exception type :',etype
770 print 'Exception type :',etype
756 print 'Exception value:',value
771 print 'Exception value:',value
757 print 'Traceback :',tb
772 print 'Traceback :',tb
758 print 'Source code :','\n'.join(self.buffer)
773 print 'Source code :','\n'.join(self.buffer)
759
774
760 if handler is None: handler = dummy_handler
775 if handler is None: handler = dummy_handler
761
776
762 self.CustomTB = new.instancemethod(handler,self,self.__class__)
777 self.CustomTB = new.instancemethod(handler,self,self.__class__)
763 self.custom_exceptions = exc_tuple
778 self.custom_exceptions = exc_tuple
764
779
765 def set_custom_completer(self,completer,pos=0):
780 def set_custom_completer(self,completer,pos=0):
766 """set_custom_completer(completer,pos=0)
781 """set_custom_completer(completer,pos=0)
767
782
768 Adds a new custom completer function.
783 Adds a new custom completer function.
769
784
770 The position argument (defaults to 0) is the index in the completers
785 The position argument (defaults to 0) is the index in the completers
771 list where you want the completer to be inserted."""
786 list where you want the completer to be inserted."""
772
787
773 newcomp = new.instancemethod(completer,self.Completer,
788 newcomp = new.instancemethod(completer,self.Completer,
774 self.Completer.__class__)
789 self.Completer.__class__)
775 self.Completer.matchers.insert(pos,newcomp)
790 self.Completer.matchers.insert(pos,newcomp)
776
791
777 def _get_call_pdb(self):
792 def _get_call_pdb(self):
778 return self._call_pdb
793 return self._call_pdb
779
794
780 def _set_call_pdb(self,val):
795 def _set_call_pdb(self,val):
781
796
782 if val not in (0,1,False,True):
797 if val not in (0,1,False,True):
783 raise ValueError,'new call_pdb value must be boolean'
798 raise ValueError,'new call_pdb value must be boolean'
784
799
785 # store value in instance
800 # store value in instance
786 self._call_pdb = val
801 self._call_pdb = val
787
802
788 # notify the actual exception handlers
803 # notify the actual exception handlers
789 self.InteractiveTB.call_pdb = val
804 self.InteractiveTB.call_pdb = val
790 if self.isthreaded:
805 if self.isthreaded:
791 try:
806 try:
792 self.sys_excepthook.call_pdb = val
807 self.sys_excepthook.call_pdb = val
793 except:
808 except:
794 warn('Failed to activate pdb for threaded exception handler')
809 warn('Failed to activate pdb for threaded exception handler')
795
810
796 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
811 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
797 'Control auto-activation of pdb at exceptions')
812 'Control auto-activation of pdb at exceptions')
798
813
799
814
800 # These special functions get installed in the builtin namespace, to
815 # These special functions get installed in the builtin namespace, to
801 # provide programmatic (pure python) access to magics, aliases and system
816 # provide programmatic (pure python) access to magics, aliases and system
802 # calls. This is important for logging, user scripting, and more.
817 # calls. This is important for logging, user scripting, and more.
803
818
804 # We are basically exposing, via normal python functions, the three
819 # We are basically exposing, via normal python functions, the three
805 # mechanisms in which ipython offers special call modes (magics for
820 # mechanisms in which ipython offers special call modes (magics for
806 # internal control, aliases for direct system access via pre-selected
821 # internal control, aliases for direct system access via pre-selected
807 # names, and !cmd for calling arbitrary system commands).
822 # names, and !cmd for calling arbitrary system commands).
808
823
809 def ipmagic(self,arg_s):
824 def ipmagic(self,arg_s):
810 """Call a magic function by name.
825 """Call a magic function by name.
811
826
812 Input: a string containing the name of the magic function to call and any
827 Input: a string containing the name of the magic function to call and any
813 additional arguments to be passed to the magic.
828 additional arguments to be passed to the magic.
814
829
815 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
830 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
816 prompt:
831 prompt:
817
832
818 In[1]: %name -opt foo bar
833 In[1]: %name -opt foo bar
819
834
820 To call a magic without arguments, simply use ipmagic('name').
835 To call a magic without arguments, simply use ipmagic('name').
821
836
822 This provides a proper Python function to call IPython's magics in any
837 This provides a proper Python function to call IPython's magics in any
823 valid Python code you can type at the interpreter, including loops and
838 valid Python code you can type at the interpreter, including loops and
824 compound statements. It is added by IPython to the Python builtin
839 compound statements. It is added by IPython to the Python builtin
825 namespace upon initialization."""
840 namespace upon initialization."""
826
841
827 args = arg_s.split(' ',1)
842 args = arg_s.split(' ',1)
828 magic_name = args[0]
843 magic_name = args[0]
829 magic_name = magic_name.lstrip(self.ESC_MAGIC)
844 magic_name = magic_name.lstrip(self.ESC_MAGIC)
830
845
831 try:
846 try:
832 magic_args = args[1]
847 magic_args = args[1]
833 except IndexError:
848 except IndexError:
834 magic_args = ''
849 magic_args = ''
835 fn = getattr(self,'magic_'+magic_name,None)
850 fn = getattr(self,'magic_'+magic_name,None)
836 if fn is None:
851 if fn is None:
837 error("Magic function `%s` not found." % magic_name)
852 error("Magic function `%s` not found." % magic_name)
838 else:
853 else:
839 magic_args = self.var_expand(magic_args)
854 magic_args = self.var_expand(magic_args)
840 return fn(magic_args)
855 return fn(magic_args)
841
856
842 def ipalias(self,arg_s):
857 def ipalias(self,arg_s):
843 """Call an alias by name.
858 """Call an alias by name.
844
859
845 Input: a string containing the name of the alias to call and any
860 Input: a string containing the name of the alias to call and any
846 additional arguments to be passed to the magic.
861 additional arguments to be passed to the magic.
847
862
848 ipalias('name -opt foo bar') is equivalent to typing at the ipython
863 ipalias('name -opt foo bar') is equivalent to typing at the ipython
849 prompt:
864 prompt:
850
865
851 In[1]: name -opt foo bar
866 In[1]: name -opt foo bar
852
867
853 To call an alias without arguments, simply use ipalias('name').
868 To call an alias without arguments, simply use ipalias('name').
854
869
855 This provides a proper Python function to call IPython's aliases in any
870 This provides a proper Python function to call IPython's aliases in any
856 valid Python code you can type at the interpreter, including loops and
871 valid Python code you can type at the interpreter, including loops and
857 compound statements. It is added by IPython to the Python builtin
872 compound statements. It is added by IPython to the Python builtin
858 namespace upon initialization."""
873 namespace upon initialization."""
859
874
860 args = arg_s.split(' ',1)
875 args = arg_s.split(' ',1)
861 alias_name = args[0]
876 alias_name = args[0]
862 try:
877 try:
863 alias_args = args[1]
878 alias_args = args[1]
864 except IndexError:
879 except IndexError:
865 alias_args = ''
880 alias_args = ''
866 if alias_name in self.alias_table:
881 if alias_name in self.alias_table:
867 self.call_alias(alias_name,alias_args)
882 self.call_alias(alias_name,alias_args)
868 else:
883 else:
869 error("Alias `%s` not found." % alias_name)
884 error("Alias `%s` not found." % alias_name)
870
885
871 def ipsystem(self,arg_s):
886 def ipsystem(self,arg_s):
872 """Make a system call, using IPython."""
887 """Make a system call, using IPython."""
873
888
874 self.system(arg_s)
889 self.system(arg_s)
875
890
876 def complete(self,text):
891 def complete(self,text):
877 """Return a sorted list of all possible completions on text.
892 """Return a sorted list of all possible completions on text.
878
893
879 Inputs:
894 Inputs:
880
895
881 - text: a string of text to be completed on.
896 - text: a string of text to be completed on.
882
897
883 This is a wrapper around the completion mechanism, similar to what
898 This is a wrapper around the completion mechanism, similar to what
884 readline does at the command line when the TAB key is hit. By
899 readline does at the command line when the TAB key is hit. By
885 exposing it as a method, it can be used by other non-readline
900 exposing it as a method, it can be used by other non-readline
886 environments (such as GUIs) for text completion.
901 environments (such as GUIs) for text completion.
887
902
888 Simple usage example:
903 Simple usage example:
889
904
890 In [1]: x = 'hello'
905 In [1]: x = 'hello'
891
906
892 In [2]: __IP.complete('x.l')
907 In [2]: __IP.complete('x.l')
893 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
908 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
894
909
895 complete = self.Completer.complete
910 complete = self.Completer.complete
896 state = 0
911 state = 0
897 # use a dict so we get unique keys, since ipyhton's multiple
912 # use a dict so we get unique keys, since ipyhton's multiple
898 # completers can return duplicates.
913 # completers can return duplicates.
899 comps = {}
914 comps = {}
900 while True:
915 while True:
901 newcomp = complete(text,state)
916 newcomp = complete(text,state)
902 if newcomp is None:
917 if newcomp is None:
903 break
918 break
904 comps[newcomp] = 1
919 comps[newcomp] = 1
905 state += 1
920 state += 1
906 outcomps = comps.keys()
921 outcomps = comps.keys()
907 outcomps.sort()
922 outcomps.sort()
908 return outcomps
923 return outcomps
909
924
910 def set_completer_frame(self, frame=None):
925 def set_completer_frame(self, frame=None):
911 if frame:
926 if frame:
912 self.Completer.namespace = frame.f_locals
927 self.Completer.namespace = frame.f_locals
913 self.Completer.global_namespace = frame.f_globals
928 self.Completer.global_namespace = frame.f_globals
914 else:
929 else:
915 self.Completer.namespace = self.user_ns
930 self.Completer.namespace = self.user_ns
916 self.Completer.global_namespace = self.user_global_ns
931 self.Completer.global_namespace = self.user_global_ns
917
932
918 def init_auto_alias(self):
933 def init_auto_alias(self):
919 """Define some aliases automatically.
934 """Define some aliases automatically.
920
935
921 These are ALL parameter-less aliases"""
936 These are ALL parameter-less aliases"""
922
937
923 for alias,cmd in self.auto_alias:
938 for alias,cmd in self.auto_alias:
924 self.alias_table[alias] = (0,cmd)
939 self.alias_table[alias] = (0,cmd)
925
940
926 def alias_table_validate(self,verbose=0):
941 def alias_table_validate(self,verbose=0):
927 """Update information about the alias table.
942 """Update information about the alias table.
928
943
929 In particular, make sure no Python keywords/builtins are in it."""
944 In particular, make sure no Python keywords/builtins are in it."""
930
945
931 no_alias = self.no_alias
946 no_alias = self.no_alias
932 for k in self.alias_table.keys():
947 for k in self.alias_table.keys():
933 if k in no_alias:
948 if k in no_alias:
934 del self.alias_table[k]
949 del self.alias_table[k]
935 if verbose:
950 if verbose:
936 print ("Deleting alias <%s>, it's a Python "
951 print ("Deleting alias <%s>, it's a Python "
937 "keyword or builtin." % k)
952 "keyword or builtin." % k)
938
953
939 def set_autoindent(self,value=None):
954 def set_autoindent(self,value=None):
940 """Set the autoindent flag, checking for readline support.
955 """Set the autoindent flag, checking for readline support.
941
956
942 If called with no arguments, it acts as a toggle."""
957 If called with no arguments, it acts as a toggle."""
943
958
944 if not self.has_readline:
959 if not self.has_readline:
945 if os.name == 'posix':
960 if os.name == 'posix':
946 warn("The auto-indent feature requires the readline library")
961 warn("The auto-indent feature requires the readline library")
947 self.autoindent = 0
962 self.autoindent = 0
948 return
963 return
949 if value is None:
964 if value is None:
950 self.autoindent = not self.autoindent
965 self.autoindent = not self.autoindent
951 else:
966 else:
952 self.autoindent = value
967 self.autoindent = value
953
968
954 def rc_set_toggle(self,rc_field,value=None):
969 def rc_set_toggle(self,rc_field,value=None):
955 """Set or toggle a field in IPython's rc config. structure.
970 """Set or toggle a field in IPython's rc config. structure.
956
971
957 If called with no arguments, it acts as a toggle.
972 If called with no arguments, it acts as a toggle.
958
973
959 If called with a non-existent field, the resulting AttributeError
974 If called with a non-existent field, the resulting AttributeError
960 exception will propagate out."""
975 exception will propagate out."""
961
976
962 rc_val = getattr(self.rc,rc_field)
977 rc_val = getattr(self.rc,rc_field)
963 if value is None:
978 if value is None:
964 value = not rc_val
979 value = not rc_val
965 setattr(self.rc,rc_field,value)
980 setattr(self.rc,rc_field,value)
966
981
967 def user_setup(self,ipythondir,rc_suffix,mode='install'):
982 def user_setup(self,ipythondir,rc_suffix,mode='install'):
968 """Install the user configuration directory.
983 """Install the user configuration directory.
969
984
970 Can be called when running for the first time or to upgrade the user's
985 Can be called when running for the first time or to upgrade the user's
971 .ipython/ directory with the mode parameter. Valid modes are 'install'
986 .ipython/ directory with the mode parameter. Valid modes are 'install'
972 and 'upgrade'."""
987 and 'upgrade'."""
973
988
974 def wait():
989 def wait():
975 try:
990 try:
976 raw_input("Please press <RETURN> to start IPython.")
991 raw_input("Please press <RETURN> to start IPython.")
977 except EOFError:
992 except EOFError:
978 print >> Term.cout
993 print >> Term.cout
979 print '*'*70
994 print '*'*70
980
995
981 cwd = os.getcwd() # remember where we started
996 cwd = os.getcwd() # remember where we started
982 glb = glob.glob
997 glb = glob.glob
983 print '*'*70
998 print '*'*70
984 if mode == 'install':
999 if mode == 'install':
985 print \
1000 print \
986 """Welcome to IPython. I will try to create a personal configuration directory
1001 """Welcome to IPython. I will try to create a personal configuration directory
987 where you can customize many aspects of IPython's functionality in:\n"""
1002 where you can customize many aspects of IPython's functionality in:\n"""
988 else:
1003 else:
989 print 'I am going to upgrade your configuration in:'
1004 print 'I am going to upgrade your configuration in:'
990
1005
991 print ipythondir
1006 print ipythondir
992
1007
993 rcdirend = os.path.join('IPython','UserConfig')
1008 rcdirend = os.path.join('IPython','UserConfig')
994 cfg = lambda d: os.path.join(d,rcdirend)
1009 cfg = lambda d: os.path.join(d,rcdirend)
995 try:
1010 try:
996 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1011 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
997 except IOError:
1012 except IOError:
998 warning = """
1013 warning = """
999 Installation error. IPython's directory was not found.
1014 Installation error. IPython's directory was not found.
1000
1015
1001 Check the following:
1016 Check the following:
1002
1017
1003 The ipython/IPython directory should be in a directory belonging to your
1018 The ipython/IPython directory should be in a directory belonging to your
1004 PYTHONPATH environment variable (that is, it should be in a directory
1019 PYTHONPATH environment variable (that is, it should be in a directory
1005 belonging to sys.path). You can copy it explicitly there or just link to it.
1020 belonging to sys.path). You can copy it explicitly there or just link to it.
1006
1021
1007 IPython will proceed with builtin defaults.
1022 IPython will proceed with builtin defaults.
1008 """
1023 """
1009 warn(warning)
1024 warn(warning)
1010 wait()
1025 wait()
1011 return
1026 return
1012
1027
1013 if mode == 'install':
1028 if mode == 'install':
1014 try:
1029 try:
1015 shutil.copytree(rcdir,ipythondir)
1030 shutil.copytree(rcdir,ipythondir)
1016 os.chdir(ipythondir)
1031 os.chdir(ipythondir)
1017 rc_files = glb("ipythonrc*")
1032 rc_files = glb("ipythonrc*")
1018 for rc_file in rc_files:
1033 for rc_file in rc_files:
1019 os.rename(rc_file,rc_file+rc_suffix)
1034 os.rename(rc_file,rc_file+rc_suffix)
1020 except:
1035 except:
1021 warning = """
1036 warning = """
1022
1037
1023 There was a problem with the installation:
1038 There was a problem with the installation:
1024 %s
1039 %s
1025 Try to correct it or contact the developers if you think it's a bug.
1040 Try to correct it or contact the developers if you think it's a bug.
1026 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1041 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1027 warn(warning)
1042 warn(warning)
1028 wait()
1043 wait()
1029 return
1044 return
1030
1045
1031 elif mode == 'upgrade':
1046 elif mode == 'upgrade':
1032 try:
1047 try:
1033 os.chdir(ipythondir)
1048 os.chdir(ipythondir)
1034 except:
1049 except:
1035 print """
1050 print """
1036 Can not upgrade: changing to directory %s failed. Details:
1051 Can not upgrade: changing to directory %s failed. Details:
1037 %s
1052 %s
1038 """ % (ipythondir,sys.exc_info()[1])
1053 """ % (ipythondir,sys.exc_info()[1])
1039 wait()
1054 wait()
1040 return
1055 return
1041 else:
1056 else:
1042 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1057 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1043 for new_full_path in sources:
1058 for new_full_path in sources:
1044 new_filename = os.path.basename(new_full_path)
1059 new_filename = os.path.basename(new_full_path)
1045 if new_filename.startswith('ipythonrc'):
1060 if new_filename.startswith('ipythonrc'):
1046 new_filename = new_filename + rc_suffix
1061 new_filename = new_filename + rc_suffix
1047 # The config directory should only contain files, skip any
1062 # The config directory should only contain files, skip any
1048 # directories which may be there (like CVS)
1063 # directories which may be there (like CVS)
1049 if os.path.isdir(new_full_path):
1064 if os.path.isdir(new_full_path):
1050 continue
1065 continue
1051 if os.path.exists(new_filename):
1066 if os.path.exists(new_filename):
1052 old_file = new_filename+'.old'
1067 old_file = new_filename+'.old'
1053 if os.path.exists(old_file):
1068 if os.path.exists(old_file):
1054 os.remove(old_file)
1069 os.remove(old_file)
1055 os.rename(new_filename,old_file)
1070 os.rename(new_filename,old_file)
1056 shutil.copy(new_full_path,new_filename)
1071 shutil.copy(new_full_path,new_filename)
1057 else:
1072 else:
1058 raise ValueError,'unrecognized mode for install:',`mode`
1073 raise ValueError,'unrecognized mode for install:',`mode`
1059
1074
1060 # Fix line-endings to those native to each platform in the config
1075 # Fix line-endings to those native to each platform in the config
1061 # directory.
1076 # directory.
1062 try:
1077 try:
1063 os.chdir(ipythondir)
1078 os.chdir(ipythondir)
1064 except:
1079 except:
1065 print """
1080 print """
1066 Problem: changing to directory %s failed.
1081 Problem: changing to directory %s failed.
1067 Details:
1082 Details:
1068 %s
1083 %s
1069
1084
1070 Some configuration files may have incorrect line endings. This should not
1085 Some configuration files may have incorrect line endings. This should not
1071 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1086 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1072 wait()
1087 wait()
1073 else:
1088 else:
1074 for fname in glb('ipythonrc*'):
1089 for fname in glb('ipythonrc*'):
1075 try:
1090 try:
1076 native_line_ends(fname,backup=0)
1091 native_line_ends(fname,backup=0)
1077 except IOError:
1092 except IOError:
1078 pass
1093 pass
1079
1094
1080 if mode == 'install':
1095 if mode == 'install':
1081 print """
1096 print """
1082 Successful installation!
1097 Successful installation!
1083
1098
1084 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1099 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1085 IPython manual (there are both HTML and PDF versions supplied with the
1100 IPython manual (there are both HTML and PDF versions supplied with the
1086 distribution) to make sure that your system environment is properly configured
1101 distribution) to make sure that your system environment is properly configured
1087 to take advantage of IPython's features."""
1102 to take advantage of IPython's features."""
1088 else:
1103 else:
1089 print """
1104 print """
1090 Successful upgrade!
1105 Successful upgrade!
1091
1106
1092 All files in your directory:
1107 All files in your directory:
1093 %(ipythondir)s
1108 %(ipythondir)s
1094 which would have been overwritten by the upgrade were backed up with a .old
1109 which would have been overwritten by the upgrade were backed up with a .old
1095 extension. If you had made particular customizations in those files you may
1110 extension. If you had made particular customizations in those files you may
1096 want to merge them back into the new files.""" % locals()
1111 want to merge them back into the new files.""" % locals()
1097 wait()
1112 wait()
1098 os.chdir(cwd)
1113 os.chdir(cwd)
1099 # end user_setup()
1114 # end user_setup()
1100
1115
1101 def atexit_operations(self):
1116 def atexit_operations(self):
1102 """This will be executed at the time of exit.
1117 """This will be executed at the time of exit.
1103
1118
1104 Saving of persistent data should be performed here. """
1119 Saving of persistent data should be performed here. """
1105
1120
1106 #print '*** IPython exit cleanup ***' # dbg
1121 #print '*** IPython exit cleanup ***' # dbg
1107 # input history
1122 # input history
1108 self.savehist()
1123 self.savehist()
1109
1124
1110 # Cleanup all tempfiles left around
1125 # Cleanup all tempfiles left around
1111 for tfile in self.tempfiles:
1126 for tfile in self.tempfiles:
1112 try:
1127 try:
1113 os.unlink(tfile)
1128 os.unlink(tfile)
1114 except OSError:
1129 except OSError:
1115 pass
1130 pass
1116
1131
1117 # save the "persistent data" catch-all dictionary
1132 # save the "persistent data" catch-all dictionary
1118 try:
1133 try:
1119 pickle.dump(self.persist, open(self.persist_fname,"w"))
1134 pickle.dump(self.persist, open(self.persist_fname,"w"))
1120 except:
1135 except:
1121 print "*** ERROR *** persistent data saving failed."
1136 print "*** ERROR *** persistent data saving failed."
1122
1137
1123 def savehist(self):
1138 def savehist(self):
1124 """Save input history to a file (via readline library)."""
1139 """Save input history to a file (via readline library)."""
1125 try:
1140 try:
1126 self.readline.write_history_file(self.histfile)
1141 self.readline.write_history_file(self.histfile)
1127 except:
1142 except:
1128 print 'Unable to save IPython command history to file: ' + \
1143 print 'Unable to save IPython command history to file: ' + \
1129 `self.histfile`
1144 `self.histfile`
1130
1145
1131 def pre_readline(self):
1146 def pre_readline(self):
1132 """readline hook to be used at the start of each line.
1147 """readline hook to be used at the start of each line.
1133
1148
1134 Currently it handles auto-indent only."""
1149 Currently it handles auto-indent only."""
1135
1150
1136 self.readline.insert_text(self.indent_current)
1151 self.readline.insert_text(self.indent_current)
1137
1152
1138 def init_readline(self):
1153 def init_readline(self):
1139 """Command history completion/saving/reloading."""
1154 """Command history completion/saving/reloading."""
1140 try:
1155 try:
1141 import readline
1156 import readline
1142 except ImportError:
1157 except ImportError:
1143 self.has_readline = 0
1158 self.has_readline = 0
1144 self.readline = None
1159 self.readline = None
1145 # no point in bugging windows users with this every time:
1160 # no point in bugging windows users with this every time:
1146 if os.name == 'posix':
1161 if os.name == 'posix':
1147 warn('Readline services not available on this platform.')
1162 warn('Readline services not available on this platform.')
1148 else:
1163 else:
1149 import atexit
1164 import atexit
1150 from IPython.completer import IPCompleter
1165 from IPython.completer import IPCompleter
1151 self.Completer = IPCompleter(self,
1166 self.Completer = IPCompleter(self,
1152 self.user_ns,
1167 self.user_ns,
1153 self.user_global_ns,
1168 self.user_global_ns,
1154 self.rc.readline_omit__names,
1169 self.rc.readline_omit__names,
1155 self.alias_table)
1170 self.alias_table)
1156
1171
1157 # Platform-specific configuration
1172 # Platform-specific configuration
1158 if os.name == 'nt':
1173 if os.name == 'nt':
1159 self.readline_startup_hook = readline.set_pre_input_hook
1174 self.readline_startup_hook = readline.set_pre_input_hook
1160 else:
1175 else:
1161 self.readline_startup_hook = readline.set_startup_hook
1176 self.readline_startup_hook = readline.set_startup_hook
1162
1177
1163 # Load user's initrc file (readline config)
1178 # Load user's initrc file (readline config)
1164 inputrc_name = os.environ.get('INPUTRC')
1179 inputrc_name = os.environ.get('INPUTRC')
1165 if inputrc_name is None:
1180 if inputrc_name is None:
1166 home_dir = get_home_dir()
1181 home_dir = get_home_dir()
1167 if home_dir is not None:
1182 if home_dir is not None:
1168 inputrc_name = os.path.join(home_dir,'.inputrc')
1183 inputrc_name = os.path.join(home_dir,'.inputrc')
1169 if os.path.isfile(inputrc_name):
1184 if os.path.isfile(inputrc_name):
1170 try:
1185 try:
1171 readline.read_init_file(inputrc_name)
1186 readline.read_init_file(inputrc_name)
1172 except:
1187 except:
1173 warn('Problems reading readline initialization file <%s>'
1188 warn('Problems reading readline initialization file <%s>'
1174 % inputrc_name)
1189 % inputrc_name)
1175
1190
1176 self.has_readline = 1
1191 self.has_readline = 1
1177 self.readline = readline
1192 self.readline = readline
1178 # save this in sys so embedded copies can restore it properly
1193 # save this in sys so embedded copies can restore it properly
1179 sys.ipcompleter = self.Completer.complete
1194 sys.ipcompleter = self.Completer.complete
1180 readline.set_completer(self.Completer.complete)
1195 readline.set_completer(self.Completer.complete)
1181
1196
1182 # Configure readline according to user's prefs
1197 # Configure readline according to user's prefs
1183 for rlcommand in self.rc.readline_parse_and_bind:
1198 for rlcommand in self.rc.readline_parse_and_bind:
1184 readline.parse_and_bind(rlcommand)
1199 readline.parse_and_bind(rlcommand)
1185
1200
1186 # remove some chars from the delimiters list
1201 # remove some chars from the delimiters list
1187 delims = readline.get_completer_delims()
1202 delims = readline.get_completer_delims()
1188 delims = delims.translate(string._idmap,
1203 delims = delims.translate(string._idmap,
1189 self.rc.readline_remove_delims)
1204 self.rc.readline_remove_delims)
1190 readline.set_completer_delims(delims)
1205 readline.set_completer_delims(delims)
1191 # otherwise we end up with a monster history after a while:
1206 # otherwise we end up with a monster history after a while:
1192 readline.set_history_length(1000)
1207 readline.set_history_length(1000)
1193 try:
1208 try:
1194 #print '*** Reading readline history' # dbg
1209 #print '*** Reading readline history' # dbg
1195 readline.read_history_file(self.histfile)
1210 readline.read_history_file(self.histfile)
1196 except IOError:
1211 except IOError:
1197 pass # It doesn't exist yet.
1212 pass # It doesn't exist yet.
1198
1213
1199 atexit.register(self.atexit_operations)
1214 atexit.register(self.atexit_operations)
1200 del atexit
1215 del atexit
1201
1216
1202 # Configure auto-indent for all platforms
1217 # Configure auto-indent for all platforms
1203 self.set_autoindent(self.rc.autoindent)
1218 self.set_autoindent(self.rc.autoindent)
1204
1219
1205 def _should_recompile(self,e):
1220 def _should_recompile(self,e):
1206 """Utility routine for edit_syntax_error"""
1221 """Utility routine for edit_syntax_error"""
1207
1222
1208 if e.filename in ('<ipython console>','<input>','<string>',
1223 if e.filename in ('<ipython console>','<input>','<string>',
1209 '<console>',None):
1224 '<console>',None):
1210
1225
1211 return False
1226 return False
1212 try:
1227 try:
1213 if not ask_yes_no('Return to editor to correct syntax error? '
1228 if not ask_yes_no('Return to editor to correct syntax error? '
1214 '[Y/n] ','y'):
1229 '[Y/n] ','y'):
1215 return False
1230 return False
1216 except EOFError:
1231 except EOFError:
1217 return False
1232 return False
1218
1233
1219 def int0(x):
1234 def int0(x):
1220 try:
1235 try:
1221 return int(x)
1236 return int(x)
1222 except TypeError:
1237 except TypeError:
1223 return 0
1238 return 0
1224 # always pass integer line and offset values to editor hook
1239 # always pass integer line and offset values to editor hook
1225 self.hooks.fix_error_editor(e.filename,
1240 self.hooks.fix_error_editor(e.filename,
1226 int0(e.lineno),int0(e.offset),e.msg)
1241 int0(e.lineno),int0(e.offset),e.msg)
1227 return True
1242 return True
1228
1243
1229 def edit_syntax_error(self):
1244 def edit_syntax_error(self):
1230 """The bottom half of the syntax error handler called in the main loop.
1245 """The bottom half of the syntax error handler called in the main loop.
1231
1246
1232 Loop until syntax error is fixed or user cancels.
1247 Loop until syntax error is fixed or user cancels.
1233 """
1248 """
1234
1249
1235 while self.SyntaxTB.last_syntax_error:
1250 while self.SyntaxTB.last_syntax_error:
1236 # copy and clear last_syntax_error
1251 # copy and clear last_syntax_error
1237 err = self.SyntaxTB.clear_err_state()
1252 err = self.SyntaxTB.clear_err_state()
1238 if not self._should_recompile(err):
1253 if not self._should_recompile(err):
1239 return
1254 return
1240 try:
1255 try:
1241 # may set last_syntax_error again if a SyntaxError is raised
1256 # may set last_syntax_error again if a SyntaxError is raised
1242 self.safe_execfile(err.filename,self.shell.user_ns)
1257 self.safe_execfile(err.filename,self.shell.user_ns)
1243 except:
1258 except:
1244 self.showtraceback()
1259 self.showtraceback()
1245 else:
1260 else:
1246 f = file(err.filename)
1261 f = file(err.filename)
1247 try:
1262 try:
1248 sys.displayhook(f.read())
1263 sys.displayhook(f.read())
1249 finally:
1264 finally:
1250 f.close()
1265 f.close()
1251
1266
1252 def showsyntaxerror(self, filename=None):
1267 def showsyntaxerror(self, filename=None):
1253 """Display the syntax error that just occurred.
1268 """Display the syntax error that just occurred.
1254
1269
1255 This doesn't display a stack trace because there isn't one.
1270 This doesn't display a stack trace because there isn't one.
1256
1271
1257 If a filename is given, it is stuffed in the exception instead
1272 If a filename is given, it is stuffed in the exception instead
1258 of what was there before (because Python's parser always uses
1273 of what was there before (because Python's parser always uses
1259 "<string>" when reading from a string).
1274 "<string>" when reading from a string).
1260 """
1275 """
1261 etype, value, last_traceback = sys.exc_info()
1276 etype, value, last_traceback = sys.exc_info()
1262 if filename and etype is SyntaxError:
1277 if filename and etype is SyntaxError:
1263 # Work hard to stuff the correct filename in the exception
1278 # Work hard to stuff the correct filename in the exception
1264 try:
1279 try:
1265 msg, (dummy_filename, lineno, offset, line) = value
1280 msg, (dummy_filename, lineno, offset, line) = value
1266 except:
1281 except:
1267 # Not the format we expect; leave it alone
1282 # Not the format we expect; leave it alone
1268 pass
1283 pass
1269 else:
1284 else:
1270 # Stuff in the right filename
1285 # Stuff in the right filename
1271 try:
1286 try:
1272 # Assume SyntaxError is a class exception
1287 # Assume SyntaxError is a class exception
1273 value = SyntaxError(msg, (filename, lineno, offset, line))
1288 value = SyntaxError(msg, (filename, lineno, offset, line))
1274 except:
1289 except:
1275 # If that failed, assume SyntaxError is a string
1290 # If that failed, assume SyntaxError is a string
1276 value = msg, (filename, lineno, offset, line)
1291 value = msg, (filename, lineno, offset, line)
1277 self.SyntaxTB(etype,value,[])
1292 self.SyntaxTB(etype,value,[])
1278
1293
1279 def debugger(self):
1294 def debugger(self):
1280 """Call the pdb debugger."""
1295 """Call the pdb debugger."""
1281
1296
1282 if not self.rc.pdb:
1297 if not self.rc.pdb:
1283 return
1298 return
1284 pdb.pm()
1299 pdb.pm()
1285
1300
1286 def showtraceback(self,exc_tuple = None,filename=None):
1301 def showtraceback(self,exc_tuple = None,filename=None):
1287 """Display the exception that just occurred."""
1302 """Display the exception that just occurred."""
1288
1303
1289 # Though this won't be called by syntax errors in the input line,
1304 # Though this won't be called by syntax errors in the input line,
1290 # there may be SyntaxError cases whith imported code.
1305 # there may be SyntaxError cases whith imported code.
1291 if exc_tuple is None:
1306 if exc_tuple is None:
1292 type, value, tb = sys.exc_info()
1307 type, value, tb = sys.exc_info()
1293 else:
1308 else:
1294 type, value, tb = exc_tuple
1309 type, value, tb = exc_tuple
1295 if type is SyntaxError:
1310 if type is SyntaxError:
1296 self.showsyntaxerror(filename)
1311 self.showsyntaxerror(filename)
1297 else:
1312 else:
1298 self.InteractiveTB()
1313 self.InteractiveTB()
1299 if self.InteractiveTB.call_pdb and self.has_readline:
1314 if self.InteractiveTB.call_pdb and self.has_readline:
1300 # pdb mucks up readline, fix it back
1315 # pdb mucks up readline, fix it back
1301 self.readline.set_completer(self.Completer.complete)
1316 self.readline.set_completer(self.Completer.complete)
1302
1317
1303 def mainloop(self,banner=None):
1318 def mainloop(self,banner=None):
1304 """Creates the local namespace and starts the mainloop.
1319 """Creates the local namespace and starts the mainloop.
1305
1320
1306 If an optional banner argument is given, it will override the
1321 If an optional banner argument is given, it will override the
1307 internally created default banner."""
1322 internally created default banner."""
1308
1323
1309 if self.rc.c: # Emulate Python's -c option
1324 if self.rc.c: # Emulate Python's -c option
1310 self.exec_init_cmd()
1325 self.exec_init_cmd()
1311 if banner is None:
1326 if banner is None:
1312 if self.rc.banner:
1327 if self.rc.banner:
1313 banner = self.BANNER+self.banner2
1328 banner = self.BANNER+self.banner2
1314 else:
1329 else:
1315 banner = ''
1330 banner = ''
1316 self.interact(banner)
1331 self.interact(banner)
1317
1332
1318 def exec_init_cmd(self):
1333 def exec_init_cmd(self):
1319 """Execute a command given at the command line.
1334 """Execute a command given at the command line.
1320
1335
1321 This emulates Python's -c option."""
1336 This emulates Python's -c option."""
1322
1337
1323 sys.argv = ['-c']
1338 sys.argv = ['-c']
1324 self.push(self.rc.c)
1339 self.push(self.rc.c)
1325
1340
1326 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1341 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1327 """Embeds IPython into a running python program.
1342 """Embeds IPython into a running python program.
1328
1343
1329 Input:
1344 Input:
1330
1345
1331 - header: An optional header message can be specified.
1346 - header: An optional header message can be specified.
1332
1347
1333 - local_ns, global_ns: working namespaces. If given as None, the
1348 - local_ns, global_ns: working namespaces. If given as None, the
1334 IPython-initialized one is updated with __main__.__dict__, so that
1349 IPython-initialized one is updated with __main__.__dict__, so that
1335 program variables become visible but user-specific configuration
1350 program variables become visible but user-specific configuration
1336 remains possible.
1351 remains possible.
1337
1352
1338 - stack_depth: specifies how many levels in the stack to go to
1353 - stack_depth: specifies how many levels in the stack to go to
1339 looking for namespaces (when local_ns and global_ns are None). This
1354 looking for namespaces (when local_ns and global_ns are None). This
1340 allows an intermediate caller to make sure that this function gets
1355 allows an intermediate caller to make sure that this function gets
1341 the namespace from the intended level in the stack. By default (0)
1356 the namespace from the intended level in the stack. By default (0)
1342 it will get its locals and globals from the immediate caller.
1357 it will get its locals and globals from the immediate caller.
1343
1358
1344 Warning: it's possible to use this in a program which is being run by
1359 Warning: it's possible to use this in a program which is being run by
1345 IPython itself (via %run), but some funny things will happen (a few
1360 IPython itself (via %run), but some funny things will happen (a few
1346 globals get overwritten). In the future this will be cleaned up, as
1361 globals get overwritten). In the future this will be cleaned up, as
1347 there is no fundamental reason why it can't work perfectly."""
1362 there is no fundamental reason why it can't work perfectly."""
1348
1363
1349 # Get locals and globals from caller
1364 # Get locals and globals from caller
1350 if local_ns is None or global_ns is None:
1365 if local_ns is None or global_ns is None:
1351 call_frame = sys._getframe(stack_depth).f_back
1366 call_frame = sys._getframe(stack_depth).f_back
1352
1367
1353 if local_ns is None:
1368 if local_ns is None:
1354 local_ns = call_frame.f_locals
1369 local_ns = call_frame.f_locals
1355 if global_ns is None:
1370 if global_ns is None:
1356 global_ns = call_frame.f_globals
1371 global_ns = call_frame.f_globals
1357
1372
1358 # Update namespaces and fire up interpreter
1373 # Update namespaces and fire up interpreter
1359
1374
1360 # The global one is easy, we can just throw it in
1375 # The global one is easy, we can just throw it in
1361 self.user_global_ns = global_ns
1376 self.user_global_ns = global_ns
1362
1377
1363 # but the user/local one is tricky: ipython needs it to store internal
1378 # but the user/local one is tricky: ipython needs it to store internal
1364 # data, but we also need the locals. We'll copy locals in the user
1379 # data, but we also need the locals. We'll copy locals in the user
1365 # one, but will track what got copied so we can delete them at exit.
1380 # one, but will track what got copied so we can delete them at exit.
1366 # This is so that a later embedded call doesn't see locals from a
1381 # This is so that a later embedded call doesn't see locals from a
1367 # previous call (which most likely existed in a separate scope).
1382 # previous call (which most likely existed in a separate scope).
1368 local_varnames = local_ns.keys()
1383 local_varnames = local_ns.keys()
1369 self.user_ns.update(local_ns)
1384 self.user_ns.update(local_ns)
1370
1385
1371 # Patch for global embedding to make sure that things don't overwrite
1386 # Patch for global embedding to make sure that things don't overwrite
1372 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1387 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1373 # FIXME. Test this a bit more carefully (the if.. is new)
1388 # FIXME. Test this a bit more carefully (the if.. is new)
1374 if local_ns is None and global_ns is None:
1389 if local_ns is None and global_ns is None:
1375 self.user_global_ns.update(__main__.__dict__)
1390 self.user_global_ns.update(__main__.__dict__)
1376
1391
1377 # make sure the tab-completer has the correct frame information, so it
1392 # make sure the tab-completer has the correct frame information, so it
1378 # actually completes using the frame's locals/globals
1393 # actually completes using the frame's locals/globals
1379 self.set_completer_frame()
1394 self.set_completer_frame()
1380
1395
1381 # before activating the interactive mode, we need to make sure that
1396 # before activating the interactive mode, we need to make sure that
1382 # all names in the builtin namespace needed by ipython point to
1397 # all names in the builtin namespace needed by ipython point to
1383 # ourselves, and not to other instances.
1398 # ourselves, and not to other instances.
1384 self.add_builtins()
1399 self.add_builtins()
1385
1400
1386 self.interact(header)
1401 self.interact(header)
1387
1402
1388 # now, purge out the user namespace from anything we might have added
1403 # now, purge out the user namespace from anything we might have added
1389 # from the caller's local namespace
1404 # from the caller's local namespace
1390 delvar = self.user_ns.pop
1405 delvar = self.user_ns.pop
1391 for var in local_varnames:
1406 for var in local_varnames:
1392 delvar(var,None)
1407 delvar(var,None)
1393 # and clean builtins we may have overridden
1408 # and clean builtins we may have overridden
1394 self.clean_builtins()
1409 self.clean_builtins()
1395
1410
1396 def interact(self, banner=None):
1411 def interact(self, banner=None):
1397 """Closely emulate the interactive Python console.
1412 """Closely emulate the interactive Python console.
1398
1413
1399 The optional banner argument specify the banner to print
1414 The optional banner argument specify the banner to print
1400 before the first interaction; by default it prints a banner
1415 before the first interaction; by default it prints a banner
1401 similar to the one printed by the real Python interpreter,
1416 similar to the one printed by the real Python interpreter,
1402 followed by the current class name in parentheses (so as not
1417 followed by the current class name in parentheses (so as not
1403 to confuse this with the real interpreter -- since it's so
1418 to confuse this with the real interpreter -- since it's so
1404 close!).
1419 close!).
1405
1420
1406 """
1421 """
1407 cprt = 'Type "copyright", "credits" or "license" for more information.'
1422 cprt = 'Type "copyright", "credits" or "license" for more information.'
1408 if banner is None:
1423 if banner is None:
1409 self.write("Python %s on %s\n%s\n(%s)\n" %
1424 self.write("Python %s on %s\n%s\n(%s)\n" %
1410 (sys.version, sys.platform, cprt,
1425 (sys.version, sys.platform, cprt,
1411 self.__class__.__name__))
1426 self.__class__.__name__))
1412 else:
1427 else:
1413 self.write(banner)
1428 self.write(banner)
1414
1429
1415 more = 0
1430 more = 0
1416
1431
1417 # Mark activity in the builtins
1432 # Mark activity in the builtins
1418 __builtin__.__dict__['__IPYTHON__active'] += 1
1433 __builtin__.__dict__['__IPYTHON__active'] += 1
1419
1434
1420 # exit_now is set by a call to %Exit or %Quit
1435 # exit_now is set by a call to %Exit or %Quit
1421 self.exit_now = False
1436 self.exit_now = False
1422 while not self.exit_now:
1437 while not self.exit_now:
1423
1438
1424 try:
1439 try:
1425 if more:
1440 if more:
1426 prompt = self.outputcache.prompt2
1441 prompt = self.outputcache.prompt2
1427 if self.autoindent:
1442 if self.autoindent:
1428 self.readline_startup_hook(self.pre_readline)
1443 self.readline_startup_hook(self.pre_readline)
1429 else:
1444 else:
1430 prompt = self.outputcache.prompt1
1445 prompt = self.outputcache.prompt1
1431 try:
1446 try:
1432 line = self.raw_input(prompt,more)
1447 line = self.raw_input(prompt,more)
1433 if self.autoindent:
1448 if self.autoindent:
1434 self.readline_startup_hook(None)
1449 self.readline_startup_hook(None)
1435 except EOFError:
1450 except EOFError:
1436 if self.autoindent:
1451 if self.autoindent:
1437 self.readline_startup_hook(None)
1452 self.readline_startup_hook(None)
1438 self.write("\n")
1453 self.write("\n")
1439 self.exit()
1454 self.exit()
1440 else:
1455 else:
1441 more = self.push(line)
1456 more = self.push(line)
1442
1457
1443 if (self.SyntaxTB.last_syntax_error and
1458 if (self.SyntaxTB.last_syntax_error and
1444 self.rc.autoedit_syntax):
1459 self.rc.autoedit_syntax):
1445 self.edit_syntax_error()
1460 self.edit_syntax_error()
1446
1461
1447 except KeyboardInterrupt:
1462 except KeyboardInterrupt:
1448 self.write("\nKeyboardInterrupt\n")
1463 self.write("\nKeyboardInterrupt\n")
1449 self.resetbuffer()
1464 self.resetbuffer()
1450 more = 0
1465 more = 0
1451 # keep cache in sync with the prompt counter:
1466 # keep cache in sync with the prompt counter:
1452 self.outputcache.prompt_count -= 1
1467 self.outputcache.prompt_count -= 1
1453
1468
1454 if self.autoindent:
1469 if self.autoindent:
1455 self.indent_current_nsp = 0
1470 self.indent_current_nsp = 0
1456 self.indent_current = ' '* self.indent_current_nsp
1471 self.indent_current = ' '* self.indent_current_nsp
1457
1472
1458 except bdb.BdbQuit:
1473 except bdb.BdbQuit:
1459 warn("The Python debugger has exited with a BdbQuit exception.\n"
1474 warn("The Python debugger has exited with a BdbQuit exception.\n"
1460 "Because of how pdb handles the stack, it is impossible\n"
1475 "Because of how pdb handles the stack, it is impossible\n"
1461 "for IPython to properly format this particular exception.\n"
1476 "for IPython to properly format this particular exception.\n"
1462 "IPython will resume normal operation.")
1477 "IPython will resume normal operation.")
1463
1478
1464 # We are off again...
1479 # We are off again...
1465 __builtin__.__dict__['__IPYTHON__active'] -= 1
1480 __builtin__.__dict__['__IPYTHON__active'] -= 1
1466
1481
1467 def excepthook(self, type, value, tb):
1482 def excepthook(self, type, value, tb):
1468 """One more defense for GUI apps that call sys.excepthook.
1483 """One more defense for GUI apps that call sys.excepthook.
1469
1484
1470 GUI frameworks like wxPython trap exceptions and call
1485 GUI frameworks like wxPython trap exceptions and call
1471 sys.excepthook themselves. I guess this is a feature that
1486 sys.excepthook themselves. I guess this is a feature that
1472 enables them to keep running after exceptions that would
1487 enables them to keep running after exceptions that would
1473 otherwise kill their mainloop. This is a bother for IPython
1488 otherwise kill their mainloop. This is a bother for IPython
1474 which excepts to catch all of the program exceptions with a try:
1489 which excepts to catch all of the program exceptions with a try:
1475 except: statement.
1490 except: statement.
1476
1491
1477 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1492 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1478 any app directly invokes sys.excepthook, it will look to the user like
1493 any app directly invokes sys.excepthook, it will look to the user like
1479 IPython crashed. In order to work around this, we can disable the
1494 IPython crashed. In order to work around this, we can disable the
1480 CrashHandler and replace it with this excepthook instead, which prints a
1495 CrashHandler and replace it with this excepthook instead, which prints a
1481 regular traceback using our InteractiveTB. In this fashion, apps which
1496 regular traceback using our InteractiveTB. In this fashion, apps which
1482 call sys.excepthook will generate a regular-looking exception from
1497 call sys.excepthook will generate a regular-looking exception from
1483 IPython, and the CrashHandler will only be triggered by real IPython
1498 IPython, and the CrashHandler will only be triggered by real IPython
1484 crashes.
1499 crashes.
1485
1500
1486 This hook should be used sparingly, only in places which are not likely
1501 This hook should be used sparingly, only in places which are not likely
1487 to be true IPython errors.
1502 to be true IPython errors.
1488 """
1503 """
1489
1504
1490 self.InteractiveTB(type, value, tb, tb_offset=0)
1505 self.InteractiveTB(type, value, tb, tb_offset=0)
1491 if self.InteractiveTB.call_pdb and self.has_readline:
1506 if self.InteractiveTB.call_pdb and self.has_readline:
1492 self.readline.set_completer(self.Completer.complete)
1507 self.readline.set_completer(self.Completer.complete)
1493
1508
1494 def call_alias(self,alias,rest=''):
1509 def call_alias(self,alias,rest=''):
1495 """Call an alias given its name and the rest of the line.
1510 """Call an alias given its name and the rest of the line.
1496
1511
1497 This function MUST be given a proper alias, because it doesn't make
1512 This function MUST be given a proper alias, because it doesn't make
1498 any checks when looking up into the alias table. The caller is
1513 any checks when looking up into the alias table. The caller is
1499 responsible for invoking it only with a valid alias."""
1514 responsible for invoking it only with a valid alias."""
1500
1515
1501 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1516 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1502 nargs,cmd = self.alias_table[alias]
1517 nargs,cmd = self.alias_table[alias]
1503 # Expand the %l special to be the user's input line
1518 # Expand the %l special to be the user's input line
1504 if cmd.find('%l') >= 0:
1519 if cmd.find('%l') >= 0:
1505 cmd = cmd.replace('%l',rest)
1520 cmd = cmd.replace('%l',rest)
1506 rest = ''
1521 rest = ''
1507 if nargs==0:
1522 if nargs==0:
1508 # Simple, argument-less aliases
1523 # Simple, argument-less aliases
1509 cmd = '%s %s' % (cmd,rest)
1524 cmd = '%s %s' % (cmd,rest)
1510 else:
1525 else:
1511 # Handle aliases with positional arguments
1526 # Handle aliases with positional arguments
1512 args = rest.split(None,nargs)
1527 args = rest.split(None,nargs)
1513 if len(args)< nargs:
1528 if len(args)< nargs:
1514 error('Alias <%s> requires %s arguments, %s given.' %
1529 error('Alias <%s> requires %s arguments, %s given.' %
1515 (alias,nargs,len(args)))
1530 (alias,nargs,len(args)))
1516 return
1531 return
1517 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1532 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1518 # Now call the macro, evaluating in the user's namespace
1533 # Now call the macro, evaluating in the user's namespace
1519 try:
1534 try:
1520 self.system(cmd)
1535 self.system(cmd)
1521 except:
1536 except:
1522 self.showtraceback()
1537 self.showtraceback()
1523
1538
1524 def autoindent_update(self,line):
1539 def autoindent_update(self,line):
1525 """Keep track of the indent level."""
1540 """Keep track of the indent level."""
1526
1541
1527 if self.autoindent:
1542 if self.autoindent:
1528 if line:
1543 if line:
1529 self.indent_current_nsp = num_ini_spaces(line)
1544 self.indent_current_nsp = num_ini_spaces(line)
1530
1545
1531 if line[-1] == ':':
1546 if line[-1] == ':':
1532 self.indent_current_nsp += 4
1547 self.indent_current_nsp += 4
1533 elif dedent_re.match(line):
1548 elif dedent_re.match(line):
1534 self.indent_current_nsp -= 4
1549 self.indent_current_nsp -= 4
1535 else:
1550 else:
1536 self.indent_current_nsp = 0
1551 self.indent_current_nsp = 0
1537
1552
1538 # indent_current is the actual string to be inserted
1553 # indent_current is the actual string to be inserted
1539 # by the readline hooks for indentation
1554 # by the readline hooks for indentation
1540 self.indent_current = ' '* self.indent_current_nsp
1555 self.indent_current = ' '* self.indent_current_nsp
1541
1556
1542 def runlines(self,lines):
1557 def runlines(self,lines):
1543 """Run a string of one or more lines of source.
1558 """Run a string of one or more lines of source.
1544
1559
1545 This method is capable of running a string containing multiple source
1560 This method is capable of running a string containing multiple source
1546 lines, as if they had been entered at the IPython prompt. Since it
1561 lines, as if they had been entered at the IPython prompt. Since it
1547 exposes IPython's processing machinery, the given strings can contain
1562 exposes IPython's processing machinery, the given strings can contain
1548 magic calls (%magic), special shell access (!cmd), etc."""
1563 magic calls (%magic), special shell access (!cmd), etc."""
1549
1564
1550 # We must start with a clean buffer, in case this is run from an
1565 # We must start with a clean buffer, in case this is run from an
1551 # interactive IPython session (via a magic, for example).
1566 # interactive IPython session (via a magic, for example).
1552 self.resetbuffer()
1567 self.resetbuffer()
1553 lines = lines.split('\n')
1568 lines = lines.split('\n')
1554 more = 0
1569 more = 0
1555 for line in lines:
1570 for line in lines:
1556 # skip blank lines so we don't mess up the prompt counter, but do
1571 # skip blank lines so we don't mess up the prompt counter, but do
1557 # NOT skip even a blank line if we are in a code block (more is
1572 # NOT skip even a blank line if we are in a code block (more is
1558 # true)
1573 # true)
1559 if line or more:
1574 if line or more:
1560 more = self.push(self.prefilter(line,more))
1575 more = self.push(self.prefilter(line,more))
1561 # IPython's runsource returns None if there was an error
1576 # IPython's runsource returns None if there was an error
1562 # compiling the code. This allows us to stop processing right
1577 # compiling the code. This allows us to stop processing right
1563 # away, so the user gets the error message at the right place.
1578 # away, so the user gets the error message at the right place.
1564 if more is None:
1579 if more is None:
1565 break
1580 break
1566 # final newline in case the input didn't have it, so that the code
1581 # final newline in case the input didn't have it, so that the code
1567 # actually does get executed
1582 # actually does get executed
1568 if more:
1583 if more:
1569 self.push('\n')
1584 self.push('\n')
1570
1585
1571 def runsource(self, source, filename='<input>', symbol='single'):
1586 def runsource(self, source, filename='<input>', symbol='single'):
1572 """Compile and run some source in the interpreter.
1587 """Compile and run some source in the interpreter.
1573
1588
1574 Arguments are as for compile_command().
1589 Arguments are as for compile_command().
1575
1590
1576 One several things can happen:
1591 One several things can happen:
1577
1592
1578 1) The input is incorrect; compile_command() raised an
1593 1) The input is incorrect; compile_command() raised an
1579 exception (SyntaxError or OverflowError). A syntax traceback
1594 exception (SyntaxError or OverflowError). A syntax traceback
1580 will be printed by calling the showsyntaxerror() method.
1595 will be printed by calling the showsyntaxerror() method.
1581
1596
1582 2) The input is incomplete, and more input is required;
1597 2) The input is incomplete, and more input is required;
1583 compile_command() returned None. Nothing happens.
1598 compile_command() returned None. Nothing happens.
1584
1599
1585 3) The input is complete; compile_command() returned a code
1600 3) The input is complete; compile_command() returned a code
1586 object. The code is executed by calling self.runcode() (which
1601 object. The code is executed by calling self.runcode() (which
1587 also handles run-time exceptions, except for SystemExit).
1602 also handles run-time exceptions, except for SystemExit).
1588
1603
1589 The return value is:
1604 The return value is:
1590
1605
1591 - True in case 2
1606 - True in case 2
1592
1607
1593 - False in the other cases, unless an exception is raised, where
1608 - False in the other cases, unless an exception is raised, where
1594 None is returned instead. This can be used by external callers to
1609 None is returned instead. This can be used by external callers to
1595 know whether to continue feeding input or not.
1610 know whether to continue feeding input or not.
1596
1611
1597 The return value can be used to decide whether to use sys.ps1 or
1612 The return value can be used to decide whether to use sys.ps1 or
1598 sys.ps2 to prompt the next line."""
1613 sys.ps2 to prompt the next line."""
1599
1614
1600 try:
1615 try:
1601 code = self.compile(source,filename,symbol)
1616 code = self.compile(source,filename,symbol)
1602 except (OverflowError, SyntaxError, ValueError):
1617 except (OverflowError, SyntaxError, ValueError):
1603 # Case 1
1618 # Case 1
1604 self.showsyntaxerror(filename)
1619 self.showsyntaxerror(filename)
1605 return None
1620 return None
1606
1621
1607 if code is None:
1622 if code is None:
1608 # Case 2
1623 # Case 2
1609 return True
1624 return True
1610
1625
1611 # Case 3
1626 # Case 3
1612 # We store the code object so that threaded shells and
1627 # We store the code object so that threaded shells and
1613 # custom exception handlers can access all this info if needed.
1628 # custom exception handlers can access all this info if needed.
1614 # The source corresponding to this can be obtained from the
1629 # The source corresponding to this can be obtained from the
1615 # buffer attribute as '\n'.join(self.buffer).
1630 # buffer attribute as '\n'.join(self.buffer).
1616 self.code_to_run = code
1631 self.code_to_run = code
1617 # now actually execute the code object
1632 # now actually execute the code object
1618 if self.runcode(code) == 0:
1633 if self.runcode(code) == 0:
1619 return False
1634 return False
1620 else:
1635 else:
1621 return None
1636 return None
1622
1637
1623 def runcode(self,code_obj):
1638 def runcode(self,code_obj):
1624 """Execute a code object.
1639 """Execute a code object.
1625
1640
1626 When an exception occurs, self.showtraceback() is called to display a
1641 When an exception occurs, self.showtraceback() is called to display a
1627 traceback.
1642 traceback.
1628
1643
1629 Return value: a flag indicating whether the code to be run completed
1644 Return value: a flag indicating whether the code to be run completed
1630 successfully:
1645 successfully:
1631
1646
1632 - 0: successful execution.
1647 - 0: successful execution.
1633 - 1: an error occurred.
1648 - 1: an error occurred.
1634 """
1649 """
1635
1650
1636 # Set our own excepthook in case the user code tries to call it
1651 # Set our own excepthook in case the user code tries to call it
1637 # directly, so that the IPython crash handler doesn't get triggered
1652 # directly, so that the IPython crash handler doesn't get triggered
1638 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1653 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1639
1654
1640 # we save the original sys.excepthook in the instance, in case config
1655 # we save the original sys.excepthook in the instance, in case config
1641 # code (such as magics) needs access to it.
1656 # code (such as magics) needs access to it.
1642 self.sys_excepthook = old_excepthook
1657 self.sys_excepthook = old_excepthook
1643 outflag = 1 # happens in more places, so it's easier as default
1658 outflag = 1 # happens in more places, so it's easier as default
1644 try:
1659 try:
1645 try:
1660 try:
1646 # Embedded instances require separate global/local namespaces
1661 # Embedded instances require separate global/local namespaces
1647 # so they can see both the surrounding (local) namespace and
1662 # so they can see both the surrounding (local) namespace and
1648 # the module-level globals when called inside another function.
1663 # the module-level globals when called inside another function.
1649 if self.embedded:
1664 if self.embedded:
1650 exec code_obj in self.user_global_ns, self.user_ns
1665 exec code_obj in self.user_global_ns, self.user_ns
1651 # Normal (non-embedded) instances should only have a single
1666 # Normal (non-embedded) instances should only have a single
1652 # namespace for user code execution, otherwise functions won't
1667 # namespace for user code execution, otherwise functions won't
1653 # see interactive top-level globals.
1668 # see interactive top-level globals.
1654 else:
1669 else:
1655 exec code_obj in self.user_ns
1670 exec code_obj in self.user_ns
1656 finally:
1671 finally:
1657 # Reset our crash handler in place
1672 # Reset our crash handler in place
1658 sys.excepthook = old_excepthook
1673 sys.excepthook = old_excepthook
1659 except SystemExit:
1674 except SystemExit:
1660 self.resetbuffer()
1675 self.resetbuffer()
1661 self.showtraceback()
1676 self.showtraceback()
1662 warn("Type exit or quit to exit IPython "
1677 warn("Type exit or quit to exit IPython "
1663 "(%Exit or %Quit do so unconditionally).",level=1)
1678 "(%Exit or %Quit do so unconditionally).",level=1)
1664 except self.custom_exceptions:
1679 except self.custom_exceptions:
1665 etype,value,tb = sys.exc_info()
1680 etype,value,tb = sys.exc_info()
1666 self.CustomTB(etype,value,tb)
1681 self.CustomTB(etype,value,tb)
1667 except:
1682 except:
1668 self.showtraceback()
1683 self.showtraceback()
1669 else:
1684 else:
1670 outflag = 0
1685 outflag = 0
1671 if softspace(sys.stdout, 0):
1686 if softspace(sys.stdout, 0):
1672 print
1687 print
1673 # Flush out code object which has been run (and source)
1688 # Flush out code object which has been run (and source)
1674 self.code_to_run = None
1689 self.code_to_run = None
1675 return outflag
1690 return outflag
1676
1691
1677 def push(self, line):
1692 def push(self, line):
1678 """Push a line to the interpreter.
1693 """Push a line to the interpreter.
1679
1694
1680 The line should not have a trailing newline; it may have
1695 The line should not have a trailing newline; it may have
1681 internal newlines. The line is appended to a buffer and the
1696 internal newlines. The line is appended to a buffer and the
1682 interpreter's runsource() method is called with the
1697 interpreter's runsource() method is called with the
1683 concatenated contents of the buffer as source. If this
1698 concatenated contents of the buffer as source. If this
1684 indicates that the command was executed or invalid, the buffer
1699 indicates that the command was executed or invalid, the buffer
1685 is reset; otherwise, the command is incomplete, and the buffer
1700 is reset; otherwise, the command is incomplete, and the buffer
1686 is left as it was after the line was appended. The return
1701 is left as it was after the line was appended. The return
1687 value is 1 if more input is required, 0 if the line was dealt
1702 value is 1 if more input is required, 0 if the line was dealt
1688 with in some way (this is the same as runsource()).
1703 with in some way (this is the same as runsource()).
1689 """
1704 """
1690
1705
1691 # autoindent management should be done here, and not in the
1706 # autoindent management should be done here, and not in the
1692 # interactive loop, since that one is only seen by keyboard input. We
1707 # interactive loop, since that one is only seen by keyboard input. We
1693 # need this done correctly even for code run via runlines (which uses
1708 # need this done correctly even for code run via runlines (which uses
1694 # push).
1709 # push).
1695
1710
1696 #print 'push line: <%s>' % line # dbg
1711 #print 'push line: <%s>' % line # dbg
1697 self.autoindent_update(line)
1712 self.autoindent_update(line)
1698
1713
1699 self.buffer.append(line)
1714 self.buffer.append(line)
1700 more = self.runsource('\n'.join(self.buffer), self.filename)
1715 more = self.runsource('\n'.join(self.buffer), self.filename)
1701 if not more:
1716 if not more:
1702 self.resetbuffer()
1717 self.resetbuffer()
1703 return more
1718 return more
1704
1719
1705 def resetbuffer(self):
1720 def resetbuffer(self):
1706 """Reset the input buffer."""
1721 """Reset the input buffer."""
1707 self.buffer[:] = []
1722 self.buffer[:] = []
1708
1723
1709 def raw_input(self,prompt='',continue_prompt=False):
1724 def raw_input(self,prompt='',continue_prompt=False):
1710 """Write a prompt and read a line.
1725 """Write a prompt and read a line.
1711
1726
1712 The returned line does not include the trailing newline.
1727 The returned line does not include the trailing newline.
1713 When the user enters the EOF key sequence, EOFError is raised.
1728 When the user enters the EOF key sequence, EOFError is raised.
1714
1729
1715 Optional inputs:
1730 Optional inputs:
1716
1731
1717 - prompt(''): a string to be printed to prompt the user.
1732 - prompt(''): a string to be printed to prompt the user.
1718
1733
1719 - continue_prompt(False): whether this line is the first one or a
1734 - continue_prompt(False): whether this line is the first one or a
1720 continuation in a sequence of inputs.
1735 continuation in a sequence of inputs.
1721 """
1736 """
1722
1737
1723 line = raw_input_original(prompt)
1738 line = raw_input_original(prompt)
1724 # Try to be reasonably smart about not re-indenting pasted input more
1739 # Try to be reasonably smart about not re-indenting pasted input more
1725 # than necessary. We do this by trimming out the auto-indent initial
1740 # than necessary. We do this by trimming out the auto-indent initial
1726 # spaces, if the user's actual input started itself with whitespace.
1741 # spaces, if the user's actual input started itself with whitespace.
1727 #debugp('self.buffer[-1]')
1742 #debugp('self.buffer[-1]')
1728 ## if self.autoindent:
1743 ## if self.autoindent:
1729 ## try:
1744 ## try:
1730 ## prev_line = self.buffer[-1]
1745 ## prev_line = self.buffer[-1]
1731 ## except IndexError:
1746 ## except IndexError:
1732 ## prev_line = ''
1747 ## prev_line = ''
1733 ## prev_indent = num_ini_spaces(prev_line)
1748 ## prev_indent = num_ini_spaces(prev_line)
1734 ## debugp('prev_indent')
1749 ## debugp('prev_indent')
1735 ## # Split the user's input
1750 ## # Split the user's input
1736 ## line1 = line[:self.indent_current_nsp]
1751 ## line1 = line[:self.indent_current_nsp]
1737 ## line2 = line[self.indent_current_nsp:]
1752 ## line2 = line[self.indent_current_nsp:]
1738 ## if line1.isspace() and line2 and \
1753 ## if line1.isspace() and line2 and \
1739 ## num_ini_spaces(line2)==prev_indent:
1754 ## num_ini_spaces(line2)==prev_indent:
1740 ## line = line2
1755 ## line = line2
1741 #debugp('line')
1756 #debugp('line')
1742 #debugp('line1')
1757 #debugp('line1')
1743 #debugp('line2')
1758 #debugp('line2')
1744 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1759 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1745 ## line = line2
1760 ## line = line2
1746 ## debugp('line')
1761 ## debugp('line')
1747 return self.prefilter(line,continue_prompt)
1762 return self.prefilter(line,continue_prompt)
1748
1763
1749 def split_user_input(self,line):
1764 def split_user_input(self,line):
1750 """Split user input into pre-char, function part and rest."""
1765 """Split user input into pre-char, function part and rest."""
1751
1766
1752 lsplit = self.line_split.match(line)
1767 lsplit = self.line_split.match(line)
1753 if lsplit is None: # no regexp match returns None
1768 if lsplit is None: # no regexp match returns None
1754 try:
1769 try:
1755 iFun,theRest = line.split(None,1)
1770 iFun,theRest = line.split(None,1)
1756 except ValueError:
1771 except ValueError:
1757 iFun,theRest = line,''
1772 iFun,theRest = line,''
1758 pre = re.match('^(\s*)(.*)',line).groups()[0]
1773 pre = re.match('^(\s*)(.*)',line).groups()[0]
1759 else:
1774 else:
1760 pre,iFun,theRest = lsplit.groups()
1775 pre,iFun,theRest = lsplit.groups()
1761
1776
1762 #print 'line:<%s>' % line # dbg
1777 #print 'line:<%s>' % line # dbg
1763 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1778 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1764 return pre,iFun.strip(),theRest
1779 return pre,iFun.strip(),theRest
1765
1780
1766 def _prefilter(self, line, continue_prompt):
1781 def _prefilter(self, line, continue_prompt):
1767 """Calls different preprocessors, depending on the form of line."""
1782 """Calls different preprocessors, depending on the form of line."""
1768
1783
1769 # All handlers *must* return a value, even if it's blank ('').
1784 # All handlers *must* return a value, even if it's blank ('').
1770
1785
1771 # Lines are NOT logged here. Handlers should process the line as
1786 # Lines are NOT logged here. Handlers should process the line as
1772 # needed, update the cache AND log it (so that the input cache array
1787 # needed, update the cache AND log it (so that the input cache array
1773 # stays synced).
1788 # stays synced).
1774
1789
1775 # This function is _very_ delicate, and since it's also the one which
1790 # This function is _very_ delicate, and since it's also the one which
1776 # determines IPython's response to user input, it must be as efficient
1791 # determines IPython's response to user input, it must be as efficient
1777 # as possible. For this reason it has _many_ returns in it, trying
1792 # as possible. For this reason it has _many_ returns in it, trying
1778 # always to exit as quickly as it can figure out what it needs to do.
1793 # always to exit as quickly as it can figure out what it needs to do.
1779
1794
1780 # This function is the main responsible for maintaining IPython's
1795 # This function is the main responsible for maintaining IPython's
1781 # behavior respectful of Python's semantics. So be _very_ careful if
1796 # behavior respectful of Python's semantics. So be _very_ careful if
1782 # making changes to anything here.
1797 # making changes to anything here.
1783
1798
1784 #.....................................................................
1799 #.....................................................................
1785 # Code begins
1800 # Code begins
1786
1801
1787 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1802 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1788
1803
1789 # save the line away in case we crash, so the post-mortem handler can
1804 # save the line away in case we crash, so the post-mortem handler can
1790 # record it
1805 # record it
1791 self._last_input_line = line
1806 self._last_input_line = line
1792
1807
1793 #print '***line: <%s>' % line # dbg
1808 #print '***line: <%s>' % line # dbg
1794
1809
1795 # the input history needs to track even empty lines
1810 # the input history needs to track even empty lines
1796 if not line.strip():
1811 if not line.strip():
1797 if not continue_prompt:
1812 if not continue_prompt:
1798 self.outputcache.prompt_count -= 1
1813 self.outputcache.prompt_count -= 1
1799 return self.handle_normal(line,continue_prompt)
1814 return self.handle_normal(line,continue_prompt)
1800 #return self.handle_normal('',continue_prompt)
1815 #return self.handle_normal('',continue_prompt)
1801
1816
1802 # print '***cont',continue_prompt # dbg
1817 # print '***cont',continue_prompt # dbg
1803 # special handlers are only allowed for single line statements
1818 # special handlers are only allowed for single line statements
1804 if continue_prompt and not self.rc.multi_line_specials:
1819 if continue_prompt and not self.rc.multi_line_specials:
1805 return self.handle_normal(line,continue_prompt)
1820 return self.handle_normal(line,continue_prompt)
1806
1821
1807 # For the rest, we need the structure of the input
1822 # For the rest, we need the structure of the input
1808 pre,iFun,theRest = self.split_user_input(line)
1823 pre,iFun,theRest = self.split_user_input(line)
1809 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1824 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1810
1825
1811 # First check for explicit escapes in the last/first character
1826 # First check for explicit escapes in the last/first character
1812 handler = None
1827 handler = None
1813 if line[-1] == self.ESC_HELP:
1828 if line[-1] == self.ESC_HELP:
1814 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1829 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1815 if handler is None:
1830 if handler is None:
1816 # look at the first character of iFun, NOT of line, so we skip
1831 # look at the first character of iFun, NOT of line, so we skip
1817 # leading whitespace in multiline input
1832 # leading whitespace in multiline input
1818 handler = self.esc_handlers.get(iFun[0:1])
1833 handler = self.esc_handlers.get(iFun[0:1])
1819 if handler is not None:
1834 if handler is not None:
1820 return handler(line,continue_prompt,pre,iFun,theRest)
1835 return handler(line,continue_prompt,pre,iFun,theRest)
1821 # Emacs ipython-mode tags certain input lines
1836 # Emacs ipython-mode tags certain input lines
1822 if line.endswith('# PYTHON-MODE'):
1837 if line.endswith('# PYTHON-MODE'):
1823 return self.handle_emacs(line,continue_prompt)
1838 return self.handle_emacs(line,continue_prompt)
1824
1839
1825 # Next, check if we can automatically execute this thing
1840 # Next, check if we can automatically execute this thing
1826
1841
1827 # Allow ! in multi-line statements if multi_line_specials is on:
1842 # Allow ! in multi-line statements if multi_line_specials is on:
1828 if continue_prompt and self.rc.multi_line_specials and \
1843 if continue_prompt and self.rc.multi_line_specials and \
1829 iFun.startswith(self.ESC_SHELL):
1844 iFun.startswith(self.ESC_SHELL):
1830 return self.handle_shell_escape(line,continue_prompt,
1845 return self.handle_shell_escape(line,continue_prompt,
1831 pre=pre,iFun=iFun,
1846 pre=pre,iFun=iFun,
1832 theRest=theRest)
1847 theRest=theRest)
1833
1848
1834 # Let's try to find if the input line is a magic fn
1849 # Let's try to find if the input line is a magic fn
1835 oinfo = None
1850 oinfo = None
1836 if hasattr(self,'magic_'+iFun):
1851 if hasattr(self,'magic_'+iFun):
1837 # WARNING: _ofind uses getattr(), so it can consume generators and
1852 # WARNING: _ofind uses getattr(), so it can consume generators and
1838 # cause other side effects.
1853 # cause other side effects.
1839 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1854 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1840 if oinfo['ismagic']:
1855 if oinfo['ismagic']:
1841 # Be careful not to call magics when a variable assignment is
1856 # Be careful not to call magics when a variable assignment is
1842 # being made (ls='hi', for example)
1857 # being made (ls='hi', for example)
1843 if self.rc.automagic and \
1858 if self.rc.automagic and \
1844 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1859 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1845 (self.rc.multi_line_specials or not continue_prompt):
1860 (self.rc.multi_line_specials or not continue_prompt):
1846 return self.handle_magic(line,continue_prompt,
1861 return self.handle_magic(line,continue_prompt,
1847 pre,iFun,theRest)
1862 pre,iFun,theRest)
1848 else:
1863 else:
1849 return self.handle_normal(line,continue_prompt)
1864 return self.handle_normal(line,continue_prompt)
1850
1865
1851 # If the rest of the line begins with an (in)equality, assginment or
1866 # If the rest of the line begins with an (in)equality, assginment or
1852 # function call, we should not call _ofind but simply execute it.
1867 # function call, we should not call _ofind but simply execute it.
1853 # This avoids spurious geattr() accesses on objects upon assignment.
1868 # This avoids spurious geattr() accesses on objects upon assignment.
1854 #
1869 #
1855 # It also allows users to assign to either alias or magic names true
1870 # It also allows users to assign to either alias or magic names true
1856 # python variables (the magic/alias systems always take second seat to
1871 # python variables (the magic/alias systems always take second seat to
1857 # true python code).
1872 # true python code).
1858 if theRest and theRest[0] in '!=()':
1873 if theRest and theRest[0] in '!=()':
1859 return self.handle_normal(line,continue_prompt)
1874 return self.handle_normal(line,continue_prompt)
1860
1875
1861 if oinfo is None:
1876 if oinfo is None:
1862 # let's try to ensure that _oinfo is ONLY called when autocall is
1877 # let's try to ensure that _oinfo is ONLY called when autocall is
1863 # on. Since it has inevitable potential side effects, at least
1878 # on. Since it has inevitable potential side effects, at least
1864 # having autocall off should be a guarantee to the user that no
1879 # having autocall off should be a guarantee to the user that no
1865 # weird things will happen.
1880 # weird things will happen.
1866
1881
1867 if self.rc.autocall:
1882 if self.rc.autocall:
1868 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1883 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1869 else:
1884 else:
1870 # in this case, all that's left is either an alias or
1885 # in this case, all that's left is either an alias or
1871 # processing the line normally.
1886 # processing the line normally.
1872 if iFun in self.alias_table:
1887 if iFun in self.alias_table:
1873 return self.handle_alias(line,continue_prompt,
1888 return self.handle_alias(line,continue_prompt,
1874 pre,iFun,theRest)
1889 pre,iFun,theRest)
1875
1890
1876 else:
1891 else:
1877 return self.handle_normal(line,continue_prompt)
1892 return self.handle_normal(line,continue_prompt)
1878
1893
1879 if not oinfo['found']:
1894 if not oinfo['found']:
1880 return self.handle_normal(line,continue_prompt)
1895 return self.handle_normal(line,continue_prompt)
1881 else:
1896 else:
1882 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1897 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1883 if oinfo['isalias']:
1898 if oinfo['isalias']:
1884 return self.handle_alias(line,continue_prompt,
1899 return self.handle_alias(line,continue_prompt,
1885 pre,iFun,theRest)
1900 pre,iFun,theRest)
1886
1901
1887 if self.rc.autocall and \
1902 if self.rc.autocall and \
1888 not self.re_exclude_auto.match(theRest) and \
1903 not self.re_exclude_auto.match(theRest) and \
1889 self.re_fun_name.match(iFun) and \
1904 self.re_fun_name.match(iFun) and \
1890 callable(oinfo['obj']) :
1905 callable(oinfo['obj']) :
1891 #print 'going auto' # dbg
1906 #print 'going auto' # dbg
1892 return self.handle_auto(line,continue_prompt,
1907 return self.handle_auto(line,continue_prompt,
1893 pre,iFun,theRest,oinfo['obj'])
1908 pre,iFun,theRest,oinfo['obj'])
1894 else:
1909 else:
1895 #print 'was callable?', callable(oinfo['obj']) # dbg
1910 #print 'was callable?', callable(oinfo['obj']) # dbg
1896 return self.handle_normal(line,continue_prompt)
1911 return self.handle_normal(line,continue_prompt)
1897
1912
1898 # If we get here, we have a normal Python line. Log and return.
1913 # If we get here, we have a normal Python line. Log and return.
1899 return self.handle_normal(line,continue_prompt)
1914 return self.handle_normal(line,continue_prompt)
1900
1915
1901 def _prefilter_dumb(self, line, continue_prompt):
1916 def _prefilter_dumb(self, line, continue_prompt):
1902 """simple prefilter function, for debugging"""
1917 """simple prefilter function, for debugging"""
1903 return self.handle_normal(line,continue_prompt)
1918 return self.handle_normal(line,continue_prompt)
1904
1919
1905 # Set the default prefilter() function (this can be user-overridden)
1920 # Set the default prefilter() function (this can be user-overridden)
1906 prefilter = _prefilter
1921 prefilter = _prefilter
1907
1922
1908 def handle_normal(self,line,continue_prompt=None,
1923 def handle_normal(self,line,continue_prompt=None,
1909 pre=None,iFun=None,theRest=None):
1924 pre=None,iFun=None,theRest=None):
1910 """Handle normal input lines. Use as a template for handlers."""
1925 """Handle normal input lines. Use as a template for handlers."""
1911
1926
1912 # With autoindent on, we need some way to exit the input loop, and I
1927 # With autoindent on, we need some way to exit the input loop, and I
1913 # don't want to force the user to have to backspace all the way to
1928 # don't want to force the user to have to backspace all the way to
1914 # clear the line. The rule will be in this case, that either two
1929 # clear the line. The rule will be in this case, that either two
1915 # lines of pure whitespace in a row, or a line of pure whitespace but
1930 # lines of pure whitespace in a row, or a line of pure whitespace but
1916 # of a size different to the indent level, will exit the input loop.
1931 # of a size different to the indent level, will exit the input loop.
1917
1932
1918 if (continue_prompt and self.autoindent and line.isspace() and
1933 if (continue_prompt and self.autoindent and line.isspace() and
1919 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1934 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1920 line = ''
1935 line = ''
1921
1936
1922 self.log(line,continue_prompt)
1937 self.log(line,continue_prompt)
1923 return line
1938 return line
1924
1939
1925 def handle_alias(self,line,continue_prompt=None,
1940 def handle_alias(self,line,continue_prompt=None,
1926 pre=None,iFun=None,theRest=None):
1941 pre=None,iFun=None,theRest=None):
1927 """Handle alias input lines. """
1942 """Handle alias input lines. """
1928
1943
1929 # pre is needed, because it carries the leading whitespace. Otherwise
1944 # pre is needed, because it carries the leading whitespace. Otherwise
1930 # aliases won't work in indented sections.
1945 # aliases won't work in indented sections.
1931 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1946 line_out = '%sipalias(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1932 self.log(line_out,continue_prompt)
1947 self.log(line_out,continue_prompt)
1933 return line_out
1948 return line_out
1934
1949
1935 def handle_shell_escape(self, line, continue_prompt=None,
1950 def handle_shell_escape(self, line, continue_prompt=None,
1936 pre=None,iFun=None,theRest=None):
1951 pre=None,iFun=None,theRest=None):
1937 """Execute the line in a shell, empty return value"""
1952 """Execute the line in a shell, empty return value"""
1938
1953
1939 #print 'line in :', `line` # dbg
1954 #print 'line in :', `line` # dbg
1940 # Example of a special handler. Others follow a similar pattern.
1955 # Example of a special handler. Others follow a similar pattern.
1941 if line.lstrip().startswith('!!'):
1956 if line.lstrip().startswith('!!'):
1942 # rewrite iFun/theRest to properly hold the call to %sx and
1957 # rewrite iFun/theRest to properly hold the call to %sx and
1943 # the actual command to be executed, so handle_magic can work
1958 # the actual command to be executed, so handle_magic can work
1944 # correctly
1959 # correctly
1945 theRest = '%s %s' % (iFun[2:],theRest)
1960 theRest = '%s %s' % (iFun[2:],theRest)
1946 iFun = 'sx'
1961 iFun = 'sx'
1947 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1962 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
1948 line.lstrip()[2:]),
1963 line.lstrip()[2:]),
1949 continue_prompt,pre,iFun,theRest)
1964 continue_prompt,pre,iFun,theRest)
1950 else:
1965 else:
1951 cmd=line.lstrip().lstrip('!')
1966 cmd=line.lstrip().lstrip('!')
1952 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1967 line_out = '%sipsystem(%s)' % (pre,make_quoted_expr(cmd))
1953 # update cache/log and return
1968 # update cache/log and return
1954 self.log(line_out,continue_prompt)
1969 self.log(line_out,continue_prompt)
1955 return line_out
1970 return line_out
1956
1971
1957 def handle_magic(self, line, continue_prompt=None,
1972 def handle_magic(self, line, continue_prompt=None,
1958 pre=None,iFun=None,theRest=None):
1973 pre=None,iFun=None,theRest=None):
1959 """Execute magic functions."""
1974 """Execute magic functions."""
1960
1975
1961
1976
1962 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1977 cmd = '%sipmagic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
1963 self.log(cmd,continue_prompt)
1978 self.log(cmd,continue_prompt)
1964 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1979 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1965 return cmd
1980 return cmd
1966
1981
1967 def handle_auto(self, line, continue_prompt=None,
1982 def handle_auto(self, line, continue_prompt=None,
1968 pre=None,iFun=None,theRest=None,obj=None):
1983 pre=None,iFun=None,theRest=None,obj=None):
1969 """Hande lines which can be auto-executed, quoting if requested."""
1984 """Hande lines which can be auto-executed, quoting if requested."""
1970
1985
1971 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1986 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1972
1987
1973 # This should only be active for single-line input!
1988 # This should only be active for single-line input!
1974 if continue_prompt:
1989 if continue_prompt:
1975 self.log(line,continue_prompt)
1990 self.log(line,continue_prompt)
1976 return line
1991 return line
1977
1992
1978 auto_rewrite = True
1993 auto_rewrite = True
1979 if pre == self.ESC_QUOTE:
1994 if pre == self.ESC_QUOTE:
1980 # Auto-quote splitting on whitespace
1995 # Auto-quote splitting on whitespace
1981 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1996 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1982 elif pre == self.ESC_QUOTE2:
1997 elif pre == self.ESC_QUOTE2:
1983 # Auto-quote whole string
1998 # Auto-quote whole string
1984 newcmd = '%s("%s")' % (iFun,theRest)
1999 newcmd = '%s("%s")' % (iFun,theRest)
1985 else:
2000 else:
1986 # Auto-paren.
2001 # Auto-paren.
1987 # We only apply it to argument-less calls if the autocall
2002 # We only apply it to argument-less calls if the autocall
1988 # parameter is set to 2. We only need to check that autocall is <
2003 # parameter is set to 2. We only need to check that autocall is <
1989 # 2, since this function isn't called unless it's at least 1.
2004 # 2, since this function isn't called unless it's at least 1.
1990 if not theRest and (self.rc.autocall < 2):
2005 if not theRest and (self.rc.autocall < 2):
1991 newcmd = '%s %s' % (iFun,theRest)
2006 newcmd = '%s %s' % (iFun,theRest)
1992 auto_rewrite = False
2007 auto_rewrite = False
1993 else:
2008 else:
1994 if theRest.startswith('['):
2009 if theRest.startswith('['):
1995 if hasattr(obj,'__getitem__'):
2010 if hasattr(obj,'__getitem__'):
1996 # Don't autocall in this case: item access for an object
2011 # Don't autocall in this case: item access for an object
1997 # which is BOTH callable and implements __getitem__.
2012 # which is BOTH callable and implements __getitem__.
1998 newcmd = '%s %s' % (iFun,theRest)
2013 newcmd = '%s %s' % (iFun,theRest)
1999 auto_rewrite = False
2014 auto_rewrite = False
2000 else:
2015 else:
2001 # if the object doesn't support [] access, go ahead and
2016 # if the object doesn't support [] access, go ahead and
2002 # autocall
2017 # autocall
2003 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2018 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2004 elif theRest.endswith(';'):
2019 elif theRest.endswith(';'):
2005 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2020 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2006 else:
2021 else:
2007 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2022 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2008
2023
2009 if auto_rewrite:
2024 if auto_rewrite:
2010 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2025 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2011 # log what is now valid Python, not the actual user input (without the
2026 # log what is now valid Python, not the actual user input (without the
2012 # final newline)
2027 # final newline)
2013 self.log(newcmd,continue_prompt)
2028 self.log(newcmd,continue_prompt)
2014 return newcmd
2029 return newcmd
2015
2030
2016 def handle_help(self, line, continue_prompt=None,
2031 def handle_help(self, line, continue_prompt=None,
2017 pre=None,iFun=None,theRest=None):
2032 pre=None,iFun=None,theRest=None):
2018 """Try to get some help for the object.
2033 """Try to get some help for the object.
2019
2034
2020 obj? or ?obj -> basic information.
2035 obj? or ?obj -> basic information.
2021 obj?? or ??obj -> more details.
2036 obj?? or ??obj -> more details.
2022 """
2037 """
2023
2038
2024 # We need to make sure that we don't process lines which would be
2039 # We need to make sure that we don't process lines which would be
2025 # otherwise valid python, such as "x=1 # what?"
2040 # otherwise valid python, such as "x=1 # what?"
2026 try:
2041 try:
2027 codeop.compile_command(line)
2042 codeop.compile_command(line)
2028 except SyntaxError:
2043 except SyntaxError:
2029 # We should only handle as help stuff which is NOT valid syntax
2044 # We should only handle as help stuff which is NOT valid syntax
2030 if line[0]==self.ESC_HELP:
2045 if line[0]==self.ESC_HELP:
2031 line = line[1:]
2046 line = line[1:]
2032 elif line[-1]==self.ESC_HELP:
2047 elif line[-1]==self.ESC_HELP:
2033 line = line[:-1]
2048 line = line[:-1]
2034 self.log('#?'+line)
2049 self.log('#?'+line)
2035 if line:
2050 if line:
2036 self.magic_pinfo(line)
2051 self.magic_pinfo(line)
2037 else:
2052 else:
2038 page(self.usage,screen_lines=self.rc.screen_length)
2053 page(self.usage,screen_lines=self.rc.screen_length)
2039 return '' # Empty string is needed here!
2054 return '' # Empty string is needed here!
2040 except:
2055 except:
2041 # Pass any other exceptions through to the normal handler
2056 # Pass any other exceptions through to the normal handler
2042 return self.handle_normal(line,continue_prompt)
2057 return self.handle_normal(line,continue_prompt)
2043 else:
2058 else:
2044 # If the code compiles ok, we should handle it normally
2059 # If the code compiles ok, we should handle it normally
2045 return self.handle_normal(line,continue_prompt)
2060 return self.handle_normal(line,continue_prompt)
2046
2061
2047 def handle_emacs(self,line,continue_prompt=None,
2062 def handle_emacs(self,line,continue_prompt=None,
2048 pre=None,iFun=None,theRest=None):
2063 pre=None,iFun=None,theRest=None):
2049 """Handle input lines marked by python-mode."""
2064 """Handle input lines marked by python-mode."""
2050
2065
2051 # Currently, nothing is done. Later more functionality can be added
2066 # Currently, nothing is done. Later more functionality can be added
2052 # here if needed.
2067 # here if needed.
2053
2068
2054 # The input cache shouldn't be updated
2069 # The input cache shouldn't be updated
2055
2070
2056 return line
2071 return line
2057
2072
2058 def mktempfile(self,data=None):
2073 def mktempfile(self,data=None):
2059 """Make a new tempfile and return its filename.
2074 """Make a new tempfile and return its filename.
2060
2075
2061 This makes a call to tempfile.mktemp, but it registers the created
2076 This makes a call to tempfile.mktemp, but it registers the created
2062 filename internally so ipython cleans it up at exit time.
2077 filename internally so ipython cleans it up at exit time.
2063
2078
2064 Optional inputs:
2079 Optional inputs:
2065
2080
2066 - data(None): if data is given, it gets written out to the temp file
2081 - data(None): if data is given, it gets written out to the temp file
2067 immediately, and the file is closed again."""
2082 immediately, and the file is closed again."""
2068
2083
2069 filename = tempfile.mktemp('.py','ipython_edit_')
2084 filename = tempfile.mktemp('.py','ipython_edit_')
2070 self.tempfiles.append(filename)
2085 self.tempfiles.append(filename)
2071
2086
2072 if data:
2087 if data:
2073 tmp_file = open(filename,'w')
2088 tmp_file = open(filename,'w')
2074 tmp_file.write(data)
2089 tmp_file.write(data)
2075 tmp_file.close()
2090 tmp_file.close()
2076 return filename
2091 return filename
2077
2092
2078 def write(self,data):
2093 def write(self,data):
2079 """Write a string to the default output"""
2094 """Write a string to the default output"""
2080 Term.cout.write(data)
2095 Term.cout.write(data)
2081
2096
2082 def write_err(self,data):
2097 def write_err(self,data):
2083 """Write a string to the default error output"""
2098 """Write a string to the default error output"""
2084 Term.cerr.write(data)
2099 Term.cerr.write(data)
2085
2100
2086 def exit(self):
2101 def exit(self):
2087 """Handle interactive exit.
2102 """Handle interactive exit.
2088
2103
2089 This method sets the exit_now attribute."""
2104 This method sets the exit_now attribute."""
2090
2105
2091 if self.rc.confirm_exit:
2106 if self.rc.confirm_exit:
2092 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2107 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2093 self.exit_now = True
2108 self.exit_now = True
2094 else:
2109 else:
2095 self.exit_now = True
2110 self.exit_now = True
2096 return self.exit_now
2111 return self.exit_now
2097
2112
2098 def safe_execfile(self,fname,*where,**kw):
2113 def safe_execfile(self,fname,*where,**kw):
2099 fname = os.path.expanduser(fname)
2114 fname = os.path.expanduser(fname)
2100
2115
2101 # find things also in current directory
2116 # find things also in current directory
2102 dname = os.path.dirname(fname)
2117 dname = os.path.dirname(fname)
2103 if not sys.path.count(dname):
2118 if not sys.path.count(dname):
2104 sys.path.append(dname)
2119 sys.path.append(dname)
2105
2120
2106 try:
2121 try:
2107 xfile = open(fname)
2122 xfile = open(fname)
2108 except:
2123 except:
2109 print >> Term.cerr, \
2124 print >> Term.cerr, \
2110 'Could not open file <%s> for safe execution.' % fname
2125 'Could not open file <%s> for safe execution.' % fname
2111 return None
2126 return None
2112
2127
2113 kw.setdefault('islog',0)
2128 kw.setdefault('islog',0)
2114 kw.setdefault('quiet',1)
2129 kw.setdefault('quiet',1)
2115 kw.setdefault('exit_ignore',0)
2130 kw.setdefault('exit_ignore',0)
2116 first = xfile.readline()
2131 first = xfile.readline()
2117 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2132 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2118 xfile.close()
2133 xfile.close()
2119 # line by line execution
2134 # line by line execution
2120 if first.startswith(loghead) or kw['islog']:
2135 if first.startswith(loghead) or kw['islog']:
2121 print 'Loading log file <%s> one line at a time...' % fname
2136 print 'Loading log file <%s> one line at a time...' % fname
2122 if kw['quiet']:
2137 if kw['quiet']:
2123 stdout_save = sys.stdout
2138 stdout_save = sys.stdout
2124 sys.stdout = StringIO.StringIO()
2139 sys.stdout = StringIO.StringIO()
2125 try:
2140 try:
2126 globs,locs = where[0:2]
2141 globs,locs = where[0:2]
2127 except:
2142 except:
2128 try:
2143 try:
2129 globs = locs = where[0]
2144 globs = locs = where[0]
2130 except:
2145 except:
2131 globs = locs = globals()
2146 globs = locs = globals()
2132 badblocks = []
2147 badblocks = []
2133
2148
2134 # we also need to identify indented blocks of code when replaying
2149 # we also need to identify indented blocks of code when replaying
2135 # logs and put them together before passing them to an exec
2150 # logs and put them together before passing them to an exec
2136 # statement. This takes a bit of regexp and look-ahead work in the
2151 # statement. This takes a bit of regexp and look-ahead work in the
2137 # file. It's easiest if we swallow the whole thing in memory
2152 # file. It's easiest if we swallow the whole thing in memory
2138 # first, and manually walk through the lines list moving the
2153 # first, and manually walk through the lines list moving the
2139 # counter ourselves.
2154 # counter ourselves.
2140 indent_re = re.compile('\s+\S')
2155 indent_re = re.compile('\s+\S')
2141 xfile = open(fname)
2156 xfile = open(fname)
2142 filelines = xfile.readlines()
2157 filelines = xfile.readlines()
2143 xfile.close()
2158 xfile.close()
2144 nlines = len(filelines)
2159 nlines = len(filelines)
2145 lnum = 0
2160 lnum = 0
2146 while lnum < nlines:
2161 while lnum < nlines:
2147 line = filelines[lnum]
2162 line = filelines[lnum]
2148 lnum += 1
2163 lnum += 1
2149 # don't re-insert logger status info into cache
2164 # don't re-insert logger status info into cache
2150 if line.startswith('#log#'):
2165 if line.startswith('#log#'):
2151 continue
2166 continue
2152 else:
2167 else:
2153 # build a block of code (maybe a single line) for execution
2168 # build a block of code (maybe a single line) for execution
2154 block = line
2169 block = line
2155 try:
2170 try:
2156 next = filelines[lnum] # lnum has already incremented
2171 next = filelines[lnum] # lnum has already incremented
2157 except:
2172 except:
2158 next = None
2173 next = None
2159 while next and indent_re.match(next):
2174 while next and indent_re.match(next):
2160 block += next
2175 block += next
2161 lnum += 1
2176 lnum += 1
2162 try:
2177 try:
2163 next = filelines[lnum]
2178 next = filelines[lnum]
2164 except:
2179 except:
2165 next = None
2180 next = None
2166 # now execute the block of one or more lines
2181 # now execute the block of one or more lines
2167 try:
2182 try:
2168 exec block in globs,locs
2183 exec block in globs,locs
2169 except SystemExit:
2184 except SystemExit:
2170 pass
2185 pass
2171 except:
2186 except:
2172 badblocks.append(block.rstrip())
2187 badblocks.append(block.rstrip())
2173 if kw['quiet']: # restore stdout
2188 if kw['quiet']: # restore stdout
2174 sys.stdout.close()
2189 sys.stdout.close()
2175 sys.stdout = stdout_save
2190 sys.stdout = stdout_save
2176 print 'Finished replaying log file <%s>' % fname
2191 print 'Finished replaying log file <%s>' % fname
2177 if badblocks:
2192 if badblocks:
2178 print >> sys.stderr, ('\nThe following lines/blocks in file '
2193 print >> sys.stderr, ('\nThe following lines/blocks in file '
2179 '<%s> reported errors:' % fname)
2194 '<%s> reported errors:' % fname)
2180
2195
2181 for badline in badblocks:
2196 for badline in badblocks:
2182 print >> sys.stderr, badline
2197 print >> sys.stderr, badline
2183 else: # regular file execution
2198 else: # regular file execution
2184 try:
2199 try:
2185 execfile(fname,*where)
2200 execfile(fname,*where)
2186 except SyntaxError:
2201 except SyntaxError:
2187 etype,evalue = sys.exc_info()[:2]
2202 etype,evalue = sys.exc_info()[:2]
2188 self.SyntaxTB(etype,evalue,[])
2203 self.SyntaxTB(etype,evalue,[])
2189 warn('Failure executing file: <%s>' % fname)
2204 warn('Failure executing file: <%s>' % fname)
2190 except SystemExit,status:
2205 except SystemExit,status:
2191 if not kw['exit_ignore']:
2206 if not kw['exit_ignore']:
2192 self.InteractiveTB()
2207 self.InteractiveTB()
2193 warn('Failure executing file: <%s>' % fname)
2208 warn('Failure executing file: <%s>' % fname)
2194 except:
2209 except:
2195 self.InteractiveTB()
2210 self.InteractiveTB()
2196 warn('Failure executing file: <%s>' % fname)
2211 warn('Failure executing file: <%s>' % fname)
2197
2212
2198 #************************* end of file <iplib.py> *****************************
2213 #************************* end of file <iplib.py> *****************************
@@ -1,4912 +1,4918 b''
1 2006-01-14 Ville Vainio <vivainio@gmail.com>
1 2006-01-14 Ville Vainio <vivainio@gmail.com>
2
2
3 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
3 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
4 ipapi decorators for python 2.4 users, options() provides access to rc
4 ipapi decorators for python 2.4 users, options() provides access to rc
5 data.
5 data.
6
6
7 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
7 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
8 as path separators (even on Linux ;-). Space character after
8 as path separators (even on Linux ;-). Space character after
9 backslash (as yielded by tab completer) is still space;
9 backslash (as yielded by tab completer) is still space;
10 "%cd long\ name" works as expected.
10 "%cd long\ name" works as expected.
11
11
12 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
13 as "chain of command", with priority. API stays the same,
14 TryNext exception raised by a hook function signals that
15 current hook failed and next hook should try handling it, as
16 suggested by Walter DΓΆrwald <walter@livinglogic.de>.
17
12
18
13 2006-01-13 Ville Vainio <vivainio@gmail.com>
19 2006-01-13 Ville Vainio <vivainio@gmail.com>
14
20
15 * IPython/platutils*.py: platform specific utility functions,
21 * IPython/platutils*.py: platform specific utility functions,
16 so far only set_term_title is implemented (change terminal
22 so far only set_term_title is implemented (change terminal
17 label in windowing systems). %cd now changes the title to
23 label in windowing systems). %cd now changes the title to
18 current dir.
24 current dir.
19
25
20 * IPython/Release.py: Added myself to "authors" list,
26 * IPython/Release.py: Added myself to "authors" list,
21 had to create new files.
27 had to create new files.
22
28
23 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
29 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
24 shell escape; not a known bug but had potential to be one in the
30 shell escape; not a known bug but had potential to be one in the
25 future.
31 future.
26
32
27 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
33 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
28 extension API for IPython! See the module for usage example. Fix
34 extension API for IPython! See the module for usage example. Fix
29 OInspect for docstring-less magic functions.
35 OInspect for docstring-less magic functions.
30
36
31
37
32 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
38 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
33
39
34 * IPython/iplib.py (raw_input): temporarily deactivate all
40 * IPython/iplib.py (raw_input): temporarily deactivate all
35 attempts at allowing pasting of code with autoindent on. It
41 attempts at allowing pasting of code with autoindent on. It
36 introduced bugs (reported by Prabhu) and I can't seem to find a
42 introduced bugs (reported by Prabhu) and I can't seem to find a
37 robust combination which works in all cases. Will have to revisit
43 robust combination which works in all cases. Will have to revisit
38 later.
44 later.
39
45
40 * IPython/genutils.py: remove isspace() function. We've dropped
46 * IPython/genutils.py: remove isspace() function. We've dropped
41 2.2 compatibility, so it's OK to use the string method.
47 2.2 compatibility, so it's OK to use the string method.
42
48
43 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
49 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
44
50
45 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
51 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
46 matching what NOT to autocall on, to include all python binary
52 matching what NOT to autocall on, to include all python binary
47 operators (including things like 'and', 'or', 'is' and 'in').
53 operators (including things like 'and', 'or', 'is' and 'in').
48 Prompted by a bug report on 'foo & bar', but I realized we had
54 Prompted by a bug report on 'foo & bar', but I realized we had
49 many more potential bug cases with other operators. The regexp is
55 many more potential bug cases with other operators. The regexp is
50 self.re_exclude_auto, it's fairly commented.
56 self.re_exclude_auto, it's fairly commented.
51
57
52 2006-01-12 Ville Vainio <vivainio@gmail.com>
58 2006-01-12 Ville Vainio <vivainio@gmail.com>
53
59
54 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
60 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
55 Prettified and hardened string/backslash quoting with ipsystem(),
61 Prettified and hardened string/backslash quoting with ipsystem(),
56 ipalias() and ipmagic(). Now even \ characters are passed to
62 ipalias() and ipmagic(). Now even \ characters are passed to
57 %magics, !shell escapes and aliases exactly as they are in the
63 %magics, !shell escapes and aliases exactly as they are in the
58 ipython command line. Should improve backslash experience,
64 ipython command line. Should improve backslash experience,
59 particularly in Windows (path delimiter for some commands that
65 particularly in Windows (path delimiter for some commands that
60 won't understand '/'), but Unix benefits as well (regexps). %cd
66 won't understand '/'), but Unix benefits as well (regexps). %cd
61 magic still doesn't support backslash path delimiters, though. Also
67 magic still doesn't support backslash path delimiters, though. Also
62 deleted all pretense of supporting multiline command strings in
68 deleted all pretense of supporting multiline command strings in
63 !system or %magic commands. Thanks to Jerry McRae for suggestions.
69 !system or %magic commands. Thanks to Jerry McRae for suggestions.
64
70
65 * doc/build_doc_instructions.txt added. Documentation on how to
71 * doc/build_doc_instructions.txt added. Documentation on how to
66 use doc/update_manual.py, added yesterday. Both files contributed
72 use doc/update_manual.py, added yesterday. Both files contributed
67 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
73 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
68 doc/*.sh for deprecation at a later date.
74 doc/*.sh for deprecation at a later date.
69
75
70 * /ipython.py Added ipython.py to root directory for
76 * /ipython.py Added ipython.py to root directory for
71 zero-installation (tar xzvf ipython.tgz; cd ipython; python
77 zero-installation (tar xzvf ipython.tgz; cd ipython; python
72 ipython.py) and development convenience (no need to kee doing
78 ipython.py) and development convenience (no need to kee doing
73 "setup.py install" between changes).
79 "setup.py install" between changes).
74
80
75 * Made ! and !! shell escapes work (again) in multiline expressions:
81 * Made ! and !! shell escapes work (again) in multiline expressions:
76 if 1:
82 if 1:
77 !ls
83 !ls
78 !!ls
84 !!ls
79
85
80 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
86 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
81
87
82 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
88 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
83 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
89 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
84 module in case-insensitive installation. Was causing crashes
90 module in case-insensitive installation. Was causing crashes
85 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
91 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
86
92
87 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
93 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
88 <marienz-AT-gentoo.org>, closes
94 <marienz-AT-gentoo.org>, closes
89 http://www.scipy.net/roundup/ipython/issue51.
95 http://www.scipy.net/roundup/ipython/issue51.
90
96
91 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
97 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
92
98
93 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
99 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the
94 problem of excessive CPU usage under *nix and keyboard lag under
100 problem of excessive CPU usage under *nix and keyboard lag under
95 win32.
101 win32.
96
102
97 2006-01-10 *** Released version 0.7.0
103 2006-01-10 *** Released version 0.7.0
98
104
99 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
105 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
100
106
101 * IPython/Release.py (revision): tag version number to 0.7.0,
107 * IPython/Release.py (revision): tag version number to 0.7.0,
102 ready for release.
108 ready for release.
103
109
104 * IPython/Magic.py (magic_edit): Add print statement to %edit so
110 * IPython/Magic.py (magic_edit): Add print statement to %edit so
105 it informs the user of the name of the temp. file used. This can
111 it informs the user of the name of the temp. file used. This can
106 help if you decide later to reuse that same file, so you know
112 help if you decide later to reuse that same file, so you know
107 where to copy the info from.
113 where to copy the info from.
108
114
109 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
115 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
110
116
111 * setup_bdist_egg.py: little script to build an egg. Added
117 * setup_bdist_egg.py: little script to build an egg. Added
112 support in the release tools as well.
118 support in the release tools as well.
113
119
114 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
120 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
115
121
116 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
122 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
117 version selection (new -wxversion command line and ipythonrc
123 version selection (new -wxversion command line and ipythonrc
118 parameter). Patch contributed by Arnd Baecker
124 parameter). Patch contributed by Arnd Baecker
119 <arnd.baecker-AT-web.de>.
125 <arnd.baecker-AT-web.de>.
120
126
121 * IPython/iplib.py (embed_mainloop): fix tab-completion in
127 * IPython/iplib.py (embed_mainloop): fix tab-completion in
122 embedded instances, for variables defined at the interactive
128 embedded instances, for variables defined at the interactive
123 prompt of the embedded ipython. Reported by Arnd.
129 prompt of the embedded ipython. Reported by Arnd.
124
130
125 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
131 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
126 it can be used as a (stateful) toggle, or with a direct parameter.
132 it can be used as a (stateful) toggle, or with a direct parameter.
127
133
128 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
134 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
129 could be triggered in certain cases and cause the traceback
135 could be triggered in certain cases and cause the traceback
130 printer not to work.
136 printer not to work.
131
137
132 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
138 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
133
139
134 * IPython/iplib.py (_should_recompile): Small fix, closes
140 * IPython/iplib.py (_should_recompile): Small fix, closes
135 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
141 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
136
142
137 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
143 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
138
144
139 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
145 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
140 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
146 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
141 Moad for help with tracking it down.
147 Moad for help with tracking it down.
142
148
143 * IPython/iplib.py (handle_auto): fix autocall handling for
149 * IPython/iplib.py (handle_auto): fix autocall handling for
144 objects which support BOTH __getitem__ and __call__ (so that f [x]
150 objects which support BOTH __getitem__ and __call__ (so that f [x]
145 is left alone, instead of becoming f([x]) automatically).
151 is left alone, instead of becoming f([x]) automatically).
146
152
147 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
153 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
148 Ville's patch.
154 Ville's patch.
149
155
150 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
156 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
151
157
152 * IPython/iplib.py (handle_auto): changed autocall semantics to
158 * IPython/iplib.py (handle_auto): changed autocall semantics to
153 include 'smart' mode, where the autocall transformation is NOT
159 include 'smart' mode, where the autocall transformation is NOT
154 applied if there are no arguments on the line. This allows you to
160 applied if there are no arguments on the line. This allows you to
155 just type 'foo' if foo is a callable to see its internal form,
161 just type 'foo' if foo is a callable to see its internal form,
156 instead of having it called with no arguments (typically a
162 instead of having it called with no arguments (typically a
157 mistake). The old 'full' autocall still exists: for that, you
163 mistake). The old 'full' autocall still exists: for that, you
158 need to set the 'autocall' parameter to 2 in your ipythonrc file.
164 need to set the 'autocall' parameter to 2 in your ipythonrc file.
159
165
160 * IPython/completer.py (Completer.attr_matches): add
166 * IPython/completer.py (Completer.attr_matches): add
161 tab-completion support for Enthoughts' traits. After a report by
167 tab-completion support for Enthoughts' traits. After a report by
162 Arnd and a patch by Prabhu.
168 Arnd and a patch by Prabhu.
163
169
164 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
170 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
165
171
166 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
172 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
167 Schmolck's patch to fix inspect.getinnerframes().
173 Schmolck's patch to fix inspect.getinnerframes().
168
174
169 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
175 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
170 for embedded instances, regarding handling of namespaces and items
176 for embedded instances, regarding handling of namespaces and items
171 added to the __builtin__ one. Multiple embedded instances and
177 added to the __builtin__ one. Multiple embedded instances and
172 recursive embeddings should work better now (though I'm not sure
178 recursive embeddings should work better now (though I'm not sure
173 I've got all the corner cases fixed, that code is a bit of a brain
179 I've got all the corner cases fixed, that code is a bit of a brain
174 twister).
180 twister).
175
181
176 * IPython/Magic.py (magic_edit): added support to edit in-memory
182 * IPython/Magic.py (magic_edit): added support to edit in-memory
177 macros (automatically creates the necessary temp files). %edit
183 macros (automatically creates the necessary temp files). %edit
178 also doesn't return the file contents anymore, it's just noise.
184 also doesn't return the file contents anymore, it's just noise.
179
185
180 * IPython/completer.py (Completer.attr_matches): revert change to
186 * IPython/completer.py (Completer.attr_matches): revert change to
181 complete only on attributes listed in __all__. I realized it
187 complete only on attributes listed in __all__. I realized it
182 cripples the tab-completion system as a tool for exploring the
188 cripples the tab-completion system as a tool for exploring the
183 internals of unknown libraries (it renders any non-__all__
189 internals of unknown libraries (it renders any non-__all__
184 attribute off-limits). I got bit by this when trying to see
190 attribute off-limits). I got bit by this when trying to see
185 something inside the dis module.
191 something inside the dis module.
186
192
187 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
193 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
188
194
189 * IPython/iplib.py (InteractiveShell.__init__): add .meta
195 * IPython/iplib.py (InteractiveShell.__init__): add .meta
190 namespace for users and extension writers to hold data in. This
196 namespace for users and extension writers to hold data in. This
191 follows the discussion in
197 follows the discussion in
192 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
198 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
193
199
194 * IPython/completer.py (IPCompleter.complete): small patch to help
200 * IPython/completer.py (IPCompleter.complete): small patch to help
195 tab-completion under Emacs, after a suggestion by John Barnard
201 tab-completion under Emacs, after a suggestion by John Barnard
196 <barnarj-AT-ccf.org>.
202 <barnarj-AT-ccf.org>.
197
203
198 * IPython/Magic.py (Magic.extract_input_slices): added support for
204 * IPython/Magic.py (Magic.extract_input_slices): added support for
199 the slice notation in magics to use N-M to represent numbers N...M
205 the slice notation in magics to use N-M to represent numbers N...M
200 (closed endpoints). This is used by %macro and %save.
206 (closed endpoints). This is used by %macro and %save.
201
207
202 * IPython/completer.py (Completer.attr_matches): for modules which
208 * IPython/completer.py (Completer.attr_matches): for modules which
203 define __all__, complete only on those. After a patch by Jeffrey
209 define __all__, complete only on those. After a patch by Jeffrey
204 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
210 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
205 speed up this routine.
211 speed up this routine.
206
212
207 * IPython/Logger.py (Logger.log): fix a history handling bug. I
213 * IPython/Logger.py (Logger.log): fix a history handling bug. I
208 don't know if this is the end of it, but the behavior now is
214 don't know if this is the end of it, but the behavior now is
209 certainly much more correct. Note that coupled with macros,
215 certainly much more correct. Note that coupled with macros,
210 slightly surprising (at first) behavior may occur: a macro will in
216 slightly surprising (at first) behavior may occur: a macro will in
211 general expand to multiple lines of input, so upon exiting, the
217 general expand to multiple lines of input, so upon exiting, the
212 in/out counters will both be bumped by the corresponding amount
218 in/out counters will both be bumped by the corresponding amount
213 (as if the macro's contents had been typed interactively). Typing
219 (as if the macro's contents had been typed interactively). Typing
214 %hist will reveal the intermediate (silently processed) lines.
220 %hist will reveal the intermediate (silently processed) lines.
215
221
216 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
222 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
217 pickle to fail (%run was overwriting __main__ and not restoring
223 pickle to fail (%run was overwriting __main__ and not restoring
218 it, but pickle relies on __main__ to operate).
224 it, but pickle relies on __main__ to operate).
219
225
220 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
226 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
221 using properties, but forgot to make the main InteractiveShell
227 using properties, but forgot to make the main InteractiveShell
222 class a new-style class. Properties fail silently, and
228 class a new-style class. Properties fail silently, and
223 misteriously, with old-style class (getters work, but
229 misteriously, with old-style class (getters work, but
224 setters don't do anything).
230 setters don't do anything).
225
231
226 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
232 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
227
233
228 * IPython/Magic.py (magic_history): fix history reporting bug (I
234 * IPython/Magic.py (magic_history): fix history reporting bug (I
229 know some nasties are still there, I just can't seem to find a
235 know some nasties are still there, I just can't seem to find a
230 reproducible test case to track them down; the input history is
236 reproducible test case to track them down; the input history is
231 falling out of sync...)
237 falling out of sync...)
232
238
233 * IPython/iplib.py (handle_shell_escape): fix bug where both
239 * IPython/iplib.py (handle_shell_escape): fix bug where both
234 aliases and system accesses where broken for indented code (such
240 aliases and system accesses where broken for indented code (such
235 as loops).
241 as loops).
236
242
237 * IPython/genutils.py (shell): fix small but critical bug for
243 * IPython/genutils.py (shell): fix small but critical bug for
238 win32 system access.
244 win32 system access.
239
245
240 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
246 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
241
247
242 * IPython/iplib.py (showtraceback): remove use of the
248 * IPython/iplib.py (showtraceback): remove use of the
243 sys.last_{type/value/traceback} structures, which are non
249 sys.last_{type/value/traceback} structures, which are non
244 thread-safe.
250 thread-safe.
245 (_prefilter): change control flow to ensure that we NEVER
251 (_prefilter): change control flow to ensure that we NEVER
246 introspect objects when autocall is off. This will guarantee that
252 introspect objects when autocall is off. This will guarantee that
247 having an input line of the form 'x.y', where access to attribute
253 having an input line of the form 'x.y', where access to attribute
248 'y' has side effects, doesn't trigger the side effect TWICE. It
254 'y' has side effects, doesn't trigger the side effect TWICE. It
249 is important to note that, with autocall on, these side effects
255 is important to note that, with autocall on, these side effects
250 can still happen.
256 can still happen.
251 (ipsystem): new builtin, to complete the ip{magic/alias/system}
257 (ipsystem): new builtin, to complete the ip{magic/alias/system}
252 trio. IPython offers these three kinds of special calls which are
258 trio. IPython offers these three kinds of special calls which are
253 not python code, and it's a good thing to have their call method
259 not python code, and it's a good thing to have their call method
254 be accessible as pure python functions (not just special syntax at
260 be accessible as pure python functions (not just special syntax at
255 the command line). It gives us a better internal implementation
261 the command line). It gives us a better internal implementation
256 structure, as well as exposing these for user scripting more
262 structure, as well as exposing these for user scripting more
257 cleanly.
263 cleanly.
258
264
259 * IPython/macro.py (Macro.__init__): moved macros to a standalone
265 * IPython/macro.py (Macro.__init__): moved macros to a standalone
260 file. Now that they'll be more likely to be used with the
266 file. Now that they'll be more likely to be used with the
261 persistance system (%store), I want to make sure their module path
267 persistance system (%store), I want to make sure their module path
262 doesn't change in the future, so that we don't break things for
268 doesn't change in the future, so that we don't break things for
263 users' persisted data.
269 users' persisted data.
264
270
265 * IPython/iplib.py (autoindent_update): move indentation
271 * IPython/iplib.py (autoindent_update): move indentation
266 management into the _text_ processing loop, not the keyboard
272 management into the _text_ processing loop, not the keyboard
267 interactive one. This is necessary to correctly process non-typed
273 interactive one. This is necessary to correctly process non-typed
268 multiline input (such as macros).
274 multiline input (such as macros).
269
275
270 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
276 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
271 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
277 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
272 which was producing problems in the resulting manual.
278 which was producing problems in the resulting manual.
273 (magic_whos): improve reporting of instances (show their class,
279 (magic_whos): improve reporting of instances (show their class,
274 instead of simply printing 'instance' which isn't terribly
280 instead of simply printing 'instance' which isn't terribly
275 informative).
281 informative).
276
282
277 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
283 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
278 (minor mods) to support network shares under win32.
284 (minor mods) to support network shares under win32.
279
285
280 * IPython/winconsole.py (get_console_size): add new winconsole
286 * IPython/winconsole.py (get_console_size): add new winconsole
281 module and fixes to page_dumb() to improve its behavior under
287 module and fixes to page_dumb() to improve its behavior under
282 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
288 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
283
289
284 * IPython/Magic.py (Macro): simplified Macro class to just
290 * IPython/Magic.py (Macro): simplified Macro class to just
285 subclass list. We've had only 2.2 compatibility for a very long
291 subclass list. We've had only 2.2 compatibility for a very long
286 time, yet I was still avoiding subclassing the builtin types. No
292 time, yet I was still avoiding subclassing the builtin types. No
287 more (I'm also starting to use properties, though I won't shift to
293 more (I'm also starting to use properties, though I won't shift to
288 2.3-specific features quite yet).
294 2.3-specific features quite yet).
289 (magic_store): added Ville's patch for lightweight variable
295 (magic_store): added Ville's patch for lightweight variable
290 persistence, after a request on the user list by Matt Wilkie
296 persistence, after a request on the user list by Matt Wilkie
291 <maphew-AT-gmail.com>. The new %store magic's docstring has full
297 <maphew-AT-gmail.com>. The new %store magic's docstring has full
292 details.
298 details.
293
299
294 * IPython/iplib.py (InteractiveShell.post_config_initialization):
300 * IPython/iplib.py (InteractiveShell.post_config_initialization):
295 changed the default logfile name from 'ipython.log' to
301 changed the default logfile name from 'ipython.log' to
296 'ipython_log.py'. These logs are real python files, and now that
302 'ipython_log.py'. These logs are real python files, and now that
297 we have much better multiline support, people are more likely to
303 we have much better multiline support, people are more likely to
298 want to use them as such. Might as well name them correctly.
304 want to use them as such. Might as well name them correctly.
299
305
300 * IPython/Magic.py: substantial cleanup. While we can't stop
306 * IPython/Magic.py: substantial cleanup. While we can't stop
301 using magics as mixins, due to the existing customizations 'out
307 using magics as mixins, due to the existing customizations 'out
302 there' which rely on the mixin naming conventions, at least I
308 there' which rely on the mixin naming conventions, at least I
303 cleaned out all cross-class name usage. So once we are OK with
309 cleaned out all cross-class name usage. So once we are OK with
304 breaking compatibility, the two systems can be separated.
310 breaking compatibility, the two systems can be separated.
305
311
306 * IPython/Logger.py: major cleanup. This one is NOT a mixin
312 * IPython/Logger.py: major cleanup. This one is NOT a mixin
307 anymore, and the class is a fair bit less hideous as well. New
313 anymore, and the class is a fair bit less hideous as well. New
308 features were also introduced: timestamping of input, and logging
314 features were also introduced: timestamping of input, and logging
309 of output results. These are user-visible with the -t and -o
315 of output results. These are user-visible with the -t and -o
310 options to %logstart. Closes
316 options to %logstart. Closes
311 http://www.scipy.net/roundup/ipython/issue11 and a request by
317 http://www.scipy.net/roundup/ipython/issue11 and a request by
312 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
318 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
313
319
314 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
320 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
315
321
316 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
322 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
317 better hadnle backslashes in paths. See the thread 'More Windows
323 better hadnle backslashes in paths. See the thread 'More Windows
318 questions part 2 - \/ characters revisited' on the iypthon user
324 questions part 2 - \/ characters revisited' on the iypthon user
319 list:
325 list:
320 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
326 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
321
327
322 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
328 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
323
329
324 (InteractiveShell.__init__): change threaded shells to not use the
330 (InteractiveShell.__init__): change threaded shells to not use the
325 ipython crash handler. This was causing more problems than not,
331 ipython crash handler. This was causing more problems than not,
326 as exceptions in the main thread (GUI code, typically) would
332 as exceptions in the main thread (GUI code, typically) would
327 always show up as a 'crash', when they really weren't.
333 always show up as a 'crash', when they really weren't.
328
334
329 The colors and exception mode commands (%colors/%xmode) have been
335 The colors and exception mode commands (%colors/%xmode) have been
330 synchronized to also take this into account, so users can get
336 synchronized to also take this into account, so users can get
331 verbose exceptions for their threaded code as well. I also added
337 verbose exceptions for their threaded code as well. I also added
332 support for activating pdb inside this exception handler as well,
338 support for activating pdb inside this exception handler as well,
333 so now GUI authors can use IPython's enhanced pdb at runtime.
339 so now GUI authors can use IPython's enhanced pdb at runtime.
334
340
335 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
341 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
336 true by default, and add it to the shipped ipythonrc file. Since
342 true by default, and add it to the shipped ipythonrc file. Since
337 this asks the user before proceeding, I think it's OK to make it
343 this asks the user before proceeding, I think it's OK to make it
338 true by default.
344 true by default.
339
345
340 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
346 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
341 of the previous special-casing of input in the eval loop. I think
347 of the previous special-casing of input in the eval loop. I think
342 this is cleaner, as they really are commands and shouldn't have
348 this is cleaner, as they really are commands and shouldn't have
343 a special role in the middle of the core code.
349 a special role in the middle of the core code.
344
350
345 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
351 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
346
352
347 * IPython/iplib.py (edit_syntax_error): added support for
353 * IPython/iplib.py (edit_syntax_error): added support for
348 automatically reopening the editor if the file had a syntax error
354 automatically reopening the editor if the file had a syntax error
349 in it. Thanks to scottt who provided the patch at:
355 in it. Thanks to scottt who provided the patch at:
350 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
356 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
351 version committed).
357 version committed).
352
358
353 * IPython/iplib.py (handle_normal): add suport for multi-line
359 * IPython/iplib.py (handle_normal): add suport for multi-line
354 input with emtpy lines. This fixes
360 input with emtpy lines. This fixes
355 http://www.scipy.net/roundup/ipython/issue43 and a similar
361 http://www.scipy.net/roundup/ipython/issue43 and a similar
356 discussion on the user list.
362 discussion on the user list.
357
363
358 WARNING: a behavior change is necessarily introduced to support
364 WARNING: a behavior change is necessarily introduced to support
359 blank lines: now a single blank line with whitespace does NOT
365 blank lines: now a single blank line with whitespace does NOT
360 break the input loop, which means that when autoindent is on, by
366 break the input loop, which means that when autoindent is on, by
361 default hitting return on the next (indented) line does NOT exit.
367 default hitting return on the next (indented) line does NOT exit.
362
368
363 Instead, to exit a multiline input you can either have:
369 Instead, to exit a multiline input you can either have:
364
370
365 - TWO whitespace lines (just hit return again), or
371 - TWO whitespace lines (just hit return again), or
366 - a single whitespace line of a different length than provided
372 - a single whitespace line of a different length than provided
367 by the autoindent (add or remove a space).
373 by the autoindent (add or remove a space).
368
374
369 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
375 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
370 module to better organize all readline-related functionality.
376 module to better organize all readline-related functionality.
371 I've deleted FlexCompleter and put all completion clases here.
377 I've deleted FlexCompleter and put all completion clases here.
372
378
373 * IPython/iplib.py (raw_input): improve indentation management.
379 * IPython/iplib.py (raw_input): improve indentation management.
374 It is now possible to paste indented code with autoindent on, and
380 It is now possible to paste indented code with autoindent on, and
375 the code is interpreted correctly (though it still looks bad on
381 the code is interpreted correctly (though it still looks bad on
376 screen, due to the line-oriented nature of ipython).
382 screen, due to the line-oriented nature of ipython).
377 (MagicCompleter.complete): change behavior so that a TAB key on an
383 (MagicCompleter.complete): change behavior so that a TAB key on an
378 otherwise empty line actually inserts a tab, instead of completing
384 otherwise empty line actually inserts a tab, instead of completing
379 on the entire global namespace. This makes it easier to use the
385 on the entire global namespace. This makes it easier to use the
380 TAB key for indentation. After a request by Hans Meine
386 TAB key for indentation. After a request by Hans Meine
381 <hans_meine-AT-gmx.net>
387 <hans_meine-AT-gmx.net>
382 (_prefilter): add support so that typing plain 'exit' or 'quit'
388 (_prefilter): add support so that typing plain 'exit' or 'quit'
383 does a sensible thing. Originally I tried to deviate as little as
389 does a sensible thing. Originally I tried to deviate as little as
384 possible from the default python behavior, but even that one may
390 possible from the default python behavior, but even that one may
385 change in this direction (thread on python-dev to that effect).
391 change in this direction (thread on python-dev to that effect).
386 Regardless, ipython should do the right thing even if CPython's
392 Regardless, ipython should do the right thing even if CPython's
387 '>>>' prompt doesn't.
393 '>>>' prompt doesn't.
388 (InteractiveShell): removed subclassing code.InteractiveConsole
394 (InteractiveShell): removed subclassing code.InteractiveConsole
389 class. By now we'd overridden just about all of its methods: I've
395 class. By now we'd overridden just about all of its methods: I've
390 copied the remaining two over, and now ipython is a standalone
396 copied the remaining two over, and now ipython is a standalone
391 class. This will provide a clearer picture for the chainsaw
397 class. This will provide a clearer picture for the chainsaw
392 branch refactoring.
398 branch refactoring.
393
399
394 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
400 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
395
401
396 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
402 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
397 failures for objects which break when dir() is called on them.
403 failures for objects which break when dir() is called on them.
398
404
399 * IPython/FlexCompleter.py (Completer.__init__): Added support for
405 * IPython/FlexCompleter.py (Completer.__init__): Added support for
400 distinct local and global namespaces in the completer API. This
406 distinct local and global namespaces in the completer API. This
401 change allows us top properly handle completion with distinct
407 change allows us top properly handle completion with distinct
402 scopes, including in embedded instances (this had never really
408 scopes, including in embedded instances (this had never really
403 worked correctly).
409 worked correctly).
404
410
405 Note: this introduces a change in the constructor for
411 Note: this introduces a change in the constructor for
406 MagicCompleter, as a new global_namespace parameter is now the
412 MagicCompleter, as a new global_namespace parameter is now the
407 second argument (the others were bumped one position).
413 second argument (the others were bumped one position).
408
414
409 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
415 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
410
416
411 * IPython/iplib.py (embed_mainloop): fix tab-completion in
417 * IPython/iplib.py (embed_mainloop): fix tab-completion in
412 embedded instances (which can be done now thanks to Vivian's
418 embedded instances (which can be done now thanks to Vivian's
413 frame-handling fixes for pdb).
419 frame-handling fixes for pdb).
414 (InteractiveShell.__init__): Fix namespace handling problem in
420 (InteractiveShell.__init__): Fix namespace handling problem in
415 embedded instances. We were overwriting __main__ unconditionally,
421 embedded instances. We were overwriting __main__ unconditionally,
416 and this should only be done for 'full' (non-embedded) IPython;
422 and this should only be done for 'full' (non-embedded) IPython;
417 embedded instances must respect the caller's __main__. Thanks to
423 embedded instances must respect the caller's __main__. Thanks to
418 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
424 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
419
425
420 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
426 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
421
427
422 * setup.py: added download_url to setup(). This registers the
428 * setup.py: added download_url to setup(). This registers the
423 download address at PyPI, which is not only useful to humans
429 download address at PyPI, which is not only useful to humans
424 browsing the site, but is also picked up by setuptools (the Eggs
430 browsing the site, but is also picked up by setuptools (the Eggs
425 machinery). Thanks to Ville and R. Kern for the info/discussion
431 machinery). Thanks to Ville and R. Kern for the info/discussion
426 on this.
432 on this.
427
433
428 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
434 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
429
435
430 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
436 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
431 This brings a lot of nice functionality to the pdb mode, which now
437 This brings a lot of nice functionality to the pdb mode, which now
432 has tab-completion, syntax highlighting, and better stack handling
438 has tab-completion, syntax highlighting, and better stack handling
433 than before. Many thanks to Vivian De Smedt
439 than before. Many thanks to Vivian De Smedt
434 <vivian-AT-vdesmedt.com> for the original patches.
440 <vivian-AT-vdesmedt.com> for the original patches.
435
441
436 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
442 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
437
443
438 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
444 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
439 sequence to consistently accept the banner argument. The
445 sequence to consistently accept the banner argument. The
440 inconsistency was tripping SAGE, thanks to Gary Zablackis
446 inconsistency was tripping SAGE, thanks to Gary Zablackis
441 <gzabl-AT-yahoo.com> for the report.
447 <gzabl-AT-yahoo.com> for the report.
442
448
443 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
449 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
444
450
445 * IPython/iplib.py (InteractiveShell.post_config_initialization):
451 * IPython/iplib.py (InteractiveShell.post_config_initialization):
446 Fix bug where a naked 'alias' call in the ipythonrc file would
452 Fix bug where a naked 'alias' call in the ipythonrc file would
447 cause a crash. Bug reported by Jorgen Stenarson.
453 cause a crash. Bug reported by Jorgen Stenarson.
448
454
449 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
455 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
450
456
451 * IPython/ipmaker.py (make_IPython): cleanups which should improve
457 * IPython/ipmaker.py (make_IPython): cleanups which should improve
452 startup time.
458 startup time.
453
459
454 * IPython/iplib.py (runcode): my globals 'fix' for embedded
460 * IPython/iplib.py (runcode): my globals 'fix' for embedded
455 instances had introduced a bug with globals in normal code. Now
461 instances had introduced a bug with globals in normal code. Now
456 it's working in all cases.
462 it's working in all cases.
457
463
458 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
464 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
459 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
465 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
460 has been introduced to set the default case sensitivity of the
466 has been introduced to set the default case sensitivity of the
461 searches. Users can still select either mode at runtime on a
467 searches. Users can still select either mode at runtime on a
462 per-search basis.
468 per-search basis.
463
469
464 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
470 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
465
471
466 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
472 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
467 attributes in wildcard searches for subclasses. Modified version
473 attributes in wildcard searches for subclasses. Modified version
468 of a patch by Jorgen.
474 of a patch by Jorgen.
469
475
470 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
476 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
471
477
472 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
478 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
473 embedded instances. I added a user_global_ns attribute to the
479 embedded instances. I added a user_global_ns attribute to the
474 InteractiveShell class to handle this.
480 InteractiveShell class to handle this.
475
481
476 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
482 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
477
483
478 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
484 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
479 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
485 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
480 (reported under win32, but may happen also in other platforms).
486 (reported under win32, but may happen also in other platforms).
481 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
487 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
482
488
483 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
489 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
484
490
485 * IPython/Magic.py (magic_psearch): new support for wildcard
491 * IPython/Magic.py (magic_psearch): new support for wildcard
486 patterns. Now, typing ?a*b will list all names which begin with a
492 patterns. Now, typing ?a*b will list all names which begin with a
487 and end in b, for example. The %psearch magic has full
493 and end in b, for example. The %psearch magic has full
488 docstrings. Many thanks to JΓΆrgen Stenarson
494 docstrings. Many thanks to JΓΆrgen Stenarson
489 <jorgen.stenarson-AT-bostream.nu>, author of the patches
495 <jorgen.stenarson-AT-bostream.nu>, author of the patches
490 implementing this functionality.
496 implementing this functionality.
491
497
492 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
498 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
493
499
494 * Manual: fixed long-standing annoyance of double-dashes (as in
500 * Manual: fixed long-standing annoyance of double-dashes (as in
495 --prefix=~, for example) being stripped in the HTML version. This
501 --prefix=~, for example) being stripped in the HTML version. This
496 is a latex2html bug, but a workaround was provided. Many thanks
502 is a latex2html bug, but a workaround was provided. Many thanks
497 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
503 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
498 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
504 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
499 rolling. This seemingly small issue had tripped a number of users
505 rolling. This seemingly small issue had tripped a number of users
500 when first installing, so I'm glad to see it gone.
506 when first installing, so I'm glad to see it gone.
501
507
502 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
508 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
503
509
504 * IPython/Extensions/numeric_formats.py: fix missing import,
510 * IPython/Extensions/numeric_formats.py: fix missing import,
505 reported by Stephen Walton.
511 reported by Stephen Walton.
506
512
507 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
513 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
508
514
509 * IPython/demo.py: finish demo module, fully documented now.
515 * IPython/demo.py: finish demo module, fully documented now.
510
516
511 * IPython/genutils.py (file_read): simple little utility to read a
517 * IPython/genutils.py (file_read): simple little utility to read a
512 file and ensure it's closed afterwards.
518 file and ensure it's closed afterwards.
513
519
514 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
520 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
515
521
516 * IPython/demo.py (Demo.__init__): added support for individually
522 * IPython/demo.py (Demo.__init__): added support for individually
517 tagging blocks for automatic execution.
523 tagging blocks for automatic execution.
518
524
519 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
525 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
520 syntax-highlighted python sources, requested by John.
526 syntax-highlighted python sources, requested by John.
521
527
522 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
528 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
523
529
524 * IPython/demo.py (Demo.again): fix bug where again() blocks after
530 * IPython/demo.py (Demo.again): fix bug where again() blocks after
525 finishing.
531 finishing.
526
532
527 * IPython/genutils.py (shlex_split): moved from Magic to here,
533 * IPython/genutils.py (shlex_split): moved from Magic to here,
528 where all 2.2 compatibility stuff lives. I needed it for demo.py.
534 where all 2.2 compatibility stuff lives. I needed it for demo.py.
529
535
530 * IPython/demo.py (Demo.__init__): added support for silent
536 * IPython/demo.py (Demo.__init__): added support for silent
531 blocks, improved marks as regexps, docstrings written.
537 blocks, improved marks as regexps, docstrings written.
532 (Demo.__init__): better docstring, added support for sys.argv.
538 (Demo.__init__): better docstring, added support for sys.argv.
533
539
534 * IPython/genutils.py (marquee): little utility used by the demo
540 * IPython/genutils.py (marquee): little utility used by the demo
535 code, handy in general.
541 code, handy in general.
536
542
537 * IPython/demo.py (Demo.__init__): new class for interactive
543 * IPython/demo.py (Demo.__init__): new class for interactive
538 demos. Not documented yet, I just wrote it in a hurry for
544 demos. Not documented yet, I just wrote it in a hurry for
539 scipy'05. Will docstring later.
545 scipy'05. Will docstring later.
540
546
541 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
547 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
542
548
543 * IPython/Shell.py (sigint_handler): Drastic simplification which
549 * IPython/Shell.py (sigint_handler): Drastic simplification which
544 also seems to make Ctrl-C work correctly across threads! This is
550 also seems to make Ctrl-C work correctly across threads! This is
545 so simple, that I can't beleive I'd missed it before. Needs more
551 so simple, that I can't beleive I'd missed it before. Needs more
546 testing, though.
552 testing, though.
547 (KBINT): Never mind, revert changes. I'm sure I'd tried something
553 (KBINT): Never mind, revert changes. I'm sure I'd tried something
548 like this before...
554 like this before...
549
555
550 * IPython/genutils.py (get_home_dir): add protection against
556 * IPython/genutils.py (get_home_dir): add protection against
551 non-dirs in win32 registry.
557 non-dirs in win32 registry.
552
558
553 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
559 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
554 bug where dict was mutated while iterating (pysh crash).
560 bug where dict was mutated while iterating (pysh crash).
555
561
556 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
562 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
557
563
558 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
564 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
559 spurious newlines added by this routine. After a report by
565 spurious newlines added by this routine. After a report by
560 F. Mantegazza.
566 F. Mantegazza.
561
567
562 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
568 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
563
569
564 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
570 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
565 calls. These were a leftover from the GTK 1.x days, and can cause
571 calls. These were a leftover from the GTK 1.x days, and can cause
566 problems in certain cases (after a report by John Hunter).
572 problems in certain cases (after a report by John Hunter).
567
573
568 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
574 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
569 os.getcwd() fails at init time. Thanks to patch from David Remahl
575 os.getcwd() fails at init time. Thanks to patch from David Remahl
570 <chmod007-AT-mac.com>.
576 <chmod007-AT-mac.com>.
571 (InteractiveShell.__init__): prevent certain special magics from
577 (InteractiveShell.__init__): prevent certain special magics from
572 being shadowed by aliases. Closes
578 being shadowed by aliases. Closes
573 http://www.scipy.net/roundup/ipython/issue41.
579 http://www.scipy.net/roundup/ipython/issue41.
574
580
575 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
581 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
576
582
577 * IPython/iplib.py (InteractiveShell.complete): Added new
583 * IPython/iplib.py (InteractiveShell.complete): Added new
578 top-level completion method to expose the completion mechanism
584 top-level completion method to expose the completion mechanism
579 beyond readline-based environments.
585 beyond readline-based environments.
580
586
581 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
587 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
582
588
583 * tools/ipsvnc (svnversion): fix svnversion capture.
589 * tools/ipsvnc (svnversion): fix svnversion capture.
584
590
585 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
591 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
586 attribute to self, which was missing. Before, it was set by a
592 attribute to self, which was missing. Before, it was set by a
587 routine which in certain cases wasn't being called, so the
593 routine which in certain cases wasn't being called, so the
588 instance could end up missing the attribute. This caused a crash.
594 instance could end up missing the attribute. This caused a crash.
589 Closes http://www.scipy.net/roundup/ipython/issue40.
595 Closes http://www.scipy.net/roundup/ipython/issue40.
590
596
591 2005-08-16 Fernando Perez <fperez@colorado.edu>
597 2005-08-16 Fernando Perez <fperez@colorado.edu>
592
598
593 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
599 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
594 contains non-string attribute. Closes
600 contains non-string attribute. Closes
595 http://www.scipy.net/roundup/ipython/issue38.
601 http://www.scipy.net/roundup/ipython/issue38.
596
602
597 2005-08-14 Fernando Perez <fperez@colorado.edu>
603 2005-08-14 Fernando Perez <fperez@colorado.edu>
598
604
599 * tools/ipsvnc: Minor improvements, to add changeset info.
605 * tools/ipsvnc: Minor improvements, to add changeset info.
600
606
601 2005-08-12 Fernando Perez <fperez@colorado.edu>
607 2005-08-12 Fernando Perez <fperez@colorado.edu>
602
608
603 * IPython/iplib.py (runsource): remove self.code_to_run_src
609 * IPython/iplib.py (runsource): remove self.code_to_run_src
604 attribute. I realized this is nothing more than
610 attribute. I realized this is nothing more than
605 '\n'.join(self.buffer), and having the same data in two different
611 '\n'.join(self.buffer), and having the same data in two different
606 places is just asking for synchronization bugs. This may impact
612 places is just asking for synchronization bugs. This may impact
607 people who have custom exception handlers, so I need to warn
613 people who have custom exception handlers, so I need to warn
608 ipython-dev about it (F. Mantegazza may use them).
614 ipython-dev about it (F. Mantegazza may use them).
609
615
610 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
616 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
611
617
612 * IPython/genutils.py: fix 2.2 compatibility (generators)
618 * IPython/genutils.py: fix 2.2 compatibility (generators)
613
619
614 2005-07-18 Fernando Perez <fperez@colorado.edu>
620 2005-07-18 Fernando Perez <fperez@colorado.edu>
615
621
616 * IPython/genutils.py (get_home_dir): fix to help users with
622 * IPython/genutils.py (get_home_dir): fix to help users with
617 invalid $HOME under win32.
623 invalid $HOME under win32.
618
624
619 2005-07-17 Fernando Perez <fperez@colorado.edu>
625 2005-07-17 Fernando Perez <fperez@colorado.edu>
620
626
621 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
627 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
622 some old hacks and clean up a bit other routines; code should be
628 some old hacks and clean up a bit other routines; code should be
623 simpler and a bit faster.
629 simpler and a bit faster.
624
630
625 * IPython/iplib.py (interact): removed some last-resort attempts
631 * IPython/iplib.py (interact): removed some last-resort attempts
626 to survive broken stdout/stderr. That code was only making it
632 to survive broken stdout/stderr. That code was only making it
627 harder to abstract out the i/o (necessary for gui integration),
633 harder to abstract out the i/o (necessary for gui integration),
628 and the crashes it could prevent were extremely rare in practice
634 and the crashes it could prevent were extremely rare in practice
629 (besides being fully user-induced in a pretty violent manner).
635 (besides being fully user-induced in a pretty violent manner).
630
636
631 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
637 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
632 Nothing major yet, but the code is simpler to read; this should
638 Nothing major yet, but the code is simpler to read; this should
633 make it easier to do more serious modifications in the future.
639 make it easier to do more serious modifications in the future.
634
640
635 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
641 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
636 which broke in .15 (thanks to a report by Ville).
642 which broke in .15 (thanks to a report by Ville).
637
643
638 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
644 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
639 be quite correct, I know next to nothing about unicode). This
645 be quite correct, I know next to nothing about unicode). This
640 will allow unicode strings to be used in prompts, amongst other
646 will allow unicode strings to be used in prompts, amongst other
641 cases. It also will prevent ipython from crashing when unicode
647 cases. It also will prevent ipython from crashing when unicode
642 shows up unexpectedly in many places. If ascii encoding fails, we
648 shows up unexpectedly in many places. If ascii encoding fails, we
643 assume utf_8. Currently the encoding is not a user-visible
649 assume utf_8. Currently the encoding is not a user-visible
644 setting, though it could be made so if there is demand for it.
650 setting, though it could be made so if there is demand for it.
645
651
646 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
652 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
647
653
648 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
654 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
649
655
650 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
656 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
651
657
652 * IPython/genutils.py: Add 2.2 compatibility here, so all other
658 * IPython/genutils.py: Add 2.2 compatibility here, so all other
653 code can work transparently for 2.2/2.3.
659 code can work transparently for 2.2/2.3.
654
660
655 2005-07-16 Fernando Perez <fperez@colorado.edu>
661 2005-07-16 Fernando Perez <fperez@colorado.edu>
656
662
657 * IPython/ultraTB.py (ExceptionColors): Make a global variable
663 * IPython/ultraTB.py (ExceptionColors): Make a global variable
658 out of the color scheme table used for coloring exception
664 out of the color scheme table used for coloring exception
659 tracebacks. This allows user code to add new schemes at runtime.
665 tracebacks. This allows user code to add new schemes at runtime.
660 This is a minimally modified version of the patch at
666 This is a minimally modified version of the patch at
661 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
667 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
662 for the contribution.
668 for the contribution.
663
669
664 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
670 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
665 slightly modified version of the patch in
671 slightly modified version of the patch in
666 http://www.scipy.net/roundup/ipython/issue34, which also allows me
672 http://www.scipy.net/roundup/ipython/issue34, which also allows me
667 to remove the previous try/except solution (which was costlier).
673 to remove the previous try/except solution (which was costlier).
668 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
674 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
669
675
670 2005-06-08 Fernando Perez <fperez@colorado.edu>
676 2005-06-08 Fernando Perez <fperez@colorado.edu>
671
677
672 * IPython/iplib.py (write/write_err): Add methods to abstract all
678 * IPython/iplib.py (write/write_err): Add methods to abstract all
673 I/O a bit more.
679 I/O a bit more.
674
680
675 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
681 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
676 warning, reported by Aric Hagberg, fix by JD Hunter.
682 warning, reported by Aric Hagberg, fix by JD Hunter.
677
683
678 2005-06-02 *** Released version 0.6.15
684 2005-06-02 *** Released version 0.6.15
679
685
680 2005-06-01 Fernando Perez <fperez@colorado.edu>
686 2005-06-01 Fernando Perez <fperez@colorado.edu>
681
687
682 * IPython/iplib.py (MagicCompleter.file_matches): Fix
688 * IPython/iplib.py (MagicCompleter.file_matches): Fix
683 tab-completion of filenames within open-quoted strings. Note that
689 tab-completion of filenames within open-quoted strings. Note that
684 this requires that in ~/.ipython/ipythonrc, users change the
690 this requires that in ~/.ipython/ipythonrc, users change the
685 readline delimiters configuration to read:
691 readline delimiters configuration to read:
686
692
687 readline_remove_delims -/~
693 readline_remove_delims -/~
688
694
689
695
690 2005-05-31 *** Released version 0.6.14
696 2005-05-31 *** Released version 0.6.14
691
697
692 2005-05-29 Fernando Perez <fperez@colorado.edu>
698 2005-05-29 Fernando Perez <fperez@colorado.edu>
693
699
694 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
700 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
695 with files not on the filesystem. Reported by Eliyahu Sandler
701 with files not on the filesystem. Reported by Eliyahu Sandler
696 <eli@gondolin.net>
702 <eli@gondolin.net>
697
703
698 2005-05-22 Fernando Perez <fperez@colorado.edu>
704 2005-05-22 Fernando Perez <fperez@colorado.edu>
699
705
700 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
706 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
701 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
707 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
702
708
703 2005-05-19 Fernando Perez <fperez@colorado.edu>
709 2005-05-19 Fernando Perez <fperez@colorado.edu>
704
710
705 * IPython/iplib.py (safe_execfile): close a file which could be
711 * IPython/iplib.py (safe_execfile): close a file which could be
706 left open (causing problems in win32, which locks open files).
712 left open (causing problems in win32, which locks open files).
707 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
713 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
708
714
709 2005-05-18 Fernando Perez <fperez@colorado.edu>
715 2005-05-18 Fernando Perez <fperez@colorado.edu>
710
716
711 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
717 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
712 keyword arguments correctly to safe_execfile().
718 keyword arguments correctly to safe_execfile().
713
719
714 2005-05-13 Fernando Perez <fperez@colorado.edu>
720 2005-05-13 Fernando Perez <fperez@colorado.edu>
715
721
716 * ipython.1: Added info about Qt to manpage, and threads warning
722 * ipython.1: Added info about Qt to manpage, and threads warning
717 to usage page (invoked with --help).
723 to usage page (invoked with --help).
718
724
719 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
725 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
720 new matcher (it goes at the end of the priority list) to do
726 new matcher (it goes at the end of the priority list) to do
721 tab-completion on named function arguments. Submitted by George
727 tab-completion on named function arguments. Submitted by George
722 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
728 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
723 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
729 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
724 for more details.
730 for more details.
725
731
726 * IPython/Magic.py (magic_run): Added new -e flag to ignore
732 * IPython/Magic.py (magic_run): Added new -e flag to ignore
727 SystemExit exceptions in the script being run. Thanks to a report
733 SystemExit exceptions in the script being run. Thanks to a report
728 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
734 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
729 producing very annoying behavior when running unit tests.
735 producing very annoying behavior when running unit tests.
730
736
731 2005-05-12 Fernando Perez <fperez@colorado.edu>
737 2005-05-12 Fernando Perez <fperez@colorado.edu>
732
738
733 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
739 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
734 which I'd broken (again) due to a changed regexp. In the process,
740 which I'd broken (again) due to a changed regexp. In the process,
735 added ';' as an escape to auto-quote the whole line without
741 added ';' as an escape to auto-quote the whole line without
736 splitting its arguments. Thanks to a report by Jerry McRae
742 splitting its arguments. Thanks to a report by Jerry McRae
737 <qrs0xyc02-AT-sneakemail.com>.
743 <qrs0xyc02-AT-sneakemail.com>.
738
744
739 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
745 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
740 possible crashes caused by a TokenError. Reported by Ed Schofield
746 possible crashes caused by a TokenError. Reported by Ed Schofield
741 <schofield-AT-ftw.at>.
747 <schofield-AT-ftw.at>.
742
748
743 2005-05-06 Fernando Perez <fperez@colorado.edu>
749 2005-05-06 Fernando Perez <fperez@colorado.edu>
744
750
745 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
751 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
746
752
747 2005-04-29 Fernando Perez <fperez@colorado.edu>
753 2005-04-29 Fernando Perez <fperez@colorado.edu>
748
754
749 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
755 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
750 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
756 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
751 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
757 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
752 which provides support for Qt interactive usage (similar to the
758 which provides support for Qt interactive usage (similar to the
753 existing one for WX and GTK). This had been often requested.
759 existing one for WX and GTK). This had been often requested.
754
760
755 2005-04-14 *** Released version 0.6.13
761 2005-04-14 *** Released version 0.6.13
756
762
757 2005-04-08 Fernando Perez <fperez@colorado.edu>
763 2005-04-08 Fernando Perez <fperez@colorado.edu>
758
764
759 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
765 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
760 from _ofind, which gets called on almost every input line. Now,
766 from _ofind, which gets called on almost every input line. Now,
761 we only try to get docstrings if they are actually going to be
767 we only try to get docstrings if they are actually going to be
762 used (the overhead of fetching unnecessary docstrings can be
768 used (the overhead of fetching unnecessary docstrings can be
763 noticeable for certain objects, such as Pyro proxies).
769 noticeable for certain objects, such as Pyro proxies).
764
770
765 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
771 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
766 for completers. For some reason I had been passing them the state
772 for completers. For some reason I had been passing them the state
767 variable, which completers never actually need, and was in
773 variable, which completers never actually need, and was in
768 conflict with the rlcompleter API. Custom completers ONLY need to
774 conflict with the rlcompleter API. Custom completers ONLY need to
769 take the text parameter.
775 take the text parameter.
770
776
771 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
777 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
772 work correctly in pysh. I've also moved all the logic which used
778 work correctly in pysh. I've also moved all the logic which used
773 to be in pysh.py here, which will prevent problems with future
779 to be in pysh.py here, which will prevent problems with future
774 upgrades. However, this time I must warn users to update their
780 upgrades. However, this time I must warn users to update their
775 pysh profile to include the line
781 pysh profile to include the line
776
782
777 import_all IPython.Extensions.InterpreterExec
783 import_all IPython.Extensions.InterpreterExec
778
784
779 because otherwise things won't work for them. They MUST also
785 because otherwise things won't work for them. They MUST also
780 delete pysh.py and the line
786 delete pysh.py and the line
781
787
782 execfile pysh.py
788 execfile pysh.py
783
789
784 from their ipythonrc-pysh.
790 from their ipythonrc-pysh.
785
791
786 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
792 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
787 robust in the face of objects whose dir() returns non-strings
793 robust in the face of objects whose dir() returns non-strings
788 (which it shouldn't, but some broken libs like ITK do). Thanks to
794 (which it shouldn't, but some broken libs like ITK do). Thanks to
789 a patch by John Hunter (implemented differently, though). Also
795 a patch by John Hunter (implemented differently, though). Also
790 minor improvements by using .extend instead of + on lists.
796 minor improvements by using .extend instead of + on lists.
791
797
792 * pysh.py:
798 * pysh.py:
793
799
794 2005-04-06 Fernando Perez <fperez@colorado.edu>
800 2005-04-06 Fernando Perez <fperez@colorado.edu>
795
801
796 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
802 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
797 by default, so that all users benefit from it. Those who don't
803 by default, so that all users benefit from it. Those who don't
798 want it can still turn it off.
804 want it can still turn it off.
799
805
800 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
806 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
801 config file, I'd forgotten about this, so users were getting it
807 config file, I'd forgotten about this, so users were getting it
802 off by default.
808 off by default.
803
809
804 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
810 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
805 consistency. Now magics can be called in multiline statements,
811 consistency. Now magics can be called in multiline statements,
806 and python variables can be expanded in magic calls via $var.
812 and python variables can be expanded in magic calls via $var.
807 This makes the magic system behave just like aliases or !system
813 This makes the magic system behave just like aliases or !system
808 calls.
814 calls.
809
815
810 2005-03-28 Fernando Perez <fperez@colorado.edu>
816 2005-03-28 Fernando Perez <fperez@colorado.edu>
811
817
812 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
818 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
813 expensive string additions for building command. Add support for
819 expensive string additions for building command. Add support for
814 trailing ';' when autocall is used.
820 trailing ';' when autocall is used.
815
821
816 2005-03-26 Fernando Perez <fperez@colorado.edu>
822 2005-03-26 Fernando Perez <fperez@colorado.edu>
817
823
818 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
824 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
819 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
825 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
820 ipython.el robust against prompts with any number of spaces
826 ipython.el robust against prompts with any number of spaces
821 (including 0) after the ':' character.
827 (including 0) after the ':' character.
822
828
823 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
829 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
824 continuation prompt, which misled users to think the line was
830 continuation prompt, which misled users to think the line was
825 already indented. Closes debian Bug#300847, reported to me by
831 already indented. Closes debian Bug#300847, reported to me by
826 Norbert Tretkowski <tretkowski-AT-inittab.de>.
832 Norbert Tretkowski <tretkowski-AT-inittab.de>.
827
833
828 2005-03-23 Fernando Perez <fperez@colorado.edu>
834 2005-03-23 Fernando Perez <fperez@colorado.edu>
829
835
830 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
836 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
831 properly aligned if they have embedded newlines.
837 properly aligned if they have embedded newlines.
832
838
833 * IPython/iplib.py (runlines): Add a public method to expose
839 * IPython/iplib.py (runlines): Add a public method to expose
834 IPython's code execution machinery, so that users can run strings
840 IPython's code execution machinery, so that users can run strings
835 as if they had been typed at the prompt interactively.
841 as if they had been typed at the prompt interactively.
836 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
842 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
837 methods which can call the system shell, but with python variable
843 methods which can call the system shell, but with python variable
838 expansion. The three such methods are: __IPYTHON__.system,
844 expansion. The three such methods are: __IPYTHON__.system,
839 .getoutput and .getoutputerror. These need to be documented in a
845 .getoutput and .getoutputerror. These need to be documented in a
840 'public API' section (to be written) of the manual.
846 'public API' section (to be written) of the manual.
841
847
842 2005-03-20 Fernando Perez <fperez@colorado.edu>
848 2005-03-20 Fernando Perez <fperez@colorado.edu>
843
849
844 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
850 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
845 for custom exception handling. This is quite powerful, and it
851 for custom exception handling. This is quite powerful, and it
846 allows for user-installable exception handlers which can trap
852 allows for user-installable exception handlers which can trap
847 custom exceptions at runtime and treat them separately from
853 custom exceptions at runtime and treat them separately from
848 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
854 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
849 Mantegazza <mantegazza-AT-ill.fr>.
855 Mantegazza <mantegazza-AT-ill.fr>.
850 (InteractiveShell.set_custom_completer): public API function to
856 (InteractiveShell.set_custom_completer): public API function to
851 add new completers at runtime.
857 add new completers at runtime.
852
858
853 2005-03-19 Fernando Perez <fperez@colorado.edu>
859 2005-03-19 Fernando Perez <fperez@colorado.edu>
854
860
855 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
861 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
856 allow objects which provide their docstrings via non-standard
862 allow objects which provide their docstrings via non-standard
857 mechanisms (like Pyro proxies) to still be inspected by ipython's
863 mechanisms (like Pyro proxies) to still be inspected by ipython's
858 ? system.
864 ? system.
859
865
860 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
866 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
861 automatic capture system. I tried quite hard to make it work
867 automatic capture system. I tried quite hard to make it work
862 reliably, and simply failed. I tried many combinations with the
868 reliably, and simply failed. I tried many combinations with the
863 subprocess module, but eventually nothing worked in all needed
869 subprocess module, but eventually nothing worked in all needed
864 cases (not blocking stdin for the child, duplicating stdout
870 cases (not blocking stdin for the child, duplicating stdout
865 without blocking, etc). The new %sc/%sx still do capture to these
871 without blocking, etc). The new %sc/%sx still do capture to these
866 magical list/string objects which make shell use much more
872 magical list/string objects which make shell use much more
867 conveninent, so not all is lost.
873 conveninent, so not all is lost.
868
874
869 XXX - FIX MANUAL for the change above!
875 XXX - FIX MANUAL for the change above!
870
876
871 (runsource): I copied code.py's runsource() into ipython to modify
877 (runsource): I copied code.py's runsource() into ipython to modify
872 it a bit. Now the code object and source to be executed are
878 it a bit. Now the code object and source to be executed are
873 stored in ipython. This makes this info accessible to third-party
879 stored in ipython. This makes this info accessible to third-party
874 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
880 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
875 Mantegazza <mantegazza-AT-ill.fr>.
881 Mantegazza <mantegazza-AT-ill.fr>.
876
882
877 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
883 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
878 history-search via readline (like C-p/C-n). I'd wanted this for a
884 history-search via readline (like C-p/C-n). I'd wanted this for a
879 long time, but only recently found out how to do it. For users
885 long time, but only recently found out how to do it. For users
880 who already have their ipythonrc files made and want this, just
886 who already have their ipythonrc files made and want this, just
881 add:
887 add:
882
888
883 readline_parse_and_bind "\e[A": history-search-backward
889 readline_parse_and_bind "\e[A": history-search-backward
884 readline_parse_and_bind "\e[B": history-search-forward
890 readline_parse_and_bind "\e[B": history-search-forward
885
891
886 2005-03-18 Fernando Perez <fperez@colorado.edu>
892 2005-03-18 Fernando Perez <fperez@colorado.edu>
887
893
888 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
894 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
889 LSString and SList classes which allow transparent conversions
895 LSString and SList classes which allow transparent conversions
890 between list mode and whitespace-separated string.
896 between list mode and whitespace-separated string.
891 (magic_r): Fix recursion problem in %r.
897 (magic_r): Fix recursion problem in %r.
892
898
893 * IPython/genutils.py (LSString): New class to be used for
899 * IPython/genutils.py (LSString): New class to be used for
894 automatic storage of the results of all alias/system calls in _o
900 automatic storage of the results of all alias/system calls in _o
895 and _e (stdout/err). These provide a .l/.list attribute which
901 and _e (stdout/err). These provide a .l/.list attribute which
896 does automatic splitting on newlines. This means that for most
902 does automatic splitting on newlines. This means that for most
897 uses, you'll never need to do capturing of output with %sc/%sx
903 uses, you'll never need to do capturing of output with %sc/%sx
898 anymore, since ipython keeps this always done for you. Note that
904 anymore, since ipython keeps this always done for you. Note that
899 only the LAST results are stored, the _o/e variables are
905 only the LAST results are stored, the _o/e variables are
900 overwritten on each call. If you need to save their contents
906 overwritten on each call. If you need to save their contents
901 further, simply bind them to any other name.
907 further, simply bind them to any other name.
902
908
903 2005-03-17 Fernando Perez <fperez@colorado.edu>
909 2005-03-17 Fernando Perez <fperez@colorado.edu>
904
910
905 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
911 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
906 prompt namespace handling.
912 prompt namespace handling.
907
913
908 2005-03-16 Fernando Perez <fperez@colorado.edu>
914 2005-03-16 Fernando Perez <fperez@colorado.edu>
909
915
910 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
916 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
911 classic prompts to be '>>> ' (final space was missing, and it
917 classic prompts to be '>>> ' (final space was missing, and it
912 trips the emacs python mode).
918 trips the emacs python mode).
913 (BasePrompt.__str__): Added safe support for dynamic prompt
919 (BasePrompt.__str__): Added safe support for dynamic prompt
914 strings. Now you can set your prompt string to be '$x', and the
920 strings. Now you can set your prompt string to be '$x', and the
915 value of x will be printed from your interactive namespace. The
921 value of x will be printed from your interactive namespace. The
916 interpolation syntax includes the full Itpl support, so
922 interpolation syntax includes the full Itpl support, so
917 ${foo()+x+bar()} is a valid prompt string now, and the function
923 ${foo()+x+bar()} is a valid prompt string now, and the function
918 calls will be made at runtime.
924 calls will be made at runtime.
919
925
920 2005-03-15 Fernando Perez <fperez@colorado.edu>
926 2005-03-15 Fernando Perez <fperez@colorado.edu>
921
927
922 * IPython/Magic.py (magic_history): renamed %hist to %history, to
928 * IPython/Magic.py (magic_history): renamed %hist to %history, to
923 avoid name clashes in pylab. %hist still works, it just forwards
929 avoid name clashes in pylab. %hist still works, it just forwards
924 the call to %history.
930 the call to %history.
925
931
926 2005-03-02 *** Released version 0.6.12
932 2005-03-02 *** Released version 0.6.12
927
933
928 2005-03-02 Fernando Perez <fperez@colorado.edu>
934 2005-03-02 Fernando Perez <fperez@colorado.edu>
929
935
930 * IPython/iplib.py (handle_magic): log magic calls properly as
936 * IPython/iplib.py (handle_magic): log magic calls properly as
931 ipmagic() function calls.
937 ipmagic() function calls.
932
938
933 * IPython/Magic.py (magic_time): Improved %time to support
939 * IPython/Magic.py (magic_time): Improved %time to support
934 statements and provide wall-clock as well as CPU time.
940 statements and provide wall-clock as well as CPU time.
935
941
936 2005-02-27 Fernando Perez <fperez@colorado.edu>
942 2005-02-27 Fernando Perez <fperez@colorado.edu>
937
943
938 * IPython/hooks.py: New hooks module, to expose user-modifiable
944 * IPython/hooks.py: New hooks module, to expose user-modifiable
939 IPython functionality in a clean manner. For now only the editor
945 IPython functionality in a clean manner. For now only the editor
940 hook is actually written, and other thigns which I intend to turn
946 hook is actually written, and other thigns which I intend to turn
941 into proper hooks aren't yet there. The display and prefilter
947 into proper hooks aren't yet there. The display and prefilter
942 stuff, for example, should be hooks. But at least now the
948 stuff, for example, should be hooks. But at least now the
943 framework is in place, and the rest can be moved here with more
949 framework is in place, and the rest can be moved here with more
944 time later. IPython had had a .hooks variable for a long time for
950 time later. IPython had had a .hooks variable for a long time for
945 this purpose, but I'd never actually used it for anything.
951 this purpose, but I'd never actually used it for anything.
946
952
947 2005-02-26 Fernando Perez <fperez@colorado.edu>
953 2005-02-26 Fernando Perez <fperez@colorado.edu>
948
954
949 * IPython/ipmaker.py (make_IPython): make the default ipython
955 * IPython/ipmaker.py (make_IPython): make the default ipython
950 directory be called _ipython under win32, to follow more the
956 directory be called _ipython under win32, to follow more the
951 naming peculiarities of that platform (where buggy software like
957 naming peculiarities of that platform (where buggy software like
952 Visual Sourcesafe breaks with .named directories). Reported by
958 Visual Sourcesafe breaks with .named directories). Reported by
953 Ville Vainio.
959 Ville Vainio.
954
960
955 2005-02-23 Fernando Perez <fperez@colorado.edu>
961 2005-02-23 Fernando Perez <fperez@colorado.edu>
956
962
957 * IPython/iplib.py (InteractiveShell.__init__): removed a few
963 * IPython/iplib.py (InteractiveShell.__init__): removed a few
958 auto_aliases for win32 which were causing problems. Users can
964 auto_aliases for win32 which were causing problems. Users can
959 define the ones they personally like.
965 define the ones they personally like.
960
966
961 2005-02-21 Fernando Perez <fperez@colorado.edu>
967 2005-02-21 Fernando Perez <fperez@colorado.edu>
962
968
963 * IPython/Magic.py (magic_time): new magic to time execution of
969 * IPython/Magic.py (magic_time): new magic to time execution of
964 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
970 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
965
971
966 2005-02-19 Fernando Perez <fperez@colorado.edu>
972 2005-02-19 Fernando Perez <fperez@colorado.edu>
967
973
968 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
974 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
969 into keys (for prompts, for example).
975 into keys (for prompts, for example).
970
976
971 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
977 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
972 prompts in case users want them. This introduces a small behavior
978 prompts in case users want them. This introduces a small behavior
973 change: ipython does not automatically add a space to all prompts
979 change: ipython does not automatically add a space to all prompts
974 anymore. To get the old prompts with a space, users should add it
980 anymore. To get the old prompts with a space, users should add it
975 manually to their ipythonrc file, so for example prompt_in1 should
981 manually to their ipythonrc file, so for example prompt_in1 should
976 now read 'In [\#]: ' instead of 'In [\#]:'.
982 now read 'In [\#]: ' instead of 'In [\#]:'.
977 (BasePrompt.__init__): New option prompts_pad_left (only in rc
983 (BasePrompt.__init__): New option prompts_pad_left (only in rc
978 file) to control left-padding of secondary prompts.
984 file) to control left-padding of secondary prompts.
979
985
980 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
986 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
981 the profiler can't be imported. Fix for Debian, which removed
987 the profiler can't be imported. Fix for Debian, which removed
982 profile.py because of License issues. I applied a slightly
988 profile.py because of License issues. I applied a slightly
983 modified version of the original Debian patch at
989 modified version of the original Debian patch at
984 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
990 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
985
991
986 2005-02-17 Fernando Perez <fperez@colorado.edu>
992 2005-02-17 Fernando Perez <fperez@colorado.edu>
987
993
988 * IPython/genutils.py (native_line_ends): Fix bug which would
994 * IPython/genutils.py (native_line_ends): Fix bug which would
989 cause improper line-ends under win32 b/c I was not opening files
995 cause improper line-ends under win32 b/c I was not opening files
990 in binary mode. Bug report and fix thanks to Ville.
996 in binary mode. Bug report and fix thanks to Ville.
991
997
992 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
998 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
993 trying to catch spurious foo[1] autocalls. My fix actually broke
999 trying to catch spurious foo[1] autocalls. My fix actually broke
994 ',/' autoquote/call with explicit escape (bad regexp).
1000 ',/' autoquote/call with explicit escape (bad regexp).
995
1001
996 2005-02-15 *** Released version 0.6.11
1002 2005-02-15 *** Released version 0.6.11
997
1003
998 2005-02-14 Fernando Perez <fperez@colorado.edu>
1004 2005-02-14 Fernando Perez <fperez@colorado.edu>
999
1005
1000 * IPython/background_jobs.py: New background job management
1006 * IPython/background_jobs.py: New background job management
1001 subsystem. This is implemented via a new set of classes, and
1007 subsystem. This is implemented via a new set of classes, and
1002 IPython now provides a builtin 'jobs' object for background job
1008 IPython now provides a builtin 'jobs' object for background job
1003 execution. A convenience %bg magic serves as a lightweight
1009 execution. A convenience %bg magic serves as a lightweight
1004 frontend for starting the more common type of calls. This was
1010 frontend for starting the more common type of calls. This was
1005 inspired by discussions with B. Granger and the BackgroundCommand
1011 inspired by discussions with B. Granger and the BackgroundCommand
1006 class described in the book Python Scripting for Computational
1012 class described in the book Python Scripting for Computational
1007 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1013 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1008 (although ultimately no code from this text was used, as IPython's
1014 (although ultimately no code from this text was used, as IPython's
1009 system is a separate implementation).
1015 system is a separate implementation).
1010
1016
1011 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1017 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1012 to control the completion of single/double underscore names
1018 to control the completion of single/double underscore names
1013 separately. As documented in the example ipytonrc file, the
1019 separately. As documented in the example ipytonrc file, the
1014 readline_omit__names variable can now be set to 2, to omit even
1020 readline_omit__names variable can now be set to 2, to omit even
1015 single underscore names. Thanks to a patch by Brian Wong
1021 single underscore names. Thanks to a patch by Brian Wong
1016 <BrianWong-AT-AirgoNetworks.Com>.
1022 <BrianWong-AT-AirgoNetworks.Com>.
1017 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1023 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1018 be autocalled as foo([1]) if foo were callable. A problem for
1024 be autocalled as foo([1]) if foo were callable. A problem for
1019 things which are both callable and implement __getitem__.
1025 things which are both callable and implement __getitem__.
1020 (init_readline): Fix autoindentation for win32. Thanks to a patch
1026 (init_readline): Fix autoindentation for win32. Thanks to a patch
1021 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1027 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1022
1028
1023 2005-02-12 Fernando Perez <fperez@colorado.edu>
1029 2005-02-12 Fernando Perez <fperez@colorado.edu>
1024
1030
1025 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1031 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1026 which I had written long ago to sort out user error messages which
1032 which I had written long ago to sort out user error messages which
1027 may occur during startup. This seemed like a good idea initially,
1033 may occur during startup. This seemed like a good idea initially,
1028 but it has proven a disaster in retrospect. I don't want to
1034 but it has proven a disaster in retrospect. I don't want to
1029 change much code for now, so my fix is to set the internal 'debug'
1035 change much code for now, so my fix is to set the internal 'debug'
1030 flag to true everywhere, whose only job was precisely to control
1036 flag to true everywhere, whose only job was precisely to control
1031 this subsystem. This closes issue 28 (as well as avoiding all
1037 this subsystem. This closes issue 28 (as well as avoiding all
1032 sorts of strange hangups which occur from time to time).
1038 sorts of strange hangups which occur from time to time).
1033
1039
1034 2005-02-07 Fernando Perez <fperez@colorado.edu>
1040 2005-02-07 Fernando Perez <fperez@colorado.edu>
1035
1041
1036 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1042 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1037 previous call produced a syntax error.
1043 previous call produced a syntax error.
1038
1044
1039 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1045 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1040 classes without constructor.
1046 classes without constructor.
1041
1047
1042 2005-02-06 Fernando Perez <fperez@colorado.edu>
1048 2005-02-06 Fernando Perez <fperez@colorado.edu>
1043
1049
1044 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1050 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1045 completions with the results of each matcher, so we return results
1051 completions with the results of each matcher, so we return results
1046 to the user from all namespaces. This breaks with ipython
1052 to the user from all namespaces. This breaks with ipython
1047 tradition, but I think it's a nicer behavior. Now you get all
1053 tradition, but I think it's a nicer behavior. Now you get all
1048 possible completions listed, from all possible namespaces (python,
1054 possible completions listed, from all possible namespaces (python,
1049 filesystem, magics...) After a request by John Hunter
1055 filesystem, magics...) After a request by John Hunter
1050 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1056 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1051
1057
1052 2005-02-05 Fernando Perez <fperez@colorado.edu>
1058 2005-02-05 Fernando Perez <fperez@colorado.edu>
1053
1059
1054 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1060 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1055 the call had quote characters in it (the quotes were stripped).
1061 the call had quote characters in it (the quotes were stripped).
1056
1062
1057 2005-01-31 Fernando Perez <fperez@colorado.edu>
1063 2005-01-31 Fernando Perez <fperez@colorado.edu>
1058
1064
1059 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1065 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1060 Itpl.itpl() to make the code more robust against psyco
1066 Itpl.itpl() to make the code more robust against psyco
1061 optimizations.
1067 optimizations.
1062
1068
1063 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1069 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1064 of causing an exception. Quicker, cleaner.
1070 of causing an exception. Quicker, cleaner.
1065
1071
1066 2005-01-28 Fernando Perez <fperez@colorado.edu>
1072 2005-01-28 Fernando Perez <fperez@colorado.edu>
1067
1073
1068 * scripts/ipython_win_post_install.py (install): hardcode
1074 * scripts/ipython_win_post_install.py (install): hardcode
1069 sys.prefix+'python.exe' as the executable path. It turns out that
1075 sys.prefix+'python.exe' as the executable path. It turns out that
1070 during the post-installation run, sys.executable resolves to the
1076 during the post-installation run, sys.executable resolves to the
1071 name of the binary installer! I should report this as a distutils
1077 name of the binary installer! I should report this as a distutils
1072 bug, I think. I updated the .10 release with this tiny fix, to
1078 bug, I think. I updated the .10 release with this tiny fix, to
1073 avoid annoying the lists further.
1079 avoid annoying the lists further.
1074
1080
1075 2005-01-27 *** Released version 0.6.10
1081 2005-01-27 *** Released version 0.6.10
1076
1082
1077 2005-01-27 Fernando Perez <fperez@colorado.edu>
1083 2005-01-27 Fernando Perez <fperez@colorado.edu>
1078
1084
1079 * IPython/numutils.py (norm): Added 'inf' as optional name for
1085 * IPython/numutils.py (norm): Added 'inf' as optional name for
1080 L-infinity norm, included references to mathworld.com for vector
1086 L-infinity norm, included references to mathworld.com for vector
1081 norm definitions.
1087 norm definitions.
1082 (amin/amax): added amin/amax for array min/max. Similar to what
1088 (amin/amax): added amin/amax for array min/max. Similar to what
1083 pylab ships with after the recent reorganization of names.
1089 pylab ships with after the recent reorganization of names.
1084 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1090 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1085
1091
1086 * ipython.el: committed Alex's recent fixes and improvements.
1092 * ipython.el: committed Alex's recent fixes and improvements.
1087 Tested with python-mode from CVS, and it looks excellent. Since
1093 Tested with python-mode from CVS, and it looks excellent. Since
1088 python-mode hasn't released anything in a while, I'm temporarily
1094 python-mode hasn't released anything in a while, I'm temporarily
1089 putting a copy of today's CVS (v 4.70) of python-mode in:
1095 putting a copy of today's CVS (v 4.70) of python-mode in:
1090 http://ipython.scipy.org/tmp/python-mode.el
1096 http://ipython.scipy.org/tmp/python-mode.el
1091
1097
1092 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1098 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1093 sys.executable for the executable name, instead of assuming it's
1099 sys.executable for the executable name, instead of assuming it's
1094 called 'python.exe' (the post-installer would have produced broken
1100 called 'python.exe' (the post-installer would have produced broken
1095 setups on systems with a differently named python binary).
1101 setups on systems with a differently named python binary).
1096
1102
1097 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1103 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1098 references to os.linesep, to make the code more
1104 references to os.linesep, to make the code more
1099 platform-independent. This is also part of the win32 coloring
1105 platform-independent. This is also part of the win32 coloring
1100 fixes.
1106 fixes.
1101
1107
1102 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1108 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1103 lines, which actually cause coloring bugs because the length of
1109 lines, which actually cause coloring bugs because the length of
1104 the line is very difficult to correctly compute with embedded
1110 the line is very difficult to correctly compute with embedded
1105 escapes. This was the source of all the coloring problems under
1111 escapes. This was the source of all the coloring problems under
1106 Win32. I think that _finally_, Win32 users have a properly
1112 Win32. I think that _finally_, Win32 users have a properly
1107 working ipython in all respects. This would never have happened
1113 working ipython in all respects. This would never have happened
1108 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1114 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1109
1115
1110 2005-01-26 *** Released version 0.6.9
1116 2005-01-26 *** Released version 0.6.9
1111
1117
1112 2005-01-25 Fernando Perez <fperez@colorado.edu>
1118 2005-01-25 Fernando Perez <fperez@colorado.edu>
1113
1119
1114 * setup.py: finally, we have a true Windows installer, thanks to
1120 * setup.py: finally, we have a true Windows installer, thanks to
1115 the excellent work of Viktor Ransmayr
1121 the excellent work of Viktor Ransmayr
1116 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1122 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1117 Windows users. The setup routine is quite a bit cleaner thanks to
1123 Windows users. The setup routine is quite a bit cleaner thanks to
1118 this, and the post-install script uses the proper functions to
1124 this, and the post-install script uses the proper functions to
1119 allow a clean de-installation using the standard Windows Control
1125 allow a clean de-installation using the standard Windows Control
1120 Panel.
1126 Panel.
1121
1127
1122 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1128 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1123 environment variable under all OSes (including win32) if
1129 environment variable under all OSes (including win32) if
1124 available. This will give consistency to win32 users who have set
1130 available. This will give consistency to win32 users who have set
1125 this variable for any reason. If os.environ['HOME'] fails, the
1131 this variable for any reason. If os.environ['HOME'] fails, the
1126 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1132 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1127
1133
1128 2005-01-24 Fernando Perez <fperez@colorado.edu>
1134 2005-01-24 Fernando Perez <fperez@colorado.edu>
1129
1135
1130 * IPython/numutils.py (empty_like): add empty_like(), similar to
1136 * IPython/numutils.py (empty_like): add empty_like(), similar to
1131 zeros_like() but taking advantage of the new empty() Numeric routine.
1137 zeros_like() but taking advantage of the new empty() Numeric routine.
1132
1138
1133 2005-01-23 *** Released version 0.6.8
1139 2005-01-23 *** Released version 0.6.8
1134
1140
1135 2005-01-22 Fernando Perez <fperez@colorado.edu>
1141 2005-01-22 Fernando Perez <fperez@colorado.edu>
1136
1142
1137 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1143 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1138 automatic show() calls. After discussing things with JDH, it
1144 automatic show() calls. After discussing things with JDH, it
1139 turns out there are too many corner cases where this can go wrong.
1145 turns out there are too many corner cases where this can go wrong.
1140 It's best not to try to be 'too smart', and simply have ipython
1146 It's best not to try to be 'too smart', and simply have ipython
1141 reproduce as much as possible the default behavior of a normal
1147 reproduce as much as possible the default behavior of a normal
1142 python shell.
1148 python shell.
1143
1149
1144 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1150 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1145 line-splitting regexp and _prefilter() to avoid calling getattr()
1151 line-splitting regexp and _prefilter() to avoid calling getattr()
1146 on assignments. This closes
1152 on assignments. This closes
1147 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1153 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1148 readline uses getattr(), so a simple <TAB> keypress is still
1154 readline uses getattr(), so a simple <TAB> keypress is still
1149 enough to trigger getattr() calls on an object.
1155 enough to trigger getattr() calls on an object.
1150
1156
1151 2005-01-21 Fernando Perez <fperez@colorado.edu>
1157 2005-01-21 Fernando Perez <fperez@colorado.edu>
1152
1158
1153 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1159 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1154 docstring under pylab so it doesn't mask the original.
1160 docstring under pylab so it doesn't mask the original.
1155
1161
1156 2005-01-21 *** Released version 0.6.7
1162 2005-01-21 *** Released version 0.6.7
1157
1163
1158 2005-01-21 Fernando Perez <fperez@colorado.edu>
1164 2005-01-21 Fernando Perez <fperez@colorado.edu>
1159
1165
1160 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1166 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1161 signal handling for win32 users in multithreaded mode.
1167 signal handling for win32 users in multithreaded mode.
1162
1168
1163 2005-01-17 Fernando Perez <fperez@colorado.edu>
1169 2005-01-17 Fernando Perez <fperez@colorado.edu>
1164
1170
1165 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1171 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1166 instances with no __init__. After a crash report by Norbert Nemec
1172 instances with no __init__. After a crash report by Norbert Nemec
1167 <Norbert-AT-nemec-online.de>.
1173 <Norbert-AT-nemec-online.de>.
1168
1174
1169 2005-01-14 Fernando Perez <fperez@colorado.edu>
1175 2005-01-14 Fernando Perez <fperez@colorado.edu>
1170
1176
1171 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1177 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1172 names for verbose exceptions, when multiple dotted names and the
1178 names for verbose exceptions, when multiple dotted names and the
1173 'parent' object were present on the same line.
1179 'parent' object were present on the same line.
1174
1180
1175 2005-01-11 Fernando Perez <fperez@colorado.edu>
1181 2005-01-11 Fernando Perez <fperez@colorado.edu>
1176
1182
1177 * IPython/genutils.py (flag_calls): new utility to trap and flag
1183 * IPython/genutils.py (flag_calls): new utility to trap and flag
1178 calls in functions. I need it to clean up matplotlib support.
1184 calls in functions. I need it to clean up matplotlib support.
1179 Also removed some deprecated code in genutils.
1185 Also removed some deprecated code in genutils.
1180
1186
1181 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1187 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1182 that matplotlib scripts called with %run, which don't call show()
1188 that matplotlib scripts called with %run, which don't call show()
1183 themselves, still have their plotting windows open.
1189 themselves, still have their plotting windows open.
1184
1190
1185 2005-01-05 Fernando Perez <fperez@colorado.edu>
1191 2005-01-05 Fernando Perez <fperez@colorado.edu>
1186
1192
1187 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1193 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1188 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1194 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1189
1195
1190 2004-12-19 Fernando Perez <fperez@colorado.edu>
1196 2004-12-19 Fernando Perez <fperez@colorado.edu>
1191
1197
1192 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1198 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1193 parent_runcode, which was an eyesore. The same result can be
1199 parent_runcode, which was an eyesore. The same result can be
1194 obtained with Python's regular superclass mechanisms.
1200 obtained with Python's regular superclass mechanisms.
1195
1201
1196 2004-12-17 Fernando Perez <fperez@colorado.edu>
1202 2004-12-17 Fernando Perez <fperez@colorado.edu>
1197
1203
1198 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1204 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1199 reported by Prabhu.
1205 reported by Prabhu.
1200 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1206 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1201 sys.stderr) instead of explicitly calling sys.stderr. This helps
1207 sys.stderr) instead of explicitly calling sys.stderr. This helps
1202 maintain our I/O abstractions clean, for future GUI embeddings.
1208 maintain our I/O abstractions clean, for future GUI embeddings.
1203
1209
1204 * IPython/genutils.py (info): added new utility for sys.stderr
1210 * IPython/genutils.py (info): added new utility for sys.stderr
1205 unified info message handling (thin wrapper around warn()).
1211 unified info message handling (thin wrapper around warn()).
1206
1212
1207 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1213 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1208 composite (dotted) names on verbose exceptions.
1214 composite (dotted) names on verbose exceptions.
1209 (VerboseTB.nullrepr): harden against another kind of errors which
1215 (VerboseTB.nullrepr): harden against another kind of errors which
1210 Python's inspect module can trigger, and which were crashing
1216 Python's inspect module can trigger, and which were crashing
1211 IPython. Thanks to a report by Marco Lombardi
1217 IPython. Thanks to a report by Marco Lombardi
1212 <mlombard-AT-ma010192.hq.eso.org>.
1218 <mlombard-AT-ma010192.hq.eso.org>.
1213
1219
1214 2004-12-13 *** Released version 0.6.6
1220 2004-12-13 *** Released version 0.6.6
1215
1221
1216 2004-12-12 Fernando Perez <fperez@colorado.edu>
1222 2004-12-12 Fernando Perez <fperez@colorado.edu>
1217
1223
1218 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1224 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1219 generated by pygtk upon initialization if it was built without
1225 generated by pygtk upon initialization if it was built without
1220 threads (for matplotlib users). After a crash reported by
1226 threads (for matplotlib users). After a crash reported by
1221 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1227 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1222
1228
1223 * IPython/ipmaker.py (make_IPython): fix small bug in the
1229 * IPython/ipmaker.py (make_IPython): fix small bug in the
1224 import_some parameter for multiple imports.
1230 import_some parameter for multiple imports.
1225
1231
1226 * IPython/iplib.py (ipmagic): simplified the interface of
1232 * IPython/iplib.py (ipmagic): simplified the interface of
1227 ipmagic() to take a single string argument, just as it would be
1233 ipmagic() to take a single string argument, just as it would be
1228 typed at the IPython cmd line.
1234 typed at the IPython cmd line.
1229 (ipalias): Added new ipalias() with an interface identical to
1235 (ipalias): Added new ipalias() with an interface identical to
1230 ipmagic(). This completes exposing a pure python interface to the
1236 ipmagic(). This completes exposing a pure python interface to the
1231 alias and magic system, which can be used in loops or more complex
1237 alias and magic system, which can be used in loops or more complex
1232 code where IPython's automatic line mangling is not active.
1238 code where IPython's automatic line mangling is not active.
1233
1239
1234 * IPython/genutils.py (timing): changed interface of timing to
1240 * IPython/genutils.py (timing): changed interface of timing to
1235 simply run code once, which is the most common case. timings()
1241 simply run code once, which is the most common case. timings()
1236 remains unchanged, for the cases where you want multiple runs.
1242 remains unchanged, for the cases where you want multiple runs.
1237
1243
1238 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1244 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1239 bug where Python2.2 crashes with exec'ing code which does not end
1245 bug where Python2.2 crashes with exec'ing code which does not end
1240 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1246 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1241 before.
1247 before.
1242
1248
1243 2004-12-10 Fernando Perez <fperez@colorado.edu>
1249 2004-12-10 Fernando Perez <fperez@colorado.edu>
1244
1250
1245 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1251 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1246 -t to -T, to accomodate the new -t flag in %run (the %run and
1252 -t to -T, to accomodate the new -t flag in %run (the %run and
1247 %prun options are kind of intermixed, and it's not easy to change
1253 %prun options are kind of intermixed, and it's not easy to change
1248 this with the limitations of python's getopt).
1254 this with the limitations of python's getopt).
1249
1255
1250 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1256 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1251 the execution of scripts. It's not as fine-tuned as timeit.py,
1257 the execution of scripts. It's not as fine-tuned as timeit.py,
1252 but it works from inside ipython (and under 2.2, which lacks
1258 but it works from inside ipython (and under 2.2, which lacks
1253 timeit.py). Optionally a number of runs > 1 can be given for
1259 timeit.py). Optionally a number of runs > 1 can be given for
1254 timing very short-running code.
1260 timing very short-running code.
1255
1261
1256 * IPython/genutils.py (uniq_stable): new routine which returns a
1262 * IPython/genutils.py (uniq_stable): new routine which returns a
1257 list of unique elements in any iterable, but in stable order of
1263 list of unique elements in any iterable, but in stable order of
1258 appearance. I needed this for the ultraTB fixes, and it's a handy
1264 appearance. I needed this for the ultraTB fixes, and it's a handy
1259 utility.
1265 utility.
1260
1266
1261 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1267 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1262 dotted names in Verbose exceptions. This had been broken since
1268 dotted names in Verbose exceptions. This had been broken since
1263 the very start, now x.y will properly be printed in a Verbose
1269 the very start, now x.y will properly be printed in a Verbose
1264 traceback, instead of x being shown and y appearing always as an
1270 traceback, instead of x being shown and y appearing always as an
1265 'undefined global'. Getting this to work was a bit tricky,
1271 'undefined global'. Getting this to work was a bit tricky,
1266 because by default python tokenizers are stateless. Saved by
1272 because by default python tokenizers are stateless. Saved by
1267 python's ability to easily add a bit of state to an arbitrary
1273 python's ability to easily add a bit of state to an arbitrary
1268 function (without needing to build a full-blown callable object).
1274 function (without needing to build a full-blown callable object).
1269
1275
1270 Also big cleanup of this code, which had horrendous runtime
1276 Also big cleanup of this code, which had horrendous runtime
1271 lookups of zillions of attributes for colorization. Moved all
1277 lookups of zillions of attributes for colorization. Moved all
1272 this code into a few templates, which make it cleaner and quicker.
1278 this code into a few templates, which make it cleaner and quicker.
1273
1279
1274 Printout quality was also improved for Verbose exceptions: one
1280 Printout quality was also improved for Verbose exceptions: one
1275 variable per line, and memory addresses are printed (this can be
1281 variable per line, and memory addresses are printed (this can be
1276 quite handy in nasty debugging situations, which is what Verbose
1282 quite handy in nasty debugging situations, which is what Verbose
1277 is for).
1283 is for).
1278
1284
1279 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1285 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1280 the command line as scripts to be loaded by embedded instances.
1286 the command line as scripts to be loaded by embedded instances.
1281 Doing so has the potential for an infinite recursion if there are
1287 Doing so has the potential for an infinite recursion if there are
1282 exceptions thrown in the process. This fixes a strange crash
1288 exceptions thrown in the process. This fixes a strange crash
1283 reported by Philippe MULLER <muller-AT-irit.fr>.
1289 reported by Philippe MULLER <muller-AT-irit.fr>.
1284
1290
1285 2004-12-09 Fernando Perez <fperez@colorado.edu>
1291 2004-12-09 Fernando Perez <fperez@colorado.edu>
1286
1292
1287 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1293 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1288 to reflect new names in matplotlib, which now expose the
1294 to reflect new names in matplotlib, which now expose the
1289 matlab-compatible interface via a pylab module instead of the
1295 matlab-compatible interface via a pylab module instead of the
1290 'matlab' name. The new code is backwards compatible, so users of
1296 'matlab' name. The new code is backwards compatible, so users of
1291 all matplotlib versions are OK. Patch by J. Hunter.
1297 all matplotlib versions are OK. Patch by J. Hunter.
1292
1298
1293 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1299 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1294 of __init__ docstrings for instances (class docstrings are already
1300 of __init__ docstrings for instances (class docstrings are already
1295 automatically printed). Instances with customized docstrings
1301 automatically printed). Instances with customized docstrings
1296 (indep. of the class) are also recognized and all 3 separate
1302 (indep. of the class) are also recognized and all 3 separate
1297 docstrings are printed (instance, class, constructor). After some
1303 docstrings are printed (instance, class, constructor). After some
1298 comments/suggestions by J. Hunter.
1304 comments/suggestions by J. Hunter.
1299
1305
1300 2004-12-05 Fernando Perez <fperez@colorado.edu>
1306 2004-12-05 Fernando Perez <fperez@colorado.edu>
1301
1307
1302 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1308 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1303 warnings when tab-completion fails and triggers an exception.
1309 warnings when tab-completion fails and triggers an exception.
1304
1310
1305 2004-12-03 Fernando Perez <fperez@colorado.edu>
1311 2004-12-03 Fernando Perez <fperez@colorado.edu>
1306
1312
1307 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1313 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1308 be triggered when using 'run -p'. An incorrect option flag was
1314 be triggered when using 'run -p'. An incorrect option flag was
1309 being set ('d' instead of 'D').
1315 being set ('d' instead of 'D').
1310 (manpage): fix missing escaped \- sign.
1316 (manpage): fix missing escaped \- sign.
1311
1317
1312 2004-11-30 *** Released version 0.6.5
1318 2004-11-30 *** Released version 0.6.5
1313
1319
1314 2004-11-30 Fernando Perez <fperez@colorado.edu>
1320 2004-11-30 Fernando Perez <fperez@colorado.edu>
1315
1321
1316 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1322 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1317 setting with -d option.
1323 setting with -d option.
1318
1324
1319 * setup.py (docfiles): Fix problem where the doc glob I was using
1325 * setup.py (docfiles): Fix problem where the doc glob I was using
1320 was COMPLETELY BROKEN. It was giving the right files by pure
1326 was COMPLETELY BROKEN. It was giving the right files by pure
1321 accident, but failed once I tried to include ipython.el. Note:
1327 accident, but failed once I tried to include ipython.el. Note:
1322 glob() does NOT allow you to do exclusion on multiple endings!
1328 glob() does NOT allow you to do exclusion on multiple endings!
1323
1329
1324 2004-11-29 Fernando Perez <fperez@colorado.edu>
1330 2004-11-29 Fernando Perez <fperez@colorado.edu>
1325
1331
1326 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1332 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1327 the manpage as the source. Better formatting & consistency.
1333 the manpage as the source. Better formatting & consistency.
1328
1334
1329 * IPython/Magic.py (magic_run): Added new -d option, to run
1335 * IPython/Magic.py (magic_run): Added new -d option, to run
1330 scripts under the control of the python pdb debugger. Note that
1336 scripts under the control of the python pdb debugger. Note that
1331 this required changing the %prun option -d to -D, to avoid a clash
1337 this required changing the %prun option -d to -D, to avoid a clash
1332 (since %run must pass options to %prun, and getopt is too dumb to
1338 (since %run must pass options to %prun, and getopt is too dumb to
1333 handle options with string values with embedded spaces). Thanks
1339 handle options with string values with embedded spaces). Thanks
1334 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1340 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1335 (magic_who_ls): added type matching to %who and %whos, so that one
1341 (magic_who_ls): added type matching to %who and %whos, so that one
1336 can filter their output to only include variables of certain
1342 can filter their output to only include variables of certain
1337 types. Another suggestion by Matthew.
1343 types. Another suggestion by Matthew.
1338 (magic_whos): Added memory summaries in kb and Mb for arrays.
1344 (magic_whos): Added memory summaries in kb and Mb for arrays.
1339 (magic_who): Improve formatting (break lines every 9 vars).
1345 (magic_who): Improve formatting (break lines every 9 vars).
1340
1346
1341 2004-11-28 Fernando Perez <fperez@colorado.edu>
1347 2004-11-28 Fernando Perez <fperez@colorado.edu>
1342
1348
1343 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1349 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1344 cache when empty lines were present.
1350 cache when empty lines were present.
1345
1351
1346 2004-11-24 Fernando Perez <fperez@colorado.edu>
1352 2004-11-24 Fernando Perez <fperez@colorado.edu>
1347
1353
1348 * IPython/usage.py (__doc__): document the re-activated threading
1354 * IPython/usage.py (__doc__): document the re-activated threading
1349 options for WX and GTK.
1355 options for WX and GTK.
1350
1356
1351 2004-11-23 Fernando Perez <fperez@colorado.edu>
1357 2004-11-23 Fernando Perez <fperez@colorado.edu>
1352
1358
1353 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1359 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1354 the -wthread and -gthread options, along with a new -tk one to try
1360 the -wthread and -gthread options, along with a new -tk one to try
1355 and coordinate Tk threading with wx/gtk. The tk support is very
1361 and coordinate Tk threading with wx/gtk. The tk support is very
1356 platform dependent, since it seems to require Tcl and Tk to be
1362 platform dependent, since it seems to require Tcl and Tk to be
1357 built with threads (Fedora1/2 appears NOT to have it, but in
1363 built with threads (Fedora1/2 appears NOT to have it, but in
1358 Prabhu's Debian boxes it works OK). But even with some Tk
1364 Prabhu's Debian boxes it works OK). But even with some Tk
1359 limitations, this is a great improvement.
1365 limitations, this is a great improvement.
1360
1366
1361 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1367 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1362 info in user prompts. Patch by Prabhu.
1368 info in user prompts. Patch by Prabhu.
1363
1369
1364 2004-11-18 Fernando Perez <fperez@colorado.edu>
1370 2004-11-18 Fernando Perez <fperez@colorado.edu>
1365
1371
1366 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1372 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1367 EOFErrors and bail, to avoid infinite loops if a non-terminating
1373 EOFErrors and bail, to avoid infinite loops if a non-terminating
1368 file is fed into ipython. Patch submitted in issue 19 by user,
1374 file is fed into ipython. Patch submitted in issue 19 by user,
1369 many thanks.
1375 many thanks.
1370
1376
1371 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1377 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1372 autoquote/parens in continuation prompts, which can cause lots of
1378 autoquote/parens in continuation prompts, which can cause lots of
1373 problems. Closes roundup issue 20.
1379 problems. Closes roundup issue 20.
1374
1380
1375 2004-11-17 Fernando Perez <fperez@colorado.edu>
1381 2004-11-17 Fernando Perez <fperez@colorado.edu>
1376
1382
1377 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1383 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1378 reported as debian bug #280505. I'm not sure my local changelog
1384 reported as debian bug #280505. I'm not sure my local changelog
1379 entry has the proper debian format (Jack?).
1385 entry has the proper debian format (Jack?).
1380
1386
1381 2004-11-08 *** Released version 0.6.4
1387 2004-11-08 *** Released version 0.6.4
1382
1388
1383 2004-11-08 Fernando Perez <fperez@colorado.edu>
1389 2004-11-08 Fernando Perez <fperez@colorado.edu>
1384
1390
1385 * IPython/iplib.py (init_readline): Fix exit message for Windows
1391 * IPython/iplib.py (init_readline): Fix exit message for Windows
1386 when readline is active. Thanks to a report by Eric Jones
1392 when readline is active. Thanks to a report by Eric Jones
1387 <eric-AT-enthought.com>.
1393 <eric-AT-enthought.com>.
1388
1394
1389 2004-11-07 Fernando Perez <fperez@colorado.edu>
1395 2004-11-07 Fernando Perez <fperez@colorado.edu>
1390
1396
1391 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1397 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1392 sometimes seen by win2k/cygwin users.
1398 sometimes seen by win2k/cygwin users.
1393
1399
1394 2004-11-06 Fernando Perez <fperez@colorado.edu>
1400 2004-11-06 Fernando Perez <fperez@colorado.edu>
1395
1401
1396 * IPython/iplib.py (interact): Change the handling of %Exit from
1402 * IPython/iplib.py (interact): Change the handling of %Exit from
1397 trying to propagate a SystemExit to an internal ipython flag.
1403 trying to propagate a SystemExit to an internal ipython flag.
1398 This is less elegant than using Python's exception mechanism, but
1404 This is less elegant than using Python's exception mechanism, but
1399 I can't get that to work reliably with threads, so under -pylab
1405 I can't get that to work reliably with threads, so under -pylab
1400 %Exit was hanging IPython. Cross-thread exception handling is
1406 %Exit was hanging IPython. Cross-thread exception handling is
1401 really a bitch. Thaks to a bug report by Stephen Walton
1407 really a bitch. Thaks to a bug report by Stephen Walton
1402 <stephen.walton-AT-csun.edu>.
1408 <stephen.walton-AT-csun.edu>.
1403
1409
1404 2004-11-04 Fernando Perez <fperez@colorado.edu>
1410 2004-11-04 Fernando Perez <fperez@colorado.edu>
1405
1411
1406 * IPython/iplib.py (raw_input_original): store a pointer to the
1412 * IPython/iplib.py (raw_input_original): store a pointer to the
1407 true raw_input to harden against code which can modify it
1413 true raw_input to harden against code which can modify it
1408 (wx.py.PyShell does this and would otherwise crash ipython).
1414 (wx.py.PyShell does this and would otherwise crash ipython).
1409 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1415 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1410
1416
1411 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1417 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1412 Ctrl-C problem, which does not mess up the input line.
1418 Ctrl-C problem, which does not mess up the input line.
1413
1419
1414 2004-11-03 Fernando Perez <fperez@colorado.edu>
1420 2004-11-03 Fernando Perez <fperez@colorado.edu>
1415
1421
1416 * IPython/Release.py: Changed licensing to BSD, in all files.
1422 * IPython/Release.py: Changed licensing to BSD, in all files.
1417 (name): lowercase name for tarball/RPM release.
1423 (name): lowercase name for tarball/RPM release.
1418
1424
1419 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1425 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1420 use throughout ipython.
1426 use throughout ipython.
1421
1427
1422 * IPython/Magic.py (Magic._ofind): Switch to using the new
1428 * IPython/Magic.py (Magic._ofind): Switch to using the new
1423 OInspect.getdoc() function.
1429 OInspect.getdoc() function.
1424
1430
1425 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1431 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1426 of the line currently being canceled via Ctrl-C. It's extremely
1432 of the line currently being canceled via Ctrl-C. It's extremely
1427 ugly, but I don't know how to do it better (the problem is one of
1433 ugly, but I don't know how to do it better (the problem is one of
1428 handling cross-thread exceptions).
1434 handling cross-thread exceptions).
1429
1435
1430 2004-10-28 Fernando Perez <fperez@colorado.edu>
1436 2004-10-28 Fernando Perez <fperez@colorado.edu>
1431
1437
1432 * IPython/Shell.py (signal_handler): add signal handlers to trap
1438 * IPython/Shell.py (signal_handler): add signal handlers to trap
1433 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1439 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1434 report by Francesc Alted.
1440 report by Francesc Alted.
1435
1441
1436 2004-10-21 Fernando Perez <fperez@colorado.edu>
1442 2004-10-21 Fernando Perez <fperez@colorado.edu>
1437
1443
1438 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1444 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1439 to % for pysh syntax extensions.
1445 to % for pysh syntax extensions.
1440
1446
1441 2004-10-09 Fernando Perez <fperez@colorado.edu>
1447 2004-10-09 Fernando Perez <fperez@colorado.edu>
1442
1448
1443 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1449 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1444 arrays to print a more useful summary, without calling str(arr).
1450 arrays to print a more useful summary, without calling str(arr).
1445 This avoids the problem of extremely lengthy computations which
1451 This avoids the problem of extremely lengthy computations which
1446 occur if arr is large, and appear to the user as a system lockup
1452 occur if arr is large, and appear to the user as a system lockup
1447 with 100% cpu activity. After a suggestion by Kristian Sandberg
1453 with 100% cpu activity. After a suggestion by Kristian Sandberg
1448 <Kristian.Sandberg@colorado.edu>.
1454 <Kristian.Sandberg@colorado.edu>.
1449 (Magic.__init__): fix bug in global magic escapes not being
1455 (Magic.__init__): fix bug in global magic escapes not being
1450 correctly set.
1456 correctly set.
1451
1457
1452 2004-10-08 Fernando Perez <fperez@colorado.edu>
1458 2004-10-08 Fernando Perez <fperez@colorado.edu>
1453
1459
1454 * IPython/Magic.py (__license__): change to absolute imports of
1460 * IPython/Magic.py (__license__): change to absolute imports of
1455 ipython's own internal packages, to start adapting to the absolute
1461 ipython's own internal packages, to start adapting to the absolute
1456 import requirement of PEP-328.
1462 import requirement of PEP-328.
1457
1463
1458 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1464 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1459 files, and standardize author/license marks through the Release
1465 files, and standardize author/license marks through the Release
1460 module instead of having per/file stuff (except for files with
1466 module instead of having per/file stuff (except for files with
1461 particular licenses, like the MIT/PSF-licensed codes).
1467 particular licenses, like the MIT/PSF-licensed codes).
1462
1468
1463 * IPython/Debugger.py: remove dead code for python 2.1
1469 * IPython/Debugger.py: remove dead code for python 2.1
1464
1470
1465 2004-10-04 Fernando Perez <fperez@colorado.edu>
1471 2004-10-04 Fernando Perez <fperez@colorado.edu>
1466
1472
1467 * IPython/iplib.py (ipmagic): New function for accessing magics
1473 * IPython/iplib.py (ipmagic): New function for accessing magics
1468 via a normal python function call.
1474 via a normal python function call.
1469
1475
1470 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1476 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1471 from '@' to '%', to accomodate the new @decorator syntax of python
1477 from '@' to '%', to accomodate the new @decorator syntax of python
1472 2.4.
1478 2.4.
1473
1479
1474 2004-09-29 Fernando Perez <fperez@colorado.edu>
1480 2004-09-29 Fernando Perez <fperez@colorado.edu>
1475
1481
1476 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1482 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1477 matplotlib.use to prevent running scripts which try to switch
1483 matplotlib.use to prevent running scripts which try to switch
1478 interactive backends from within ipython. This will just crash
1484 interactive backends from within ipython. This will just crash
1479 the python interpreter, so we can't allow it (but a detailed error
1485 the python interpreter, so we can't allow it (but a detailed error
1480 is given to the user).
1486 is given to the user).
1481
1487
1482 2004-09-28 Fernando Perez <fperez@colorado.edu>
1488 2004-09-28 Fernando Perez <fperez@colorado.edu>
1483
1489
1484 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1490 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1485 matplotlib-related fixes so that using @run with non-matplotlib
1491 matplotlib-related fixes so that using @run with non-matplotlib
1486 scripts doesn't pop up spurious plot windows. This requires
1492 scripts doesn't pop up spurious plot windows. This requires
1487 matplotlib >= 0.63, where I had to make some changes as well.
1493 matplotlib >= 0.63, where I had to make some changes as well.
1488
1494
1489 * IPython/ipmaker.py (make_IPython): update version requirement to
1495 * IPython/ipmaker.py (make_IPython): update version requirement to
1490 python 2.2.
1496 python 2.2.
1491
1497
1492 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1498 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1493 banner arg for embedded customization.
1499 banner arg for embedded customization.
1494
1500
1495 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1501 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1496 explicit uses of __IP as the IPython's instance name. Now things
1502 explicit uses of __IP as the IPython's instance name. Now things
1497 are properly handled via the shell.name value. The actual code
1503 are properly handled via the shell.name value. The actual code
1498 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1504 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1499 is much better than before. I'll clean things completely when the
1505 is much better than before. I'll clean things completely when the
1500 magic stuff gets a real overhaul.
1506 magic stuff gets a real overhaul.
1501
1507
1502 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1508 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1503 minor changes to debian dir.
1509 minor changes to debian dir.
1504
1510
1505 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1511 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1506 pointer to the shell itself in the interactive namespace even when
1512 pointer to the shell itself in the interactive namespace even when
1507 a user-supplied dict is provided. This is needed for embedding
1513 a user-supplied dict is provided. This is needed for embedding
1508 purposes (found by tests with Michel Sanner).
1514 purposes (found by tests with Michel Sanner).
1509
1515
1510 2004-09-27 Fernando Perez <fperez@colorado.edu>
1516 2004-09-27 Fernando Perez <fperez@colorado.edu>
1511
1517
1512 * IPython/UserConfig/ipythonrc: remove []{} from
1518 * IPython/UserConfig/ipythonrc: remove []{} from
1513 readline_remove_delims, so that things like [modname.<TAB> do
1519 readline_remove_delims, so that things like [modname.<TAB> do
1514 proper completion. This disables [].TAB, but that's a less common
1520 proper completion. This disables [].TAB, but that's a less common
1515 case than module names in list comprehensions, for example.
1521 case than module names in list comprehensions, for example.
1516 Thanks to a report by Andrea Riciputi.
1522 Thanks to a report by Andrea Riciputi.
1517
1523
1518 2004-09-09 Fernando Perez <fperez@colorado.edu>
1524 2004-09-09 Fernando Perez <fperez@colorado.edu>
1519
1525
1520 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1526 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1521 blocking problems in win32 and osx. Fix by John.
1527 blocking problems in win32 and osx. Fix by John.
1522
1528
1523 2004-09-08 Fernando Perez <fperez@colorado.edu>
1529 2004-09-08 Fernando Perez <fperez@colorado.edu>
1524
1530
1525 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1531 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1526 for Win32 and OSX. Fix by John Hunter.
1532 for Win32 and OSX. Fix by John Hunter.
1527
1533
1528 2004-08-30 *** Released version 0.6.3
1534 2004-08-30 *** Released version 0.6.3
1529
1535
1530 2004-08-30 Fernando Perez <fperez@colorado.edu>
1536 2004-08-30 Fernando Perez <fperez@colorado.edu>
1531
1537
1532 * setup.py (isfile): Add manpages to list of dependent files to be
1538 * setup.py (isfile): Add manpages to list of dependent files to be
1533 updated.
1539 updated.
1534
1540
1535 2004-08-27 Fernando Perez <fperez@colorado.edu>
1541 2004-08-27 Fernando Perez <fperez@colorado.edu>
1536
1542
1537 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1543 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1538 for now. They don't really work with standalone WX/GTK code
1544 for now. They don't really work with standalone WX/GTK code
1539 (though matplotlib IS working fine with both of those backends).
1545 (though matplotlib IS working fine with both of those backends).
1540 This will neeed much more testing. I disabled most things with
1546 This will neeed much more testing. I disabled most things with
1541 comments, so turning it back on later should be pretty easy.
1547 comments, so turning it back on later should be pretty easy.
1542
1548
1543 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1549 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1544 autocalling of expressions like r'foo', by modifying the line
1550 autocalling of expressions like r'foo', by modifying the line
1545 split regexp. Closes
1551 split regexp. Closes
1546 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1552 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1547 Riley <ipythonbugs-AT-sabi.net>.
1553 Riley <ipythonbugs-AT-sabi.net>.
1548 (InteractiveShell.mainloop): honor --nobanner with banner
1554 (InteractiveShell.mainloop): honor --nobanner with banner
1549 extensions.
1555 extensions.
1550
1556
1551 * IPython/Shell.py: Significant refactoring of all classes, so
1557 * IPython/Shell.py: Significant refactoring of all classes, so
1552 that we can really support ALL matplotlib backends and threading
1558 that we can really support ALL matplotlib backends and threading
1553 models (John spotted a bug with Tk which required this). Now we
1559 models (John spotted a bug with Tk which required this). Now we
1554 should support single-threaded, WX-threads and GTK-threads, both
1560 should support single-threaded, WX-threads and GTK-threads, both
1555 for generic code and for matplotlib.
1561 for generic code and for matplotlib.
1556
1562
1557 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1563 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1558 -pylab, to simplify things for users. Will also remove the pylab
1564 -pylab, to simplify things for users. Will also remove the pylab
1559 profile, since now all of matplotlib configuration is directly
1565 profile, since now all of matplotlib configuration is directly
1560 handled here. This also reduces startup time.
1566 handled here. This also reduces startup time.
1561
1567
1562 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1568 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1563 shell wasn't being correctly called. Also in IPShellWX.
1569 shell wasn't being correctly called. Also in IPShellWX.
1564
1570
1565 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1571 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1566 fine-tune banner.
1572 fine-tune banner.
1567
1573
1568 * IPython/numutils.py (spike): Deprecate these spike functions,
1574 * IPython/numutils.py (spike): Deprecate these spike functions,
1569 delete (long deprecated) gnuplot_exec handler.
1575 delete (long deprecated) gnuplot_exec handler.
1570
1576
1571 2004-08-26 Fernando Perez <fperez@colorado.edu>
1577 2004-08-26 Fernando Perez <fperez@colorado.edu>
1572
1578
1573 * ipython.1: Update for threading options, plus some others which
1579 * ipython.1: Update for threading options, plus some others which
1574 were missing.
1580 were missing.
1575
1581
1576 * IPython/ipmaker.py (__call__): Added -wthread option for
1582 * IPython/ipmaker.py (__call__): Added -wthread option for
1577 wxpython thread handling. Make sure threading options are only
1583 wxpython thread handling. Make sure threading options are only
1578 valid at the command line.
1584 valid at the command line.
1579
1585
1580 * scripts/ipython: moved shell selection into a factory function
1586 * scripts/ipython: moved shell selection into a factory function
1581 in Shell.py, to keep the starter script to a minimum.
1587 in Shell.py, to keep the starter script to a minimum.
1582
1588
1583 2004-08-25 Fernando Perez <fperez@colorado.edu>
1589 2004-08-25 Fernando Perez <fperez@colorado.edu>
1584
1590
1585 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1591 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1586 John. Along with some recent changes he made to matplotlib, the
1592 John. Along with some recent changes he made to matplotlib, the
1587 next versions of both systems should work very well together.
1593 next versions of both systems should work very well together.
1588
1594
1589 2004-08-24 Fernando Perez <fperez@colorado.edu>
1595 2004-08-24 Fernando Perez <fperez@colorado.edu>
1590
1596
1591 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1597 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1592 tried to switch the profiling to using hotshot, but I'm getting
1598 tried to switch the profiling to using hotshot, but I'm getting
1593 strange errors from prof.runctx() there. I may be misreading the
1599 strange errors from prof.runctx() there. I may be misreading the
1594 docs, but it looks weird. For now the profiling code will
1600 docs, but it looks weird. For now the profiling code will
1595 continue to use the standard profiler.
1601 continue to use the standard profiler.
1596
1602
1597 2004-08-23 Fernando Perez <fperez@colorado.edu>
1603 2004-08-23 Fernando Perez <fperez@colorado.edu>
1598
1604
1599 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1605 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1600 threaded shell, by John Hunter. It's not quite ready yet, but
1606 threaded shell, by John Hunter. It's not quite ready yet, but
1601 close.
1607 close.
1602
1608
1603 2004-08-22 Fernando Perez <fperez@colorado.edu>
1609 2004-08-22 Fernando Perez <fperez@colorado.edu>
1604
1610
1605 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1611 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1606 in Magic and ultraTB.
1612 in Magic and ultraTB.
1607
1613
1608 * ipython.1: document threading options in manpage.
1614 * ipython.1: document threading options in manpage.
1609
1615
1610 * scripts/ipython: Changed name of -thread option to -gthread,
1616 * scripts/ipython: Changed name of -thread option to -gthread,
1611 since this is GTK specific. I want to leave the door open for a
1617 since this is GTK specific. I want to leave the door open for a
1612 -wthread option for WX, which will most likely be necessary. This
1618 -wthread option for WX, which will most likely be necessary. This
1613 change affects usage and ipmaker as well.
1619 change affects usage and ipmaker as well.
1614
1620
1615 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1621 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1616 handle the matplotlib shell issues. Code by John Hunter
1622 handle the matplotlib shell issues. Code by John Hunter
1617 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1623 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1618 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1624 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1619 broken (and disabled for end users) for now, but it puts the
1625 broken (and disabled for end users) for now, but it puts the
1620 infrastructure in place.
1626 infrastructure in place.
1621
1627
1622 2004-08-21 Fernando Perez <fperez@colorado.edu>
1628 2004-08-21 Fernando Perez <fperez@colorado.edu>
1623
1629
1624 * ipythonrc-pylab: Add matplotlib support.
1630 * ipythonrc-pylab: Add matplotlib support.
1625
1631
1626 * matplotlib_config.py: new files for matplotlib support, part of
1632 * matplotlib_config.py: new files for matplotlib support, part of
1627 the pylab profile.
1633 the pylab profile.
1628
1634
1629 * IPython/usage.py (__doc__): documented the threading options.
1635 * IPython/usage.py (__doc__): documented the threading options.
1630
1636
1631 2004-08-20 Fernando Perez <fperez@colorado.edu>
1637 2004-08-20 Fernando Perez <fperez@colorado.edu>
1632
1638
1633 * ipython: Modified the main calling routine to handle the -thread
1639 * ipython: Modified the main calling routine to handle the -thread
1634 and -mpthread options. This needs to be done as a top-level hack,
1640 and -mpthread options. This needs to be done as a top-level hack,
1635 because it determines which class to instantiate for IPython
1641 because it determines which class to instantiate for IPython
1636 itself.
1642 itself.
1637
1643
1638 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1644 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1639 classes to support multithreaded GTK operation without blocking,
1645 classes to support multithreaded GTK operation without blocking,
1640 and matplotlib with all backends. This is a lot of still very
1646 and matplotlib with all backends. This is a lot of still very
1641 experimental code, and threads are tricky. So it may still have a
1647 experimental code, and threads are tricky. So it may still have a
1642 few rough edges... This code owes a lot to
1648 few rough edges... This code owes a lot to
1643 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1649 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1644 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1650 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1645 to John Hunter for all the matplotlib work.
1651 to John Hunter for all the matplotlib work.
1646
1652
1647 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1653 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1648 options for gtk thread and matplotlib support.
1654 options for gtk thread and matplotlib support.
1649
1655
1650 2004-08-16 Fernando Perez <fperez@colorado.edu>
1656 2004-08-16 Fernando Perez <fperez@colorado.edu>
1651
1657
1652 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1658 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1653 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1659 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1654 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1660 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1655
1661
1656 2004-08-11 Fernando Perez <fperez@colorado.edu>
1662 2004-08-11 Fernando Perez <fperez@colorado.edu>
1657
1663
1658 * setup.py (isfile): Fix build so documentation gets updated for
1664 * setup.py (isfile): Fix build so documentation gets updated for
1659 rpms (it was only done for .tgz builds).
1665 rpms (it was only done for .tgz builds).
1660
1666
1661 2004-08-10 Fernando Perez <fperez@colorado.edu>
1667 2004-08-10 Fernando Perez <fperez@colorado.edu>
1662
1668
1663 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1669 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1664
1670
1665 * iplib.py : Silence syntax error exceptions in tab-completion.
1671 * iplib.py : Silence syntax error exceptions in tab-completion.
1666
1672
1667 2004-08-05 Fernando Perez <fperez@colorado.edu>
1673 2004-08-05 Fernando Perez <fperez@colorado.edu>
1668
1674
1669 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1675 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1670 'color off' mark for continuation prompts. This was causing long
1676 'color off' mark for continuation prompts. This was causing long
1671 continuation lines to mis-wrap.
1677 continuation lines to mis-wrap.
1672
1678
1673 2004-08-01 Fernando Perez <fperez@colorado.edu>
1679 2004-08-01 Fernando Perez <fperez@colorado.edu>
1674
1680
1675 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1681 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1676 for building ipython to be a parameter. All this is necessary
1682 for building ipython to be a parameter. All this is necessary
1677 right now to have a multithreaded version, but this insane
1683 right now to have a multithreaded version, but this insane
1678 non-design will be cleaned up soon. For now, it's a hack that
1684 non-design will be cleaned up soon. For now, it's a hack that
1679 works.
1685 works.
1680
1686
1681 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1687 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1682 args in various places. No bugs so far, but it's a dangerous
1688 args in various places. No bugs so far, but it's a dangerous
1683 practice.
1689 practice.
1684
1690
1685 2004-07-31 Fernando Perez <fperez@colorado.edu>
1691 2004-07-31 Fernando Perez <fperez@colorado.edu>
1686
1692
1687 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1693 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1688 fix completion of files with dots in their names under most
1694 fix completion of files with dots in their names under most
1689 profiles (pysh was OK because the completion order is different).
1695 profiles (pysh was OK because the completion order is different).
1690
1696
1691 2004-07-27 Fernando Perez <fperez@colorado.edu>
1697 2004-07-27 Fernando Perez <fperez@colorado.edu>
1692
1698
1693 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1699 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1694 keywords manually, b/c the one in keyword.py was removed in python
1700 keywords manually, b/c the one in keyword.py was removed in python
1695 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1701 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1696 This is NOT a bug under python 2.3 and earlier.
1702 This is NOT a bug under python 2.3 and earlier.
1697
1703
1698 2004-07-26 Fernando Perez <fperez@colorado.edu>
1704 2004-07-26 Fernando Perez <fperez@colorado.edu>
1699
1705
1700 * IPython/ultraTB.py (VerboseTB.text): Add another
1706 * IPython/ultraTB.py (VerboseTB.text): Add another
1701 linecache.checkcache() call to try to prevent inspect.py from
1707 linecache.checkcache() call to try to prevent inspect.py from
1702 crashing under python 2.3. I think this fixes
1708 crashing under python 2.3. I think this fixes
1703 http://www.scipy.net/roundup/ipython/issue17.
1709 http://www.scipy.net/roundup/ipython/issue17.
1704
1710
1705 2004-07-26 *** Released version 0.6.2
1711 2004-07-26 *** Released version 0.6.2
1706
1712
1707 2004-07-26 Fernando Perez <fperez@colorado.edu>
1713 2004-07-26 Fernando Perez <fperez@colorado.edu>
1708
1714
1709 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1715 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1710 fail for any number.
1716 fail for any number.
1711 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1717 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1712 empty bookmarks.
1718 empty bookmarks.
1713
1719
1714 2004-07-26 *** Released version 0.6.1
1720 2004-07-26 *** Released version 0.6.1
1715
1721
1716 2004-07-26 Fernando Perez <fperez@colorado.edu>
1722 2004-07-26 Fernando Perez <fperez@colorado.edu>
1717
1723
1718 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1724 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1719
1725
1720 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1726 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1721 escaping '()[]{}' in filenames.
1727 escaping '()[]{}' in filenames.
1722
1728
1723 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1729 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1724 Python 2.2 users who lack a proper shlex.split.
1730 Python 2.2 users who lack a proper shlex.split.
1725
1731
1726 2004-07-19 Fernando Perez <fperez@colorado.edu>
1732 2004-07-19 Fernando Perez <fperez@colorado.edu>
1727
1733
1728 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1734 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1729 for reading readline's init file. I follow the normal chain:
1735 for reading readline's init file. I follow the normal chain:
1730 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1736 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1731 report by Mike Heeter. This closes
1737 report by Mike Heeter. This closes
1732 http://www.scipy.net/roundup/ipython/issue16.
1738 http://www.scipy.net/roundup/ipython/issue16.
1733
1739
1734 2004-07-18 Fernando Perez <fperez@colorado.edu>
1740 2004-07-18 Fernando Perez <fperez@colorado.edu>
1735
1741
1736 * IPython/iplib.py (__init__): Add better handling of '\' under
1742 * IPython/iplib.py (__init__): Add better handling of '\' under
1737 Win32 for filenames. After a patch by Ville.
1743 Win32 for filenames. After a patch by Ville.
1738
1744
1739 2004-07-17 Fernando Perez <fperez@colorado.edu>
1745 2004-07-17 Fernando Perez <fperez@colorado.edu>
1740
1746
1741 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1747 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1742 autocalling would be triggered for 'foo is bar' if foo is
1748 autocalling would be triggered for 'foo is bar' if foo is
1743 callable. I also cleaned up the autocall detection code to use a
1749 callable. I also cleaned up the autocall detection code to use a
1744 regexp, which is faster. Bug reported by Alexander Schmolck.
1750 regexp, which is faster. Bug reported by Alexander Schmolck.
1745
1751
1746 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1752 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1747 '?' in them would confuse the help system. Reported by Alex
1753 '?' in them would confuse the help system. Reported by Alex
1748 Schmolck.
1754 Schmolck.
1749
1755
1750 2004-07-16 Fernando Perez <fperez@colorado.edu>
1756 2004-07-16 Fernando Perez <fperez@colorado.edu>
1751
1757
1752 * IPython/GnuplotInteractive.py (__all__): added plot2.
1758 * IPython/GnuplotInteractive.py (__all__): added plot2.
1753
1759
1754 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1760 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1755 plotting dictionaries, lists or tuples of 1d arrays.
1761 plotting dictionaries, lists or tuples of 1d arrays.
1756
1762
1757 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1763 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1758 optimizations.
1764 optimizations.
1759
1765
1760 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1766 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1761 the information which was there from Janko's original IPP code:
1767 the information which was there from Janko's original IPP code:
1762
1768
1763 03.05.99 20:53 porto.ifm.uni-kiel.de
1769 03.05.99 20:53 porto.ifm.uni-kiel.de
1764 --Started changelog.
1770 --Started changelog.
1765 --make clear do what it say it does
1771 --make clear do what it say it does
1766 --added pretty output of lines from inputcache
1772 --added pretty output of lines from inputcache
1767 --Made Logger a mixin class, simplifies handling of switches
1773 --Made Logger a mixin class, simplifies handling of switches
1768 --Added own completer class. .string<TAB> expands to last history
1774 --Added own completer class. .string<TAB> expands to last history
1769 line which starts with string. The new expansion is also present
1775 line which starts with string. The new expansion is also present
1770 with Ctrl-r from the readline library. But this shows, who this
1776 with Ctrl-r from the readline library. But this shows, who this
1771 can be done for other cases.
1777 can be done for other cases.
1772 --Added convention that all shell functions should accept a
1778 --Added convention that all shell functions should accept a
1773 parameter_string This opens the door for different behaviour for
1779 parameter_string This opens the door for different behaviour for
1774 each function. @cd is a good example of this.
1780 each function. @cd is a good example of this.
1775
1781
1776 04.05.99 12:12 porto.ifm.uni-kiel.de
1782 04.05.99 12:12 porto.ifm.uni-kiel.de
1777 --added logfile rotation
1783 --added logfile rotation
1778 --added new mainloop method which freezes first the namespace
1784 --added new mainloop method which freezes first the namespace
1779
1785
1780 07.05.99 21:24 porto.ifm.uni-kiel.de
1786 07.05.99 21:24 porto.ifm.uni-kiel.de
1781 --added the docreader classes. Now there is a help system.
1787 --added the docreader classes. Now there is a help system.
1782 -This is only a first try. Currently it's not easy to put new
1788 -This is only a first try. Currently it's not easy to put new
1783 stuff in the indices. But this is the way to go. Info would be
1789 stuff in the indices. But this is the way to go. Info would be
1784 better, but HTML is every where and not everybody has an info
1790 better, but HTML is every where and not everybody has an info
1785 system installed and it's not so easy to change html-docs to info.
1791 system installed and it's not so easy to change html-docs to info.
1786 --added global logfile option
1792 --added global logfile option
1787 --there is now a hook for object inspection method pinfo needs to
1793 --there is now a hook for object inspection method pinfo needs to
1788 be provided for this. Can be reached by two '??'.
1794 be provided for this. Can be reached by two '??'.
1789
1795
1790 08.05.99 20:51 porto.ifm.uni-kiel.de
1796 08.05.99 20:51 porto.ifm.uni-kiel.de
1791 --added a README
1797 --added a README
1792 --bug in rc file. Something has changed so functions in the rc
1798 --bug in rc file. Something has changed so functions in the rc
1793 file need to reference the shell and not self. Not clear if it's a
1799 file need to reference the shell and not self. Not clear if it's a
1794 bug or feature.
1800 bug or feature.
1795 --changed rc file for new behavior
1801 --changed rc file for new behavior
1796
1802
1797 2004-07-15 Fernando Perez <fperez@colorado.edu>
1803 2004-07-15 Fernando Perez <fperez@colorado.edu>
1798
1804
1799 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1805 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1800 cache was falling out of sync in bizarre manners when multi-line
1806 cache was falling out of sync in bizarre manners when multi-line
1801 input was present. Minor optimizations and cleanup.
1807 input was present. Minor optimizations and cleanup.
1802
1808
1803 (Logger): Remove old Changelog info for cleanup. This is the
1809 (Logger): Remove old Changelog info for cleanup. This is the
1804 information which was there from Janko's original code:
1810 information which was there from Janko's original code:
1805
1811
1806 Changes to Logger: - made the default log filename a parameter
1812 Changes to Logger: - made the default log filename a parameter
1807
1813
1808 - put a check for lines beginning with !@? in log(). Needed
1814 - put a check for lines beginning with !@? in log(). Needed
1809 (even if the handlers properly log their lines) for mid-session
1815 (even if the handlers properly log their lines) for mid-session
1810 logging activation to work properly. Without this, lines logged
1816 logging activation to work properly. Without this, lines logged
1811 in mid session, which get read from the cache, would end up
1817 in mid session, which get read from the cache, would end up
1812 'bare' (with !@? in the open) in the log. Now they are caught
1818 'bare' (with !@? in the open) in the log. Now they are caught
1813 and prepended with a #.
1819 and prepended with a #.
1814
1820
1815 * IPython/iplib.py (InteractiveShell.init_readline): added check
1821 * IPython/iplib.py (InteractiveShell.init_readline): added check
1816 in case MagicCompleter fails to be defined, so we don't crash.
1822 in case MagicCompleter fails to be defined, so we don't crash.
1817
1823
1818 2004-07-13 Fernando Perez <fperez@colorado.edu>
1824 2004-07-13 Fernando Perez <fperez@colorado.edu>
1819
1825
1820 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1826 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1821 of EPS if the requested filename ends in '.eps'.
1827 of EPS if the requested filename ends in '.eps'.
1822
1828
1823 2004-07-04 Fernando Perez <fperez@colorado.edu>
1829 2004-07-04 Fernando Perez <fperez@colorado.edu>
1824
1830
1825 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1831 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1826 escaping of quotes when calling the shell.
1832 escaping of quotes when calling the shell.
1827
1833
1828 2004-07-02 Fernando Perez <fperez@colorado.edu>
1834 2004-07-02 Fernando Perez <fperez@colorado.edu>
1829
1835
1830 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1836 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1831 gettext not working because we were clobbering '_'. Fixes
1837 gettext not working because we were clobbering '_'. Fixes
1832 http://www.scipy.net/roundup/ipython/issue6.
1838 http://www.scipy.net/roundup/ipython/issue6.
1833
1839
1834 2004-07-01 Fernando Perez <fperez@colorado.edu>
1840 2004-07-01 Fernando Perez <fperez@colorado.edu>
1835
1841
1836 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1842 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1837 into @cd. Patch by Ville.
1843 into @cd. Patch by Ville.
1838
1844
1839 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1845 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1840 new function to store things after ipmaker runs. Patch by Ville.
1846 new function to store things after ipmaker runs. Patch by Ville.
1841 Eventually this will go away once ipmaker is removed and the class
1847 Eventually this will go away once ipmaker is removed and the class
1842 gets cleaned up, but for now it's ok. Key functionality here is
1848 gets cleaned up, but for now it's ok. Key functionality here is
1843 the addition of the persistent storage mechanism, a dict for
1849 the addition of the persistent storage mechanism, a dict for
1844 keeping data across sessions (for now just bookmarks, but more can
1850 keeping data across sessions (for now just bookmarks, but more can
1845 be implemented later).
1851 be implemented later).
1846
1852
1847 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1853 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1848 persistent across sections. Patch by Ville, I modified it
1854 persistent across sections. Patch by Ville, I modified it
1849 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1855 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1850 added a '-l' option to list all bookmarks.
1856 added a '-l' option to list all bookmarks.
1851
1857
1852 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1858 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1853 center for cleanup. Registered with atexit.register(). I moved
1859 center for cleanup. Registered with atexit.register(). I moved
1854 here the old exit_cleanup(). After a patch by Ville.
1860 here the old exit_cleanup(). After a patch by Ville.
1855
1861
1856 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1862 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1857 characters in the hacked shlex_split for python 2.2.
1863 characters in the hacked shlex_split for python 2.2.
1858
1864
1859 * IPython/iplib.py (file_matches): more fixes to filenames with
1865 * IPython/iplib.py (file_matches): more fixes to filenames with
1860 whitespace in them. It's not perfect, but limitations in python's
1866 whitespace in them. It's not perfect, but limitations in python's
1861 readline make it impossible to go further.
1867 readline make it impossible to go further.
1862
1868
1863 2004-06-29 Fernando Perez <fperez@colorado.edu>
1869 2004-06-29 Fernando Perez <fperez@colorado.edu>
1864
1870
1865 * IPython/iplib.py (file_matches): escape whitespace correctly in
1871 * IPython/iplib.py (file_matches): escape whitespace correctly in
1866 filename completions. Bug reported by Ville.
1872 filename completions. Bug reported by Ville.
1867
1873
1868 2004-06-28 Fernando Perez <fperez@colorado.edu>
1874 2004-06-28 Fernando Perez <fperez@colorado.edu>
1869
1875
1870 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1876 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1871 the history file will be called 'history-PROFNAME' (or just
1877 the history file will be called 'history-PROFNAME' (or just
1872 'history' if no profile is loaded). I was getting annoyed at
1878 'history' if no profile is loaded). I was getting annoyed at
1873 getting my Numerical work history clobbered by pysh sessions.
1879 getting my Numerical work history clobbered by pysh sessions.
1874
1880
1875 * IPython/iplib.py (InteractiveShell.__init__): Internal
1881 * IPython/iplib.py (InteractiveShell.__init__): Internal
1876 getoutputerror() function so that we can honor the system_verbose
1882 getoutputerror() function so that we can honor the system_verbose
1877 flag for _all_ system calls. I also added escaping of #
1883 flag for _all_ system calls. I also added escaping of #
1878 characters here to avoid confusing Itpl.
1884 characters here to avoid confusing Itpl.
1879
1885
1880 * IPython/Magic.py (shlex_split): removed call to shell in
1886 * IPython/Magic.py (shlex_split): removed call to shell in
1881 parse_options and replaced it with shlex.split(). The annoying
1887 parse_options and replaced it with shlex.split(). The annoying
1882 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1888 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1883 to backport it from 2.3, with several frail hacks (the shlex
1889 to backport it from 2.3, with several frail hacks (the shlex
1884 module is rather limited in 2.2). Thanks to a suggestion by Ville
1890 module is rather limited in 2.2). Thanks to a suggestion by Ville
1885 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1891 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1886 problem.
1892 problem.
1887
1893
1888 (Magic.magic_system_verbose): new toggle to print the actual
1894 (Magic.magic_system_verbose): new toggle to print the actual
1889 system calls made by ipython. Mainly for debugging purposes.
1895 system calls made by ipython. Mainly for debugging purposes.
1890
1896
1891 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1897 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1892 doesn't support persistence. Reported (and fix suggested) by
1898 doesn't support persistence. Reported (and fix suggested) by
1893 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1899 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1894
1900
1895 2004-06-26 Fernando Perez <fperez@colorado.edu>
1901 2004-06-26 Fernando Perez <fperez@colorado.edu>
1896
1902
1897 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1903 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1898 continue prompts.
1904 continue prompts.
1899
1905
1900 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1906 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1901 function (basically a big docstring) and a few more things here to
1907 function (basically a big docstring) and a few more things here to
1902 speedup startup. pysh.py is now very lightweight. We want because
1908 speedup startup. pysh.py is now very lightweight. We want because
1903 it gets execfile'd, while InterpreterExec gets imported, so
1909 it gets execfile'd, while InterpreterExec gets imported, so
1904 byte-compilation saves time.
1910 byte-compilation saves time.
1905
1911
1906 2004-06-25 Fernando Perez <fperez@colorado.edu>
1912 2004-06-25 Fernando Perez <fperez@colorado.edu>
1907
1913
1908 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1914 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1909 -NUM', which was recently broken.
1915 -NUM', which was recently broken.
1910
1916
1911 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1917 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1912 in multi-line input (but not !!, which doesn't make sense there).
1918 in multi-line input (but not !!, which doesn't make sense there).
1913
1919
1914 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1920 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1915 It's just too useful, and people can turn it off in the less
1921 It's just too useful, and people can turn it off in the less
1916 common cases where it's a problem.
1922 common cases where it's a problem.
1917
1923
1918 2004-06-24 Fernando Perez <fperez@colorado.edu>
1924 2004-06-24 Fernando Perez <fperez@colorado.edu>
1919
1925
1920 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1926 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1921 special syntaxes (like alias calling) is now allied in multi-line
1927 special syntaxes (like alias calling) is now allied in multi-line
1922 input. This is still _very_ experimental, but it's necessary for
1928 input. This is still _very_ experimental, but it's necessary for
1923 efficient shell usage combining python looping syntax with system
1929 efficient shell usage combining python looping syntax with system
1924 calls. For now it's restricted to aliases, I don't think it
1930 calls. For now it's restricted to aliases, I don't think it
1925 really even makes sense to have this for magics.
1931 really even makes sense to have this for magics.
1926
1932
1927 2004-06-23 Fernando Perez <fperez@colorado.edu>
1933 2004-06-23 Fernando Perez <fperez@colorado.edu>
1928
1934
1929 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1935 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1930 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1936 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1931
1937
1932 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1938 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1933 extensions under Windows (after code sent by Gary Bishop). The
1939 extensions under Windows (after code sent by Gary Bishop). The
1934 extensions considered 'executable' are stored in IPython's rc
1940 extensions considered 'executable' are stored in IPython's rc
1935 structure as win_exec_ext.
1941 structure as win_exec_ext.
1936
1942
1937 * IPython/genutils.py (shell): new function, like system() but
1943 * IPython/genutils.py (shell): new function, like system() but
1938 without return value. Very useful for interactive shell work.
1944 without return value. Very useful for interactive shell work.
1939
1945
1940 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1946 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1941 delete aliases.
1947 delete aliases.
1942
1948
1943 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1949 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1944 sure that the alias table doesn't contain python keywords.
1950 sure that the alias table doesn't contain python keywords.
1945
1951
1946 2004-06-21 Fernando Perez <fperez@colorado.edu>
1952 2004-06-21 Fernando Perez <fperez@colorado.edu>
1947
1953
1948 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1954 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1949 non-existent items are found in $PATH. Reported by Thorsten.
1955 non-existent items are found in $PATH. Reported by Thorsten.
1950
1956
1951 2004-06-20 Fernando Perez <fperez@colorado.edu>
1957 2004-06-20 Fernando Perez <fperez@colorado.edu>
1952
1958
1953 * IPython/iplib.py (complete): modified the completer so that the
1959 * IPython/iplib.py (complete): modified the completer so that the
1954 order of priorities can be easily changed at runtime.
1960 order of priorities can be easily changed at runtime.
1955
1961
1956 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1962 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1957 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1963 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1958
1964
1959 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1965 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1960 expand Python variables prepended with $ in all system calls. The
1966 expand Python variables prepended with $ in all system calls. The
1961 same was done to InteractiveShell.handle_shell_escape. Now all
1967 same was done to InteractiveShell.handle_shell_escape. Now all
1962 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1968 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1963 expansion of python variables and expressions according to the
1969 expansion of python variables and expressions according to the
1964 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1970 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1965
1971
1966 Though PEP-215 has been rejected, a similar (but simpler) one
1972 Though PEP-215 has been rejected, a similar (but simpler) one
1967 seems like it will go into Python 2.4, PEP-292 -
1973 seems like it will go into Python 2.4, PEP-292 -
1968 http://www.python.org/peps/pep-0292.html.
1974 http://www.python.org/peps/pep-0292.html.
1969
1975
1970 I'll keep the full syntax of PEP-215, since IPython has since the
1976 I'll keep the full syntax of PEP-215, since IPython has since the
1971 start used Ka-Ping Yee's reference implementation discussed there
1977 start used Ka-Ping Yee's reference implementation discussed there
1972 (Itpl), and I actually like the powerful semantics it offers.
1978 (Itpl), and I actually like the powerful semantics it offers.
1973
1979
1974 In order to access normal shell variables, the $ has to be escaped
1980 In order to access normal shell variables, the $ has to be escaped
1975 via an extra $. For example:
1981 via an extra $. For example:
1976
1982
1977 In [7]: PATH='a python variable'
1983 In [7]: PATH='a python variable'
1978
1984
1979 In [8]: !echo $PATH
1985 In [8]: !echo $PATH
1980 a python variable
1986 a python variable
1981
1987
1982 In [9]: !echo $$PATH
1988 In [9]: !echo $$PATH
1983 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1989 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1984
1990
1985 (Magic.parse_options): escape $ so the shell doesn't evaluate
1991 (Magic.parse_options): escape $ so the shell doesn't evaluate
1986 things prematurely.
1992 things prematurely.
1987
1993
1988 * IPython/iplib.py (InteractiveShell.call_alias): added the
1994 * IPython/iplib.py (InteractiveShell.call_alias): added the
1989 ability for aliases to expand python variables via $.
1995 ability for aliases to expand python variables via $.
1990
1996
1991 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1997 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1992 system, now there's a @rehash/@rehashx pair of magics. These work
1998 system, now there's a @rehash/@rehashx pair of magics. These work
1993 like the csh rehash command, and can be invoked at any time. They
1999 like the csh rehash command, and can be invoked at any time. They
1994 build a table of aliases to everything in the user's $PATH
2000 build a table of aliases to everything in the user's $PATH
1995 (@rehash uses everything, @rehashx is slower but only adds
2001 (@rehash uses everything, @rehashx is slower but only adds
1996 executable files). With this, the pysh.py-based shell profile can
2002 executable files). With this, the pysh.py-based shell profile can
1997 now simply call rehash upon startup, and full access to all
2003 now simply call rehash upon startup, and full access to all
1998 programs in the user's path is obtained.
2004 programs in the user's path is obtained.
1999
2005
2000 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2006 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2001 functionality is now fully in place. I removed the old dynamic
2007 functionality is now fully in place. I removed the old dynamic
2002 code generation based approach, in favor of a much lighter one
2008 code generation based approach, in favor of a much lighter one
2003 based on a simple dict. The advantage is that this allows me to
2009 based on a simple dict. The advantage is that this allows me to
2004 now have thousands of aliases with negligible cost (unthinkable
2010 now have thousands of aliases with negligible cost (unthinkable
2005 with the old system).
2011 with the old system).
2006
2012
2007 2004-06-19 Fernando Perez <fperez@colorado.edu>
2013 2004-06-19 Fernando Perez <fperez@colorado.edu>
2008
2014
2009 * IPython/iplib.py (__init__): extended MagicCompleter class to
2015 * IPython/iplib.py (__init__): extended MagicCompleter class to
2010 also complete (last in priority) on user aliases.
2016 also complete (last in priority) on user aliases.
2011
2017
2012 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2018 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2013 call to eval.
2019 call to eval.
2014 (ItplNS.__init__): Added a new class which functions like Itpl,
2020 (ItplNS.__init__): Added a new class which functions like Itpl,
2015 but allows configuring the namespace for the evaluation to occur
2021 but allows configuring the namespace for the evaluation to occur
2016 in.
2022 in.
2017
2023
2018 2004-06-18 Fernando Perez <fperez@colorado.edu>
2024 2004-06-18 Fernando Perez <fperez@colorado.edu>
2019
2025
2020 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2026 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2021 better message when 'exit' or 'quit' are typed (a common newbie
2027 better message when 'exit' or 'quit' are typed (a common newbie
2022 confusion).
2028 confusion).
2023
2029
2024 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2030 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2025 check for Windows users.
2031 check for Windows users.
2026
2032
2027 * IPython/iplib.py (InteractiveShell.user_setup): removed
2033 * IPython/iplib.py (InteractiveShell.user_setup): removed
2028 disabling of colors for Windows. I'll test at runtime and issue a
2034 disabling of colors for Windows. I'll test at runtime and issue a
2029 warning if Gary's readline isn't found, as to nudge users to
2035 warning if Gary's readline isn't found, as to nudge users to
2030 download it.
2036 download it.
2031
2037
2032 2004-06-16 Fernando Perez <fperez@colorado.edu>
2038 2004-06-16 Fernando Perez <fperez@colorado.edu>
2033
2039
2034 * IPython/genutils.py (Stream.__init__): changed to print errors
2040 * IPython/genutils.py (Stream.__init__): changed to print errors
2035 to sys.stderr. I had a circular dependency here. Now it's
2041 to sys.stderr. I had a circular dependency here. Now it's
2036 possible to run ipython as IDLE's shell (consider this pre-alpha,
2042 possible to run ipython as IDLE's shell (consider this pre-alpha,
2037 since true stdout things end up in the starting terminal instead
2043 since true stdout things end up in the starting terminal instead
2038 of IDLE's out).
2044 of IDLE's out).
2039
2045
2040 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2046 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2041 users who haven't # updated their prompt_in2 definitions. Remove
2047 users who haven't # updated their prompt_in2 definitions. Remove
2042 eventually.
2048 eventually.
2043 (multiple_replace): added credit to original ASPN recipe.
2049 (multiple_replace): added credit to original ASPN recipe.
2044
2050
2045 2004-06-15 Fernando Perez <fperez@colorado.edu>
2051 2004-06-15 Fernando Perez <fperez@colorado.edu>
2046
2052
2047 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2053 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2048 list of auto-defined aliases.
2054 list of auto-defined aliases.
2049
2055
2050 2004-06-13 Fernando Perez <fperez@colorado.edu>
2056 2004-06-13 Fernando Perez <fperez@colorado.edu>
2051
2057
2052 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2058 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2053 install was really requested (so setup.py can be used for other
2059 install was really requested (so setup.py can be used for other
2054 things under Windows).
2060 things under Windows).
2055
2061
2056 2004-06-10 Fernando Perez <fperez@colorado.edu>
2062 2004-06-10 Fernando Perez <fperez@colorado.edu>
2057
2063
2058 * IPython/Logger.py (Logger.create_log): Manually remove any old
2064 * IPython/Logger.py (Logger.create_log): Manually remove any old
2059 backup, since os.remove may fail under Windows. Fixes bug
2065 backup, since os.remove may fail under Windows. Fixes bug
2060 reported by Thorsten.
2066 reported by Thorsten.
2061
2067
2062 2004-06-09 Fernando Perez <fperez@colorado.edu>
2068 2004-06-09 Fernando Perez <fperez@colorado.edu>
2063
2069
2064 * examples/example-embed.py: fixed all references to %n (replaced
2070 * examples/example-embed.py: fixed all references to %n (replaced
2065 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2071 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2066 for all examples and the manual as well.
2072 for all examples and the manual as well.
2067
2073
2068 2004-06-08 Fernando Perez <fperez@colorado.edu>
2074 2004-06-08 Fernando Perez <fperez@colorado.edu>
2069
2075
2070 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2076 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2071 alignment and color management. All 3 prompt subsystems now
2077 alignment and color management. All 3 prompt subsystems now
2072 inherit from BasePrompt.
2078 inherit from BasePrompt.
2073
2079
2074 * tools/release: updates for windows installer build and tag rpms
2080 * tools/release: updates for windows installer build and tag rpms
2075 with python version (since paths are fixed).
2081 with python version (since paths are fixed).
2076
2082
2077 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2083 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2078 which will become eventually obsolete. Also fixed the default
2084 which will become eventually obsolete. Also fixed the default
2079 prompt_in2 to use \D, so at least new users start with the correct
2085 prompt_in2 to use \D, so at least new users start with the correct
2080 defaults.
2086 defaults.
2081 WARNING: Users with existing ipythonrc files will need to apply
2087 WARNING: Users with existing ipythonrc files will need to apply
2082 this fix manually!
2088 this fix manually!
2083
2089
2084 * setup.py: make windows installer (.exe). This is finally the
2090 * setup.py: make windows installer (.exe). This is finally the
2085 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2091 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2086 which I hadn't included because it required Python 2.3 (or recent
2092 which I hadn't included because it required Python 2.3 (or recent
2087 distutils).
2093 distutils).
2088
2094
2089 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2095 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2090 usage of new '\D' escape.
2096 usage of new '\D' escape.
2091
2097
2092 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2098 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2093 lacks os.getuid())
2099 lacks os.getuid())
2094 (CachedOutput.set_colors): Added the ability to turn coloring
2100 (CachedOutput.set_colors): Added the ability to turn coloring
2095 on/off with @colors even for manually defined prompt colors. It
2101 on/off with @colors even for manually defined prompt colors. It
2096 uses a nasty global, but it works safely and via the generic color
2102 uses a nasty global, but it works safely and via the generic color
2097 handling mechanism.
2103 handling mechanism.
2098 (Prompt2.__init__): Introduced new escape '\D' for continuation
2104 (Prompt2.__init__): Introduced new escape '\D' for continuation
2099 prompts. It represents the counter ('\#') as dots.
2105 prompts. It represents the counter ('\#') as dots.
2100 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2106 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2101 need to update their ipythonrc files and replace '%n' with '\D' in
2107 need to update their ipythonrc files and replace '%n' with '\D' in
2102 their prompt_in2 settings everywhere. Sorry, but there's
2108 their prompt_in2 settings everywhere. Sorry, but there's
2103 otherwise no clean way to get all prompts to properly align. The
2109 otherwise no clean way to get all prompts to properly align. The
2104 ipythonrc shipped with IPython has been updated.
2110 ipythonrc shipped with IPython has been updated.
2105
2111
2106 2004-06-07 Fernando Perez <fperez@colorado.edu>
2112 2004-06-07 Fernando Perez <fperez@colorado.edu>
2107
2113
2108 * setup.py (isfile): Pass local_icons option to latex2html, so the
2114 * setup.py (isfile): Pass local_icons option to latex2html, so the
2109 resulting HTML file is self-contained. Thanks to
2115 resulting HTML file is self-contained. Thanks to
2110 dryice-AT-liu.com.cn for the tip.
2116 dryice-AT-liu.com.cn for the tip.
2111
2117
2112 * pysh.py: I created a new profile 'shell', which implements a
2118 * pysh.py: I created a new profile 'shell', which implements a
2113 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2119 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2114 system shell, nor will it become one anytime soon. It's mainly
2120 system shell, nor will it become one anytime soon. It's mainly
2115 meant to illustrate the use of the new flexible bash-like prompts.
2121 meant to illustrate the use of the new flexible bash-like prompts.
2116 I guess it could be used by hardy souls for true shell management,
2122 I guess it could be used by hardy souls for true shell management,
2117 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2123 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2118 profile. This uses the InterpreterExec extension provided by
2124 profile. This uses the InterpreterExec extension provided by
2119 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2125 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2120
2126
2121 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2127 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2122 auto-align itself with the length of the previous input prompt
2128 auto-align itself with the length of the previous input prompt
2123 (taking into account the invisible color escapes).
2129 (taking into account the invisible color escapes).
2124 (CachedOutput.__init__): Large restructuring of this class. Now
2130 (CachedOutput.__init__): Large restructuring of this class. Now
2125 all three prompts (primary1, primary2, output) are proper objects,
2131 all three prompts (primary1, primary2, output) are proper objects,
2126 managed by the 'parent' CachedOutput class. The code is still a
2132 managed by the 'parent' CachedOutput class. The code is still a
2127 bit hackish (all prompts share state via a pointer to the cache),
2133 bit hackish (all prompts share state via a pointer to the cache),
2128 but it's overall far cleaner than before.
2134 but it's overall far cleaner than before.
2129
2135
2130 * IPython/genutils.py (getoutputerror): modified to add verbose,
2136 * IPython/genutils.py (getoutputerror): modified to add verbose,
2131 debug and header options. This makes the interface of all getout*
2137 debug and header options. This makes the interface of all getout*
2132 functions uniform.
2138 functions uniform.
2133 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2139 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2134
2140
2135 * IPython/Magic.py (Magic.default_option): added a function to
2141 * IPython/Magic.py (Magic.default_option): added a function to
2136 allow registering default options for any magic command. This
2142 allow registering default options for any magic command. This
2137 makes it easy to have profiles which customize the magics globally
2143 makes it easy to have profiles which customize the magics globally
2138 for a certain use. The values set through this function are
2144 for a certain use. The values set through this function are
2139 picked up by the parse_options() method, which all magics should
2145 picked up by the parse_options() method, which all magics should
2140 use to parse their options.
2146 use to parse their options.
2141
2147
2142 * IPython/genutils.py (warn): modified the warnings framework to
2148 * IPython/genutils.py (warn): modified the warnings framework to
2143 use the Term I/O class. I'm trying to slowly unify all of
2149 use the Term I/O class. I'm trying to slowly unify all of
2144 IPython's I/O operations to pass through Term.
2150 IPython's I/O operations to pass through Term.
2145
2151
2146 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2152 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2147 the secondary prompt to correctly match the length of the primary
2153 the secondary prompt to correctly match the length of the primary
2148 one for any prompt. Now multi-line code will properly line up
2154 one for any prompt. Now multi-line code will properly line up
2149 even for path dependent prompts, such as the new ones available
2155 even for path dependent prompts, such as the new ones available
2150 via the prompt_specials.
2156 via the prompt_specials.
2151
2157
2152 2004-06-06 Fernando Perez <fperez@colorado.edu>
2158 2004-06-06 Fernando Perez <fperez@colorado.edu>
2153
2159
2154 * IPython/Prompts.py (prompt_specials): Added the ability to have
2160 * IPython/Prompts.py (prompt_specials): Added the ability to have
2155 bash-like special sequences in the prompts, which get
2161 bash-like special sequences in the prompts, which get
2156 automatically expanded. Things like hostname, current working
2162 automatically expanded. Things like hostname, current working
2157 directory and username are implemented already, but it's easy to
2163 directory and username are implemented already, but it's easy to
2158 add more in the future. Thanks to a patch by W.J. van der Laan
2164 add more in the future. Thanks to a patch by W.J. van der Laan
2159 <gnufnork-AT-hetdigitalegat.nl>
2165 <gnufnork-AT-hetdigitalegat.nl>
2160 (prompt_specials): Added color support for prompt strings, so
2166 (prompt_specials): Added color support for prompt strings, so
2161 users can define arbitrary color setups for their prompts.
2167 users can define arbitrary color setups for their prompts.
2162
2168
2163 2004-06-05 Fernando Perez <fperez@colorado.edu>
2169 2004-06-05 Fernando Perez <fperez@colorado.edu>
2164
2170
2165 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2171 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2166 code to load Gary Bishop's readline and configure it
2172 code to load Gary Bishop's readline and configure it
2167 automatically. Thanks to Gary for help on this.
2173 automatically. Thanks to Gary for help on this.
2168
2174
2169 2004-06-01 Fernando Perez <fperez@colorado.edu>
2175 2004-06-01 Fernando Perez <fperez@colorado.edu>
2170
2176
2171 * IPython/Logger.py (Logger.create_log): fix bug for logging
2177 * IPython/Logger.py (Logger.create_log): fix bug for logging
2172 with no filename (previous fix was incomplete).
2178 with no filename (previous fix was incomplete).
2173
2179
2174 2004-05-25 Fernando Perez <fperez@colorado.edu>
2180 2004-05-25 Fernando Perez <fperez@colorado.edu>
2175
2181
2176 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2182 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2177 parens would get passed to the shell.
2183 parens would get passed to the shell.
2178
2184
2179 2004-05-20 Fernando Perez <fperez@colorado.edu>
2185 2004-05-20 Fernando Perez <fperez@colorado.edu>
2180
2186
2181 * IPython/Magic.py (Magic.magic_prun): changed default profile
2187 * IPython/Magic.py (Magic.magic_prun): changed default profile
2182 sort order to 'time' (the more common profiling need).
2188 sort order to 'time' (the more common profiling need).
2183
2189
2184 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2190 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2185 so that source code shown is guaranteed in sync with the file on
2191 so that source code shown is guaranteed in sync with the file on
2186 disk (also changed in psource). Similar fix to the one for
2192 disk (also changed in psource). Similar fix to the one for
2187 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2193 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2188 <yann.ledu-AT-noos.fr>.
2194 <yann.ledu-AT-noos.fr>.
2189
2195
2190 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2196 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2191 with a single option would not be correctly parsed. Closes
2197 with a single option would not be correctly parsed. Closes
2192 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2198 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2193 introduced in 0.6.0 (on 2004-05-06).
2199 introduced in 0.6.0 (on 2004-05-06).
2194
2200
2195 2004-05-13 *** Released version 0.6.0
2201 2004-05-13 *** Released version 0.6.0
2196
2202
2197 2004-05-13 Fernando Perez <fperez@colorado.edu>
2203 2004-05-13 Fernando Perez <fperez@colorado.edu>
2198
2204
2199 * debian/: Added debian/ directory to CVS, so that debian support
2205 * debian/: Added debian/ directory to CVS, so that debian support
2200 is publicly accessible. The debian package is maintained by Jack
2206 is publicly accessible. The debian package is maintained by Jack
2201 Moffit <jack-AT-xiph.org>.
2207 Moffit <jack-AT-xiph.org>.
2202
2208
2203 * Documentation: included the notes about an ipython-based system
2209 * Documentation: included the notes about an ipython-based system
2204 shell (the hypothetical 'pysh') into the new_design.pdf document,
2210 shell (the hypothetical 'pysh') into the new_design.pdf document,
2205 so that these ideas get distributed to users along with the
2211 so that these ideas get distributed to users along with the
2206 official documentation.
2212 official documentation.
2207
2213
2208 2004-05-10 Fernando Perez <fperez@colorado.edu>
2214 2004-05-10 Fernando Perez <fperez@colorado.edu>
2209
2215
2210 * IPython/Logger.py (Logger.create_log): fix recently introduced
2216 * IPython/Logger.py (Logger.create_log): fix recently introduced
2211 bug (misindented line) where logstart would fail when not given an
2217 bug (misindented line) where logstart would fail when not given an
2212 explicit filename.
2218 explicit filename.
2213
2219
2214 2004-05-09 Fernando Perez <fperez@colorado.edu>
2220 2004-05-09 Fernando Perez <fperez@colorado.edu>
2215
2221
2216 * IPython/Magic.py (Magic.parse_options): skip system call when
2222 * IPython/Magic.py (Magic.parse_options): skip system call when
2217 there are no options to look for. Faster, cleaner for the common
2223 there are no options to look for. Faster, cleaner for the common
2218 case.
2224 case.
2219
2225
2220 * Documentation: many updates to the manual: describing Windows
2226 * Documentation: many updates to the manual: describing Windows
2221 support better, Gnuplot updates, credits, misc small stuff. Also
2227 support better, Gnuplot updates, credits, misc small stuff. Also
2222 updated the new_design doc a bit.
2228 updated the new_design doc a bit.
2223
2229
2224 2004-05-06 *** Released version 0.6.0.rc1
2230 2004-05-06 *** Released version 0.6.0.rc1
2225
2231
2226 2004-05-06 Fernando Perez <fperez@colorado.edu>
2232 2004-05-06 Fernando Perez <fperez@colorado.edu>
2227
2233
2228 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2234 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2229 operations to use the vastly more efficient list/''.join() method.
2235 operations to use the vastly more efficient list/''.join() method.
2230 (FormattedTB.text): Fix
2236 (FormattedTB.text): Fix
2231 http://www.scipy.net/roundup/ipython/issue12 - exception source
2237 http://www.scipy.net/roundup/ipython/issue12 - exception source
2232 extract not updated after reload. Thanks to Mike Salib
2238 extract not updated after reload. Thanks to Mike Salib
2233 <msalib-AT-mit.edu> for pinning the source of the problem.
2239 <msalib-AT-mit.edu> for pinning the source of the problem.
2234 Fortunately, the solution works inside ipython and doesn't require
2240 Fortunately, the solution works inside ipython and doesn't require
2235 any changes to python proper.
2241 any changes to python proper.
2236
2242
2237 * IPython/Magic.py (Magic.parse_options): Improved to process the
2243 * IPython/Magic.py (Magic.parse_options): Improved to process the
2238 argument list as a true shell would (by actually using the
2244 argument list as a true shell would (by actually using the
2239 underlying system shell). This way, all @magics automatically get
2245 underlying system shell). This way, all @magics automatically get
2240 shell expansion for variables. Thanks to a comment by Alex
2246 shell expansion for variables. Thanks to a comment by Alex
2241 Schmolck.
2247 Schmolck.
2242
2248
2243 2004-04-04 Fernando Perez <fperez@colorado.edu>
2249 2004-04-04 Fernando Perez <fperez@colorado.edu>
2244
2250
2245 * IPython/iplib.py (InteractiveShell.interact): Added a special
2251 * IPython/iplib.py (InteractiveShell.interact): Added a special
2246 trap for a debugger quit exception, which is basically impossible
2252 trap for a debugger quit exception, which is basically impossible
2247 to handle by normal mechanisms, given what pdb does to the stack.
2253 to handle by normal mechanisms, given what pdb does to the stack.
2248 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2254 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2249
2255
2250 2004-04-03 Fernando Perez <fperez@colorado.edu>
2256 2004-04-03 Fernando Perez <fperez@colorado.edu>
2251
2257
2252 * IPython/genutils.py (Term): Standardized the names of the Term
2258 * IPython/genutils.py (Term): Standardized the names of the Term
2253 class streams to cin/cout/cerr, following C++ naming conventions
2259 class streams to cin/cout/cerr, following C++ naming conventions
2254 (I can't use in/out/err because 'in' is not a valid attribute
2260 (I can't use in/out/err because 'in' is not a valid attribute
2255 name).
2261 name).
2256
2262
2257 * IPython/iplib.py (InteractiveShell.interact): don't increment
2263 * IPython/iplib.py (InteractiveShell.interact): don't increment
2258 the prompt if there's no user input. By Daniel 'Dang' Griffith
2264 the prompt if there's no user input. By Daniel 'Dang' Griffith
2259 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2265 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2260 Francois Pinard.
2266 Francois Pinard.
2261
2267
2262 2004-04-02 Fernando Perez <fperez@colorado.edu>
2268 2004-04-02 Fernando Perez <fperez@colorado.edu>
2263
2269
2264 * IPython/genutils.py (Stream.__init__): Modified to survive at
2270 * IPython/genutils.py (Stream.__init__): Modified to survive at
2265 least importing in contexts where stdin/out/err aren't true file
2271 least importing in contexts where stdin/out/err aren't true file
2266 objects, such as PyCrust (they lack fileno() and mode). However,
2272 objects, such as PyCrust (they lack fileno() and mode). However,
2267 the recovery facilities which rely on these things existing will
2273 the recovery facilities which rely on these things existing will
2268 not work.
2274 not work.
2269
2275
2270 2004-04-01 Fernando Perez <fperez@colorado.edu>
2276 2004-04-01 Fernando Perez <fperez@colorado.edu>
2271
2277
2272 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2278 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2273 use the new getoutputerror() function, so it properly
2279 use the new getoutputerror() function, so it properly
2274 distinguishes stdout/err.
2280 distinguishes stdout/err.
2275
2281
2276 * IPython/genutils.py (getoutputerror): added a function to
2282 * IPython/genutils.py (getoutputerror): added a function to
2277 capture separately the standard output and error of a command.
2283 capture separately the standard output and error of a command.
2278 After a comment from dang on the mailing lists. This code is
2284 After a comment from dang on the mailing lists. This code is
2279 basically a modified version of commands.getstatusoutput(), from
2285 basically a modified version of commands.getstatusoutput(), from
2280 the standard library.
2286 the standard library.
2281
2287
2282 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2288 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2283 '!!' as a special syntax (shorthand) to access @sx.
2289 '!!' as a special syntax (shorthand) to access @sx.
2284
2290
2285 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2291 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2286 command and return its output as a list split on '\n'.
2292 command and return its output as a list split on '\n'.
2287
2293
2288 2004-03-31 Fernando Perez <fperez@colorado.edu>
2294 2004-03-31 Fernando Perez <fperez@colorado.edu>
2289
2295
2290 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2296 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2291 method to dictionaries used as FakeModule instances if they lack
2297 method to dictionaries used as FakeModule instances if they lack
2292 it. At least pydoc in python2.3 breaks for runtime-defined
2298 it. At least pydoc in python2.3 breaks for runtime-defined
2293 functions without this hack. At some point I need to _really_
2299 functions without this hack. At some point I need to _really_
2294 understand what FakeModule is doing, because it's a gross hack.
2300 understand what FakeModule is doing, because it's a gross hack.
2295 But it solves Arnd's problem for now...
2301 But it solves Arnd's problem for now...
2296
2302
2297 2004-02-27 Fernando Perez <fperez@colorado.edu>
2303 2004-02-27 Fernando Perez <fperez@colorado.edu>
2298
2304
2299 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2305 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2300 mode would behave erratically. Also increased the number of
2306 mode would behave erratically. Also increased the number of
2301 possible logs in rotate mod to 999. Thanks to Rod Holland
2307 possible logs in rotate mod to 999. Thanks to Rod Holland
2302 <rhh@StructureLABS.com> for the report and fixes.
2308 <rhh@StructureLABS.com> for the report and fixes.
2303
2309
2304 2004-02-26 Fernando Perez <fperez@colorado.edu>
2310 2004-02-26 Fernando Perez <fperez@colorado.edu>
2305
2311
2306 * IPython/genutils.py (page): Check that the curses module really
2312 * IPython/genutils.py (page): Check that the curses module really
2307 has the initscr attribute before trying to use it. For some
2313 has the initscr attribute before trying to use it. For some
2308 reason, the Solaris curses module is missing this. I think this
2314 reason, the Solaris curses module is missing this. I think this
2309 should be considered a Solaris python bug, but I'm not sure.
2315 should be considered a Solaris python bug, but I'm not sure.
2310
2316
2311 2004-01-17 Fernando Perez <fperez@colorado.edu>
2317 2004-01-17 Fernando Perez <fperez@colorado.edu>
2312
2318
2313 * IPython/genutils.py (Stream.__init__): Changes to try to make
2319 * IPython/genutils.py (Stream.__init__): Changes to try to make
2314 ipython robust against stdin/out/err being closed by the user.
2320 ipython robust against stdin/out/err being closed by the user.
2315 This is 'user error' (and blocks a normal python session, at least
2321 This is 'user error' (and blocks a normal python session, at least
2316 the stdout case). However, Ipython should be able to survive such
2322 the stdout case). However, Ipython should be able to survive such
2317 instances of abuse as gracefully as possible. To simplify the
2323 instances of abuse as gracefully as possible. To simplify the
2318 coding and maintain compatibility with Gary Bishop's Term
2324 coding and maintain compatibility with Gary Bishop's Term
2319 contributions, I've made use of classmethods for this. I think
2325 contributions, I've made use of classmethods for this. I think
2320 this introduces a dependency on python 2.2.
2326 this introduces a dependency on python 2.2.
2321
2327
2322 2004-01-13 Fernando Perez <fperez@colorado.edu>
2328 2004-01-13 Fernando Perez <fperez@colorado.edu>
2323
2329
2324 * IPython/numutils.py (exp_safe): simplified the code a bit and
2330 * IPython/numutils.py (exp_safe): simplified the code a bit and
2325 removed the need for importing the kinds module altogether.
2331 removed the need for importing the kinds module altogether.
2326
2332
2327 2004-01-06 Fernando Perez <fperez@colorado.edu>
2333 2004-01-06 Fernando Perez <fperez@colorado.edu>
2328
2334
2329 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2335 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2330 a magic function instead, after some community feedback. No
2336 a magic function instead, after some community feedback. No
2331 special syntax will exist for it, but its name is deliberately
2337 special syntax will exist for it, but its name is deliberately
2332 very short.
2338 very short.
2333
2339
2334 2003-12-20 Fernando Perez <fperez@colorado.edu>
2340 2003-12-20 Fernando Perez <fperez@colorado.edu>
2335
2341
2336 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2342 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2337 new functionality, to automagically assign the result of a shell
2343 new functionality, to automagically assign the result of a shell
2338 command to a variable. I'll solicit some community feedback on
2344 command to a variable. I'll solicit some community feedback on
2339 this before making it permanent.
2345 this before making it permanent.
2340
2346
2341 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2347 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2342 requested about callables for which inspect couldn't obtain a
2348 requested about callables for which inspect couldn't obtain a
2343 proper argspec. Thanks to a crash report sent by Etienne
2349 proper argspec. Thanks to a crash report sent by Etienne
2344 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2350 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2345
2351
2346 2003-12-09 Fernando Perez <fperez@colorado.edu>
2352 2003-12-09 Fernando Perez <fperez@colorado.edu>
2347
2353
2348 * IPython/genutils.py (page): patch for the pager to work across
2354 * IPython/genutils.py (page): patch for the pager to work across
2349 various versions of Windows. By Gary Bishop.
2355 various versions of Windows. By Gary Bishop.
2350
2356
2351 2003-12-04 Fernando Perez <fperez@colorado.edu>
2357 2003-12-04 Fernando Perez <fperez@colorado.edu>
2352
2358
2353 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2359 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2354 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2360 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2355 While I tested this and it looks ok, there may still be corner
2361 While I tested this and it looks ok, there may still be corner
2356 cases I've missed.
2362 cases I've missed.
2357
2363
2358 2003-12-01 Fernando Perez <fperez@colorado.edu>
2364 2003-12-01 Fernando Perez <fperez@colorado.edu>
2359
2365
2360 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2366 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2361 where a line like 'p,q=1,2' would fail because the automagic
2367 where a line like 'p,q=1,2' would fail because the automagic
2362 system would be triggered for @p.
2368 system would be triggered for @p.
2363
2369
2364 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2370 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2365 cleanups, code unmodified.
2371 cleanups, code unmodified.
2366
2372
2367 * IPython/genutils.py (Term): added a class for IPython to handle
2373 * IPython/genutils.py (Term): added a class for IPython to handle
2368 output. In most cases it will just be a proxy for stdout/err, but
2374 output. In most cases it will just be a proxy for stdout/err, but
2369 having this allows modifications to be made for some platforms,
2375 having this allows modifications to be made for some platforms,
2370 such as handling color escapes under Windows. All of this code
2376 such as handling color escapes under Windows. All of this code
2371 was contributed by Gary Bishop, with minor modifications by me.
2377 was contributed by Gary Bishop, with minor modifications by me.
2372 The actual changes affect many files.
2378 The actual changes affect many files.
2373
2379
2374 2003-11-30 Fernando Perez <fperez@colorado.edu>
2380 2003-11-30 Fernando Perez <fperez@colorado.edu>
2375
2381
2376 * IPython/iplib.py (file_matches): new completion code, courtesy
2382 * IPython/iplib.py (file_matches): new completion code, courtesy
2377 of Jeff Collins. This enables filename completion again under
2383 of Jeff Collins. This enables filename completion again under
2378 python 2.3, which disabled it at the C level.
2384 python 2.3, which disabled it at the C level.
2379
2385
2380 2003-11-11 Fernando Perez <fperez@colorado.edu>
2386 2003-11-11 Fernando Perez <fperez@colorado.edu>
2381
2387
2382 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2388 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2383 for Numeric.array(map(...)), but often convenient.
2389 for Numeric.array(map(...)), but often convenient.
2384
2390
2385 2003-11-05 Fernando Perez <fperez@colorado.edu>
2391 2003-11-05 Fernando Perez <fperez@colorado.edu>
2386
2392
2387 * IPython/numutils.py (frange): Changed a call from int() to
2393 * IPython/numutils.py (frange): Changed a call from int() to
2388 int(round()) to prevent a problem reported with arange() in the
2394 int(round()) to prevent a problem reported with arange() in the
2389 numpy list.
2395 numpy list.
2390
2396
2391 2003-10-06 Fernando Perez <fperez@colorado.edu>
2397 2003-10-06 Fernando Perez <fperez@colorado.edu>
2392
2398
2393 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2399 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2394 prevent crashes if sys lacks an argv attribute (it happens with
2400 prevent crashes if sys lacks an argv attribute (it happens with
2395 embedded interpreters which build a bare-bones sys module).
2401 embedded interpreters which build a bare-bones sys module).
2396 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2402 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2397
2403
2398 2003-09-24 Fernando Perez <fperez@colorado.edu>
2404 2003-09-24 Fernando Perez <fperez@colorado.edu>
2399
2405
2400 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2406 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2401 to protect against poorly written user objects where __getattr__
2407 to protect against poorly written user objects where __getattr__
2402 raises exceptions other than AttributeError. Thanks to a bug
2408 raises exceptions other than AttributeError. Thanks to a bug
2403 report by Oliver Sander <osander-AT-gmx.de>.
2409 report by Oliver Sander <osander-AT-gmx.de>.
2404
2410
2405 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2411 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2406 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2412 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2407
2413
2408 2003-09-09 Fernando Perez <fperez@colorado.edu>
2414 2003-09-09 Fernando Perez <fperez@colorado.edu>
2409
2415
2410 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2416 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2411 unpacking a list whith a callable as first element would
2417 unpacking a list whith a callable as first element would
2412 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2418 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2413 Collins.
2419 Collins.
2414
2420
2415 2003-08-25 *** Released version 0.5.0
2421 2003-08-25 *** Released version 0.5.0
2416
2422
2417 2003-08-22 Fernando Perez <fperez@colorado.edu>
2423 2003-08-22 Fernando Perez <fperez@colorado.edu>
2418
2424
2419 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2425 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2420 improperly defined user exceptions. Thanks to feedback from Mark
2426 improperly defined user exceptions. Thanks to feedback from Mark
2421 Russell <mrussell-AT-verio.net>.
2427 Russell <mrussell-AT-verio.net>.
2422
2428
2423 2003-08-20 Fernando Perez <fperez@colorado.edu>
2429 2003-08-20 Fernando Perez <fperez@colorado.edu>
2424
2430
2425 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2431 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2426 printing so that it would print multi-line string forms starting
2432 printing so that it would print multi-line string forms starting
2427 with a new line. This way the formatting is better respected for
2433 with a new line. This way the formatting is better respected for
2428 objects which work hard to make nice string forms.
2434 objects which work hard to make nice string forms.
2429
2435
2430 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2436 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2431 autocall would overtake data access for objects with both
2437 autocall would overtake data access for objects with both
2432 __getitem__ and __call__.
2438 __getitem__ and __call__.
2433
2439
2434 2003-08-19 *** Released version 0.5.0-rc1
2440 2003-08-19 *** Released version 0.5.0-rc1
2435
2441
2436 2003-08-19 Fernando Perez <fperez@colorado.edu>
2442 2003-08-19 Fernando Perez <fperez@colorado.edu>
2437
2443
2438 * IPython/deep_reload.py (load_tail): single tiny change here
2444 * IPython/deep_reload.py (load_tail): single tiny change here
2439 seems to fix the long-standing bug of dreload() failing to work
2445 seems to fix the long-standing bug of dreload() failing to work
2440 for dotted names. But this module is pretty tricky, so I may have
2446 for dotted names. But this module is pretty tricky, so I may have
2441 missed some subtlety. Needs more testing!.
2447 missed some subtlety. Needs more testing!.
2442
2448
2443 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2449 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2444 exceptions which have badly implemented __str__ methods.
2450 exceptions which have badly implemented __str__ methods.
2445 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2451 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2446 which I've been getting reports about from Python 2.3 users. I
2452 which I've been getting reports about from Python 2.3 users. I
2447 wish I had a simple test case to reproduce the problem, so I could
2453 wish I had a simple test case to reproduce the problem, so I could
2448 either write a cleaner workaround or file a bug report if
2454 either write a cleaner workaround or file a bug report if
2449 necessary.
2455 necessary.
2450
2456
2451 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2457 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2452 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2458 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2453 a bug report by Tjabo Kloppenburg.
2459 a bug report by Tjabo Kloppenburg.
2454
2460
2455 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2461 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2456 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2462 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2457 seems rather unstable. Thanks to a bug report by Tjabo
2463 seems rather unstable. Thanks to a bug report by Tjabo
2458 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2464 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2459
2465
2460 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2466 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2461 this out soon because of the critical fixes in the inner loop for
2467 this out soon because of the critical fixes in the inner loop for
2462 generators.
2468 generators.
2463
2469
2464 * IPython/Magic.py (Magic.getargspec): removed. This (and
2470 * IPython/Magic.py (Magic.getargspec): removed. This (and
2465 _get_def) have been obsoleted by OInspect for a long time, I
2471 _get_def) have been obsoleted by OInspect for a long time, I
2466 hadn't noticed that they were dead code.
2472 hadn't noticed that they were dead code.
2467 (Magic._ofind): restored _ofind functionality for a few literals
2473 (Magic._ofind): restored _ofind functionality for a few literals
2468 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2474 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2469 for things like "hello".capitalize?, since that would require a
2475 for things like "hello".capitalize?, since that would require a
2470 potentially dangerous eval() again.
2476 potentially dangerous eval() again.
2471
2477
2472 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2478 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2473 logic a bit more to clean up the escapes handling and minimize the
2479 logic a bit more to clean up the escapes handling and minimize the
2474 use of _ofind to only necessary cases. The interactive 'feel' of
2480 use of _ofind to only necessary cases. The interactive 'feel' of
2475 IPython should have improved quite a bit with the changes in
2481 IPython should have improved quite a bit with the changes in
2476 _prefilter and _ofind (besides being far safer than before).
2482 _prefilter and _ofind (besides being far safer than before).
2477
2483
2478 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2484 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2479 obscure, never reported). Edit would fail to find the object to
2485 obscure, never reported). Edit would fail to find the object to
2480 edit under some circumstances.
2486 edit under some circumstances.
2481 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2487 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2482 which were causing double-calling of generators. Those eval calls
2488 which were causing double-calling of generators. Those eval calls
2483 were _very_ dangerous, since code with side effects could be
2489 were _very_ dangerous, since code with side effects could be
2484 triggered. As they say, 'eval is evil'... These were the
2490 triggered. As they say, 'eval is evil'... These were the
2485 nastiest evals in IPython. Besides, _ofind is now far simpler,
2491 nastiest evals in IPython. Besides, _ofind is now far simpler,
2486 and it should also be quite a bit faster. Its use of inspect is
2492 and it should also be quite a bit faster. Its use of inspect is
2487 also safer, so perhaps some of the inspect-related crashes I've
2493 also safer, so perhaps some of the inspect-related crashes I've
2488 seen lately with Python 2.3 might be taken care of. That will
2494 seen lately with Python 2.3 might be taken care of. That will
2489 need more testing.
2495 need more testing.
2490
2496
2491 2003-08-17 Fernando Perez <fperez@colorado.edu>
2497 2003-08-17 Fernando Perez <fperez@colorado.edu>
2492
2498
2493 * IPython/iplib.py (InteractiveShell._prefilter): significant
2499 * IPython/iplib.py (InteractiveShell._prefilter): significant
2494 simplifications to the logic for handling user escapes. Faster
2500 simplifications to the logic for handling user escapes. Faster
2495 and simpler code.
2501 and simpler code.
2496
2502
2497 2003-08-14 Fernando Perez <fperez@colorado.edu>
2503 2003-08-14 Fernando Perez <fperez@colorado.edu>
2498
2504
2499 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2505 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2500 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2506 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2501 but it should be quite a bit faster. And the recursive version
2507 but it should be quite a bit faster. And the recursive version
2502 generated O(log N) intermediate storage for all rank>1 arrays,
2508 generated O(log N) intermediate storage for all rank>1 arrays,
2503 even if they were contiguous.
2509 even if they were contiguous.
2504 (l1norm): Added this function.
2510 (l1norm): Added this function.
2505 (norm): Added this function for arbitrary norms (including
2511 (norm): Added this function for arbitrary norms (including
2506 l-infinity). l1 and l2 are still special cases for convenience
2512 l-infinity). l1 and l2 are still special cases for convenience
2507 and speed.
2513 and speed.
2508
2514
2509 2003-08-03 Fernando Perez <fperez@colorado.edu>
2515 2003-08-03 Fernando Perez <fperez@colorado.edu>
2510
2516
2511 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2517 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2512 exceptions, which now raise PendingDeprecationWarnings in Python
2518 exceptions, which now raise PendingDeprecationWarnings in Python
2513 2.3. There were some in Magic and some in Gnuplot2.
2519 2.3. There were some in Magic and some in Gnuplot2.
2514
2520
2515 2003-06-30 Fernando Perez <fperez@colorado.edu>
2521 2003-06-30 Fernando Perez <fperez@colorado.edu>
2516
2522
2517 * IPython/genutils.py (page): modified to call curses only for
2523 * IPython/genutils.py (page): modified to call curses only for
2518 terminals where TERM=='xterm'. After problems under many other
2524 terminals where TERM=='xterm'. After problems under many other
2519 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2525 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2520
2526
2521 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2527 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2522 would be triggered when readline was absent. This was just an old
2528 would be triggered when readline was absent. This was just an old
2523 debugging statement I'd forgotten to take out.
2529 debugging statement I'd forgotten to take out.
2524
2530
2525 2003-06-20 Fernando Perez <fperez@colorado.edu>
2531 2003-06-20 Fernando Perez <fperez@colorado.edu>
2526
2532
2527 * IPython/genutils.py (clock): modified to return only user time
2533 * IPython/genutils.py (clock): modified to return only user time
2528 (not counting system time), after a discussion on scipy. While
2534 (not counting system time), after a discussion on scipy. While
2529 system time may be a useful quantity occasionally, it may much
2535 system time may be a useful quantity occasionally, it may much
2530 more easily be skewed by occasional swapping or other similar
2536 more easily be skewed by occasional swapping or other similar
2531 activity.
2537 activity.
2532
2538
2533 2003-06-05 Fernando Perez <fperez@colorado.edu>
2539 2003-06-05 Fernando Perez <fperez@colorado.edu>
2534
2540
2535 * IPython/numutils.py (identity): new function, for building
2541 * IPython/numutils.py (identity): new function, for building
2536 arbitrary rank Kronecker deltas (mostly backwards compatible with
2542 arbitrary rank Kronecker deltas (mostly backwards compatible with
2537 Numeric.identity)
2543 Numeric.identity)
2538
2544
2539 2003-06-03 Fernando Perez <fperez@colorado.edu>
2545 2003-06-03 Fernando Perez <fperez@colorado.edu>
2540
2546
2541 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2547 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2542 arguments passed to magics with spaces, to allow trailing '\' to
2548 arguments passed to magics with spaces, to allow trailing '\' to
2543 work normally (mainly for Windows users).
2549 work normally (mainly for Windows users).
2544
2550
2545 2003-05-29 Fernando Perez <fperez@colorado.edu>
2551 2003-05-29 Fernando Perez <fperez@colorado.edu>
2546
2552
2547 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2553 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2548 instead of pydoc.help. This fixes a bizarre behavior where
2554 instead of pydoc.help. This fixes a bizarre behavior where
2549 printing '%s' % locals() would trigger the help system. Now
2555 printing '%s' % locals() would trigger the help system. Now
2550 ipython behaves like normal python does.
2556 ipython behaves like normal python does.
2551
2557
2552 Note that if one does 'from pydoc import help', the bizarre
2558 Note that if one does 'from pydoc import help', the bizarre
2553 behavior returns, but this will also happen in normal python, so
2559 behavior returns, but this will also happen in normal python, so
2554 it's not an ipython bug anymore (it has to do with how pydoc.help
2560 it's not an ipython bug anymore (it has to do with how pydoc.help
2555 is implemented).
2561 is implemented).
2556
2562
2557 2003-05-22 Fernando Perez <fperez@colorado.edu>
2563 2003-05-22 Fernando Perez <fperez@colorado.edu>
2558
2564
2559 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2565 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2560 return [] instead of None when nothing matches, also match to end
2566 return [] instead of None when nothing matches, also match to end
2561 of line. Patch by Gary Bishop.
2567 of line. Patch by Gary Bishop.
2562
2568
2563 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2569 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2564 protection as before, for files passed on the command line. This
2570 protection as before, for files passed on the command line. This
2565 prevents the CrashHandler from kicking in if user files call into
2571 prevents the CrashHandler from kicking in if user files call into
2566 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2572 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2567 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2573 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2568
2574
2569 2003-05-20 *** Released version 0.4.0
2575 2003-05-20 *** Released version 0.4.0
2570
2576
2571 2003-05-20 Fernando Perez <fperez@colorado.edu>
2577 2003-05-20 Fernando Perez <fperez@colorado.edu>
2572
2578
2573 * setup.py: added support for manpages. It's a bit hackish b/c of
2579 * setup.py: added support for manpages. It's a bit hackish b/c of
2574 a bug in the way the bdist_rpm distutils target handles gzipped
2580 a bug in the way the bdist_rpm distutils target handles gzipped
2575 manpages, but it works. After a patch by Jack.
2581 manpages, but it works. After a patch by Jack.
2576
2582
2577 2003-05-19 Fernando Perez <fperez@colorado.edu>
2583 2003-05-19 Fernando Perez <fperez@colorado.edu>
2578
2584
2579 * IPython/numutils.py: added a mockup of the kinds module, since
2585 * IPython/numutils.py: added a mockup of the kinds module, since
2580 it was recently removed from Numeric. This way, numutils will
2586 it was recently removed from Numeric. This way, numutils will
2581 work for all users even if they are missing kinds.
2587 work for all users even if they are missing kinds.
2582
2588
2583 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2589 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2584 failure, which can occur with SWIG-wrapped extensions. After a
2590 failure, which can occur with SWIG-wrapped extensions. After a
2585 crash report from Prabhu.
2591 crash report from Prabhu.
2586
2592
2587 2003-05-16 Fernando Perez <fperez@colorado.edu>
2593 2003-05-16 Fernando Perez <fperez@colorado.edu>
2588
2594
2589 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2595 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2590 protect ipython from user code which may call directly
2596 protect ipython from user code which may call directly
2591 sys.excepthook (this looks like an ipython crash to the user, even
2597 sys.excepthook (this looks like an ipython crash to the user, even
2592 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2598 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2593 This is especially important to help users of WxWindows, but may
2599 This is especially important to help users of WxWindows, but may
2594 also be useful in other cases.
2600 also be useful in other cases.
2595
2601
2596 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2602 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2597 an optional tb_offset to be specified, and to preserve exception
2603 an optional tb_offset to be specified, and to preserve exception
2598 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2604 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2599
2605
2600 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2606 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2601
2607
2602 2003-05-15 Fernando Perez <fperez@colorado.edu>
2608 2003-05-15 Fernando Perez <fperez@colorado.edu>
2603
2609
2604 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2610 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2605 installing for a new user under Windows.
2611 installing for a new user under Windows.
2606
2612
2607 2003-05-12 Fernando Perez <fperez@colorado.edu>
2613 2003-05-12 Fernando Perez <fperez@colorado.edu>
2608
2614
2609 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2615 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2610 handler for Emacs comint-based lines. Currently it doesn't do
2616 handler for Emacs comint-based lines. Currently it doesn't do
2611 much (but importantly, it doesn't update the history cache). In
2617 much (but importantly, it doesn't update the history cache). In
2612 the future it may be expanded if Alex needs more functionality
2618 the future it may be expanded if Alex needs more functionality
2613 there.
2619 there.
2614
2620
2615 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2621 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2616 info to crash reports.
2622 info to crash reports.
2617
2623
2618 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2624 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2619 just like Python's -c. Also fixed crash with invalid -color
2625 just like Python's -c. Also fixed crash with invalid -color
2620 option value at startup. Thanks to Will French
2626 option value at startup. Thanks to Will French
2621 <wfrench-AT-bestweb.net> for the bug report.
2627 <wfrench-AT-bestweb.net> for the bug report.
2622
2628
2623 2003-05-09 Fernando Perez <fperez@colorado.edu>
2629 2003-05-09 Fernando Perez <fperez@colorado.edu>
2624
2630
2625 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2631 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2626 to EvalDict (it's a mapping, after all) and simplified its code
2632 to EvalDict (it's a mapping, after all) and simplified its code
2627 quite a bit, after a nice discussion on c.l.py where Gustavo
2633 quite a bit, after a nice discussion on c.l.py where Gustavo
2628 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2634 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2629
2635
2630 2003-04-30 Fernando Perez <fperez@colorado.edu>
2636 2003-04-30 Fernando Perez <fperez@colorado.edu>
2631
2637
2632 * IPython/genutils.py (timings_out): modified it to reduce its
2638 * IPython/genutils.py (timings_out): modified it to reduce its
2633 overhead in the common reps==1 case.
2639 overhead in the common reps==1 case.
2634
2640
2635 2003-04-29 Fernando Perez <fperez@colorado.edu>
2641 2003-04-29 Fernando Perez <fperez@colorado.edu>
2636
2642
2637 * IPython/genutils.py (timings_out): Modified to use the resource
2643 * IPython/genutils.py (timings_out): Modified to use the resource
2638 module, which avoids the wraparound problems of time.clock().
2644 module, which avoids the wraparound problems of time.clock().
2639
2645
2640 2003-04-17 *** Released version 0.2.15pre4
2646 2003-04-17 *** Released version 0.2.15pre4
2641
2647
2642 2003-04-17 Fernando Perez <fperez@colorado.edu>
2648 2003-04-17 Fernando Perez <fperez@colorado.edu>
2643
2649
2644 * setup.py (scriptfiles): Split windows-specific stuff over to a
2650 * setup.py (scriptfiles): Split windows-specific stuff over to a
2645 separate file, in an attempt to have a Windows GUI installer.
2651 separate file, in an attempt to have a Windows GUI installer.
2646 That didn't work, but part of the groundwork is done.
2652 That didn't work, but part of the groundwork is done.
2647
2653
2648 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2654 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2649 indent/unindent with 4 spaces. Particularly useful in combination
2655 indent/unindent with 4 spaces. Particularly useful in combination
2650 with the new auto-indent option.
2656 with the new auto-indent option.
2651
2657
2652 2003-04-16 Fernando Perez <fperez@colorado.edu>
2658 2003-04-16 Fernando Perez <fperez@colorado.edu>
2653
2659
2654 * IPython/Magic.py: various replacements of self.rc for
2660 * IPython/Magic.py: various replacements of self.rc for
2655 self.shell.rc. A lot more remains to be done to fully disentangle
2661 self.shell.rc. A lot more remains to be done to fully disentangle
2656 this class from the main Shell class.
2662 this class from the main Shell class.
2657
2663
2658 * IPython/GnuplotRuntime.py: added checks for mouse support so
2664 * IPython/GnuplotRuntime.py: added checks for mouse support so
2659 that we don't try to enable it if the current gnuplot doesn't
2665 that we don't try to enable it if the current gnuplot doesn't
2660 really support it. Also added checks so that we don't try to
2666 really support it. Also added checks so that we don't try to
2661 enable persist under Windows (where Gnuplot doesn't recognize the
2667 enable persist under Windows (where Gnuplot doesn't recognize the
2662 option).
2668 option).
2663
2669
2664 * IPython/iplib.py (InteractiveShell.interact): Added optional
2670 * IPython/iplib.py (InteractiveShell.interact): Added optional
2665 auto-indenting code, after a patch by King C. Shu
2671 auto-indenting code, after a patch by King C. Shu
2666 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2672 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2667 get along well with pasting indented code. If I ever figure out
2673 get along well with pasting indented code. If I ever figure out
2668 how to make that part go well, it will become on by default.
2674 how to make that part go well, it will become on by default.
2669
2675
2670 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2676 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2671 crash ipython if there was an unmatched '%' in the user's prompt
2677 crash ipython if there was an unmatched '%' in the user's prompt
2672 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2678 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2673
2679
2674 * IPython/iplib.py (InteractiveShell.interact): removed the
2680 * IPython/iplib.py (InteractiveShell.interact): removed the
2675 ability to ask the user whether he wants to crash or not at the
2681 ability to ask the user whether he wants to crash or not at the
2676 'last line' exception handler. Calling functions at that point
2682 'last line' exception handler. Calling functions at that point
2677 changes the stack, and the error reports would have incorrect
2683 changes the stack, and the error reports would have incorrect
2678 tracebacks.
2684 tracebacks.
2679
2685
2680 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2686 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2681 pass through a peger a pretty-printed form of any object. After a
2687 pass through a peger a pretty-printed form of any object. After a
2682 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2688 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2683
2689
2684 2003-04-14 Fernando Perez <fperez@colorado.edu>
2690 2003-04-14 Fernando Perez <fperez@colorado.edu>
2685
2691
2686 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2692 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2687 all files in ~ would be modified at first install (instead of
2693 all files in ~ would be modified at first install (instead of
2688 ~/.ipython). This could be potentially disastrous, as the
2694 ~/.ipython). This could be potentially disastrous, as the
2689 modification (make line-endings native) could damage binary files.
2695 modification (make line-endings native) could damage binary files.
2690
2696
2691 2003-04-10 Fernando Perez <fperez@colorado.edu>
2697 2003-04-10 Fernando Perez <fperez@colorado.edu>
2692
2698
2693 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2699 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2694 handle only lines which are invalid python. This now means that
2700 handle only lines which are invalid python. This now means that
2695 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2701 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2696 for the bug report.
2702 for the bug report.
2697
2703
2698 2003-04-01 Fernando Perez <fperez@colorado.edu>
2704 2003-04-01 Fernando Perez <fperez@colorado.edu>
2699
2705
2700 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2706 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2701 where failing to set sys.last_traceback would crash pdb.pm().
2707 where failing to set sys.last_traceback would crash pdb.pm().
2702 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2708 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2703 report.
2709 report.
2704
2710
2705 2003-03-25 Fernando Perez <fperez@colorado.edu>
2711 2003-03-25 Fernando Perez <fperez@colorado.edu>
2706
2712
2707 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2713 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2708 before printing it (it had a lot of spurious blank lines at the
2714 before printing it (it had a lot of spurious blank lines at the
2709 end).
2715 end).
2710
2716
2711 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2717 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2712 output would be sent 21 times! Obviously people don't use this
2718 output would be sent 21 times! Obviously people don't use this
2713 too often, or I would have heard about it.
2719 too often, or I would have heard about it.
2714
2720
2715 2003-03-24 Fernando Perez <fperez@colorado.edu>
2721 2003-03-24 Fernando Perez <fperez@colorado.edu>
2716
2722
2717 * setup.py (scriptfiles): renamed the data_files parameter from
2723 * setup.py (scriptfiles): renamed the data_files parameter from
2718 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2724 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2719 for the patch.
2725 for the patch.
2720
2726
2721 2003-03-20 Fernando Perez <fperez@colorado.edu>
2727 2003-03-20 Fernando Perez <fperez@colorado.edu>
2722
2728
2723 * IPython/genutils.py (error): added error() and fatal()
2729 * IPython/genutils.py (error): added error() and fatal()
2724 functions.
2730 functions.
2725
2731
2726 2003-03-18 *** Released version 0.2.15pre3
2732 2003-03-18 *** Released version 0.2.15pre3
2727
2733
2728 2003-03-18 Fernando Perez <fperez@colorado.edu>
2734 2003-03-18 Fernando Perez <fperez@colorado.edu>
2729
2735
2730 * setupext/install_data_ext.py
2736 * setupext/install_data_ext.py
2731 (install_data_ext.initialize_options): Class contributed by Jack
2737 (install_data_ext.initialize_options): Class contributed by Jack
2732 Moffit for fixing the old distutils hack. He is sending this to
2738 Moffit for fixing the old distutils hack. He is sending this to
2733 the distutils folks so in the future we may not need it as a
2739 the distutils folks so in the future we may not need it as a
2734 private fix.
2740 private fix.
2735
2741
2736 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2742 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2737 changes for Debian packaging. See his patch for full details.
2743 changes for Debian packaging. See his patch for full details.
2738 The old distutils hack of making the ipythonrc* files carry a
2744 The old distutils hack of making the ipythonrc* files carry a
2739 bogus .py extension is gone, at last. Examples were moved to a
2745 bogus .py extension is gone, at last. Examples were moved to a
2740 separate subdir under doc/, and the separate executable scripts
2746 separate subdir under doc/, and the separate executable scripts
2741 now live in their own directory. Overall a great cleanup. The
2747 now live in their own directory. Overall a great cleanup. The
2742 manual was updated to use the new files, and setup.py has been
2748 manual was updated to use the new files, and setup.py has been
2743 fixed for this setup.
2749 fixed for this setup.
2744
2750
2745 * IPython/PyColorize.py (Parser.usage): made non-executable and
2751 * IPython/PyColorize.py (Parser.usage): made non-executable and
2746 created a pycolor wrapper around it to be included as a script.
2752 created a pycolor wrapper around it to be included as a script.
2747
2753
2748 2003-03-12 *** Released version 0.2.15pre2
2754 2003-03-12 *** Released version 0.2.15pre2
2749
2755
2750 2003-03-12 Fernando Perez <fperez@colorado.edu>
2756 2003-03-12 Fernando Perez <fperez@colorado.edu>
2751
2757
2752 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2758 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2753 long-standing problem with garbage characters in some terminals.
2759 long-standing problem with garbage characters in some terminals.
2754 The issue was really that the \001 and \002 escapes must _only_ be
2760 The issue was really that the \001 and \002 escapes must _only_ be
2755 passed to input prompts (which call readline), but _never_ to
2761 passed to input prompts (which call readline), but _never_ to
2756 normal text to be printed on screen. I changed ColorANSI to have
2762 normal text to be printed on screen. I changed ColorANSI to have
2757 two classes: TermColors and InputTermColors, each with the
2763 two classes: TermColors and InputTermColors, each with the
2758 appropriate escapes for input prompts or normal text. The code in
2764 appropriate escapes for input prompts or normal text. The code in
2759 Prompts.py got slightly more complicated, but this very old and
2765 Prompts.py got slightly more complicated, but this very old and
2760 annoying bug is finally fixed.
2766 annoying bug is finally fixed.
2761
2767
2762 All the credit for nailing down the real origin of this problem
2768 All the credit for nailing down the real origin of this problem
2763 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2769 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2764 *Many* thanks to him for spending quite a bit of effort on this.
2770 *Many* thanks to him for spending quite a bit of effort on this.
2765
2771
2766 2003-03-05 *** Released version 0.2.15pre1
2772 2003-03-05 *** Released version 0.2.15pre1
2767
2773
2768 2003-03-03 Fernando Perez <fperez@colorado.edu>
2774 2003-03-03 Fernando Perez <fperez@colorado.edu>
2769
2775
2770 * IPython/FakeModule.py: Moved the former _FakeModule to a
2776 * IPython/FakeModule.py: Moved the former _FakeModule to a
2771 separate file, because it's also needed by Magic (to fix a similar
2777 separate file, because it's also needed by Magic (to fix a similar
2772 pickle-related issue in @run).
2778 pickle-related issue in @run).
2773
2779
2774 2003-03-02 Fernando Perez <fperez@colorado.edu>
2780 2003-03-02 Fernando Perez <fperez@colorado.edu>
2775
2781
2776 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2782 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2777 the autocall option at runtime.
2783 the autocall option at runtime.
2778 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2784 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2779 across Magic.py to start separating Magic from InteractiveShell.
2785 across Magic.py to start separating Magic from InteractiveShell.
2780 (Magic._ofind): Fixed to return proper namespace for dotted
2786 (Magic._ofind): Fixed to return proper namespace for dotted
2781 names. Before, a dotted name would always return 'not currently
2787 names. Before, a dotted name would always return 'not currently
2782 defined', because it would find the 'parent'. s.x would be found,
2788 defined', because it would find the 'parent'. s.x would be found,
2783 but since 'x' isn't defined by itself, it would get confused.
2789 but since 'x' isn't defined by itself, it would get confused.
2784 (Magic.magic_run): Fixed pickling problems reported by Ralf
2790 (Magic.magic_run): Fixed pickling problems reported by Ralf
2785 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2791 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2786 that I'd used when Mike Heeter reported similar issues at the
2792 that I'd used when Mike Heeter reported similar issues at the
2787 top-level, but now for @run. It boils down to injecting the
2793 top-level, but now for @run. It boils down to injecting the
2788 namespace where code is being executed with something that looks
2794 namespace where code is being executed with something that looks
2789 enough like a module to fool pickle.dump(). Since a pickle stores
2795 enough like a module to fool pickle.dump(). Since a pickle stores
2790 a named reference to the importing module, we need this for
2796 a named reference to the importing module, we need this for
2791 pickles to save something sensible.
2797 pickles to save something sensible.
2792
2798
2793 * IPython/ipmaker.py (make_IPython): added an autocall option.
2799 * IPython/ipmaker.py (make_IPython): added an autocall option.
2794
2800
2795 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2801 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2796 the auto-eval code. Now autocalling is an option, and the code is
2802 the auto-eval code. Now autocalling is an option, and the code is
2797 also vastly safer. There is no more eval() involved at all.
2803 also vastly safer. There is no more eval() involved at all.
2798
2804
2799 2003-03-01 Fernando Perez <fperez@colorado.edu>
2805 2003-03-01 Fernando Perez <fperez@colorado.edu>
2800
2806
2801 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2807 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2802 dict with named keys instead of a tuple.
2808 dict with named keys instead of a tuple.
2803
2809
2804 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2810 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2805
2811
2806 * setup.py (make_shortcut): Fixed message about directories
2812 * setup.py (make_shortcut): Fixed message about directories
2807 created during Windows installation (the directories were ok, just
2813 created during Windows installation (the directories were ok, just
2808 the printed message was misleading). Thanks to Chris Liechti
2814 the printed message was misleading). Thanks to Chris Liechti
2809 <cliechti-AT-gmx.net> for the heads up.
2815 <cliechti-AT-gmx.net> for the heads up.
2810
2816
2811 2003-02-21 Fernando Perez <fperez@colorado.edu>
2817 2003-02-21 Fernando Perez <fperez@colorado.edu>
2812
2818
2813 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2819 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2814 of ValueError exception when checking for auto-execution. This
2820 of ValueError exception when checking for auto-execution. This
2815 one is raised by things like Numeric arrays arr.flat when the
2821 one is raised by things like Numeric arrays arr.flat when the
2816 array is non-contiguous.
2822 array is non-contiguous.
2817
2823
2818 2003-01-31 Fernando Perez <fperez@colorado.edu>
2824 2003-01-31 Fernando Perez <fperez@colorado.edu>
2819
2825
2820 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2826 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2821 not return any value at all (even though the command would get
2827 not return any value at all (even though the command would get
2822 executed).
2828 executed).
2823 (xsys): Flush stdout right after printing the command to ensure
2829 (xsys): Flush stdout right after printing the command to ensure
2824 proper ordering of commands and command output in the total
2830 proper ordering of commands and command output in the total
2825 output.
2831 output.
2826 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2832 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2827 system/getoutput as defaults. The old ones are kept for
2833 system/getoutput as defaults. The old ones are kept for
2828 compatibility reasons, so no code which uses this library needs
2834 compatibility reasons, so no code which uses this library needs
2829 changing.
2835 changing.
2830
2836
2831 2003-01-27 *** Released version 0.2.14
2837 2003-01-27 *** Released version 0.2.14
2832
2838
2833 2003-01-25 Fernando Perez <fperez@colorado.edu>
2839 2003-01-25 Fernando Perez <fperez@colorado.edu>
2834
2840
2835 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2841 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2836 functions defined in previous edit sessions could not be re-edited
2842 functions defined in previous edit sessions could not be re-edited
2837 (because the temp files were immediately removed). Now temp files
2843 (because the temp files were immediately removed). Now temp files
2838 are removed only at IPython's exit.
2844 are removed only at IPython's exit.
2839 (Magic.magic_run): Improved @run to perform shell-like expansions
2845 (Magic.magic_run): Improved @run to perform shell-like expansions
2840 on its arguments (~users and $VARS). With this, @run becomes more
2846 on its arguments (~users and $VARS). With this, @run becomes more
2841 like a normal command-line.
2847 like a normal command-line.
2842
2848
2843 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2849 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2844 bugs related to embedding and cleaned up that code. A fairly
2850 bugs related to embedding and cleaned up that code. A fairly
2845 important one was the impossibility to access the global namespace
2851 important one was the impossibility to access the global namespace
2846 through the embedded IPython (only local variables were visible).
2852 through the embedded IPython (only local variables were visible).
2847
2853
2848 2003-01-14 Fernando Perez <fperez@colorado.edu>
2854 2003-01-14 Fernando Perez <fperez@colorado.edu>
2849
2855
2850 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2856 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2851 auto-calling to be a bit more conservative. Now it doesn't get
2857 auto-calling to be a bit more conservative. Now it doesn't get
2852 triggered if any of '!=()<>' are in the rest of the input line, to
2858 triggered if any of '!=()<>' are in the rest of the input line, to
2853 allow comparing callables. Thanks to Alex for the heads up.
2859 allow comparing callables. Thanks to Alex for the heads up.
2854
2860
2855 2003-01-07 Fernando Perez <fperez@colorado.edu>
2861 2003-01-07 Fernando Perez <fperez@colorado.edu>
2856
2862
2857 * IPython/genutils.py (page): fixed estimation of the number of
2863 * IPython/genutils.py (page): fixed estimation of the number of
2858 lines in a string to be paged to simply count newlines. This
2864 lines in a string to be paged to simply count newlines. This
2859 prevents over-guessing due to embedded escape sequences. A better
2865 prevents over-guessing due to embedded escape sequences. A better
2860 long-term solution would involve stripping out the control chars
2866 long-term solution would involve stripping out the control chars
2861 for the count, but it's potentially so expensive I just don't
2867 for the count, but it's potentially so expensive I just don't
2862 think it's worth doing.
2868 think it's worth doing.
2863
2869
2864 2002-12-19 *** Released version 0.2.14pre50
2870 2002-12-19 *** Released version 0.2.14pre50
2865
2871
2866 2002-12-19 Fernando Perez <fperez@colorado.edu>
2872 2002-12-19 Fernando Perez <fperez@colorado.edu>
2867
2873
2868 * tools/release (version): Changed release scripts to inform
2874 * tools/release (version): Changed release scripts to inform
2869 Andrea and build a NEWS file with a list of recent changes.
2875 Andrea and build a NEWS file with a list of recent changes.
2870
2876
2871 * IPython/ColorANSI.py (__all__): changed terminal detection
2877 * IPython/ColorANSI.py (__all__): changed terminal detection
2872 code. Seems to work better for xterms without breaking
2878 code. Seems to work better for xterms without breaking
2873 konsole. Will need more testing to determine if WinXP and Mac OSX
2879 konsole. Will need more testing to determine if WinXP and Mac OSX
2874 also work ok.
2880 also work ok.
2875
2881
2876 2002-12-18 *** Released version 0.2.14pre49
2882 2002-12-18 *** Released version 0.2.14pre49
2877
2883
2878 2002-12-18 Fernando Perez <fperez@colorado.edu>
2884 2002-12-18 Fernando Perez <fperez@colorado.edu>
2879
2885
2880 * Docs: added new info about Mac OSX, from Andrea.
2886 * Docs: added new info about Mac OSX, from Andrea.
2881
2887
2882 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2888 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2883 allow direct plotting of python strings whose format is the same
2889 allow direct plotting of python strings whose format is the same
2884 of gnuplot data files.
2890 of gnuplot data files.
2885
2891
2886 2002-12-16 Fernando Perez <fperez@colorado.edu>
2892 2002-12-16 Fernando Perez <fperez@colorado.edu>
2887
2893
2888 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2894 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2889 value of exit question to be acknowledged.
2895 value of exit question to be acknowledged.
2890
2896
2891 2002-12-03 Fernando Perez <fperez@colorado.edu>
2897 2002-12-03 Fernando Perez <fperez@colorado.edu>
2892
2898
2893 * IPython/ipmaker.py: removed generators, which had been added
2899 * IPython/ipmaker.py: removed generators, which had been added
2894 by mistake in an earlier debugging run. This was causing trouble
2900 by mistake in an earlier debugging run. This was causing trouble
2895 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2901 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2896 for pointing this out.
2902 for pointing this out.
2897
2903
2898 2002-11-17 Fernando Perez <fperez@colorado.edu>
2904 2002-11-17 Fernando Perez <fperez@colorado.edu>
2899
2905
2900 * Manual: updated the Gnuplot section.
2906 * Manual: updated the Gnuplot section.
2901
2907
2902 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2908 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2903 a much better split of what goes in Runtime and what goes in
2909 a much better split of what goes in Runtime and what goes in
2904 Interactive.
2910 Interactive.
2905
2911
2906 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2912 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2907 being imported from iplib.
2913 being imported from iplib.
2908
2914
2909 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2915 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2910 for command-passing. Now the global Gnuplot instance is called
2916 for command-passing. Now the global Gnuplot instance is called
2911 'gp' instead of 'g', which was really a far too fragile and
2917 'gp' instead of 'g', which was really a far too fragile and
2912 common name.
2918 common name.
2913
2919
2914 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2920 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2915 bounding boxes generated by Gnuplot for square plots.
2921 bounding boxes generated by Gnuplot for square plots.
2916
2922
2917 * IPython/genutils.py (popkey): new function added. I should
2923 * IPython/genutils.py (popkey): new function added. I should
2918 suggest this on c.l.py as a dict method, it seems useful.
2924 suggest this on c.l.py as a dict method, it seems useful.
2919
2925
2920 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2926 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2921 to transparently handle PostScript generation. MUCH better than
2927 to transparently handle PostScript generation. MUCH better than
2922 the previous plot_eps/replot_eps (which I removed now). The code
2928 the previous plot_eps/replot_eps (which I removed now). The code
2923 is also fairly clean and well documented now (including
2929 is also fairly clean and well documented now (including
2924 docstrings).
2930 docstrings).
2925
2931
2926 2002-11-13 Fernando Perez <fperez@colorado.edu>
2932 2002-11-13 Fernando Perez <fperez@colorado.edu>
2927
2933
2928 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2934 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2929 (inconsistent with options).
2935 (inconsistent with options).
2930
2936
2931 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2937 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2932 manually disabled, I don't know why. Fixed it.
2938 manually disabled, I don't know why. Fixed it.
2933 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2939 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2934 eps output.
2940 eps output.
2935
2941
2936 2002-11-12 Fernando Perez <fperez@colorado.edu>
2942 2002-11-12 Fernando Perez <fperez@colorado.edu>
2937
2943
2938 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2944 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2939 don't propagate up to caller. Fixes crash reported by François
2945 don't propagate up to caller. Fixes crash reported by François
2940 Pinard.
2946 Pinard.
2941
2947
2942 2002-11-09 Fernando Perez <fperez@colorado.edu>
2948 2002-11-09 Fernando Perez <fperez@colorado.edu>
2943
2949
2944 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2950 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2945 history file for new users.
2951 history file for new users.
2946 (make_IPython): fixed bug where initial install would leave the
2952 (make_IPython): fixed bug where initial install would leave the
2947 user running in the .ipython dir.
2953 user running in the .ipython dir.
2948 (make_IPython): fixed bug where config dir .ipython would be
2954 (make_IPython): fixed bug where config dir .ipython would be
2949 created regardless of the given -ipythondir option. Thanks to Cory
2955 created regardless of the given -ipythondir option. Thanks to Cory
2950 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2956 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2951
2957
2952 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2958 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2953 type confirmations. Will need to use it in all of IPython's code
2959 type confirmations. Will need to use it in all of IPython's code
2954 consistently.
2960 consistently.
2955
2961
2956 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2962 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2957 context to print 31 lines instead of the default 5. This will make
2963 context to print 31 lines instead of the default 5. This will make
2958 the crash reports extremely detailed in case the problem is in
2964 the crash reports extremely detailed in case the problem is in
2959 libraries I don't have access to.
2965 libraries I don't have access to.
2960
2966
2961 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2967 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2962 line of defense' code to still crash, but giving users fair
2968 line of defense' code to still crash, but giving users fair
2963 warning. I don't want internal errors to go unreported: if there's
2969 warning. I don't want internal errors to go unreported: if there's
2964 an internal problem, IPython should crash and generate a full
2970 an internal problem, IPython should crash and generate a full
2965 report.
2971 report.
2966
2972
2967 2002-11-08 Fernando Perez <fperez@colorado.edu>
2973 2002-11-08 Fernando Perez <fperez@colorado.edu>
2968
2974
2969 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2975 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2970 otherwise uncaught exceptions which can appear if people set
2976 otherwise uncaught exceptions which can appear if people set
2971 sys.stdout to something badly broken. Thanks to a crash report
2977 sys.stdout to something badly broken. Thanks to a crash report
2972 from henni-AT-mail.brainbot.com.
2978 from henni-AT-mail.brainbot.com.
2973
2979
2974 2002-11-04 Fernando Perez <fperez@colorado.edu>
2980 2002-11-04 Fernando Perez <fperez@colorado.edu>
2975
2981
2976 * IPython/iplib.py (InteractiveShell.interact): added
2982 * IPython/iplib.py (InteractiveShell.interact): added
2977 __IPYTHON__active to the builtins. It's a flag which goes on when
2983 __IPYTHON__active to the builtins. It's a flag which goes on when
2978 the interaction starts and goes off again when it stops. This
2984 the interaction starts and goes off again when it stops. This
2979 allows embedding code to detect being inside IPython. Before this
2985 allows embedding code to detect being inside IPython. Before this
2980 was done via __IPYTHON__, but that only shows that an IPython
2986 was done via __IPYTHON__, but that only shows that an IPython
2981 instance has been created.
2987 instance has been created.
2982
2988
2983 * IPython/Magic.py (Magic.magic_env): I realized that in a
2989 * IPython/Magic.py (Magic.magic_env): I realized that in a
2984 UserDict, instance.data holds the data as a normal dict. So I
2990 UserDict, instance.data holds the data as a normal dict. So I
2985 modified @env to return os.environ.data instead of rebuilding a
2991 modified @env to return os.environ.data instead of rebuilding a
2986 dict by hand.
2992 dict by hand.
2987
2993
2988 2002-11-02 Fernando Perez <fperez@colorado.edu>
2994 2002-11-02 Fernando Perez <fperez@colorado.edu>
2989
2995
2990 * IPython/genutils.py (warn): changed so that level 1 prints no
2996 * IPython/genutils.py (warn): changed so that level 1 prints no
2991 header. Level 2 is now the default (with 'WARNING' header, as
2997 header. Level 2 is now the default (with 'WARNING' header, as
2992 before). I think I tracked all places where changes were needed in
2998 before). I think I tracked all places where changes were needed in
2993 IPython, but outside code using the old level numbering may have
2999 IPython, but outside code using the old level numbering may have
2994 broken.
3000 broken.
2995
3001
2996 * IPython/iplib.py (InteractiveShell.runcode): added this to
3002 * IPython/iplib.py (InteractiveShell.runcode): added this to
2997 handle the tracebacks in SystemExit traps correctly. The previous
3003 handle the tracebacks in SystemExit traps correctly. The previous
2998 code (through interact) was printing more of the stack than
3004 code (through interact) was printing more of the stack than
2999 necessary, showing IPython internal code to the user.
3005 necessary, showing IPython internal code to the user.
3000
3006
3001 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3007 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3002 default. Now that the default at the confirmation prompt is yes,
3008 default. Now that the default at the confirmation prompt is yes,
3003 it's not so intrusive. François' argument that ipython sessions
3009 it's not so intrusive. François' argument that ipython sessions
3004 tend to be complex enough not to lose them from an accidental C-d,
3010 tend to be complex enough not to lose them from an accidental C-d,
3005 is a valid one.
3011 is a valid one.
3006
3012
3007 * IPython/iplib.py (InteractiveShell.interact): added a
3013 * IPython/iplib.py (InteractiveShell.interact): added a
3008 showtraceback() call to the SystemExit trap, and modified the exit
3014 showtraceback() call to the SystemExit trap, and modified the exit
3009 confirmation to have yes as the default.
3015 confirmation to have yes as the default.
3010
3016
3011 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3017 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3012 this file. It's been gone from the code for a long time, this was
3018 this file. It's been gone from the code for a long time, this was
3013 simply leftover junk.
3019 simply leftover junk.
3014
3020
3015 2002-11-01 Fernando Perez <fperez@colorado.edu>
3021 2002-11-01 Fernando Perez <fperez@colorado.edu>
3016
3022
3017 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3023 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3018 added. If set, IPython now traps EOF and asks for
3024 added. If set, IPython now traps EOF and asks for
3019 confirmation. After a request by François Pinard.
3025 confirmation. After a request by François Pinard.
3020
3026
3021 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3027 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3022 of @abort, and with a new (better) mechanism for handling the
3028 of @abort, and with a new (better) mechanism for handling the
3023 exceptions.
3029 exceptions.
3024
3030
3025 2002-10-27 Fernando Perez <fperez@colorado.edu>
3031 2002-10-27 Fernando Perez <fperez@colorado.edu>
3026
3032
3027 * IPython/usage.py (__doc__): updated the --help information and
3033 * IPython/usage.py (__doc__): updated the --help information and
3028 the ipythonrc file to indicate that -log generates
3034 the ipythonrc file to indicate that -log generates
3029 ./ipython.log. Also fixed the corresponding info in @logstart.
3035 ./ipython.log. Also fixed the corresponding info in @logstart.
3030 This and several other fixes in the manuals thanks to reports by
3036 This and several other fixes in the manuals thanks to reports by
3031 François Pinard <pinard-AT-iro.umontreal.ca>.
3037 François Pinard <pinard-AT-iro.umontreal.ca>.
3032
3038
3033 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3039 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3034 refer to @logstart (instead of @log, which doesn't exist).
3040 refer to @logstart (instead of @log, which doesn't exist).
3035
3041
3036 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3042 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3037 AttributeError crash. Thanks to Christopher Armstrong
3043 AttributeError crash. Thanks to Christopher Armstrong
3038 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3044 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3039 introduced recently (in 0.2.14pre37) with the fix to the eval
3045 introduced recently (in 0.2.14pre37) with the fix to the eval
3040 problem mentioned below.
3046 problem mentioned below.
3041
3047
3042 2002-10-17 Fernando Perez <fperez@colorado.edu>
3048 2002-10-17 Fernando Perez <fperez@colorado.edu>
3043
3049
3044 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3050 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3045 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3051 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3046
3052
3047 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3053 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3048 this function to fix a problem reported by Alex Schmolck. He saw
3054 this function to fix a problem reported by Alex Schmolck. He saw
3049 it with list comprehensions and generators, which were getting
3055 it with list comprehensions and generators, which were getting
3050 called twice. The real problem was an 'eval' call in testing for
3056 called twice. The real problem was an 'eval' call in testing for
3051 automagic which was evaluating the input line silently.
3057 automagic which was evaluating the input line silently.
3052
3058
3053 This is a potentially very nasty bug, if the input has side
3059 This is a potentially very nasty bug, if the input has side
3054 effects which must not be repeated. The code is much cleaner now,
3060 effects which must not be repeated. The code is much cleaner now,
3055 without any blanket 'except' left and with a regexp test for
3061 without any blanket 'except' left and with a regexp test for
3056 actual function names.
3062 actual function names.
3057
3063
3058 But an eval remains, which I'm not fully comfortable with. I just
3064 But an eval remains, which I'm not fully comfortable with. I just
3059 don't know how to find out if an expression could be a callable in
3065 don't know how to find out if an expression could be a callable in
3060 the user's namespace without doing an eval on the string. However
3066 the user's namespace without doing an eval on the string. However
3061 that string is now much more strictly checked so that no code
3067 that string is now much more strictly checked so that no code
3062 slips by, so the eval should only happen for things that can
3068 slips by, so the eval should only happen for things that can
3063 really be only function/method names.
3069 really be only function/method names.
3064
3070
3065 2002-10-15 Fernando Perez <fperez@colorado.edu>
3071 2002-10-15 Fernando Perez <fperez@colorado.edu>
3066
3072
3067 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3073 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3068 OSX information to main manual, removed README_Mac_OSX file from
3074 OSX information to main manual, removed README_Mac_OSX file from
3069 distribution. Also updated credits for recent additions.
3075 distribution. Also updated credits for recent additions.
3070
3076
3071 2002-10-10 Fernando Perez <fperez@colorado.edu>
3077 2002-10-10 Fernando Perez <fperez@colorado.edu>
3072
3078
3073 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3079 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3074 terminal-related issues. Many thanks to Andrea Riciputi
3080 terminal-related issues. Many thanks to Andrea Riciputi
3075 <andrea.riciputi-AT-libero.it> for writing it.
3081 <andrea.riciputi-AT-libero.it> for writing it.
3076
3082
3077 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3083 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3078 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3084 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3079
3085
3080 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3086 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3081 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3087 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3082 <syver-en-AT-online.no> who both submitted patches for this problem.
3088 <syver-en-AT-online.no> who both submitted patches for this problem.
3083
3089
3084 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3090 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3085 global embedding to make sure that things don't overwrite user
3091 global embedding to make sure that things don't overwrite user
3086 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3092 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3087
3093
3088 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3094 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3089 compatibility. Thanks to Hayden Callow
3095 compatibility. Thanks to Hayden Callow
3090 <h.callow-AT-elec.canterbury.ac.nz>
3096 <h.callow-AT-elec.canterbury.ac.nz>
3091
3097
3092 2002-10-04 Fernando Perez <fperez@colorado.edu>
3098 2002-10-04 Fernando Perez <fperez@colorado.edu>
3093
3099
3094 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3100 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3095 Gnuplot.File objects.
3101 Gnuplot.File objects.
3096
3102
3097 2002-07-23 Fernando Perez <fperez@colorado.edu>
3103 2002-07-23 Fernando Perez <fperez@colorado.edu>
3098
3104
3099 * IPython/genutils.py (timing): Added timings() and timing() for
3105 * IPython/genutils.py (timing): Added timings() and timing() for
3100 quick access to the most commonly needed data, the execution
3106 quick access to the most commonly needed data, the execution
3101 times. Old timing() renamed to timings_out().
3107 times. Old timing() renamed to timings_out().
3102
3108
3103 2002-07-18 Fernando Perez <fperez@colorado.edu>
3109 2002-07-18 Fernando Perez <fperez@colorado.edu>
3104
3110
3105 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3111 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3106 bug with nested instances disrupting the parent's tab completion.
3112 bug with nested instances disrupting the parent's tab completion.
3107
3113
3108 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3114 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3109 all_completions code to begin the emacs integration.
3115 all_completions code to begin the emacs integration.
3110
3116
3111 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3117 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3112 argument to allow titling individual arrays when plotting.
3118 argument to allow titling individual arrays when plotting.
3113
3119
3114 2002-07-15 Fernando Perez <fperez@colorado.edu>
3120 2002-07-15 Fernando Perez <fperez@colorado.edu>
3115
3121
3116 * setup.py (make_shortcut): changed to retrieve the value of
3122 * setup.py (make_shortcut): changed to retrieve the value of
3117 'Program Files' directory from the registry (this value changes in
3123 'Program Files' directory from the registry (this value changes in
3118 non-english versions of Windows). Thanks to Thomas Fanslau
3124 non-english versions of Windows). Thanks to Thomas Fanslau
3119 <tfanslau-AT-gmx.de> for the report.
3125 <tfanslau-AT-gmx.de> for the report.
3120
3126
3121 2002-07-10 Fernando Perez <fperez@colorado.edu>
3127 2002-07-10 Fernando Perez <fperez@colorado.edu>
3122
3128
3123 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3129 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3124 a bug in pdb, which crashes if a line with only whitespace is
3130 a bug in pdb, which crashes if a line with only whitespace is
3125 entered. Bug report submitted to sourceforge.
3131 entered. Bug report submitted to sourceforge.
3126
3132
3127 2002-07-09 Fernando Perez <fperez@colorado.edu>
3133 2002-07-09 Fernando Perez <fperez@colorado.edu>
3128
3134
3129 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3135 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3130 reporting exceptions (it's a bug in inspect.py, I just set a
3136 reporting exceptions (it's a bug in inspect.py, I just set a
3131 workaround).
3137 workaround).
3132
3138
3133 2002-07-08 Fernando Perez <fperez@colorado.edu>
3139 2002-07-08 Fernando Perez <fperez@colorado.edu>
3134
3140
3135 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3141 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3136 __IPYTHON__ in __builtins__ to show up in user_ns.
3142 __IPYTHON__ in __builtins__ to show up in user_ns.
3137
3143
3138 2002-07-03 Fernando Perez <fperez@colorado.edu>
3144 2002-07-03 Fernando Perez <fperez@colorado.edu>
3139
3145
3140 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3146 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3141 name from @gp_set_instance to @gp_set_default.
3147 name from @gp_set_instance to @gp_set_default.
3142
3148
3143 * IPython/ipmaker.py (make_IPython): default editor value set to
3149 * IPython/ipmaker.py (make_IPython): default editor value set to
3144 '0' (a string), to match the rc file. Otherwise will crash when
3150 '0' (a string), to match the rc file. Otherwise will crash when
3145 .strip() is called on it.
3151 .strip() is called on it.
3146
3152
3147
3153
3148 2002-06-28 Fernando Perez <fperez@colorado.edu>
3154 2002-06-28 Fernando Perez <fperez@colorado.edu>
3149
3155
3150 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3156 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3151 of files in current directory when a file is executed via
3157 of files in current directory when a file is executed via
3152 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3158 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3153
3159
3154 * setup.py (manfiles): fix for rpm builds, submitted by RA
3160 * setup.py (manfiles): fix for rpm builds, submitted by RA
3155 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3161 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3156
3162
3157 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3163 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3158 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3164 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3159 string!). A. Schmolck caught this one.
3165 string!). A. Schmolck caught this one.
3160
3166
3161 2002-06-27 Fernando Perez <fperez@colorado.edu>
3167 2002-06-27 Fernando Perez <fperez@colorado.edu>
3162
3168
3163 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3169 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3164 defined files at the cmd line. __name__ wasn't being set to
3170 defined files at the cmd line. __name__ wasn't being set to
3165 __main__.
3171 __main__.
3166
3172
3167 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3173 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3168 regular lists and tuples besides Numeric arrays.
3174 regular lists and tuples besides Numeric arrays.
3169
3175
3170 * IPython/Prompts.py (CachedOutput.__call__): Added output
3176 * IPython/Prompts.py (CachedOutput.__call__): Added output
3171 supression for input ending with ';'. Similar to Mathematica and
3177 supression for input ending with ';'. Similar to Mathematica and
3172 Matlab. The _* vars and Out[] list are still updated, just like
3178 Matlab. The _* vars and Out[] list are still updated, just like
3173 Mathematica behaves.
3179 Mathematica behaves.
3174
3180
3175 2002-06-25 Fernando Perez <fperez@colorado.edu>
3181 2002-06-25 Fernando Perez <fperez@colorado.edu>
3176
3182
3177 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3183 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3178 .ini extensions for profiels under Windows.
3184 .ini extensions for profiels under Windows.
3179
3185
3180 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3186 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3181 string form. Fix contributed by Alexander Schmolck
3187 string form. Fix contributed by Alexander Schmolck
3182 <a.schmolck-AT-gmx.net>
3188 <a.schmolck-AT-gmx.net>
3183
3189
3184 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3190 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3185 pre-configured Gnuplot instance.
3191 pre-configured Gnuplot instance.
3186
3192
3187 2002-06-21 Fernando Perez <fperez@colorado.edu>
3193 2002-06-21 Fernando Perez <fperez@colorado.edu>
3188
3194
3189 * IPython/numutils.py (exp_safe): new function, works around the
3195 * IPython/numutils.py (exp_safe): new function, works around the
3190 underflow problems in Numeric.
3196 underflow problems in Numeric.
3191 (log2): New fn. Safe log in base 2: returns exact integer answer
3197 (log2): New fn. Safe log in base 2: returns exact integer answer
3192 for exact integer powers of 2.
3198 for exact integer powers of 2.
3193
3199
3194 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3200 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3195 properly.
3201 properly.
3196
3202
3197 2002-06-20 Fernando Perez <fperez@colorado.edu>
3203 2002-06-20 Fernando Perez <fperez@colorado.edu>
3198
3204
3199 * IPython/genutils.py (timing): new function like
3205 * IPython/genutils.py (timing): new function like
3200 Mathematica's. Similar to time_test, but returns more info.
3206 Mathematica's. Similar to time_test, but returns more info.
3201
3207
3202 2002-06-18 Fernando Perez <fperez@colorado.edu>
3208 2002-06-18 Fernando Perez <fperez@colorado.edu>
3203
3209
3204 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3210 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3205 according to Mike Heeter's suggestions.
3211 according to Mike Heeter's suggestions.
3206
3212
3207 2002-06-16 Fernando Perez <fperez@colorado.edu>
3213 2002-06-16 Fernando Perez <fperez@colorado.edu>
3208
3214
3209 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3215 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3210 system. GnuplotMagic is gone as a user-directory option. New files
3216 system. GnuplotMagic is gone as a user-directory option. New files
3211 make it easier to use all the gnuplot stuff both from external
3217 make it easier to use all the gnuplot stuff both from external
3212 programs as well as from IPython. Had to rewrite part of
3218 programs as well as from IPython. Had to rewrite part of
3213 hardcopy() b/c of a strange bug: often the ps files simply don't
3219 hardcopy() b/c of a strange bug: often the ps files simply don't
3214 get created, and require a repeat of the command (often several
3220 get created, and require a repeat of the command (often several
3215 times).
3221 times).
3216
3222
3217 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3223 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3218 resolve output channel at call time, so that if sys.stderr has
3224 resolve output channel at call time, so that if sys.stderr has
3219 been redirected by user this gets honored.
3225 been redirected by user this gets honored.
3220
3226
3221 2002-06-13 Fernando Perez <fperez@colorado.edu>
3227 2002-06-13 Fernando Perez <fperez@colorado.edu>
3222
3228
3223 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3229 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3224 IPShell. Kept a copy with the old names to avoid breaking people's
3230 IPShell. Kept a copy with the old names to avoid breaking people's
3225 embedded code.
3231 embedded code.
3226
3232
3227 * IPython/ipython: simplified it to the bare minimum after
3233 * IPython/ipython: simplified it to the bare minimum after
3228 Holger's suggestions. Added info about how to use it in
3234 Holger's suggestions. Added info about how to use it in
3229 PYTHONSTARTUP.
3235 PYTHONSTARTUP.
3230
3236
3231 * IPython/Shell.py (IPythonShell): changed the options passing
3237 * IPython/Shell.py (IPythonShell): changed the options passing
3232 from a string with funky %s replacements to a straight list. Maybe
3238 from a string with funky %s replacements to a straight list. Maybe
3233 a bit more typing, but it follows sys.argv conventions, so there's
3239 a bit more typing, but it follows sys.argv conventions, so there's
3234 less special-casing to remember.
3240 less special-casing to remember.
3235
3241
3236 2002-06-12 Fernando Perez <fperez@colorado.edu>
3242 2002-06-12 Fernando Perez <fperez@colorado.edu>
3237
3243
3238 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3244 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3239 command. Thanks to a suggestion by Mike Heeter.
3245 command. Thanks to a suggestion by Mike Heeter.
3240 (Magic.magic_pfile): added behavior to look at filenames if given
3246 (Magic.magic_pfile): added behavior to look at filenames if given
3241 arg is not a defined object.
3247 arg is not a defined object.
3242 (Magic.magic_save): New @save function to save code snippets. Also
3248 (Magic.magic_save): New @save function to save code snippets. Also
3243 a Mike Heeter idea.
3249 a Mike Heeter idea.
3244
3250
3245 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3251 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3246 plot() and replot(). Much more convenient now, especially for
3252 plot() and replot(). Much more convenient now, especially for
3247 interactive use.
3253 interactive use.
3248
3254
3249 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3255 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3250 filenames.
3256 filenames.
3251
3257
3252 2002-06-02 Fernando Perez <fperez@colorado.edu>
3258 2002-06-02 Fernando Perez <fperez@colorado.edu>
3253
3259
3254 * IPython/Struct.py (Struct.__init__): modified to admit
3260 * IPython/Struct.py (Struct.__init__): modified to admit
3255 initialization via another struct.
3261 initialization via another struct.
3256
3262
3257 * IPython/genutils.py (SystemExec.__init__): New stateful
3263 * IPython/genutils.py (SystemExec.__init__): New stateful
3258 interface to xsys and bq. Useful for writing system scripts.
3264 interface to xsys and bq. Useful for writing system scripts.
3259
3265
3260 2002-05-30 Fernando Perez <fperez@colorado.edu>
3266 2002-05-30 Fernando Perez <fperez@colorado.edu>
3261
3267
3262 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3268 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3263 documents. This will make the user download smaller (it's getting
3269 documents. This will make the user download smaller (it's getting
3264 too big).
3270 too big).
3265
3271
3266 2002-05-29 Fernando Perez <fperez@colorado.edu>
3272 2002-05-29 Fernando Perez <fperez@colorado.edu>
3267
3273
3268 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3274 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3269 fix problems with shelve and pickle. Seems to work, but I don't
3275 fix problems with shelve and pickle. Seems to work, but I don't
3270 know if corner cases break it. Thanks to Mike Heeter
3276 know if corner cases break it. Thanks to Mike Heeter
3271 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3277 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3272
3278
3273 2002-05-24 Fernando Perez <fperez@colorado.edu>
3279 2002-05-24 Fernando Perez <fperez@colorado.edu>
3274
3280
3275 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3281 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3276 macros having broken.
3282 macros having broken.
3277
3283
3278 2002-05-21 Fernando Perez <fperez@colorado.edu>
3284 2002-05-21 Fernando Perez <fperez@colorado.edu>
3279
3285
3280 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3286 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3281 introduced logging bug: all history before logging started was
3287 introduced logging bug: all history before logging started was
3282 being written one character per line! This came from the redesign
3288 being written one character per line! This came from the redesign
3283 of the input history as a special list which slices to strings,
3289 of the input history as a special list which slices to strings,
3284 not to lists.
3290 not to lists.
3285
3291
3286 2002-05-20 Fernando Perez <fperez@colorado.edu>
3292 2002-05-20 Fernando Perez <fperez@colorado.edu>
3287
3293
3288 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3294 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3289 be an attribute of all classes in this module. The design of these
3295 be an attribute of all classes in this module. The design of these
3290 classes needs some serious overhauling.
3296 classes needs some serious overhauling.
3291
3297
3292 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3298 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3293 which was ignoring '_' in option names.
3299 which was ignoring '_' in option names.
3294
3300
3295 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3301 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3296 'Verbose_novars' to 'Context' and made it the new default. It's a
3302 'Verbose_novars' to 'Context' and made it the new default. It's a
3297 bit more readable and also safer than verbose.
3303 bit more readable and also safer than verbose.
3298
3304
3299 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3305 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3300 triple-quoted strings.
3306 triple-quoted strings.
3301
3307
3302 * IPython/OInspect.py (__all__): new module exposing the object
3308 * IPython/OInspect.py (__all__): new module exposing the object
3303 introspection facilities. Now the corresponding magics are dummy
3309 introspection facilities. Now the corresponding magics are dummy
3304 wrappers around this. Having this module will make it much easier
3310 wrappers around this. Having this module will make it much easier
3305 to put these functions into our modified pdb.
3311 to put these functions into our modified pdb.
3306 This new object inspector system uses the new colorizing module,
3312 This new object inspector system uses the new colorizing module,
3307 so source code and other things are nicely syntax highlighted.
3313 so source code and other things are nicely syntax highlighted.
3308
3314
3309 2002-05-18 Fernando Perez <fperez@colorado.edu>
3315 2002-05-18 Fernando Perez <fperez@colorado.edu>
3310
3316
3311 * IPython/ColorANSI.py: Split the coloring tools into a separate
3317 * IPython/ColorANSI.py: Split the coloring tools into a separate
3312 module so I can use them in other code easier (they were part of
3318 module so I can use them in other code easier (they were part of
3313 ultraTB).
3319 ultraTB).
3314
3320
3315 2002-05-17 Fernando Perez <fperez@colorado.edu>
3321 2002-05-17 Fernando Perez <fperez@colorado.edu>
3316
3322
3317 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3323 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3318 fixed it to set the global 'g' also to the called instance, as
3324 fixed it to set the global 'g' also to the called instance, as
3319 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3325 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3320 user's 'g' variables).
3326 user's 'g' variables).
3321
3327
3322 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3328 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3323 global variables (aliases to _ih,_oh) so that users which expect
3329 global variables (aliases to _ih,_oh) so that users which expect
3324 In[5] or Out[7] to work aren't unpleasantly surprised.
3330 In[5] or Out[7] to work aren't unpleasantly surprised.
3325 (InputList.__getslice__): new class to allow executing slices of
3331 (InputList.__getslice__): new class to allow executing slices of
3326 input history directly. Very simple class, complements the use of
3332 input history directly. Very simple class, complements the use of
3327 macros.
3333 macros.
3328
3334
3329 2002-05-16 Fernando Perez <fperez@colorado.edu>
3335 2002-05-16 Fernando Perez <fperez@colorado.edu>
3330
3336
3331 * setup.py (docdirbase): make doc directory be just doc/IPython
3337 * setup.py (docdirbase): make doc directory be just doc/IPython
3332 without version numbers, it will reduce clutter for users.
3338 without version numbers, it will reduce clutter for users.
3333
3339
3334 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3340 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3335 execfile call to prevent possible memory leak. See for details:
3341 execfile call to prevent possible memory leak. See for details:
3336 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3342 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3337
3343
3338 2002-05-15 Fernando Perez <fperez@colorado.edu>
3344 2002-05-15 Fernando Perez <fperez@colorado.edu>
3339
3345
3340 * IPython/Magic.py (Magic.magic_psource): made the object
3346 * IPython/Magic.py (Magic.magic_psource): made the object
3341 introspection names be more standard: pdoc, pdef, pfile and
3347 introspection names be more standard: pdoc, pdef, pfile and
3342 psource. They all print/page their output, and it makes
3348 psource. They all print/page their output, and it makes
3343 remembering them easier. Kept old names for compatibility as
3349 remembering them easier. Kept old names for compatibility as
3344 aliases.
3350 aliases.
3345
3351
3346 2002-05-14 Fernando Perez <fperez@colorado.edu>
3352 2002-05-14 Fernando Perez <fperez@colorado.edu>
3347
3353
3348 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3354 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3349 what the mouse problem was. The trick is to use gnuplot with temp
3355 what the mouse problem was. The trick is to use gnuplot with temp
3350 files and NOT with pipes (for data communication), because having
3356 files and NOT with pipes (for data communication), because having
3351 both pipes and the mouse on is bad news.
3357 both pipes and the mouse on is bad news.
3352
3358
3353 2002-05-13 Fernando Perez <fperez@colorado.edu>
3359 2002-05-13 Fernando Perez <fperez@colorado.edu>
3354
3360
3355 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3361 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3356 bug. Information would be reported about builtins even when
3362 bug. Information would be reported about builtins even when
3357 user-defined functions overrode them.
3363 user-defined functions overrode them.
3358
3364
3359 2002-05-11 Fernando Perez <fperez@colorado.edu>
3365 2002-05-11 Fernando Perez <fperez@colorado.edu>
3360
3366
3361 * IPython/__init__.py (__all__): removed FlexCompleter from
3367 * IPython/__init__.py (__all__): removed FlexCompleter from
3362 __all__ so that things don't fail in platforms without readline.
3368 __all__ so that things don't fail in platforms without readline.
3363
3369
3364 2002-05-10 Fernando Perez <fperez@colorado.edu>
3370 2002-05-10 Fernando Perez <fperez@colorado.edu>
3365
3371
3366 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3372 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3367 it requires Numeric, effectively making Numeric a dependency for
3373 it requires Numeric, effectively making Numeric a dependency for
3368 IPython.
3374 IPython.
3369
3375
3370 * Released 0.2.13
3376 * Released 0.2.13
3371
3377
3372 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3378 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3373 profiler interface. Now all the major options from the profiler
3379 profiler interface. Now all the major options from the profiler
3374 module are directly supported in IPython, both for single
3380 module are directly supported in IPython, both for single
3375 expressions (@prun) and for full programs (@run -p).
3381 expressions (@prun) and for full programs (@run -p).
3376
3382
3377 2002-05-09 Fernando Perez <fperez@colorado.edu>
3383 2002-05-09 Fernando Perez <fperez@colorado.edu>
3378
3384
3379 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3385 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3380 magic properly formatted for screen.
3386 magic properly formatted for screen.
3381
3387
3382 * setup.py (make_shortcut): Changed things to put pdf version in
3388 * setup.py (make_shortcut): Changed things to put pdf version in
3383 doc/ instead of doc/manual (had to change lyxport a bit).
3389 doc/ instead of doc/manual (had to change lyxport a bit).
3384
3390
3385 * IPython/Magic.py (Profile.string_stats): made profile runs go
3391 * IPython/Magic.py (Profile.string_stats): made profile runs go
3386 through pager (they are long and a pager allows searching, saving,
3392 through pager (they are long and a pager allows searching, saving,
3387 etc.)
3393 etc.)
3388
3394
3389 2002-05-08 Fernando Perez <fperez@colorado.edu>
3395 2002-05-08 Fernando Perez <fperez@colorado.edu>
3390
3396
3391 * Released 0.2.12
3397 * Released 0.2.12
3392
3398
3393 2002-05-06 Fernando Perez <fperez@colorado.edu>
3399 2002-05-06 Fernando Perez <fperez@colorado.edu>
3394
3400
3395 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3401 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3396 introduced); 'hist n1 n2' was broken.
3402 introduced); 'hist n1 n2' was broken.
3397 (Magic.magic_pdb): added optional on/off arguments to @pdb
3403 (Magic.magic_pdb): added optional on/off arguments to @pdb
3398 (Magic.magic_run): added option -i to @run, which executes code in
3404 (Magic.magic_run): added option -i to @run, which executes code in
3399 the IPython namespace instead of a clean one. Also added @irun as
3405 the IPython namespace instead of a clean one. Also added @irun as
3400 an alias to @run -i.
3406 an alias to @run -i.
3401
3407
3402 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3408 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3403 fixed (it didn't really do anything, the namespaces were wrong).
3409 fixed (it didn't really do anything, the namespaces were wrong).
3404
3410
3405 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3411 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3406
3412
3407 * IPython/__init__.py (__all__): Fixed package namespace, now
3413 * IPython/__init__.py (__all__): Fixed package namespace, now
3408 'import IPython' does give access to IPython.<all> as
3414 'import IPython' does give access to IPython.<all> as
3409 expected. Also renamed __release__ to Release.
3415 expected. Also renamed __release__ to Release.
3410
3416
3411 * IPython/Debugger.py (__license__): created new Pdb class which
3417 * IPython/Debugger.py (__license__): created new Pdb class which
3412 functions like a drop-in for the normal pdb.Pdb but does NOT
3418 functions like a drop-in for the normal pdb.Pdb but does NOT
3413 import readline by default. This way it doesn't muck up IPython's
3419 import readline by default. This way it doesn't muck up IPython's
3414 readline handling, and now tab-completion finally works in the
3420 readline handling, and now tab-completion finally works in the
3415 debugger -- sort of. It completes things globally visible, but the
3421 debugger -- sort of. It completes things globally visible, but the
3416 completer doesn't track the stack as pdb walks it. That's a bit
3422 completer doesn't track the stack as pdb walks it. That's a bit
3417 tricky, and I'll have to implement it later.
3423 tricky, and I'll have to implement it later.
3418
3424
3419 2002-05-05 Fernando Perez <fperez@colorado.edu>
3425 2002-05-05 Fernando Perez <fperez@colorado.edu>
3420
3426
3421 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3427 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3422 magic docstrings when printed via ? (explicit \'s were being
3428 magic docstrings when printed via ? (explicit \'s were being
3423 printed).
3429 printed).
3424
3430
3425 * IPython/ipmaker.py (make_IPython): fixed namespace
3431 * IPython/ipmaker.py (make_IPython): fixed namespace
3426 identification bug. Now variables loaded via logs or command-line
3432 identification bug. Now variables loaded via logs or command-line
3427 files are recognized in the interactive namespace by @who.
3433 files are recognized in the interactive namespace by @who.
3428
3434
3429 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3435 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3430 log replay system stemming from the string form of Structs.
3436 log replay system stemming from the string form of Structs.
3431
3437
3432 * IPython/Magic.py (Macro.__init__): improved macros to properly
3438 * IPython/Magic.py (Macro.__init__): improved macros to properly
3433 handle magic commands in them.
3439 handle magic commands in them.
3434 (Magic.magic_logstart): usernames are now expanded so 'logstart
3440 (Magic.magic_logstart): usernames are now expanded so 'logstart
3435 ~/mylog' now works.
3441 ~/mylog' now works.
3436
3442
3437 * IPython/iplib.py (complete): fixed bug where paths starting with
3443 * IPython/iplib.py (complete): fixed bug where paths starting with
3438 '/' would be completed as magic names.
3444 '/' would be completed as magic names.
3439
3445
3440 2002-05-04 Fernando Perez <fperez@colorado.edu>
3446 2002-05-04 Fernando Perez <fperez@colorado.edu>
3441
3447
3442 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3448 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3443 allow running full programs under the profiler's control.
3449 allow running full programs under the profiler's control.
3444
3450
3445 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3451 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3446 mode to report exceptions verbosely but without formatting
3452 mode to report exceptions verbosely but without formatting
3447 variables. This addresses the issue of ipython 'freezing' (it's
3453 variables. This addresses the issue of ipython 'freezing' (it's
3448 not frozen, but caught in an expensive formatting loop) when huge
3454 not frozen, but caught in an expensive formatting loop) when huge
3449 variables are in the context of an exception.
3455 variables are in the context of an exception.
3450 (VerboseTB.text): Added '--->' markers at line where exception was
3456 (VerboseTB.text): Added '--->' markers at line where exception was
3451 triggered. Much clearer to read, especially in NoColor modes.
3457 triggered. Much clearer to read, especially in NoColor modes.
3452
3458
3453 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3459 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3454 implemented in reverse when changing to the new parse_options().
3460 implemented in reverse when changing to the new parse_options().
3455
3461
3456 2002-05-03 Fernando Perez <fperez@colorado.edu>
3462 2002-05-03 Fernando Perez <fperez@colorado.edu>
3457
3463
3458 * IPython/Magic.py (Magic.parse_options): new function so that
3464 * IPython/Magic.py (Magic.parse_options): new function so that
3459 magics can parse options easier.
3465 magics can parse options easier.
3460 (Magic.magic_prun): new function similar to profile.run(),
3466 (Magic.magic_prun): new function similar to profile.run(),
3461 suggested by Chris Hart.
3467 suggested by Chris Hart.
3462 (Magic.magic_cd): fixed behavior so that it only changes if
3468 (Magic.magic_cd): fixed behavior so that it only changes if
3463 directory actually is in history.
3469 directory actually is in history.
3464
3470
3465 * IPython/usage.py (__doc__): added information about potential
3471 * IPython/usage.py (__doc__): added information about potential
3466 slowness of Verbose exception mode when there are huge data
3472 slowness of Verbose exception mode when there are huge data
3467 structures to be formatted (thanks to Archie Paulson).
3473 structures to be formatted (thanks to Archie Paulson).
3468
3474
3469 * IPython/ipmaker.py (make_IPython): Changed default logging
3475 * IPython/ipmaker.py (make_IPython): Changed default logging
3470 (when simply called with -log) to use curr_dir/ipython.log in
3476 (when simply called with -log) to use curr_dir/ipython.log in
3471 rotate mode. Fixed crash which was occuring with -log before
3477 rotate mode. Fixed crash which was occuring with -log before
3472 (thanks to Jim Boyle).
3478 (thanks to Jim Boyle).
3473
3479
3474 2002-05-01 Fernando Perez <fperez@colorado.edu>
3480 2002-05-01 Fernando Perez <fperez@colorado.edu>
3475
3481
3476 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3482 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3477 was nasty -- though somewhat of a corner case).
3483 was nasty -- though somewhat of a corner case).
3478
3484
3479 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3485 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3480 text (was a bug).
3486 text (was a bug).
3481
3487
3482 2002-04-30 Fernando Perez <fperez@colorado.edu>
3488 2002-04-30 Fernando Perez <fperez@colorado.edu>
3483
3489
3484 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3490 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3485 a print after ^D or ^C from the user so that the In[] prompt
3491 a print after ^D or ^C from the user so that the In[] prompt
3486 doesn't over-run the gnuplot one.
3492 doesn't over-run the gnuplot one.
3487
3493
3488 2002-04-29 Fernando Perez <fperez@colorado.edu>
3494 2002-04-29 Fernando Perez <fperez@colorado.edu>
3489
3495
3490 * Released 0.2.10
3496 * Released 0.2.10
3491
3497
3492 * IPython/__release__.py (version): get date dynamically.
3498 * IPython/__release__.py (version): get date dynamically.
3493
3499
3494 * Misc. documentation updates thanks to Arnd's comments. Also ran
3500 * Misc. documentation updates thanks to Arnd's comments. Also ran
3495 a full spellcheck on the manual (hadn't been done in a while).
3501 a full spellcheck on the manual (hadn't been done in a while).
3496
3502
3497 2002-04-27 Fernando Perez <fperez@colorado.edu>
3503 2002-04-27 Fernando Perez <fperez@colorado.edu>
3498
3504
3499 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3505 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3500 starting a log in mid-session would reset the input history list.
3506 starting a log in mid-session would reset the input history list.
3501
3507
3502 2002-04-26 Fernando Perez <fperez@colorado.edu>
3508 2002-04-26 Fernando Perez <fperez@colorado.edu>
3503
3509
3504 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3510 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3505 all files were being included in an update. Now anything in
3511 all files were being included in an update. Now anything in
3506 UserConfig that matches [A-Za-z]*.py will go (this excludes
3512 UserConfig that matches [A-Za-z]*.py will go (this excludes
3507 __init__.py)
3513 __init__.py)
3508
3514
3509 2002-04-25 Fernando Perez <fperez@colorado.edu>
3515 2002-04-25 Fernando Perez <fperez@colorado.edu>
3510
3516
3511 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3517 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3512 to __builtins__ so that any form of embedded or imported code can
3518 to __builtins__ so that any form of embedded or imported code can
3513 test for being inside IPython.
3519 test for being inside IPython.
3514
3520
3515 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3521 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3516 changed to GnuplotMagic because it's now an importable module,
3522 changed to GnuplotMagic because it's now an importable module,
3517 this makes the name follow that of the standard Gnuplot module.
3523 this makes the name follow that of the standard Gnuplot module.
3518 GnuplotMagic can now be loaded at any time in mid-session.
3524 GnuplotMagic can now be loaded at any time in mid-session.
3519
3525
3520 2002-04-24 Fernando Perez <fperez@colorado.edu>
3526 2002-04-24 Fernando Perez <fperez@colorado.edu>
3521
3527
3522 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3528 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3523 the globals (IPython has its own namespace) and the
3529 the globals (IPython has its own namespace) and the
3524 PhysicalQuantity stuff is much better anyway.
3530 PhysicalQuantity stuff is much better anyway.
3525
3531
3526 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3532 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3527 embedding example to standard user directory for
3533 embedding example to standard user directory for
3528 distribution. Also put it in the manual.
3534 distribution. Also put it in the manual.
3529
3535
3530 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3536 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3531 instance as first argument (so it doesn't rely on some obscure
3537 instance as first argument (so it doesn't rely on some obscure
3532 hidden global).
3538 hidden global).
3533
3539
3534 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3540 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3535 delimiters. While it prevents ().TAB from working, it allows
3541 delimiters. While it prevents ().TAB from working, it allows
3536 completions in open (... expressions. This is by far a more common
3542 completions in open (... expressions. This is by far a more common
3537 case.
3543 case.
3538
3544
3539 2002-04-23 Fernando Perez <fperez@colorado.edu>
3545 2002-04-23 Fernando Perez <fperez@colorado.edu>
3540
3546
3541 * IPython/Extensions/InterpreterPasteInput.py: new
3547 * IPython/Extensions/InterpreterPasteInput.py: new
3542 syntax-processing module for pasting lines with >>> or ... at the
3548 syntax-processing module for pasting lines with >>> or ... at the
3543 start.
3549 start.
3544
3550
3545 * IPython/Extensions/PhysicalQ_Interactive.py
3551 * IPython/Extensions/PhysicalQ_Interactive.py
3546 (PhysicalQuantityInteractive.__int__): fixed to work with either
3552 (PhysicalQuantityInteractive.__int__): fixed to work with either
3547 Numeric or math.
3553 Numeric or math.
3548
3554
3549 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3555 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3550 provided profiles. Now we have:
3556 provided profiles. Now we have:
3551 -math -> math module as * and cmath with its own namespace.
3557 -math -> math module as * and cmath with its own namespace.
3552 -numeric -> Numeric as *, plus gnuplot & grace
3558 -numeric -> Numeric as *, plus gnuplot & grace
3553 -physics -> same as before
3559 -physics -> same as before
3554
3560
3555 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3561 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3556 user-defined magics wouldn't be found by @magic if they were
3562 user-defined magics wouldn't be found by @magic if they were
3557 defined as class methods. Also cleaned up the namespace search
3563 defined as class methods. Also cleaned up the namespace search
3558 logic and the string building (to use %s instead of many repeated
3564 logic and the string building (to use %s instead of many repeated
3559 string adds).
3565 string adds).
3560
3566
3561 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3567 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3562 of user-defined magics to operate with class methods (cleaner, in
3568 of user-defined magics to operate with class methods (cleaner, in
3563 line with the gnuplot code).
3569 line with the gnuplot code).
3564
3570
3565 2002-04-22 Fernando Perez <fperez@colorado.edu>
3571 2002-04-22 Fernando Perez <fperez@colorado.edu>
3566
3572
3567 * setup.py: updated dependency list so that manual is updated when
3573 * setup.py: updated dependency list so that manual is updated when
3568 all included files change.
3574 all included files change.
3569
3575
3570 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3576 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3571 the delimiter removal option (the fix is ugly right now).
3577 the delimiter removal option (the fix is ugly right now).
3572
3578
3573 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3579 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3574 all of the math profile (quicker loading, no conflict between
3580 all of the math profile (quicker loading, no conflict between
3575 g-9.8 and g-gnuplot).
3581 g-9.8 and g-gnuplot).
3576
3582
3577 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3583 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3578 name of post-mortem files to IPython_crash_report.txt.
3584 name of post-mortem files to IPython_crash_report.txt.
3579
3585
3580 * Cleanup/update of the docs. Added all the new readline info and
3586 * Cleanup/update of the docs. Added all the new readline info and
3581 formatted all lists as 'real lists'.
3587 formatted all lists as 'real lists'.
3582
3588
3583 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3589 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3584 tab-completion options, since the full readline parse_and_bind is
3590 tab-completion options, since the full readline parse_and_bind is
3585 now accessible.
3591 now accessible.
3586
3592
3587 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3593 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3588 handling of readline options. Now users can specify any string to
3594 handling of readline options. Now users can specify any string to
3589 be passed to parse_and_bind(), as well as the delimiters to be
3595 be passed to parse_and_bind(), as well as the delimiters to be
3590 removed.
3596 removed.
3591 (InteractiveShell.__init__): Added __name__ to the global
3597 (InteractiveShell.__init__): Added __name__ to the global
3592 namespace so that things like Itpl which rely on its existence
3598 namespace so that things like Itpl which rely on its existence
3593 don't crash.
3599 don't crash.
3594 (InteractiveShell._prefilter): Defined the default with a _ so
3600 (InteractiveShell._prefilter): Defined the default with a _ so
3595 that prefilter() is easier to override, while the default one
3601 that prefilter() is easier to override, while the default one
3596 remains available.
3602 remains available.
3597
3603
3598 2002-04-18 Fernando Perez <fperez@colorado.edu>
3604 2002-04-18 Fernando Perez <fperez@colorado.edu>
3599
3605
3600 * Added information about pdb in the docs.
3606 * Added information about pdb in the docs.
3601
3607
3602 2002-04-17 Fernando Perez <fperez@colorado.edu>
3608 2002-04-17 Fernando Perez <fperez@colorado.edu>
3603
3609
3604 * IPython/ipmaker.py (make_IPython): added rc_override option to
3610 * IPython/ipmaker.py (make_IPython): added rc_override option to
3605 allow passing config options at creation time which may override
3611 allow passing config options at creation time which may override
3606 anything set in the config files or command line. This is
3612 anything set in the config files or command line. This is
3607 particularly useful for configuring embedded instances.
3613 particularly useful for configuring embedded instances.
3608
3614
3609 2002-04-15 Fernando Perez <fperez@colorado.edu>
3615 2002-04-15 Fernando Perez <fperez@colorado.edu>
3610
3616
3611 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3617 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3612 crash embedded instances because of the input cache falling out of
3618 crash embedded instances because of the input cache falling out of
3613 sync with the output counter.
3619 sync with the output counter.
3614
3620
3615 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3621 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3616 mode which calls pdb after an uncaught exception in IPython itself.
3622 mode which calls pdb after an uncaught exception in IPython itself.
3617
3623
3618 2002-04-14 Fernando Perez <fperez@colorado.edu>
3624 2002-04-14 Fernando Perez <fperez@colorado.edu>
3619
3625
3620 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3626 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3621 readline, fix it back after each call.
3627 readline, fix it back after each call.
3622
3628
3623 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3629 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3624 method to force all access via __call__(), which guarantees that
3630 method to force all access via __call__(), which guarantees that
3625 traceback references are properly deleted.
3631 traceback references are properly deleted.
3626
3632
3627 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3633 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3628 improve printing when pprint is in use.
3634 improve printing when pprint is in use.
3629
3635
3630 2002-04-13 Fernando Perez <fperez@colorado.edu>
3636 2002-04-13 Fernando Perez <fperez@colorado.edu>
3631
3637
3632 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3638 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3633 exceptions aren't caught anymore. If the user triggers one, he
3639 exceptions aren't caught anymore. If the user triggers one, he
3634 should know why he's doing it and it should go all the way up,
3640 should know why he's doing it and it should go all the way up,
3635 just like any other exception. So now @abort will fully kill the
3641 just like any other exception. So now @abort will fully kill the
3636 embedded interpreter and the embedding code (unless that happens
3642 embedded interpreter and the embedding code (unless that happens
3637 to catch SystemExit).
3643 to catch SystemExit).
3638
3644
3639 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3645 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3640 and a debugger() method to invoke the interactive pdb debugger
3646 and a debugger() method to invoke the interactive pdb debugger
3641 after printing exception information. Also added the corresponding
3647 after printing exception information. Also added the corresponding
3642 -pdb option and @pdb magic to control this feature, and updated
3648 -pdb option and @pdb magic to control this feature, and updated
3643 the docs. After a suggestion from Christopher Hart
3649 the docs. After a suggestion from Christopher Hart
3644 (hart-AT-caltech.edu).
3650 (hart-AT-caltech.edu).
3645
3651
3646 2002-04-12 Fernando Perez <fperez@colorado.edu>
3652 2002-04-12 Fernando Perez <fperez@colorado.edu>
3647
3653
3648 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3654 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3649 the exception handlers defined by the user (not the CrashHandler)
3655 the exception handlers defined by the user (not the CrashHandler)
3650 so that user exceptions don't trigger an ipython bug report.
3656 so that user exceptions don't trigger an ipython bug report.
3651
3657
3652 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3658 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3653 configurable (it should have always been so).
3659 configurable (it should have always been so).
3654
3660
3655 2002-03-26 Fernando Perez <fperez@colorado.edu>
3661 2002-03-26 Fernando Perez <fperez@colorado.edu>
3656
3662
3657 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3663 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3658 and there to fix embedding namespace issues. This should all be
3664 and there to fix embedding namespace issues. This should all be
3659 done in a more elegant way.
3665 done in a more elegant way.
3660
3666
3661 2002-03-25 Fernando Perez <fperez@colorado.edu>
3667 2002-03-25 Fernando Perez <fperez@colorado.edu>
3662
3668
3663 * IPython/genutils.py (get_home_dir): Try to make it work under
3669 * IPython/genutils.py (get_home_dir): Try to make it work under
3664 win9x also.
3670 win9x also.
3665
3671
3666 2002-03-20 Fernando Perez <fperez@colorado.edu>
3672 2002-03-20 Fernando Perez <fperez@colorado.edu>
3667
3673
3668 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3674 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3669 sys.displayhook untouched upon __init__.
3675 sys.displayhook untouched upon __init__.
3670
3676
3671 2002-03-19 Fernando Perez <fperez@colorado.edu>
3677 2002-03-19 Fernando Perez <fperez@colorado.edu>
3672
3678
3673 * Released 0.2.9 (for embedding bug, basically).
3679 * Released 0.2.9 (for embedding bug, basically).
3674
3680
3675 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3681 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3676 exceptions so that enclosing shell's state can be restored.
3682 exceptions so that enclosing shell's state can be restored.
3677
3683
3678 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3684 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3679 naming conventions in the .ipython/ dir.
3685 naming conventions in the .ipython/ dir.
3680
3686
3681 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3687 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3682 from delimiters list so filenames with - in them get expanded.
3688 from delimiters list so filenames with - in them get expanded.
3683
3689
3684 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3690 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3685 sys.displayhook not being properly restored after an embedded call.
3691 sys.displayhook not being properly restored after an embedded call.
3686
3692
3687 2002-03-18 Fernando Perez <fperez@colorado.edu>
3693 2002-03-18 Fernando Perez <fperez@colorado.edu>
3688
3694
3689 * Released 0.2.8
3695 * Released 0.2.8
3690
3696
3691 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3697 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3692 some files weren't being included in a -upgrade.
3698 some files weren't being included in a -upgrade.
3693 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3699 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3694 on' so that the first tab completes.
3700 on' so that the first tab completes.
3695 (InteractiveShell.handle_magic): fixed bug with spaces around
3701 (InteractiveShell.handle_magic): fixed bug with spaces around
3696 quotes breaking many magic commands.
3702 quotes breaking many magic commands.
3697
3703
3698 * setup.py: added note about ignoring the syntax error messages at
3704 * setup.py: added note about ignoring the syntax error messages at
3699 installation.
3705 installation.
3700
3706
3701 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3707 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3702 streamlining the gnuplot interface, now there's only one magic @gp.
3708 streamlining the gnuplot interface, now there's only one magic @gp.
3703
3709
3704 2002-03-17 Fernando Perez <fperez@colorado.edu>
3710 2002-03-17 Fernando Perez <fperez@colorado.edu>
3705
3711
3706 * IPython/UserConfig/magic_gnuplot.py: new name for the
3712 * IPython/UserConfig/magic_gnuplot.py: new name for the
3707 example-magic_pm.py file. Much enhanced system, now with a shell
3713 example-magic_pm.py file. Much enhanced system, now with a shell
3708 for communicating directly with gnuplot, one command at a time.
3714 for communicating directly with gnuplot, one command at a time.
3709
3715
3710 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3716 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3711 setting __name__=='__main__'.
3717 setting __name__=='__main__'.
3712
3718
3713 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3719 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3714 mini-shell for accessing gnuplot from inside ipython. Should
3720 mini-shell for accessing gnuplot from inside ipython. Should
3715 extend it later for grace access too. Inspired by Arnd's
3721 extend it later for grace access too. Inspired by Arnd's
3716 suggestion.
3722 suggestion.
3717
3723
3718 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3724 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3719 calling magic functions with () in their arguments. Thanks to Arnd
3725 calling magic functions with () in their arguments. Thanks to Arnd
3720 Baecker for pointing this to me.
3726 Baecker for pointing this to me.
3721
3727
3722 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3728 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3723 infinitely for integer or complex arrays (only worked with floats).
3729 infinitely for integer or complex arrays (only worked with floats).
3724
3730
3725 2002-03-16 Fernando Perez <fperez@colorado.edu>
3731 2002-03-16 Fernando Perez <fperez@colorado.edu>
3726
3732
3727 * setup.py: Merged setup and setup_windows into a single script
3733 * setup.py: Merged setup and setup_windows into a single script
3728 which properly handles things for windows users.
3734 which properly handles things for windows users.
3729
3735
3730 2002-03-15 Fernando Perez <fperez@colorado.edu>
3736 2002-03-15 Fernando Perez <fperez@colorado.edu>
3731
3737
3732 * Big change to the manual: now the magics are all automatically
3738 * Big change to the manual: now the magics are all automatically
3733 documented. This information is generated from their docstrings
3739 documented. This information is generated from their docstrings
3734 and put in a latex file included by the manual lyx file. This way
3740 and put in a latex file included by the manual lyx file. This way
3735 we get always up to date information for the magics. The manual
3741 we get always up to date information for the magics. The manual
3736 now also has proper version information, also auto-synced.
3742 now also has proper version information, also auto-synced.
3737
3743
3738 For this to work, an undocumented --magic_docstrings option was added.
3744 For this to work, an undocumented --magic_docstrings option was added.
3739
3745
3740 2002-03-13 Fernando Perez <fperez@colorado.edu>
3746 2002-03-13 Fernando Perez <fperez@colorado.edu>
3741
3747
3742 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3748 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3743 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3749 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3744
3750
3745 2002-03-12 Fernando Perez <fperez@colorado.edu>
3751 2002-03-12 Fernando Perez <fperez@colorado.edu>
3746
3752
3747 * IPython/ultraTB.py (TermColors): changed color escapes again to
3753 * IPython/ultraTB.py (TermColors): changed color escapes again to
3748 fix the (old, reintroduced) line-wrapping bug. Basically, if
3754 fix the (old, reintroduced) line-wrapping bug. Basically, if
3749 \001..\002 aren't given in the color escapes, lines get wrapped
3755 \001..\002 aren't given in the color escapes, lines get wrapped
3750 weirdly. But giving those screws up old xterms and emacs terms. So
3756 weirdly. But giving those screws up old xterms and emacs terms. So
3751 I added some logic for emacs terms to be ok, but I can't identify old
3757 I added some logic for emacs terms to be ok, but I can't identify old
3752 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3758 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3753
3759
3754 2002-03-10 Fernando Perez <fperez@colorado.edu>
3760 2002-03-10 Fernando Perez <fperez@colorado.edu>
3755
3761
3756 * IPython/usage.py (__doc__): Various documentation cleanups and
3762 * IPython/usage.py (__doc__): Various documentation cleanups and
3757 updates, both in usage docstrings and in the manual.
3763 updates, both in usage docstrings and in the manual.
3758
3764
3759 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3765 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3760 handling of caching. Set minimum acceptabe value for having a
3766 handling of caching. Set minimum acceptabe value for having a
3761 cache at 20 values.
3767 cache at 20 values.
3762
3768
3763 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3769 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3764 install_first_time function to a method, renamed it and added an
3770 install_first_time function to a method, renamed it and added an
3765 'upgrade' mode. Now people can update their config directory with
3771 'upgrade' mode. Now people can update their config directory with
3766 a simple command line switch (-upgrade, also new).
3772 a simple command line switch (-upgrade, also new).
3767
3773
3768 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3774 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3769 @file (convenient for automagic users under Python >= 2.2).
3775 @file (convenient for automagic users under Python >= 2.2).
3770 Removed @files (it seemed more like a plural than an abbrev. of
3776 Removed @files (it seemed more like a plural than an abbrev. of
3771 'file show').
3777 'file show').
3772
3778
3773 * IPython/iplib.py (install_first_time): Fixed crash if there were
3779 * IPython/iplib.py (install_first_time): Fixed crash if there were
3774 backup files ('~') in .ipython/ install directory.
3780 backup files ('~') in .ipython/ install directory.
3775
3781
3776 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3782 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3777 system. Things look fine, but these changes are fairly
3783 system. Things look fine, but these changes are fairly
3778 intrusive. Test them for a few days.
3784 intrusive. Test them for a few days.
3779
3785
3780 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3786 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3781 the prompts system. Now all in/out prompt strings are user
3787 the prompts system. Now all in/out prompt strings are user
3782 controllable. This is particularly useful for embedding, as one
3788 controllable. This is particularly useful for embedding, as one
3783 can tag embedded instances with particular prompts.
3789 can tag embedded instances with particular prompts.
3784
3790
3785 Also removed global use of sys.ps1/2, which now allows nested
3791 Also removed global use of sys.ps1/2, which now allows nested
3786 embeddings without any problems. Added command-line options for
3792 embeddings without any problems. Added command-line options for
3787 the prompt strings.
3793 the prompt strings.
3788
3794
3789 2002-03-08 Fernando Perez <fperez@colorado.edu>
3795 2002-03-08 Fernando Perez <fperez@colorado.edu>
3790
3796
3791 * IPython/UserConfig/example-embed-short.py (ipshell): added
3797 * IPython/UserConfig/example-embed-short.py (ipshell): added
3792 example file with the bare minimum code for embedding.
3798 example file with the bare minimum code for embedding.
3793
3799
3794 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3800 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3795 functionality for the embeddable shell to be activated/deactivated
3801 functionality for the embeddable shell to be activated/deactivated
3796 either globally or at each call.
3802 either globally or at each call.
3797
3803
3798 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3804 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3799 rewriting the prompt with '--->' for auto-inputs with proper
3805 rewriting the prompt with '--->' for auto-inputs with proper
3800 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3806 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3801 this is handled by the prompts class itself, as it should.
3807 this is handled by the prompts class itself, as it should.
3802
3808
3803 2002-03-05 Fernando Perez <fperez@colorado.edu>
3809 2002-03-05 Fernando Perez <fperez@colorado.edu>
3804
3810
3805 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3811 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3806 @logstart to avoid name clashes with the math log function.
3812 @logstart to avoid name clashes with the math log function.
3807
3813
3808 * Big updates to X/Emacs section of the manual.
3814 * Big updates to X/Emacs section of the manual.
3809
3815
3810 * Removed ipython_emacs. Milan explained to me how to pass
3816 * Removed ipython_emacs. Milan explained to me how to pass
3811 arguments to ipython through Emacs. Some day I'm going to end up
3817 arguments to ipython through Emacs. Some day I'm going to end up
3812 learning some lisp...
3818 learning some lisp...
3813
3819
3814 2002-03-04 Fernando Perez <fperez@colorado.edu>
3820 2002-03-04 Fernando Perez <fperez@colorado.edu>
3815
3821
3816 * IPython/ipython_emacs: Created script to be used as the
3822 * IPython/ipython_emacs: Created script to be used as the
3817 py-python-command Emacs variable so we can pass IPython
3823 py-python-command Emacs variable so we can pass IPython
3818 parameters. I can't figure out how to tell Emacs directly to pass
3824 parameters. I can't figure out how to tell Emacs directly to pass
3819 parameters to IPython, so a dummy shell script will do it.
3825 parameters to IPython, so a dummy shell script will do it.
3820
3826
3821 Other enhancements made for things to work better under Emacs'
3827 Other enhancements made for things to work better under Emacs'
3822 various types of terminals. Many thanks to Milan Zamazal
3828 various types of terminals. Many thanks to Milan Zamazal
3823 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3829 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3824
3830
3825 2002-03-01 Fernando Perez <fperez@colorado.edu>
3831 2002-03-01 Fernando Perez <fperez@colorado.edu>
3826
3832
3827 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3833 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3828 that loading of readline is now optional. This gives better
3834 that loading of readline is now optional. This gives better
3829 control to emacs users.
3835 control to emacs users.
3830
3836
3831 * IPython/ultraTB.py (__date__): Modified color escape sequences
3837 * IPython/ultraTB.py (__date__): Modified color escape sequences
3832 and now things work fine under xterm and in Emacs' term buffers
3838 and now things work fine under xterm and in Emacs' term buffers
3833 (though not shell ones). Well, in emacs you get colors, but all
3839 (though not shell ones). Well, in emacs you get colors, but all
3834 seem to be 'light' colors (no difference between dark and light
3840 seem to be 'light' colors (no difference between dark and light
3835 ones). But the garbage chars are gone, and also in xterms. It
3841 ones). But the garbage chars are gone, and also in xterms. It
3836 seems that now I'm using 'cleaner' ansi sequences.
3842 seems that now I'm using 'cleaner' ansi sequences.
3837
3843
3838 2002-02-21 Fernando Perez <fperez@colorado.edu>
3844 2002-02-21 Fernando Perez <fperez@colorado.edu>
3839
3845
3840 * Released 0.2.7 (mainly to publish the scoping fix).
3846 * Released 0.2.7 (mainly to publish the scoping fix).
3841
3847
3842 * IPython/Logger.py (Logger.logstate): added. A corresponding
3848 * IPython/Logger.py (Logger.logstate): added. A corresponding
3843 @logstate magic was created.
3849 @logstate magic was created.
3844
3850
3845 * IPython/Magic.py: fixed nested scoping problem under Python
3851 * IPython/Magic.py: fixed nested scoping problem under Python
3846 2.1.x (automagic wasn't working).
3852 2.1.x (automagic wasn't working).
3847
3853
3848 2002-02-20 Fernando Perez <fperez@colorado.edu>
3854 2002-02-20 Fernando Perez <fperez@colorado.edu>
3849
3855
3850 * Released 0.2.6.
3856 * Released 0.2.6.
3851
3857
3852 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3858 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3853 option so that logs can come out without any headers at all.
3859 option so that logs can come out without any headers at all.
3854
3860
3855 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3861 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3856 SciPy.
3862 SciPy.
3857
3863
3858 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3864 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3859 that embedded IPython calls don't require vars() to be explicitly
3865 that embedded IPython calls don't require vars() to be explicitly
3860 passed. Now they are extracted from the caller's frame (code
3866 passed. Now they are extracted from the caller's frame (code
3861 snatched from Eric Jones' weave). Added better documentation to
3867 snatched from Eric Jones' weave). Added better documentation to
3862 the section on embedding and the example file.
3868 the section on embedding and the example file.
3863
3869
3864 * IPython/genutils.py (page): Changed so that under emacs, it just
3870 * IPython/genutils.py (page): Changed so that under emacs, it just
3865 prints the string. You can then page up and down in the emacs
3871 prints the string. You can then page up and down in the emacs
3866 buffer itself. This is how the builtin help() works.
3872 buffer itself. This is how the builtin help() works.
3867
3873
3868 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3874 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3869 macro scoping: macros need to be executed in the user's namespace
3875 macro scoping: macros need to be executed in the user's namespace
3870 to work as if they had been typed by the user.
3876 to work as if they had been typed by the user.
3871
3877
3872 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3878 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3873 execute automatically (no need to type 'exec...'). They then
3879 execute automatically (no need to type 'exec...'). They then
3874 behave like 'true macros'. The printing system was also modified
3880 behave like 'true macros'. The printing system was also modified
3875 for this to work.
3881 for this to work.
3876
3882
3877 2002-02-19 Fernando Perez <fperez@colorado.edu>
3883 2002-02-19 Fernando Perez <fperez@colorado.edu>
3878
3884
3879 * IPython/genutils.py (page_file): new function for paging files
3885 * IPython/genutils.py (page_file): new function for paging files
3880 in an OS-independent way. Also necessary for file viewing to work
3886 in an OS-independent way. Also necessary for file viewing to work
3881 well inside Emacs buffers.
3887 well inside Emacs buffers.
3882 (page): Added checks for being in an emacs buffer.
3888 (page): Added checks for being in an emacs buffer.
3883 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3889 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3884 same bug in iplib.
3890 same bug in iplib.
3885
3891
3886 2002-02-18 Fernando Perez <fperez@colorado.edu>
3892 2002-02-18 Fernando Perez <fperez@colorado.edu>
3887
3893
3888 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3894 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3889 of readline so that IPython can work inside an Emacs buffer.
3895 of readline so that IPython can work inside an Emacs buffer.
3890
3896
3891 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3897 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3892 method signatures (they weren't really bugs, but it looks cleaner
3898 method signatures (they weren't really bugs, but it looks cleaner
3893 and keeps PyChecker happy).
3899 and keeps PyChecker happy).
3894
3900
3895 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3901 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3896 for implementing various user-defined hooks. Currently only
3902 for implementing various user-defined hooks. Currently only
3897 display is done.
3903 display is done.
3898
3904
3899 * IPython/Prompts.py (CachedOutput._display): changed display
3905 * IPython/Prompts.py (CachedOutput._display): changed display
3900 functions so that they can be dynamically changed by users easily.
3906 functions so that they can be dynamically changed by users easily.
3901
3907
3902 * IPython/Extensions/numeric_formats.py (num_display): added an
3908 * IPython/Extensions/numeric_formats.py (num_display): added an
3903 extension for printing NumPy arrays in flexible manners. It
3909 extension for printing NumPy arrays in flexible manners. It
3904 doesn't do anything yet, but all the structure is in
3910 doesn't do anything yet, but all the structure is in
3905 place. Ultimately the plan is to implement output format control
3911 place. Ultimately the plan is to implement output format control
3906 like in Octave.
3912 like in Octave.
3907
3913
3908 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3914 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3909 methods are found at run-time by all the automatic machinery.
3915 methods are found at run-time by all the automatic machinery.
3910
3916
3911 2002-02-17 Fernando Perez <fperez@colorado.edu>
3917 2002-02-17 Fernando Perez <fperez@colorado.edu>
3912
3918
3913 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3919 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3914 whole file a little.
3920 whole file a little.
3915
3921
3916 * ToDo: closed this document. Now there's a new_design.lyx
3922 * ToDo: closed this document. Now there's a new_design.lyx
3917 document for all new ideas. Added making a pdf of it for the
3923 document for all new ideas. Added making a pdf of it for the
3918 end-user distro.
3924 end-user distro.
3919
3925
3920 * IPython/Logger.py (Logger.switch_log): Created this to replace
3926 * IPython/Logger.py (Logger.switch_log): Created this to replace
3921 logon() and logoff(). It also fixes a nasty crash reported by
3927 logon() and logoff(). It also fixes a nasty crash reported by
3922 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3928 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3923
3929
3924 * IPython/iplib.py (complete): got auto-completion to work with
3930 * IPython/iplib.py (complete): got auto-completion to work with
3925 automagic (I had wanted this for a long time).
3931 automagic (I had wanted this for a long time).
3926
3932
3927 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3933 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3928 to @file, since file() is now a builtin and clashes with automagic
3934 to @file, since file() is now a builtin and clashes with automagic
3929 for @file.
3935 for @file.
3930
3936
3931 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3937 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3932 of this was previously in iplib, which had grown to more than 2000
3938 of this was previously in iplib, which had grown to more than 2000
3933 lines, way too long. No new functionality, but it makes managing
3939 lines, way too long. No new functionality, but it makes managing
3934 the code a bit easier.
3940 the code a bit easier.
3935
3941
3936 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3942 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3937 information to crash reports.
3943 information to crash reports.
3938
3944
3939 2002-02-12 Fernando Perez <fperez@colorado.edu>
3945 2002-02-12 Fernando Perez <fperez@colorado.edu>
3940
3946
3941 * Released 0.2.5.
3947 * Released 0.2.5.
3942
3948
3943 2002-02-11 Fernando Perez <fperez@colorado.edu>
3949 2002-02-11 Fernando Perez <fperez@colorado.edu>
3944
3950
3945 * Wrote a relatively complete Windows installer. It puts
3951 * Wrote a relatively complete Windows installer. It puts
3946 everything in place, creates Start Menu entries and fixes the
3952 everything in place, creates Start Menu entries and fixes the
3947 color issues. Nothing fancy, but it works.
3953 color issues. Nothing fancy, but it works.
3948
3954
3949 2002-02-10 Fernando Perez <fperez@colorado.edu>
3955 2002-02-10 Fernando Perez <fperez@colorado.edu>
3950
3956
3951 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3957 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3952 os.path.expanduser() call so that we can type @run ~/myfile.py and
3958 os.path.expanduser() call so that we can type @run ~/myfile.py and
3953 have thigs work as expected.
3959 have thigs work as expected.
3954
3960
3955 * IPython/genutils.py (page): fixed exception handling so things
3961 * IPython/genutils.py (page): fixed exception handling so things
3956 work both in Unix and Windows correctly. Quitting a pager triggers
3962 work both in Unix and Windows correctly. Quitting a pager triggers
3957 an IOError/broken pipe in Unix, and in windows not finding a pager
3963 an IOError/broken pipe in Unix, and in windows not finding a pager
3958 is also an IOError, so I had to actually look at the return value
3964 is also an IOError, so I had to actually look at the return value
3959 of the exception, not just the exception itself. Should be ok now.
3965 of the exception, not just the exception itself. Should be ok now.
3960
3966
3961 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3967 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3962 modified to allow case-insensitive color scheme changes.
3968 modified to allow case-insensitive color scheme changes.
3963
3969
3964 2002-02-09 Fernando Perez <fperez@colorado.edu>
3970 2002-02-09 Fernando Perez <fperez@colorado.edu>
3965
3971
3966 * IPython/genutils.py (native_line_ends): new function to leave
3972 * IPython/genutils.py (native_line_ends): new function to leave
3967 user config files with os-native line-endings.
3973 user config files with os-native line-endings.
3968
3974
3969 * README and manual updates.
3975 * README and manual updates.
3970
3976
3971 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3977 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3972 instead of StringType to catch Unicode strings.
3978 instead of StringType to catch Unicode strings.
3973
3979
3974 * IPython/genutils.py (filefind): fixed bug for paths with
3980 * IPython/genutils.py (filefind): fixed bug for paths with
3975 embedded spaces (very common in Windows).
3981 embedded spaces (very common in Windows).
3976
3982
3977 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3983 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3978 files under Windows, so that they get automatically associated
3984 files under Windows, so that they get automatically associated
3979 with a text editor. Windows makes it a pain to handle
3985 with a text editor. Windows makes it a pain to handle
3980 extension-less files.
3986 extension-less files.
3981
3987
3982 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3988 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3983 warning about readline only occur for Posix. In Windows there's no
3989 warning about readline only occur for Posix. In Windows there's no
3984 way to get readline, so why bother with the warning.
3990 way to get readline, so why bother with the warning.
3985
3991
3986 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3992 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3987 for __str__ instead of dir(self), since dir() changed in 2.2.
3993 for __str__ instead of dir(self), since dir() changed in 2.2.
3988
3994
3989 * Ported to Windows! Tested on XP, I suspect it should work fine
3995 * Ported to Windows! Tested on XP, I suspect it should work fine
3990 on NT/2000, but I don't think it will work on 98 et al. That
3996 on NT/2000, but I don't think it will work on 98 et al. That
3991 series of Windows is such a piece of junk anyway that I won't try
3997 series of Windows is such a piece of junk anyway that I won't try
3992 porting it there. The XP port was straightforward, showed a few
3998 porting it there. The XP port was straightforward, showed a few
3993 bugs here and there (fixed all), in particular some string
3999 bugs here and there (fixed all), in particular some string
3994 handling stuff which required considering Unicode strings (which
4000 handling stuff which required considering Unicode strings (which
3995 Windows uses). This is good, but hasn't been too tested :) No
4001 Windows uses). This is good, but hasn't been too tested :) No
3996 fancy installer yet, I'll put a note in the manual so people at
4002 fancy installer yet, I'll put a note in the manual so people at
3997 least make manually a shortcut.
4003 least make manually a shortcut.
3998
4004
3999 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4005 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4000 into a single one, "colors". This now controls both prompt and
4006 into a single one, "colors". This now controls both prompt and
4001 exception color schemes, and can be changed both at startup
4007 exception color schemes, and can be changed both at startup
4002 (either via command-line switches or via ipythonrc files) and at
4008 (either via command-line switches or via ipythonrc files) and at
4003 runtime, with @colors.
4009 runtime, with @colors.
4004 (Magic.magic_run): renamed @prun to @run and removed the old
4010 (Magic.magic_run): renamed @prun to @run and removed the old
4005 @run. The two were too similar to warrant keeping both.
4011 @run. The two were too similar to warrant keeping both.
4006
4012
4007 2002-02-03 Fernando Perez <fperez@colorado.edu>
4013 2002-02-03 Fernando Perez <fperez@colorado.edu>
4008
4014
4009 * IPython/iplib.py (install_first_time): Added comment on how to
4015 * IPython/iplib.py (install_first_time): Added comment on how to
4010 configure the color options for first-time users. Put a <return>
4016 configure the color options for first-time users. Put a <return>
4011 request at the end so that small-terminal users get a chance to
4017 request at the end so that small-terminal users get a chance to
4012 read the startup info.
4018 read the startup info.
4013
4019
4014 2002-01-23 Fernando Perez <fperez@colorado.edu>
4020 2002-01-23 Fernando Perez <fperez@colorado.edu>
4015
4021
4016 * IPython/iplib.py (CachedOutput.update): Changed output memory
4022 * IPython/iplib.py (CachedOutput.update): Changed output memory
4017 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4023 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4018 input history we still use _i. Did this b/c these variable are
4024 input history we still use _i. Did this b/c these variable are
4019 very commonly used in interactive work, so the less we need to
4025 very commonly used in interactive work, so the less we need to
4020 type the better off we are.
4026 type the better off we are.
4021 (Magic.magic_prun): updated @prun to better handle the namespaces
4027 (Magic.magic_prun): updated @prun to better handle the namespaces
4022 the file will run in, including a fix for __name__ not being set
4028 the file will run in, including a fix for __name__ not being set
4023 before.
4029 before.
4024
4030
4025 2002-01-20 Fernando Perez <fperez@colorado.edu>
4031 2002-01-20 Fernando Perez <fperez@colorado.edu>
4026
4032
4027 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4033 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4028 extra garbage for Python 2.2. Need to look more carefully into
4034 extra garbage for Python 2.2. Need to look more carefully into
4029 this later.
4035 this later.
4030
4036
4031 2002-01-19 Fernando Perez <fperez@colorado.edu>
4037 2002-01-19 Fernando Perez <fperez@colorado.edu>
4032
4038
4033 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4039 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4034 display SyntaxError exceptions properly formatted when they occur
4040 display SyntaxError exceptions properly formatted when they occur
4035 (they can be triggered by imported code).
4041 (they can be triggered by imported code).
4036
4042
4037 2002-01-18 Fernando Perez <fperez@colorado.edu>
4043 2002-01-18 Fernando Perez <fperez@colorado.edu>
4038
4044
4039 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4045 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4040 SyntaxError exceptions are reported nicely formatted, instead of
4046 SyntaxError exceptions are reported nicely formatted, instead of
4041 spitting out only offset information as before.
4047 spitting out only offset information as before.
4042 (Magic.magic_prun): Added the @prun function for executing
4048 (Magic.magic_prun): Added the @prun function for executing
4043 programs with command line args inside IPython.
4049 programs with command line args inside IPython.
4044
4050
4045 2002-01-16 Fernando Perez <fperez@colorado.edu>
4051 2002-01-16 Fernando Perez <fperez@colorado.edu>
4046
4052
4047 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4053 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4048 to *not* include the last item given in a range. This brings their
4054 to *not* include the last item given in a range. This brings their
4049 behavior in line with Python's slicing:
4055 behavior in line with Python's slicing:
4050 a[n1:n2] -> a[n1]...a[n2-1]
4056 a[n1:n2] -> a[n1]...a[n2-1]
4051 It may be a bit less convenient, but I prefer to stick to Python's
4057 It may be a bit less convenient, but I prefer to stick to Python's
4052 conventions *everywhere*, so users never have to wonder.
4058 conventions *everywhere*, so users never have to wonder.
4053 (Magic.magic_macro): Added @macro function to ease the creation of
4059 (Magic.magic_macro): Added @macro function to ease the creation of
4054 macros.
4060 macros.
4055
4061
4056 2002-01-05 Fernando Perez <fperez@colorado.edu>
4062 2002-01-05 Fernando Perez <fperez@colorado.edu>
4057
4063
4058 * Released 0.2.4.
4064 * Released 0.2.4.
4059
4065
4060 * IPython/iplib.py (Magic.magic_pdef):
4066 * IPython/iplib.py (Magic.magic_pdef):
4061 (InteractiveShell.safe_execfile): report magic lines and error
4067 (InteractiveShell.safe_execfile): report magic lines and error
4062 lines without line numbers so one can easily copy/paste them for
4068 lines without line numbers so one can easily copy/paste them for
4063 re-execution.
4069 re-execution.
4064
4070
4065 * Updated manual with recent changes.
4071 * Updated manual with recent changes.
4066
4072
4067 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4073 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4068 docstring printing when class? is called. Very handy for knowing
4074 docstring printing when class? is called. Very handy for knowing
4069 how to create class instances (as long as __init__ is well
4075 how to create class instances (as long as __init__ is well
4070 documented, of course :)
4076 documented, of course :)
4071 (Magic.magic_doc): print both class and constructor docstrings.
4077 (Magic.magic_doc): print both class and constructor docstrings.
4072 (Magic.magic_pdef): give constructor info if passed a class and
4078 (Magic.magic_pdef): give constructor info if passed a class and
4073 __call__ info for callable object instances.
4079 __call__ info for callable object instances.
4074
4080
4075 2002-01-04 Fernando Perez <fperez@colorado.edu>
4081 2002-01-04 Fernando Perez <fperez@colorado.edu>
4076
4082
4077 * Made deep_reload() off by default. It doesn't always work
4083 * Made deep_reload() off by default. It doesn't always work
4078 exactly as intended, so it's probably safer to have it off. It's
4084 exactly as intended, so it's probably safer to have it off. It's
4079 still available as dreload() anyway, so nothing is lost.
4085 still available as dreload() anyway, so nothing is lost.
4080
4086
4081 2002-01-02 Fernando Perez <fperez@colorado.edu>
4087 2002-01-02 Fernando Perez <fperez@colorado.edu>
4082
4088
4083 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4089 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4084 so I wanted an updated release).
4090 so I wanted an updated release).
4085
4091
4086 2001-12-27 Fernando Perez <fperez@colorado.edu>
4092 2001-12-27 Fernando Perez <fperez@colorado.edu>
4087
4093
4088 * IPython/iplib.py (InteractiveShell.interact): Added the original
4094 * IPython/iplib.py (InteractiveShell.interact): Added the original
4089 code from 'code.py' for this module in order to change the
4095 code from 'code.py' for this module in order to change the
4090 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4096 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4091 the history cache would break when the user hit Ctrl-C, and
4097 the history cache would break when the user hit Ctrl-C, and
4092 interact() offers no way to add any hooks to it.
4098 interact() offers no way to add any hooks to it.
4093
4099
4094 2001-12-23 Fernando Perez <fperez@colorado.edu>
4100 2001-12-23 Fernando Perez <fperez@colorado.edu>
4095
4101
4096 * setup.py: added check for 'MANIFEST' before trying to remove
4102 * setup.py: added check for 'MANIFEST' before trying to remove
4097 it. Thanks to Sean Reifschneider.
4103 it. Thanks to Sean Reifschneider.
4098
4104
4099 2001-12-22 Fernando Perez <fperez@colorado.edu>
4105 2001-12-22 Fernando Perez <fperez@colorado.edu>
4100
4106
4101 * Released 0.2.2.
4107 * Released 0.2.2.
4102
4108
4103 * Finished (reasonably) writing the manual. Later will add the
4109 * Finished (reasonably) writing the manual. Later will add the
4104 python-standard navigation stylesheets, but for the time being
4110 python-standard navigation stylesheets, but for the time being
4105 it's fairly complete. Distribution will include html and pdf
4111 it's fairly complete. Distribution will include html and pdf
4106 versions.
4112 versions.
4107
4113
4108 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4114 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4109 (MayaVi author).
4115 (MayaVi author).
4110
4116
4111 2001-12-21 Fernando Perez <fperez@colorado.edu>
4117 2001-12-21 Fernando Perez <fperez@colorado.edu>
4112
4118
4113 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4119 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4114 good public release, I think (with the manual and the distutils
4120 good public release, I think (with the manual and the distutils
4115 installer). The manual can use some work, but that can go
4121 installer). The manual can use some work, but that can go
4116 slowly. Otherwise I think it's quite nice for end users. Next
4122 slowly. Otherwise I think it's quite nice for end users. Next
4117 summer, rewrite the guts of it...
4123 summer, rewrite the guts of it...
4118
4124
4119 * Changed format of ipythonrc files to use whitespace as the
4125 * Changed format of ipythonrc files to use whitespace as the
4120 separator instead of an explicit '='. Cleaner.
4126 separator instead of an explicit '='. Cleaner.
4121
4127
4122 2001-12-20 Fernando Perez <fperez@colorado.edu>
4128 2001-12-20 Fernando Perez <fperez@colorado.edu>
4123
4129
4124 * Started a manual in LyX. For now it's just a quick merge of the
4130 * Started a manual in LyX. For now it's just a quick merge of the
4125 various internal docstrings and READMEs. Later it may grow into a
4131 various internal docstrings and READMEs. Later it may grow into a
4126 nice, full-blown manual.
4132 nice, full-blown manual.
4127
4133
4128 * Set up a distutils based installer. Installation should now be
4134 * Set up a distutils based installer. Installation should now be
4129 trivially simple for end-users.
4135 trivially simple for end-users.
4130
4136
4131 2001-12-11 Fernando Perez <fperez@colorado.edu>
4137 2001-12-11 Fernando Perez <fperez@colorado.edu>
4132
4138
4133 * Released 0.2.0. First public release, announced it at
4139 * Released 0.2.0. First public release, announced it at
4134 comp.lang.python. From now on, just bugfixes...
4140 comp.lang.python. From now on, just bugfixes...
4135
4141
4136 * Went through all the files, set copyright/license notices and
4142 * Went through all the files, set copyright/license notices and
4137 cleaned up things. Ready for release.
4143 cleaned up things. Ready for release.
4138
4144
4139 2001-12-10 Fernando Perez <fperez@colorado.edu>
4145 2001-12-10 Fernando Perez <fperez@colorado.edu>
4140
4146
4141 * Changed the first-time installer not to use tarfiles. It's more
4147 * Changed the first-time installer not to use tarfiles. It's more
4142 robust now and less unix-dependent. Also makes it easier for
4148 robust now and less unix-dependent. Also makes it easier for
4143 people to later upgrade versions.
4149 people to later upgrade versions.
4144
4150
4145 * Changed @exit to @abort to reflect the fact that it's pretty
4151 * Changed @exit to @abort to reflect the fact that it's pretty
4146 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4152 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4147 becomes significant only when IPyhton is embedded: in that case,
4153 becomes significant only when IPyhton is embedded: in that case,
4148 C-D closes IPython only, but @abort kills the enclosing program
4154 C-D closes IPython only, but @abort kills the enclosing program
4149 too (unless it had called IPython inside a try catching
4155 too (unless it had called IPython inside a try catching
4150 SystemExit).
4156 SystemExit).
4151
4157
4152 * Created Shell module which exposes the actuall IPython Shell
4158 * Created Shell module which exposes the actuall IPython Shell
4153 classes, currently the normal and the embeddable one. This at
4159 classes, currently the normal and the embeddable one. This at
4154 least offers a stable interface we won't need to change when
4160 least offers a stable interface we won't need to change when
4155 (later) the internals are rewritten. That rewrite will be confined
4161 (later) the internals are rewritten. That rewrite will be confined
4156 to iplib and ipmaker, but the Shell interface should remain as is.
4162 to iplib and ipmaker, but the Shell interface should remain as is.
4157
4163
4158 * Added embed module which offers an embeddable IPShell object,
4164 * Added embed module which offers an embeddable IPShell object,
4159 useful to fire up IPython *inside* a running program. Great for
4165 useful to fire up IPython *inside* a running program. Great for
4160 debugging or dynamical data analysis.
4166 debugging or dynamical data analysis.
4161
4167
4162 2001-12-08 Fernando Perez <fperez@colorado.edu>
4168 2001-12-08 Fernando Perez <fperez@colorado.edu>
4163
4169
4164 * Fixed small bug preventing seeing info from methods of defined
4170 * Fixed small bug preventing seeing info from methods of defined
4165 objects (incorrect namespace in _ofind()).
4171 objects (incorrect namespace in _ofind()).
4166
4172
4167 * Documentation cleanup. Moved the main usage docstrings to a
4173 * Documentation cleanup. Moved the main usage docstrings to a
4168 separate file, usage.py (cleaner to maintain, and hopefully in the
4174 separate file, usage.py (cleaner to maintain, and hopefully in the
4169 future some perlpod-like way of producing interactive, man and
4175 future some perlpod-like way of producing interactive, man and
4170 html docs out of it will be found).
4176 html docs out of it will be found).
4171
4177
4172 * Added @profile to see your profile at any time.
4178 * Added @profile to see your profile at any time.
4173
4179
4174 * Added @p as an alias for 'print'. It's especially convenient if
4180 * Added @p as an alias for 'print'. It's especially convenient if
4175 using automagic ('p x' prints x).
4181 using automagic ('p x' prints x).
4176
4182
4177 * Small cleanups and fixes after a pychecker run.
4183 * Small cleanups and fixes after a pychecker run.
4178
4184
4179 * Changed the @cd command to handle @cd - and @cd -<n> for
4185 * Changed the @cd command to handle @cd - and @cd -<n> for
4180 visiting any directory in _dh.
4186 visiting any directory in _dh.
4181
4187
4182 * Introduced _dh, a history of visited directories. @dhist prints
4188 * Introduced _dh, a history of visited directories. @dhist prints
4183 it out with numbers.
4189 it out with numbers.
4184
4190
4185 2001-12-07 Fernando Perez <fperez@colorado.edu>
4191 2001-12-07 Fernando Perez <fperez@colorado.edu>
4186
4192
4187 * Released 0.1.22
4193 * Released 0.1.22
4188
4194
4189 * Made initialization a bit more robust against invalid color
4195 * Made initialization a bit more robust against invalid color
4190 options in user input (exit, not traceback-crash).
4196 options in user input (exit, not traceback-crash).
4191
4197
4192 * Changed the bug crash reporter to write the report only in the
4198 * Changed the bug crash reporter to write the report only in the
4193 user's .ipython directory. That way IPython won't litter people's
4199 user's .ipython directory. That way IPython won't litter people's
4194 hard disks with crash files all over the place. Also print on
4200 hard disks with crash files all over the place. Also print on
4195 screen the necessary mail command.
4201 screen the necessary mail command.
4196
4202
4197 * With the new ultraTB, implemented LightBG color scheme for light
4203 * With the new ultraTB, implemented LightBG color scheme for light
4198 background terminals. A lot of people like white backgrounds, so I
4204 background terminals. A lot of people like white backgrounds, so I
4199 guess we should at least give them something readable.
4205 guess we should at least give them something readable.
4200
4206
4201 2001-12-06 Fernando Perez <fperez@colorado.edu>
4207 2001-12-06 Fernando Perez <fperez@colorado.edu>
4202
4208
4203 * Modified the structure of ultraTB. Now there's a proper class
4209 * Modified the structure of ultraTB. Now there's a proper class
4204 for tables of color schemes which allow adding schemes easily and
4210 for tables of color schemes which allow adding schemes easily and
4205 switching the active scheme without creating a new instance every
4211 switching the active scheme without creating a new instance every
4206 time (which was ridiculous). The syntax for creating new schemes
4212 time (which was ridiculous). The syntax for creating new schemes
4207 is also cleaner. I think ultraTB is finally done, with a clean
4213 is also cleaner. I think ultraTB is finally done, with a clean
4208 class structure. Names are also much cleaner (now there's proper
4214 class structure. Names are also much cleaner (now there's proper
4209 color tables, no need for every variable to also have 'color' in
4215 color tables, no need for every variable to also have 'color' in
4210 its name).
4216 its name).
4211
4217
4212 * Broke down genutils into separate files. Now genutils only
4218 * Broke down genutils into separate files. Now genutils only
4213 contains utility functions, and classes have been moved to their
4219 contains utility functions, and classes have been moved to their
4214 own files (they had enough independent functionality to warrant
4220 own files (they had enough independent functionality to warrant
4215 it): ConfigLoader, OutputTrap, Struct.
4221 it): ConfigLoader, OutputTrap, Struct.
4216
4222
4217 2001-12-05 Fernando Perez <fperez@colorado.edu>
4223 2001-12-05 Fernando Perez <fperez@colorado.edu>
4218
4224
4219 * IPython turns 21! Released version 0.1.21, as a candidate for
4225 * IPython turns 21! Released version 0.1.21, as a candidate for
4220 public consumption. If all goes well, release in a few days.
4226 public consumption. If all goes well, release in a few days.
4221
4227
4222 * Fixed path bug (files in Extensions/ directory wouldn't be found
4228 * Fixed path bug (files in Extensions/ directory wouldn't be found
4223 unless IPython/ was explicitly in sys.path).
4229 unless IPython/ was explicitly in sys.path).
4224
4230
4225 * Extended the FlexCompleter class as MagicCompleter to allow
4231 * Extended the FlexCompleter class as MagicCompleter to allow
4226 completion of @-starting lines.
4232 completion of @-starting lines.
4227
4233
4228 * Created __release__.py file as a central repository for release
4234 * Created __release__.py file as a central repository for release
4229 info that other files can read from.
4235 info that other files can read from.
4230
4236
4231 * Fixed small bug in logging: when logging was turned on in
4237 * Fixed small bug in logging: when logging was turned on in
4232 mid-session, old lines with special meanings (!@?) were being
4238 mid-session, old lines with special meanings (!@?) were being
4233 logged without the prepended comment, which is necessary since
4239 logged without the prepended comment, which is necessary since
4234 they are not truly valid python syntax. This should make session
4240 they are not truly valid python syntax. This should make session
4235 restores produce less errors.
4241 restores produce less errors.
4236
4242
4237 * The namespace cleanup forced me to make a FlexCompleter class
4243 * The namespace cleanup forced me to make a FlexCompleter class
4238 which is nothing but a ripoff of rlcompleter, but with selectable
4244 which is nothing but a ripoff of rlcompleter, but with selectable
4239 namespace (rlcompleter only works in __main__.__dict__). I'll try
4245 namespace (rlcompleter only works in __main__.__dict__). I'll try
4240 to submit a note to the authors to see if this change can be
4246 to submit a note to the authors to see if this change can be
4241 incorporated in future rlcompleter releases (Dec.6: done)
4247 incorporated in future rlcompleter releases (Dec.6: done)
4242
4248
4243 * More fixes to namespace handling. It was a mess! Now all
4249 * More fixes to namespace handling. It was a mess! Now all
4244 explicit references to __main__.__dict__ are gone (except when
4250 explicit references to __main__.__dict__ are gone (except when
4245 really needed) and everything is handled through the namespace
4251 really needed) and everything is handled through the namespace
4246 dicts in the IPython instance. We seem to be getting somewhere
4252 dicts in the IPython instance. We seem to be getting somewhere
4247 with this, finally...
4253 with this, finally...
4248
4254
4249 * Small documentation updates.
4255 * Small documentation updates.
4250
4256
4251 * Created the Extensions directory under IPython (with an
4257 * Created the Extensions directory under IPython (with an
4252 __init__.py). Put the PhysicalQ stuff there. This directory should
4258 __init__.py). Put the PhysicalQ stuff there. This directory should
4253 be used for all special-purpose extensions.
4259 be used for all special-purpose extensions.
4254
4260
4255 * File renaming:
4261 * File renaming:
4256 ipythonlib --> ipmaker
4262 ipythonlib --> ipmaker
4257 ipplib --> iplib
4263 ipplib --> iplib
4258 This makes a bit more sense in terms of what these files actually do.
4264 This makes a bit more sense in terms of what these files actually do.
4259
4265
4260 * Moved all the classes and functions in ipythonlib to ipplib, so
4266 * Moved all the classes and functions in ipythonlib to ipplib, so
4261 now ipythonlib only has make_IPython(). This will ease up its
4267 now ipythonlib only has make_IPython(). This will ease up its
4262 splitting in smaller functional chunks later.
4268 splitting in smaller functional chunks later.
4263
4269
4264 * Cleaned up (done, I think) output of @whos. Better column
4270 * Cleaned up (done, I think) output of @whos. Better column
4265 formatting, and now shows str(var) for as much as it can, which is
4271 formatting, and now shows str(var) for as much as it can, which is
4266 typically what one gets with a 'print var'.
4272 typically what one gets with a 'print var'.
4267
4273
4268 2001-12-04 Fernando Perez <fperez@colorado.edu>
4274 2001-12-04 Fernando Perez <fperez@colorado.edu>
4269
4275
4270 * Fixed namespace problems. Now builtin/IPyhton/user names get
4276 * Fixed namespace problems. Now builtin/IPyhton/user names get
4271 properly reported in their namespace. Internal namespace handling
4277 properly reported in their namespace. Internal namespace handling
4272 is finally getting decent (not perfect yet, but much better than
4278 is finally getting decent (not perfect yet, but much better than
4273 the ad-hoc mess we had).
4279 the ad-hoc mess we had).
4274
4280
4275 * Removed -exit option. If people just want to run a python
4281 * Removed -exit option. If people just want to run a python
4276 script, that's what the normal interpreter is for. Less
4282 script, that's what the normal interpreter is for. Less
4277 unnecessary options, less chances for bugs.
4283 unnecessary options, less chances for bugs.
4278
4284
4279 * Added a crash handler which generates a complete post-mortem if
4285 * Added a crash handler which generates a complete post-mortem if
4280 IPython crashes. This will help a lot in tracking bugs down the
4286 IPython crashes. This will help a lot in tracking bugs down the
4281 road.
4287 road.
4282
4288
4283 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4289 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4284 which were boud to functions being reassigned would bypass the
4290 which were boud to functions being reassigned would bypass the
4285 logger, breaking the sync of _il with the prompt counter. This
4291 logger, breaking the sync of _il with the prompt counter. This
4286 would then crash IPython later when a new line was logged.
4292 would then crash IPython later when a new line was logged.
4287
4293
4288 2001-12-02 Fernando Perez <fperez@colorado.edu>
4294 2001-12-02 Fernando Perez <fperez@colorado.edu>
4289
4295
4290 * Made IPython a package. This means people don't have to clutter
4296 * Made IPython a package. This means people don't have to clutter
4291 their sys.path with yet another directory. Changed the INSTALL
4297 their sys.path with yet another directory. Changed the INSTALL
4292 file accordingly.
4298 file accordingly.
4293
4299
4294 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4300 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4295 sorts its output (so @who shows it sorted) and @whos formats the
4301 sorts its output (so @who shows it sorted) and @whos formats the
4296 table according to the width of the first column. Nicer, easier to
4302 table according to the width of the first column. Nicer, easier to
4297 read. Todo: write a generic table_format() which takes a list of
4303 read. Todo: write a generic table_format() which takes a list of
4298 lists and prints it nicely formatted, with optional row/column
4304 lists and prints it nicely formatted, with optional row/column
4299 separators and proper padding and justification.
4305 separators and proper padding and justification.
4300
4306
4301 * Released 0.1.20
4307 * Released 0.1.20
4302
4308
4303 * Fixed bug in @log which would reverse the inputcache list (a
4309 * Fixed bug in @log which would reverse the inputcache list (a
4304 copy operation was missing).
4310 copy operation was missing).
4305
4311
4306 * Code cleanup. @config was changed to use page(). Better, since
4312 * Code cleanup. @config was changed to use page(). Better, since
4307 its output is always quite long.
4313 its output is always quite long.
4308
4314
4309 * Itpl is back as a dependency. I was having too many problems
4315 * Itpl is back as a dependency. I was having too many problems
4310 getting the parametric aliases to work reliably, and it's just
4316 getting the parametric aliases to work reliably, and it's just
4311 easier to code weird string operations with it than playing %()s
4317 easier to code weird string operations with it than playing %()s
4312 games. It's only ~6k, so I don't think it's too big a deal.
4318 games. It's only ~6k, so I don't think it's too big a deal.
4313
4319
4314 * Found (and fixed) a very nasty bug with history. !lines weren't
4320 * Found (and fixed) a very nasty bug with history. !lines weren't
4315 getting cached, and the out of sync caches would crash
4321 getting cached, and the out of sync caches would crash
4316 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4322 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4317 division of labor a bit better. Bug fixed, cleaner structure.
4323 division of labor a bit better. Bug fixed, cleaner structure.
4318
4324
4319 2001-12-01 Fernando Perez <fperez@colorado.edu>
4325 2001-12-01 Fernando Perez <fperez@colorado.edu>
4320
4326
4321 * Released 0.1.19
4327 * Released 0.1.19
4322
4328
4323 * Added option -n to @hist to prevent line number printing. Much
4329 * Added option -n to @hist to prevent line number printing. Much
4324 easier to copy/paste code this way.
4330 easier to copy/paste code this way.
4325
4331
4326 * Created global _il to hold the input list. Allows easy
4332 * Created global _il to hold the input list. Allows easy
4327 re-execution of blocks of code by slicing it (inspired by Janko's
4333 re-execution of blocks of code by slicing it (inspired by Janko's
4328 comment on 'macros').
4334 comment on 'macros').
4329
4335
4330 * Small fixes and doc updates.
4336 * Small fixes and doc updates.
4331
4337
4332 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4338 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4333 much too fragile with automagic. Handles properly multi-line
4339 much too fragile with automagic. Handles properly multi-line
4334 statements and takes parameters.
4340 statements and takes parameters.
4335
4341
4336 2001-11-30 Fernando Perez <fperez@colorado.edu>
4342 2001-11-30 Fernando Perez <fperez@colorado.edu>
4337
4343
4338 * Version 0.1.18 released.
4344 * Version 0.1.18 released.
4339
4345
4340 * Fixed nasty namespace bug in initial module imports.
4346 * Fixed nasty namespace bug in initial module imports.
4341
4347
4342 * Added copyright/license notes to all code files (except
4348 * Added copyright/license notes to all code files (except
4343 DPyGetOpt). For the time being, LGPL. That could change.
4349 DPyGetOpt). For the time being, LGPL. That could change.
4344
4350
4345 * Rewrote a much nicer README, updated INSTALL, cleaned up
4351 * Rewrote a much nicer README, updated INSTALL, cleaned up
4346 ipythonrc-* samples.
4352 ipythonrc-* samples.
4347
4353
4348 * Overall code/documentation cleanup. Basically ready for
4354 * Overall code/documentation cleanup. Basically ready for
4349 release. Only remaining thing: licence decision (LGPL?).
4355 release. Only remaining thing: licence decision (LGPL?).
4350
4356
4351 * Converted load_config to a class, ConfigLoader. Now recursion
4357 * Converted load_config to a class, ConfigLoader. Now recursion
4352 control is better organized. Doesn't include the same file twice.
4358 control is better organized. Doesn't include the same file twice.
4353
4359
4354 2001-11-29 Fernando Perez <fperez@colorado.edu>
4360 2001-11-29 Fernando Perez <fperez@colorado.edu>
4355
4361
4356 * Got input history working. Changed output history variables from
4362 * Got input history working. Changed output history variables from
4357 _p to _o so that _i is for input and _o for output. Just cleaner
4363 _p to _o so that _i is for input and _o for output. Just cleaner
4358 convention.
4364 convention.
4359
4365
4360 * Implemented parametric aliases. This pretty much allows the
4366 * Implemented parametric aliases. This pretty much allows the
4361 alias system to offer full-blown shell convenience, I think.
4367 alias system to offer full-blown shell convenience, I think.
4362
4368
4363 * Version 0.1.17 released, 0.1.18 opened.
4369 * Version 0.1.17 released, 0.1.18 opened.
4364
4370
4365 * dot_ipython/ipythonrc (alias): added documentation.
4371 * dot_ipython/ipythonrc (alias): added documentation.
4366 (xcolor): Fixed small bug (xcolors -> xcolor)
4372 (xcolor): Fixed small bug (xcolors -> xcolor)
4367
4373
4368 * Changed the alias system. Now alias is a magic command to define
4374 * Changed the alias system. Now alias is a magic command to define
4369 aliases just like the shell. Rationale: the builtin magics should
4375 aliases just like the shell. Rationale: the builtin magics should
4370 be there for things deeply connected to IPython's
4376 be there for things deeply connected to IPython's
4371 architecture. And this is a much lighter system for what I think
4377 architecture. And this is a much lighter system for what I think
4372 is the really important feature: allowing users to define quickly
4378 is the really important feature: allowing users to define quickly
4373 magics that will do shell things for them, so they can customize
4379 magics that will do shell things for them, so they can customize
4374 IPython easily to match their work habits. If someone is really
4380 IPython easily to match their work habits. If someone is really
4375 desperate to have another name for a builtin alias, they can
4381 desperate to have another name for a builtin alias, they can
4376 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4382 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4377 works.
4383 works.
4378
4384
4379 2001-11-28 Fernando Perez <fperez@colorado.edu>
4385 2001-11-28 Fernando Perez <fperez@colorado.edu>
4380
4386
4381 * Changed @file so that it opens the source file at the proper
4387 * Changed @file so that it opens the source file at the proper
4382 line. Since it uses less, if your EDITOR environment is
4388 line. Since it uses less, if your EDITOR environment is
4383 configured, typing v will immediately open your editor of choice
4389 configured, typing v will immediately open your editor of choice
4384 right at the line where the object is defined. Not as quick as
4390 right at the line where the object is defined. Not as quick as
4385 having a direct @edit command, but for all intents and purposes it
4391 having a direct @edit command, but for all intents and purposes it
4386 works. And I don't have to worry about writing @edit to deal with
4392 works. And I don't have to worry about writing @edit to deal with
4387 all the editors, less does that.
4393 all the editors, less does that.
4388
4394
4389 * Version 0.1.16 released, 0.1.17 opened.
4395 * Version 0.1.16 released, 0.1.17 opened.
4390
4396
4391 * Fixed some nasty bugs in the page/page_dumb combo that could
4397 * Fixed some nasty bugs in the page/page_dumb combo that could
4392 crash IPython.
4398 crash IPython.
4393
4399
4394 2001-11-27 Fernando Perez <fperez@colorado.edu>
4400 2001-11-27 Fernando Perez <fperez@colorado.edu>
4395
4401
4396 * Version 0.1.15 released, 0.1.16 opened.
4402 * Version 0.1.15 released, 0.1.16 opened.
4397
4403
4398 * Finally got ? and ?? to work for undefined things: now it's
4404 * Finally got ? and ?? to work for undefined things: now it's
4399 possible to type {}.get? and get information about the get method
4405 possible to type {}.get? and get information about the get method
4400 of dicts, or os.path? even if only os is defined (so technically
4406 of dicts, or os.path? even if only os is defined (so technically
4401 os.path isn't). Works at any level. For example, after import os,
4407 os.path isn't). Works at any level. For example, after import os,
4402 os?, os.path?, os.path.abspath? all work. This is great, took some
4408 os?, os.path?, os.path.abspath? all work. This is great, took some
4403 work in _ofind.
4409 work in _ofind.
4404
4410
4405 * Fixed more bugs with logging. The sanest way to do it was to add
4411 * Fixed more bugs with logging. The sanest way to do it was to add
4406 to @log a 'mode' parameter. Killed two in one shot (this mode
4412 to @log a 'mode' parameter. Killed two in one shot (this mode
4407 option was a request of Janko's). I think it's finally clean
4413 option was a request of Janko's). I think it's finally clean
4408 (famous last words).
4414 (famous last words).
4409
4415
4410 * Added a page_dumb() pager which does a decent job of paging on
4416 * Added a page_dumb() pager which does a decent job of paging on
4411 screen, if better things (like less) aren't available. One less
4417 screen, if better things (like less) aren't available. One less
4412 unix dependency (someday maybe somebody will port this to
4418 unix dependency (someday maybe somebody will port this to
4413 windows).
4419 windows).
4414
4420
4415 * Fixed problem in magic_log: would lock of logging out if log
4421 * Fixed problem in magic_log: would lock of logging out if log
4416 creation failed (because it would still think it had succeeded).
4422 creation failed (because it would still think it had succeeded).
4417
4423
4418 * Improved the page() function using curses to auto-detect screen
4424 * Improved the page() function using curses to auto-detect screen
4419 size. Now it can make a much better decision on whether to print
4425 size. Now it can make a much better decision on whether to print
4420 or page a string. Option screen_length was modified: a value 0
4426 or page a string. Option screen_length was modified: a value 0
4421 means auto-detect, and that's the default now.
4427 means auto-detect, and that's the default now.
4422
4428
4423 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4429 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4424 go out. I'll test it for a few days, then talk to Janko about
4430 go out. I'll test it for a few days, then talk to Janko about
4425 licences and announce it.
4431 licences and announce it.
4426
4432
4427 * Fixed the length of the auto-generated ---> prompt which appears
4433 * Fixed the length of the auto-generated ---> prompt which appears
4428 for auto-parens and auto-quotes. Getting this right isn't trivial,
4434 for auto-parens and auto-quotes. Getting this right isn't trivial,
4429 with all the color escapes, different prompt types and optional
4435 with all the color escapes, different prompt types and optional
4430 separators. But it seems to be working in all the combinations.
4436 separators. But it seems to be working in all the combinations.
4431
4437
4432 2001-11-26 Fernando Perez <fperez@colorado.edu>
4438 2001-11-26 Fernando Perez <fperez@colorado.edu>
4433
4439
4434 * Wrote a regexp filter to get option types from the option names
4440 * Wrote a regexp filter to get option types from the option names
4435 string. This eliminates the need to manually keep two duplicate
4441 string. This eliminates the need to manually keep two duplicate
4436 lists.
4442 lists.
4437
4443
4438 * Removed the unneeded check_option_names. Now options are handled
4444 * Removed the unneeded check_option_names. Now options are handled
4439 in a much saner manner and it's easy to visually check that things
4445 in a much saner manner and it's easy to visually check that things
4440 are ok.
4446 are ok.
4441
4447
4442 * Updated version numbers on all files I modified to carry a
4448 * Updated version numbers on all files I modified to carry a
4443 notice so Janko and Nathan have clear version markers.
4449 notice so Janko and Nathan have clear version markers.
4444
4450
4445 * Updated docstring for ultraTB with my changes. I should send
4451 * Updated docstring for ultraTB with my changes. I should send
4446 this to Nathan.
4452 this to Nathan.
4447
4453
4448 * Lots of small fixes. Ran everything through pychecker again.
4454 * Lots of small fixes. Ran everything through pychecker again.
4449
4455
4450 * Made loading of deep_reload an cmd line option. If it's not too
4456 * Made loading of deep_reload an cmd line option. If it's not too
4451 kosher, now people can just disable it. With -nodeep_reload it's
4457 kosher, now people can just disable it. With -nodeep_reload it's
4452 still available as dreload(), it just won't overwrite reload().
4458 still available as dreload(), it just won't overwrite reload().
4453
4459
4454 * Moved many options to the no| form (-opt and -noopt
4460 * Moved many options to the no| form (-opt and -noopt
4455 accepted). Cleaner.
4461 accepted). Cleaner.
4456
4462
4457 * Changed magic_log so that if called with no parameters, it uses
4463 * Changed magic_log so that if called with no parameters, it uses
4458 'rotate' mode. That way auto-generated logs aren't automatically
4464 'rotate' mode. That way auto-generated logs aren't automatically
4459 over-written. For normal logs, now a backup is made if it exists
4465 over-written. For normal logs, now a backup is made if it exists
4460 (only 1 level of backups). A new 'backup' mode was added to the
4466 (only 1 level of backups). A new 'backup' mode was added to the
4461 Logger class to support this. This was a request by Janko.
4467 Logger class to support this. This was a request by Janko.
4462
4468
4463 * Added @logoff/@logon to stop/restart an active log.
4469 * Added @logoff/@logon to stop/restart an active log.
4464
4470
4465 * Fixed a lot of bugs in log saving/replay. It was pretty
4471 * Fixed a lot of bugs in log saving/replay. It was pretty
4466 broken. Now special lines (!@,/) appear properly in the command
4472 broken. Now special lines (!@,/) appear properly in the command
4467 history after a log replay.
4473 history after a log replay.
4468
4474
4469 * Tried and failed to implement full session saving via pickle. My
4475 * Tried and failed to implement full session saving via pickle. My
4470 idea was to pickle __main__.__dict__, but modules can't be
4476 idea was to pickle __main__.__dict__, but modules can't be
4471 pickled. This would be a better alternative to replaying logs, but
4477 pickled. This would be a better alternative to replaying logs, but
4472 seems quite tricky to get to work. Changed -session to be called
4478 seems quite tricky to get to work. Changed -session to be called
4473 -logplay, which more accurately reflects what it does. And if we
4479 -logplay, which more accurately reflects what it does. And if we
4474 ever get real session saving working, -session is now available.
4480 ever get real session saving working, -session is now available.
4475
4481
4476 * Implemented color schemes for prompts also. As for tracebacks,
4482 * Implemented color schemes for prompts also. As for tracebacks,
4477 currently only NoColor and Linux are supported. But now the
4483 currently only NoColor and Linux are supported. But now the
4478 infrastructure is in place, based on a generic ColorScheme
4484 infrastructure is in place, based on a generic ColorScheme
4479 class. So writing and activating new schemes both for the prompts
4485 class. So writing and activating new schemes both for the prompts
4480 and the tracebacks should be straightforward.
4486 and the tracebacks should be straightforward.
4481
4487
4482 * Version 0.1.13 released, 0.1.14 opened.
4488 * Version 0.1.13 released, 0.1.14 opened.
4483
4489
4484 * Changed handling of options for output cache. Now counter is
4490 * Changed handling of options for output cache. Now counter is
4485 hardwired starting at 1 and one specifies the maximum number of
4491 hardwired starting at 1 and one specifies the maximum number of
4486 entries *in the outcache* (not the max prompt counter). This is
4492 entries *in the outcache* (not the max prompt counter). This is
4487 much better, since many statements won't increase the cache
4493 much better, since many statements won't increase the cache
4488 count. It also eliminated some confusing options, now there's only
4494 count. It also eliminated some confusing options, now there's only
4489 one: cache_size.
4495 one: cache_size.
4490
4496
4491 * Added 'alias' magic function and magic_alias option in the
4497 * Added 'alias' magic function and magic_alias option in the
4492 ipythonrc file. Now the user can easily define whatever names he
4498 ipythonrc file. Now the user can easily define whatever names he
4493 wants for the magic functions without having to play weird
4499 wants for the magic functions without having to play weird
4494 namespace games. This gives IPython a real shell-like feel.
4500 namespace games. This gives IPython a real shell-like feel.
4495
4501
4496 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4502 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4497 @ or not).
4503 @ or not).
4498
4504
4499 This was one of the last remaining 'visible' bugs (that I know
4505 This was one of the last remaining 'visible' bugs (that I know
4500 of). I think if I can clean up the session loading so it works
4506 of). I think if I can clean up the session loading so it works
4501 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4507 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4502 about licensing).
4508 about licensing).
4503
4509
4504 2001-11-25 Fernando Perez <fperez@colorado.edu>
4510 2001-11-25 Fernando Perez <fperez@colorado.edu>
4505
4511
4506 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4512 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4507 there's a cleaner distinction between what ? and ?? show.
4513 there's a cleaner distinction between what ? and ?? show.
4508
4514
4509 * Added screen_length option. Now the user can define his own
4515 * Added screen_length option. Now the user can define his own
4510 screen size for page() operations.
4516 screen size for page() operations.
4511
4517
4512 * Implemented magic shell-like functions with automatic code
4518 * Implemented magic shell-like functions with automatic code
4513 generation. Now adding another function is just a matter of adding
4519 generation. Now adding another function is just a matter of adding
4514 an entry to a dict, and the function is dynamically generated at
4520 an entry to a dict, and the function is dynamically generated at
4515 run-time. Python has some really cool features!
4521 run-time. Python has some really cool features!
4516
4522
4517 * Renamed many options to cleanup conventions a little. Now all
4523 * Renamed many options to cleanup conventions a little. Now all
4518 are lowercase, and only underscores where needed. Also in the code
4524 are lowercase, and only underscores where needed. Also in the code
4519 option name tables are clearer.
4525 option name tables are clearer.
4520
4526
4521 * Changed prompts a little. Now input is 'In [n]:' instead of
4527 * Changed prompts a little. Now input is 'In [n]:' instead of
4522 'In[n]:='. This allows it the numbers to be aligned with the
4528 'In[n]:='. This allows it the numbers to be aligned with the
4523 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4529 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4524 Python (it was a Mathematica thing). The '...' continuation prompt
4530 Python (it was a Mathematica thing). The '...' continuation prompt
4525 was also changed a little to align better.
4531 was also changed a little to align better.
4526
4532
4527 * Fixed bug when flushing output cache. Not all _p<n> variables
4533 * Fixed bug when flushing output cache. Not all _p<n> variables
4528 exist, so their deletion needs to be wrapped in a try:
4534 exist, so their deletion needs to be wrapped in a try:
4529
4535
4530 * Figured out how to properly use inspect.formatargspec() (it
4536 * Figured out how to properly use inspect.formatargspec() (it
4531 requires the args preceded by *). So I removed all the code from
4537 requires the args preceded by *). So I removed all the code from
4532 _get_pdef in Magic, which was just replicating that.
4538 _get_pdef in Magic, which was just replicating that.
4533
4539
4534 * Added test to prefilter to allow redefining magic function names
4540 * Added test to prefilter to allow redefining magic function names
4535 as variables. This is ok, since the @ form is always available,
4541 as variables. This is ok, since the @ form is always available,
4536 but whe should allow the user to define a variable called 'ls' if
4542 but whe should allow the user to define a variable called 'ls' if
4537 he needs it.
4543 he needs it.
4538
4544
4539 * Moved the ToDo information from README into a separate ToDo.
4545 * Moved the ToDo information from README into a separate ToDo.
4540
4546
4541 * General code cleanup and small bugfixes. I think it's close to a
4547 * General code cleanup and small bugfixes. I think it's close to a
4542 state where it can be released, obviously with a big 'beta'
4548 state where it can be released, obviously with a big 'beta'
4543 warning on it.
4549 warning on it.
4544
4550
4545 * Got the magic function split to work. Now all magics are defined
4551 * Got the magic function split to work. Now all magics are defined
4546 in a separate class. It just organizes things a bit, and now
4552 in a separate class. It just organizes things a bit, and now
4547 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4553 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4548 was too long).
4554 was too long).
4549
4555
4550 * Changed @clear to @reset to avoid potential confusions with
4556 * Changed @clear to @reset to avoid potential confusions with
4551 the shell command clear. Also renamed @cl to @clear, which does
4557 the shell command clear. Also renamed @cl to @clear, which does
4552 exactly what people expect it to from their shell experience.
4558 exactly what people expect it to from their shell experience.
4553
4559
4554 Added a check to the @reset command (since it's so
4560 Added a check to the @reset command (since it's so
4555 destructive, it's probably a good idea to ask for confirmation).
4561 destructive, it's probably a good idea to ask for confirmation).
4556 But now reset only works for full namespace resetting. Since the
4562 But now reset only works for full namespace resetting. Since the
4557 del keyword is already there for deleting a few specific
4563 del keyword is already there for deleting a few specific
4558 variables, I don't see the point of having a redundant magic
4564 variables, I don't see the point of having a redundant magic
4559 function for the same task.
4565 function for the same task.
4560
4566
4561 2001-11-24 Fernando Perez <fperez@colorado.edu>
4567 2001-11-24 Fernando Perez <fperez@colorado.edu>
4562
4568
4563 * Updated the builtin docs (esp. the ? ones).
4569 * Updated the builtin docs (esp. the ? ones).
4564
4570
4565 * Ran all the code through pychecker. Not terribly impressed with
4571 * Ran all the code through pychecker. Not terribly impressed with
4566 it: lots of spurious warnings and didn't really find anything of
4572 it: lots of spurious warnings and didn't really find anything of
4567 substance (just a few modules being imported and not used).
4573 substance (just a few modules being imported and not used).
4568
4574
4569 * Implemented the new ultraTB functionality into IPython. New
4575 * Implemented the new ultraTB functionality into IPython. New
4570 option: xcolors. This chooses color scheme. xmode now only selects
4576 option: xcolors. This chooses color scheme. xmode now only selects
4571 between Plain and Verbose. Better orthogonality.
4577 between Plain and Verbose. Better orthogonality.
4572
4578
4573 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4579 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4574 mode and color scheme for the exception handlers. Now it's
4580 mode and color scheme for the exception handlers. Now it's
4575 possible to have the verbose traceback with no coloring.
4581 possible to have the verbose traceback with no coloring.
4576
4582
4577 2001-11-23 Fernando Perez <fperez@colorado.edu>
4583 2001-11-23 Fernando Perez <fperez@colorado.edu>
4578
4584
4579 * Version 0.1.12 released, 0.1.13 opened.
4585 * Version 0.1.12 released, 0.1.13 opened.
4580
4586
4581 * Removed option to set auto-quote and auto-paren escapes by
4587 * Removed option to set auto-quote and auto-paren escapes by
4582 user. The chances of breaking valid syntax are just too high. If
4588 user. The chances of breaking valid syntax are just too high. If
4583 someone *really* wants, they can always dig into the code.
4589 someone *really* wants, they can always dig into the code.
4584
4590
4585 * Made prompt separators configurable.
4591 * Made prompt separators configurable.
4586
4592
4587 2001-11-22 Fernando Perez <fperez@colorado.edu>
4593 2001-11-22 Fernando Perez <fperez@colorado.edu>
4588
4594
4589 * Small bugfixes in many places.
4595 * Small bugfixes in many places.
4590
4596
4591 * Removed the MyCompleter class from ipplib. It seemed redundant
4597 * Removed the MyCompleter class from ipplib. It seemed redundant
4592 with the C-p,C-n history search functionality. Less code to
4598 with the C-p,C-n history search functionality. Less code to
4593 maintain.
4599 maintain.
4594
4600
4595 * Moved all the original ipython.py code into ipythonlib.py. Right
4601 * Moved all the original ipython.py code into ipythonlib.py. Right
4596 now it's just one big dump into a function called make_IPython, so
4602 now it's just one big dump into a function called make_IPython, so
4597 no real modularity has been gained. But at least it makes the
4603 no real modularity has been gained. But at least it makes the
4598 wrapper script tiny, and since ipythonlib is a module, it gets
4604 wrapper script tiny, and since ipythonlib is a module, it gets
4599 compiled and startup is much faster.
4605 compiled and startup is much faster.
4600
4606
4601 This is a reasobably 'deep' change, so we should test it for a
4607 This is a reasobably 'deep' change, so we should test it for a
4602 while without messing too much more with the code.
4608 while without messing too much more with the code.
4603
4609
4604 2001-11-21 Fernando Perez <fperez@colorado.edu>
4610 2001-11-21 Fernando Perez <fperez@colorado.edu>
4605
4611
4606 * Version 0.1.11 released, 0.1.12 opened for further work.
4612 * Version 0.1.11 released, 0.1.12 opened for further work.
4607
4613
4608 * Removed dependency on Itpl. It was only needed in one place. It
4614 * Removed dependency on Itpl. It was only needed in one place. It
4609 would be nice if this became part of python, though. It makes life
4615 would be nice if this became part of python, though. It makes life
4610 *a lot* easier in some cases.
4616 *a lot* easier in some cases.
4611
4617
4612 * Simplified the prefilter code a bit. Now all handlers are
4618 * Simplified the prefilter code a bit. Now all handlers are
4613 expected to explicitly return a value (at least a blank string).
4619 expected to explicitly return a value (at least a blank string).
4614
4620
4615 * Heavy edits in ipplib. Removed the help system altogether. Now
4621 * Heavy edits in ipplib. Removed the help system altogether. Now
4616 obj?/?? is used for inspecting objects, a magic @doc prints
4622 obj?/?? is used for inspecting objects, a magic @doc prints
4617 docstrings, and full-blown Python help is accessed via the 'help'
4623 docstrings, and full-blown Python help is accessed via the 'help'
4618 keyword. This cleans up a lot of code (less to maintain) and does
4624 keyword. This cleans up a lot of code (less to maintain) and does
4619 the job. Since 'help' is now a standard Python component, might as
4625 the job. Since 'help' is now a standard Python component, might as
4620 well use it and remove duplicate functionality.
4626 well use it and remove duplicate functionality.
4621
4627
4622 Also removed the option to use ipplib as a standalone program. By
4628 Also removed the option to use ipplib as a standalone program. By
4623 now it's too dependent on other parts of IPython to function alone.
4629 now it's too dependent on other parts of IPython to function alone.
4624
4630
4625 * Fixed bug in genutils.pager. It would crash if the pager was
4631 * Fixed bug in genutils.pager. It would crash if the pager was
4626 exited immediately after opening (broken pipe).
4632 exited immediately after opening (broken pipe).
4627
4633
4628 * Trimmed down the VerboseTB reporting a little. The header is
4634 * Trimmed down the VerboseTB reporting a little. The header is
4629 much shorter now and the repeated exception arguments at the end
4635 much shorter now and the repeated exception arguments at the end
4630 have been removed. For interactive use the old header seemed a bit
4636 have been removed. For interactive use the old header seemed a bit
4631 excessive.
4637 excessive.
4632
4638
4633 * Fixed small bug in output of @whos for variables with multi-word
4639 * Fixed small bug in output of @whos for variables with multi-word
4634 types (only first word was displayed).
4640 types (only first word was displayed).
4635
4641
4636 2001-11-17 Fernando Perez <fperez@colorado.edu>
4642 2001-11-17 Fernando Perez <fperez@colorado.edu>
4637
4643
4638 * Version 0.1.10 released, 0.1.11 opened for further work.
4644 * Version 0.1.10 released, 0.1.11 opened for further work.
4639
4645
4640 * Modified dirs and friends. dirs now *returns* the stack (not
4646 * Modified dirs and friends. dirs now *returns* the stack (not
4641 prints), so one can manipulate it as a variable. Convenient to
4647 prints), so one can manipulate it as a variable. Convenient to
4642 travel along many directories.
4648 travel along many directories.
4643
4649
4644 * Fixed bug in magic_pdef: would only work with functions with
4650 * Fixed bug in magic_pdef: would only work with functions with
4645 arguments with default values.
4651 arguments with default values.
4646
4652
4647 2001-11-14 Fernando Perez <fperez@colorado.edu>
4653 2001-11-14 Fernando Perez <fperez@colorado.edu>
4648
4654
4649 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4655 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4650 example with IPython. Various other minor fixes and cleanups.
4656 example with IPython. Various other minor fixes and cleanups.
4651
4657
4652 * Version 0.1.9 released, 0.1.10 opened for further work.
4658 * Version 0.1.9 released, 0.1.10 opened for further work.
4653
4659
4654 * Added sys.path to the list of directories searched in the
4660 * Added sys.path to the list of directories searched in the
4655 execfile= option. It used to be the current directory and the
4661 execfile= option. It used to be the current directory and the
4656 user's IPYTHONDIR only.
4662 user's IPYTHONDIR only.
4657
4663
4658 2001-11-13 Fernando Perez <fperez@colorado.edu>
4664 2001-11-13 Fernando Perez <fperez@colorado.edu>
4659
4665
4660 * Reinstated the raw_input/prefilter separation that Janko had
4666 * Reinstated the raw_input/prefilter separation that Janko had
4661 initially. This gives a more convenient setup for extending the
4667 initially. This gives a more convenient setup for extending the
4662 pre-processor from the outside: raw_input always gets a string,
4668 pre-processor from the outside: raw_input always gets a string,
4663 and prefilter has to process it. We can then redefine prefilter
4669 and prefilter has to process it. We can then redefine prefilter
4664 from the outside and implement extensions for special
4670 from the outside and implement extensions for special
4665 purposes.
4671 purposes.
4666
4672
4667 Today I got one for inputting PhysicalQuantity objects
4673 Today I got one for inputting PhysicalQuantity objects
4668 (from Scientific) without needing any function calls at
4674 (from Scientific) without needing any function calls at
4669 all. Extremely convenient, and it's all done as a user-level
4675 all. Extremely convenient, and it's all done as a user-level
4670 extension (no IPython code was touched). Now instead of:
4676 extension (no IPython code was touched). Now instead of:
4671 a = PhysicalQuantity(4.2,'m/s**2')
4677 a = PhysicalQuantity(4.2,'m/s**2')
4672 one can simply say
4678 one can simply say
4673 a = 4.2 m/s**2
4679 a = 4.2 m/s**2
4674 or even
4680 or even
4675 a = 4.2 m/s^2
4681 a = 4.2 m/s^2
4676
4682
4677 I use this, but it's also a proof of concept: IPython really is
4683 I use this, but it's also a proof of concept: IPython really is
4678 fully user-extensible, even at the level of the parsing of the
4684 fully user-extensible, even at the level of the parsing of the
4679 command line. It's not trivial, but it's perfectly doable.
4685 command line. It's not trivial, but it's perfectly doable.
4680
4686
4681 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4687 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4682 the problem of modules being loaded in the inverse order in which
4688 the problem of modules being loaded in the inverse order in which
4683 they were defined in
4689 they were defined in
4684
4690
4685 * Version 0.1.8 released, 0.1.9 opened for further work.
4691 * Version 0.1.8 released, 0.1.9 opened for further work.
4686
4692
4687 * Added magics pdef, source and file. They respectively show the
4693 * Added magics pdef, source and file. They respectively show the
4688 definition line ('prototype' in C), source code and full python
4694 definition line ('prototype' in C), source code and full python
4689 file for any callable object. The object inspector oinfo uses
4695 file for any callable object. The object inspector oinfo uses
4690 these to show the same information.
4696 these to show the same information.
4691
4697
4692 * Version 0.1.7 released, 0.1.8 opened for further work.
4698 * Version 0.1.7 released, 0.1.8 opened for further work.
4693
4699
4694 * Separated all the magic functions into a class called Magic. The
4700 * Separated all the magic functions into a class called Magic. The
4695 InteractiveShell class was becoming too big for Xemacs to handle
4701 InteractiveShell class was becoming too big for Xemacs to handle
4696 (de-indenting a line would lock it up for 10 seconds while it
4702 (de-indenting a line would lock it up for 10 seconds while it
4697 backtracked on the whole class!)
4703 backtracked on the whole class!)
4698
4704
4699 FIXME: didn't work. It can be done, but right now namespaces are
4705 FIXME: didn't work. It can be done, but right now namespaces are
4700 all messed up. Do it later (reverted it for now, so at least
4706 all messed up. Do it later (reverted it for now, so at least
4701 everything works as before).
4707 everything works as before).
4702
4708
4703 * Got the object introspection system (magic_oinfo) working! I
4709 * Got the object introspection system (magic_oinfo) working! I
4704 think this is pretty much ready for release to Janko, so he can
4710 think this is pretty much ready for release to Janko, so he can
4705 test it for a while and then announce it. Pretty much 100% of what
4711 test it for a while and then announce it. Pretty much 100% of what
4706 I wanted for the 'phase 1' release is ready. Happy, tired.
4712 I wanted for the 'phase 1' release is ready. Happy, tired.
4707
4713
4708 2001-11-12 Fernando Perez <fperez@colorado.edu>
4714 2001-11-12 Fernando Perez <fperez@colorado.edu>
4709
4715
4710 * Version 0.1.6 released, 0.1.7 opened for further work.
4716 * Version 0.1.6 released, 0.1.7 opened for further work.
4711
4717
4712 * Fixed bug in printing: it used to test for truth before
4718 * Fixed bug in printing: it used to test for truth before
4713 printing, so 0 wouldn't print. Now checks for None.
4719 printing, so 0 wouldn't print. Now checks for None.
4714
4720
4715 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4721 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4716 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4722 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4717 reaches by hand into the outputcache. Think of a better way to do
4723 reaches by hand into the outputcache. Think of a better way to do
4718 this later.
4724 this later.
4719
4725
4720 * Various small fixes thanks to Nathan's comments.
4726 * Various small fixes thanks to Nathan's comments.
4721
4727
4722 * Changed magic_pprint to magic_Pprint. This way it doesn't
4728 * Changed magic_pprint to magic_Pprint. This way it doesn't
4723 collide with pprint() and the name is consistent with the command
4729 collide with pprint() and the name is consistent with the command
4724 line option.
4730 line option.
4725
4731
4726 * Changed prompt counter behavior to be fully like
4732 * Changed prompt counter behavior to be fully like
4727 Mathematica's. That is, even input that doesn't return a result
4733 Mathematica's. That is, even input that doesn't return a result
4728 raises the prompt counter. The old behavior was kind of confusing
4734 raises the prompt counter. The old behavior was kind of confusing
4729 (getting the same prompt number several times if the operation
4735 (getting the same prompt number several times if the operation
4730 didn't return a result).
4736 didn't return a result).
4731
4737
4732 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4738 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4733
4739
4734 * Fixed -Classic mode (wasn't working anymore).
4740 * Fixed -Classic mode (wasn't working anymore).
4735
4741
4736 * Added colored prompts using Nathan's new code. Colors are
4742 * Added colored prompts using Nathan's new code. Colors are
4737 currently hardwired, they can be user-configurable. For
4743 currently hardwired, they can be user-configurable. For
4738 developers, they can be chosen in file ipythonlib.py, at the
4744 developers, they can be chosen in file ipythonlib.py, at the
4739 beginning of the CachedOutput class def.
4745 beginning of the CachedOutput class def.
4740
4746
4741 2001-11-11 Fernando Perez <fperez@colorado.edu>
4747 2001-11-11 Fernando Perez <fperez@colorado.edu>
4742
4748
4743 * Version 0.1.5 released, 0.1.6 opened for further work.
4749 * Version 0.1.5 released, 0.1.6 opened for further work.
4744
4750
4745 * Changed magic_env to *return* the environment as a dict (not to
4751 * Changed magic_env to *return* the environment as a dict (not to
4746 print it). This way it prints, but it can also be processed.
4752 print it). This way it prints, but it can also be processed.
4747
4753
4748 * Added Verbose exception reporting to interactive
4754 * Added Verbose exception reporting to interactive
4749 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4755 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4750 traceback. Had to make some changes to the ultraTB file. This is
4756 traceback. Had to make some changes to the ultraTB file. This is
4751 probably the last 'big' thing in my mental todo list. This ties
4757 probably the last 'big' thing in my mental todo list. This ties
4752 in with the next entry:
4758 in with the next entry:
4753
4759
4754 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4760 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4755 has to specify is Plain, Color or Verbose for all exception
4761 has to specify is Plain, Color or Verbose for all exception
4756 handling.
4762 handling.
4757
4763
4758 * Removed ShellServices option. All this can really be done via
4764 * Removed ShellServices option. All this can really be done via
4759 the magic system. It's easier to extend, cleaner and has automatic
4765 the magic system. It's easier to extend, cleaner and has automatic
4760 namespace protection and documentation.
4766 namespace protection and documentation.
4761
4767
4762 2001-11-09 Fernando Perez <fperez@colorado.edu>
4768 2001-11-09 Fernando Perez <fperez@colorado.edu>
4763
4769
4764 * Fixed bug in output cache flushing (missing parameter to
4770 * Fixed bug in output cache flushing (missing parameter to
4765 __init__). Other small bugs fixed (found using pychecker).
4771 __init__). Other small bugs fixed (found using pychecker).
4766
4772
4767 * Version 0.1.4 opened for bugfixing.
4773 * Version 0.1.4 opened for bugfixing.
4768
4774
4769 2001-11-07 Fernando Perez <fperez@colorado.edu>
4775 2001-11-07 Fernando Perez <fperez@colorado.edu>
4770
4776
4771 * Version 0.1.3 released, mainly because of the raw_input bug.
4777 * Version 0.1.3 released, mainly because of the raw_input bug.
4772
4778
4773 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4779 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4774 and when testing for whether things were callable, a call could
4780 and when testing for whether things were callable, a call could
4775 actually be made to certain functions. They would get called again
4781 actually be made to certain functions. They would get called again
4776 once 'really' executed, with a resulting double call. A disaster
4782 once 'really' executed, with a resulting double call. A disaster
4777 in many cases (list.reverse() would never work!).
4783 in many cases (list.reverse() would never work!).
4778
4784
4779 * Removed prefilter() function, moved its code to raw_input (which
4785 * Removed prefilter() function, moved its code to raw_input (which
4780 after all was just a near-empty caller for prefilter). This saves
4786 after all was just a near-empty caller for prefilter). This saves
4781 a function call on every prompt, and simplifies the class a tiny bit.
4787 a function call on every prompt, and simplifies the class a tiny bit.
4782
4788
4783 * Fix _ip to __ip name in magic example file.
4789 * Fix _ip to __ip name in magic example file.
4784
4790
4785 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4791 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4786 work with non-gnu versions of tar.
4792 work with non-gnu versions of tar.
4787
4793
4788 2001-11-06 Fernando Perez <fperez@colorado.edu>
4794 2001-11-06 Fernando Perez <fperez@colorado.edu>
4789
4795
4790 * Version 0.1.2. Just to keep track of the recent changes.
4796 * Version 0.1.2. Just to keep track of the recent changes.
4791
4797
4792 * Fixed nasty bug in output prompt routine. It used to check 'if
4798 * Fixed nasty bug in output prompt routine. It used to check 'if
4793 arg != None...'. Problem is, this fails if arg implements a
4799 arg != None...'. Problem is, this fails if arg implements a
4794 special comparison (__cmp__) which disallows comparing to
4800 special comparison (__cmp__) which disallows comparing to
4795 None. Found it when trying to use the PhysicalQuantity module from
4801 None. Found it when trying to use the PhysicalQuantity module from
4796 ScientificPython.
4802 ScientificPython.
4797
4803
4798 2001-11-05 Fernando Perez <fperez@colorado.edu>
4804 2001-11-05 Fernando Perez <fperez@colorado.edu>
4799
4805
4800 * Also added dirs. Now the pushd/popd/dirs family functions
4806 * Also added dirs. Now the pushd/popd/dirs family functions
4801 basically like the shell, with the added convenience of going home
4807 basically like the shell, with the added convenience of going home
4802 when called with no args.
4808 when called with no args.
4803
4809
4804 * pushd/popd slightly modified to mimic shell behavior more
4810 * pushd/popd slightly modified to mimic shell behavior more
4805 closely.
4811 closely.
4806
4812
4807 * Added env,pushd,popd from ShellServices as magic functions. I
4813 * Added env,pushd,popd from ShellServices as magic functions. I
4808 think the cleanest will be to port all desired functions from
4814 think the cleanest will be to port all desired functions from
4809 ShellServices as magics and remove ShellServices altogether. This
4815 ShellServices as magics and remove ShellServices altogether. This
4810 will provide a single, clean way of adding functionality
4816 will provide a single, clean way of adding functionality
4811 (shell-type or otherwise) to IP.
4817 (shell-type or otherwise) to IP.
4812
4818
4813 2001-11-04 Fernando Perez <fperez@colorado.edu>
4819 2001-11-04 Fernando Perez <fperez@colorado.edu>
4814
4820
4815 * Added .ipython/ directory to sys.path. This way users can keep
4821 * Added .ipython/ directory to sys.path. This way users can keep
4816 customizations there and access them via import.
4822 customizations there and access them via import.
4817
4823
4818 2001-11-03 Fernando Perez <fperez@colorado.edu>
4824 2001-11-03 Fernando Perez <fperez@colorado.edu>
4819
4825
4820 * Opened version 0.1.1 for new changes.
4826 * Opened version 0.1.1 for new changes.
4821
4827
4822 * Changed version number to 0.1.0: first 'public' release, sent to
4828 * Changed version number to 0.1.0: first 'public' release, sent to
4823 Nathan and Janko.
4829 Nathan and Janko.
4824
4830
4825 * Lots of small fixes and tweaks.
4831 * Lots of small fixes and tweaks.
4826
4832
4827 * Minor changes to whos format. Now strings are shown, snipped if
4833 * Minor changes to whos format. Now strings are shown, snipped if
4828 too long.
4834 too long.
4829
4835
4830 * Changed ShellServices to work on __main__ so they show up in @who
4836 * Changed ShellServices to work on __main__ so they show up in @who
4831
4837
4832 * Help also works with ? at the end of a line:
4838 * Help also works with ? at the end of a line:
4833 ?sin and sin?
4839 ?sin and sin?
4834 both produce the same effect. This is nice, as often I use the
4840 both produce the same effect. This is nice, as often I use the
4835 tab-complete to find the name of a method, but I used to then have
4841 tab-complete to find the name of a method, but I used to then have
4836 to go to the beginning of the line to put a ? if I wanted more
4842 to go to the beginning of the line to put a ? if I wanted more
4837 info. Now I can just add the ? and hit return. Convenient.
4843 info. Now I can just add the ? and hit return. Convenient.
4838
4844
4839 2001-11-02 Fernando Perez <fperez@colorado.edu>
4845 2001-11-02 Fernando Perez <fperez@colorado.edu>
4840
4846
4841 * Python version check (>=2.1) added.
4847 * Python version check (>=2.1) added.
4842
4848
4843 * Added LazyPython documentation. At this point the docs are quite
4849 * Added LazyPython documentation. At this point the docs are quite
4844 a mess. A cleanup is in order.
4850 a mess. A cleanup is in order.
4845
4851
4846 * Auto-installer created. For some bizarre reason, the zipfiles
4852 * Auto-installer created. For some bizarre reason, the zipfiles
4847 module isn't working on my system. So I made a tar version
4853 module isn't working on my system. So I made a tar version
4848 (hopefully the command line options in various systems won't kill
4854 (hopefully the command line options in various systems won't kill
4849 me).
4855 me).
4850
4856
4851 * Fixes to Struct in genutils. Now all dictionary-like methods are
4857 * Fixes to Struct in genutils. Now all dictionary-like methods are
4852 protected (reasonably).
4858 protected (reasonably).
4853
4859
4854 * Added pager function to genutils and changed ? to print usage
4860 * Added pager function to genutils and changed ? to print usage
4855 note through it (it was too long).
4861 note through it (it was too long).
4856
4862
4857 * Added the LazyPython functionality. Works great! I changed the
4863 * Added the LazyPython functionality. Works great! I changed the
4858 auto-quote escape to ';', it's on home row and next to '. But
4864 auto-quote escape to ';', it's on home row and next to '. But
4859 both auto-quote and auto-paren (still /) escapes are command-line
4865 both auto-quote and auto-paren (still /) escapes are command-line
4860 parameters.
4866 parameters.
4861
4867
4862
4868
4863 2001-11-01 Fernando Perez <fperez@colorado.edu>
4869 2001-11-01 Fernando Perez <fperez@colorado.edu>
4864
4870
4865 * Version changed to 0.0.7. Fairly large change: configuration now
4871 * Version changed to 0.0.7. Fairly large change: configuration now
4866 is all stored in a directory, by default .ipython. There, all
4872 is all stored in a directory, by default .ipython. There, all
4867 config files have normal looking names (not .names)
4873 config files have normal looking names (not .names)
4868
4874
4869 * Version 0.0.6 Released first to Lucas and Archie as a test
4875 * Version 0.0.6 Released first to Lucas and Archie as a test
4870 run. Since it's the first 'semi-public' release, change version to
4876 run. Since it's the first 'semi-public' release, change version to
4871 > 0.0.6 for any changes now.
4877 > 0.0.6 for any changes now.
4872
4878
4873 * Stuff I had put in the ipplib.py changelog:
4879 * Stuff I had put in the ipplib.py changelog:
4874
4880
4875 Changes to InteractiveShell:
4881 Changes to InteractiveShell:
4876
4882
4877 - Made the usage message a parameter.
4883 - Made the usage message a parameter.
4878
4884
4879 - Require the name of the shell variable to be given. It's a bit
4885 - Require the name of the shell variable to be given. It's a bit
4880 of a hack, but allows the name 'shell' not to be hardwire in the
4886 of a hack, but allows the name 'shell' not to be hardwire in the
4881 magic (@) handler, which is problematic b/c it requires
4887 magic (@) handler, which is problematic b/c it requires
4882 polluting the global namespace with 'shell'. This in turn is
4888 polluting the global namespace with 'shell'. This in turn is
4883 fragile: if a user redefines a variable called shell, things
4889 fragile: if a user redefines a variable called shell, things
4884 break.
4890 break.
4885
4891
4886 - magic @: all functions available through @ need to be defined
4892 - magic @: all functions available through @ need to be defined
4887 as magic_<name>, even though they can be called simply as
4893 as magic_<name>, even though they can be called simply as
4888 @<name>. This allows the special command @magic to gather
4894 @<name>. This allows the special command @magic to gather
4889 information automatically about all existing magic functions,
4895 information automatically about all existing magic functions,
4890 even if they are run-time user extensions, by parsing the shell
4896 even if they are run-time user extensions, by parsing the shell
4891 instance __dict__ looking for special magic_ names.
4897 instance __dict__ looking for special magic_ names.
4892
4898
4893 - mainloop: added *two* local namespace parameters. This allows
4899 - mainloop: added *two* local namespace parameters. This allows
4894 the class to differentiate between parameters which were there
4900 the class to differentiate between parameters which were there
4895 before and after command line initialization was processed. This
4901 before and after command line initialization was processed. This
4896 way, later @who can show things loaded at startup by the
4902 way, later @who can show things loaded at startup by the
4897 user. This trick was necessary to make session saving/reloading
4903 user. This trick was necessary to make session saving/reloading
4898 really work: ideally after saving/exiting/reloading a session,
4904 really work: ideally after saving/exiting/reloading a session,
4899 *everythin* should look the same, including the output of @who. I
4905 *everythin* should look the same, including the output of @who. I
4900 was only able to make this work with this double namespace
4906 was only able to make this work with this double namespace
4901 trick.
4907 trick.
4902
4908
4903 - added a header to the logfile which allows (almost) full
4909 - added a header to the logfile which allows (almost) full
4904 session restoring.
4910 session restoring.
4905
4911
4906 - prepend lines beginning with @ or !, with a and log
4912 - prepend lines beginning with @ or !, with a and log
4907 them. Why? !lines: may be useful to know what you did @lines:
4913 them. Why? !lines: may be useful to know what you did @lines:
4908 they may affect session state. So when restoring a session, at
4914 they may affect session state. So when restoring a session, at
4909 least inform the user of their presence. I couldn't quite get
4915 least inform the user of their presence. I couldn't quite get
4910 them to properly re-execute, but at least the user is warned.
4916 them to properly re-execute, but at least the user is warned.
4911
4917
4912 * Started ChangeLog.
4918 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now