##// END OF EJS Templates
first part of rocky bernstein's pydb patch - Magic.py and ipython.el"
vivainio -
Show More
@@ -1,3011 +1,3011
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """Magic functions for InteractiveShell.
2 """Magic functions for InteractiveShell.
3
3
4 $Id: Magic.py 1815 2006-10-10 04:46:24Z fptest $"""
4 $Id: Magic.py 1823 2006-10-13 15:09:08Z vivainio $"""
5
5
6 #*****************************************************************************
6 #*****************************************************************************
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
7 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
9 #
9 #
10 # Distributed under the terms of the BSD License. The full license is in
10 # Distributed under the terms of the BSD License. The full license is in
11 # the file COPYING, distributed as part of this software.
11 # the file COPYING, distributed as part of this software.
12 #*****************************************************************************
12 #*****************************************************************************
13
13
14 #****************************************************************************
14 #****************************************************************************
15 # Modules and globals
15 # Modules and globals
16
16
17 from IPython import Release
17 from IPython import Release
18 __author__ = '%s <%s>\n%s <%s>' % \
18 __author__ = '%s <%s>\n%s <%s>' % \
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
19 ( Release.authors['Janko'] + Release.authors['Fernando'] )
20 __license__ = Release.license
20 __license__ = Release.license
21
21
22 # Python standard modules
22 # Python standard modules
23 import __builtin__
23 import __builtin__
24 import bdb
24 import bdb
25 import inspect
25 import inspect
26 import os
26 import os
27 import pdb
27 import pdb
28 import pydoc
28 import pydoc
29 import shlex
29 import shlex
30 import sys
30 import sys
31 import re
31 import re
32 import tempfile
32 import tempfile
33 import time
33 import time
34 import cPickle as pickle
34 import cPickle as pickle
35 import textwrap
35 import textwrap
36 from cStringIO import StringIO
36 from cStringIO import StringIO
37 from getopt import getopt,GetoptError
37 from getopt import getopt,GetoptError
38 from pprint import pprint, pformat
38 from pprint import pprint, pformat
39
39
40 # profile isn't bundled by default in Debian for license reasons
40 # profile isn't bundled by default in Debian for license reasons
41 try:
41 try:
42 import profile,pstats
42 import profile,pstats
43 except ImportError:
43 except ImportError:
44 profile = pstats = None
44 profile = pstats = None
45
45
46 # Homebrewed
46 # Homebrewed
47 import IPython
47 import IPython
48 from IPython import Debugger, OInspect, wildcard
48 from IPython import Debugger, OInspect, wildcard
49 from IPython.FakeModule import FakeModule
49 from IPython.FakeModule import FakeModule
50 from IPython.Itpl import Itpl, itpl, printpl,itplns
50 from IPython.Itpl import Itpl, itpl, printpl,itplns
51 from IPython.PyColorize import Parser
51 from IPython.PyColorize import Parser
52 from IPython.ipstruct import Struct
52 from IPython.ipstruct import Struct
53 from IPython.macro import Macro
53 from IPython.macro import Macro
54 from IPython.genutils import *
54 from IPython.genutils import *
55 from IPython import platutils
55 from IPython import platutils
56
56
57 #***************************************************************************
57 #***************************************************************************
58 # Utility functions
58 # Utility functions
59 def on_off(tag):
59 def on_off(tag):
60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
60 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
61 return ['OFF','ON'][tag]
61 return ['OFF','ON'][tag]
62
62
63 class Bunch: pass
63 class Bunch: pass
64
64
65 def arg_split(s,posix=True):
65 def arg_split(s,posix=True):
66 """Split a command line's arguments in a shell-like manner.
66 """Split a command line's arguments in a shell-like manner.
67
67
68 This is a modified version of the standard library's shlex.split()
68 This is a modified version of the standard library's shlex.split()
69 function, but with a default of posix=False for splitting, so that quotes
69 function, but with a default of posix=False for splitting, so that quotes
70 in inputs are respected."""
70 in inputs are respected."""
71
71
72 lex = shlex.shlex(s, posix=posix)
72 lex = shlex.shlex(s, posix=posix)
73 lex.whitespace_split = True
73 lex.whitespace_split = True
74 return list(lex)
74 return list(lex)
75
75
76 #***************************************************************************
76 #***************************************************************************
77 # Main class implementing Magic functionality
77 # Main class implementing Magic functionality
78 class Magic:
78 class Magic:
79 """Magic functions for InteractiveShell.
79 """Magic functions for InteractiveShell.
80
80
81 Shell functions which can be reached as %function_name. All magic
81 Shell functions which can be reached as %function_name. All magic
82 functions should accept a string, which they can parse for their own
82 functions should accept a string, which they can parse for their own
83 needs. This can make some functions easier to type, eg `%cd ../`
83 needs. This can make some functions easier to type, eg `%cd ../`
84 vs. `%cd("../")`
84 vs. `%cd("../")`
85
85
86 ALL definitions MUST begin with the prefix magic_. The user won't need it
86 ALL definitions MUST begin with the prefix magic_. The user won't need it
87 at the command line, but it is is needed in the definition. """
87 at the command line, but it is is needed in the definition. """
88
88
89 # class globals
89 # class globals
90 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
90 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
91 'Automagic is ON, % prefix NOT needed for magic functions.']
91 'Automagic is ON, % prefix NOT needed for magic functions.']
92
92
93 #......................................................................
93 #......................................................................
94 # some utility functions
94 # some utility functions
95
95
96 def __init__(self,shell):
96 def __init__(self,shell):
97
97
98 self.options_table = {}
98 self.options_table = {}
99 if profile is None:
99 if profile is None:
100 self.magic_prun = self.profile_missing_notice
100 self.magic_prun = self.profile_missing_notice
101 self.shell = shell
101 self.shell = shell
102
102
103 # namespace for holding state we may need
103 # namespace for holding state we may need
104 self._magic_state = Bunch()
104 self._magic_state = Bunch()
105
105
106 def profile_missing_notice(self, *args, **kwargs):
106 def profile_missing_notice(self, *args, **kwargs):
107 error("""\
107 error("""\
108 The profile module could not be found. If you are a Debian user,
108 The profile module could not be found. If you are a Debian user,
109 it has been removed from the standard Debian package because of its non-free
109 it has been removed from the standard Debian package because of its non-free
110 license. To use profiling, please install"python2.3-profiler" from non-free.""")
110 license. To use profiling, please install"python2.3-profiler" from non-free.""")
111
111
112 def default_option(self,fn,optstr):
112 def default_option(self,fn,optstr):
113 """Make an entry in the options_table for fn, with value optstr"""
113 """Make an entry in the options_table for fn, with value optstr"""
114
114
115 if fn not in self.lsmagic():
115 if fn not in self.lsmagic():
116 error("%s is not a magic function" % fn)
116 error("%s is not a magic function" % fn)
117 self.options_table[fn] = optstr
117 self.options_table[fn] = optstr
118
118
119 def lsmagic(self):
119 def lsmagic(self):
120 """Return a list of currently available magic functions.
120 """Return a list of currently available magic functions.
121
121
122 Gives a list of the bare names after mangling (['ls','cd', ...], not
122 Gives a list of the bare names after mangling (['ls','cd', ...], not
123 ['magic_ls','magic_cd',...]"""
123 ['magic_ls','magic_cd',...]"""
124
124
125 # FIXME. This needs a cleanup, in the way the magics list is built.
125 # FIXME. This needs a cleanup, in the way the magics list is built.
126
126
127 # magics in class definition
127 # magics in class definition
128 class_magic = lambda fn: fn.startswith('magic_') and \
128 class_magic = lambda fn: fn.startswith('magic_') and \
129 callable(Magic.__dict__[fn])
129 callable(Magic.__dict__[fn])
130 # in instance namespace (run-time user additions)
130 # in instance namespace (run-time user additions)
131 inst_magic = lambda fn: fn.startswith('magic_') and \
131 inst_magic = lambda fn: fn.startswith('magic_') and \
132 callable(self.__dict__[fn])
132 callable(self.__dict__[fn])
133 # and bound magics by user (so they can access self):
133 # and bound magics by user (so they can access self):
134 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
134 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
135 callable(self.__class__.__dict__[fn])
135 callable(self.__class__.__dict__[fn])
136 magics = filter(class_magic,Magic.__dict__.keys()) + \
136 magics = filter(class_magic,Magic.__dict__.keys()) + \
137 filter(inst_magic,self.__dict__.keys()) + \
137 filter(inst_magic,self.__dict__.keys()) + \
138 filter(inst_bound_magic,self.__class__.__dict__.keys())
138 filter(inst_bound_magic,self.__class__.__dict__.keys())
139 out = []
139 out = []
140 for fn in magics:
140 for fn in magics:
141 out.append(fn.replace('magic_','',1))
141 out.append(fn.replace('magic_','',1))
142 out.sort()
142 out.sort()
143 return out
143 return out
144
144
145 def extract_input_slices(self,slices,raw=False):
145 def extract_input_slices(self,slices,raw=False):
146 """Return as a string a set of input history slices.
146 """Return as a string a set of input history slices.
147
147
148 Inputs:
148 Inputs:
149
149
150 - slices: the set of slices is given as a list of strings (like
150 - slices: the set of slices is given as a list of strings (like
151 ['1','4:8','9'], since this function is for use by magic functions
151 ['1','4:8','9'], since this function is for use by magic functions
152 which get their arguments as strings.
152 which get their arguments as strings.
153
153
154 Optional inputs:
154 Optional inputs:
155
155
156 - raw(False): by default, the processed input is used. If this is
156 - raw(False): by default, the processed input is used. If this is
157 true, the raw input history is used instead.
157 true, the raw input history is used instead.
158
158
159 Note that slices can be called with two notations:
159 Note that slices can be called with two notations:
160
160
161 N:M -> standard python form, means including items N...(M-1).
161 N:M -> standard python form, means including items N...(M-1).
162
162
163 N-M -> include items N..M (closed endpoint)."""
163 N-M -> include items N..M (closed endpoint)."""
164
164
165 if raw:
165 if raw:
166 hist = self.shell.input_hist_raw
166 hist = self.shell.input_hist_raw
167 else:
167 else:
168 hist = self.shell.input_hist
168 hist = self.shell.input_hist
169
169
170 cmds = []
170 cmds = []
171 for chunk in slices:
171 for chunk in slices:
172 if ':' in chunk:
172 if ':' in chunk:
173 ini,fin = map(int,chunk.split(':'))
173 ini,fin = map(int,chunk.split(':'))
174 elif '-' in chunk:
174 elif '-' in chunk:
175 ini,fin = map(int,chunk.split('-'))
175 ini,fin = map(int,chunk.split('-'))
176 fin += 1
176 fin += 1
177 else:
177 else:
178 ini = int(chunk)
178 ini = int(chunk)
179 fin = ini+1
179 fin = ini+1
180 cmds.append(hist[ini:fin])
180 cmds.append(hist[ini:fin])
181 return cmds
181 return cmds
182
182
183 def _ofind(self,oname):
183 def _ofind(self, oname, namespaces=None):
184 """Find an object in the available namespaces.
184 """Find an object in the available namespaces.
185
185
186 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
186 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
187
187
188 Has special code to detect magic functions.
188 Has special code to detect magic functions.
189 """
189 """
190
190
191 oname = oname.strip()
191 oname = oname.strip()
192
192
193 # Namespaces to search in:
193 alias_ns = None
194 user_ns = self.shell.user_ns
194 if namespaces is None:
195 internal_ns = self.shell.internal_ns
195 # Namespaces to search in:
196 builtin_ns = __builtin__.__dict__
196 # Put them in a list. The order is important so that we
197 alias_ns = self.shell.alias_table
197 # find things in the same order that Python finds them.
198
198 namespaces = [ ('Interactive', self.shell.user_ns),
199 # Put them in a list. The order is important so that we find things in
199 ('IPython internal', self.shell.internal_ns),
200 # the same order that Python finds them.
200 ('Python builtin', __builtin__.__dict__),
201 namespaces = [ ('Interactive',user_ns),
201 ('Alias', self.shell.alias_table),
202 ('IPython internal',internal_ns),
202 ]
203 ('Python builtin',builtin_ns),
203 alias_ns = self.shell.alias_table
204 ('Alias',alias_ns),
205 ]
206
204
207 # initialize results to 'null'
205 # initialize results to 'null'
208 found = 0; obj = None; ospace = None; ds = None;
206 found = 0; obj = None; ospace = None; ds = None;
209 ismagic = 0; isalias = 0; parent = None
207 ismagic = 0; isalias = 0; parent = None
210
208
211 # Look for the given name by splitting it in parts. If the head is
209 # Look for the given name by splitting it in parts. If the head is
212 # found, then we look for all the remaining parts as members, and only
210 # found, then we look for all the remaining parts as members, and only
213 # declare success if we can find them all.
211 # declare success if we can find them all.
214 oname_parts = oname.split('.')
212 oname_parts = oname.split('.')
215 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
213 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
216 for nsname,ns in namespaces:
214 for nsname,ns in namespaces:
217 try:
215 try:
218 obj = ns[oname_head]
216 obj = ns[oname_head]
219 except KeyError:
217 except KeyError:
220 continue
218 continue
221 else:
219 else:
222 for part in oname_rest:
220 for part in oname_rest:
223 try:
221 try:
224 parent = obj
222 parent = obj
225 obj = getattr(obj,part)
223 obj = getattr(obj,part)
226 except:
224 except:
227 # Blanket except b/c some badly implemented objects
225 # Blanket except b/c some badly implemented objects
228 # allow __getattr__ to raise exceptions other than
226 # allow __getattr__ to raise exceptions other than
229 # AttributeError, which then crashes IPython.
227 # AttributeError, which then crashes IPython.
230 break
228 break
231 else:
229 else:
232 # If we finish the for loop (no break), we got all members
230 # If we finish the for loop (no break), we got all members
233 found = 1
231 found = 1
234 ospace = nsname
232 ospace = nsname
235 if ns == alias_ns:
233 if ns == alias_ns:
236 isalias = 1
234 isalias = 1
237 break # namespace loop
235 break # namespace loop
238
236
239 # Try to see if it's magic
237 # Try to see if it's magic
240 if not found:
238 if not found:
241 if oname.startswith(self.shell.ESC_MAGIC):
239 if oname.startswith(self.shell.ESC_MAGIC):
242 oname = oname[1:]
240 oname = oname[1:]
243 obj = getattr(self,'magic_'+oname,None)
241 obj = getattr(self,'magic_'+oname,None)
244 if obj is not None:
242 if obj is not None:
245 found = 1
243 found = 1
246 ospace = 'IPython internal'
244 ospace = 'IPython internal'
247 ismagic = 1
245 ismagic = 1
248
246
249 # Last try: special-case some literals like '', [], {}, etc:
247 # Last try: special-case some literals like '', [], {}, etc:
250 if not found and oname_head in ["''",'""','[]','{}','()']:
248 if not found and oname_head in ["''",'""','[]','{}','()']:
251 obj = eval(oname_head)
249 obj = eval(oname_head)
252 found = 1
250 found = 1
253 ospace = 'Interactive'
251 ospace = 'Interactive'
254
252
255 return {'found':found, 'obj':obj, 'namespace':ospace,
253 return {'found':found, 'obj':obj, 'namespace':ospace,
256 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
254 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
257
255
258 def arg_err(self,func):
256 def arg_err(self,func):
259 """Print docstring if incorrect arguments were passed"""
257 """Print docstring if incorrect arguments were passed"""
260 print 'Error in arguments:'
258 print 'Error in arguments:'
261 print OInspect.getdoc(func)
259 print OInspect.getdoc(func)
262
260
263 def format_latex(self,strng):
261 def format_latex(self,strng):
264 """Format a string for latex inclusion."""
262 """Format a string for latex inclusion."""
265
263
266 # Characters that need to be escaped for latex:
264 # Characters that need to be escaped for latex:
267 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
265 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
268 # Magic command names as headers:
266 # Magic command names as headers:
269 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
267 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
270 re.MULTILINE)
268 re.MULTILINE)
271 # Magic commands
269 # Magic commands
272 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
270 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
273 re.MULTILINE)
271 re.MULTILINE)
274 # Paragraph continue
272 # Paragraph continue
275 par_re = re.compile(r'\\$',re.MULTILINE)
273 par_re = re.compile(r'\\$',re.MULTILINE)
276
274
277 # The "\n" symbol
275 # The "\n" symbol
278 newline_re = re.compile(r'\\n')
276 newline_re = re.compile(r'\\n')
279
277
280 # Now build the string for output:
278 # Now build the string for output:
281 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
279 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
282 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
280 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
283 strng)
281 strng)
284 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
282 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
285 strng = par_re.sub(r'\\\\',strng)
283 strng = par_re.sub(r'\\\\',strng)
286 strng = escape_re.sub(r'\\\1',strng)
284 strng = escape_re.sub(r'\\\1',strng)
287 strng = newline_re.sub(r'\\textbackslash{}n',strng)
285 strng = newline_re.sub(r'\\textbackslash{}n',strng)
288 return strng
286 return strng
289
287
290 def format_screen(self,strng):
288 def format_screen(self,strng):
291 """Format a string for screen printing.
289 """Format a string for screen printing.
292
290
293 This removes some latex-type format codes."""
291 This removes some latex-type format codes."""
294 # Paragraph continue
292 # Paragraph continue
295 par_re = re.compile(r'\\$',re.MULTILINE)
293 par_re = re.compile(r'\\$',re.MULTILINE)
296 strng = par_re.sub('',strng)
294 strng = par_re.sub('',strng)
297 return strng
295 return strng
298
296
299 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
297 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
300 """Parse options passed to an argument string.
298 """Parse options passed to an argument string.
301
299
302 The interface is similar to that of getopt(), but it returns back a
300 The interface is similar to that of getopt(), but it returns back a
303 Struct with the options as keys and the stripped argument string still
301 Struct with the options as keys and the stripped argument string still
304 as a string.
302 as a string.
305
303
306 arg_str is quoted as a true sys.argv vector by using shlex.split.
304 arg_str is quoted as a true sys.argv vector by using shlex.split.
307 This allows us to easily expand variables, glob files, quote
305 This allows us to easily expand variables, glob files, quote
308 arguments, etc.
306 arguments, etc.
309
307
310 Options:
308 Options:
311 -mode: default 'string'. If given as 'list', the argument string is
309 -mode: default 'string'. If given as 'list', the argument string is
312 returned as a list (split on whitespace) instead of a string.
310 returned as a list (split on whitespace) instead of a string.
313
311
314 -list_all: put all option values in lists. Normally only options
312 -list_all: put all option values in lists. Normally only options
315 appearing more than once are put in a list.
313 appearing more than once are put in a list.
316
314
317 -posix (True): whether to split the input line in POSIX mode or not,
315 -posix (True): whether to split the input line in POSIX mode or not,
318 as per the conventions outlined in the shlex module from the
316 as per the conventions outlined in the shlex module from the
319 standard library."""
317 standard library."""
320
318
321 # inject default options at the beginning of the input line
319 # inject default options at the beginning of the input line
322 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
320 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
323 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
321 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
324
322
325 mode = kw.get('mode','string')
323 mode = kw.get('mode','string')
326 if mode not in ['string','list']:
324 if mode not in ['string','list']:
327 raise ValueError,'incorrect mode given: %s' % mode
325 raise ValueError,'incorrect mode given: %s' % mode
328 # Get options
326 # Get options
329 list_all = kw.get('list_all',0)
327 list_all = kw.get('list_all',0)
330 posix = kw.get('posix',True)
328 posix = kw.get('posix',True)
331
329
332 # Check if we have more than one argument to warrant extra processing:
330 # Check if we have more than one argument to warrant extra processing:
333 odict = {} # Dictionary with options
331 odict = {} # Dictionary with options
334 args = arg_str.split()
332 args = arg_str.split()
335 if len(args) >= 1:
333 if len(args) >= 1:
336 # If the list of inputs only has 0 or 1 thing in it, there's no
334 # If the list of inputs only has 0 or 1 thing in it, there's no
337 # need to look for options
335 # need to look for options
338 argv = arg_split(arg_str,posix)
336 argv = arg_split(arg_str,posix)
339 # Do regular option processing
337 # Do regular option processing
340 try:
338 try:
341 opts,args = getopt(argv,opt_str,*long_opts)
339 opts,args = getopt(argv,opt_str,*long_opts)
342 except GetoptError,e:
340 except GetoptError,e:
343 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
341 raise GetoptError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
344 " ".join(long_opts)))
342 " ".join(long_opts)))
345 for o,a in opts:
343 for o,a in opts:
346 if o.startswith('--'):
344 if o.startswith('--'):
347 o = o[2:]
345 o = o[2:]
348 else:
346 else:
349 o = o[1:]
347 o = o[1:]
350 try:
348 try:
351 odict[o].append(a)
349 odict[o].append(a)
352 except AttributeError:
350 except AttributeError:
353 odict[o] = [odict[o],a]
351 odict[o] = [odict[o],a]
354 except KeyError:
352 except KeyError:
355 if list_all:
353 if list_all:
356 odict[o] = [a]
354 odict[o] = [a]
357 else:
355 else:
358 odict[o] = a
356 odict[o] = a
359
357
360 # Prepare opts,args for return
358 # Prepare opts,args for return
361 opts = Struct(odict)
359 opts = Struct(odict)
362 if mode == 'string':
360 if mode == 'string':
363 args = ' '.join(args)
361 args = ' '.join(args)
364
362
365 return opts,args
363 return opts,args
366
364
367 #......................................................................
365 #......................................................................
368 # And now the actual magic functions
366 # And now the actual magic functions
369
367
370 # Functions for IPython shell work (vars,funcs, config, etc)
368 # Functions for IPython shell work (vars,funcs, config, etc)
371 def magic_lsmagic(self, parameter_s = ''):
369 def magic_lsmagic(self, parameter_s = ''):
372 """List currently available magic functions."""
370 """List currently available magic functions."""
373 mesc = self.shell.ESC_MAGIC
371 mesc = self.shell.ESC_MAGIC
374 print 'Available magic functions:\n'+mesc+\
372 print 'Available magic functions:\n'+mesc+\
375 (' '+mesc).join(self.lsmagic())
373 (' '+mesc).join(self.lsmagic())
376 print '\n' + Magic.auto_status[self.shell.rc.automagic]
374 print '\n' + Magic.auto_status[self.shell.rc.automagic]
377 return None
375 return None
378
376
379 def magic_magic(self, parameter_s = ''):
377 def magic_magic(self, parameter_s = ''):
380 """Print information about the magic function system."""
378 """Print information about the magic function system."""
381
379
382 mode = ''
380 mode = ''
383 try:
381 try:
384 if parameter_s.split()[0] == '-latex':
382 if parameter_s.split()[0] == '-latex':
385 mode = 'latex'
383 mode = 'latex'
386 if parameter_s.split()[0] == '-brief':
384 if parameter_s.split()[0] == '-brief':
387 mode = 'brief'
385 mode = 'brief'
388 except:
386 except:
389 pass
387 pass
390
388
391 magic_docs = []
389 magic_docs = []
392 for fname in self.lsmagic():
390 for fname in self.lsmagic():
393 mname = 'magic_' + fname
391 mname = 'magic_' + fname
394 for space in (Magic,self,self.__class__):
392 for space in (Magic,self,self.__class__):
395 try:
393 try:
396 fn = space.__dict__[mname]
394 fn = space.__dict__[mname]
397 except KeyError:
395 except KeyError:
398 pass
396 pass
399 else:
397 else:
400 break
398 break
401 if mode == 'brief':
399 if mode == 'brief':
402 # only first line
400 # only first line
403 fndoc = fn.__doc__.split('\n',1)[0]
401 fndoc = fn.__doc__.split('\n',1)[0]
404 else:
402 else:
405 fndoc = fn.__doc__
403 fndoc = fn.__doc__
406
404
407 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
405 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
408 fname,fndoc))
406 fname,fndoc))
409 magic_docs = ''.join(magic_docs)
407 magic_docs = ''.join(magic_docs)
410
408
411 if mode == 'latex':
409 if mode == 'latex':
412 print self.format_latex(magic_docs)
410 print self.format_latex(magic_docs)
413 return
411 return
414 else:
412 else:
415 magic_docs = self.format_screen(magic_docs)
413 magic_docs = self.format_screen(magic_docs)
416 if mode == 'brief':
414 if mode == 'brief':
417 return magic_docs
415 return magic_docs
418
416
419 outmsg = """
417 outmsg = """
420 IPython's 'magic' functions
418 IPython's 'magic' functions
421 ===========================
419 ===========================
422
420
423 The magic function system provides a series of functions which allow you to
421 The magic function system provides a series of functions which allow you to
424 control the behavior of IPython itself, plus a lot of system-type
422 control the behavior of IPython itself, plus a lot of system-type
425 features. All these functions are prefixed with a % character, but parameters
423 features. All these functions are prefixed with a % character, but parameters
426 are given without parentheses or quotes.
424 are given without parentheses or quotes.
427
425
428 NOTE: If you have 'automagic' enabled (via the command line option or with the
426 NOTE: If you have 'automagic' enabled (via the command line option or with the
429 %automagic function), you don't need to type in the % explicitly. By default,
427 %automagic function), you don't need to type in the % explicitly. By default,
430 IPython ships with automagic on, so you should only rarely need the % escape.
428 IPython ships with automagic on, so you should only rarely need the % escape.
431
429
432 Example: typing '%cd mydir' (without the quotes) changes you working directory
430 Example: typing '%cd mydir' (without the quotes) changes you working directory
433 to 'mydir', if it exists.
431 to 'mydir', if it exists.
434
432
435 You can define your own magic functions to extend the system. See the supplied
433 You can define your own magic functions to extend the system. See the supplied
436 ipythonrc and example-magic.py files for details (in your ipython
434 ipythonrc and example-magic.py files for details (in your ipython
437 configuration directory, typically $HOME/.ipython/).
435 configuration directory, typically $HOME/.ipython/).
438
436
439 You can also define your own aliased names for magic functions. In your
437 You can also define your own aliased names for magic functions. In your
440 ipythonrc file, placing a line like:
438 ipythonrc file, placing a line like:
441
439
442 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
440 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
443
441
444 will define %pf as a new name for %profile.
442 will define %pf as a new name for %profile.
445
443
446 You can also call magics in code using the ipmagic() function, which IPython
444 You can also call magics in code using the ipmagic() function, which IPython
447 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
445 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
448
446
449 For a list of the available magic functions, use %lsmagic. For a description
447 For a list of the available magic functions, use %lsmagic. For a description
450 of any of them, type %magic_name?, e.g. '%cd?'.
448 of any of them, type %magic_name?, e.g. '%cd?'.
451
449
452 Currently the magic system has the following functions:\n"""
450 Currently the magic system has the following functions:\n"""
453
451
454 mesc = self.shell.ESC_MAGIC
452 mesc = self.shell.ESC_MAGIC
455 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
453 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
456 "\n\n%s%s\n\n%s" % (outmsg,
454 "\n\n%s%s\n\n%s" % (outmsg,
457 magic_docs,mesc,mesc,
455 magic_docs,mesc,mesc,
458 (' '+mesc).join(self.lsmagic()),
456 (' '+mesc).join(self.lsmagic()),
459 Magic.auto_status[self.shell.rc.automagic] ) )
457 Magic.auto_status[self.shell.rc.automagic] ) )
460
458
461 page(outmsg,screen_lines=self.shell.rc.screen_length)
459 page(outmsg,screen_lines=self.shell.rc.screen_length)
462
460
463 def magic_automagic(self, parameter_s = ''):
461 def magic_automagic(self, parameter_s = ''):
464 """Make magic functions callable without having to type the initial %.
462 """Make magic functions callable without having to type the initial %.
465
463
466 Toggles on/off (when off, you must call it as %automagic, of
464 Toggles on/off (when off, you must call it as %automagic, of
467 course). Note that magic functions have lowest priority, so if there's
465 course). Note that magic functions have lowest priority, so if there's
468 a variable whose name collides with that of a magic fn, automagic
466 a variable whose name collides with that of a magic fn, automagic
469 won't work for that function (you get the variable instead). However,
467 won't work for that function (you get the variable instead). However,
470 if you delete the variable (del var), the previously shadowed magic
468 if you delete the variable (del var), the previously shadowed magic
471 function becomes visible to automagic again."""
469 function becomes visible to automagic again."""
472
470
473 rc = self.shell.rc
471 rc = self.shell.rc
474 rc.automagic = not rc.automagic
472 rc.automagic = not rc.automagic
475 print '\n' + Magic.auto_status[rc.automagic]
473 print '\n' + Magic.auto_status[rc.automagic]
476
474
477 def magic_autocall(self, parameter_s = ''):
475 def magic_autocall(self, parameter_s = ''):
478 """Make functions callable without having to type parentheses.
476 """Make functions callable without having to type parentheses.
479
477
480 Usage:
478 Usage:
481
479
482 %autocall [mode]
480 %autocall [mode]
483
481
484 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
482 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
485 value is toggled on and off (remembering the previous state)."""
483 value is toggled on and off (remembering the previous state)."""
486
484
487 rc = self.shell.rc
485 rc = self.shell.rc
488
486
489 if parameter_s:
487 if parameter_s:
490 arg = int(parameter_s)
488 arg = int(parameter_s)
491 else:
489 else:
492 arg = 'toggle'
490 arg = 'toggle'
493
491
494 if not arg in (0,1,2,'toggle'):
492 if not arg in (0,1,2,'toggle'):
495 error('Valid modes: (0->Off, 1->Smart, 2->Full')
493 error('Valid modes: (0->Off, 1->Smart, 2->Full')
496 return
494 return
497
495
498 if arg in (0,1,2):
496 if arg in (0,1,2):
499 rc.autocall = arg
497 rc.autocall = arg
500 else: # toggle
498 else: # toggle
501 if rc.autocall:
499 if rc.autocall:
502 self._magic_state.autocall_save = rc.autocall
500 self._magic_state.autocall_save = rc.autocall
503 rc.autocall = 0
501 rc.autocall = 0
504 else:
502 else:
505 try:
503 try:
506 rc.autocall = self._magic_state.autocall_save
504 rc.autocall = self._magic_state.autocall_save
507 except AttributeError:
505 except AttributeError:
508 rc.autocall = self._magic_state.autocall_save = 1
506 rc.autocall = self._magic_state.autocall_save = 1
509
507
510 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
508 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
511
509
512 def magic_autoindent(self, parameter_s = ''):
510 def magic_autoindent(self, parameter_s = ''):
513 """Toggle autoindent on/off (if available)."""
511 """Toggle autoindent on/off (if available)."""
514
512
515 self.shell.set_autoindent()
513 self.shell.set_autoindent()
516 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
514 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
517
515
518 def magic_system_verbose(self, parameter_s = ''):
516 def magic_system_verbose(self, parameter_s = ''):
519 """Toggle verbose printing of system calls on/off."""
517 """Toggle verbose printing of system calls on/off."""
520
518
521 self.shell.rc_set_toggle('system_verbose')
519 self.shell.rc_set_toggle('system_verbose')
522 print "System verbose printing is:",\
520 print "System verbose printing is:",\
523 ['OFF','ON'][self.shell.rc.system_verbose]
521 ['OFF','ON'][self.shell.rc.system_verbose]
524
522
525 def magic_history(self, parameter_s = ''):
523 def magic_history(self, parameter_s = ''):
526 """Print input history (_i<n> variables), with most recent last.
524 """Print input history (_i<n> variables), with most recent last.
527
525
528 %history -> print at most 40 inputs (some may be multi-line)\\
526 %history -> print at most 40 inputs (some may be multi-line)\\
529 %history n -> print at most n inputs\\
527 %history n -> print at most n inputs\\
530 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
528 %history n1 n2 -> print inputs between n1 and n2 (n2 not included)\\
531
529
532 Each input's number <n> is shown, and is accessible as the
530 Each input's number <n> is shown, and is accessible as the
533 automatically generated variable _i<n>. Multi-line statements are
531 automatically generated variable _i<n>. Multi-line statements are
534 printed starting at a new line for easy copy/paste.
532 printed starting at a new line for easy copy/paste.
535
533
536
534
537 Options:
535 Options:
538
536
539 -n: do NOT print line numbers. This is useful if you want to get a
537 -n: do NOT print line numbers. This is useful if you want to get a
540 printout of many lines which can be directly pasted into a text
538 printout of many lines which can be directly pasted into a text
541 editor.
539 editor.
542
540
543 This feature is only available if numbered prompts are in use.
541 This feature is only available if numbered prompts are in use.
544
542
545 -r: print the 'raw' history. IPython filters your input and
543 -r: print the 'raw' history. IPython filters your input and
546 converts it all into valid Python source before executing it (things
544 converts it all into valid Python source before executing it (things
547 like magics or aliases are turned into function calls, for
545 like magics or aliases are turned into function calls, for
548 example). With this option, you'll see the unfiltered history
546 example). With this option, you'll see the unfiltered history
549 instead of the filtered version: '%cd /' will be seen as '%cd /'
547 instead of the filtered version: '%cd /' will be seen as '%cd /'
550 instead of '_ip.magic("%cd /")'.
548 instead of '_ip.magic("%cd /")'.
551 """
549 """
552
550
553 shell = self.shell
551 shell = self.shell
554 if not shell.outputcache.do_full_cache:
552 if not shell.outputcache.do_full_cache:
555 print 'This feature is only available if numbered prompts are in use.'
553 print 'This feature is only available if numbered prompts are in use.'
556 return
554 return
557 opts,args = self.parse_options(parameter_s,'nr',mode='list')
555 opts,args = self.parse_options(parameter_s,'nr',mode='list')
558
556
559 if opts.has_key('r'):
557 if opts.has_key('r'):
560 input_hist = shell.input_hist_raw
558 input_hist = shell.input_hist_raw
561 else:
559 else:
562 input_hist = shell.input_hist
560 input_hist = shell.input_hist
563
561
564 default_length = 40
562 default_length = 40
565 if len(args) == 0:
563 if len(args) == 0:
566 final = len(input_hist)
564 final = len(input_hist)
567 init = max(1,final-default_length)
565 init = max(1,final-default_length)
568 elif len(args) == 1:
566 elif len(args) == 1:
569 final = len(input_hist)
567 final = len(input_hist)
570 init = max(1,final-int(args[0]))
568 init = max(1,final-int(args[0]))
571 elif len(args) == 2:
569 elif len(args) == 2:
572 init,final = map(int,args)
570 init,final = map(int,args)
573 else:
571 else:
574 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
572 warn('%hist takes 0, 1 or 2 arguments separated by spaces.')
575 print self.magic_hist.__doc__
573 print self.magic_hist.__doc__
576 return
574 return
577 width = len(str(final))
575 width = len(str(final))
578 line_sep = ['','\n']
576 line_sep = ['','\n']
579 print_nums = not opts.has_key('n')
577 print_nums = not opts.has_key('n')
580 for in_num in range(init,final):
578 for in_num in range(init,final):
581 inline = input_hist[in_num]
579 inline = input_hist[in_num]
582 multiline = int(inline.count('\n') > 1)
580 multiline = int(inline.count('\n') > 1)
583 if print_nums:
581 if print_nums:
584 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
582 print '%s:%s' % (str(in_num).ljust(width),line_sep[multiline]),
585 print inline,
583 print inline,
586
584
587 def magic_hist(self, parameter_s=''):
585 def magic_hist(self, parameter_s=''):
588 """Alternate name for %history."""
586 """Alternate name for %history."""
589 return self.magic_history(parameter_s)
587 return self.magic_history(parameter_s)
590
588
591 def magic_p(self, parameter_s=''):
589 def magic_p(self, parameter_s=''):
592 """Just a short alias for Python's 'print'."""
590 """Just a short alias for Python's 'print'."""
593 exec 'print ' + parameter_s in self.shell.user_ns
591 exec 'print ' + parameter_s in self.shell.user_ns
594
592
595 def magic_r(self, parameter_s=''):
593 def magic_r(self, parameter_s=''):
596 """Repeat previous input.
594 """Repeat previous input.
597
595
598 If given an argument, repeats the previous command which starts with
596 If given an argument, repeats the previous command which starts with
599 the same string, otherwise it just repeats the previous input.
597 the same string, otherwise it just repeats the previous input.
600
598
601 Shell escaped commands (with ! as first character) are not recognized
599 Shell escaped commands (with ! as first character) are not recognized
602 by this system, only pure python code and magic commands.
600 by this system, only pure python code and magic commands.
603 """
601 """
604
602
605 start = parameter_s.strip()
603 start = parameter_s.strip()
606 esc_magic = self.shell.ESC_MAGIC
604 esc_magic = self.shell.ESC_MAGIC
607 # Identify magic commands even if automagic is on (which means
605 # Identify magic commands even if automagic is on (which means
608 # the in-memory version is different from that typed by the user).
606 # the in-memory version is different from that typed by the user).
609 if self.shell.rc.automagic:
607 if self.shell.rc.automagic:
610 start_magic = esc_magic+start
608 start_magic = esc_magic+start
611 else:
609 else:
612 start_magic = start
610 start_magic = start
613 # Look through the input history in reverse
611 # Look through the input history in reverse
614 for n in range(len(self.shell.input_hist)-2,0,-1):
612 for n in range(len(self.shell.input_hist)-2,0,-1):
615 input = self.shell.input_hist[n]
613 input = self.shell.input_hist[n]
616 # skip plain 'r' lines so we don't recurse to infinity
614 # skip plain 'r' lines so we don't recurse to infinity
617 if input != '_ip.magic("r")\n' and \
615 if input != '_ip.magic("r")\n' and \
618 (input.startswith(start) or input.startswith(start_magic)):
616 (input.startswith(start) or input.startswith(start_magic)):
619 #print 'match',`input` # dbg
617 #print 'match',`input` # dbg
620 print 'Executing:',input,
618 print 'Executing:',input,
621 self.shell.runlines(input)
619 self.shell.runlines(input)
622 return
620 return
623 print 'No previous input matching `%s` found.' % start
621 print 'No previous input matching `%s` found.' % start
624
622
625 def magic_page(self, parameter_s=''):
623 def magic_page(self, parameter_s=''):
626 """Pretty print the object and display it through a pager.
624 """Pretty print the object and display it through a pager.
627
625
628 If no parameter is given, use _ (last output)."""
626 If no parameter is given, use _ (last output)."""
629 # After a function contributed by Olivier Aubert, slightly modified.
627 # After a function contributed by Olivier Aubert, slightly modified.
630
628
631 oname = parameter_s and parameter_s or '_'
629 oname = parameter_s and parameter_s or '_'
632 info = self._ofind(oname)
630 info = self._ofind(oname)
633 if info['found']:
631 if info['found']:
634 page(pformat(info['obj']))
632 page(pformat(info['obj']))
635 else:
633 else:
636 print 'Object `%s` not found' % oname
634 print 'Object `%s` not found' % oname
637
635
638 def magic_profile(self, parameter_s=''):
636 def magic_profile(self, parameter_s=''):
639 """Print your currently active IPyhton profile."""
637 """Print your currently active IPyhton profile."""
640 if self.shell.rc.profile:
638 if self.shell.rc.profile:
641 printpl('Current IPython profile: $self.shell.rc.profile.')
639 printpl('Current IPython profile: $self.shell.rc.profile.')
642 else:
640 else:
643 print 'No profile active.'
641 print 'No profile active.'
644
642
645 def _inspect(self,meth,oname,**kw):
643 def _inspect(self,meth,oname,namespaces=None,**kw):
646 """Generic interface to the inspector system.
644 """Generic interface to the inspector system.
647
645
648 This function is meant to be called by pdef, pdoc & friends."""
646 This function is meant to be called by pdef, pdoc & friends."""
649
647
650 oname = oname.strip()
648 oname = oname.strip()
651 info = Struct(self._ofind(oname))
649 info = Struct(self._ofind(oname, namespaces))
652
650
653 if info.found:
651 if info.found:
654 # Get the docstring of the class property if it exists.
652 # Get the docstring of the class property if it exists.
655 path = oname.split('.')
653 path = oname.split('.')
656 root = '.'.join(path[:-1])
654 root = '.'.join(path[:-1])
657 if info.parent is not None:
655 if info.parent is not None:
658 try:
656 try:
659 target = getattr(info.parent, '__class__')
657 target = getattr(info.parent, '__class__')
660 # The object belongs to a class instance.
658 # The object belongs to a class instance.
661 try:
659 try:
662 target = getattr(target, path[-1])
660 target = getattr(target, path[-1])
663 # The class defines the object.
661 # The class defines the object.
664 if isinstance(target, property):
662 if isinstance(target, property):
665 oname = root + '.__class__.' + path[-1]
663 oname = root + '.__class__.' + path[-1]
666 info = Struct(self._ofind(oname))
664 info = Struct(self._ofind(oname))
667 except AttributeError: pass
665 except AttributeError: pass
668 except AttributeError: pass
666 except AttributeError: pass
669
667
670 pmethod = getattr(self.shell.inspector,meth)
668 pmethod = getattr(self.shell.inspector,meth)
671 formatter = info.ismagic and self.format_screen or None
669 formatter = info.ismagic and self.format_screen or None
672 if meth == 'pdoc':
670 if meth == 'pdoc':
673 pmethod(info.obj,oname,formatter)
671 pmethod(info.obj,oname,formatter)
674 elif meth == 'pinfo':
672 elif meth == 'pinfo':
675 pmethod(info.obj,oname,formatter,info,**kw)
673 pmethod(info.obj,oname,formatter,info,**kw)
676 else:
674 else:
677 pmethod(info.obj,oname)
675 pmethod(info.obj,oname)
678 else:
676 else:
679 print 'Object `%s` not found.' % oname
677 print 'Object `%s` not found.' % oname
680 return 'not found' # so callers can take other action
678 return 'not found' # so callers can take other action
681
679
682 def magic_pdef(self, parameter_s=''):
680 def magic_pdef(self, parameter_s='', namespaces=None):
683 """Print the definition header for any callable object.
681 """Print the definition header for any callable object.
684
682
685 If the object is a class, print the constructor information."""
683 If the object is a class, print the constructor information."""
686 self._inspect('pdef',parameter_s)
684 print "+++"
685 self._inspect('pdef',parameter_s, namespaces)
687
686
688 def magic_pdoc(self, parameter_s=''):
687 def magic_pdoc(self, parameter_s='', namespaces=None):
689 """Print the docstring for an object.
688 """Print the docstring for an object.
690
689
691 If the given object is a class, it will print both the class and the
690 If the given object is a class, it will print both the class and the
692 constructor docstrings."""
691 constructor docstrings."""
693 self._inspect('pdoc',parameter_s)
692 self._inspect('pdoc',parameter_s, namespaces)
694
693
695 def magic_psource(self, parameter_s=''):
694 def magic_psource(self, parameter_s='', namespaces=None):
696 """Print (or run through pager) the source code for an object."""
695 """Print (or run through pager) the source code for an object."""
697 self._inspect('psource',parameter_s)
696 self._inspect('psource',parameter_s, namespaces)
698
697
699 def magic_pfile(self, parameter_s=''):
698 def magic_pfile(self, parameter_s=''):
700 """Print (or run through pager) the file where an object is defined.
699 """Print (or run through pager) the file where an object is defined.
701
700
702 The file opens at the line where the object definition begins. IPython
701 The file opens at the line where the object definition begins. IPython
703 will honor the environment variable PAGER if set, and otherwise will
702 will honor the environment variable PAGER if set, and otherwise will
704 do its best to print the file in a convenient form.
703 do its best to print the file in a convenient form.
705
704
706 If the given argument is not an object currently defined, IPython will
705 If the given argument is not an object currently defined, IPython will
707 try to interpret it as a filename (automatically adding a .py extension
706 try to interpret it as a filename (automatically adding a .py extension
708 if needed). You can thus use %pfile as a syntax highlighting code
707 if needed). You can thus use %pfile as a syntax highlighting code
709 viewer."""
708 viewer."""
710
709
711 # first interpret argument as an object name
710 # first interpret argument as an object name
712 out = self._inspect('pfile',parameter_s)
711 out = self._inspect('pfile',parameter_s)
713 # if not, try the input as a filename
712 # if not, try the input as a filename
714 if out == 'not found':
713 if out == 'not found':
715 try:
714 try:
716 filename = get_py_filename(parameter_s)
715 filename = get_py_filename(parameter_s)
717 except IOError,msg:
716 except IOError,msg:
718 print msg
717 print msg
719 return
718 return
720 page(self.shell.inspector.format(file(filename).read()))
719 page(self.shell.inspector.format(file(filename).read()))
721
720
722 def magic_pinfo(self, parameter_s=''):
721 def magic_pinfo(self, parameter_s='', namespaces=None):
723 """Provide detailed information about an object.
722 """Provide detailed information about an object.
724
723
725 '%pinfo object' is just a synonym for object? or ?object."""
724 '%pinfo object' is just a synonym for object? or ?object."""
726
725
727 #print 'pinfo par: <%s>' % parameter_s # dbg
726 #print 'pinfo par: <%s>' % parameter_s # dbg
728
727
729 # detail_level: 0 -> obj? , 1 -> obj??
728 # detail_level: 0 -> obj? , 1 -> obj??
730 detail_level = 0
729 detail_level = 0
731 # We need to detect if we got called as 'pinfo pinfo foo', which can
730 # We need to detect if we got called as 'pinfo pinfo foo', which can
732 # happen if the user types 'pinfo foo?' at the cmd line.
731 # happen if the user types 'pinfo foo?' at the cmd line.
733 pinfo,qmark1,oname,qmark2 = \
732 pinfo,qmark1,oname,qmark2 = \
734 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
733 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
735 if pinfo or qmark1 or qmark2:
734 if pinfo or qmark1 or qmark2:
736 detail_level = 1
735 detail_level = 1
737 if "*" in oname:
736 if "*" in oname:
738 self.magic_psearch(oname)
737 self.magic_psearch(oname)
739 else:
738 else:
740 self._inspect('pinfo',oname,detail_level=detail_level)
739 self._inspect('pinfo', oname, detail_level=detail_level,
740 namespaces=namespaces)
741
741
742 def magic_psearch(self, parameter_s=''):
742 def magic_psearch(self, parameter_s=''):
743 """Search for object in namespaces by wildcard.
743 """Search for object in namespaces by wildcard.
744
744
745 %psearch [options] PATTERN [OBJECT TYPE]
745 %psearch [options] PATTERN [OBJECT TYPE]
746
746
747 Note: ? can be used as a synonym for %psearch, at the beginning or at
747 Note: ? can be used as a synonym for %psearch, at the beginning or at
748 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
748 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
749 rest of the command line must be unchanged (options come first), so
749 rest of the command line must be unchanged (options come first), so
750 for example the following forms are equivalent
750 for example the following forms are equivalent
751
751
752 %psearch -i a* function
752 %psearch -i a* function
753 -i a* function?
753 -i a* function?
754 ?-i a* function
754 ?-i a* function
755
755
756 Arguments:
756 Arguments:
757
757
758 PATTERN
758 PATTERN
759
759
760 where PATTERN is a string containing * as a wildcard similar to its
760 where PATTERN is a string containing * as a wildcard similar to its
761 use in a shell. The pattern is matched in all namespaces on the
761 use in a shell. The pattern is matched in all namespaces on the
762 search path. By default objects starting with a single _ are not
762 search path. By default objects starting with a single _ are not
763 matched, many IPython generated objects have a single
763 matched, many IPython generated objects have a single
764 underscore. The default is case insensitive matching. Matching is
764 underscore. The default is case insensitive matching. Matching is
765 also done on the attributes of objects and not only on the objects
765 also done on the attributes of objects and not only on the objects
766 in a module.
766 in a module.
767
767
768 [OBJECT TYPE]
768 [OBJECT TYPE]
769
769
770 Is the name of a python type from the types module. The name is
770 Is the name of a python type from the types module. The name is
771 given in lowercase without the ending type, ex. StringType is
771 given in lowercase without the ending type, ex. StringType is
772 written string. By adding a type here only objects matching the
772 written string. By adding a type here only objects matching the
773 given type are matched. Using all here makes the pattern match all
773 given type are matched. Using all here makes the pattern match all
774 types (this is the default).
774 types (this is the default).
775
775
776 Options:
776 Options:
777
777
778 -a: makes the pattern match even objects whose names start with a
778 -a: makes the pattern match even objects whose names start with a
779 single underscore. These names are normally ommitted from the
779 single underscore. These names are normally ommitted from the
780 search.
780 search.
781
781
782 -i/-c: make the pattern case insensitive/sensitive. If neither of
782 -i/-c: make the pattern case insensitive/sensitive. If neither of
783 these options is given, the default is read from your ipythonrc
783 these options is given, the default is read from your ipythonrc
784 file. The option name which sets this value is
784 file. The option name which sets this value is
785 'wildcards_case_sensitive'. If this option is not specified in your
785 'wildcards_case_sensitive'. If this option is not specified in your
786 ipythonrc file, IPython's internal default is to do a case sensitive
786 ipythonrc file, IPython's internal default is to do a case sensitive
787 search.
787 search.
788
788
789 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
789 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
790 specifiy can be searched in any of the following namespaces:
790 specifiy can be searched in any of the following namespaces:
791 'builtin', 'user', 'user_global','internal', 'alias', where
791 'builtin', 'user', 'user_global','internal', 'alias', where
792 'builtin' and 'user' are the search defaults. Note that you should
792 'builtin' and 'user' are the search defaults. Note that you should
793 not use quotes when specifying namespaces.
793 not use quotes when specifying namespaces.
794
794
795 'Builtin' contains the python module builtin, 'user' contains all
795 'Builtin' contains the python module builtin, 'user' contains all
796 user data, 'alias' only contain the shell aliases and no python
796 user data, 'alias' only contain the shell aliases and no python
797 objects, 'internal' contains objects used by IPython. The
797 objects, 'internal' contains objects used by IPython. The
798 'user_global' namespace is only used by embedded IPython instances,
798 'user_global' namespace is only used by embedded IPython instances,
799 and it contains module-level globals. You can add namespaces to the
799 and it contains module-level globals. You can add namespaces to the
800 search with -s or exclude them with -e (these options can be given
800 search with -s or exclude them with -e (these options can be given
801 more than once).
801 more than once).
802
802
803 Examples:
803 Examples:
804
804
805 %psearch a* -> objects beginning with an a
805 %psearch a* -> objects beginning with an a
806 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
806 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
807 %psearch a* function -> all functions beginning with an a
807 %psearch a* function -> all functions beginning with an a
808 %psearch re.e* -> objects beginning with an e in module re
808 %psearch re.e* -> objects beginning with an e in module re
809 %psearch r*.e* -> objects that start with e in modules starting in r
809 %psearch r*.e* -> objects that start with e in modules starting in r
810 %psearch r*.* string -> all strings in modules beginning with r
810 %psearch r*.* string -> all strings in modules beginning with r
811
811
812 Case sensitve search:
812 Case sensitve search:
813
813
814 %psearch -c a* list all object beginning with lower case a
814 %psearch -c a* list all object beginning with lower case a
815
815
816 Show objects beginning with a single _:
816 Show objects beginning with a single _:
817
817
818 %psearch -a _* list objects beginning with a single underscore"""
818 %psearch -a _* list objects beginning with a single underscore"""
819
819
820 # default namespaces to be searched
820 # default namespaces to be searched
821 def_search = ['user','builtin']
821 def_search = ['user','builtin']
822
822
823 # Process options/args
823 # Process options/args
824 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
824 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
825 opt = opts.get
825 opt = opts.get
826 shell = self.shell
826 shell = self.shell
827 psearch = shell.inspector.psearch
827 psearch = shell.inspector.psearch
828
828
829 # select case options
829 # select case options
830 if opts.has_key('i'):
830 if opts.has_key('i'):
831 ignore_case = True
831 ignore_case = True
832 elif opts.has_key('c'):
832 elif opts.has_key('c'):
833 ignore_case = False
833 ignore_case = False
834 else:
834 else:
835 ignore_case = not shell.rc.wildcards_case_sensitive
835 ignore_case = not shell.rc.wildcards_case_sensitive
836
836
837 # Build list of namespaces to search from user options
837 # Build list of namespaces to search from user options
838 def_search.extend(opt('s',[]))
838 def_search.extend(opt('s',[]))
839 ns_exclude = ns_exclude=opt('e',[])
839 ns_exclude = ns_exclude=opt('e',[])
840 ns_search = [nm for nm in def_search if nm not in ns_exclude]
840 ns_search = [nm for nm in def_search if nm not in ns_exclude]
841
841
842 # Call the actual search
842 # Call the actual search
843 try:
843 try:
844 psearch(args,shell.ns_table,ns_search,
844 psearch(args,shell.ns_table,ns_search,
845 show_all=opt('a'),ignore_case=ignore_case)
845 show_all=opt('a'),ignore_case=ignore_case)
846 except:
846 except:
847 shell.showtraceback()
847 shell.showtraceback()
848
848
849 def magic_who_ls(self, parameter_s=''):
849 def magic_who_ls(self, parameter_s=''):
850 """Return a sorted list of all interactive variables.
850 """Return a sorted list of all interactive variables.
851
851
852 If arguments are given, only variables of types matching these
852 If arguments are given, only variables of types matching these
853 arguments are returned."""
853 arguments are returned."""
854
854
855 user_ns = self.shell.user_ns
855 user_ns = self.shell.user_ns
856 internal_ns = self.shell.internal_ns
856 internal_ns = self.shell.internal_ns
857 user_config_ns = self.shell.user_config_ns
857 user_config_ns = self.shell.user_config_ns
858 out = []
858 out = []
859 typelist = parameter_s.split()
859 typelist = parameter_s.split()
860
860
861 for i in user_ns:
861 for i in user_ns:
862 if not (i.startswith('_') or i.startswith('_i')) \
862 if not (i.startswith('_') or i.startswith('_i')) \
863 and not (i in internal_ns or i in user_config_ns):
863 and not (i in internal_ns or i in user_config_ns):
864 if typelist:
864 if typelist:
865 if type(user_ns[i]).__name__ in typelist:
865 if type(user_ns[i]).__name__ in typelist:
866 out.append(i)
866 out.append(i)
867 else:
867 else:
868 out.append(i)
868 out.append(i)
869 out.sort()
869 out.sort()
870 return out
870 return out
871
871
872 def magic_who(self, parameter_s=''):
872 def magic_who(self, parameter_s=''):
873 """Print all interactive variables, with some minimal formatting.
873 """Print all interactive variables, with some minimal formatting.
874
874
875 If any arguments are given, only variables whose type matches one of
875 If any arguments are given, only variables whose type matches one of
876 these are printed. For example:
876 these are printed. For example:
877
877
878 %who function str
878 %who function str
879
879
880 will only list functions and strings, excluding all other types of
880 will only list functions and strings, excluding all other types of
881 variables. To find the proper type names, simply use type(var) at a
881 variables. To find the proper type names, simply use type(var) at a
882 command line to see how python prints type names. For example:
882 command line to see how python prints type names. For example:
883
883
884 In [1]: type('hello')\\
884 In [1]: type('hello')\\
885 Out[1]: <type 'str'>
885 Out[1]: <type 'str'>
886
886
887 indicates that the type name for strings is 'str'.
887 indicates that the type name for strings is 'str'.
888
888
889 %who always excludes executed names loaded through your configuration
889 %who always excludes executed names loaded through your configuration
890 file and things which are internal to IPython.
890 file and things which are internal to IPython.
891
891
892 This is deliberate, as typically you may load many modules and the
892 This is deliberate, as typically you may load many modules and the
893 purpose of %who is to show you only what you've manually defined."""
893 purpose of %who is to show you only what you've manually defined."""
894
894
895 varlist = self.magic_who_ls(parameter_s)
895 varlist = self.magic_who_ls(parameter_s)
896 if not varlist:
896 if not varlist:
897 print 'Interactive namespace is empty.'
897 print 'Interactive namespace is empty.'
898 return
898 return
899
899
900 # if we have variables, move on...
900 # if we have variables, move on...
901
901
902 # stupid flushing problem: when prompts have no separators, stdout is
902 # stupid flushing problem: when prompts have no separators, stdout is
903 # getting lost. I'm starting to think this is a python bug. I'm having
903 # getting lost. I'm starting to think this is a python bug. I'm having
904 # to force a flush with a print because even a sys.stdout.flush
904 # to force a flush with a print because even a sys.stdout.flush
905 # doesn't seem to do anything!
905 # doesn't seem to do anything!
906
906
907 count = 0
907 count = 0
908 for i in varlist:
908 for i in varlist:
909 print i+'\t',
909 print i+'\t',
910 count += 1
910 count += 1
911 if count > 8:
911 if count > 8:
912 count = 0
912 count = 0
913 print
913 print
914 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
914 sys.stdout.flush() # FIXME. Why the hell isn't this flushing???
915
915
916 print # well, this does force a flush at the expense of an extra \n
916 print # well, this does force a flush at the expense of an extra \n
917
917
918 def magic_whos(self, parameter_s=''):
918 def magic_whos(self, parameter_s=''):
919 """Like %who, but gives some extra information about each variable.
919 """Like %who, but gives some extra information about each variable.
920
920
921 The same type filtering of %who can be applied here.
921 The same type filtering of %who can be applied here.
922
922
923 For all variables, the type is printed. Additionally it prints:
923 For all variables, the type is printed. Additionally it prints:
924
924
925 - For {},[],(): their length.
925 - For {},[],(): their length.
926
926
927 - For Numeric arrays, a summary with shape, number of elements,
927 - For Numeric arrays, a summary with shape, number of elements,
928 typecode and size in memory.
928 typecode and size in memory.
929
929
930 - Everything else: a string representation, snipping their middle if
930 - Everything else: a string representation, snipping their middle if
931 too long."""
931 too long."""
932
932
933 varnames = self.magic_who_ls(parameter_s)
933 varnames = self.magic_who_ls(parameter_s)
934 if not varnames:
934 if not varnames:
935 print 'Interactive namespace is empty.'
935 print 'Interactive namespace is empty.'
936 return
936 return
937
937
938 # if we have variables, move on...
938 # if we have variables, move on...
939
939
940 # for these types, show len() instead of data:
940 # for these types, show len() instead of data:
941 seq_types = [types.DictType,types.ListType,types.TupleType]
941 seq_types = [types.DictType,types.ListType,types.TupleType]
942
942
943 # for Numeric arrays, display summary info
943 # for Numeric arrays, display summary info
944 try:
944 try:
945 import Numeric
945 import Numeric
946 except ImportError:
946 except ImportError:
947 array_type = None
947 array_type = None
948 else:
948 else:
949 array_type = Numeric.ArrayType.__name__
949 array_type = Numeric.ArrayType.__name__
950
950
951 # Find all variable names and types so we can figure out column sizes
951 # Find all variable names and types so we can figure out column sizes
952 get_vars = lambda i: self.shell.user_ns[i]
952 get_vars = lambda i: self.shell.user_ns[i]
953 type_name = lambda v: type(v).__name__
953 type_name = lambda v: type(v).__name__
954 varlist = map(get_vars,varnames)
954 varlist = map(get_vars,varnames)
955
955
956 typelist = []
956 typelist = []
957 for vv in varlist:
957 for vv in varlist:
958 tt = type_name(vv)
958 tt = type_name(vv)
959 if tt=='instance':
959 if tt=='instance':
960 typelist.append(str(vv.__class__))
960 typelist.append(str(vv.__class__))
961 else:
961 else:
962 typelist.append(tt)
962 typelist.append(tt)
963
963
964 # column labels and # of spaces as separator
964 # column labels and # of spaces as separator
965 varlabel = 'Variable'
965 varlabel = 'Variable'
966 typelabel = 'Type'
966 typelabel = 'Type'
967 datalabel = 'Data/Info'
967 datalabel = 'Data/Info'
968 colsep = 3
968 colsep = 3
969 # variable format strings
969 # variable format strings
970 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
970 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
971 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
971 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
972 aformat = "%s: %s elems, type `%s`, %s bytes"
972 aformat = "%s: %s elems, type `%s`, %s bytes"
973 # find the size of the columns to format the output nicely
973 # find the size of the columns to format the output nicely
974 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
974 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
975 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
975 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
976 # table header
976 # table header
977 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
977 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
978 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
978 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
979 # and the table itself
979 # and the table itself
980 kb = 1024
980 kb = 1024
981 Mb = 1048576 # kb**2
981 Mb = 1048576 # kb**2
982 for vname,var,vtype in zip(varnames,varlist,typelist):
982 for vname,var,vtype in zip(varnames,varlist,typelist):
983 print itpl(vformat),
983 print itpl(vformat),
984 if vtype in seq_types:
984 if vtype in seq_types:
985 print len(var)
985 print len(var)
986 elif vtype==array_type:
986 elif vtype==array_type:
987 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
987 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
988 vsize = Numeric.size(var)
988 vsize = Numeric.size(var)
989 vbytes = vsize*var.itemsize()
989 vbytes = vsize*var.itemsize()
990 if vbytes < 100000:
990 if vbytes < 100000:
991 print aformat % (vshape,vsize,var.typecode(),vbytes)
991 print aformat % (vshape,vsize,var.typecode(),vbytes)
992 else:
992 else:
993 print aformat % (vshape,vsize,var.typecode(),vbytes),
993 print aformat % (vshape,vsize,var.typecode(),vbytes),
994 if vbytes < Mb:
994 if vbytes < Mb:
995 print '(%s kb)' % (vbytes/kb,)
995 print '(%s kb)' % (vbytes/kb,)
996 else:
996 else:
997 print '(%s Mb)' % (vbytes/Mb,)
997 print '(%s Mb)' % (vbytes/Mb,)
998 else:
998 else:
999 vstr = str(var).replace('\n','\\n')
999 vstr = str(var).replace('\n','\\n')
1000 if len(vstr) < 50:
1000 if len(vstr) < 50:
1001 print vstr
1001 print vstr
1002 else:
1002 else:
1003 printpl(vfmt_short)
1003 printpl(vfmt_short)
1004
1004
1005 def magic_reset(self, parameter_s=''):
1005 def magic_reset(self, parameter_s=''):
1006 """Resets the namespace by removing all names defined by the user.
1006 """Resets the namespace by removing all names defined by the user.
1007
1007
1008 Input/Output history are left around in case you need them."""
1008 Input/Output history are left around in case you need them."""
1009
1009
1010 ans = self.shell.ask_yes_no(
1010 ans = self.shell.ask_yes_no(
1011 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1011 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1012 if not ans:
1012 if not ans:
1013 print 'Nothing done.'
1013 print 'Nothing done.'
1014 return
1014 return
1015 user_ns = self.shell.user_ns
1015 user_ns = self.shell.user_ns
1016 for i in self.magic_who_ls():
1016 for i in self.magic_who_ls():
1017 del(user_ns[i])
1017 del(user_ns[i])
1018
1018
1019 def magic_config(self,parameter_s=''):
1019 def magic_config(self,parameter_s=''):
1020 """Show IPython's internal configuration."""
1020 """Show IPython's internal configuration."""
1021
1021
1022 page('Current configuration structure:\n'+
1022 page('Current configuration structure:\n'+
1023 pformat(self.shell.rc.dict()))
1023 pformat(self.shell.rc.dict()))
1024
1024
1025 def magic_logstart(self,parameter_s=''):
1025 def magic_logstart(self,parameter_s=''):
1026 """Start logging anywhere in a session.
1026 """Start logging anywhere in a session.
1027
1027
1028 %logstart [-o|-r|-t] [log_name [log_mode]]
1028 %logstart [-o|-r|-t] [log_name [log_mode]]
1029
1029
1030 If no name is given, it defaults to a file named 'ipython_log.py' in your
1030 If no name is given, it defaults to a file named 'ipython_log.py' in your
1031 current directory, in 'rotate' mode (see below).
1031 current directory, in 'rotate' mode (see below).
1032
1032
1033 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1033 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1034 history up to that point and then continues logging.
1034 history up to that point and then continues logging.
1035
1035
1036 %logstart takes a second optional parameter: logging mode. This can be one
1036 %logstart takes a second optional parameter: logging mode. This can be one
1037 of (note that the modes are given unquoted):\\
1037 of (note that the modes are given unquoted):\\
1038 append: well, that says it.\\
1038 append: well, that says it.\\
1039 backup: rename (if exists) to name~ and start name.\\
1039 backup: rename (if exists) to name~ and start name.\\
1040 global: single logfile in your home dir, appended to.\\
1040 global: single logfile in your home dir, appended to.\\
1041 over : overwrite existing log.\\
1041 over : overwrite existing log.\\
1042 rotate: create rotating logs name.1~, name.2~, etc.
1042 rotate: create rotating logs name.1~, name.2~, etc.
1043
1043
1044 Options:
1044 Options:
1045
1045
1046 -o: log also IPython's output. In this mode, all commands which
1046 -o: log also IPython's output. In this mode, all commands which
1047 generate an Out[NN] prompt are recorded to the logfile, right after
1047 generate an Out[NN] prompt are recorded to the logfile, right after
1048 their corresponding input line. The output lines are always
1048 their corresponding input line. The output lines are always
1049 prepended with a '#[Out]# ' marker, so that the log remains valid
1049 prepended with a '#[Out]# ' marker, so that the log remains valid
1050 Python code.
1050 Python code.
1051
1051
1052 Since this marker is always the same, filtering only the output from
1052 Since this marker is always the same, filtering only the output from
1053 a log is very easy, using for example a simple awk call:
1053 a log is very easy, using for example a simple awk call:
1054
1054
1055 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1055 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1056
1056
1057 -r: log 'raw' input. Normally, IPython's logs contain the processed
1057 -r: log 'raw' input. Normally, IPython's logs contain the processed
1058 input, so that user lines are logged in their final form, converted
1058 input, so that user lines are logged in their final form, converted
1059 into valid Python. For example, %Exit is logged as
1059 into valid Python. For example, %Exit is logged as
1060 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1060 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1061 exactly as typed, with no transformations applied.
1061 exactly as typed, with no transformations applied.
1062
1062
1063 -t: put timestamps before each input line logged (these are put in
1063 -t: put timestamps before each input line logged (these are put in
1064 comments)."""
1064 comments)."""
1065
1065
1066 opts,par = self.parse_options(parameter_s,'ort')
1066 opts,par = self.parse_options(parameter_s,'ort')
1067 log_output = 'o' in opts
1067 log_output = 'o' in opts
1068 log_raw_input = 'r' in opts
1068 log_raw_input = 'r' in opts
1069 timestamp = 't' in opts
1069 timestamp = 't' in opts
1070
1070
1071 rc = self.shell.rc
1071 rc = self.shell.rc
1072 logger = self.shell.logger
1072 logger = self.shell.logger
1073
1073
1074 # if no args are given, the defaults set in the logger constructor by
1074 # if no args are given, the defaults set in the logger constructor by
1075 # ipytohn remain valid
1075 # ipytohn remain valid
1076 if par:
1076 if par:
1077 try:
1077 try:
1078 logfname,logmode = par.split()
1078 logfname,logmode = par.split()
1079 except:
1079 except:
1080 logfname = par
1080 logfname = par
1081 logmode = 'backup'
1081 logmode = 'backup'
1082 else:
1082 else:
1083 logfname = logger.logfname
1083 logfname = logger.logfname
1084 logmode = logger.logmode
1084 logmode = logger.logmode
1085 # put logfname into rc struct as if it had been called on the command
1085 # put logfname into rc struct as if it had been called on the command
1086 # line, so it ends up saved in the log header Save it in case we need
1086 # line, so it ends up saved in the log header Save it in case we need
1087 # to restore it...
1087 # to restore it...
1088 old_logfile = rc.opts.get('logfile','')
1088 old_logfile = rc.opts.get('logfile','')
1089 if logfname:
1089 if logfname:
1090 logfname = os.path.expanduser(logfname)
1090 logfname = os.path.expanduser(logfname)
1091 rc.opts.logfile = logfname
1091 rc.opts.logfile = logfname
1092 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1092 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1093 try:
1093 try:
1094 started = logger.logstart(logfname,loghead,logmode,
1094 started = logger.logstart(logfname,loghead,logmode,
1095 log_output,timestamp,log_raw_input)
1095 log_output,timestamp,log_raw_input)
1096 except:
1096 except:
1097 rc.opts.logfile = old_logfile
1097 rc.opts.logfile = old_logfile
1098 warn("Couldn't start log: %s" % sys.exc_info()[1])
1098 warn("Couldn't start log: %s" % sys.exc_info()[1])
1099 else:
1099 else:
1100 # log input history up to this point, optionally interleaving
1100 # log input history up to this point, optionally interleaving
1101 # output if requested
1101 # output if requested
1102
1102
1103 if timestamp:
1103 if timestamp:
1104 # disable timestamping for the previous history, since we've
1104 # disable timestamping for the previous history, since we've
1105 # lost those already (no time machine here).
1105 # lost those already (no time machine here).
1106 logger.timestamp = False
1106 logger.timestamp = False
1107
1107
1108 if log_raw_input:
1108 if log_raw_input:
1109 input_hist = self.shell.input_hist_raw
1109 input_hist = self.shell.input_hist_raw
1110 else:
1110 else:
1111 input_hist = self.shell.input_hist
1111 input_hist = self.shell.input_hist
1112
1112
1113 if log_output:
1113 if log_output:
1114 log_write = logger.log_write
1114 log_write = logger.log_write
1115 output_hist = self.shell.output_hist
1115 output_hist = self.shell.output_hist
1116 for n in range(1,len(input_hist)-1):
1116 for n in range(1,len(input_hist)-1):
1117 log_write(input_hist[n].rstrip())
1117 log_write(input_hist[n].rstrip())
1118 if n in output_hist:
1118 if n in output_hist:
1119 log_write(repr(output_hist[n]),'output')
1119 log_write(repr(output_hist[n]),'output')
1120 else:
1120 else:
1121 logger.log_write(input_hist[1:])
1121 logger.log_write(input_hist[1:])
1122 if timestamp:
1122 if timestamp:
1123 # re-enable timestamping
1123 # re-enable timestamping
1124 logger.timestamp = True
1124 logger.timestamp = True
1125
1125
1126 print ('Activating auto-logging. '
1126 print ('Activating auto-logging. '
1127 'Current session state plus future input saved.')
1127 'Current session state plus future input saved.')
1128 logger.logstate()
1128 logger.logstate()
1129
1129
1130 def magic_logoff(self,parameter_s=''):
1130 def magic_logoff(self,parameter_s=''):
1131 """Temporarily stop logging.
1131 """Temporarily stop logging.
1132
1132
1133 You must have previously started logging."""
1133 You must have previously started logging."""
1134 self.shell.logger.switch_log(0)
1134 self.shell.logger.switch_log(0)
1135
1135
1136 def magic_logon(self,parameter_s=''):
1136 def magic_logon(self,parameter_s=''):
1137 """Restart logging.
1137 """Restart logging.
1138
1138
1139 This function is for restarting logging which you've temporarily
1139 This function is for restarting logging which you've temporarily
1140 stopped with %logoff. For starting logging for the first time, you
1140 stopped with %logoff. For starting logging for the first time, you
1141 must use the %logstart function, which allows you to specify an
1141 must use the %logstart function, which allows you to specify an
1142 optional log filename."""
1142 optional log filename."""
1143
1143
1144 self.shell.logger.switch_log(1)
1144 self.shell.logger.switch_log(1)
1145
1145
1146 def magic_logstate(self,parameter_s=''):
1146 def magic_logstate(self,parameter_s=''):
1147 """Print the status of the logging system."""
1147 """Print the status of the logging system."""
1148
1148
1149 self.shell.logger.logstate()
1149 self.shell.logger.logstate()
1150
1150
1151 def magic_pdb(self, parameter_s=''):
1151 def magic_pdb(self, parameter_s=''):
1152 """Control the calling of the pdb interactive debugger.
1152 """Control the calling of the pdb interactive debugger.
1153
1153
1154 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1154 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1155 argument it works as a toggle.
1155 argument it works as a toggle.
1156
1156
1157 When an exception is triggered, IPython can optionally call the
1157 When an exception is triggered, IPython can optionally call the
1158 interactive pdb debugger after the traceback printout. %pdb toggles
1158 interactive pdb debugger after the traceback printout. %pdb toggles
1159 this feature on and off."""
1159 this feature on and off."""
1160
1160
1161 par = parameter_s.strip().lower()
1161 par = parameter_s.strip().lower()
1162
1162
1163 if par:
1163 if par:
1164 try:
1164 try:
1165 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1165 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1166 except KeyError:
1166 except KeyError:
1167 print ('Incorrect argument. Use on/1, off/0, '
1167 print ('Incorrect argument. Use on/1, off/0, '
1168 'or nothing for a toggle.')
1168 'or nothing for a toggle.')
1169 return
1169 return
1170 else:
1170 else:
1171 # toggle
1171 # toggle
1172 new_pdb = not self.shell.InteractiveTB.call_pdb
1172 new_pdb = not self.shell.InteractiveTB.call_pdb
1173
1173
1174 # set on the shell
1174 # set on the shell
1175 self.shell.call_pdb = new_pdb
1175 self.shell.call_pdb = new_pdb
1176 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1176 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1177
1177
1178 def magic_prun(self, parameter_s ='',user_mode=1,
1178 def magic_prun(self, parameter_s ='',user_mode=1,
1179 opts=None,arg_lst=None,prog_ns=None):
1179 opts=None,arg_lst=None,prog_ns=None):
1180
1180
1181 """Run a statement through the python code profiler.
1181 """Run a statement through the python code profiler.
1182
1182
1183 Usage:\\
1183 Usage:\\
1184 %prun [options] statement
1184 %prun [options] statement
1185
1185
1186 The given statement (which doesn't require quote marks) is run via the
1186 The given statement (which doesn't require quote marks) is run via the
1187 python profiler in a manner similar to the profile.run() function.
1187 python profiler in a manner similar to the profile.run() function.
1188 Namespaces are internally managed to work correctly; profile.run
1188 Namespaces are internally managed to work correctly; profile.run
1189 cannot be used in IPython because it makes certain assumptions about
1189 cannot be used in IPython because it makes certain assumptions about
1190 namespaces which do not hold under IPython.
1190 namespaces which do not hold under IPython.
1191
1191
1192 Options:
1192 Options:
1193
1193
1194 -l <limit>: you can place restrictions on what or how much of the
1194 -l <limit>: you can place restrictions on what or how much of the
1195 profile gets printed. The limit value can be:
1195 profile gets printed. The limit value can be:
1196
1196
1197 * A string: only information for function names containing this string
1197 * A string: only information for function names containing this string
1198 is printed.
1198 is printed.
1199
1199
1200 * An integer: only these many lines are printed.
1200 * An integer: only these many lines are printed.
1201
1201
1202 * A float (between 0 and 1): this fraction of the report is printed
1202 * A float (between 0 and 1): this fraction of the report is printed
1203 (for example, use a limit of 0.4 to see the topmost 40% only).
1203 (for example, use a limit of 0.4 to see the topmost 40% only).
1204
1204
1205 You can combine several limits with repeated use of the option. For
1205 You can combine several limits with repeated use of the option. For
1206 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1206 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1207 information about class constructors.
1207 information about class constructors.
1208
1208
1209 -r: return the pstats.Stats object generated by the profiling. This
1209 -r: return the pstats.Stats object generated by the profiling. This
1210 object has all the information about the profile in it, and you can
1210 object has all the information about the profile in it, and you can
1211 later use it for further analysis or in other functions.
1211 later use it for further analysis or in other functions.
1212
1212
1213 Since magic functions have a particular form of calling which prevents
1213 Since magic functions have a particular form of calling which prevents
1214 you from writing something like:\\
1214 you from writing something like:\\
1215 In [1]: p = %prun -r print 4 # invalid!\\
1215 In [1]: p = %prun -r print 4 # invalid!\\
1216 you must instead use IPython's automatic variables to assign this:\\
1216 you must instead use IPython's automatic variables to assign this:\\
1217 In [1]: %prun -r print 4 \\
1217 In [1]: %prun -r print 4 \\
1218 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1218 Out[1]: <pstats.Stats instance at 0x8222cec>\\
1219 In [2]: stats = _
1219 In [2]: stats = _
1220
1220
1221 If you really need to assign this value via an explicit function call,
1221 If you really need to assign this value via an explicit function call,
1222 you can always tap directly into the true name of the magic function
1222 you can always tap directly into the true name of the magic function
1223 by using the _ip.magic function:\\
1223 by using the _ip.magic function:\\
1224 In [3]: stats = _ip.magic('prun','-r print 4')
1224 In [3]: stats = _ip.magic('prun','-r print 4')
1225
1225
1226 You can type _ip.magic? for more details.
1226 You can type _ip.magic? for more details.
1227
1227
1228 -s <key>: sort profile by given key. You can provide more than one key
1228 -s <key>: sort profile by given key. You can provide more than one key
1229 by using the option several times: '-s key1 -s key2 -s key3...'. The
1229 by using the option several times: '-s key1 -s key2 -s key3...'. The
1230 default sorting key is 'time'.
1230 default sorting key is 'time'.
1231
1231
1232 The following is copied verbatim from the profile documentation
1232 The following is copied verbatim from the profile documentation
1233 referenced below:
1233 referenced below:
1234
1234
1235 When more than one key is provided, additional keys are used as
1235 When more than one key is provided, additional keys are used as
1236 secondary criteria when the there is equality in all keys selected
1236 secondary criteria when the there is equality in all keys selected
1237 before them.
1237 before them.
1238
1238
1239 Abbreviations can be used for any key names, as long as the
1239 Abbreviations can be used for any key names, as long as the
1240 abbreviation is unambiguous. The following are the keys currently
1240 abbreviation is unambiguous. The following are the keys currently
1241 defined:
1241 defined:
1242
1242
1243 Valid Arg Meaning\\
1243 Valid Arg Meaning\\
1244 "calls" call count\\
1244 "calls" call count\\
1245 "cumulative" cumulative time\\
1245 "cumulative" cumulative time\\
1246 "file" file name\\
1246 "file" file name\\
1247 "module" file name\\
1247 "module" file name\\
1248 "pcalls" primitive call count\\
1248 "pcalls" primitive call count\\
1249 "line" line number\\
1249 "line" line number\\
1250 "name" function name\\
1250 "name" function name\\
1251 "nfl" name/file/line\\
1251 "nfl" name/file/line\\
1252 "stdname" standard name\\
1252 "stdname" standard name\\
1253 "time" internal time
1253 "time" internal time
1254
1254
1255 Note that all sorts on statistics are in descending order (placing
1255 Note that all sorts on statistics are in descending order (placing
1256 most time consuming items first), where as name, file, and line number
1256 most time consuming items first), where as name, file, and line number
1257 searches are in ascending order (i.e., alphabetical). The subtle
1257 searches are in ascending order (i.e., alphabetical). The subtle
1258 distinction between "nfl" and "stdname" is that the standard name is a
1258 distinction between "nfl" and "stdname" is that the standard name is a
1259 sort of the name as printed, which means that the embedded line
1259 sort of the name as printed, which means that the embedded line
1260 numbers get compared in an odd way. For example, lines 3, 20, and 40
1260 numbers get compared in an odd way. For example, lines 3, 20, and 40
1261 would (if the file names were the same) appear in the string order
1261 would (if the file names were the same) appear in the string order
1262 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1262 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1263 line numbers. In fact, sort_stats("nfl") is the same as
1263 line numbers. In fact, sort_stats("nfl") is the same as
1264 sort_stats("name", "file", "line").
1264 sort_stats("name", "file", "line").
1265
1265
1266 -T <filename>: save profile results as shown on screen to a text
1266 -T <filename>: save profile results as shown on screen to a text
1267 file. The profile is still shown on screen.
1267 file. The profile is still shown on screen.
1268
1268
1269 -D <filename>: save (via dump_stats) profile statistics to given
1269 -D <filename>: save (via dump_stats) profile statistics to given
1270 filename. This data is in a format understod by the pstats module, and
1270 filename. This data is in a format understod by the pstats module, and
1271 is generated by a call to the dump_stats() method of profile
1271 is generated by a call to the dump_stats() method of profile
1272 objects. The profile is still shown on screen.
1272 objects. The profile is still shown on screen.
1273
1273
1274 If you want to run complete programs under the profiler's control, use
1274 If you want to run complete programs under the profiler's control, use
1275 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1275 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1276 contains profiler specific options as described here.
1276 contains profiler specific options as described here.
1277
1277
1278 You can read the complete documentation for the profile module with:\\
1278 You can read the complete documentation for the profile module with:\\
1279 In [1]: import profile; profile.help() """
1279 In [1]: import profile; profile.help() """
1280
1280
1281 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1281 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1282 # protect user quote marks
1282 # protect user quote marks
1283 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1283 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1284
1284
1285 if user_mode: # regular user call
1285 if user_mode: # regular user call
1286 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1286 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1287 list_all=1)
1287 list_all=1)
1288 namespace = self.shell.user_ns
1288 namespace = self.shell.user_ns
1289 else: # called to run a program by %run -p
1289 else: # called to run a program by %run -p
1290 try:
1290 try:
1291 filename = get_py_filename(arg_lst[0])
1291 filename = get_py_filename(arg_lst[0])
1292 except IOError,msg:
1292 except IOError,msg:
1293 error(msg)
1293 error(msg)
1294 return
1294 return
1295
1295
1296 arg_str = 'execfile(filename,prog_ns)'
1296 arg_str = 'execfile(filename,prog_ns)'
1297 namespace = locals()
1297 namespace = locals()
1298
1298
1299 opts.merge(opts_def)
1299 opts.merge(opts_def)
1300
1300
1301 prof = profile.Profile()
1301 prof = profile.Profile()
1302 try:
1302 try:
1303 prof = prof.runctx(arg_str,namespace,namespace)
1303 prof = prof.runctx(arg_str,namespace,namespace)
1304 sys_exit = ''
1304 sys_exit = ''
1305 except SystemExit:
1305 except SystemExit:
1306 sys_exit = """*** SystemExit exception caught in code being profiled."""
1306 sys_exit = """*** SystemExit exception caught in code being profiled."""
1307
1307
1308 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1308 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1309
1309
1310 lims = opts.l
1310 lims = opts.l
1311 if lims:
1311 if lims:
1312 lims = [] # rebuild lims with ints/floats/strings
1312 lims = [] # rebuild lims with ints/floats/strings
1313 for lim in opts.l:
1313 for lim in opts.l:
1314 try:
1314 try:
1315 lims.append(int(lim))
1315 lims.append(int(lim))
1316 except ValueError:
1316 except ValueError:
1317 try:
1317 try:
1318 lims.append(float(lim))
1318 lims.append(float(lim))
1319 except ValueError:
1319 except ValueError:
1320 lims.append(lim)
1320 lims.append(lim)
1321
1321
1322 # trap output
1322 # trap output
1323 sys_stdout = sys.stdout
1323 sys_stdout = sys.stdout
1324 stdout_trap = StringIO()
1324 stdout_trap = StringIO()
1325 try:
1325 try:
1326 sys.stdout = stdout_trap
1326 sys.stdout = stdout_trap
1327 stats.print_stats(*lims)
1327 stats.print_stats(*lims)
1328 finally:
1328 finally:
1329 sys.stdout = sys_stdout
1329 sys.stdout = sys_stdout
1330 output = stdout_trap.getvalue()
1330 output = stdout_trap.getvalue()
1331 output = output.rstrip()
1331 output = output.rstrip()
1332
1332
1333 page(output,screen_lines=self.shell.rc.screen_length)
1333 page(output,screen_lines=self.shell.rc.screen_length)
1334 print sys_exit,
1334 print sys_exit,
1335
1335
1336 dump_file = opts.D[0]
1336 dump_file = opts.D[0]
1337 text_file = opts.T[0]
1337 text_file = opts.T[0]
1338 if dump_file:
1338 if dump_file:
1339 prof.dump_stats(dump_file)
1339 prof.dump_stats(dump_file)
1340 print '\n*** Profile stats marshalled to file',\
1340 print '\n*** Profile stats marshalled to file',\
1341 `dump_file`+'.',sys_exit
1341 `dump_file`+'.',sys_exit
1342 if text_file:
1342 if text_file:
1343 file(text_file,'w').write(output)
1343 file(text_file,'w').write(output)
1344 print '\n*** Profile printout saved to text file',\
1344 print '\n*** Profile printout saved to text file',\
1345 `text_file`+'.',sys_exit
1345 `text_file`+'.',sys_exit
1346
1346
1347 if opts.has_key('r'):
1347 if opts.has_key('r'):
1348 return stats
1348 return stats
1349 else:
1349 else:
1350 return None
1350 return None
1351
1351
1352 def magic_run(self, parameter_s ='',runner=None):
1352 def magic_run(self, parameter_s ='',runner=None):
1353 """Run the named file inside IPython as a program.
1353 """Run the named file inside IPython as a program.
1354
1354
1355 Usage:\\
1355 Usage:\\
1356 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1356 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1357
1357
1358 Parameters after the filename are passed as command-line arguments to
1358 Parameters after the filename are passed as command-line arguments to
1359 the program (put in sys.argv). Then, control returns to IPython's
1359 the program (put in sys.argv). Then, control returns to IPython's
1360 prompt.
1360 prompt.
1361
1361
1362 This is similar to running at a system prompt:\\
1362 This is similar to running at a system prompt:\\
1363 $ python file args\\
1363 $ python file args\\
1364 but with the advantage of giving you IPython's tracebacks, and of
1364 but with the advantage of giving you IPython's tracebacks, and of
1365 loading all variables into your interactive namespace for further use
1365 loading all variables into your interactive namespace for further use
1366 (unless -p is used, see below).
1366 (unless -p is used, see below).
1367
1367
1368 The file is executed in a namespace initially consisting only of
1368 The file is executed in a namespace initially consisting only of
1369 __name__=='__main__' and sys.argv constructed as indicated. It thus
1369 __name__=='__main__' and sys.argv constructed as indicated. It thus
1370 sees its environment as if it were being run as a stand-alone
1370 sees its environment as if it were being run as a stand-alone
1371 program. But after execution, the IPython interactive namespace gets
1371 program. But after execution, the IPython interactive namespace gets
1372 updated with all variables defined in the program (except for __name__
1372 updated with all variables defined in the program (except for __name__
1373 and sys.argv). This allows for very convenient loading of code for
1373 and sys.argv). This allows for very convenient loading of code for
1374 interactive work, while giving each program a 'clean sheet' to run in.
1374 interactive work, while giving each program a 'clean sheet' to run in.
1375
1375
1376 Options:
1376 Options:
1377
1377
1378 -n: __name__ is NOT set to '__main__', but to the running file's name
1378 -n: __name__ is NOT set to '__main__', but to the running file's name
1379 without extension (as python does under import). This allows running
1379 without extension (as python does under import). This allows running
1380 scripts and reloading the definitions in them without calling code
1380 scripts and reloading the definitions in them without calling code
1381 protected by an ' if __name__ == "__main__" ' clause.
1381 protected by an ' if __name__ == "__main__" ' clause.
1382
1382
1383 -i: run the file in IPython's namespace instead of an empty one. This
1383 -i: run the file in IPython's namespace instead of an empty one. This
1384 is useful if you are experimenting with code written in a text editor
1384 is useful if you are experimenting with code written in a text editor
1385 which depends on variables defined interactively.
1385 which depends on variables defined interactively.
1386
1386
1387 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1387 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1388 being run. This is particularly useful if IPython is being used to
1388 being run. This is particularly useful if IPython is being used to
1389 run unittests, which always exit with a sys.exit() call. In such
1389 run unittests, which always exit with a sys.exit() call. In such
1390 cases you are interested in the output of the test results, not in
1390 cases you are interested in the output of the test results, not in
1391 seeing a traceback of the unittest module.
1391 seeing a traceback of the unittest module.
1392
1392
1393 -t: print timing information at the end of the run. IPython will give
1393 -t: print timing information at the end of the run. IPython will give
1394 you an estimated CPU time consumption for your script, which under
1394 you an estimated CPU time consumption for your script, which under
1395 Unix uses the resource module to avoid the wraparound problems of
1395 Unix uses the resource module to avoid the wraparound problems of
1396 time.clock(). Under Unix, an estimate of time spent on system tasks
1396 time.clock(). Under Unix, an estimate of time spent on system tasks
1397 is also given (for Windows platforms this is reported as 0.0).
1397 is also given (for Windows platforms this is reported as 0.0).
1398
1398
1399 If -t is given, an additional -N<N> option can be given, where <N>
1399 If -t is given, an additional -N<N> option can be given, where <N>
1400 must be an integer indicating how many times you want the script to
1400 must be an integer indicating how many times you want the script to
1401 run. The final timing report will include total and per run results.
1401 run. The final timing report will include total and per run results.
1402
1402
1403 For example (testing the script uniq_stable.py):
1403 For example (testing the script uniq_stable.py):
1404
1404
1405 In [1]: run -t uniq_stable
1405 In [1]: run -t uniq_stable
1406
1406
1407 IPython CPU timings (estimated):\\
1407 IPython CPU timings (estimated):\\
1408 User : 0.19597 s.\\
1408 User : 0.19597 s.\\
1409 System: 0.0 s.\\
1409 System: 0.0 s.\\
1410
1410
1411 In [2]: run -t -N5 uniq_stable
1411 In [2]: run -t -N5 uniq_stable
1412
1412
1413 IPython CPU timings (estimated):\\
1413 IPython CPU timings (estimated):\\
1414 Total runs performed: 5\\
1414 Total runs performed: 5\\
1415 Times : Total Per run\\
1415 Times : Total Per run\\
1416 User : 0.910862 s, 0.1821724 s.\\
1416 User : 0.910862 s, 0.1821724 s.\\
1417 System: 0.0 s, 0.0 s.
1417 System: 0.0 s, 0.0 s.
1418
1418
1419 -d: run your program under the control of pdb, the Python debugger.
1419 -d: run your program under the control of pdb, the Python debugger.
1420 This allows you to execute your program step by step, watch variables,
1420 This allows you to execute your program step by step, watch variables,
1421 etc. Internally, what IPython does is similar to calling:
1421 etc. Internally, what IPython does is similar to calling:
1422
1422
1423 pdb.run('execfile("YOURFILENAME")')
1423 pdb.run('execfile("YOURFILENAME")')
1424
1424
1425 with a breakpoint set on line 1 of your file. You can change the line
1425 with a breakpoint set on line 1 of your file. You can change the line
1426 number for this automatic breakpoint to be <N> by using the -bN option
1426 number for this automatic breakpoint to be <N> by using the -bN option
1427 (where N must be an integer). For example:
1427 (where N must be an integer). For example:
1428
1428
1429 %run -d -b40 myscript
1429 %run -d -b40 myscript
1430
1430
1431 will set the first breakpoint at line 40 in myscript.py. Note that
1431 will set the first breakpoint at line 40 in myscript.py. Note that
1432 the first breakpoint must be set on a line which actually does
1432 the first breakpoint must be set on a line which actually does
1433 something (not a comment or docstring) for it to stop execution.
1433 something (not a comment or docstring) for it to stop execution.
1434
1434
1435 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1435 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1436 first enter 'c' (without qoutes) to start execution up to the first
1436 first enter 'c' (without qoutes) to start execution up to the first
1437 breakpoint.
1437 breakpoint.
1438
1438
1439 Entering 'help' gives information about the use of the debugger. You
1439 Entering 'help' gives information about the use of the debugger. You
1440 can easily see pdb's full documentation with "import pdb;pdb.help()"
1440 can easily see pdb's full documentation with "import pdb;pdb.help()"
1441 at a prompt.
1441 at a prompt.
1442
1442
1443 -p: run program under the control of the Python profiler module (which
1443 -p: run program under the control of the Python profiler module (which
1444 prints a detailed report of execution times, function calls, etc).
1444 prints a detailed report of execution times, function calls, etc).
1445
1445
1446 You can pass other options after -p which affect the behavior of the
1446 You can pass other options after -p which affect the behavior of the
1447 profiler itself. See the docs for %prun for details.
1447 profiler itself. See the docs for %prun for details.
1448
1448
1449 In this mode, the program's variables do NOT propagate back to the
1449 In this mode, the program's variables do NOT propagate back to the
1450 IPython interactive namespace (because they remain in the namespace
1450 IPython interactive namespace (because they remain in the namespace
1451 where the profiler executes them).
1451 where the profiler executes them).
1452
1452
1453 Internally this triggers a call to %prun, see its documentation for
1453 Internally this triggers a call to %prun, see its documentation for
1454 details on the options available specifically for profiling."""
1454 details on the options available specifically for profiling."""
1455
1455
1456 # get arguments and set sys.argv for program to be run.
1456 # get arguments and set sys.argv for program to be run.
1457 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1457 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1458 mode='list',list_all=1)
1458 mode='list',list_all=1)
1459
1459
1460 try:
1460 try:
1461 filename = get_py_filename(arg_lst[0])
1461 filename = get_py_filename(arg_lst[0])
1462 except IndexError:
1462 except IndexError:
1463 warn('you must provide at least a filename.')
1463 warn('you must provide at least a filename.')
1464 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1464 print '\n%run:\n',OInspect.getdoc(self.magic_run)
1465 return
1465 return
1466 except IOError,msg:
1466 except IOError,msg:
1467 error(msg)
1467 error(msg)
1468 return
1468 return
1469
1469
1470 # Control the response to exit() calls made by the script being run
1470 # Control the response to exit() calls made by the script being run
1471 exit_ignore = opts.has_key('e')
1471 exit_ignore = opts.has_key('e')
1472
1472
1473 # Make sure that the running script gets a proper sys.argv as if it
1473 # Make sure that the running script gets a proper sys.argv as if it
1474 # were run from a system shell.
1474 # were run from a system shell.
1475 save_argv = sys.argv # save it for later restoring
1475 save_argv = sys.argv # save it for later restoring
1476 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1476 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1477
1477
1478 if opts.has_key('i'):
1478 if opts.has_key('i'):
1479 prog_ns = self.shell.user_ns
1479 prog_ns = self.shell.user_ns
1480 __name__save = self.shell.user_ns['__name__']
1480 __name__save = self.shell.user_ns['__name__']
1481 prog_ns['__name__'] = '__main__'
1481 prog_ns['__name__'] = '__main__'
1482 else:
1482 else:
1483 if opts.has_key('n'):
1483 if opts.has_key('n'):
1484 name = os.path.splitext(os.path.basename(filename))[0]
1484 name = os.path.splitext(os.path.basename(filename))[0]
1485 else:
1485 else:
1486 name = '__main__'
1486 name = '__main__'
1487 prog_ns = {'__name__':name}
1487 prog_ns = {'__name__':name}
1488
1488
1489 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1489 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1490 # set the __file__ global in the script's namespace
1490 # set the __file__ global in the script's namespace
1491 prog_ns['__file__'] = filename
1491 prog_ns['__file__'] = filename
1492
1492
1493 # pickle fix. See iplib for an explanation. But we need to make sure
1493 # pickle fix. See iplib for an explanation. But we need to make sure
1494 # that, if we overwrite __main__, we replace it at the end
1494 # that, if we overwrite __main__, we replace it at the end
1495 if prog_ns['__name__'] == '__main__':
1495 if prog_ns['__name__'] == '__main__':
1496 restore_main = sys.modules['__main__']
1496 restore_main = sys.modules['__main__']
1497 else:
1497 else:
1498 restore_main = False
1498 restore_main = False
1499
1499
1500 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1500 sys.modules[prog_ns['__name__']] = FakeModule(prog_ns)
1501
1501
1502 stats = None
1502 stats = None
1503 try:
1503 try:
1504 if opts.has_key('p'):
1504 if opts.has_key('p'):
1505 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1505 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1506 else:
1506 else:
1507 if opts.has_key('d'):
1507 if opts.has_key('d'):
1508 deb = Debugger.Pdb(self.shell.rc.colors)
1508 deb = Debugger.Pdb(self.shell.rc.colors)
1509 # reset Breakpoint state, which is moronically kept
1509 # reset Breakpoint state, which is moronically kept
1510 # in a class
1510 # in a class
1511 bdb.Breakpoint.next = 1
1511 bdb.Breakpoint.next = 1
1512 bdb.Breakpoint.bplist = {}
1512 bdb.Breakpoint.bplist = {}
1513 bdb.Breakpoint.bpbynumber = [None]
1513 bdb.Breakpoint.bpbynumber = [None]
1514 # Set an initial breakpoint to stop execution
1514 # Set an initial breakpoint to stop execution
1515 maxtries = 10
1515 maxtries = 10
1516 bp = int(opts.get('b',[1])[0])
1516 bp = int(opts.get('b',[1])[0])
1517 checkline = deb.checkline(filename,bp)
1517 checkline = deb.checkline(filename,bp)
1518 if not checkline:
1518 if not checkline:
1519 for bp in range(bp+1,bp+maxtries+1):
1519 for bp in range(bp+1,bp+maxtries+1):
1520 if deb.checkline(filename,bp):
1520 if deb.checkline(filename,bp):
1521 break
1521 break
1522 else:
1522 else:
1523 msg = ("\nI failed to find a valid line to set "
1523 msg = ("\nI failed to find a valid line to set "
1524 "a breakpoint\n"
1524 "a breakpoint\n"
1525 "after trying up to line: %s.\n"
1525 "after trying up to line: %s.\n"
1526 "Please set a valid breakpoint manually "
1526 "Please set a valid breakpoint manually "
1527 "with the -b option." % bp)
1527 "with the -b option." % bp)
1528 error(msg)
1528 error(msg)
1529 return
1529 return
1530 # if we find a good linenumber, set the breakpoint
1530 # if we find a good linenumber, set the breakpoint
1531 deb.do_break('%s:%s' % (filename,bp))
1531 deb.do_break('%s:%s' % (filename,bp))
1532 # Start file run
1532 # Start file run
1533 print "NOTE: Enter 'c' at the",
1533 print "NOTE: Enter 'c' at the",
1534 print "ipdb> prompt to start your script."
1534 print "ipdb> prompt to start your script."
1535 try:
1535 try:
1536 deb.run('execfile("%s")' % filename,prog_ns)
1536 deb.run('execfile("%s")' % filename,prog_ns)
1537 except:
1537 except:
1538 etype, value, tb = sys.exc_info()
1538 etype, value, tb = sys.exc_info()
1539 # Skip three frames in the traceback: the %run one,
1539 # Skip three frames in the traceback: the %run one,
1540 # one inside bdb.py, and the command-line typed by the
1540 # one inside bdb.py, and the command-line typed by the
1541 # user (run by exec in pdb itself).
1541 # user (run by exec in pdb itself).
1542 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1542 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1543 else:
1543 else:
1544 if runner is None:
1544 if runner is None:
1545 runner = self.shell.safe_execfile
1545 runner = self.shell.safe_execfile
1546 if opts.has_key('t'):
1546 if opts.has_key('t'):
1547 try:
1547 try:
1548 nruns = int(opts['N'][0])
1548 nruns = int(opts['N'][0])
1549 if nruns < 1:
1549 if nruns < 1:
1550 error('Number of runs must be >=1')
1550 error('Number of runs must be >=1')
1551 return
1551 return
1552 except (KeyError):
1552 except (KeyError):
1553 nruns = 1
1553 nruns = 1
1554 if nruns == 1:
1554 if nruns == 1:
1555 t0 = clock2()
1555 t0 = clock2()
1556 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1556 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1557 t1 = clock2()
1557 t1 = clock2()
1558 t_usr = t1[0]-t0[0]
1558 t_usr = t1[0]-t0[0]
1559 t_sys = t1[1]-t1[1]
1559 t_sys = t1[1]-t1[1]
1560 print "\nIPython CPU timings (estimated):"
1560 print "\nIPython CPU timings (estimated):"
1561 print " User : %10s s." % t_usr
1561 print " User : %10s s." % t_usr
1562 print " System: %10s s." % t_sys
1562 print " System: %10s s." % t_sys
1563 else:
1563 else:
1564 runs = range(nruns)
1564 runs = range(nruns)
1565 t0 = clock2()
1565 t0 = clock2()
1566 for nr in runs:
1566 for nr in runs:
1567 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1567 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1568 t1 = clock2()
1568 t1 = clock2()
1569 t_usr = t1[0]-t0[0]
1569 t_usr = t1[0]-t0[0]
1570 t_sys = t1[1]-t1[1]
1570 t_sys = t1[1]-t1[1]
1571 print "\nIPython CPU timings (estimated):"
1571 print "\nIPython CPU timings (estimated):"
1572 print "Total runs performed:",nruns
1572 print "Total runs performed:",nruns
1573 print " Times : %10s %10s" % ('Total','Per run')
1573 print " Times : %10s %10s" % ('Total','Per run')
1574 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1574 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1575 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1575 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1576
1576
1577 else:
1577 else:
1578 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1578 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1579 if opts.has_key('i'):
1579 if opts.has_key('i'):
1580 self.shell.user_ns['__name__'] = __name__save
1580 self.shell.user_ns['__name__'] = __name__save
1581 else:
1581 else:
1582 # update IPython interactive namespace
1582 # update IPython interactive namespace
1583 del prog_ns['__name__']
1583 del prog_ns['__name__']
1584 self.shell.user_ns.update(prog_ns)
1584 self.shell.user_ns.update(prog_ns)
1585 finally:
1585 finally:
1586 sys.argv = save_argv
1586 sys.argv = save_argv
1587 if restore_main:
1587 if restore_main:
1588 sys.modules['__main__'] = restore_main
1588 sys.modules['__main__'] = restore_main
1589 return stats
1589 return stats
1590
1590
1591 def magic_runlog(self, parameter_s =''):
1591 def magic_runlog(self, parameter_s =''):
1592 """Run files as logs.
1592 """Run files as logs.
1593
1593
1594 Usage:\\
1594 Usage:\\
1595 %runlog file1 file2 ...
1595 %runlog file1 file2 ...
1596
1596
1597 Run the named files (treating them as log files) in sequence inside
1597 Run the named files (treating them as log files) in sequence inside
1598 the interpreter, and return to the prompt. This is much slower than
1598 the interpreter, and return to the prompt. This is much slower than
1599 %run because each line is executed in a try/except block, but it
1599 %run because each line is executed in a try/except block, but it
1600 allows running files with syntax errors in them.
1600 allows running files with syntax errors in them.
1601
1601
1602 Normally IPython will guess when a file is one of its own logfiles, so
1602 Normally IPython will guess when a file is one of its own logfiles, so
1603 you can typically use %run even for logs. This shorthand allows you to
1603 you can typically use %run even for logs. This shorthand allows you to
1604 force any file to be treated as a log file."""
1604 force any file to be treated as a log file."""
1605
1605
1606 for f in parameter_s.split():
1606 for f in parameter_s.split():
1607 self.shell.safe_execfile(f,self.shell.user_ns,
1607 self.shell.safe_execfile(f,self.shell.user_ns,
1608 self.shell.user_ns,islog=1)
1608 self.shell.user_ns,islog=1)
1609
1609
1610 def magic_timeit(self, parameter_s =''):
1610 def magic_timeit(self, parameter_s =''):
1611 """Time execution of a Python statement or expression
1611 """Time execution of a Python statement or expression
1612
1612
1613 Usage:\\
1613 Usage:\\
1614 %timeit [-n<N> -r<R> [-t|-c]] statement
1614 %timeit [-n<N> -r<R> [-t|-c]] statement
1615
1615
1616 Time execution of a Python statement or expression using the timeit
1616 Time execution of a Python statement or expression using the timeit
1617 module.
1617 module.
1618
1618
1619 Options:
1619 Options:
1620 -n<N>: execute the given statement <N> times in a loop. If this value
1620 -n<N>: execute the given statement <N> times in a loop. If this value
1621 is not given, a fitting value is chosen.
1621 is not given, a fitting value is chosen.
1622
1622
1623 -r<R>: repeat the loop iteration <R> times and take the best result.
1623 -r<R>: repeat the loop iteration <R> times and take the best result.
1624 Default: 3
1624 Default: 3
1625
1625
1626 -t: use time.time to measure the time, which is the default on Unix.
1626 -t: use time.time to measure the time, which is the default on Unix.
1627 This function measures wall time.
1627 This function measures wall time.
1628
1628
1629 -c: use time.clock to measure the time, which is the default on
1629 -c: use time.clock to measure the time, which is the default on
1630 Windows and measures wall time. On Unix, resource.getrusage is used
1630 Windows and measures wall time. On Unix, resource.getrusage is used
1631 instead and returns the CPU user time.
1631 instead and returns the CPU user time.
1632
1632
1633 -p<P>: use a precision of <P> digits to display the timing result.
1633 -p<P>: use a precision of <P> digits to display the timing result.
1634 Default: 3
1634 Default: 3
1635
1635
1636
1636
1637 Examples:\\
1637 Examples:\\
1638 In [1]: %timeit pass
1638 In [1]: %timeit pass
1639 10000000 loops, best of 3: 53.3 ns per loop
1639 10000000 loops, best of 3: 53.3 ns per loop
1640
1640
1641 In [2]: u = None
1641 In [2]: u = None
1642
1642
1643 In [3]: %timeit u is None
1643 In [3]: %timeit u is None
1644 10000000 loops, best of 3: 184 ns per loop
1644 10000000 loops, best of 3: 184 ns per loop
1645
1645
1646 In [4]: %timeit -r 4 u == None
1646 In [4]: %timeit -r 4 u == None
1647 1000000 loops, best of 4: 242 ns per loop
1647 1000000 loops, best of 4: 242 ns per loop
1648
1648
1649 In [5]: import time
1649 In [5]: import time
1650
1650
1651 In [6]: %timeit -n1 time.sleep(2)
1651 In [6]: %timeit -n1 time.sleep(2)
1652 1 loops, best of 3: 2 s per loop
1652 1 loops, best of 3: 2 s per loop
1653
1653
1654
1654
1655 The times reported by %timeit will be slightly higher than those
1655 The times reported by %timeit will be slightly higher than those
1656 reported by the timeit.py script when variables are accessed. This is
1656 reported by the timeit.py script when variables are accessed. This is
1657 due to the fact that %timeit executes the statement in the namespace
1657 due to the fact that %timeit executes the statement in the namespace
1658 of the shell, compared with timeit.py, which uses a single setup
1658 of the shell, compared with timeit.py, which uses a single setup
1659 statement to import function or create variables. Generally, the bias
1659 statement to import function or create variables. Generally, the bias
1660 does not matter as long as results from timeit.py are not mixed with
1660 does not matter as long as results from timeit.py are not mixed with
1661 those from %timeit."""
1661 those from %timeit."""
1662
1662
1663 import timeit
1663 import timeit
1664 import math
1664 import math
1665
1665
1666 units = ["s", "ms", "\xc2\xb5s", "ns"]
1666 units = ["s", "ms", "\xc2\xb5s", "ns"]
1667 scaling = [1, 1e3, 1e6, 1e9]
1667 scaling = [1, 1e3, 1e6, 1e9]
1668
1668
1669 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1669 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1670 posix=False)
1670 posix=False)
1671 if stmt == "":
1671 if stmt == "":
1672 return
1672 return
1673 timefunc = timeit.default_timer
1673 timefunc = timeit.default_timer
1674 number = int(getattr(opts, "n", 0))
1674 number = int(getattr(opts, "n", 0))
1675 repeat = int(getattr(opts, "r", timeit.default_repeat))
1675 repeat = int(getattr(opts, "r", timeit.default_repeat))
1676 precision = int(getattr(opts, "p", 3))
1676 precision = int(getattr(opts, "p", 3))
1677 if hasattr(opts, "t"):
1677 if hasattr(opts, "t"):
1678 timefunc = time.time
1678 timefunc = time.time
1679 if hasattr(opts, "c"):
1679 if hasattr(opts, "c"):
1680 timefunc = clock
1680 timefunc = clock
1681
1681
1682 timer = timeit.Timer(timer=timefunc)
1682 timer = timeit.Timer(timer=timefunc)
1683 # this code has tight coupling to the inner workings of timeit.Timer,
1683 # this code has tight coupling to the inner workings of timeit.Timer,
1684 # but is there a better way to achieve that the code stmt has access
1684 # but is there a better way to achieve that the code stmt has access
1685 # to the shell namespace?
1685 # to the shell namespace?
1686
1686
1687 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1687 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1688 'setup': "pass"}
1688 'setup': "pass"}
1689 code = compile(src, "<magic-timeit>", "exec")
1689 code = compile(src, "<magic-timeit>", "exec")
1690 ns = {}
1690 ns = {}
1691 exec code in self.shell.user_ns, ns
1691 exec code in self.shell.user_ns, ns
1692 timer.inner = ns["inner"]
1692 timer.inner = ns["inner"]
1693
1693
1694 if number == 0:
1694 if number == 0:
1695 # determine number so that 0.2 <= total time < 2.0
1695 # determine number so that 0.2 <= total time < 2.0
1696 number = 1
1696 number = 1
1697 for i in range(1, 10):
1697 for i in range(1, 10):
1698 number *= 10
1698 number *= 10
1699 if timer.timeit(number) >= 0.2:
1699 if timer.timeit(number) >= 0.2:
1700 break
1700 break
1701
1701
1702 best = min(timer.repeat(repeat, number)) / number
1702 best = min(timer.repeat(repeat, number)) / number
1703
1703
1704 if best > 0.0:
1704 if best > 0.0:
1705 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1705 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1706 else:
1706 else:
1707 order = 3
1707 order = 3
1708 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1708 print "%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1709 precision,
1709 precision,
1710 best * scaling[order],
1710 best * scaling[order],
1711 units[order])
1711 units[order])
1712
1712
1713 def magic_time(self,parameter_s = ''):
1713 def magic_time(self,parameter_s = ''):
1714 """Time execution of a Python statement or expression.
1714 """Time execution of a Python statement or expression.
1715
1715
1716 The CPU and wall clock times are printed, and the value of the
1716 The CPU and wall clock times are printed, and the value of the
1717 expression (if any) is returned. Note that under Win32, system time
1717 expression (if any) is returned. Note that under Win32, system time
1718 is always reported as 0, since it can not be measured.
1718 is always reported as 0, since it can not be measured.
1719
1719
1720 This function provides very basic timing functionality. In Python
1720 This function provides very basic timing functionality. In Python
1721 2.3, the timeit module offers more control and sophistication, so this
1721 2.3, the timeit module offers more control and sophistication, so this
1722 could be rewritten to use it (patches welcome).
1722 could be rewritten to use it (patches welcome).
1723
1723
1724 Some examples:
1724 Some examples:
1725
1725
1726 In [1]: time 2**128
1726 In [1]: time 2**128
1727 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1727 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1728 Wall time: 0.00
1728 Wall time: 0.00
1729 Out[1]: 340282366920938463463374607431768211456L
1729 Out[1]: 340282366920938463463374607431768211456L
1730
1730
1731 In [2]: n = 1000000
1731 In [2]: n = 1000000
1732
1732
1733 In [3]: time sum(range(n))
1733 In [3]: time sum(range(n))
1734 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1734 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1735 Wall time: 1.37
1735 Wall time: 1.37
1736 Out[3]: 499999500000L
1736 Out[3]: 499999500000L
1737
1737
1738 In [4]: time print 'hello world'
1738 In [4]: time print 'hello world'
1739 hello world
1739 hello world
1740 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1740 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1741 Wall time: 0.00
1741 Wall time: 0.00
1742 """
1742 """
1743
1743
1744 # fail immediately if the given expression can't be compiled
1744 # fail immediately if the given expression can't be compiled
1745 try:
1745 try:
1746 mode = 'eval'
1746 mode = 'eval'
1747 code = compile(parameter_s,'<timed eval>',mode)
1747 code = compile(parameter_s,'<timed eval>',mode)
1748 except SyntaxError:
1748 except SyntaxError:
1749 mode = 'exec'
1749 mode = 'exec'
1750 code = compile(parameter_s,'<timed exec>',mode)
1750 code = compile(parameter_s,'<timed exec>',mode)
1751 # skew measurement as little as possible
1751 # skew measurement as little as possible
1752 glob = self.shell.user_ns
1752 glob = self.shell.user_ns
1753 clk = clock2
1753 clk = clock2
1754 wtime = time.time
1754 wtime = time.time
1755 # time execution
1755 # time execution
1756 wall_st = wtime()
1756 wall_st = wtime()
1757 if mode=='eval':
1757 if mode=='eval':
1758 st = clk()
1758 st = clk()
1759 out = eval(code,glob)
1759 out = eval(code,glob)
1760 end = clk()
1760 end = clk()
1761 else:
1761 else:
1762 st = clk()
1762 st = clk()
1763 exec code in glob
1763 exec code in glob
1764 end = clk()
1764 end = clk()
1765 out = None
1765 out = None
1766 wall_end = wtime()
1766 wall_end = wtime()
1767 # Compute actual times and report
1767 # Compute actual times and report
1768 wall_time = wall_end-wall_st
1768 wall_time = wall_end-wall_st
1769 cpu_user = end[0]-st[0]
1769 cpu_user = end[0]-st[0]
1770 cpu_sys = end[1]-st[1]
1770 cpu_sys = end[1]-st[1]
1771 cpu_tot = cpu_user+cpu_sys
1771 cpu_tot = cpu_user+cpu_sys
1772 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1772 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1773 (cpu_user,cpu_sys,cpu_tot)
1773 (cpu_user,cpu_sys,cpu_tot)
1774 print "Wall time: %.2f" % wall_time
1774 print "Wall time: %.2f" % wall_time
1775 return out
1775 return out
1776
1776
1777 def magic_macro(self,parameter_s = ''):
1777 def magic_macro(self,parameter_s = ''):
1778 """Define a set of input lines as a macro for future re-execution.
1778 """Define a set of input lines as a macro for future re-execution.
1779
1779
1780 Usage:\\
1780 Usage:\\
1781 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1781 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1782
1782
1783 Options:
1783 Options:
1784
1784
1785 -r: use 'raw' input. By default, the 'processed' history is used,
1785 -r: use 'raw' input. By default, the 'processed' history is used,
1786 so that magics are loaded in their transformed version to valid
1786 so that magics are loaded in their transformed version to valid
1787 Python. If this option is given, the raw input as typed as the
1787 Python. If this option is given, the raw input as typed as the
1788 command line is used instead.
1788 command line is used instead.
1789
1789
1790 This will define a global variable called `name` which is a string
1790 This will define a global variable called `name` which is a string
1791 made of joining the slices and lines you specify (n1,n2,... numbers
1791 made of joining the slices and lines you specify (n1,n2,... numbers
1792 above) from your input history into a single string. This variable
1792 above) from your input history into a single string. This variable
1793 acts like an automatic function which re-executes those lines as if
1793 acts like an automatic function which re-executes those lines as if
1794 you had typed them. You just type 'name' at the prompt and the code
1794 you had typed them. You just type 'name' at the prompt and the code
1795 executes.
1795 executes.
1796
1796
1797 The notation for indicating number ranges is: n1-n2 means 'use line
1797 The notation for indicating number ranges is: n1-n2 means 'use line
1798 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1798 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
1799 using the lines numbered 5,6 and 7.
1799 using the lines numbered 5,6 and 7.
1800
1800
1801 Note: as a 'hidden' feature, you can also use traditional python slice
1801 Note: as a 'hidden' feature, you can also use traditional python slice
1802 notation, where N:M means numbers N through M-1.
1802 notation, where N:M means numbers N through M-1.
1803
1803
1804 For example, if your history contains (%hist prints it):
1804 For example, if your history contains (%hist prints it):
1805
1805
1806 44: x=1\\
1806 44: x=1\\
1807 45: y=3\\
1807 45: y=3\\
1808 46: z=x+y\\
1808 46: z=x+y\\
1809 47: print x\\
1809 47: print x\\
1810 48: a=5\\
1810 48: a=5\\
1811 49: print 'x',x,'y',y\\
1811 49: print 'x',x,'y',y\\
1812
1812
1813 you can create a macro with lines 44 through 47 (included) and line 49
1813 you can create a macro with lines 44 through 47 (included) and line 49
1814 called my_macro with:
1814 called my_macro with:
1815
1815
1816 In [51]: %macro my_macro 44-47 49
1816 In [51]: %macro my_macro 44-47 49
1817
1817
1818 Now, typing `my_macro` (without quotes) will re-execute all this code
1818 Now, typing `my_macro` (without quotes) will re-execute all this code
1819 in one pass.
1819 in one pass.
1820
1820
1821 You don't need to give the line-numbers in order, and any given line
1821 You don't need to give the line-numbers in order, and any given line
1822 number can appear multiple times. You can assemble macros with any
1822 number can appear multiple times. You can assemble macros with any
1823 lines from your input history in any order.
1823 lines from your input history in any order.
1824
1824
1825 The macro is a simple object which holds its value in an attribute,
1825 The macro is a simple object which holds its value in an attribute,
1826 but IPython's display system checks for macros and executes them as
1826 but IPython's display system checks for macros and executes them as
1827 code instead of printing them when you type their name.
1827 code instead of printing them when you type their name.
1828
1828
1829 You can view a macro's contents by explicitly printing it with:
1829 You can view a macro's contents by explicitly printing it with:
1830
1830
1831 'print macro_name'.
1831 'print macro_name'.
1832
1832
1833 For one-off cases which DON'T contain magic function calls in them you
1833 For one-off cases which DON'T contain magic function calls in them you
1834 can obtain similar results by explicitly executing slices from your
1834 can obtain similar results by explicitly executing slices from your
1835 input history with:
1835 input history with:
1836
1836
1837 In [60]: exec In[44:48]+In[49]"""
1837 In [60]: exec In[44:48]+In[49]"""
1838
1838
1839 opts,args = self.parse_options(parameter_s,'r',mode='list')
1839 opts,args = self.parse_options(parameter_s,'r',mode='list')
1840 name,ranges = args[0], args[1:]
1840 name,ranges = args[0], args[1:]
1841 #print 'rng',ranges # dbg
1841 #print 'rng',ranges # dbg
1842 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1842 lines = self.extract_input_slices(ranges,opts.has_key('r'))
1843 macro = Macro(lines)
1843 macro = Macro(lines)
1844 self.shell.user_ns.update({name:macro})
1844 self.shell.user_ns.update({name:macro})
1845 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1845 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
1846 print 'Macro contents:'
1846 print 'Macro contents:'
1847 print macro,
1847 print macro,
1848
1848
1849 def magic_save(self,parameter_s = ''):
1849 def magic_save(self,parameter_s = ''):
1850 """Save a set of lines to a given filename.
1850 """Save a set of lines to a given filename.
1851
1851
1852 Usage:\\
1852 Usage:\\
1853 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1853 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
1854
1854
1855 Options:
1855 Options:
1856
1856
1857 -r: use 'raw' input. By default, the 'processed' history is used,
1857 -r: use 'raw' input. By default, the 'processed' history is used,
1858 so that magics are loaded in their transformed version to valid
1858 so that magics are loaded in their transformed version to valid
1859 Python. If this option is given, the raw input as typed as the
1859 Python. If this option is given, the raw input as typed as the
1860 command line is used instead.
1860 command line is used instead.
1861
1861
1862 This function uses the same syntax as %macro for line extraction, but
1862 This function uses the same syntax as %macro for line extraction, but
1863 instead of creating a macro it saves the resulting string to the
1863 instead of creating a macro it saves the resulting string to the
1864 filename you specify.
1864 filename you specify.
1865
1865
1866 It adds a '.py' extension to the file if you don't do so yourself, and
1866 It adds a '.py' extension to the file if you don't do so yourself, and
1867 it asks for confirmation before overwriting existing files."""
1867 it asks for confirmation before overwriting existing files."""
1868
1868
1869 opts,args = self.parse_options(parameter_s,'r',mode='list')
1869 opts,args = self.parse_options(parameter_s,'r',mode='list')
1870 fname,ranges = args[0], args[1:]
1870 fname,ranges = args[0], args[1:]
1871 if not fname.endswith('.py'):
1871 if not fname.endswith('.py'):
1872 fname += '.py'
1872 fname += '.py'
1873 if os.path.isfile(fname):
1873 if os.path.isfile(fname):
1874 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1874 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
1875 if ans.lower() not in ['y','yes']:
1875 if ans.lower() not in ['y','yes']:
1876 print 'Operation cancelled.'
1876 print 'Operation cancelled.'
1877 return
1877 return
1878 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1878 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
1879 f = file(fname,'w')
1879 f = file(fname,'w')
1880 f.write(cmds)
1880 f.write(cmds)
1881 f.close()
1881 f.close()
1882 print 'The following commands were written to file `%s`:' % fname
1882 print 'The following commands were written to file `%s`:' % fname
1883 print cmds
1883 print cmds
1884
1884
1885 def _edit_macro(self,mname,macro):
1885 def _edit_macro(self,mname,macro):
1886 """open an editor with the macro data in a file"""
1886 """open an editor with the macro data in a file"""
1887 filename = self.shell.mktempfile(macro.value)
1887 filename = self.shell.mktempfile(macro.value)
1888 self.shell.hooks.editor(filename)
1888 self.shell.hooks.editor(filename)
1889
1889
1890 # and make a new macro object, to replace the old one
1890 # and make a new macro object, to replace the old one
1891 mfile = open(filename)
1891 mfile = open(filename)
1892 mvalue = mfile.read()
1892 mvalue = mfile.read()
1893 mfile.close()
1893 mfile.close()
1894 self.shell.user_ns[mname] = Macro(mvalue)
1894 self.shell.user_ns[mname] = Macro(mvalue)
1895
1895
1896 def magic_ed(self,parameter_s=''):
1896 def magic_ed(self,parameter_s=''):
1897 """Alias to %edit."""
1897 """Alias to %edit."""
1898 return self.magic_edit(parameter_s)
1898 return self.magic_edit(parameter_s)
1899
1899
1900 def magic_edit(self,parameter_s='',last_call=['','']):
1900 def magic_edit(self,parameter_s='',last_call=['','']):
1901 """Bring up an editor and execute the resulting code.
1901 """Bring up an editor and execute the resulting code.
1902
1902
1903 Usage:
1903 Usage:
1904 %edit [options] [args]
1904 %edit [options] [args]
1905
1905
1906 %edit runs IPython's editor hook. The default version of this hook is
1906 %edit runs IPython's editor hook. The default version of this hook is
1907 set to call the __IPYTHON__.rc.editor command. This is read from your
1907 set to call the __IPYTHON__.rc.editor command. This is read from your
1908 environment variable $EDITOR. If this isn't found, it will default to
1908 environment variable $EDITOR. If this isn't found, it will default to
1909 vi under Linux/Unix and to notepad under Windows. See the end of this
1909 vi under Linux/Unix and to notepad under Windows. See the end of this
1910 docstring for how to change the editor hook.
1910 docstring for how to change the editor hook.
1911
1911
1912 You can also set the value of this editor via the command line option
1912 You can also set the value of this editor via the command line option
1913 '-editor' or in your ipythonrc file. This is useful if you wish to use
1913 '-editor' or in your ipythonrc file. This is useful if you wish to use
1914 specifically for IPython an editor different from your typical default
1914 specifically for IPython an editor different from your typical default
1915 (and for Windows users who typically don't set environment variables).
1915 (and for Windows users who typically don't set environment variables).
1916
1916
1917 This command allows you to conveniently edit multi-line code right in
1917 This command allows you to conveniently edit multi-line code right in
1918 your IPython session.
1918 your IPython session.
1919
1919
1920 If called without arguments, %edit opens up an empty editor with a
1920 If called without arguments, %edit opens up an empty editor with a
1921 temporary file and will execute the contents of this file when you
1921 temporary file and will execute the contents of this file when you
1922 close it (don't forget to save it!).
1922 close it (don't forget to save it!).
1923
1923
1924
1924
1925 Options:
1925 Options:
1926
1926
1927 -n <number>: open the editor at a specified line number. By default,
1927 -n <number>: open the editor at a specified line number. By default,
1928 the IPython editor hook uses the unix syntax 'editor +N filename', but
1928 the IPython editor hook uses the unix syntax 'editor +N filename', but
1929 you can configure this by providing your own modified hook if your
1929 you can configure this by providing your own modified hook if your
1930 favorite editor supports line-number specifications with a different
1930 favorite editor supports line-number specifications with a different
1931 syntax.
1931 syntax.
1932
1932
1933 -p: this will call the editor with the same data as the previous time
1933 -p: this will call the editor with the same data as the previous time
1934 it was used, regardless of how long ago (in your current session) it
1934 it was used, regardless of how long ago (in your current session) it
1935 was.
1935 was.
1936
1936
1937 -r: use 'raw' input. This option only applies to input taken from the
1937 -r: use 'raw' input. This option only applies to input taken from the
1938 user's history. By default, the 'processed' history is used, so that
1938 user's history. By default, the 'processed' history is used, so that
1939 magics are loaded in their transformed version to valid Python. If
1939 magics are loaded in their transformed version to valid Python. If
1940 this option is given, the raw input as typed as the command line is
1940 this option is given, the raw input as typed as the command line is
1941 used instead. When you exit the editor, it will be executed by
1941 used instead. When you exit the editor, it will be executed by
1942 IPython's own processor.
1942 IPython's own processor.
1943
1943
1944 -x: do not execute the edited code immediately upon exit. This is
1944 -x: do not execute the edited code immediately upon exit. This is
1945 mainly useful if you are editing programs which need to be called with
1945 mainly useful if you are editing programs which need to be called with
1946 command line arguments, which you can then do using %run.
1946 command line arguments, which you can then do using %run.
1947
1947
1948
1948
1949 Arguments:
1949 Arguments:
1950
1950
1951 If arguments are given, the following possibilites exist:
1951 If arguments are given, the following possibilites exist:
1952
1952
1953 - The arguments are numbers or pairs of colon-separated numbers (like
1953 - The arguments are numbers or pairs of colon-separated numbers (like
1954 1 4:8 9). These are interpreted as lines of previous input to be
1954 1 4:8 9). These are interpreted as lines of previous input to be
1955 loaded into the editor. The syntax is the same of the %macro command.
1955 loaded into the editor. The syntax is the same of the %macro command.
1956
1956
1957 - If the argument doesn't start with a number, it is evaluated as a
1957 - If the argument doesn't start with a number, it is evaluated as a
1958 variable and its contents loaded into the editor. You can thus edit
1958 variable and its contents loaded into the editor. You can thus edit
1959 any string which contains python code (including the result of
1959 any string which contains python code (including the result of
1960 previous edits).
1960 previous edits).
1961
1961
1962 - If the argument is the name of an object (other than a string),
1962 - If the argument is the name of an object (other than a string),
1963 IPython will try to locate the file where it was defined and open the
1963 IPython will try to locate the file where it was defined and open the
1964 editor at the point where it is defined. You can use `%edit function`
1964 editor at the point where it is defined. You can use `%edit function`
1965 to load an editor exactly at the point where 'function' is defined,
1965 to load an editor exactly at the point where 'function' is defined,
1966 edit it and have the file be executed automatically.
1966 edit it and have the file be executed automatically.
1967
1967
1968 If the object is a macro (see %macro for details), this opens up your
1968 If the object is a macro (see %macro for details), this opens up your
1969 specified editor with a temporary file containing the macro's data.
1969 specified editor with a temporary file containing the macro's data.
1970 Upon exit, the macro is reloaded with the contents of the file.
1970 Upon exit, the macro is reloaded with the contents of the file.
1971
1971
1972 Note: opening at an exact line is only supported under Unix, and some
1972 Note: opening at an exact line is only supported under Unix, and some
1973 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1973 editors (like kedit and gedit up to Gnome 2.8) do not understand the
1974 '+NUMBER' parameter necessary for this feature. Good editors like
1974 '+NUMBER' parameter necessary for this feature. Good editors like
1975 (X)Emacs, vi, jed, pico and joe all do.
1975 (X)Emacs, vi, jed, pico and joe all do.
1976
1976
1977 - If the argument is not found as a variable, IPython will look for a
1977 - If the argument is not found as a variable, IPython will look for a
1978 file with that name (adding .py if necessary) and load it into the
1978 file with that name (adding .py if necessary) and load it into the
1979 editor. It will execute its contents with execfile() when you exit,
1979 editor. It will execute its contents with execfile() when you exit,
1980 loading any code in the file into your interactive namespace.
1980 loading any code in the file into your interactive namespace.
1981
1981
1982 After executing your code, %edit will return as output the code you
1982 After executing your code, %edit will return as output the code you
1983 typed in the editor (except when it was an existing file). This way
1983 typed in the editor (except when it was an existing file). This way
1984 you can reload the code in further invocations of %edit as a variable,
1984 you can reload the code in further invocations of %edit as a variable,
1985 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1985 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
1986 the output.
1986 the output.
1987
1987
1988 Note that %edit is also available through the alias %ed.
1988 Note that %edit is also available through the alias %ed.
1989
1989
1990 This is an example of creating a simple function inside the editor and
1990 This is an example of creating a simple function inside the editor and
1991 then modifying it. First, start up the editor:
1991 then modifying it. First, start up the editor:
1992
1992
1993 In [1]: ed\\
1993 In [1]: ed\\
1994 Editing... done. Executing edited code...\\
1994 Editing... done. Executing edited code...\\
1995 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1995 Out[1]: 'def foo():\\n print "foo() was defined in an editing session"\\n'
1996
1996
1997 We can then call the function foo():
1997 We can then call the function foo():
1998
1998
1999 In [2]: foo()\\
1999 In [2]: foo()\\
2000 foo() was defined in an editing session
2000 foo() was defined in an editing session
2001
2001
2002 Now we edit foo. IPython automatically loads the editor with the
2002 Now we edit foo. IPython automatically loads the editor with the
2003 (temporary) file where foo() was previously defined:
2003 (temporary) file where foo() was previously defined:
2004
2004
2005 In [3]: ed foo\\
2005 In [3]: ed foo\\
2006 Editing... done. Executing edited code...
2006 Editing... done. Executing edited code...
2007
2007
2008 And if we call foo() again we get the modified version:
2008 And if we call foo() again we get the modified version:
2009
2009
2010 In [4]: foo()\\
2010 In [4]: foo()\\
2011 foo() has now been changed!
2011 foo() has now been changed!
2012
2012
2013 Here is an example of how to edit a code snippet successive
2013 Here is an example of how to edit a code snippet successive
2014 times. First we call the editor:
2014 times. First we call the editor:
2015
2015
2016 In [8]: ed\\
2016 In [8]: ed\\
2017 Editing... done. Executing edited code...\\
2017 Editing... done. Executing edited code...\\
2018 hello\\
2018 hello\\
2019 Out[8]: "print 'hello'\\n"
2019 Out[8]: "print 'hello'\\n"
2020
2020
2021 Now we call it again with the previous output (stored in _):
2021 Now we call it again with the previous output (stored in _):
2022
2022
2023 In [9]: ed _\\
2023 In [9]: ed _\\
2024 Editing... done. Executing edited code...\\
2024 Editing... done. Executing edited code...\\
2025 hello world\\
2025 hello world\\
2026 Out[9]: "print 'hello world'\\n"
2026 Out[9]: "print 'hello world'\\n"
2027
2027
2028 Now we call it with the output #8 (stored in _8, also as Out[8]):
2028 Now we call it with the output #8 (stored in _8, also as Out[8]):
2029
2029
2030 In [10]: ed _8\\
2030 In [10]: ed _8\\
2031 Editing... done. Executing edited code...\\
2031 Editing... done. Executing edited code...\\
2032 hello again\\
2032 hello again\\
2033 Out[10]: "print 'hello again'\\n"
2033 Out[10]: "print 'hello again'\\n"
2034
2034
2035
2035
2036 Changing the default editor hook:
2036 Changing the default editor hook:
2037
2037
2038 If you wish to write your own editor hook, you can put it in a
2038 If you wish to write your own editor hook, you can put it in a
2039 configuration file which you load at startup time. The default hook
2039 configuration file which you load at startup time. The default hook
2040 is defined in the IPython.hooks module, and you can use that as a
2040 is defined in the IPython.hooks module, and you can use that as a
2041 starting example for further modifications. That file also has
2041 starting example for further modifications. That file also has
2042 general instructions on how to set a new hook for use once you've
2042 general instructions on how to set a new hook for use once you've
2043 defined it."""
2043 defined it."""
2044
2044
2045 # FIXME: This function has become a convoluted mess. It needs a
2045 # FIXME: This function has become a convoluted mess. It needs a
2046 # ground-up rewrite with clean, simple logic.
2046 # ground-up rewrite with clean, simple logic.
2047
2047
2048 def make_filename(arg):
2048 def make_filename(arg):
2049 "Make a filename from the given args"
2049 "Make a filename from the given args"
2050 try:
2050 try:
2051 filename = get_py_filename(arg)
2051 filename = get_py_filename(arg)
2052 except IOError:
2052 except IOError:
2053 if args.endswith('.py'):
2053 if args.endswith('.py'):
2054 filename = arg
2054 filename = arg
2055 else:
2055 else:
2056 filename = None
2056 filename = None
2057 return filename
2057 return filename
2058
2058
2059 # custom exceptions
2059 # custom exceptions
2060 class DataIsObject(Exception): pass
2060 class DataIsObject(Exception): pass
2061
2061
2062 opts,args = self.parse_options(parameter_s,'prxn:')
2062 opts,args = self.parse_options(parameter_s,'prxn:')
2063 # Set a few locals from the options for convenience:
2063 # Set a few locals from the options for convenience:
2064 opts_p = opts.has_key('p')
2064 opts_p = opts.has_key('p')
2065 opts_r = opts.has_key('r')
2065 opts_r = opts.has_key('r')
2066
2066
2067 # Default line number value
2067 # Default line number value
2068 lineno = opts.get('n',None)
2068 lineno = opts.get('n',None)
2069
2069
2070 if opts_p:
2070 if opts_p:
2071 args = '_%s' % last_call[0]
2071 args = '_%s' % last_call[0]
2072 if not self.shell.user_ns.has_key(args):
2072 if not self.shell.user_ns.has_key(args):
2073 args = last_call[1]
2073 args = last_call[1]
2074
2074
2075 # use last_call to remember the state of the previous call, but don't
2075 # use last_call to remember the state of the previous call, but don't
2076 # let it be clobbered by successive '-p' calls.
2076 # let it be clobbered by successive '-p' calls.
2077 try:
2077 try:
2078 last_call[0] = self.shell.outputcache.prompt_count
2078 last_call[0] = self.shell.outputcache.prompt_count
2079 if not opts_p:
2079 if not opts_p:
2080 last_call[1] = parameter_s
2080 last_call[1] = parameter_s
2081 except:
2081 except:
2082 pass
2082 pass
2083
2083
2084 # by default this is done with temp files, except when the given
2084 # by default this is done with temp files, except when the given
2085 # arg is a filename
2085 # arg is a filename
2086 use_temp = 1
2086 use_temp = 1
2087
2087
2088 if re.match(r'\d',args):
2088 if re.match(r'\d',args):
2089 # Mode where user specifies ranges of lines, like in %macro.
2089 # Mode where user specifies ranges of lines, like in %macro.
2090 # This means that you can't edit files whose names begin with
2090 # This means that you can't edit files whose names begin with
2091 # numbers this way. Tough.
2091 # numbers this way. Tough.
2092 ranges = args.split()
2092 ranges = args.split()
2093 data = ''.join(self.extract_input_slices(ranges,opts_r))
2093 data = ''.join(self.extract_input_slices(ranges,opts_r))
2094 elif args.endswith('.py'):
2094 elif args.endswith('.py'):
2095 filename = make_filename(args)
2095 filename = make_filename(args)
2096 data = ''
2096 data = ''
2097 use_temp = 0
2097 use_temp = 0
2098 elif args:
2098 elif args:
2099 try:
2099 try:
2100 # Load the parameter given as a variable. If not a string,
2100 # Load the parameter given as a variable. If not a string,
2101 # process it as an object instead (below)
2101 # process it as an object instead (below)
2102
2102
2103 #print '*** args',args,'type',type(args) # dbg
2103 #print '*** args',args,'type',type(args) # dbg
2104 data = eval(args,self.shell.user_ns)
2104 data = eval(args,self.shell.user_ns)
2105 if not type(data) in StringTypes:
2105 if not type(data) in StringTypes:
2106 raise DataIsObject
2106 raise DataIsObject
2107
2107
2108 except (NameError,SyntaxError):
2108 except (NameError,SyntaxError):
2109 # given argument is not a variable, try as a filename
2109 # given argument is not a variable, try as a filename
2110 filename = make_filename(args)
2110 filename = make_filename(args)
2111 if filename is None:
2111 if filename is None:
2112 warn("Argument given (%s) can't be found as a variable "
2112 warn("Argument given (%s) can't be found as a variable "
2113 "or as a filename." % args)
2113 "or as a filename." % args)
2114 return
2114 return
2115
2115
2116 data = ''
2116 data = ''
2117 use_temp = 0
2117 use_temp = 0
2118 except DataIsObject:
2118 except DataIsObject:
2119
2119
2120 # macros have a special edit function
2120 # macros have a special edit function
2121 if isinstance(data,Macro):
2121 if isinstance(data,Macro):
2122 self._edit_macro(args,data)
2122 self._edit_macro(args,data)
2123 return
2123 return
2124
2124
2125 # For objects, try to edit the file where they are defined
2125 # For objects, try to edit the file where they are defined
2126 try:
2126 try:
2127 filename = inspect.getabsfile(data)
2127 filename = inspect.getabsfile(data)
2128 datafile = 1
2128 datafile = 1
2129 except TypeError:
2129 except TypeError:
2130 filename = make_filename(args)
2130 filename = make_filename(args)
2131 datafile = 1
2131 datafile = 1
2132 warn('Could not find file where `%s` is defined.\n'
2132 warn('Could not find file where `%s` is defined.\n'
2133 'Opening a file named `%s`' % (args,filename))
2133 'Opening a file named `%s`' % (args,filename))
2134 # Now, make sure we can actually read the source (if it was in
2134 # Now, make sure we can actually read the source (if it was in
2135 # a temp file it's gone by now).
2135 # a temp file it's gone by now).
2136 if datafile:
2136 if datafile:
2137 try:
2137 try:
2138 if lineno is None:
2138 if lineno is None:
2139 lineno = inspect.getsourcelines(data)[1]
2139 lineno = inspect.getsourcelines(data)[1]
2140 except IOError:
2140 except IOError:
2141 filename = make_filename(args)
2141 filename = make_filename(args)
2142 if filename is None:
2142 if filename is None:
2143 warn('The file `%s` where `%s` was defined cannot '
2143 warn('The file `%s` where `%s` was defined cannot '
2144 'be read.' % (filename,data))
2144 'be read.' % (filename,data))
2145 return
2145 return
2146 use_temp = 0
2146 use_temp = 0
2147 else:
2147 else:
2148 data = ''
2148 data = ''
2149
2149
2150 if use_temp:
2150 if use_temp:
2151 filename = self.shell.mktempfile(data)
2151 filename = self.shell.mktempfile(data)
2152 print 'IPython will make a temporary file named:',filename
2152 print 'IPython will make a temporary file named:',filename
2153
2153
2154 # do actual editing here
2154 # do actual editing here
2155 print 'Editing...',
2155 print 'Editing...',
2156 sys.stdout.flush()
2156 sys.stdout.flush()
2157 self.shell.hooks.editor(filename,lineno)
2157 self.shell.hooks.editor(filename,lineno)
2158 if opts.has_key('x'): # -x prevents actual execution
2158 if opts.has_key('x'): # -x prevents actual execution
2159 print
2159 print
2160 else:
2160 else:
2161 print 'done. Executing edited code...'
2161 print 'done. Executing edited code...'
2162 if opts_r:
2162 if opts_r:
2163 self.shell.runlines(file_read(filename))
2163 self.shell.runlines(file_read(filename))
2164 else:
2164 else:
2165 self.shell.safe_execfile(filename,self.shell.user_ns)
2165 self.shell.safe_execfile(filename,self.shell.user_ns)
2166 if use_temp:
2166 if use_temp:
2167 try:
2167 try:
2168 return open(filename).read()
2168 return open(filename).read()
2169 except IOError,msg:
2169 except IOError,msg:
2170 if msg.filename == filename:
2170 if msg.filename == filename:
2171 warn('File not found. Did you forget to save?')
2171 warn('File not found. Did you forget to save?')
2172 return
2172 return
2173 else:
2173 else:
2174 self.shell.showtraceback()
2174 self.shell.showtraceback()
2175
2175
2176 def magic_xmode(self,parameter_s = ''):
2176 def magic_xmode(self,parameter_s = ''):
2177 """Switch modes for the exception handlers.
2177 """Switch modes for the exception handlers.
2178
2178
2179 Valid modes: Plain, Context and Verbose.
2179 Valid modes: Plain, Context and Verbose.
2180
2180
2181 If called without arguments, acts as a toggle."""
2181 If called without arguments, acts as a toggle."""
2182
2182
2183 def xmode_switch_err(name):
2183 def xmode_switch_err(name):
2184 warn('Error changing %s exception modes.\n%s' %
2184 warn('Error changing %s exception modes.\n%s' %
2185 (name,sys.exc_info()[1]))
2185 (name,sys.exc_info()[1]))
2186
2186
2187 shell = self.shell
2187 shell = self.shell
2188 new_mode = parameter_s.strip().capitalize()
2188 new_mode = parameter_s.strip().capitalize()
2189 try:
2189 try:
2190 shell.InteractiveTB.set_mode(mode=new_mode)
2190 shell.InteractiveTB.set_mode(mode=new_mode)
2191 print 'Exception reporting mode:',shell.InteractiveTB.mode
2191 print 'Exception reporting mode:',shell.InteractiveTB.mode
2192 except:
2192 except:
2193 xmode_switch_err('user')
2193 xmode_switch_err('user')
2194
2194
2195 # threaded shells use a special handler in sys.excepthook
2195 # threaded shells use a special handler in sys.excepthook
2196 if shell.isthreaded:
2196 if shell.isthreaded:
2197 try:
2197 try:
2198 shell.sys_excepthook.set_mode(mode=new_mode)
2198 shell.sys_excepthook.set_mode(mode=new_mode)
2199 except:
2199 except:
2200 xmode_switch_err('threaded')
2200 xmode_switch_err('threaded')
2201
2201
2202 def magic_colors(self,parameter_s = ''):
2202 def magic_colors(self,parameter_s = ''):
2203 """Switch color scheme for prompts, info system and exception handlers.
2203 """Switch color scheme for prompts, info system and exception handlers.
2204
2204
2205 Currently implemented schemes: NoColor, Linux, LightBG.
2205 Currently implemented schemes: NoColor, Linux, LightBG.
2206
2206
2207 Color scheme names are not case-sensitive."""
2207 Color scheme names are not case-sensitive."""
2208
2208
2209 def color_switch_err(name):
2209 def color_switch_err(name):
2210 warn('Error changing %s color schemes.\n%s' %
2210 warn('Error changing %s color schemes.\n%s' %
2211 (name,sys.exc_info()[1]))
2211 (name,sys.exc_info()[1]))
2212
2212
2213
2213
2214 new_scheme = parameter_s.strip()
2214 new_scheme = parameter_s.strip()
2215 if not new_scheme:
2215 if not new_scheme:
2216 print 'You must specify a color scheme.'
2216 print 'You must specify a color scheme.'
2217 return
2217 return
2218 import IPython.rlineimpl as readline
2218 import IPython.rlineimpl as readline
2219 if not readline.have_readline:
2219 if not readline.have_readline:
2220 msg = """\
2220 msg = """\
2221 Proper color support under MS Windows requires the pyreadline library.
2221 Proper color support under MS Windows requires the pyreadline library.
2222 You can find it at:
2222 You can find it at:
2223 http://ipython.scipy.org/moin/PyReadline/Intro
2223 http://ipython.scipy.org/moin/PyReadline/Intro
2224 Gary's readline needs the ctypes module, from:
2224 Gary's readline needs the ctypes module, from:
2225 http://starship.python.net/crew/theller/ctypes
2225 http://starship.python.net/crew/theller/ctypes
2226 (Note that ctypes is already part of Python versions 2.5 and newer).
2226 (Note that ctypes is already part of Python versions 2.5 and newer).
2227
2227
2228 Defaulting color scheme to 'NoColor'"""
2228 Defaulting color scheme to 'NoColor'"""
2229 new_scheme = 'NoColor'
2229 new_scheme = 'NoColor'
2230 warn(msg)
2230 warn(msg)
2231 # local shortcut
2231 # local shortcut
2232 shell = self.shell
2232 shell = self.shell
2233
2233
2234 # Set prompt colors
2234 # Set prompt colors
2235 try:
2235 try:
2236 shell.outputcache.set_colors(new_scheme)
2236 shell.outputcache.set_colors(new_scheme)
2237 except:
2237 except:
2238 color_switch_err('prompt')
2238 color_switch_err('prompt')
2239 else:
2239 else:
2240 shell.rc.colors = \
2240 shell.rc.colors = \
2241 shell.outputcache.color_table.active_scheme_name
2241 shell.outputcache.color_table.active_scheme_name
2242 # Set exception colors
2242 # Set exception colors
2243 try:
2243 try:
2244 shell.InteractiveTB.set_colors(scheme = new_scheme)
2244 shell.InteractiveTB.set_colors(scheme = new_scheme)
2245 shell.SyntaxTB.set_colors(scheme = new_scheme)
2245 shell.SyntaxTB.set_colors(scheme = new_scheme)
2246 except:
2246 except:
2247 color_switch_err('exception')
2247 color_switch_err('exception')
2248
2248
2249 # threaded shells use a verbose traceback in sys.excepthook
2249 # threaded shells use a verbose traceback in sys.excepthook
2250 if shell.isthreaded:
2250 if shell.isthreaded:
2251 try:
2251 try:
2252 shell.sys_excepthook.set_colors(scheme=new_scheme)
2252 shell.sys_excepthook.set_colors(scheme=new_scheme)
2253 except:
2253 except:
2254 color_switch_err('system exception handler')
2254 color_switch_err('system exception handler')
2255
2255
2256 # Set info (for 'object?') colors
2256 # Set info (for 'object?') colors
2257 if shell.rc.color_info:
2257 if shell.rc.color_info:
2258 try:
2258 try:
2259 shell.inspector.set_active_scheme(new_scheme)
2259 shell.inspector.set_active_scheme(new_scheme)
2260 except:
2260 except:
2261 color_switch_err('object inspector')
2261 color_switch_err('object inspector')
2262 else:
2262 else:
2263 shell.inspector.set_active_scheme('NoColor')
2263 shell.inspector.set_active_scheme('NoColor')
2264
2264
2265 def magic_color_info(self,parameter_s = ''):
2265 def magic_color_info(self,parameter_s = ''):
2266 """Toggle color_info.
2266 """Toggle color_info.
2267
2267
2268 The color_info configuration parameter controls whether colors are
2268 The color_info configuration parameter controls whether colors are
2269 used for displaying object details (by things like %psource, %pfile or
2269 used for displaying object details (by things like %psource, %pfile or
2270 the '?' system). This function toggles this value with each call.
2270 the '?' system). This function toggles this value with each call.
2271
2271
2272 Note that unless you have a fairly recent pager (less works better
2272 Note that unless you have a fairly recent pager (less works better
2273 than more) in your system, using colored object information displays
2273 than more) in your system, using colored object information displays
2274 will not work properly. Test it and see."""
2274 will not work properly. Test it and see."""
2275
2275
2276 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2276 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2277 self.magic_colors(self.shell.rc.colors)
2277 self.magic_colors(self.shell.rc.colors)
2278 print 'Object introspection functions have now coloring:',
2278 print 'Object introspection functions have now coloring:',
2279 print ['OFF','ON'][self.shell.rc.color_info]
2279 print ['OFF','ON'][self.shell.rc.color_info]
2280
2280
2281 def magic_Pprint(self, parameter_s=''):
2281 def magic_Pprint(self, parameter_s=''):
2282 """Toggle pretty printing on/off."""
2282 """Toggle pretty printing on/off."""
2283
2283
2284 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2284 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2285 print 'Pretty printing has been turned', \
2285 print 'Pretty printing has been turned', \
2286 ['OFF','ON'][self.shell.rc.pprint]
2286 ['OFF','ON'][self.shell.rc.pprint]
2287
2287
2288 def magic_exit(self, parameter_s=''):
2288 def magic_exit(self, parameter_s=''):
2289 """Exit IPython, confirming if configured to do so.
2289 """Exit IPython, confirming if configured to do so.
2290
2290
2291 You can configure whether IPython asks for confirmation upon exit by
2291 You can configure whether IPython asks for confirmation upon exit by
2292 setting the confirm_exit flag in the ipythonrc file."""
2292 setting the confirm_exit flag in the ipythonrc file."""
2293
2293
2294 self.shell.exit()
2294 self.shell.exit()
2295
2295
2296 def magic_quit(self, parameter_s=''):
2296 def magic_quit(self, parameter_s=''):
2297 """Exit IPython, confirming if configured to do so (like %exit)"""
2297 """Exit IPython, confirming if configured to do so (like %exit)"""
2298
2298
2299 self.shell.exit()
2299 self.shell.exit()
2300
2300
2301 def magic_Exit(self, parameter_s=''):
2301 def magic_Exit(self, parameter_s=''):
2302 """Exit IPython without confirmation."""
2302 """Exit IPython without confirmation."""
2303
2303
2304 self.shell.exit_now = True
2304 self.shell.exit_now = True
2305
2305
2306 def magic_Quit(self, parameter_s=''):
2306 def magic_Quit(self, parameter_s=''):
2307 """Exit IPython without confirmation (like %Exit)."""
2307 """Exit IPython without confirmation (like %Exit)."""
2308
2308
2309 self.shell.exit_now = True
2309 self.shell.exit_now = True
2310
2310
2311 #......................................................................
2311 #......................................................................
2312 # Functions to implement unix shell-type things
2312 # Functions to implement unix shell-type things
2313
2313
2314 def magic_alias(self, parameter_s = ''):
2314 def magic_alias(self, parameter_s = ''):
2315 """Define an alias for a system command.
2315 """Define an alias for a system command.
2316
2316
2317 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2317 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2318
2318
2319 Then, typing 'alias_name params' will execute the system command 'cmd
2319 Then, typing 'alias_name params' will execute the system command 'cmd
2320 params' (from your underlying operating system).
2320 params' (from your underlying operating system).
2321
2321
2322 Aliases have lower precedence than magic functions and Python normal
2322 Aliases have lower precedence than magic functions and Python normal
2323 variables, so if 'foo' is both a Python variable and an alias, the
2323 variables, so if 'foo' is both a Python variable and an alias, the
2324 alias can not be executed until 'del foo' removes the Python variable.
2324 alias can not be executed until 'del foo' removes the Python variable.
2325
2325
2326 You can use the %l specifier in an alias definition to represent the
2326 You can use the %l specifier in an alias definition to represent the
2327 whole line when the alias is called. For example:
2327 whole line when the alias is called. For example:
2328
2328
2329 In [2]: alias all echo "Input in brackets: <%l>"\\
2329 In [2]: alias all echo "Input in brackets: <%l>"\\
2330 In [3]: all hello world\\
2330 In [3]: all hello world\\
2331 Input in brackets: <hello world>
2331 Input in brackets: <hello world>
2332
2332
2333 You can also define aliases with parameters using %s specifiers (one
2333 You can also define aliases with parameters using %s specifiers (one
2334 per parameter):
2334 per parameter):
2335
2335
2336 In [1]: alias parts echo first %s second %s\\
2336 In [1]: alias parts echo first %s second %s\\
2337 In [2]: %parts A B\\
2337 In [2]: %parts A B\\
2338 first A second B\\
2338 first A second B\\
2339 In [3]: %parts A\\
2339 In [3]: %parts A\\
2340 Incorrect number of arguments: 2 expected.\\
2340 Incorrect number of arguments: 2 expected.\\
2341 parts is an alias to: 'echo first %s second %s'
2341 parts is an alias to: 'echo first %s second %s'
2342
2342
2343 Note that %l and %s are mutually exclusive. You can only use one or
2343 Note that %l and %s are mutually exclusive. You can only use one or
2344 the other in your aliases.
2344 the other in your aliases.
2345
2345
2346 Aliases expand Python variables just like system calls using ! or !!
2346 Aliases expand Python variables just like system calls using ! or !!
2347 do: all expressions prefixed with '$' get expanded. For details of
2347 do: all expressions prefixed with '$' get expanded. For details of
2348 the semantic rules, see PEP-215:
2348 the semantic rules, see PEP-215:
2349 http://www.python.org/peps/pep-0215.html. This is the library used by
2349 http://www.python.org/peps/pep-0215.html. This is the library used by
2350 IPython for variable expansion. If you want to access a true shell
2350 IPython for variable expansion. If you want to access a true shell
2351 variable, an extra $ is necessary to prevent its expansion by IPython:
2351 variable, an extra $ is necessary to prevent its expansion by IPython:
2352
2352
2353 In [6]: alias show echo\\
2353 In [6]: alias show echo\\
2354 In [7]: PATH='A Python string'\\
2354 In [7]: PATH='A Python string'\\
2355 In [8]: show $PATH\\
2355 In [8]: show $PATH\\
2356 A Python string\\
2356 A Python string\\
2357 In [9]: show $$PATH\\
2357 In [9]: show $$PATH\\
2358 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2358 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2359
2359
2360 You can use the alias facility to acess all of $PATH. See the %rehash
2360 You can use the alias facility to acess all of $PATH. See the %rehash
2361 and %rehashx functions, which automatically create aliases for the
2361 and %rehashx functions, which automatically create aliases for the
2362 contents of your $PATH.
2362 contents of your $PATH.
2363
2363
2364 If called with no parameters, %alias prints the current alias table."""
2364 If called with no parameters, %alias prints the current alias table."""
2365
2365
2366 par = parameter_s.strip()
2366 par = parameter_s.strip()
2367 if not par:
2367 if not par:
2368 if self.shell.rc.automagic:
2368 if self.shell.rc.automagic:
2369 prechar = ''
2369 prechar = ''
2370 else:
2370 else:
2371 prechar = self.shell.ESC_MAGIC
2371 prechar = self.shell.ESC_MAGIC
2372 #print 'Alias\t\tSystem Command\n'+'-'*30
2372 #print 'Alias\t\tSystem Command\n'+'-'*30
2373 atab = self.shell.alias_table
2373 atab = self.shell.alias_table
2374 aliases = atab.keys()
2374 aliases = atab.keys()
2375 aliases.sort()
2375 aliases.sort()
2376 res = []
2376 res = []
2377 for alias in aliases:
2377 for alias in aliases:
2378 res.append((alias, atab[alias][1]))
2378 res.append((alias, atab[alias][1]))
2379 print "Total number of aliases:",len(aliases)
2379 print "Total number of aliases:",len(aliases)
2380 return res
2380 return res
2381 try:
2381 try:
2382 alias,cmd = par.split(None,1)
2382 alias,cmd = par.split(None,1)
2383 except:
2383 except:
2384 print OInspect.getdoc(self.magic_alias)
2384 print OInspect.getdoc(self.magic_alias)
2385 else:
2385 else:
2386 nargs = cmd.count('%s')
2386 nargs = cmd.count('%s')
2387 if nargs>0 and cmd.find('%l')>=0:
2387 if nargs>0 and cmd.find('%l')>=0:
2388 error('The %s and %l specifiers are mutually exclusive '
2388 error('The %s and %l specifiers are mutually exclusive '
2389 'in alias definitions.')
2389 'in alias definitions.')
2390 else: # all looks OK
2390 else: # all looks OK
2391 self.shell.alias_table[alias] = (nargs,cmd)
2391 self.shell.alias_table[alias] = (nargs,cmd)
2392 self.shell.alias_table_validate(verbose=0)
2392 self.shell.alias_table_validate(verbose=0)
2393 # end magic_alias
2393 # end magic_alias
2394
2394
2395 def magic_unalias(self, parameter_s = ''):
2395 def magic_unalias(self, parameter_s = ''):
2396 """Remove an alias"""
2396 """Remove an alias"""
2397
2397
2398 aname = parameter_s.strip()
2398 aname = parameter_s.strip()
2399 if aname in self.shell.alias_table:
2399 if aname in self.shell.alias_table:
2400 del self.shell.alias_table[aname]
2400 del self.shell.alias_table[aname]
2401
2401
2402 def magic_rehash(self, parameter_s = ''):
2402 def magic_rehash(self, parameter_s = ''):
2403 """Update the alias table with all entries in $PATH.
2403 """Update the alias table with all entries in $PATH.
2404
2404
2405 This version does no checks on execute permissions or whether the
2405 This version does no checks on execute permissions or whether the
2406 contents of $PATH are truly files (instead of directories or something
2406 contents of $PATH are truly files (instead of directories or something
2407 else). For such a safer (but slower) version, use %rehashx."""
2407 else). For such a safer (but slower) version, use %rehashx."""
2408
2408
2409 # This function (and rehashx) manipulate the alias_table directly
2409 # This function (and rehashx) manipulate the alias_table directly
2410 # rather than calling magic_alias, for speed reasons. A rehash on a
2410 # rather than calling magic_alias, for speed reasons. A rehash on a
2411 # typical Linux box involves several thousand entries, so efficiency
2411 # typical Linux box involves several thousand entries, so efficiency
2412 # here is a top concern.
2412 # here is a top concern.
2413
2413
2414 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2414 path = filter(os.path.isdir,os.environ['PATH'].split(os.pathsep))
2415 alias_table = self.shell.alias_table
2415 alias_table = self.shell.alias_table
2416 for pdir in path:
2416 for pdir in path:
2417 for ff in os.listdir(pdir):
2417 for ff in os.listdir(pdir):
2418 # each entry in the alias table must be (N,name), where
2418 # each entry in the alias table must be (N,name), where
2419 # N is the number of positional arguments of the alias.
2419 # N is the number of positional arguments of the alias.
2420 alias_table[ff] = (0,ff)
2420 alias_table[ff] = (0,ff)
2421 # Make sure the alias table doesn't contain keywords or builtins
2421 # Make sure the alias table doesn't contain keywords or builtins
2422 self.shell.alias_table_validate()
2422 self.shell.alias_table_validate()
2423 # Call again init_auto_alias() so we get 'rm -i' and other modified
2423 # Call again init_auto_alias() so we get 'rm -i' and other modified
2424 # aliases since %rehash will probably clobber them
2424 # aliases since %rehash will probably clobber them
2425 self.shell.init_auto_alias()
2425 self.shell.init_auto_alias()
2426
2426
2427 def magic_rehashx(self, parameter_s = ''):
2427 def magic_rehashx(self, parameter_s = ''):
2428 """Update the alias table with all executable files in $PATH.
2428 """Update the alias table with all executable files in $PATH.
2429
2429
2430 This version explicitly checks that every entry in $PATH is a file
2430 This version explicitly checks that every entry in $PATH is a file
2431 with execute access (os.X_OK), so it is much slower than %rehash.
2431 with execute access (os.X_OK), so it is much slower than %rehash.
2432
2432
2433 Under Windows, it checks executability as a match agains a
2433 Under Windows, it checks executability as a match agains a
2434 '|'-separated string of extensions, stored in the IPython config
2434 '|'-separated string of extensions, stored in the IPython config
2435 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2435 variable win_exec_ext. This defaults to 'exe|com|bat'. """
2436
2436
2437 path = [os.path.abspath(os.path.expanduser(p)) for p in
2437 path = [os.path.abspath(os.path.expanduser(p)) for p in
2438 os.environ['PATH'].split(os.pathsep)]
2438 os.environ['PATH'].split(os.pathsep)]
2439 path = filter(os.path.isdir,path)
2439 path = filter(os.path.isdir,path)
2440
2440
2441 alias_table = self.shell.alias_table
2441 alias_table = self.shell.alias_table
2442 syscmdlist = []
2442 syscmdlist = []
2443 if os.name == 'posix':
2443 if os.name == 'posix':
2444 isexec = lambda fname:os.path.isfile(fname) and \
2444 isexec = lambda fname:os.path.isfile(fname) and \
2445 os.access(fname,os.X_OK)
2445 os.access(fname,os.X_OK)
2446 else:
2446 else:
2447
2447
2448 try:
2448 try:
2449 winext = os.environ['pathext'].replace(';','|').replace('.','')
2449 winext = os.environ['pathext'].replace(';','|').replace('.','')
2450 except KeyError:
2450 except KeyError:
2451 winext = 'exe|com|bat'
2451 winext = 'exe|com|bat'
2452
2452
2453 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2453 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2454 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2454 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2455 savedir = os.getcwd()
2455 savedir = os.getcwd()
2456 try:
2456 try:
2457 # write the whole loop for posix/Windows so we don't have an if in
2457 # write the whole loop for posix/Windows so we don't have an if in
2458 # the innermost part
2458 # the innermost part
2459 if os.name == 'posix':
2459 if os.name == 'posix':
2460 for pdir in path:
2460 for pdir in path:
2461 os.chdir(pdir)
2461 os.chdir(pdir)
2462 for ff in os.listdir(pdir):
2462 for ff in os.listdir(pdir):
2463 if isexec(ff) and ff not in self.shell.no_alias:
2463 if isexec(ff) and ff not in self.shell.no_alias:
2464 # each entry in the alias table must be (N,name),
2464 # each entry in the alias table must be (N,name),
2465 # where N is the number of positional arguments of the
2465 # where N is the number of positional arguments of the
2466 # alias.
2466 # alias.
2467 alias_table[ff] = (0,ff)
2467 alias_table[ff] = (0,ff)
2468 syscmdlist.append(ff)
2468 syscmdlist.append(ff)
2469 else:
2469 else:
2470 for pdir in path:
2470 for pdir in path:
2471 os.chdir(pdir)
2471 os.chdir(pdir)
2472 for ff in os.listdir(pdir):
2472 for ff in os.listdir(pdir):
2473 if isexec(ff) and os.path.splitext(ff)[0] not in self.shell.no_alias:
2473 if isexec(ff) and os.path.splitext(ff)[0] not in self.shell.no_alias:
2474 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2474 alias_table[execre.sub(r'\1',ff)] = (0,ff)
2475 syscmdlist.append(ff)
2475 syscmdlist.append(ff)
2476 # Make sure the alias table doesn't contain keywords or builtins
2476 # Make sure the alias table doesn't contain keywords or builtins
2477 self.shell.alias_table_validate()
2477 self.shell.alias_table_validate()
2478 # Call again init_auto_alias() so we get 'rm -i' and other
2478 # Call again init_auto_alias() so we get 'rm -i' and other
2479 # modified aliases since %rehashx will probably clobber them
2479 # modified aliases since %rehashx will probably clobber them
2480 self.shell.init_auto_alias()
2480 self.shell.init_auto_alias()
2481 db = self.getapi().db
2481 db = self.getapi().db
2482 db['syscmdlist'] = syscmdlist
2482 db['syscmdlist'] = syscmdlist
2483 finally:
2483 finally:
2484 os.chdir(savedir)
2484 os.chdir(savedir)
2485
2485
2486 def magic_pwd(self, parameter_s = ''):
2486 def magic_pwd(self, parameter_s = ''):
2487 """Return the current working directory path."""
2487 """Return the current working directory path."""
2488 return os.getcwd()
2488 return os.getcwd()
2489
2489
2490 def magic_cd(self, parameter_s=''):
2490 def magic_cd(self, parameter_s=''):
2491 """Change the current working directory.
2491 """Change the current working directory.
2492
2492
2493 This command automatically maintains an internal list of directories
2493 This command automatically maintains an internal list of directories
2494 you visit during your IPython session, in the variable _dh. The
2494 you visit during your IPython session, in the variable _dh. The
2495 command %dhist shows this history nicely formatted.
2495 command %dhist shows this history nicely formatted.
2496
2496
2497 Usage:
2497 Usage:
2498
2498
2499 cd 'dir': changes to directory 'dir'.
2499 cd 'dir': changes to directory 'dir'.
2500
2500
2501 cd -: changes to the last visited directory.
2501 cd -: changes to the last visited directory.
2502
2502
2503 cd -<n>: changes to the n-th directory in the directory history.
2503 cd -<n>: changes to the n-th directory in the directory history.
2504
2504
2505 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2505 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2506 (note: cd <bookmark_name> is enough if there is no
2506 (note: cd <bookmark_name> is enough if there is no
2507 directory <bookmark_name>, but a bookmark with the name exists.)
2507 directory <bookmark_name>, but a bookmark with the name exists.)
2508
2508
2509 Options:
2509 Options:
2510
2510
2511 -q: quiet. Do not print the working directory after the cd command is
2511 -q: quiet. Do not print the working directory after the cd command is
2512 executed. By default IPython's cd command does print this directory,
2512 executed. By default IPython's cd command does print this directory,
2513 since the default prompts do not display path information.
2513 since the default prompts do not display path information.
2514
2514
2515 Note that !cd doesn't work for this purpose because the shell where
2515 Note that !cd doesn't work for this purpose because the shell where
2516 !command runs is immediately discarded after executing 'command'."""
2516 !command runs is immediately discarded after executing 'command'."""
2517
2517
2518 parameter_s = parameter_s.strip()
2518 parameter_s = parameter_s.strip()
2519 #bkms = self.shell.persist.get("bookmarks",{})
2519 #bkms = self.shell.persist.get("bookmarks",{})
2520
2520
2521 numcd = re.match(r'(-)(\d+)$',parameter_s)
2521 numcd = re.match(r'(-)(\d+)$',parameter_s)
2522 # jump in directory history by number
2522 # jump in directory history by number
2523 if numcd:
2523 if numcd:
2524 nn = int(numcd.group(2))
2524 nn = int(numcd.group(2))
2525 try:
2525 try:
2526 ps = self.shell.user_ns['_dh'][nn]
2526 ps = self.shell.user_ns['_dh'][nn]
2527 except IndexError:
2527 except IndexError:
2528 print 'The requested directory does not exist in history.'
2528 print 'The requested directory does not exist in history.'
2529 return
2529 return
2530 else:
2530 else:
2531 opts = {}
2531 opts = {}
2532 else:
2532 else:
2533 #turn all non-space-escaping backslashes to slashes,
2533 #turn all non-space-escaping backslashes to slashes,
2534 # for c:\windows\directory\names\
2534 # for c:\windows\directory\names\
2535 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2535 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2536 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2536 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2537 # jump to previous
2537 # jump to previous
2538 if ps == '-':
2538 if ps == '-':
2539 try:
2539 try:
2540 ps = self.shell.user_ns['_dh'][-2]
2540 ps = self.shell.user_ns['_dh'][-2]
2541 except IndexError:
2541 except IndexError:
2542 print 'No previous directory to change to.'
2542 print 'No previous directory to change to.'
2543 return
2543 return
2544 # jump to bookmark if needed
2544 # jump to bookmark if needed
2545 else:
2545 else:
2546 if not os.path.isdir(ps) or opts.has_key('b'):
2546 if not os.path.isdir(ps) or opts.has_key('b'):
2547 bkms = self.db.get('bookmarks', {})
2547 bkms = self.db.get('bookmarks', {})
2548
2548
2549 if bkms.has_key(ps):
2549 if bkms.has_key(ps):
2550 target = bkms[ps]
2550 target = bkms[ps]
2551 print '(bookmark:%s) -> %s' % (ps,target)
2551 print '(bookmark:%s) -> %s' % (ps,target)
2552 ps = target
2552 ps = target
2553 else:
2553 else:
2554 if opts.has_key('b'):
2554 if opts.has_key('b'):
2555 error("Bookmark '%s' not found. "
2555 error("Bookmark '%s' not found. "
2556 "Use '%%bookmark -l' to see your bookmarks." % ps)
2556 "Use '%%bookmark -l' to see your bookmarks." % ps)
2557 return
2557 return
2558
2558
2559 # at this point ps should point to the target dir
2559 # at this point ps should point to the target dir
2560 if ps:
2560 if ps:
2561 try:
2561 try:
2562 os.chdir(os.path.expanduser(ps))
2562 os.chdir(os.path.expanduser(ps))
2563 ttitle = ("IPy:" + (
2563 ttitle = ("IPy:" + (
2564 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2564 os.getcwd() == '/' and '/' or os.path.basename(os.getcwd())))
2565 platutils.set_term_title(ttitle)
2565 platutils.set_term_title(ttitle)
2566 except OSError:
2566 except OSError:
2567 print sys.exc_info()[1]
2567 print sys.exc_info()[1]
2568 else:
2568 else:
2569 self.shell.user_ns['_dh'].append(os.getcwd())
2569 self.shell.user_ns['_dh'].append(os.getcwd())
2570 else:
2570 else:
2571 os.chdir(self.shell.home_dir)
2571 os.chdir(self.shell.home_dir)
2572 platutils.set_term_title("IPy:~")
2572 platutils.set_term_title("IPy:~")
2573 self.shell.user_ns['_dh'].append(os.getcwd())
2573 self.shell.user_ns['_dh'].append(os.getcwd())
2574 if not 'q' in opts:
2574 if not 'q' in opts:
2575 print self.shell.user_ns['_dh'][-1]
2575 print self.shell.user_ns['_dh'][-1]
2576
2576
2577 def magic_dhist(self, parameter_s=''):
2577 def magic_dhist(self, parameter_s=''):
2578 """Print your history of visited directories.
2578 """Print your history of visited directories.
2579
2579
2580 %dhist -> print full history\\
2580 %dhist -> print full history\\
2581 %dhist n -> print last n entries only\\
2581 %dhist n -> print last n entries only\\
2582 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2582 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2583
2583
2584 This history is automatically maintained by the %cd command, and
2584 This history is automatically maintained by the %cd command, and
2585 always available as the global list variable _dh. You can use %cd -<n>
2585 always available as the global list variable _dh. You can use %cd -<n>
2586 to go to directory number <n>."""
2586 to go to directory number <n>."""
2587
2587
2588 dh = self.shell.user_ns['_dh']
2588 dh = self.shell.user_ns['_dh']
2589 if parameter_s:
2589 if parameter_s:
2590 try:
2590 try:
2591 args = map(int,parameter_s.split())
2591 args = map(int,parameter_s.split())
2592 except:
2592 except:
2593 self.arg_err(Magic.magic_dhist)
2593 self.arg_err(Magic.magic_dhist)
2594 return
2594 return
2595 if len(args) == 1:
2595 if len(args) == 1:
2596 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2596 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2597 elif len(args) == 2:
2597 elif len(args) == 2:
2598 ini,fin = args
2598 ini,fin = args
2599 else:
2599 else:
2600 self.arg_err(Magic.magic_dhist)
2600 self.arg_err(Magic.magic_dhist)
2601 return
2601 return
2602 else:
2602 else:
2603 ini,fin = 0,len(dh)
2603 ini,fin = 0,len(dh)
2604 nlprint(dh,
2604 nlprint(dh,
2605 header = 'Directory history (kept in _dh)',
2605 header = 'Directory history (kept in _dh)',
2606 start=ini,stop=fin)
2606 start=ini,stop=fin)
2607
2607
2608 def magic_env(self, parameter_s=''):
2608 def magic_env(self, parameter_s=''):
2609 """List environment variables."""
2609 """List environment variables."""
2610
2610
2611 return os.environ.data
2611 return os.environ.data
2612
2612
2613 def magic_pushd(self, parameter_s=''):
2613 def magic_pushd(self, parameter_s=''):
2614 """Place the current dir on stack and change directory.
2614 """Place the current dir on stack and change directory.
2615
2615
2616 Usage:\\
2616 Usage:\\
2617 %pushd ['dirname']
2617 %pushd ['dirname']
2618
2618
2619 %pushd with no arguments does a %pushd to your home directory.
2619 %pushd with no arguments does a %pushd to your home directory.
2620 """
2620 """
2621 if parameter_s == '': parameter_s = '~'
2621 if parameter_s == '': parameter_s = '~'
2622 dir_s = self.shell.dir_stack
2622 dir_s = self.shell.dir_stack
2623 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2623 if len(dir_s)>0 and os.path.expanduser(parameter_s) != \
2624 os.path.expanduser(self.shell.dir_stack[0]):
2624 os.path.expanduser(self.shell.dir_stack[0]):
2625 try:
2625 try:
2626 self.magic_cd(parameter_s)
2626 self.magic_cd(parameter_s)
2627 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2627 dir_s.insert(0,os.getcwd().replace(self.home_dir,'~'))
2628 self.magic_dirs()
2628 self.magic_dirs()
2629 except:
2629 except:
2630 print 'Invalid directory'
2630 print 'Invalid directory'
2631 else:
2631 else:
2632 print 'You are already there!'
2632 print 'You are already there!'
2633
2633
2634 def magic_popd(self, parameter_s=''):
2634 def magic_popd(self, parameter_s=''):
2635 """Change to directory popped off the top of the stack.
2635 """Change to directory popped off the top of the stack.
2636 """
2636 """
2637 if len (self.shell.dir_stack) > 1:
2637 if len (self.shell.dir_stack) > 1:
2638 self.shell.dir_stack.pop(0)
2638 self.shell.dir_stack.pop(0)
2639 self.magic_cd(self.shell.dir_stack[0])
2639 self.magic_cd(self.shell.dir_stack[0])
2640 print self.shell.dir_stack[0]
2640 print self.shell.dir_stack[0]
2641 else:
2641 else:
2642 print "You can't remove the starting directory from the stack:",\
2642 print "You can't remove the starting directory from the stack:",\
2643 self.shell.dir_stack
2643 self.shell.dir_stack
2644
2644
2645 def magic_dirs(self, parameter_s=''):
2645 def magic_dirs(self, parameter_s=''):
2646 """Return the current directory stack."""
2646 """Return the current directory stack."""
2647
2647
2648 return self.shell.dir_stack[:]
2648 return self.shell.dir_stack[:]
2649
2649
2650 def magic_sc(self, parameter_s=''):
2650 def magic_sc(self, parameter_s=''):
2651 """Shell capture - execute a shell command and capture its output.
2651 """Shell capture - execute a shell command and capture its output.
2652
2652
2653 DEPRECATED. Suboptimal, retained for backwards compatibility.
2653 DEPRECATED. Suboptimal, retained for backwards compatibility.
2654
2654
2655 You should use the form 'var = !command' instead. Example:
2655 You should use the form 'var = !command' instead. Example:
2656
2656
2657 "%sc -l myfiles = ls ~" should now be written as
2657 "%sc -l myfiles = ls ~" should now be written as
2658
2658
2659 "myfiles = !ls ~"
2659 "myfiles = !ls ~"
2660
2660
2661 myfiles.s, myfiles.l and myfiles.n still apply as documented
2661 myfiles.s, myfiles.l and myfiles.n still apply as documented
2662 below.
2662 below.
2663
2663
2664 --
2664 --
2665 %sc [options] varname=command
2665 %sc [options] varname=command
2666
2666
2667 IPython will run the given command using commands.getoutput(), and
2667 IPython will run the given command using commands.getoutput(), and
2668 will then update the user's interactive namespace with a variable
2668 will then update the user's interactive namespace with a variable
2669 called varname, containing the value of the call. Your command can
2669 called varname, containing the value of the call. Your command can
2670 contain shell wildcards, pipes, etc.
2670 contain shell wildcards, pipes, etc.
2671
2671
2672 The '=' sign in the syntax is mandatory, and the variable name you
2672 The '=' sign in the syntax is mandatory, and the variable name you
2673 supply must follow Python's standard conventions for valid names.
2673 supply must follow Python's standard conventions for valid names.
2674
2674
2675 (A special format without variable name exists for internal use)
2675 (A special format without variable name exists for internal use)
2676
2676
2677 Options:
2677 Options:
2678
2678
2679 -l: list output. Split the output on newlines into a list before
2679 -l: list output. Split the output on newlines into a list before
2680 assigning it to the given variable. By default the output is stored
2680 assigning it to the given variable. By default the output is stored
2681 as a single string.
2681 as a single string.
2682
2682
2683 -v: verbose. Print the contents of the variable.
2683 -v: verbose. Print the contents of the variable.
2684
2684
2685 In most cases you should not need to split as a list, because the
2685 In most cases you should not need to split as a list, because the
2686 returned value is a special type of string which can automatically
2686 returned value is a special type of string which can automatically
2687 provide its contents either as a list (split on newlines) or as a
2687 provide its contents either as a list (split on newlines) or as a
2688 space-separated string. These are convenient, respectively, either
2688 space-separated string. These are convenient, respectively, either
2689 for sequential processing or to be passed to a shell command.
2689 for sequential processing or to be passed to a shell command.
2690
2690
2691 For example:
2691 For example:
2692
2692
2693 # Capture into variable a
2693 # Capture into variable a
2694 In [9]: sc a=ls *py
2694 In [9]: sc a=ls *py
2695
2695
2696 # a is a string with embedded newlines
2696 # a is a string with embedded newlines
2697 In [10]: a
2697 In [10]: a
2698 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2698 Out[10]: 'setup.py\nwin32_manual_post_install.py'
2699
2699
2700 # which can be seen as a list:
2700 # which can be seen as a list:
2701 In [11]: a.l
2701 In [11]: a.l
2702 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2702 Out[11]: ['setup.py', 'win32_manual_post_install.py']
2703
2703
2704 # or as a whitespace-separated string:
2704 # or as a whitespace-separated string:
2705 In [12]: a.s
2705 In [12]: a.s
2706 Out[12]: 'setup.py win32_manual_post_install.py'
2706 Out[12]: 'setup.py win32_manual_post_install.py'
2707
2707
2708 # a.s is useful to pass as a single command line:
2708 # a.s is useful to pass as a single command line:
2709 In [13]: !wc -l $a.s
2709 In [13]: !wc -l $a.s
2710 146 setup.py
2710 146 setup.py
2711 130 win32_manual_post_install.py
2711 130 win32_manual_post_install.py
2712 276 total
2712 276 total
2713
2713
2714 # while the list form is useful to loop over:
2714 # while the list form is useful to loop over:
2715 In [14]: for f in a.l:
2715 In [14]: for f in a.l:
2716 ....: !wc -l $f
2716 ....: !wc -l $f
2717 ....:
2717 ....:
2718 146 setup.py
2718 146 setup.py
2719 130 win32_manual_post_install.py
2719 130 win32_manual_post_install.py
2720
2720
2721 Similiarly, the lists returned by the -l option are also special, in
2721 Similiarly, the lists returned by the -l option are also special, in
2722 the sense that you can equally invoke the .s attribute on them to
2722 the sense that you can equally invoke the .s attribute on them to
2723 automatically get a whitespace-separated string from their contents:
2723 automatically get a whitespace-separated string from their contents:
2724
2724
2725 In [1]: sc -l b=ls *py
2725 In [1]: sc -l b=ls *py
2726
2726
2727 In [2]: b
2727 In [2]: b
2728 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2728 Out[2]: ['setup.py', 'win32_manual_post_install.py']
2729
2729
2730 In [3]: b.s
2730 In [3]: b.s
2731 Out[3]: 'setup.py win32_manual_post_install.py'
2731 Out[3]: 'setup.py win32_manual_post_install.py'
2732
2732
2733 In summary, both the lists and strings used for ouptut capture have
2733 In summary, both the lists and strings used for ouptut capture have
2734 the following special attributes:
2734 the following special attributes:
2735
2735
2736 .l (or .list) : value as list.
2736 .l (or .list) : value as list.
2737 .n (or .nlstr): value as newline-separated string.
2737 .n (or .nlstr): value as newline-separated string.
2738 .s (or .spstr): value as space-separated string.
2738 .s (or .spstr): value as space-separated string.
2739 """
2739 """
2740
2740
2741 opts,args = self.parse_options(parameter_s,'lv')
2741 opts,args = self.parse_options(parameter_s,'lv')
2742 # Try to get a variable name and command to run
2742 # Try to get a variable name and command to run
2743 try:
2743 try:
2744 # the variable name must be obtained from the parse_options
2744 # the variable name must be obtained from the parse_options
2745 # output, which uses shlex.split to strip options out.
2745 # output, which uses shlex.split to strip options out.
2746 var,_ = args.split('=',1)
2746 var,_ = args.split('=',1)
2747 var = var.strip()
2747 var = var.strip()
2748 # But the the command has to be extracted from the original input
2748 # But the the command has to be extracted from the original input
2749 # parameter_s, not on what parse_options returns, to avoid the
2749 # parameter_s, not on what parse_options returns, to avoid the
2750 # quote stripping which shlex.split performs on it.
2750 # quote stripping which shlex.split performs on it.
2751 _,cmd = parameter_s.split('=',1)
2751 _,cmd = parameter_s.split('=',1)
2752 except ValueError:
2752 except ValueError:
2753 var,cmd = '',''
2753 var,cmd = '',''
2754 # If all looks ok, proceed
2754 # If all looks ok, proceed
2755 out,err = self.shell.getoutputerror(cmd)
2755 out,err = self.shell.getoutputerror(cmd)
2756 if err:
2756 if err:
2757 print >> Term.cerr,err
2757 print >> Term.cerr,err
2758 if opts.has_key('l'):
2758 if opts.has_key('l'):
2759 out = SList(out.split('\n'))
2759 out = SList(out.split('\n'))
2760 else:
2760 else:
2761 out = LSString(out)
2761 out = LSString(out)
2762 if opts.has_key('v'):
2762 if opts.has_key('v'):
2763 print '%s ==\n%s' % (var,pformat(out))
2763 print '%s ==\n%s' % (var,pformat(out))
2764 if var:
2764 if var:
2765 self.shell.user_ns.update({var:out})
2765 self.shell.user_ns.update({var:out})
2766 else:
2766 else:
2767 return out
2767 return out
2768
2768
2769 def magic_sx(self, parameter_s=''):
2769 def magic_sx(self, parameter_s=''):
2770 """Shell execute - run a shell command and capture its output.
2770 """Shell execute - run a shell command and capture its output.
2771
2771
2772 %sx command
2772 %sx command
2773
2773
2774 IPython will run the given command using commands.getoutput(), and
2774 IPython will run the given command using commands.getoutput(), and
2775 return the result formatted as a list (split on '\\n'). Since the
2775 return the result formatted as a list (split on '\\n'). Since the
2776 output is _returned_, it will be stored in ipython's regular output
2776 output is _returned_, it will be stored in ipython's regular output
2777 cache Out[N] and in the '_N' automatic variables.
2777 cache Out[N] and in the '_N' automatic variables.
2778
2778
2779 Notes:
2779 Notes:
2780
2780
2781 1) If an input line begins with '!!', then %sx is automatically
2781 1) If an input line begins with '!!', then %sx is automatically
2782 invoked. That is, while:
2782 invoked. That is, while:
2783 !ls
2783 !ls
2784 causes ipython to simply issue system('ls'), typing
2784 causes ipython to simply issue system('ls'), typing
2785 !!ls
2785 !!ls
2786 is a shorthand equivalent to:
2786 is a shorthand equivalent to:
2787 %sx ls
2787 %sx ls
2788
2788
2789 2) %sx differs from %sc in that %sx automatically splits into a list,
2789 2) %sx differs from %sc in that %sx automatically splits into a list,
2790 like '%sc -l'. The reason for this is to make it as easy as possible
2790 like '%sc -l'. The reason for this is to make it as easy as possible
2791 to process line-oriented shell output via further python commands.
2791 to process line-oriented shell output via further python commands.
2792 %sc is meant to provide much finer control, but requires more
2792 %sc is meant to provide much finer control, but requires more
2793 typing.
2793 typing.
2794
2794
2795 3) Just like %sc -l, this is a list with special attributes:
2795 3) Just like %sc -l, this is a list with special attributes:
2796
2796
2797 .l (or .list) : value as list.
2797 .l (or .list) : value as list.
2798 .n (or .nlstr): value as newline-separated string.
2798 .n (or .nlstr): value as newline-separated string.
2799 .s (or .spstr): value as whitespace-separated string.
2799 .s (or .spstr): value as whitespace-separated string.
2800
2800
2801 This is very useful when trying to use such lists as arguments to
2801 This is very useful when trying to use such lists as arguments to
2802 system commands."""
2802 system commands."""
2803
2803
2804 if parameter_s:
2804 if parameter_s:
2805 out,err = self.shell.getoutputerror(parameter_s)
2805 out,err = self.shell.getoutputerror(parameter_s)
2806 if err:
2806 if err:
2807 print >> Term.cerr,err
2807 print >> Term.cerr,err
2808 return SList(out.split('\n'))
2808 return SList(out.split('\n'))
2809
2809
2810 def magic_bg(self, parameter_s=''):
2810 def magic_bg(self, parameter_s=''):
2811 """Run a job in the background, in a separate thread.
2811 """Run a job in the background, in a separate thread.
2812
2812
2813 For example,
2813 For example,
2814
2814
2815 %bg myfunc(x,y,z=1)
2815 %bg myfunc(x,y,z=1)
2816
2816
2817 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2817 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
2818 execution starts, a message will be printed indicating the job
2818 execution starts, a message will be printed indicating the job
2819 number. If your job number is 5, you can use
2819 number. If your job number is 5, you can use
2820
2820
2821 myvar = jobs.result(5) or myvar = jobs[5].result
2821 myvar = jobs.result(5) or myvar = jobs[5].result
2822
2822
2823 to assign this result to variable 'myvar'.
2823 to assign this result to variable 'myvar'.
2824
2824
2825 IPython has a job manager, accessible via the 'jobs' object. You can
2825 IPython has a job manager, accessible via the 'jobs' object. You can
2826 type jobs? to get more information about it, and use jobs.<TAB> to see
2826 type jobs? to get more information about it, and use jobs.<TAB> to see
2827 its attributes. All attributes not starting with an underscore are
2827 its attributes. All attributes not starting with an underscore are
2828 meant for public use.
2828 meant for public use.
2829
2829
2830 In particular, look at the jobs.new() method, which is used to create
2830 In particular, look at the jobs.new() method, which is used to create
2831 new jobs. This magic %bg function is just a convenience wrapper
2831 new jobs. This magic %bg function is just a convenience wrapper
2832 around jobs.new(), for expression-based jobs. If you want to create a
2832 around jobs.new(), for expression-based jobs. If you want to create a
2833 new job with an explicit function object and arguments, you must call
2833 new job with an explicit function object and arguments, you must call
2834 jobs.new() directly.
2834 jobs.new() directly.
2835
2835
2836 The jobs.new docstring also describes in detail several important
2836 The jobs.new docstring also describes in detail several important
2837 caveats associated with a thread-based model for background job
2837 caveats associated with a thread-based model for background job
2838 execution. Type jobs.new? for details.
2838 execution. Type jobs.new? for details.
2839
2839
2840 You can check the status of all jobs with jobs.status().
2840 You can check the status of all jobs with jobs.status().
2841
2841
2842 The jobs variable is set by IPython into the Python builtin namespace.
2842 The jobs variable is set by IPython into the Python builtin namespace.
2843 If you ever declare a variable named 'jobs', you will shadow this
2843 If you ever declare a variable named 'jobs', you will shadow this
2844 name. You can either delete your global jobs variable to regain
2844 name. You can either delete your global jobs variable to regain
2845 access to the job manager, or make a new name and assign it manually
2845 access to the job manager, or make a new name and assign it manually
2846 to the manager (stored in IPython's namespace). For example, to
2846 to the manager (stored in IPython's namespace). For example, to
2847 assign the job manager to the Jobs name, use:
2847 assign the job manager to the Jobs name, use:
2848
2848
2849 Jobs = __builtins__.jobs"""
2849 Jobs = __builtins__.jobs"""
2850
2850
2851 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2851 self.shell.jobs.new(parameter_s,self.shell.user_ns)
2852
2852
2853
2853
2854 def magic_bookmark(self, parameter_s=''):
2854 def magic_bookmark(self, parameter_s=''):
2855 """Manage IPython's bookmark system.
2855 """Manage IPython's bookmark system.
2856
2856
2857 %bookmark <name> - set bookmark to current dir
2857 %bookmark <name> - set bookmark to current dir
2858 %bookmark <name> <dir> - set bookmark to <dir>
2858 %bookmark <name> <dir> - set bookmark to <dir>
2859 %bookmark -l - list all bookmarks
2859 %bookmark -l - list all bookmarks
2860 %bookmark -d <name> - remove bookmark
2860 %bookmark -d <name> - remove bookmark
2861 %bookmark -r - remove all bookmarks
2861 %bookmark -r - remove all bookmarks
2862
2862
2863 You can later on access a bookmarked folder with:
2863 You can later on access a bookmarked folder with:
2864 %cd -b <name>
2864 %cd -b <name>
2865 or simply '%cd <name>' if there is no directory called <name> AND
2865 or simply '%cd <name>' if there is no directory called <name> AND
2866 there is such a bookmark defined.
2866 there is such a bookmark defined.
2867
2867
2868 Your bookmarks persist through IPython sessions, but they are
2868 Your bookmarks persist through IPython sessions, but they are
2869 associated with each profile."""
2869 associated with each profile."""
2870
2870
2871 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2871 opts,args = self.parse_options(parameter_s,'drl',mode='list')
2872 if len(args) > 2:
2872 if len(args) > 2:
2873 error('You can only give at most two arguments')
2873 error('You can only give at most two arguments')
2874 return
2874 return
2875
2875
2876 bkms = self.db.get('bookmarks',{})
2876 bkms = self.db.get('bookmarks',{})
2877
2877
2878 if opts.has_key('d'):
2878 if opts.has_key('d'):
2879 try:
2879 try:
2880 todel = args[0]
2880 todel = args[0]
2881 except IndexError:
2881 except IndexError:
2882 error('You must provide a bookmark to delete')
2882 error('You must provide a bookmark to delete')
2883 else:
2883 else:
2884 try:
2884 try:
2885 del bkms[todel]
2885 del bkms[todel]
2886 except:
2886 except:
2887 error("Can't delete bookmark '%s'" % todel)
2887 error("Can't delete bookmark '%s'" % todel)
2888 elif opts.has_key('r'):
2888 elif opts.has_key('r'):
2889 bkms = {}
2889 bkms = {}
2890 elif opts.has_key('l'):
2890 elif opts.has_key('l'):
2891 bks = bkms.keys()
2891 bks = bkms.keys()
2892 bks.sort()
2892 bks.sort()
2893 if bks:
2893 if bks:
2894 size = max(map(len,bks))
2894 size = max(map(len,bks))
2895 else:
2895 else:
2896 size = 0
2896 size = 0
2897 fmt = '%-'+str(size)+'s -> %s'
2897 fmt = '%-'+str(size)+'s -> %s'
2898 print 'Current bookmarks:'
2898 print 'Current bookmarks:'
2899 for bk in bks:
2899 for bk in bks:
2900 print fmt % (bk,bkms[bk])
2900 print fmt % (bk,bkms[bk])
2901 else:
2901 else:
2902 if not args:
2902 if not args:
2903 error("You must specify the bookmark name")
2903 error("You must specify the bookmark name")
2904 elif len(args)==1:
2904 elif len(args)==1:
2905 bkms[args[0]] = os.getcwd()
2905 bkms[args[0]] = os.getcwd()
2906 elif len(args)==2:
2906 elif len(args)==2:
2907 bkms[args[0]] = args[1]
2907 bkms[args[0]] = args[1]
2908 self.db['bookmarks'] = bkms
2908 self.db['bookmarks'] = bkms
2909
2909
2910 def magic_pycat(self, parameter_s=''):
2910 def magic_pycat(self, parameter_s=''):
2911 """Show a syntax-highlighted file through a pager.
2911 """Show a syntax-highlighted file through a pager.
2912
2912
2913 This magic is similar to the cat utility, but it will assume the file
2913 This magic is similar to the cat utility, but it will assume the file
2914 to be Python source and will show it with syntax highlighting. """
2914 to be Python source and will show it with syntax highlighting. """
2915
2915
2916 try:
2916 try:
2917 filename = get_py_filename(parameter_s)
2917 filename = get_py_filename(parameter_s)
2918 cont = file_read(filename)
2918 cont = file_read(filename)
2919 except IOError:
2919 except IOError:
2920 try:
2920 try:
2921 cont = eval(parameter_s,self.user_ns)
2921 cont = eval(parameter_s,self.user_ns)
2922 except NameError:
2922 except NameError:
2923 cont = None
2923 cont = None
2924 if cont is None:
2924 if cont is None:
2925 print "Error: no such file or variable"
2925 print "Error: no such file or variable"
2926 return
2926 return
2927
2927
2928 page(self.shell.pycolorize(cont),
2928 page(self.shell.pycolorize(cont),
2929 screen_lines=self.shell.rc.screen_length)
2929 screen_lines=self.shell.rc.screen_length)
2930
2930
2931 def magic_cpaste(self, parameter_s=''):
2931 def magic_cpaste(self, parameter_s=''):
2932 """Allows you to paste & execute a pre-formatted code block from clipboard
2932 """Allows you to paste & execute a pre-formatted code block from clipboard
2933
2933
2934 You must terminate the block with '--' (two minus-signs) alone on the
2934 You must terminate the block with '--' (two minus-signs) alone on the
2935 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2935 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
2936 is the new sentinel for this operation)
2936 is the new sentinel for this operation)
2937
2937
2938 The block is dedented prior to execution to enable execution of
2938 The block is dedented prior to execution to enable execution of
2939 method definitions. '>' characters at the beginning of a line is
2939 method definitions. '>' characters at the beginning of a line is
2940 ignored, to allow pasting directly from e-mails. The executed block
2940 ignored, to allow pasting directly from e-mails. The executed block
2941 is also assigned to variable named 'pasted_block' for later editing
2941 is also assigned to variable named 'pasted_block' for later editing
2942 with '%edit pasted_block'.
2942 with '%edit pasted_block'.
2943
2943
2944 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2944 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
2945 This assigns the pasted block to variable 'foo' as string, without
2945 This assigns the pasted block to variable 'foo' as string, without
2946 dedenting or executing it.
2946 dedenting or executing it.
2947
2947
2948 Do not be alarmed by garbled output on Windows (it's a readline bug).
2948 Do not be alarmed by garbled output on Windows (it's a readline bug).
2949 Just press enter and type -- (and press enter again) and the block
2949 Just press enter and type -- (and press enter again) and the block
2950 will be what was just pasted.
2950 will be what was just pasted.
2951
2951
2952 IPython statements (magics, shell escapes) are not supported (yet).
2952 IPython statements (magics, shell escapes) are not supported (yet).
2953 """
2953 """
2954 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2954 opts,args = self.parse_options(parameter_s,'s:',mode='string')
2955 par = args.strip()
2955 par = args.strip()
2956 sentinel = opts.get('s','--')
2956 sentinel = opts.get('s','--')
2957
2957
2958 from IPython import iplib
2958 from IPython import iplib
2959 lines = []
2959 lines = []
2960 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2960 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
2961 while 1:
2961 while 1:
2962 l = iplib.raw_input_original(':')
2962 l = iplib.raw_input_original(':')
2963 if l ==sentinel:
2963 if l ==sentinel:
2964 break
2964 break
2965 lines.append(l.lstrip('>'))
2965 lines.append(l.lstrip('>'))
2966 block = "\n".join(lines) + '\n'
2966 block = "\n".join(lines) + '\n'
2967 #print "block:\n",block
2967 #print "block:\n",block
2968 if not par:
2968 if not par:
2969 b = textwrap.dedent(block)
2969 b = textwrap.dedent(block)
2970 exec b in self.user_ns
2970 exec b in self.user_ns
2971 self.user_ns['pasted_block'] = b
2971 self.user_ns['pasted_block'] = b
2972 else:
2972 else:
2973 self.user_ns[par] = block
2973 self.user_ns[par] = block
2974 print "Block assigned to '%s'" % par
2974 print "Block assigned to '%s'" % par
2975
2975
2976 def magic_quickref(self,arg):
2976 def magic_quickref(self,arg):
2977 """ Show a quick reference sheet """
2977 """ Show a quick reference sheet """
2978 import IPython.usage
2978 import IPython.usage
2979 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2979 qr = IPython.usage.quick_reference + self.magic_magic('-brief')
2980
2980
2981 page(qr)
2981 page(qr)
2982
2982
2983 def magic_upgrade(self,arg):
2983 def magic_upgrade(self,arg):
2984 """ Upgrade your IPython installation
2984 """ Upgrade your IPython installation
2985
2985
2986 This will copy the config files that don't yet exist in your
2986 This will copy the config files that don't yet exist in your
2987 ipython dir from the system config dir. Use this after upgrading
2987 ipython dir from the system config dir. Use this after upgrading
2988 IPython if you don't wish to delete your .ipython dir.
2988 IPython if you don't wish to delete your .ipython dir.
2989
2989
2990 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2990 Call with -nolegacy to get rid of ipythonrc* files (recommended for
2991 new users)
2991 new users)
2992
2992
2993 """
2993 """
2994 ip = self.getapi()
2994 ip = self.getapi()
2995 ipinstallation = path(IPython.__file__).dirname()
2995 ipinstallation = path(IPython.__file__).dirname()
2996 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
2996 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'upgrade_dir.py')
2997 src_config = ipinstallation / 'UserConfig'
2997 src_config = ipinstallation / 'UserConfig'
2998 userdir = path(ip.options.ipythondir)
2998 userdir = path(ip.options.ipythondir)
2999 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
2999 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3000 print ">",cmd
3000 print ">",cmd
3001 shell(cmd)
3001 shell(cmd)
3002 if arg == '-nolegacy':
3002 if arg == '-nolegacy':
3003 legacy = userdir.files('ipythonrc*')
3003 legacy = userdir.files('ipythonrc*')
3004 print "Nuking legacy files:",legacy
3004 print "Nuking legacy files:",legacy
3005
3005
3006 [p.remove() for p in legacy]
3006 [p.remove() for p in legacy]
3007 suffix = (sys.platform == 'win32' and '.ini' or '')
3007 suffix = (sys.platform == 'win32' and '.ini' or '')
3008 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3008 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3009
3009
3010
3010
3011 # end Magic
3011 # end Magic
@@ -1,5775 +1,5780
1 2006-10-14 Ville Vainio <vivainio@gmail.com>
2
3 * Magic.py, ipython.el: applied first part of Rocky Bernstein's
4 patch set for pydb integration.
5
1 2006-10-12 Ville Vainio <vivainio@gmail.com>
6 2006-10-12 Ville Vainio <vivainio@gmail.com>
2
7
3 * jobctrl.py: Add new "jobctrl" extension for spawning background
8 * jobctrl.py: Add new "jobctrl" extension for spawning background
4 processes with "&find /". 'import jobctrl' to try it out. Requires
9 processes with "&find /". 'import jobctrl' to try it out. Requires
5 'subprocess' module, standard in python 2.4+.
10 'subprocess' module, standard in python 2.4+.
6
11
7 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
12 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
8 so if foo -> bar and bar -> baz, then foo -> baz.
13 so if foo -> bar and bar -> baz, then foo -> baz.
9
14
10 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
15 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
11
16
12 * IPython/Magic.py (Magic.parse_options): add a new posix option
17 * IPython/Magic.py (Magic.parse_options): add a new posix option
13 to allow parsing of input args in magics that doesn't strip quotes
18 to allow parsing of input args in magics that doesn't strip quotes
14 (if posix=False). This also closes %timeit bug reported by
19 (if posix=False). This also closes %timeit bug reported by
15 Stefan.
20 Stefan.
16
21
17 2006-10-03 Ville Vainio <vivainio@gmail.com>
22 2006-10-03 Ville Vainio <vivainio@gmail.com>
18
23
19 * iplib.py (raw_input, interact): Return ValueError catching for
24 * iplib.py (raw_input, interact): Return ValueError catching for
20 raw_input. Fixes infinite loop for sys.stdin.close() or
25 raw_input. Fixes infinite loop for sys.stdin.close() or
21 sys.stdout.close().
26 sys.stdout.close().
22
27
23 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
28 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
24
29
25 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
30 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
26 to help in handling doctests. irunner is now pretty useful for
31 to help in handling doctests. irunner is now pretty useful for
27 running standalone scripts and simulate a full interactive session
32 running standalone scripts and simulate a full interactive session
28 in a format that can be then pasted as a doctest.
33 in a format that can be then pasted as a doctest.
29
34
30 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
35 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
31 on top of the default (useless) ones. This also fixes the nasty
36 on top of the default (useless) ones. This also fixes the nasty
32 way in which 2.5's Quitter() exits (reverted [1785]).
37 way in which 2.5's Quitter() exits (reverted [1785]).
33
38
34 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
39 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
35 2.5.
40 2.5.
36
41
37 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
42 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
38 color scheme is updated as well when color scheme is changed
43 color scheme is updated as well when color scheme is changed
39 interactively.
44 interactively.
40
45
41 2006-09-27 Ville Vainio <vivainio@gmail.com>
46 2006-09-27 Ville Vainio <vivainio@gmail.com>
42
47
43 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
48 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
44 infinite loop and just exit. It's a hack, but will do for a while.
49 infinite loop and just exit. It's a hack, but will do for a while.
45
50
46 2006-08-25 Walter Doerwald <walter@livinglogic.de>
51 2006-08-25 Walter Doerwald <walter@livinglogic.de>
47
52
48 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
53 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
49 the constructor, this makes it possible to get a list of only directories
54 the constructor, this makes it possible to get a list of only directories
50 or only files.
55 or only files.
51
56
52 2006-08-12 Ville Vainio <vivainio@gmail.com>
57 2006-08-12 Ville Vainio <vivainio@gmail.com>
53
58
54 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
59 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
55 they broke unittest
60 they broke unittest
56
61
57 2006-08-11 Ville Vainio <vivainio@gmail.com>
62 2006-08-11 Ville Vainio <vivainio@gmail.com>
58
63
59 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
64 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
60 by resolving issue properly, i.e. by inheriting FakeModule
65 by resolving issue properly, i.e. by inheriting FakeModule
61 from types.ModuleType. Pickling ipython interactive data
66 from types.ModuleType. Pickling ipython interactive data
62 should still work as usual (testing appreciated).
67 should still work as usual (testing appreciated).
63
68
64 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
69 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
65
70
66 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
71 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
67 running under python 2.3 with code from 2.4 to fix a bug with
72 running under python 2.3 with code from 2.4 to fix a bug with
68 help(). Reported by the Debian maintainers, Norbert Tretkowski
73 help(). Reported by the Debian maintainers, Norbert Tretkowski
69 <norbert-AT-tretkowski.de> and Alexandre Fayolle
74 <norbert-AT-tretkowski.de> and Alexandre Fayolle
70 <afayolle-AT-debian.org>.
75 <afayolle-AT-debian.org>.
71
76
72 2006-08-04 Walter Doerwald <walter@livinglogic.de>
77 2006-08-04 Walter Doerwald <walter@livinglogic.de>
73
78
74 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
79 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
75 (which was displaying "quit" twice).
80 (which was displaying "quit" twice).
76
81
77 2006-07-28 Walter Doerwald <walter@livinglogic.de>
82 2006-07-28 Walter Doerwald <walter@livinglogic.de>
78
83
79 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
84 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
80 the mode argument).
85 the mode argument).
81
86
82 2006-07-27 Walter Doerwald <walter@livinglogic.de>
87 2006-07-27 Walter Doerwald <walter@livinglogic.de>
83
88
84 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
89 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
85 not running under IPython.
90 not running under IPython.
86
91
87 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
92 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
88 and make it iterable (iterating over the attribute itself). Add two new
93 and make it iterable (iterating over the attribute itself). Add two new
89 magic strings for __xattrs__(): If the string starts with "-", the attribute
94 magic strings for __xattrs__(): If the string starts with "-", the attribute
90 will not be displayed in ibrowse's detail view (but it can still be
95 will not be displayed in ibrowse's detail view (but it can still be
91 iterated over). This makes it possible to add attributes that are large
96 iterated over). This makes it possible to add attributes that are large
92 lists or generator methods to the detail view. Replace magic attribute names
97 lists or generator methods to the detail view. Replace magic attribute names
93 and _attrname() and _getattr() with "descriptors": For each type of magic
98 and _attrname() and _getattr() with "descriptors": For each type of magic
94 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
99 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
95 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
100 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
96 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
101 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
97 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
102 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
98 are still supported.
103 are still supported.
99
104
100 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
105 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
101 fails in ibrowse.fetch(), the exception object is added as the last item
106 fails in ibrowse.fetch(), the exception object is added as the last item
102 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
107 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
103 a generator throws an exception midway through execution.
108 a generator throws an exception midway through execution.
104
109
105 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
110 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
106 encoding into methods.
111 encoding into methods.
107
112
108 2006-07-26 Ville Vainio <vivainio@gmail.com>
113 2006-07-26 Ville Vainio <vivainio@gmail.com>
109
114
110 * iplib.py: history now stores multiline input as single
115 * iplib.py: history now stores multiline input as single
111 history entries. Patch by Jorgen Cederlof.
116 history entries. Patch by Jorgen Cederlof.
112
117
113 2006-07-18 Walter Doerwald <walter@livinglogic.de>
118 2006-07-18 Walter Doerwald <walter@livinglogic.de>
114
119
115 * IPython/Extensions/ibrowse.py: Make cursor visible over
120 * IPython/Extensions/ibrowse.py: Make cursor visible over
116 non existing attributes.
121 non existing attributes.
117
122
118 2006-07-14 Walter Doerwald <walter@livinglogic.de>
123 2006-07-14 Walter Doerwald <walter@livinglogic.de>
119
124
120 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
125 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
121 error output of the running command doesn't mess up the screen.
126 error output of the running command doesn't mess up the screen.
122
127
123 2006-07-13 Walter Doerwald <walter@livinglogic.de>
128 2006-07-13 Walter Doerwald <walter@livinglogic.de>
124
129
125 * IPython/Extensions/ipipe.py (isort): Make isort usable without
130 * IPython/Extensions/ipipe.py (isort): Make isort usable without
126 argument. This sorts the items themselves.
131 argument. This sorts the items themselves.
127
132
128 2006-07-12 Walter Doerwald <walter@livinglogic.de>
133 2006-07-12 Walter Doerwald <walter@livinglogic.de>
129
134
130 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
135 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
131 Compile expression strings into code objects. This should speed
136 Compile expression strings into code objects. This should speed
132 up ifilter and friends somewhat.
137 up ifilter and friends somewhat.
133
138
134 2006-07-08 Ville Vainio <vivainio@gmail.com>
139 2006-07-08 Ville Vainio <vivainio@gmail.com>
135
140
136 * Magic.py: %cpaste now strips > from the beginning of lines
141 * Magic.py: %cpaste now strips > from the beginning of lines
137 to ease pasting quoted code from emails. Contributed by
142 to ease pasting quoted code from emails. Contributed by
138 Stefan van der Walt.
143 Stefan van der Walt.
139
144
140 2006-06-29 Ville Vainio <vivainio@gmail.com>
145 2006-06-29 Ville Vainio <vivainio@gmail.com>
141
146
142 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
147 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
143 mode, patch contributed by Darren Dale. NEEDS TESTING!
148 mode, patch contributed by Darren Dale. NEEDS TESTING!
144
149
145 2006-06-28 Walter Doerwald <walter@livinglogic.de>
150 2006-06-28 Walter Doerwald <walter@livinglogic.de>
146
151
147 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
152 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
148 a blue background. Fix fetching new display rows when the browser
153 a blue background. Fix fetching new display rows when the browser
149 scrolls more than a screenful (e.g. by using the goto command).
154 scrolls more than a screenful (e.g. by using the goto command).
150
155
151 2006-06-27 Ville Vainio <vivainio@gmail.com>
156 2006-06-27 Ville Vainio <vivainio@gmail.com>
152
157
153 * Magic.py (_inspect, _ofind) Apply David Huard's
158 * Magic.py (_inspect, _ofind) Apply David Huard's
154 patch for displaying the correct docstring for 'property'
159 patch for displaying the correct docstring for 'property'
155 attributes.
160 attributes.
156
161
157 2006-06-23 Walter Doerwald <walter@livinglogic.de>
162 2006-06-23 Walter Doerwald <walter@livinglogic.de>
158
163
159 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
164 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
160 commands into the methods implementing them.
165 commands into the methods implementing them.
161
166
162 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
167 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
163
168
164 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
169 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
165 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
170 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
166 autoindent support was authored by Jin Liu.
171 autoindent support was authored by Jin Liu.
167
172
168 2006-06-22 Walter Doerwald <walter@livinglogic.de>
173 2006-06-22 Walter Doerwald <walter@livinglogic.de>
169
174
170 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
175 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
171 for keymaps with a custom class that simplifies handling.
176 for keymaps with a custom class that simplifies handling.
172
177
173 2006-06-19 Walter Doerwald <walter@livinglogic.de>
178 2006-06-19 Walter Doerwald <walter@livinglogic.de>
174
179
175 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
180 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
176 resizing. This requires Python 2.5 to work.
181 resizing. This requires Python 2.5 to work.
177
182
178 2006-06-16 Walter Doerwald <walter@livinglogic.de>
183 2006-06-16 Walter Doerwald <walter@livinglogic.de>
179
184
180 * IPython/Extensions/ibrowse.py: Add two new commands to
185 * IPython/Extensions/ibrowse.py: Add two new commands to
181 ibrowse: "hideattr" (mapped to "h") hides the attribute under
186 ibrowse: "hideattr" (mapped to "h") hides the attribute under
182 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
187 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
183 attributes again. Remapped the help command to "?". Display
188 attributes again. Remapped the help command to "?". Display
184 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
189 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
185 as keys for the "home" and "end" commands. Add three new commands
190 as keys for the "home" and "end" commands. Add three new commands
186 to the input mode for "find" and friends: "delend" (CTRL-K)
191 to the input mode for "find" and friends: "delend" (CTRL-K)
187 deletes to the end of line. "incsearchup" searches upwards in the
192 deletes to the end of line. "incsearchup" searches upwards in the
188 command history for an input that starts with the text before the cursor.
193 command history for an input that starts with the text before the cursor.
189 "incsearchdown" does the same downwards. Removed a bogus mapping of
194 "incsearchdown" does the same downwards. Removed a bogus mapping of
190 the x key to "delete".
195 the x key to "delete".
191
196
192 2006-06-15 Ville Vainio <vivainio@gmail.com>
197 2006-06-15 Ville Vainio <vivainio@gmail.com>
193
198
194 * iplib.py, hooks.py: Added new generate_prompt hook that can be
199 * iplib.py, hooks.py: Added new generate_prompt hook that can be
195 used to create prompts dynamically, instead of the "old" way of
200 used to create prompts dynamically, instead of the "old" way of
196 assigning "magic" strings to prompt_in1 and prompt_in2. The old
201 assigning "magic" strings to prompt_in1 and prompt_in2. The old
197 way still works (it's invoked by the default hook), of course.
202 way still works (it's invoked by the default hook), of course.
198
203
199 * Prompts.py: added generate_output_prompt hook for altering output
204 * Prompts.py: added generate_output_prompt hook for altering output
200 prompt
205 prompt
201
206
202 * Release.py: Changed version string to 0.7.3.svn.
207 * Release.py: Changed version string to 0.7.3.svn.
203
208
204 2006-06-15 Walter Doerwald <walter@livinglogic.de>
209 2006-06-15 Walter Doerwald <walter@livinglogic.de>
205
210
206 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
211 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
207 the call to fetch() always tries to fetch enough data for at least one
212 the call to fetch() always tries to fetch enough data for at least one
208 full screen. This makes it possible to simply call moveto(0,0,True) in
213 full screen. This makes it possible to simply call moveto(0,0,True) in
209 the constructor. Fix typos and removed the obsolete goto attribute.
214 the constructor. Fix typos and removed the obsolete goto attribute.
210
215
211 2006-06-12 Ville Vainio <vivainio@gmail.com>
216 2006-06-12 Ville Vainio <vivainio@gmail.com>
212
217
213 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
218 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
214 allowing $variable interpolation within multiline statements,
219 allowing $variable interpolation within multiline statements,
215 though so far only with "sh" profile for a testing period.
220 though so far only with "sh" profile for a testing period.
216 The patch also enables splitting long commands with \ but it
221 The patch also enables splitting long commands with \ but it
217 doesn't work properly yet.
222 doesn't work properly yet.
218
223
219 2006-06-12 Walter Doerwald <walter@livinglogic.de>
224 2006-06-12 Walter Doerwald <walter@livinglogic.de>
220
225
221 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
226 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
222 input history and the position of the cursor in the input history for
227 input history and the position of the cursor in the input history for
223 the find, findbackwards and goto command.
228 the find, findbackwards and goto command.
224
229
225 2006-06-10 Walter Doerwald <walter@livinglogic.de>
230 2006-06-10 Walter Doerwald <walter@livinglogic.de>
226
231
227 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
232 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
228 implements the basic functionality of browser commands that require
233 implements the basic functionality of browser commands that require
229 input. Reimplement the goto, find and findbackwards commands as
234 input. Reimplement the goto, find and findbackwards commands as
230 subclasses of _CommandInput. Add an input history and keymaps to those
235 subclasses of _CommandInput. Add an input history and keymaps to those
231 commands. Add "\r" as a keyboard shortcut for the enterdefault and
236 commands. Add "\r" as a keyboard shortcut for the enterdefault and
232 execute commands.
237 execute commands.
233
238
234 2006-06-07 Ville Vainio <vivainio@gmail.com>
239 2006-06-07 Ville Vainio <vivainio@gmail.com>
235
240
236 * iplib.py: ipython mybatch.ipy exits ipython immediately after
241 * iplib.py: ipython mybatch.ipy exits ipython immediately after
237 running the batch files instead of leaving the session open.
242 running the batch files instead of leaving the session open.
238
243
239 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
244 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
240
245
241 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
246 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
242 the original fix was incomplete. Patch submitted by W. Maier.
247 the original fix was incomplete. Patch submitted by W. Maier.
243
248
244 2006-06-07 Ville Vainio <vivainio@gmail.com>
249 2006-06-07 Ville Vainio <vivainio@gmail.com>
245
250
246 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
251 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
247 Confirmation prompts can be supressed by 'quiet' option.
252 Confirmation prompts can be supressed by 'quiet' option.
248 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
253 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
249
254
250 2006-06-06 *** Released version 0.7.2
255 2006-06-06 *** Released version 0.7.2
251
256
252 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
257 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
253
258
254 * IPython/Release.py (version): Made 0.7.2 final for release.
259 * IPython/Release.py (version): Made 0.7.2 final for release.
255 Repo tagged and release cut.
260 Repo tagged and release cut.
256
261
257 2006-06-05 Ville Vainio <vivainio@gmail.com>
262 2006-06-05 Ville Vainio <vivainio@gmail.com>
258
263
259 * Magic.py (magic_rehashx): Honor no_alias list earlier in
264 * Magic.py (magic_rehashx): Honor no_alias list earlier in
260 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
265 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
261
266
262 * upgrade_dir.py: try import 'path' module a bit harder
267 * upgrade_dir.py: try import 'path' module a bit harder
263 (for %upgrade)
268 (for %upgrade)
264
269
265 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
270 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
266
271
267 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
272 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
268 instead of looping 20 times.
273 instead of looping 20 times.
269
274
270 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
275 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
271 correctly at initialization time. Bug reported by Krishna Mohan
276 correctly at initialization time. Bug reported by Krishna Mohan
272 Gundu <gkmohan-AT-gmail.com> on the user list.
277 Gundu <gkmohan-AT-gmail.com> on the user list.
273
278
274 * IPython/Release.py (version): Mark 0.7.2 version to start
279 * IPython/Release.py (version): Mark 0.7.2 version to start
275 testing for release on 06/06.
280 testing for release on 06/06.
276
281
277 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
282 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
278
283
279 * scripts/irunner: thin script interface so users don't have to
284 * scripts/irunner: thin script interface so users don't have to
280 find the module and call it as an executable, since modules rarely
285 find the module and call it as an executable, since modules rarely
281 live in people's PATH.
286 live in people's PATH.
282
287
283 * IPython/irunner.py (InteractiveRunner.__init__): added
288 * IPython/irunner.py (InteractiveRunner.__init__): added
284 delaybeforesend attribute to control delays with newer versions of
289 delaybeforesend attribute to control delays with newer versions of
285 pexpect. Thanks to detailed help from pexpect's author, Noah
290 pexpect. Thanks to detailed help from pexpect's author, Noah
286 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
291 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
287 correctly (it works in NoColor mode).
292 correctly (it works in NoColor mode).
288
293
289 * IPython/iplib.py (handle_normal): fix nasty crash reported on
294 * IPython/iplib.py (handle_normal): fix nasty crash reported on
290 SAGE list, from improper log() calls.
295 SAGE list, from improper log() calls.
291
296
292 2006-05-31 Ville Vainio <vivainio@gmail.com>
297 2006-05-31 Ville Vainio <vivainio@gmail.com>
293
298
294 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
299 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
295 with args in parens to work correctly with dirs that have spaces.
300 with args in parens to work correctly with dirs that have spaces.
296
301
297 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
302 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
298
303
299 * IPython/Logger.py (Logger.logstart): add option to log raw input
304 * IPython/Logger.py (Logger.logstart): add option to log raw input
300 instead of the processed one. A -r flag was added to the
305 instead of the processed one. A -r flag was added to the
301 %logstart magic used for controlling logging.
306 %logstart magic used for controlling logging.
302
307
303 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
308 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
304
309
305 * IPython/iplib.py (InteractiveShell.__init__): add check for the
310 * IPython/iplib.py (InteractiveShell.__init__): add check for the
306 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
311 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
307 recognize the option. After a bug report by Will Maier. This
312 recognize the option. After a bug report by Will Maier. This
308 closes #64 (will do it after confirmation from W. Maier).
313 closes #64 (will do it after confirmation from W. Maier).
309
314
310 * IPython/irunner.py: New module to run scripts as if manually
315 * IPython/irunner.py: New module to run scripts as if manually
311 typed into an interactive environment, based on pexpect. After a
316 typed into an interactive environment, based on pexpect. After a
312 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
317 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
313 ipython-user list. Simple unittests in the tests/ directory.
318 ipython-user list. Simple unittests in the tests/ directory.
314
319
315 * tools/release: add Will Maier, OpenBSD port maintainer, to
320 * tools/release: add Will Maier, OpenBSD port maintainer, to
316 recepients list. We are now officially part of the OpenBSD ports:
321 recepients list. We are now officially part of the OpenBSD ports:
317 http://www.openbsd.org/ports.html ! Many thanks to Will for the
322 http://www.openbsd.org/ports.html ! Many thanks to Will for the
318 work.
323 work.
319
324
320 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
325 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
321
326
322 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
327 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
323 so that it doesn't break tkinter apps.
328 so that it doesn't break tkinter apps.
324
329
325 * IPython/iplib.py (_prefilter): fix bug where aliases would
330 * IPython/iplib.py (_prefilter): fix bug where aliases would
326 shadow variables when autocall was fully off. Reported by SAGE
331 shadow variables when autocall was fully off. Reported by SAGE
327 author William Stein.
332 author William Stein.
328
333
329 * IPython/OInspect.py (Inspector.__init__): add a flag to control
334 * IPython/OInspect.py (Inspector.__init__): add a flag to control
330 at what detail level strings are computed when foo? is requested.
335 at what detail level strings are computed when foo? is requested.
331 This allows users to ask for example that the string form of an
336 This allows users to ask for example that the string form of an
332 object is only computed when foo?? is called, or even never, by
337 object is only computed when foo?? is called, or even never, by
333 setting the object_info_string_level >= 2 in the configuration
338 setting the object_info_string_level >= 2 in the configuration
334 file. This new option has been added and documented. After a
339 file. This new option has been added and documented. After a
335 request by SAGE to be able to control the printing of very large
340 request by SAGE to be able to control the printing of very large
336 objects more easily.
341 objects more easily.
337
342
338 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
343 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
339
344
340 * IPython/ipmaker.py (make_IPython): remove the ipython call path
345 * IPython/ipmaker.py (make_IPython): remove the ipython call path
341 from sys.argv, to be 100% consistent with how Python itself works
346 from sys.argv, to be 100% consistent with how Python itself works
342 (as seen for example with python -i file.py). After a bug report
347 (as seen for example with python -i file.py). After a bug report
343 by Jeffrey Collins.
348 by Jeffrey Collins.
344
349
345 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
350 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
346 nasty bug which was preventing custom namespaces with -pylab,
351 nasty bug which was preventing custom namespaces with -pylab,
347 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
352 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
348 compatibility (long gone from mpl).
353 compatibility (long gone from mpl).
349
354
350 * IPython/ipapi.py (make_session): name change: create->make. We
355 * IPython/ipapi.py (make_session): name change: create->make. We
351 use make in other places (ipmaker,...), it's shorter and easier to
356 use make in other places (ipmaker,...), it's shorter and easier to
352 type and say, etc. I'm trying to clean things before 0.7.2 so
357 type and say, etc. I'm trying to clean things before 0.7.2 so
353 that I can keep things stable wrt to ipapi in the chainsaw branch.
358 that I can keep things stable wrt to ipapi in the chainsaw branch.
354
359
355 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
360 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
356 python-mode recognizes our debugger mode. Add support for
361 python-mode recognizes our debugger mode. Add support for
357 autoindent inside (X)emacs. After a patch sent in by Jin Liu
362 autoindent inside (X)emacs. After a patch sent in by Jin Liu
358 <m.liu.jin-AT-gmail.com> originally written by
363 <m.liu.jin-AT-gmail.com> originally written by
359 doxgen-AT-newsmth.net (with minor modifications for xemacs
364 doxgen-AT-newsmth.net (with minor modifications for xemacs
360 compatibility)
365 compatibility)
361
366
362 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
367 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
363 tracebacks when walking the stack so that the stack tracking system
368 tracebacks when walking the stack so that the stack tracking system
364 in emacs' python-mode can identify the frames correctly.
369 in emacs' python-mode can identify the frames correctly.
365
370
366 * IPython/ipmaker.py (make_IPython): make the internal (and
371 * IPython/ipmaker.py (make_IPython): make the internal (and
367 default config) autoedit_syntax value false by default. Too many
372 default config) autoedit_syntax value false by default. Too many
368 users have complained to me (both on and off-list) about problems
373 users have complained to me (both on and off-list) about problems
369 with this option being on by default, so I'm making it default to
374 with this option being on by default, so I'm making it default to
370 off. It can still be enabled by anyone via the usual mechanisms.
375 off. It can still be enabled by anyone via the usual mechanisms.
371
376
372 * IPython/completer.py (Completer.attr_matches): add support for
377 * IPython/completer.py (Completer.attr_matches): add support for
373 PyCrust-style _getAttributeNames magic method. Patch contributed
378 PyCrust-style _getAttributeNames magic method. Patch contributed
374 by <mscott-AT-goldenspud.com>. Closes #50.
379 by <mscott-AT-goldenspud.com>. Closes #50.
375
380
376 * IPython/iplib.py (InteractiveShell.__init__): remove the
381 * IPython/iplib.py (InteractiveShell.__init__): remove the
377 deletion of exit/quit from __builtin__, which can break
382 deletion of exit/quit from __builtin__, which can break
378 third-party tools like the Zope debugging console. The
383 third-party tools like the Zope debugging console. The
379 %exit/%quit magics remain. In general, it's probably a good idea
384 %exit/%quit magics remain. In general, it's probably a good idea
380 not to delete anything from __builtin__, since we never know what
385 not to delete anything from __builtin__, since we never know what
381 that will break. In any case, python now (for 2.5) will support
386 that will break. In any case, python now (for 2.5) will support
382 'real' exit/quit, so this issue is moot. Closes #55.
387 'real' exit/quit, so this issue is moot. Closes #55.
383
388
384 * IPython/genutils.py (with_obj): rename the 'with' function to
389 * IPython/genutils.py (with_obj): rename the 'with' function to
385 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
390 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
386 becomes a language keyword. Closes #53.
391 becomes a language keyword. Closes #53.
387
392
388 * IPython/FakeModule.py (FakeModule.__init__): add a proper
393 * IPython/FakeModule.py (FakeModule.__init__): add a proper
389 __file__ attribute to this so it fools more things into thinking
394 __file__ attribute to this so it fools more things into thinking
390 it is a real module. Closes #59.
395 it is a real module. Closes #59.
391
396
392 * IPython/Magic.py (magic_edit): add -n option to open the editor
397 * IPython/Magic.py (magic_edit): add -n option to open the editor
393 at a specific line number. After a patch by Stefan van der Walt.
398 at a specific line number. After a patch by Stefan van der Walt.
394
399
395 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
400 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
396
401
397 * IPython/iplib.py (edit_syntax_error): fix crash when for some
402 * IPython/iplib.py (edit_syntax_error): fix crash when for some
398 reason the file could not be opened. After automatic crash
403 reason the file could not be opened. After automatic crash
399 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
404 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
400 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
405 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
401 (_should_recompile): Don't fire editor if using %bg, since there
406 (_should_recompile): Don't fire editor if using %bg, since there
402 is no file in the first place. From the same report as above.
407 is no file in the first place. From the same report as above.
403 (raw_input): protect against faulty third-party prefilters. After
408 (raw_input): protect against faulty third-party prefilters. After
404 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
409 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
405 while running under SAGE.
410 while running under SAGE.
406
411
407 2006-05-23 Ville Vainio <vivainio@gmail.com>
412 2006-05-23 Ville Vainio <vivainio@gmail.com>
408
413
409 * ipapi.py: Stripped down ip.to_user_ns() to work only as
414 * ipapi.py: Stripped down ip.to_user_ns() to work only as
410 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
415 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
411 now returns None (again), unless dummy is specifically allowed by
416 now returns None (again), unless dummy is specifically allowed by
412 ipapi.get(allow_dummy=True).
417 ipapi.get(allow_dummy=True).
413
418
414 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
419 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
415
420
416 * IPython: remove all 2.2-compatibility objects and hacks from
421 * IPython: remove all 2.2-compatibility objects and hacks from
417 everywhere, since we only support 2.3 at this point. Docs
422 everywhere, since we only support 2.3 at this point. Docs
418 updated.
423 updated.
419
424
420 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
425 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
421 Anything requiring extra validation can be turned into a Python
426 Anything requiring extra validation can be turned into a Python
422 property in the future. I used a property for the db one b/c
427 property in the future. I used a property for the db one b/c
423 there was a nasty circularity problem with the initialization
428 there was a nasty circularity problem with the initialization
424 order, which right now I don't have time to clean up.
429 order, which right now I don't have time to clean up.
425
430
426 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
431 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
427 another locking bug reported by Jorgen. I'm not 100% sure though,
432 another locking bug reported by Jorgen. I'm not 100% sure though,
428 so more testing is needed...
433 so more testing is needed...
429
434
430 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
435 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
431
436
432 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
437 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
433 local variables from any routine in user code (typically executed
438 local variables from any routine in user code (typically executed
434 with %run) directly into the interactive namespace. Very useful
439 with %run) directly into the interactive namespace. Very useful
435 when doing complex debugging.
440 when doing complex debugging.
436 (IPythonNotRunning): Changed the default None object to a dummy
441 (IPythonNotRunning): Changed the default None object to a dummy
437 whose attributes can be queried as well as called without
442 whose attributes can be queried as well as called without
438 exploding, to ease writing code which works transparently both in
443 exploding, to ease writing code which works transparently both in
439 and out of ipython and uses some of this API.
444 and out of ipython and uses some of this API.
440
445
441 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
446 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
442
447
443 * IPython/hooks.py (result_display): Fix the fact that our display
448 * IPython/hooks.py (result_display): Fix the fact that our display
444 hook was using str() instead of repr(), as the default python
449 hook was using str() instead of repr(), as the default python
445 console does. This had gone unnoticed b/c it only happened if
450 console does. This had gone unnoticed b/c it only happened if
446 %Pprint was off, but the inconsistency was there.
451 %Pprint was off, but the inconsistency was there.
447
452
448 2006-05-15 Ville Vainio <vivainio@gmail.com>
453 2006-05-15 Ville Vainio <vivainio@gmail.com>
449
454
450 * Oinspect.py: Only show docstring for nonexisting/binary files
455 * Oinspect.py: Only show docstring for nonexisting/binary files
451 when doing object??, closing ticket #62
456 when doing object??, closing ticket #62
452
457
453 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
458 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
454
459
455 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
460 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
456 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
461 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
457 was being released in a routine which hadn't checked if it had
462 was being released in a routine which hadn't checked if it had
458 been the one to acquire it.
463 been the one to acquire it.
459
464
460 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
465 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
461
466
462 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
467 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
463
468
464 2006-04-11 Ville Vainio <vivainio@gmail.com>
469 2006-04-11 Ville Vainio <vivainio@gmail.com>
465
470
466 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
471 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
467 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
472 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
468 prefilters, allowing stuff like magics and aliases in the file.
473 prefilters, allowing stuff like magics and aliases in the file.
469
474
470 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
475 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
471 added. Supported now are "%clear in" and "%clear out" (clear input and
476 added. Supported now are "%clear in" and "%clear out" (clear input and
472 output history, respectively). Also fixed CachedOutput.flush to
477 output history, respectively). Also fixed CachedOutput.flush to
473 properly flush the output cache.
478 properly flush the output cache.
474
479
475 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
480 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
476 half-success (and fail explicitly).
481 half-success (and fail explicitly).
477
482
478 2006-03-28 Ville Vainio <vivainio@gmail.com>
483 2006-03-28 Ville Vainio <vivainio@gmail.com>
479
484
480 * iplib.py: Fix quoting of aliases so that only argless ones
485 * iplib.py: Fix quoting of aliases so that only argless ones
481 are quoted
486 are quoted
482
487
483 2006-03-28 Ville Vainio <vivainio@gmail.com>
488 2006-03-28 Ville Vainio <vivainio@gmail.com>
484
489
485 * iplib.py: Quote aliases with spaces in the name.
490 * iplib.py: Quote aliases with spaces in the name.
486 "c:\program files\blah\bin" is now legal alias target.
491 "c:\program files\blah\bin" is now legal alias target.
487
492
488 * ext_rehashdir.py: Space no longer allowed as arg
493 * ext_rehashdir.py: Space no longer allowed as arg
489 separator, since space is legal in path names.
494 separator, since space is legal in path names.
490
495
491 2006-03-16 Ville Vainio <vivainio@gmail.com>
496 2006-03-16 Ville Vainio <vivainio@gmail.com>
492
497
493 * upgrade_dir.py: Take path.py from Extensions, correcting
498 * upgrade_dir.py: Take path.py from Extensions, correcting
494 %upgrade magic
499 %upgrade magic
495
500
496 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
501 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
497
502
498 * hooks.py: Only enclose editor binary in quotes if legal and
503 * hooks.py: Only enclose editor binary in quotes if legal and
499 necessary (space in the name, and is an existing file). Fixes a bug
504 necessary (space in the name, and is an existing file). Fixes a bug
500 reported by Zachary Pincus.
505 reported by Zachary Pincus.
501
506
502 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
507 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
503
508
504 * Manual: thanks to a tip on proper color handling for Emacs, by
509 * Manual: thanks to a tip on proper color handling for Emacs, by
505 Eric J Haywiser <ejh1-AT-MIT.EDU>.
510 Eric J Haywiser <ejh1-AT-MIT.EDU>.
506
511
507 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
512 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
508 by applying the provided patch. Thanks to Liu Jin
513 by applying the provided patch. Thanks to Liu Jin
509 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
514 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
510 XEmacs/Linux, I'm trusting the submitter that it actually helps
515 XEmacs/Linux, I'm trusting the submitter that it actually helps
511 under win32/GNU Emacs. Will revisit if any problems are reported.
516 under win32/GNU Emacs. Will revisit if any problems are reported.
512
517
513 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
518 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
514
519
515 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
520 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
516 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
521 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
517
522
518 2006-03-12 Ville Vainio <vivainio@gmail.com>
523 2006-03-12 Ville Vainio <vivainio@gmail.com>
519
524
520 * Magic.py (magic_timeit): Added %timeit magic, contributed by
525 * Magic.py (magic_timeit): Added %timeit magic, contributed by
521 Torsten Marek.
526 Torsten Marek.
522
527
523 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
528 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
524
529
525 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
530 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
526 line ranges works again.
531 line ranges works again.
527
532
528 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
533 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
529
534
530 * IPython/iplib.py (showtraceback): add back sys.last_traceback
535 * IPython/iplib.py (showtraceback): add back sys.last_traceback
531 and friends, after a discussion with Zach Pincus on ipython-user.
536 and friends, after a discussion with Zach Pincus on ipython-user.
532 I'm not 100% sure, but after thinking about it quite a bit, it may
537 I'm not 100% sure, but after thinking about it quite a bit, it may
533 be OK. Testing with the multithreaded shells didn't reveal any
538 be OK. Testing with the multithreaded shells didn't reveal any
534 problems, but let's keep an eye out.
539 problems, but let's keep an eye out.
535
540
536 In the process, I fixed a few things which were calling
541 In the process, I fixed a few things which were calling
537 self.InteractiveTB() directly (like safe_execfile), which is a
542 self.InteractiveTB() directly (like safe_execfile), which is a
538 mistake: ALL exception reporting should be done by calling
543 mistake: ALL exception reporting should be done by calling
539 self.showtraceback(), which handles state and tab-completion and
544 self.showtraceback(), which handles state and tab-completion and
540 more.
545 more.
541
546
542 2006-03-01 Ville Vainio <vivainio@gmail.com>
547 2006-03-01 Ville Vainio <vivainio@gmail.com>
543
548
544 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
549 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
545 To use, do "from ipipe import *".
550 To use, do "from ipipe import *".
546
551
547 2006-02-24 Ville Vainio <vivainio@gmail.com>
552 2006-02-24 Ville Vainio <vivainio@gmail.com>
548
553
549 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
554 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
550 "cleanly" and safely than the older upgrade mechanism.
555 "cleanly" and safely than the older upgrade mechanism.
551
556
552 2006-02-21 Ville Vainio <vivainio@gmail.com>
557 2006-02-21 Ville Vainio <vivainio@gmail.com>
553
558
554 * Magic.py: %save works again.
559 * Magic.py: %save works again.
555
560
556 2006-02-15 Ville Vainio <vivainio@gmail.com>
561 2006-02-15 Ville Vainio <vivainio@gmail.com>
557
562
558 * Magic.py: %Pprint works again
563 * Magic.py: %Pprint works again
559
564
560 * Extensions/ipy_sane_defaults.py: Provide everything provided
565 * Extensions/ipy_sane_defaults.py: Provide everything provided
561 in default ipythonrc, to make it possible to have a completely empty
566 in default ipythonrc, to make it possible to have a completely empty
562 ipythonrc (and thus completely rc-file free configuration)
567 ipythonrc (and thus completely rc-file free configuration)
563
568
564 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
569 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
565
570
566 * IPython/hooks.py (editor): quote the call to the editor command,
571 * IPython/hooks.py (editor): quote the call to the editor command,
567 to allow commands with spaces in them. Problem noted by watching
572 to allow commands with spaces in them. Problem noted by watching
568 Ian Oswald's video about textpad under win32 at
573 Ian Oswald's video about textpad under win32 at
569 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
574 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
570
575
571 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
576 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
572 describing magics (we haven't used @ for a loong time).
577 describing magics (we haven't used @ for a loong time).
573
578
574 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
579 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
575 contributed by marienz to close
580 contributed by marienz to close
576 http://www.scipy.net/roundup/ipython/issue53.
581 http://www.scipy.net/roundup/ipython/issue53.
577
582
578 2006-02-10 Ville Vainio <vivainio@gmail.com>
583 2006-02-10 Ville Vainio <vivainio@gmail.com>
579
584
580 * genutils.py: getoutput now works in win32 too
585 * genutils.py: getoutput now works in win32 too
581
586
582 * completer.py: alias and magic completion only invoked
587 * completer.py: alias and magic completion only invoked
583 at the first "item" in the line, to avoid "cd %store"
588 at the first "item" in the line, to avoid "cd %store"
584 nonsense.
589 nonsense.
585
590
586 2006-02-09 Ville Vainio <vivainio@gmail.com>
591 2006-02-09 Ville Vainio <vivainio@gmail.com>
587
592
588 * test/*: Added a unit testing framework (finally).
593 * test/*: Added a unit testing framework (finally).
589 '%run runtests.py' to run test_*.
594 '%run runtests.py' to run test_*.
590
595
591 * ipapi.py: Exposed runlines and set_custom_exc
596 * ipapi.py: Exposed runlines and set_custom_exc
592
597
593 2006-02-07 Ville Vainio <vivainio@gmail.com>
598 2006-02-07 Ville Vainio <vivainio@gmail.com>
594
599
595 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
600 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
596 instead use "f(1 2)" as before.
601 instead use "f(1 2)" as before.
597
602
598 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
603 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
599
604
600 * IPython/demo.py (IPythonDemo): Add new classes to the demo
605 * IPython/demo.py (IPythonDemo): Add new classes to the demo
601 facilities, for demos processed by the IPython input filter
606 facilities, for demos processed by the IPython input filter
602 (IPythonDemo), and for running a script one-line-at-a-time as a
607 (IPythonDemo), and for running a script one-line-at-a-time as a
603 demo, both for pure Python (LineDemo) and for IPython-processed
608 demo, both for pure Python (LineDemo) and for IPython-processed
604 input (IPythonLineDemo). After a request by Dave Kohel, from the
609 input (IPythonLineDemo). After a request by Dave Kohel, from the
605 SAGE team.
610 SAGE team.
606 (Demo.edit): added an edit() method to the demo objects, to edit
611 (Demo.edit): added an edit() method to the demo objects, to edit
607 the in-memory copy of the last executed block.
612 the in-memory copy of the last executed block.
608
613
609 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
614 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
610 processing to %edit, %macro and %save. These commands can now be
615 processing to %edit, %macro and %save. These commands can now be
611 invoked on the unprocessed input as it was typed by the user
616 invoked on the unprocessed input as it was typed by the user
612 (without any prefilters applied). After requests by the SAGE team
617 (without any prefilters applied). After requests by the SAGE team
613 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
618 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
614
619
615 2006-02-01 Ville Vainio <vivainio@gmail.com>
620 2006-02-01 Ville Vainio <vivainio@gmail.com>
616
621
617 * setup.py, eggsetup.py: easy_install ipython==dev works
622 * setup.py, eggsetup.py: easy_install ipython==dev works
618 correctly now (on Linux)
623 correctly now (on Linux)
619
624
620 * ipy_user_conf,ipmaker: user config changes, removed spurious
625 * ipy_user_conf,ipmaker: user config changes, removed spurious
621 warnings
626 warnings
622
627
623 * iplib: if rc.banner is string, use it as is.
628 * iplib: if rc.banner is string, use it as is.
624
629
625 * Magic: %pycat accepts a string argument and pages it's contents.
630 * Magic: %pycat accepts a string argument and pages it's contents.
626
631
627
632
628 2006-01-30 Ville Vainio <vivainio@gmail.com>
633 2006-01-30 Ville Vainio <vivainio@gmail.com>
629
634
630 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
635 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
631 Now %store and bookmarks work through PickleShare, meaning that
636 Now %store and bookmarks work through PickleShare, meaning that
632 concurrent access is possible and all ipython sessions see the
637 concurrent access is possible and all ipython sessions see the
633 same database situation all the time, instead of snapshot of
638 same database situation all the time, instead of snapshot of
634 the situation when the session was started. Hence, %bookmark
639 the situation when the session was started. Hence, %bookmark
635 results are immediately accessible from othes sessions. The database
640 results are immediately accessible from othes sessions. The database
636 is also available for use by user extensions. See:
641 is also available for use by user extensions. See:
637 http://www.python.org/pypi/pickleshare
642 http://www.python.org/pypi/pickleshare
638
643
639 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
644 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
640
645
641 * aliases can now be %store'd
646 * aliases can now be %store'd
642
647
643 * path.py moved to Extensions so that pickleshare does not need
648 * path.py moved to Extensions so that pickleshare does not need
644 IPython-specific import. Extensions added to pythonpath right
649 IPython-specific import. Extensions added to pythonpath right
645 at __init__.
650 at __init__.
646
651
647 * iplib.py: ipalias deprecated/redundant; aliases are converted and
652 * iplib.py: ipalias deprecated/redundant; aliases are converted and
648 called with _ip.system and the pre-transformed command string.
653 called with _ip.system and the pre-transformed command string.
649
654
650 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
655 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
651
656
652 * IPython/iplib.py (interact): Fix that we were not catching
657 * IPython/iplib.py (interact): Fix that we were not catching
653 KeyboardInterrupt exceptions properly. I'm not quite sure why the
658 KeyboardInterrupt exceptions properly. I'm not quite sure why the
654 logic here had to change, but it's fixed now.
659 logic here had to change, but it's fixed now.
655
660
656 2006-01-29 Ville Vainio <vivainio@gmail.com>
661 2006-01-29 Ville Vainio <vivainio@gmail.com>
657
662
658 * iplib.py: Try to import pyreadline on Windows.
663 * iplib.py: Try to import pyreadline on Windows.
659
664
660 2006-01-27 Ville Vainio <vivainio@gmail.com>
665 2006-01-27 Ville Vainio <vivainio@gmail.com>
661
666
662 * iplib.py: Expose ipapi as _ip in builtin namespace.
667 * iplib.py: Expose ipapi as _ip in builtin namespace.
663 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
668 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
664 and ip_set_hook (-> _ip.set_hook) redundant. % and !
669 and ip_set_hook (-> _ip.set_hook) redundant. % and !
665 syntax now produce _ip.* variant of the commands.
670 syntax now produce _ip.* variant of the commands.
666
671
667 * "_ip.options().autoedit_syntax = 2" automatically throws
672 * "_ip.options().autoedit_syntax = 2" automatically throws
668 user to editor for syntax error correction without prompting.
673 user to editor for syntax error correction without prompting.
669
674
670 2006-01-27 Ville Vainio <vivainio@gmail.com>
675 2006-01-27 Ville Vainio <vivainio@gmail.com>
671
676
672 * ipmaker.py: Give "realistic" sys.argv for scripts (without
677 * ipmaker.py: Give "realistic" sys.argv for scripts (without
673 'ipython' at argv[0]) executed through command line.
678 'ipython' at argv[0]) executed through command line.
674 NOTE: this DEPRECATES calling ipython with multiple scripts
679 NOTE: this DEPRECATES calling ipython with multiple scripts
675 ("ipython a.py b.py c.py")
680 ("ipython a.py b.py c.py")
676
681
677 * iplib.py, hooks.py: Added configurable input prefilter,
682 * iplib.py, hooks.py: Added configurable input prefilter,
678 named 'input_prefilter'. See ext_rescapture.py for example
683 named 'input_prefilter'. See ext_rescapture.py for example
679 usage.
684 usage.
680
685
681 * ext_rescapture.py, Magic.py: Better system command output capture
686 * ext_rescapture.py, Magic.py: Better system command output capture
682 through 'var = !ls' (deprecates user-visible %sc). Same notation
687 through 'var = !ls' (deprecates user-visible %sc). Same notation
683 applies for magics, 'var = %alias' assigns alias list to var.
688 applies for magics, 'var = %alias' assigns alias list to var.
684
689
685 * ipapi.py: added meta() for accessing extension-usable data store.
690 * ipapi.py: added meta() for accessing extension-usable data store.
686
691
687 * iplib.py: added InteractiveShell.getapi(). New magics should be
692 * iplib.py: added InteractiveShell.getapi(). New magics should be
688 written doing self.getapi() instead of using the shell directly.
693 written doing self.getapi() instead of using the shell directly.
689
694
690 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
695 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
691 %store foo >> ~/myfoo.txt to store variables to files (in clean
696 %store foo >> ~/myfoo.txt to store variables to files (in clean
692 textual form, not a restorable pickle).
697 textual form, not a restorable pickle).
693
698
694 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
699 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
695
700
696 * usage.py, Magic.py: added %quickref
701 * usage.py, Magic.py: added %quickref
697
702
698 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
703 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
699
704
700 * GetoptErrors when invoking magics etc. with wrong args
705 * GetoptErrors when invoking magics etc. with wrong args
701 are now more helpful:
706 are now more helpful:
702 GetoptError: option -l not recognized (allowed: "qb" )
707 GetoptError: option -l not recognized (allowed: "qb" )
703
708
704 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
709 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
705
710
706 * IPython/demo.py (Demo.show): Flush stdout after each block, so
711 * IPython/demo.py (Demo.show): Flush stdout after each block, so
707 computationally intensive blocks don't appear to stall the demo.
712 computationally intensive blocks don't appear to stall the demo.
708
713
709 2006-01-24 Ville Vainio <vivainio@gmail.com>
714 2006-01-24 Ville Vainio <vivainio@gmail.com>
710
715
711 * iplib.py, hooks.py: 'result_display' hook can return a non-None
716 * iplib.py, hooks.py: 'result_display' hook can return a non-None
712 value to manipulate resulting history entry.
717 value to manipulate resulting history entry.
713
718
714 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
719 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
715 to instance methods of IPApi class, to make extending an embedded
720 to instance methods of IPApi class, to make extending an embedded
716 IPython feasible. See ext_rehashdir.py for example usage.
721 IPython feasible. See ext_rehashdir.py for example usage.
717
722
718 * Merged 1071-1076 from branches/0.7.1
723 * Merged 1071-1076 from branches/0.7.1
719
724
720
725
721 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
726 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
722
727
723 * tools/release (daystamp): Fix build tools to use the new
728 * tools/release (daystamp): Fix build tools to use the new
724 eggsetup.py script to build lightweight eggs.
729 eggsetup.py script to build lightweight eggs.
725
730
726 * Applied changesets 1062 and 1064 before 0.7.1 release.
731 * Applied changesets 1062 and 1064 before 0.7.1 release.
727
732
728 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
733 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
729 see the raw input history (without conversions like %ls ->
734 see the raw input history (without conversions like %ls ->
730 ipmagic("ls")). After a request from W. Stein, SAGE
735 ipmagic("ls")). After a request from W. Stein, SAGE
731 (http://modular.ucsd.edu/sage) developer. This information is
736 (http://modular.ucsd.edu/sage) developer. This information is
732 stored in the input_hist_raw attribute of the IPython instance, so
737 stored in the input_hist_raw attribute of the IPython instance, so
733 developers can access it if needed (it's an InputList instance).
738 developers can access it if needed (it's an InputList instance).
734
739
735 * Versionstring = 0.7.2.svn
740 * Versionstring = 0.7.2.svn
736
741
737 * eggsetup.py: A separate script for constructing eggs, creates
742 * eggsetup.py: A separate script for constructing eggs, creates
738 proper launch scripts even on Windows (an .exe file in
743 proper launch scripts even on Windows (an .exe file in
739 \python24\scripts).
744 \python24\scripts).
740
745
741 * ipapi.py: launch_new_instance, launch entry point needed for the
746 * ipapi.py: launch_new_instance, launch entry point needed for the
742 egg.
747 egg.
743
748
744 2006-01-23 Ville Vainio <vivainio@gmail.com>
749 2006-01-23 Ville Vainio <vivainio@gmail.com>
745
750
746 * Added %cpaste magic for pasting python code
751 * Added %cpaste magic for pasting python code
747
752
748 2006-01-22 Ville Vainio <vivainio@gmail.com>
753 2006-01-22 Ville Vainio <vivainio@gmail.com>
749
754
750 * Merge from branches/0.7.1 into trunk, revs 1052-1057
755 * Merge from branches/0.7.1 into trunk, revs 1052-1057
751
756
752 * Versionstring = 0.7.2.svn
757 * Versionstring = 0.7.2.svn
753
758
754 * eggsetup.py: A separate script for constructing eggs, creates
759 * eggsetup.py: A separate script for constructing eggs, creates
755 proper launch scripts even on Windows (an .exe file in
760 proper launch scripts even on Windows (an .exe file in
756 \python24\scripts).
761 \python24\scripts).
757
762
758 * ipapi.py: launch_new_instance, launch entry point needed for the
763 * ipapi.py: launch_new_instance, launch entry point needed for the
759 egg.
764 egg.
760
765
761 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
766 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
762
767
763 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
768 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
764 %pfile foo would print the file for foo even if it was a binary.
769 %pfile foo would print the file for foo even if it was a binary.
765 Now, extensions '.so' and '.dll' are skipped.
770 Now, extensions '.so' and '.dll' are skipped.
766
771
767 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
772 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
768 bug, where macros would fail in all threaded modes. I'm not 100%
773 bug, where macros would fail in all threaded modes. I'm not 100%
769 sure, so I'm going to put out an rc instead of making a release
774 sure, so I'm going to put out an rc instead of making a release
770 today, and wait for feedback for at least a few days.
775 today, and wait for feedback for at least a few days.
771
776
772 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
777 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
773 it...) the handling of pasting external code with autoindent on.
778 it...) the handling of pasting external code with autoindent on.
774 To get out of a multiline input, the rule will appear for most
779 To get out of a multiline input, the rule will appear for most
775 users unchanged: two blank lines or change the indent level
780 users unchanged: two blank lines or change the indent level
776 proposed by IPython. But there is a twist now: you can
781 proposed by IPython. But there is a twist now: you can
777 add/subtract only *one or two spaces*. If you add/subtract three
782 add/subtract only *one or two spaces*. If you add/subtract three
778 or more (unless you completely delete the line), IPython will
783 or more (unless you completely delete the line), IPython will
779 accept that line, and you'll need to enter a second one of pure
784 accept that line, and you'll need to enter a second one of pure
780 whitespace. I know it sounds complicated, but I can't find a
785 whitespace. I know it sounds complicated, but I can't find a
781 different solution that covers all the cases, with the right
786 different solution that covers all the cases, with the right
782 heuristics. Hopefully in actual use, nobody will really notice
787 heuristics. Hopefully in actual use, nobody will really notice
783 all these strange rules and things will 'just work'.
788 all these strange rules and things will 'just work'.
784
789
785 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
790 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
786
791
787 * IPython/iplib.py (interact): catch exceptions which can be
792 * IPython/iplib.py (interact): catch exceptions which can be
788 triggered asynchronously by signal handlers. Thanks to an
793 triggered asynchronously by signal handlers. Thanks to an
789 automatic crash report, submitted by Colin Kingsley
794 automatic crash report, submitted by Colin Kingsley
790 <tercel-AT-gentoo.org>.
795 <tercel-AT-gentoo.org>.
791
796
792 2006-01-20 Ville Vainio <vivainio@gmail.com>
797 2006-01-20 Ville Vainio <vivainio@gmail.com>
793
798
794 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
799 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
795 (%rehashdir, very useful, try it out) of how to extend ipython
800 (%rehashdir, very useful, try it out) of how to extend ipython
796 with new magics. Also added Extensions dir to pythonpath to make
801 with new magics. Also added Extensions dir to pythonpath to make
797 importing extensions easy.
802 importing extensions easy.
798
803
799 * %store now complains when trying to store interactively declared
804 * %store now complains when trying to store interactively declared
800 classes / instances of those classes.
805 classes / instances of those classes.
801
806
802 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
807 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
803 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
808 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
804 if they exist, and ipy_user_conf.py with some defaults is created for
809 if they exist, and ipy_user_conf.py with some defaults is created for
805 the user.
810 the user.
806
811
807 * Startup rehashing done by the config file, not InterpreterExec.
812 * Startup rehashing done by the config file, not InterpreterExec.
808 This means system commands are available even without selecting the
813 This means system commands are available even without selecting the
809 pysh profile. It's the sensible default after all.
814 pysh profile. It's the sensible default after all.
810
815
811 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
816 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
812
817
813 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
818 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
814 multiline code with autoindent on working. But I am really not
819 multiline code with autoindent on working. But I am really not
815 sure, so this needs more testing. Will commit a debug-enabled
820 sure, so this needs more testing. Will commit a debug-enabled
816 version for now, while I test it some more, so that Ville and
821 version for now, while I test it some more, so that Ville and
817 others may also catch any problems. Also made
822 others may also catch any problems. Also made
818 self.indent_current_str() a method, to ensure that there's no
823 self.indent_current_str() a method, to ensure that there's no
819 chance of the indent space count and the corresponding string
824 chance of the indent space count and the corresponding string
820 falling out of sync. All code needing the string should just call
825 falling out of sync. All code needing the string should just call
821 the method.
826 the method.
822
827
823 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
828 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
824
829
825 * IPython/Magic.py (magic_edit): fix check for when users don't
830 * IPython/Magic.py (magic_edit): fix check for when users don't
826 save their output files, the try/except was in the wrong section.
831 save their output files, the try/except was in the wrong section.
827
832
828 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
833 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
829
834
830 * IPython/Magic.py (magic_run): fix __file__ global missing from
835 * IPython/Magic.py (magic_run): fix __file__ global missing from
831 script's namespace when executed via %run. After a report by
836 script's namespace when executed via %run. After a report by
832 Vivian.
837 Vivian.
833
838
834 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
839 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
835 when using python 2.4. The parent constructor changed in 2.4, and
840 when using python 2.4. The parent constructor changed in 2.4, and
836 we need to track it directly (we can't call it, as it messes up
841 we need to track it directly (we can't call it, as it messes up
837 readline and tab-completion inside our pdb would stop working).
842 readline and tab-completion inside our pdb would stop working).
838 After a bug report by R. Bernstein <rocky-AT-panix.com>.
843 After a bug report by R. Bernstein <rocky-AT-panix.com>.
839
844
840 2006-01-16 Ville Vainio <vivainio@gmail.com>
845 2006-01-16 Ville Vainio <vivainio@gmail.com>
841
846
842 * Ipython/magic.py: Reverted back to old %edit functionality
847 * Ipython/magic.py: Reverted back to old %edit functionality
843 that returns file contents on exit.
848 that returns file contents on exit.
844
849
845 * IPython/path.py: Added Jason Orendorff's "path" module to
850 * IPython/path.py: Added Jason Orendorff's "path" module to
846 IPython tree, http://www.jorendorff.com/articles/python/path/.
851 IPython tree, http://www.jorendorff.com/articles/python/path/.
847 You can get path objects conveniently through %sc, and !!, e.g.:
852 You can get path objects conveniently through %sc, and !!, e.g.:
848 sc files=ls
853 sc files=ls
849 for p in files.paths: # or files.p
854 for p in files.paths: # or files.p
850 print p,p.mtime
855 print p,p.mtime
851
856
852 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
857 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
853 now work again without considering the exclusion regexp -
858 now work again without considering the exclusion regexp -
854 hence, things like ',foo my/path' turn to 'foo("my/path")'
859 hence, things like ',foo my/path' turn to 'foo("my/path")'
855 instead of syntax error.
860 instead of syntax error.
856
861
857
862
858 2006-01-14 Ville Vainio <vivainio@gmail.com>
863 2006-01-14 Ville Vainio <vivainio@gmail.com>
859
864
860 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
865 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
861 ipapi decorators for python 2.4 users, options() provides access to rc
866 ipapi decorators for python 2.4 users, options() provides access to rc
862 data.
867 data.
863
868
864 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
869 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
865 as path separators (even on Linux ;-). Space character after
870 as path separators (even on Linux ;-). Space character after
866 backslash (as yielded by tab completer) is still space;
871 backslash (as yielded by tab completer) is still space;
867 "%cd long\ name" works as expected.
872 "%cd long\ name" works as expected.
868
873
869 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
874 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
870 as "chain of command", with priority. API stays the same,
875 as "chain of command", with priority. API stays the same,
871 TryNext exception raised by a hook function signals that
876 TryNext exception raised by a hook function signals that
872 current hook failed and next hook should try handling it, as
877 current hook failed and next hook should try handling it, as
873 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
878 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
874 requested configurable display hook, which is now implemented.
879 requested configurable display hook, which is now implemented.
875
880
876 2006-01-13 Ville Vainio <vivainio@gmail.com>
881 2006-01-13 Ville Vainio <vivainio@gmail.com>
877
882
878 * IPython/platutils*.py: platform specific utility functions,
883 * IPython/platutils*.py: platform specific utility functions,
879 so far only set_term_title is implemented (change terminal
884 so far only set_term_title is implemented (change terminal
880 label in windowing systems). %cd now changes the title to
885 label in windowing systems). %cd now changes the title to
881 current dir.
886 current dir.
882
887
883 * IPython/Release.py: Added myself to "authors" list,
888 * IPython/Release.py: Added myself to "authors" list,
884 had to create new files.
889 had to create new files.
885
890
886 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
891 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
887 shell escape; not a known bug but had potential to be one in the
892 shell escape; not a known bug but had potential to be one in the
888 future.
893 future.
889
894
890 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
895 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
891 extension API for IPython! See the module for usage example. Fix
896 extension API for IPython! See the module for usage example. Fix
892 OInspect for docstring-less magic functions.
897 OInspect for docstring-less magic functions.
893
898
894
899
895 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
900 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
896
901
897 * IPython/iplib.py (raw_input): temporarily deactivate all
902 * IPython/iplib.py (raw_input): temporarily deactivate all
898 attempts at allowing pasting of code with autoindent on. It
903 attempts at allowing pasting of code with autoindent on. It
899 introduced bugs (reported by Prabhu) and I can't seem to find a
904 introduced bugs (reported by Prabhu) and I can't seem to find a
900 robust combination which works in all cases. Will have to revisit
905 robust combination which works in all cases. Will have to revisit
901 later.
906 later.
902
907
903 * IPython/genutils.py: remove isspace() function. We've dropped
908 * IPython/genutils.py: remove isspace() function. We've dropped
904 2.2 compatibility, so it's OK to use the string method.
909 2.2 compatibility, so it's OK to use the string method.
905
910
906 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
911 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
907
912
908 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
913 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
909 matching what NOT to autocall on, to include all python binary
914 matching what NOT to autocall on, to include all python binary
910 operators (including things like 'and', 'or', 'is' and 'in').
915 operators (including things like 'and', 'or', 'is' and 'in').
911 Prompted by a bug report on 'foo & bar', but I realized we had
916 Prompted by a bug report on 'foo & bar', but I realized we had
912 many more potential bug cases with other operators. The regexp is
917 many more potential bug cases with other operators. The regexp is
913 self.re_exclude_auto, it's fairly commented.
918 self.re_exclude_auto, it's fairly commented.
914
919
915 2006-01-12 Ville Vainio <vivainio@gmail.com>
920 2006-01-12 Ville Vainio <vivainio@gmail.com>
916
921
917 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
922 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
918 Prettified and hardened string/backslash quoting with ipsystem(),
923 Prettified and hardened string/backslash quoting with ipsystem(),
919 ipalias() and ipmagic(). Now even \ characters are passed to
924 ipalias() and ipmagic(). Now even \ characters are passed to
920 %magics, !shell escapes and aliases exactly as they are in the
925 %magics, !shell escapes and aliases exactly as they are in the
921 ipython command line. Should improve backslash experience,
926 ipython command line. Should improve backslash experience,
922 particularly in Windows (path delimiter for some commands that
927 particularly in Windows (path delimiter for some commands that
923 won't understand '/'), but Unix benefits as well (regexps). %cd
928 won't understand '/'), but Unix benefits as well (regexps). %cd
924 magic still doesn't support backslash path delimiters, though. Also
929 magic still doesn't support backslash path delimiters, though. Also
925 deleted all pretense of supporting multiline command strings in
930 deleted all pretense of supporting multiline command strings in
926 !system or %magic commands. Thanks to Jerry McRae for suggestions.
931 !system or %magic commands. Thanks to Jerry McRae for suggestions.
927
932
928 * doc/build_doc_instructions.txt added. Documentation on how to
933 * doc/build_doc_instructions.txt added. Documentation on how to
929 use doc/update_manual.py, added yesterday. Both files contributed
934 use doc/update_manual.py, added yesterday. Both files contributed
930 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
935 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
931 doc/*.sh for deprecation at a later date.
936 doc/*.sh for deprecation at a later date.
932
937
933 * /ipython.py Added ipython.py to root directory for
938 * /ipython.py Added ipython.py to root directory for
934 zero-installation (tar xzvf ipython.tgz; cd ipython; python
939 zero-installation (tar xzvf ipython.tgz; cd ipython; python
935 ipython.py) and development convenience (no need to keep doing
940 ipython.py) and development convenience (no need to keep doing
936 "setup.py install" between changes).
941 "setup.py install" between changes).
937
942
938 * Made ! and !! shell escapes work (again) in multiline expressions:
943 * Made ! and !! shell escapes work (again) in multiline expressions:
939 if 1:
944 if 1:
940 !ls
945 !ls
941 !!ls
946 !!ls
942
947
943 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
948 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
944
949
945 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
950 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
946 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
951 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
947 module in case-insensitive installation. Was causing crashes
952 module in case-insensitive installation. Was causing crashes
948 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
953 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
949
954
950 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
955 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
951 <marienz-AT-gentoo.org>, closes
956 <marienz-AT-gentoo.org>, closes
952 http://www.scipy.net/roundup/ipython/issue51.
957 http://www.scipy.net/roundup/ipython/issue51.
953
958
954 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
959 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
955
960
956 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
961 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
957 problem of excessive CPU usage under *nix and keyboard lag under
962 problem of excessive CPU usage under *nix and keyboard lag under
958 win32.
963 win32.
959
964
960 2006-01-10 *** Released version 0.7.0
965 2006-01-10 *** Released version 0.7.0
961
966
962 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
967 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
963
968
964 * IPython/Release.py (revision): tag version number to 0.7.0,
969 * IPython/Release.py (revision): tag version number to 0.7.0,
965 ready for release.
970 ready for release.
966
971
967 * IPython/Magic.py (magic_edit): Add print statement to %edit so
972 * IPython/Magic.py (magic_edit): Add print statement to %edit so
968 it informs the user of the name of the temp. file used. This can
973 it informs the user of the name of the temp. file used. This can
969 help if you decide later to reuse that same file, so you know
974 help if you decide later to reuse that same file, so you know
970 where to copy the info from.
975 where to copy the info from.
971
976
972 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
977 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
973
978
974 * setup_bdist_egg.py: little script to build an egg. Added
979 * setup_bdist_egg.py: little script to build an egg. Added
975 support in the release tools as well.
980 support in the release tools as well.
976
981
977 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
982 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
978
983
979 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
984 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
980 version selection (new -wxversion command line and ipythonrc
985 version selection (new -wxversion command line and ipythonrc
981 parameter). Patch contributed by Arnd Baecker
986 parameter). Patch contributed by Arnd Baecker
982 <arnd.baecker-AT-web.de>.
987 <arnd.baecker-AT-web.de>.
983
988
984 * IPython/iplib.py (embed_mainloop): fix tab-completion in
989 * IPython/iplib.py (embed_mainloop): fix tab-completion in
985 embedded instances, for variables defined at the interactive
990 embedded instances, for variables defined at the interactive
986 prompt of the embedded ipython. Reported by Arnd.
991 prompt of the embedded ipython. Reported by Arnd.
987
992
988 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
993 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
989 it can be used as a (stateful) toggle, or with a direct parameter.
994 it can be used as a (stateful) toggle, or with a direct parameter.
990
995
991 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
996 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
992 could be triggered in certain cases and cause the traceback
997 could be triggered in certain cases and cause the traceback
993 printer not to work.
998 printer not to work.
994
999
995 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1000 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
996
1001
997 * IPython/iplib.py (_should_recompile): Small fix, closes
1002 * IPython/iplib.py (_should_recompile): Small fix, closes
998 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1003 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
999
1004
1000 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1005 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1001
1006
1002 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1007 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1003 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1008 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1004 Moad for help with tracking it down.
1009 Moad for help with tracking it down.
1005
1010
1006 * IPython/iplib.py (handle_auto): fix autocall handling for
1011 * IPython/iplib.py (handle_auto): fix autocall handling for
1007 objects which support BOTH __getitem__ and __call__ (so that f [x]
1012 objects which support BOTH __getitem__ and __call__ (so that f [x]
1008 is left alone, instead of becoming f([x]) automatically).
1013 is left alone, instead of becoming f([x]) automatically).
1009
1014
1010 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1015 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1011 Ville's patch.
1016 Ville's patch.
1012
1017
1013 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1018 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1014
1019
1015 * IPython/iplib.py (handle_auto): changed autocall semantics to
1020 * IPython/iplib.py (handle_auto): changed autocall semantics to
1016 include 'smart' mode, where the autocall transformation is NOT
1021 include 'smart' mode, where the autocall transformation is NOT
1017 applied if there are no arguments on the line. This allows you to
1022 applied if there are no arguments on the line. This allows you to
1018 just type 'foo' if foo is a callable to see its internal form,
1023 just type 'foo' if foo is a callable to see its internal form,
1019 instead of having it called with no arguments (typically a
1024 instead of having it called with no arguments (typically a
1020 mistake). The old 'full' autocall still exists: for that, you
1025 mistake). The old 'full' autocall still exists: for that, you
1021 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1026 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1022
1027
1023 * IPython/completer.py (Completer.attr_matches): add
1028 * IPython/completer.py (Completer.attr_matches): add
1024 tab-completion support for Enthoughts' traits. After a report by
1029 tab-completion support for Enthoughts' traits. After a report by
1025 Arnd and a patch by Prabhu.
1030 Arnd and a patch by Prabhu.
1026
1031
1027 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1032 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1028
1033
1029 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1034 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1030 Schmolck's patch to fix inspect.getinnerframes().
1035 Schmolck's patch to fix inspect.getinnerframes().
1031
1036
1032 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1037 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1033 for embedded instances, regarding handling of namespaces and items
1038 for embedded instances, regarding handling of namespaces and items
1034 added to the __builtin__ one. Multiple embedded instances and
1039 added to the __builtin__ one. Multiple embedded instances and
1035 recursive embeddings should work better now (though I'm not sure
1040 recursive embeddings should work better now (though I'm not sure
1036 I've got all the corner cases fixed, that code is a bit of a brain
1041 I've got all the corner cases fixed, that code is a bit of a brain
1037 twister).
1042 twister).
1038
1043
1039 * IPython/Magic.py (magic_edit): added support to edit in-memory
1044 * IPython/Magic.py (magic_edit): added support to edit in-memory
1040 macros (automatically creates the necessary temp files). %edit
1045 macros (automatically creates the necessary temp files). %edit
1041 also doesn't return the file contents anymore, it's just noise.
1046 also doesn't return the file contents anymore, it's just noise.
1042
1047
1043 * IPython/completer.py (Completer.attr_matches): revert change to
1048 * IPython/completer.py (Completer.attr_matches): revert change to
1044 complete only on attributes listed in __all__. I realized it
1049 complete only on attributes listed in __all__. I realized it
1045 cripples the tab-completion system as a tool for exploring the
1050 cripples the tab-completion system as a tool for exploring the
1046 internals of unknown libraries (it renders any non-__all__
1051 internals of unknown libraries (it renders any non-__all__
1047 attribute off-limits). I got bit by this when trying to see
1052 attribute off-limits). I got bit by this when trying to see
1048 something inside the dis module.
1053 something inside the dis module.
1049
1054
1050 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1055 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1051
1056
1052 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1057 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1053 namespace for users and extension writers to hold data in. This
1058 namespace for users and extension writers to hold data in. This
1054 follows the discussion in
1059 follows the discussion in
1055 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1060 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1056
1061
1057 * IPython/completer.py (IPCompleter.complete): small patch to help
1062 * IPython/completer.py (IPCompleter.complete): small patch to help
1058 tab-completion under Emacs, after a suggestion by John Barnard
1063 tab-completion under Emacs, after a suggestion by John Barnard
1059 <barnarj-AT-ccf.org>.
1064 <barnarj-AT-ccf.org>.
1060
1065
1061 * IPython/Magic.py (Magic.extract_input_slices): added support for
1066 * IPython/Magic.py (Magic.extract_input_slices): added support for
1062 the slice notation in magics to use N-M to represent numbers N...M
1067 the slice notation in magics to use N-M to represent numbers N...M
1063 (closed endpoints). This is used by %macro and %save.
1068 (closed endpoints). This is used by %macro and %save.
1064
1069
1065 * IPython/completer.py (Completer.attr_matches): for modules which
1070 * IPython/completer.py (Completer.attr_matches): for modules which
1066 define __all__, complete only on those. After a patch by Jeffrey
1071 define __all__, complete only on those. After a patch by Jeffrey
1067 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1072 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1068 speed up this routine.
1073 speed up this routine.
1069
1074
1070 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1075 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1071 don't know if this is the end of it, but the behavior now is
1076 don't know if this is the end of it, but the behavior now is
1072 certainly much more correct. Note that coupled with macros,
1077 certainly much more correct. Note that coupled with macros,
1073 slightly surprising (at first) behavior may occur: a macro will in
1078 slightly surprising (at first) behavior may occur: a macro will in
1074 general expand to multiple lines of input, so upon exiting, the
1079 general expand to multiple lines of input, so upon exiting, the
1075 in/out counters will both be bumped by the corresponding amount
1080 in/out counters will both be bumped by the corresponding amount
1076 (as if the macro's contents had been typed interactively). Typing
1081 (as if the macro's contents had been typed interactively). Typing
1077 %hist will reveal the intermediate (silently processed) lines.
1082 %hist will reveal the intermediate (silently processed) lines.
1078
1083
1079 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1084 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1080 pickle to fail (%run was overwriting __main__ and not restoring
1085 pickle to fail (%run was overwriting __main__ and not restoring
1081 it, but pickle relies on __main__ to operate).
1086 it, but pickle relies on __main__ to operate).
1082
1087
1083 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1088 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1084 using properties, but forgot to make the main InteractiveShell
1089 using properties, but forgot to make the main InteractiveShell
1085 class a new-style class. Properties fail silently, and
1090 class a new-style class. Properties fail silently, and
1086 mysteriously, with old-style class (getters work, but
1091 mysteriously, with old-style class (getters work, but
1087 setters don't do anything).
1092 setters don't do anything).
1088
1093
1089 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1094 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1090
1095
1091 * IPython/Magic.py (magic_history): fix history reporting bug (I
1096 * IPython/Magic.py (magic_history): fix history reporting bug (I
1092 know some nasties are still there, I just can't seem to find a
1097 know some nasties are still there, I just can't seem to find a
1093 reproducible test case to track them down; the input history is
1098 reproducible test case to track them down; the input history is
1094 falling out of sync...)
1099 falling out of sync...)
1095
1100
1096 * IPython/iplib.py (handle_shell_escape): fix bug where both
1101 * IPython/iplib.py (handle_shell_escape): fix bug where both
1097 aliases and system accesses where broken for indented code (such
1102 aliases and system accesses where broken for indented code (such
1098 as loops).
1103 as loops).
1099
1104
1100 * IPython/genutils.py (shell): fix small but critical bug for
1105 * IPython/genutils.py (shell): fix small but critical bug for
1101 win32 system access.
1106 win32 system access.
1102
1107
1103 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1108 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1104
1109
1105 * IPython/iplib.py (showtraceback): remove use of the
1110 * IPython/iplib.py (showtraceback): remove use of the
1106 sys.last_{type/value/traceback} structures, which are non
1111 sys.last_{type/value/traceback} structures, which are non
1107 thread-safe.
1112 thread-safe.
1108 (_prefilter): change control flow to ensure that we NEVER
1113 (_prefilter): change control flow to ensure that we NEVER
1109 introspect objects when autocall is off. This will guarantee that
1114 introspect objects when autocall is off. This will guarantee that
1110 having an input line of the form 'x.y', where access to attribute
1115 having an input line of the form 'x.y', where access to attribute
1111 'y' has side effects, doesn't trigger the side effect TWICE. It
1116 'y' has side effects, doesn't trigger the side effect TWICE. It
1112 is important to note that, with autocall on, these side effects
1117 is important to note that, with autocall on, these side effects
1113 can still happen.
1118 can still happen.
1114 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1119 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1115 trio. IPython offers these three kinds of special calls which are
1120 trio. IPython offers these three kinds of special calls which are
1116 not python code, and it's a good thing to have their call method
1121 not python code, and it's a good thing to have their call method
1117 be accessible as pure python functions (not just special syntax at
1122 be accessible as pure python functions (not just special syntax at
1118 the command line). It gives us a better internal implementation
1123 the command line). It gives us a better internal implementation
1119 structure, as well as exposing these for user scripting more
1124 structure, as well as exposing these for user scripting more
1120 cleanly.
1125 cleanly.
1121
1126
1122 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1127 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1123 file. Now that they'll be more likely to be used with the
1128 file. Now that they'll be more likely to be used with the
1124 persistance system (%store), I want to make sure their module path
1129 persistance system (%store), I want to make sure their module path
1125 doesn't change in the future, so that we don't break things for
1130 doesn't change in the future, so that we don't break things for
1126 users' persisted data.
1131 users' persisted data.
1127
1132
1128 * IPython/iplib.py (autoindent_update): move indentation
1133 * IPython/iplib.py (autoindent_update): move indentation
1129 management into the _text_ processing loop, not the keyboard
1134 management into the _text_ processing loop, not the keyboard
1130 interactive one. This is necessary to correctly process non-typed
1135 interactive one. This is necessary to correctly process non-typed
1131 multiline input (such as macros).
1136 multiline input (such as macros).
1132
1137
1133 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1138 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1134 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1139 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1135 which was producing problems in the resulting manual.
1140 which was producing problems in the resulting manual.
1136 (magic_whos): improve reporting of instances (show their class,
1141 (magic_whos): improve reporting of instances (show their class,
1137 instead of simply printing 'instance' which isn't terribly
1142 instead of simply printing 'instance' which isn't terribly
1138 informative).
1143 informative).
1139
1144
1140 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1145 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1141 (minor mods) to support network shares under win32.
1146 (minor mods) to support network shares under win32.
1142
1147
1143 * IPython/winconsole.py (get_console_size): add new winconsole
1148 * IPython/winconsole.py (get_console_size): add new winconsole
1144 module and fixes to page_dumb() to improve its behavior under
1149 module and fixes to page_dumb() to improve its behavior under
1145 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1150 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1146
1151
1147 * IPython/Magic.py (Macro): simplified Macro class to just
1152 * IPython/Magic.py (Macro): simplified Macro class to just
1148 subclass list. We've had only 2.2 compatibility for a very long
1153 subclass list. We've had only 2.2 compatibility for a very long
1149 time, yet I was still avoiding subclassing the builtin types. No
1154 time, yet I was still avoiding subclassing the builtin types. No
1150 more (I'm also starting to use properties, though I won't shift to
1155 more (I'm also starting to use properties, though I won't shift to
1151 2.3-specific features quite yet).
1156 2.3-specific features quite yet).
1152 (magic_store): added Ville's patch for lightweight variable
1157 (magic_store): added Ville's patch for lightweight variable
1153 persistence, after a request on the user list by Matt Wilkie
1158 persistence, after a request on the user list by Matt Wilkie
1154 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1159 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1155 details.
1160 details.
1156
1161
1157 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1162 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1158 changed the default logfile name from 'ipython.log' to
1163 changed the default logfile name from 'ipython.log' to
1159 'ipython_log.py'. These logs are real python files, and now that
1164 'ipython_log.py'. These logs are real python files, and now that
1160 we have much better multiline support, people are more likely to
1165 we have much better multiline support, people are more likely to
1161 want to use them as such. Might as well name them correctly.
1166 want to use them as such. Might as well name them correctly.
1162
1167
1163 * IPython/Magic.py: substantial cleanup. While we can't stop
1168 * IPython/Magic.py: substantial cleanup. While we can't stop
1164 using magics as mixins, due to the existing customizations 'out
1169 using magics as mixins, due to the existing customizations 'out
1165 there' which rely on the mixin naming conventions, at least I
1170 there' which rely on the mixin naming conventions, at least I
1166 cleaned out all cross-class name usage. So once we are OK with
1171 cleaned out all cross-class name usage. So once we are OK with
1167 breaking compatibility, the two systems can be separated.
1172 breaking compatibility, the two systems can be separated.
1168
1173
1169 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1174 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1170 anymore, and the class is a fair bit less hideous as well. New
1175 anymore, and the class is a fair bit less hideous as well. New
1171 features were also introduced: timestamping of input, and logging
1176 features were also introduced: timestamping of input, and logging
1172 of output results. These are user-visible with the -t and -o
1177 of output results. These are user-visible with the -t and -o
1173 options to %logstart. Closes
1178 options to %logstart. Closes
1174 http://www.scipy.net/roundup/ipython/issue11 and a request by
1179 http://www.scipy.net/roundup/ipython/issue11 and a request by
1175 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1180 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1176
1181
1177 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1182 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1178
1183
1179 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1184 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1180 better handle backslashes in paths. See the thread 'More Windows
1185 better handle backslashes in paths. See the thread 'More Windows
1181 questions part 2 - \/ characters revisited' on the iypthon user
1186 questions part 2 - \/ characters revisited' on the iypthon user
1182 list:
1187 list:
1183 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1188 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1184
1189
1185 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1190 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1186
1191
1187 (InteractiveShell.__init__): change threaded shells to not use the
1192 (InteractiveShell.__init__): change threaded shells to not use the
1188 ipython crash handler. This was causing more problems than not,
1193 ipython crash handler. This was causing more problems than not,
1189 as exceptions in the main thread (GUI code, typically) would
1194 as exceptions in the main thread (GUI code, typically) would
1190 always show up as a 'crash', when they really weren't.
1195 always show up as a 'crash', when they really weren't.
1191
1196
1192 The colors and exception mode commands (%colors/%xmode) have been
1197 The colors and exception mode commands (%colors/%xmode) have been
1193 synchronized to also take this into account, so users can get
1198 synchronized to also take this into account, so users can get
1194 verbose exceptions for their threaded code as well. I also added
1199 verbose exceptions for their threaded code as well. I also added
1195 support for activating pdb inside this exception handler as well,
1200 support for activating pdb inside this exception handler as well,
1196 so now GUI authors can use IPython's enhanced pdb at runtime.
1201 so now GUI authors can use IPython's enhanced pdb at runtime.
1197
1202
1198 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1203 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1199 true by default, and add it to the shipped ipythonrc file. Since
1204 true by default, and add it to the shipped ipythonrc file. Since
1200 this asks the user before proceeding, I think it's OK to make it
1205 this asks the user before proceeding, I think it's OK to make it
1201 true by default.
1206 true by default.
1202
1207
1203 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1208 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1204 of the previous special-casing of input in the eval loop. I think
1209 of the previous special-casing of input in the eval loop. I think
1205 this is cleaner, as they really are commands and shouldn't have
1210 this is cleaner, as they really are commands and shouldn't have
1206 a special role in the middle of the core code.
1211 a special role in the middle of the core code.
1207
1212
1208 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1213 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1209
1214
1210 * IPython/iplib.py (edit_syntax_error): added support for
1215 * IPython/iplib.py (edit_syntax_error): added support for
1211 automatically reopening the editor if the file had a syntax error
1216 automatically reopening the editor if the file had a syntax error
1212 in it. Thanks to scottt who provided the patch at:
1217 in it. Thanks to scottt who provided the patch at:
1213 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1218 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1214 version committed).
1219 version committed).
1215
1220
1216 * IPython/iplib.py (handle_normal): add suport for multi-line
1221 * IPython/iplib.py (handle_normal): add suport for multi-line
1217 input with emtpy lines. This fixes
1222 input with emtpy lines. This fixes
1218 http://www.scipy.net/roundup/ipython/issue43 and a similar
1223 http://www.scipy.net/roundup/ipython/issue43 and a similar
1219 discussion on the user list.
1224 discussion on the user list.
1220
1225
1221 WARNING: a behavior change is necessarily introduced to support
1226 WARNING: a behavior change is necessarily introduced to support
1222 blank lines: now a single blank line with whitespace does NOT
1227 blank lines: now a single blank line with whitespace does NOT
1223 break the input loop, which means that when autoindent is on, by
1228 break the input loop, which means that when autoindent is on, by
1224 default hitting return on the next (indented) line does NOT exit.
1229 default hitting return on the next (indented) line does NOT exit.
1225
1230
1226 Instead, to exit a multiline input you can either have:
1231 Instead, to exit a multiline input you can either have:
1227
1232
1228 - TWO whitespace lines (just hit return again), or
1233 - TWO whitespace lines (just hit return again), or
1229 - a single whitespace line of a different length than provided
1234 - a single whitespace line of a different length than provided
1230 by the autoindent (add or remove a space).
1235 by the autoindent (add or remove a space).
1231
1236
1232 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1237 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1233 module to better organize all readline-related functionality.
1238 module to better organize all readline-related functionality.
1234 I've deleted FlexCompleter and put all completion clases here.
1239 I've deleted FlexCompleter and put all completion clases here.
1235
1240
1236 * IPython/iplib.py (raw_input): improve indentation management.
1241 * IPython/iplib.py (raw_input): improve indentation management.
1237 It is now possible to paste indented code with autoindent on, and
1242 It is now possible to paste indented code with autoindent on, and
1238 the code is interpreted correctly (though it still looks bad on
1243 the code is interpreted correctly (though it still looks bad on
1239 screen, due to the line-oriented nature of ipython).
1244 screen, due to the line-oriented nature of ipython).
1240 (MagicCompleter.complete): change behavior so that a TAB key on an
1245 (MagicCompleter.complete): change behavior so that a TAB key on an
1241 otherwise empty line actually inserts a tab, instead of completing
1246 otherwise empty line actually inserts a tab, instead of completing
1242 on the entire global namespace. This makes it easier to use the
1247 on the entire global namespace. This makes it easier to use the
1243 TAB key for indentation. After a request by Hans Meine
1248 TAB key for indentation. After a request by Hans Meine
1244 <hans_meine-AT-gmx.net>
1249 <hans_meine-AT-gmx.net>
1245 (_prefilter): add support so that typing plain 'exit' or 'quit'
1250 (_prefilter): add support so that typing plain 'exit' or 'quit'
1246 does a sensible thing. Originally I tried to deviate as little as
1251 does a sensible thing. Originally I tried to deviate as little as
1247 possible from the default python behavior, but even that one may
1252 possible from the default python behavior, but even that one may
1248 change in this direction (thread on python-dev to that effect).
1253 change in this direction (thread on python-dev to that effect).
1249 Regardless, ipython should do the right thing even if CPython's
1254 Regardless, ipython should do the right thing even if CPython's
1250 '>>>' prompt doesn't.
1255 '>>>' prompt doesn't.
1251 (InteractiveShell): removed subclassing code.InteractiveConsole
1256 (InteractiveShell): removed subclassing code.InteractiveConsole
1252 class. By now we'd overridden just about all of its methods: I've
1257 class. By now we'd overridden just about all of its methods: I've
1253 copied the remaining two over, and now ipython is a standalone
1258 copied the remaining two over, and now ipython is a standalone
1254 class. This will provide a clearer picture for the chainsaw
1259 class. This will provide a clearer picture for the chainsaw
1255 branch refactoring.
1260 branch refactoring.
1256
1261
1257 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1262 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1258
1263
1259 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1264 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1260 failures for objects which break when dir() is called on them.
1265 failures for objects which break when dir() is called on them.
1261
1266
1262 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1267 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1263 distinct local and global namespaces in the completer API. This
1268 distinct local and global namespaces in the completer API. This
1264 change allows us to properly handle completion with distinct
1269 change allows us to properly handle completion with distinct
1265 scopes, including in embedded instances (this had never really
1270 scopes, including in embedded instances (this had never really
1266 worked correctly).
1271 worked correctly).
1267
1272
1268 Note: this introduces a change in the constructor for
1273 Note: this introduces a change in the constructor for
1269 MagicCompleter, as a new global_namespace parameter is now the
1274 MagicCompleter, as a new global_namespace parameter is now the
1270 second argument (the others were bumped one position).
1275 second argument (the others were bumped one position).
1271
1276
1272 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1277 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1273
1278
1274 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1279 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1275 embedded instances (which can be done now thanks to Vivian's
1280 embedded instances (which can be done now thanks to Vivian's
1276 frame-handling fixes for pdb).
1281 frame-handling fixes for pdb).
1277 (InteractiveShell.__init__): Fix namespace handling problem in
1282 (InteractiveShell.__init__): Fix namespace handling problem in
1278 embedded instances. We were overwriting __main__ unconditionally,
1283 embedded instances. We were overwriting __main__ unconditionally,
1279 and this should only be done for 'full' (non-embedded) IPython;
1284 and this should only be done for 'full' (non-embedded) IPython;
1280 embedded instances must respect the caller's __main__. Thanks to
1285 embedded instances must respect the caller's __main__. Thanks to
1281 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1286 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1282
1287
1283 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1288 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1284
1289
1285 * setup.py: added download_url to setup(). This registers the
1290 * setup.py: added download_url to setup(). This registers the
1286 download address at PyPI, which is not only useful to humans
1291 download address at PyPI, which is not only useful to humans
1287 browsing the site, but is also picked up by setuptools (the Eggs
1292 browsing the site, but is also picked up by setuptools (the Eggs
1288 machinery). Thanks to Ville and R. Kern for the info/discussion
1293 machinery). Thanks to Ville and R. Kern for the info/discussion
1289 on this.
1294 on this.
1290
1295
1291 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1296 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1292
1297
1293 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1298 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1294 This brings a lot of nice functionality to the pdb mode, which now
1299 This brings a lot of nice functionality to the pdb mode, which now
1295 has tab-completion, syntax highlighting, and better stack handling
1300 has tab-completion, syntax highlighting, and better stack handling
1296 than before. Many thanks to Vivian De Smedt
1301 than before. Many thanks to Vivian De Smedt
1297 <vivian-AT-vdesmedt.com> for the original patches.
1302 <vivian-AT-vdesmedt.com> for the original patches.
1298
1303
1299 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1304 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1300
1305
1301 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1306 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1302 sequence to consistently accept the banner argument. The
1307 sequence to consistently accept the banner argument. The
1303 inconsistency was tripping SAGE, thanks to Gary Zablackis
1308 inconsistency was tripping SAGE, thanks to Gary Zablackis
1304 <gzabl-AT-yahoo.com> for the report.
1309 <gzabl-AT-yahoo.com> for the report.
1305
1310
1306 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1311 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1307
1312
1308 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1313 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1309 Fix bug where a naked 'alias' call in the ipythonrc file would
1314 Fix bug where a naked 'alias' call in the ipythonrc file would
1310 cause a crash. Bug reported by Jorgen Stenarson.
1315 cause a crash. Bug reported by Jorgen Stenarson.
1311
1316
1312 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1317 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1313
1318
1314 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1319 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1315 startup time.
1320 startup time.
1316
1321
1317 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1322 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1318 instances had introduced a bug with globals in normal code. Now
1323 instances had introduced a bug with globals in normal code. Now
1319 it's working in all cases.
1324 it's working in all cases.
1320
1325
1321 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1326 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1322 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1327 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1323 has been introduced to set the default case sensitivity of the
1328 has been introduced to set the default case sensitivity of the
1324 searches. Users can still select either mode at runtime on a
1329 searches. Users can still select either mode at runtime on a
1325 per-search basis.
1330 per-search basis.
1326
1331
1327 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1332 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1328
1333
1329 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1334 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1330 attributes in wildcard searches for subclasses. Modified version
1335 attributes in wildcard searches for subclasses. Modified version
1331 of a patch by Jorgen.
1336 of a patch by Jorgen.
1332
1337
1333 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1338 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1334
1339
1335 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1340 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1336 embedded instances. I added a user_global_ns attribute to the
1341 embedded instances. I added a user_global_ns attribute to the
1337 InteractiveShell class to handle this.
1342 InteractiveShell class to handle this.
1338
1343
1339 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1344 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1340
1345
1341 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1346 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1342 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1347 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1343 (reported under win32, but may happen also in other platforms).
1348 (reported under win32, but may happen also in other platforms).
1344 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1349 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1345
1350
1346 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1351 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1347
1352
1348 * IPython/Magic.py (magic_psearch): new support for wildcard
1353 * IPython/Magic.py (magic_psearch): new support for wildcard
1349 patterns. Now, typing ?a*b will list all names which begin with a
1354 patterns. Now, typing ?a*b will list all names which begin with a
1350 and end in b, for example. The %psearch magic has full
1355 and end in b, for example. The %psearch magic has full
1351 docstrings. Many thanks to JΓΆrgen Stenarson
1356 docstrings. Many thanks to JΓΆrgen Stenarson
1352 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1357 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1353 implementing this functionality.
1358 implementing this functionality.
1354
1359
1355 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1360 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1356
1361
1357 * Manual: fixed long-standing annoyance of double-dashes (as in
1362 * Manual: fixed long-standing annoyance of double-dashes (as in
1358 --prefix=~, for example) being stripped in the HTML version. This
1363 --prefix=~, for example) being stripped in the HTML version. This
1359 is a latex2html bug, but a workaround was provided. Many thanks
1364 is a latex2html bug, but a workaround was provided. Many thanks
1360 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1365 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1361 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1366 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1362 rolling. This seemingly small issue had tripped a number of users
1367 rolling. This seemingly small issue had tripped a number of users
1363 when first installing, so I'm glad to see it gone.
1368 when first installing, so I'm glad to see it gone.
1364
1369
1365 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1370 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1366
1371
1367 * IPython/Extensions/numeric_formats.py: fix missing import,
1372 * IPython/Extensions/numeric_formats.py: fix missing import,
1368 reported by Stephen Walton.
1373 reported by Stephen Walton.
1369
1374
1370 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1375 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1371
1376
1372 * IPython/demo.py: finish demo module, fully documented now.
1377 * IPython/demo.py: finish demo module, fully documented now.
1373
1378
1374 * IPython/genutils.py (file_read): simple little utility to read a
1379 * IPython/genutils.py (file_read): simple little utility to read a
1375 file and ensure it's closed afterwards.
1380 file and ensure it's closed afterwards.
1376
1381
1377 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1382 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1378
1383
1379 * IPython/demo.py (Demo.__init__): added support for individually
1384 * IPython/demo.py (Demo.__init__): added support for individually
1380 tagging blocks for automatic execution.
1385 tagging blocks for automatic execution.
1381
1386
1382 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1387 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1383 syntax-highlighted python sources, requested by John.
1388 syntax-highlighted python sources, requested by John.
1384
1389
1385 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1390 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1386
1391
1387 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1392 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1388 finishing.
1393 finishing.
1389
1394
1390 * IPython/genutils.py (shlex_split): moved from Magic to here,
1395 * IPython/genutils.py (shlex_split): moved from Magic to here,
1391 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1396 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1392
1397
1393 * IPython/demo.py (Demo.__init__): added support for silent
1398 * IPython/demo.py (Demo.__init__): added support for silent
1394 blocks, improved marks as regexps, docstrings written.
1399 blocks, improved marks as regexps, docstrings written.
1395 (Demo.__init__): better docstring, added support for sys.argv.
1400 (Demo.__init__): better docstring, added support for sys.argv.
1396
1401
1397 * IPython/genutils.py (marquee): little utility used by the demo
1402 * IPython/genutils.py (marquee): little utility used by the demo
1398 code, handy in general.
1403 code, handy in general.
1399
1404
1400 * IPython/demo.py (Demo.__init__): new class for interactive
1405 * IPython/demo.py (Demo.__init__): new class for interactive
1401 demos. Not documented yet, I just wrote it in a hurry for
1406 demos. Not documented yet, I just wrote it in a hurry for
1402 scipy'05. Will docstring later.
1407 scipy'05. Will docstring later.
1403
1408
1404 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1409 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1405
1410
1406 * IPython/Shell.py (sigint_handler): Drastic simplification which
1411 * IPython/Shell.py (sigint_handler): Drastic simplification which
1407 also seems to make Ctrl-C work correctly across threads! This is
1412 also seems to make Ctrl-C work correctly across threads! This is
1408 so simple, that I can't beleive I'd missed it before. Needs more
1413 so simple, that I can't beleive I'd missed it before. Needs more
1409 testing, though.
1414 testing, though.
1410 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1415 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1411 like this before...
1416 like this before...
1412
1417
1413 * IPython/genutils.py (get_home_dir): add protection against
1418 * IPython/genutils.py (get_home_dir): add protection against
1414 non-dirs in win32 registry.
1419 non-dirs in win32 registry.
1415
1420
1416 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1421 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1417 bug where dict was mutated while iterating (pysh crash).
1422 bug where dict was mutated while iterating (pysh crash).
1418
1423
1419 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1424 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1420
1425
1421 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1426 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1422 spurious newlines added by this routine. After a report by
1427 spurious newlines added by this routine. After a report by
1423 F. Mantegazza.
1428 F. Mantegazza.
1424
1429
1425 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1430 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1426
1431
1427 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1432 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1428 calls. These were a leftover from the GTK 1.x days, and can cause
1433 calls. These were a leftover from the GTK 1.x days, and can cause
1429 problems in certain cases (after a report by John Hunter).
1434 problems in certain cases (after a report by John Hunter).
1430
1435
1431 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1436 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1432 os.getcwd() fails at init time. Thanks to patch from David Remahl
1437 os.getcwd() fails at init time. Thanks to patch from David Remahl
1433 <chmod007-AT-mac.com>.
1438 <chmod007-AT-mac.com>.
1434 (InteractiveShell.__init__): prevent certain special magics from
1439 (InteractiveShell.__init__): prevent certain special magics from
1435 being shadowed by aliases. Closes
1440 being shadowed by aliases. Closes
1436 http://www.scipy.net/roundup/ipython/issue41.
1441 http://www.scipy.net/roundup/ipython/issue41.
1437
1442
1438 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1443 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1439
1444
1440 * IPython/iplib.py (InteractiveShell.complete): Added new
1445 * IPython/iplib.py (InteractiveShell.complete): Added new
1441 top-level completion method to expose the completion mechanism
1446 top-level completion method to expose the completion mechanism
1442 beyond readline-based environments.
1447 beyond readline-based environments.
1443
1448
1444 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1449 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1445
1450
1446 * tools/ipsvnc (svnversion): fix svnversion capture.
1451 * tools/ipsvnc (svnversion): fix svnversion capture.
1447
1452
1448 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1453 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1449 attribute to self, which was missing. Before, it was set by a
1454 attribute to self, which was missing. Before, it was set by a
1450 routine which in certain cases wasn't being called, so the
1455 routine which in certain cases wasn't being called, so the
1451 instance could end up missing the attribute. This caused a crash.
1456 instance could end up missing the attribute. This caused a crash.
1452 Closes http://www.scipy.net/roundup/ipython/issue40.
1457 Closes http://www.scipy.net/roundup/ipython/issue40.
1453
1458
1454 2005-08-16 Fernando Perez <fperez@colorado.edu>
1459 2005-08-16 Fernando Perez <fperez@colorado.edu>
1455
1460
1456 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1461 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1457 contains non-string attribute. Closes
1462 contains non-string attribute. Closes
1458 http://www.scipy.net/roundup/ipython/issue38.
1463 http://www.scipy.net/roundup/ipython/issue38.
1459
1464
1460 2005-08-14 Fernando Perez <fperez@colorado.edu>
1465 2005-08-14 Fernando Perez <fperez@colorado.edu>
1461
1466
1462 * tools/ipsvnc: Minor improvements, to add changeset info.
1467 * tools/ipsvnc: Minor improvements, to add changeset info.
1463
1468
1464 2005-08-12 Fernando Perez <fperez@colorado.edu>
1469 2005-08-12 Fernando Perez <fperez@colorado.edu>
1465
1470
1466 * IPython/iplib.py (runsource): remove self.code_to_run_src
1471 * IPython/iplib.py (runsource): remove self.code_to_run_src
1467 attribute. I realized this is nothing more than
1472 attribute. I realized this is nothing more than
1468 '\n'.join(self.buffer), and having the same data in two different
1473 '\n'.join(self.buffer), and having the same data in two different
1469 places is just asking for synchronization bugs. This may impact
1474 places is just asking for synchronization bugs. This may impact
1470 people who have custom exception handlers, so I need to warn
1475 people who have custom exception handlers, so I need to warn
1471 ipython-dev about it (F. Mantegazza may use them).
1476 ipython-dev about it (F. Mantegazza may use them).
1472
1477
1473 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1478 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1474
1479
1475 * IPython/genutils.py: fix 2.2 compatibility (generators)
1480 * IPython/genutils.py: fix 2.2 compatibility (generators)
1476
1481
1477 2005-07-18 Fernando Perez <fperez@colorado.edu>
1482 2005-07-18 Fernando Perez <fperez@colorado.edu>
1478
1483
1479 * IPython/genutils.py (get_home_dir): fix to help users with
1484 * IPython/genutils.py (get_home_dir): fix to help users with
1480 invalid $HOME under win32.
1485 invalid $HOME under win32.
1481
1486
1482 2005-07-17 Fernando Perez <fperez@colorado.edu>
1487 2005-07-17 Fernando Perez <fperez@colorado.edu>
1483
1488
1484 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1489 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1485 some old hacks and clean up a bit other routines; code should be
1490 some old hacks and clean up a bit other routines; code should be
1486 simpler and a bit faster.
1491 simpler and a bit faster.
1487
1492
1488 * IPython/iplib.py (interact): removed some last-resort attempts
1493 * IPython/iplib.py (interact): removed some last-resort attempts
1489 to survive broken stdout/stderr. That code was only making it
1494 to survive broken stdout/stderr. That code was only making it
1490 harder to abstract out the i/o (necessary for gui integration),
1495 harder to abstract out the i/o (necessary for gui integration),
1491 and the crashes it could prevent were extremely rare in practice
1496 and the crashes it could prevent were extremely rare in practice
1492 (besides being fully user-induced in a pretty violent manner).
1497 (besides being fully user-induced in a pretty violent manner).
1493
1498
1494 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1499 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1495 Nothing major yet, but the code is simpler to read; this should
1500 Nothing major yet, but the code is simpler to read; this should
1496 make it easier to do more serious modifications in the future.
1501 make it easier to do more serious modifications in the future.
1497
1502
1498 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1503 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1499 which broke in .15 (thanks to a report by Ville).
1504 which broke in .15 (thanks to a report by Ville).
1500
1505
1501 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1506 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1502 be quite correct, I know next to nothing about unicode). This
1507 be quite correct, I know next to nothing about unicode). This
1503 will allow unicode strings to be used in prompts, amongst other
1508 will allow unicode strings to be used in prompts, amongst other
1504 cases. It also will prevent ipython from crashing when unicode
1509 cases. It also will prevent ipython from crashing when unicode
1505 shows up unexpectedly in many places. If ascii encoding fails, we
1510 shows up unexpectedly in many places. If ascii encoding fails, we
1506 assume utf_8. Currently the encoding is not a user-visible
1511 assume utf_8. Currently the encoding is not a user-visible
1507 setting, though it could be made so if there is demand for it.
1512 setting, though it could be made so if there is demand for it.
1508
1513
1509 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1514 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1510
1515
1511 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1516 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1512
1517
1513 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1518 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1514
1519
1515 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1520 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1516 code can work transparently for 2.2/2.3.
1521 code can work transparently for 2.2/2.3.
1517
1522
1518 2005-07-16 Fernando Perez <fperez@colorado.edu>
1523 2005-07-16 Fernando Perez <fperez@colorado.edu>
1519
1524
1520 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1525 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1521 out of the color scheme table used for coloring exception
1526 out of the color scheme table used for coloring exception
1522 tracebacks. This allows user code to add new schemes at runtime.
1527 tracebacks. This allows user code to add new schemes at runtime.
1523 This is a minimally modified version of the patch at
1528 This is a minimally modified version of the patch at
1524 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1529 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1525 for the contribution.
1530 for the contribution.
1526
1531
1527 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1532 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1528 slightly modified version of the patch in
1533 slightly modified version of the patch in
1529 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1534 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1530 to remove the previous try/except solution (which was costlier).
1535 to remove the previous try/except solution (which was costlier).
1531 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1536 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1532
1537
1533 2005-06-08 Fernando Perez <fperez@colorado.edu>
1538 2005-06-08 Fernando Perez <fperez@colorado.edu>
1534
1539
1535 * IPython/iplib.py (write/write_err): Add methods to abstract all
1540 * IPython/iplib.py (write/write_err): Add methods to abstract all
1536 I/O a bit more.
1541 I/O a bit more.
1537
1542
1538 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1543 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1539 warning, reported by Aric Hagberg, fix by JD Hunter.
1544 warning, reported by Aric Hagberg, fix by JD Hunter.
1540
1545
1541 2005-06-02 *** Released version 0.6.15
1546 2005-06-02 *** Released version 0.6.15
1542
1547
1543 2005-06-01 Fernando Perez <fperez@colorado.edu>
1548 2005-06-01 Fernando Perez <fperez@colorado.edu>
1544
1549
1545 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1550 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1546 tab-completion of filenames within open-quoted strings. Note that
1551 tab-completion of filenames within open-quoted strings. Note that
1547 this requires that in ~/.ipython/ipythonrc, users change the
1552 this requires that in ~/.ipython/ipythonrc, users change the
1548 readline delimiters configuration to read:
1553 readline delimiters configuration to read:
1549
1554
1550 readline_remove_delims -/~
1555 readline_remove_delims -/~
1551
1556
1552
1557
1553 2005-05-31 *** Released version 0.6.14
1558 2005-05-31 *** Released version 0.6.14
1554
1559
1555 2005-05-29 Fernando Perez <fperez@colorado.edu>
1560 2005-05-29 Fernando Perez <fperez@colorado.edu>
1556
1561
1557 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1562 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1558 with files not on the filesystem. Reported by Eliyahu Sandler
1563 with files not on the filesystem. Reported by Eliyahu Sandler
1559 <eli@gondolin.net>
1564 <eli@gondolin.net>
1560
1565
1561 2005-05-22 Fernando Perez <fperez@colorado.edu>
1566 2005-05-22 Fernando Perez <fperez@colorado.edu>
1562
1567
1563 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1568 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1564 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1569 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1565
1570
1566 2005-05-19 Fernando Perez <fperez@colorado.edu>
1571 2005-05-19 Fernando Perez <fperez@colorado.edu>
1567
1572
1568 * IPython/iplib.py (safe_execfile): close a file which could be
1573 * IPython/iplib.py (safe_execfile): close a file which could be
1569 left open (causing problems in win32, which locks open files).
1574 left open (causing problems in win32, which locks open files).
1570 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1575 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1571
1576
1572 2005-05-18 Fernando Perez <fperez@colorado.edu>
1577 2005-05-18 Fernando Perez <fperez@colorado.edu>
1573
1578
1574 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1579 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1575 keyword arguments correctly to safe_execfile().
1580 keyword arguments correctly to safe_execfile().
1576
1581
1577 2005-05-13 Fernando Perez <fperez@colorado.edu>
1582 2005-05-13 Fernando Perez <fperez@colorado.edu>
1578
1583
1579 * ipython.1: Added info about Qt to manpage, and threads warning
1584 * ipython.1: Added info about Qt to manpage, and threads warning
1580 to usage page (invoked with --help).
1585 to usage page (invoked with --help).
1581
1586
1582 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1587 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1583 new matcher (it goes at the end of the priority list) to do
1588 new matcher (it goes at the end of the priority list) to do
1584 tab-completion on named function arguments. Submitted by George
1589 tab-completion on named function arguments. Submitted by George
1585 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1590 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1586 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1591 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1587 for more details.
1592 for more details.
1588
1593
1589 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1594 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1590 SystemExit exceptions in the script being run. Thanks to a report
1595 SystemExit exceptions in the script being run. Thanks to a report
1591 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1596 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1592 producing very annoying behavior when running unit tests.
1597 producing very annoying behavior when running unit tests.
1593
1598
1594 2005-05-12 Fernando Perez <fperez@colorado.edu>
1599 2005-05-12 Fernando Perez <fperez@colorado.edu>
1595
1600
1596 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1601 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1597 which I'd broken (again) due to a changed regexp. In the process,
1602 which I'd broken (again) due to a changed regexp. In the process,
1598 added ';' as an escape to auto-quote the whole line without
1603 added ';' as an escape to auto-quote the whole line without
1599 splitting its arguments. Thanks to a report by Jerry McRae
1604 splitting its arguments. Thanks to a report by Jerry McRae
1600 <qrs0xyc02-AT-sneakemail.com>.
1605 <qrs0xyc02-AT-sneakemail.com>.
1601
1606
1602 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1607 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1603 possible crashes caused by a TokenError. Reported by Ed Schofield
1608 possible crashes caused by a TokenError. Reported by Ed Schofield
1604 <schofield-AT-ftw.at>.
1609 <schofield-AT-ftw.at>.
1605
1610
1606 2005-05-06 Fernando Perez <fperez@colorado.edu>
1611 2005-05-06 Fernando Perez <fperez@colorado.edu>
1607
1612
1608 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1613 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1609
1614
1610 2005-04-29 Fernando Perez <fperez@colorado.edu>
1615 2005-04-29 Fernando Perez <fperez@colorado.edu>
1611
1616
1612 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1617 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1613 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1618 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1614 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1619 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1615 which provides support for Qt interactive usage (similar to the
1620 which provides support for Qt interactive usage (similar to the
1616 existing one for WX and GTK). This had been often requested.
1621 existing one for WX and GTK). This had been often requested.
1617
1622
1618 2005-04-14 *** Released version 0.6.13
1623 2005-04-14 *** Released version 0.6.13
1619
1624
1620 2005-04-08 Fernando Perez <fperez@colorado.edu>
1625 2005-04-08 Fernando Perez <fperez@colorado.edu>
1621
1626
1622 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1627 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1623 from _ofind, which gets called on almost every input line. Now,
1628 from _ofind, which gets called on almost every input line. Now,
1624 we only try to get docstrings if they are actually going to be
1629 we only try to get docstrings if they are actually going to be
1625 used (the overhead of fetching unnecessary docstrings can be
1630 used (the overhead of fetching unnecessary docstrings can be
1626 noticeable for certain objects, such as Pyro proxies).
1631 noticeable for certain objects, such as Pyro proxies).
1627
1632
1628 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1633 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1629 for completers. For some reason I had been passing them the state
1634 for completers. For some reason I had been passing them the state
1630 variable, which completers never actually need, and was in
1635 variable, which completers never actually need, and was in
1631 conflict with the rlcompleter API. Custom completers ONLY need to
1636 conflict with the rlcompleter API. Custom completers ONLY need to
1632 take the text parameter.
1637 take the text parameter.
1633
1638
1634 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1639 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1635 work correctly in pysh. I've also moved all the logic which used
1640 work correctly in pysh. I've also moved all the logic which used
1636 to be in pysh.py here, which will prevent problems with future
1641 to be in pysh.py here, which will prevent problems with future
1637 upgrades. However, this time I must warn users to update their
1642 upgrades. However, this time I must warn users to update their
1638 pysh profile to include the line
1643 pysh profile to include the line
1639
1644
1640 import_all IPython.Extensions.InterpreterExec
1645 import_all IPython.Extensions.InterpreterExec
1641
1646
1642 because otherwise things won't work for them. They MUST also
1647 because otherwise things won't work for them. They MUST also
1643 delete pysh.py and the line
1648 delete pysh.py and the line
1644
1649
1645 execfile pysh.py
1650 execfile pysh.py
1646
1651
1647 from their ipythonrc-pysh.
1652 from their ipythonrc-pysh.
1648
1653
1649 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1654 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1650 robust in the face of objects whose dir() returns non-strings
1655 robust in the face of objects whose dir() returns non-strings
1651 (which it shouldn't, but some broken libs like ITK do). Thanks to
1656 (which it shouldn't, but some broken libs like ITK do). Thanks to
1652 a patch by John Hunter (implemented differently, though). Also
1657 a patch by John Hunter (implemented differently, though). Also
1653 minor improvements by using .extend instead of + on lists.
1658 minor improvements by using .extend instead of + on lists.
1654
1659
1655 * pysh.py:
1660 * pysh.py:
1656
1661
1657 2005-04-06 Fernando Perez <fperez@colorado.edu>
1662 2005-04-06 Fernando Perez <fperez@colorado.edu>
1658
1663
1659 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1664 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1660 by default, so that all users benefit from it. Those who don't
1665 by default, so that all users benefit from it. Those who don't
1661 want it can still turn it off.
1666 want it can still turn it off.
1662
1667
1663 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1668 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1664 config file, I'd forgotten about this, so users were getting it
1669 config file, I'd forgotten about this, so users were getting it
1665 off by default.
1670 off by default.
1666
1671
1667 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1672 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1668 consistency. Now magics can be called in multiline statements,
1673 consistency. Now magics can be called in multiline statements,
1669 and python variables can be expanded in magic calls via $var.
1674 and python variables can be expanded in magic calls via $var.
1670 This makes the magic system behave just like aliases or !system
1675 This makes the magic system behave just like aliases or !system
1671 calls.
1676 calls.
1672
1677
1673 2005-03-28 Fernando Perez <fperez@colorado.edu>
1678 2005-03-28 Fernando Perez <fperez@colorado.edu>
1674
1679
1675 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1680 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1676 expensive string additions for building command. Add support for
1681 expensive string additions for building command. Add support for
1677 trailing ';' when autocall is used.
1682 trailing ';' when autocall is used.
1678
1683
1679 2005-03-26 Fernando Perez <fperez@colorado.edu>
1684 2005-03-26 Fernando Perez <fperez@colorado.edu>
1680
1685
1681 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1686 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1682 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1687 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1683 ipython.el robust against prompts with any number of spaces
1688 ipython.el robust against prompts with any number of spaces
1684 (including 0) after the ':' character.
1689 (including 0) after the ':' character.
1685
1690
1686 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1691 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1687 continuation prompt, which misled users to think the line was
1692 continuation prompt, which misled users to think the line was
1688 already indented. Closes debian Bug#300847, reported to me by
1693 already indented. Closes debian Bug#300847, reported to me by
1689 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1694 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1690
1695
1691 2005-03-23 Fernando Perez <fperez@colorado.edu>
1696 2005-03-23 Fernando Perez <fperez@colorado.edu>
1692
1697
1693 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1698 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1694 properly aligned if they have embedded newlines.
1699 properly aligned if they have embedded newlines.
1695
1700
1696 * IPython/iplib.py (runlines): Add a public method to expose
1701 * IPython/iplib.py (runlines): Add a public method to expose
1697 IPython's code execution machinery, so that users can run strings
1702 IPython's code execution machinery, so that users can run strings
1698 as if they had been typed at the prompt interactively.
1703 as if they had been typed at the prompt interactively.
1699 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1704 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1700 methods which can call the system shell, but with python variable
1705 methods which can call the system shell, but with python variable
1701 expansion. The three such methods are: __IPYTHON__.system,
1706 expansion. The three such methods are: __IPYTHON__.system,
1702 .getoutput and .getoutputerror. These need to be documented in a
1707 .getoutput and .getoutputerror. These need to be documented in a
1703 'public API' section (to be written) of the manual.
1708 'public API' section (to be written) of the manual.
1704
1709
1705 2005-03-20 Fernando Perez <fperez@colorado.edu>
1710 2005-03-20 Fernando Perez <fperez@colorado.edu>
1706
1711
1707 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1712 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1708 for custom exception handling. This is quite powerful, and it
1713 for custom exception handling. This is quite powerful, and it
1709 allows for user-installable exception handlers which can trap
1714 allows for user-installable exception handlers which can trap
1710 custom exceptions at runtime and treat them separately from
1715 custom exceptions at runtime and treat them separately from
1711 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1716 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1712 Mantegazza <mantegazza-AT-ill.fr>.
1717 Mantegazza <mantegazza-AT-ill.fr>.
1713 (InteractiveShell.set_custom_completer): public API function to
1718 (InteractiveShell.set_custom_completer): public API function to
1714 add new completers at runtime.
1719 add new completers at runtime.
1715
1720
1716 2005-03-19 Fernando Perez <fperez@colorado.edu>
1721 2005-03-19 Fernando Perez <fperez@colorado.edu>
1717
1722
1718 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1723 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1719 allow objects which provide their docstrings via non-standard
1724 allow objects which provide their docstrings via non-standard
1720 mechanisms (like Pyro proxies) to still be inspected by ipython's
1725 mechanisms (like Pyro proxies) to still be inspected by ipython's
1721 ? system.
1726 ? system.
1722
1727
1723 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1728 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1724 automatic capture system. I tried quite hard to make it work
1729 automatic capture system. I tried quite hard to make it work
1725 reliably, and simply failed. I tried many combinations with the
1730 reliably, and simply failed. I tried many combinations with the
1726 subprocess module, but eventually nothing worked in all needed
1731 subprocess module, but eventually nothing worked in all needed
1727 cases (not blocking stdin for the child, duplicating stdout
1732 cases (not blocking stdin for the child, duplicating stdout
1728 without blocking, etc). The new %sc/%sx still do capture to these
1733 without blocking, etc). The new %sc/%sx still do capture to these
1729 magical list/string objects which make shell use much more
1734 magical list/string objects which make shell use much more
1730 conveninent, so not all is lost.
1735 conveninent, so not all is lost.
1731
1736
1732 XXX - FIX MANUAL for the change above!
1737 XXX - FIX MANUAL for the change above!
1733
1738
1734 (runsource): I copied code.py's runsource() into ipython to modify
1739 (runsource): I copied code.py's runsource() into ipython to modify
1735 it a bit. Now the code object and source to be executed are
1740 it a bit. Now the code object and source to be executed are
1736 stored in ipython. This makes this info accessible to third-party
1741 stored in ipython. This makes this info accessible to third-party
1737 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1742 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1738 Mantegazza <mantegazza-AT-ill.fr>.
1743 Mantegazza <mantegazza-AT-ill.fr>.
1739
1744
1740 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1745 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1741 history-search via readline (like C-p/C-n). I'd wanted this for a
1746 history-search via readline (like C-p/C-n). I'd wanted this for a
1742 long time, but only recently found out how to do it. For users
1747 long time, but only recently found out how to do it. For users
1743 who already have their ipythonrc files made and want this, just
1748 who already have their ipythonrc files made and want this, just
1744 add:
1749 add:
1745
1750
1746 readline_parse_and_bind "\e[A": history-search-backward
1751 readline_parse_and_bind "\e[A": history-search-backward
1747 readline_parse_and_bind "\e[B": history-search-forward
1752 readline_parse_and_bind "\e[B": history-search-forward
1748
1753
1749 2005-03-18 Fernando Perez <fperez@colorado.edu>
1754 2005-03-18 Fernando Perez <fperez@colorado.edu>
1750
1755
1751 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1756 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1752 LSString and SList classes which allow transparent conversions
1757 LSString and SList classes which allow transparent conversions
1753 between list mode and whitespace-separated string.
1758 between list mode and whitespace-separated string.
1754 (magic_r): Fix recursion problem in %r.
1759 (magic_r): Fix recursion problem in %r.
1755
1760
1756 * IPython/genutils.py (LSString): New class to be used for
1761 * IPython/genutils.py (LSString): New class to be used for
1757 automatic storage of the results of all alias/system calls in _o
1762 automatic storage of the results of all alias/system calls in _o
1758 and _e (stdout/err). These provide a .l/.list attribute which
1763 and _e (stdout/err). These provide a .l/.list attribute which
1759 does automatic splitting on newlines. This means that for most
1764 does automatic splitting on newlines. This means that for most
1760 uses, you'll never need to do capturing of output with %sc/%sx
1765 uses, you'll never need to do capturing of output with %sc/%sx
1761 anymore, since ipython keeps this always done for you. Note that
1766 anymore, since ipython keeps this always done for you. Note that
1762 only the LAST results are stored, the _o/e variables are
1767 only the LAST results are stored, the _o/e variables are
1763 overwritten on each call. If you need to save their contents
1768 overwritten on each call. If you need to save their contents
1764 further, simply bind them to any other name.
1769 further, simply bind them to any other name.
1765
1770
1766 2005-03-17 Fernando Perez <fperez@colorado.edu>
1771 2005-03-17 Fernando Perez <fperez@colorado.edu>
1767
1772
1768 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1773 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1769 prompt namespace handling.
1774 prompt namespace handling.
1770
1775
1771 2005-03-16 Fernando Perez <fperez@colorado.edu>
1776 2005-03-16 Fernando Perez <fperez@colorado.edu>
1772
1777
1773 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1778 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1774 classic prompts to be '>>> ' (final space was missing, and it
1779 classic prompts to be '>>> ' (final space was missing, and it
1775 trips the emacs python mode).
1780 trips the emacs python mode).
1776 (BasePrompt.__str__): Added safe support for dynamic prompt
1781 (BasePrompt.__str__): Added safe support for dynamic prompt
1777 strings. Now you can set your prompt string to be '$x', and the
1782 strings. Now you can set your prompt string to be '$x', and the
1778 value of x will be printed from your interactive namespace. The
1783 value of x will be printed from your interactive namespace. The
1779 interpolation syntax includes the full Itpl support, so
1784 interpolation syntax includes the full Itpl support, so
1780 ${foo()+x+bar()} is a valid prompt string now, and the function
1785 ${foo()+x+bar()} is a valid prompt string now, and the function
1781 calls will be made at runtime.
1786 calls will be made at runtime.
1782
1787
1783 2005-03-15 Fernando Perez <fperez@colorado.edu>
1788 2005-03-15 Fernando Perez <fperez@colorado.edu>
1784
1789
1785 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1790 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1786 avoid name clashes in pylab. %hist still works, it just forwards
1791 avoid name clashes in pylab. %hist still works, it just forwards
1787 the call to %history.
1792 the call to %history.
1788
1793
1789 2005-03-02 *** Released version 0.6.12
1794 2005-03-02 *** Released version 0.6.12
1790
1795
1791 2005-03-02 Fernando Perez <fperez@colorado.edu>
1796 2005-03-02 Fernando Perez <fperez@colorado.edu>
1792
1797
1793 * IPython/iplib.py (handle_magic): log magic calls properly as
1798 * IPython/iplib.py (handle_magic): log magic calls properly as
1794 ipmagic() function calls.
1799 ipmagic() function calls.
1795
1800
1796 * IPython/Magic.py (magic_time): Improved %time to support
1801 * IPython/Magic.py (magic_time): Improved %time to support
1797 statements and provide wall-clock as well as CPU time.
1802 statements and provide wall-clock as well as CPU time.
1798
1803
1799 2005-02-27 Fernando Perez <fperez@colorado.edu>
1804 2005-02-27 Fernando Perez <fperez@colorado.edu>
1800
1805
1801 * IPython/hooks.py: New hooks module, to expose user-modifiable
1806 * IPython/hooks.py: New hooks module, to expose user-modifiable
1802 IPython functionality in a clean manner. For now only the editor
1807 IPython functionality in a clean manner. For now only the editor
1803 hook is actually written, and other thigns which I intend to turn
1808 hook is actually written, and other thigns which I intend to turn
1804 into proper hooks aren't yet there. The display and prefilter
1809 into proper hooks aren't yet there. The display and prefilter
1805 stuff, for example, should be hooks. But at least now the
1810 stuff, for example, should be hooks. But at least now the
1806 framework is in place, and the rest can be moved here with more
1811 framework is in place, and the rest can be moved here with more
1807 time later. IPython had had a .hooks variable for a long time for
1812 time later. IPython had had a .hooks variable for a long time for
1808 this purpose, but I'd never actually used it for anything.
1813 this purpose, but I'd never actually used it for anything.
1809
1814
1810 2005-02-26 Fernando Perez <fperez@colorado.edu>
1815 2005-02-26 Fernando Perez <fperez@colorado.edu>
1811
1816
1812 * IPython/ipmaker.py (make_IPython): make the default ipython
1817 * IPython/ipmaker.py (make_IPython): make the default ipython
1813 directory be called _ipython under win32, to follow more the
1818 directory be called _ipython under win32, to follow more the
1814 naming peculiarities of that platform (where buggy software like
1819 naming peculiarities of that platform (where buggy software like
1815 Visual Sourcesafe breaks with .named directories). Reported by
1820 Visual Sourcesafe breaks with .named directories). Reported by
1816 Ville Vainio.
1821 Ville Vainio.
1817
1822
1818 2005-02-23 Fernando Perez <fperez@colorado.edu>
1823 2005-02-23 Fernando Perez <fperez@colorado.edu>
1819
1824
1820 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1825 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1821 auto_aliases for win32 which were causing problems. Users can
1826 auto_aliases for win32 which were causing problems. Users can
1822 define the ones they personally like.
1827 define the ones they personally like.
1823
1828
1824 2005-02-21 Fernando Perez <fperez@colorado.edu>
1829 2005-02-21 Fernando Perez <fperez@colorado.edu>
1825
1830
1826 * IPython/Magic.py (magic_time): new magic to time execution of
1831 * IPython/Magic.py (magic_time): new magic to time execution of
1827 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1832 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1828
1833
1829 2005-02-19 Fernando Perez <fperez@colorado.edu>
1834 2005-02-19 Fernando Perez <fperez@colorado.edu>
1830
1835
1831 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1836 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1832 into keys (for prompts, for example).
1837 into keys (for prompts, for example).
1833
1838
1834 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1839 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1835 prompts in case users want them. This introduces a small behavior
1840 prompts in case users want them. This introduces a small behavior
1836 change: ipython does not automatically add a space to all prompts
1841 change: ipython does not automatically add a space to all prompts
1837 anymore. To get the old prompts with a space, users should add it
1842 anymore. To get the old prompts with a space, users should add it
1838 manually to their ipythonrc file, so for example prompt_in1 should
1843 manually to their ipythonrc file, so for example prompt_in1 should
1839 now read 'In [\#]: ' instead of 'In [\#]:'.
1844 now read 'In [\#]: ' instead of 'In [\#]:'.
1840 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1845 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1841 file) to control left-padding of secondary prompts.
1846 file) to control left-padding of secondary prompts.
1842
1847
1843 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1848 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1844 the profiler can't be imported. Fix for Debian, which removed
1849 the profiler can't be imported. Fix for Debian, which removed
1845 profile.py because of License issues. I applied a slightly
1850 profile.py because of License issues. I applied a slightly
1846 modified version of the original Debian patch at
1851 modified version of the original Debian patch at
1847 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1852 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1848
1853
1849 2005-02-17 Fernando Perez <fperez@colorado.edu>
1854 2005-02-17 Fernando Perez <fperez@colorado.edu>
1850
1855
1851 * IPython/genutils.py (native_line_ends): Fix bug which would
1856 * IPython/genutils.py (native_line_ends): Fix bug which would
1852 cause improper line-ends under win32 b/c I was not opening files
1857 cause improper line-ends under win32 b/c I was not opening files
1853 in binary mode. Bug report and fix thanks to Ville.
1858 in binary mode. Bug report and fix thanks to Ville.
1854
1859
1855 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1860 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1856 trying to catch spurious foo[1] autocalls. My fix actually broke
1861 trying to catch spurious foo[1] autocalls. My fix actually broke
1857 ',/' autoquote/call with explicit escape (bad regexp).
1862 ',/' autoquote/call with explicit escape (bad regexp).
1858
1863
1859 2005-02-15 *** Released version 0.6.11
1864 2005-02-15 *** Released version 0.6.11
1860
1865
1861 2005-02-14 Fernando Perez <fperez@colorado.edu>
1866 2005-02-14 Fernando Perez <fperez@colorado.edu>
1862
1867
1863 * IPython/background_jobs.py: New background job management
1868 * IPython/background_jobs.py: New background job management
1864 subsystem. This is implemented via a new set of classes, and
1869 subsystem. This is implemented via a new set of classes, and
1865 IPython now provides a builtin 'jobs' object for background job
1870 IPython now provides a builtin 'jobs' object for background job
1866 execution. A convenience %bg magic serves as a lightweight
1871 execution. A convenience %bg magic serves as a lightweight
1867 frontend for starting the more common type of calls. This was
1872 frontend for starting the more common type of calls. This was
1868 inspired by discussions with B. Granger and the BackgroundCommand
1873 inspired by discussions with B. Granger and the BackgroundCommand
1869 class described in the book Python Scripting for Computational
1874 class described in the book Python Scripting for Computational
1870 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1875 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1871 (although ultimately no code from this text was used, as IPython's
1876 (although ultimately no code from this text was used, as IPython's
1872 system is a separate implementation).
1877 system is a separate implementation).
1873
1878
1874 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1879 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1875 to control the completion of single/double underscore names
1880 to control the completion of single/double underscore names
1876 separately. As documented in the example ipytonrc file, the
1881 separately. As documented in the example ipytonrc file, the
1877 readline_omit__names variable can now be set to 2, to omit even
1882 readline_omit__names variable can now be set to 2, to omit even
1878 single underscore names. Thanks to a patch by Brian Wong
1883 single underscore names. Thanks to a patch by Brian Wong
1879 <BrianWong-AT-AirgoNetworks.Com>.
1884 <BrianWong-AT-AirgoNetworks.Com>.
1880 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1885 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1881 be autocalled as foo([1]) if foo were callable. A problem for
1886 be autocalled as foo([1]) if foo were callable. A problem for
1882 things which are both callable and implement __getitem__.
1887 things which are both callable and implement __getitem__.
1883 (init_readline): Fix autoindentation for win32. Thanks to a patch
1888 (init_readline): Fix autoindentation for win32. Thanks to a patch
1884 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1889 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1885
1890
1886 2005-02-12 Fernando Perez <fperez@colorado.edu>
1891 2005-02-12 Fernando Perez <fperez@colorado.edu>
1887
1892
1888 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1893 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1889 which I had written long ago to sort out user error messages which
1894 which I had written long ago to sort out user error messages which
1890 may occur during startup. This seemed like a good idea initially,
1895 may occur during startup. This seemed like a good idea initially,
1891 but it has proven a disaster in retrospect. I don't want to
1896 but it has proven a disaster in retrospect. I don't want to
1892 change much code for now, so my fix is to set the internal 'debug'
1897 change much code for now, so my fix is to set the internal 'debug'
1893 flag to true everywhere, whose only job was precisely to control
1898 flag to true everywhere, whose only job was precisely to control
1894 this subsystem. This closes issue 28 (as well as avoiding all
1899 this subsystem. This closes issue 28 (as well as avoiding all
1895 sorts of strange hangups which occur from time to time).
1900 sorts of strange hangups which occur from time to time).
1896
1901
1897 2005-02-07 Fernando Perez <fperez@colorado.edu>
1902 2005-02-07 Fernando Perez <fperez@colorado.edu>
1898
1903
1899 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1904 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1900 previous call produced a syntax error.
1905 previous call produced a syntax error.
1901
1906
1902 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1907 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1903 classes without constructor.
1908 classes without constructor.
1904
1909
1905 2005-02-06 Fernando Perez <fperez@colorado.edu>
1910 2005-02-06 Fernando Perez <fperez@colorado.edu>
1906
1911
1907 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1912 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
1908 completions with the results of each matcher, so we return results
1913 completions with the results of each matcher, so we return results
1909 to the user from all namespaces. This breaks with ipython
1914 to the user from all namespaces. This breaks with ipython
1910 tradition, but I think it's a nicer behavior. Now you get all
1915 tradition, but I think it's a nicer behavior. Now you get all
1911 possible completions listed, from all possible namespaces (python,
1916 possible completions listed, from all possible namespaces (python,
1912 filesystem, magics...) After a request by John Hunter
1917 filesystem, magics...) After a request by John Hunter
1913 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1918 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1914
1919
1915 2005-02-05 Fernando Perez <fperez@colorado.edu>
1920 2005-02-05 Fernando Perez <fperez@colorado.edu>
1916
1921
1917 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1922 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
1918 the call had quote characters in it (the quotes were stripped).
1923 the call had quote characters in it (the quotes were stripped).
1919
1924
1920 2005-01-31 Fernando Perez <fperez@colorado.edu>
1925 2005-01-31 Fernando Perez <fperez@colorado.edu>
1921
1926
1922 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1927 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
1923 Itpl.itpl() to make the code more robust against psyco
1928 Itpl.itpl() to make the code more robust against psyco
1924 optimizations.
1929 optimizations.
1925
1930
1926 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1931 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
1927 of causing an exception. Quicker, cleaner.
1932 of causing an exception. Quicker, cleaner.
1928
1933
1929 2005-01-28 Fernando Perez <fperez@colorado.edu>
1934 2005-01-28 Fernando Perez <fperez@colorado.edu>
1930
1935
1931 * scripts/ipython_win_post_install.py (install): hardcode
1936 * scripts/ipython_win_post_install.py (install): hardcode
1932 sys.prefix+'python.exe' as the executable path. It turns out that
1937 sys.prefix+'python.exe' as the executable path. It turns out that
1933 during the post-installation run, sys.executable resolves to the
1938 during the post-installation run, sys.executable resolves to the
1934 name of the binary installer! I should report this as a distutils
1939 name of the binary installer! I should report this as a distutils
1935 bug, I think. I updated the .10 release with this tiny fix, to
1940 bug, I think. I updated the .10 release with this tiny fix, to
1936 avoid annoying the lists further.
1941 avoid annoying the lists further.
1937
1942
1938 2005-01-27 *** Released version 0.6.10
1943 2005-01-27 *** Released version 0.6.10
1939
1944
1940 2005-01-27 Fernando Perez <fperez@colorado.edu>
1945 2005-01-27 Fernando Perez <fperez@colorado.edu>
1941
1946
1942 * IPython/numutils.py (norm): Added 'inf' as optional name for
1947 * IPython/numutils.py (norm): Added 'inf' as optional name for
1943 L-infinity norm, included references to mathworld.com for vector
1948 L-infinity norm, included references to mathworld.com for vector
1944 norm definitions.
1949 norm definitions.
1945 (amin/amax): added amin/amax for array min/max. Similar to what
1950 (amin/amax): added amin/amax for array min/max. Similar to what
1946 pylab ships with after the recent reorganization of names.
1951 pylab ships with after the recent reorganization of names.
1947 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1952 (spike/spike_odd): removed deprecated spike/spike_odd functions.
1948
1953
1949 * ipython.el: committed Alex's recent fixes and improvements.
1954 * ipython.el: committed Alex's recent fixes and improvements.
1950 Tested with python-mode from CVS, and it looks excellent. Since
1955 Tested with python-mode from CVS, and it looks excellent. Since
1951 python-mode hasn't released anything in a while, I'm temporarily
1956 python-mode hasn't released anything in a while, I'm temporarily
1952 putting a copy of today's CVS (v 4.70) of python-mode in:
1957 putting a copy of today's CVS (v 4.70) of python-mode in:
1953 http://ipython.scipy.org/tmp/python-mode.el
1958 http://ipython.scipy.org/tmp/python-mode.el
1954
1959
1955 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1960 * scripts/ipython_win_post_install.py (install): Win32 fix to use
1956 sys.executable for the executable name, instead of assuming it's
1961 sys.executable for the executable name, instead of assuming it's
1957 called 'python.exe' (the post-installer would have produced broken
1962 called 'python.exe' (the post-installer would have produced broken
1958 setups on systems with a differently named python binary).
1963 setups on systems with a differently named python binary).
1959
1964
1960 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1965 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
1961 references to os.linesep, to make the code more
1966 references to os.linesep, to make the code more
1962 platform-independent. This is also part of the win32 coloring
1967 platform-independent. This is also part of the win32 coloring
1963 fixes.
1968 fixes.
1964
1969
1965 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1970 * IPython/genutils.py (page_dumb): Remove attempts to chop long
1966 lines, which actually cause coloring bugs because the length of
1971 lines, which actually cause coloring bugs because the length of
1967 the line is very difficult to correctly compute with embedded
1972 the line is very difficult to correctly compute with embedded
1968 escapes. This was the source of all the coloring problems under
1973 escapes. This was the source of all the coloring problems under
1969 Win32. I think that _finally_, Win32 users have a properly
1974 Win32. I think that _finally_, Win32 users have a properly
1970 working ipython in all respects. This would never have happened
1975 working ipython in all respects. This would never have happened
1971 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1976 if not for Gary Bishop and Viktor Ransmayr's great help and work.
1972
1977
1973 2005-01-26 *** Released version 0.6.9
1978 2005-01-26 *** Released version 0.6.9
1974
1979
1975 2005-01-25 Fernando Perez <fperez@colorado.edu>
1980 2005-01-25 Fernando Perez <fperez@colorado.edu>
1976
1981
1977 * setup.py: finally, we have a true Windows installer, thanks to
1982 * setup.py: finally, we have a true Windows installer, thanks to
1978 the excellent work of Viktor Ransmayr
1983 the excellent work of Viktor Ransmayr
1979 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1984 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
1980 Windows users. The setup routine is quite a bit cleaner thanks to
1985 Windows users. The setup routine is quite a bit cleaner thanks to
1981 this, and the post-install script uses the proper functions to
1986 this, and the post-install script uses the proper functions to
1982 allow a clean de-installation using the standard Windows Control
1987 allow a clean de-installation using the standard Windows Control
1983 Panel.
1988 Panel.
1984
1989
1985 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1990 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1986 environment variable under all OSes (including win32) if
1991 environment variable under all OSes (including win32) if
1987 available. This will give consistency to win32 users who have set
1992 available. This will give consistency to win32 users who have set
1988 this variable for any reason. If os.environ['HOME'] fails, the
1993 this variable for any reason. If os.environ['HOME'] fails, the
1989 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1994 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1990
1995
1991 2005-01-24 Fernando Perez <fperez@colorado.edu>
1996 2005-01-24 Fernando Perez <fperez@colorado.edu>
1992
1997
1993 * IPython/numutils.py (empty_like): add empty_like(), similar to
1998 * IPython/numutils.py (empty_like): add empty_like(), similar to
1994 zeros_like() but taking advantage of the new empty() Numeric routine.
1999 zeros_like() but taking advantage of the new empty() Numeric routine.
1995
2000
1996 2005-01-23 *** Released version 0.6.8
2001 2005-01-23 *** Released version 0.6.8
1997
2002
1998 2005-01-22 Fernando Perez <fperez@colorado.edu>
2003 2005-01-22 Fernando Perez <fperez@colorado.edu>
1999
2004
2000 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2005 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2001 automatic show() calls. After discussing things with JDH, it
2006 automatic show() calls. After discussing things with JDH, it
2002 turns out there are too many corner cases where this can go wrong.
2007 turns out there are too many corner cases where this can go wrong.
2003 It's best not to try to be 'too smart', and simply have ipython
2008 It's best not to try to be 'too smart', and simply have ipython
2004 reproduce as much as possible the default behavior of a normal
2009 reproduce as much as possible the default behavior of a normal
2005 python shell.
2010 python shell.
2006
2011
2007 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2012 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2008 line-splitting regexp and _prefilter() to avoid calling getattr()
2013 line-splitting regexp and _prefilter() to avoid calling getattr()
2009 on assignments. This closes
2014 on assignments. This closes
2010 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2015 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2011 readline uses getattr(), so a simple <TAB> keypress is still
2016 readline uses getattr(), so a simple <TAB> keypress is still
2012 enough to trigger getattr() calls on an object.
2017 enough to trigger getattr() calls on an object.
2013
2018
2014 2005-01-21 Fernando Perez <fperez@colorado.edu>
2019 2005-01-21 Fernando Perez <fperez@colorado.edu>
2015
2020
2016 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2021 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2017 docstring under pylab so it doesn't mask the original.
2022 docstring under pylab so it doesn't mask the original.
2018
2023
2019 2005-01-21 *** Released version 0.6.7
2024 2005-01-21 *** Released version 0.6.7
2020
2025
2021 2005-01-21 Fernando Perez <fperez@colorado.edu>
2026 2005-01-21 Fernando Perez <fperez@colorado.edu>
2022
2027
2023 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2028 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2024 signal handling for win32 users in multithreaded mode.
2029 signal handling for win32 users in multithreaded mode.
2025
2030
2026 2005-01-17 Fernando Perez <fperez@colorado.edu>
2031 2005-01-17 Fernando Perez <fperez@colorado.edu>
2027
2032
2028 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2033 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2029 instances with no __init__. After a crash report by Norbert Nemec
2034 instances with no __init__. After a crash report by Norbert Nemec
2030 <Norbert-AT-nemec-online.de>.
2035 <Norbert-AT-nemec-online.de>.
2031
2036
2032 2005-01-14 Fernando Perez <fperez@colorado.edu>
2037 2005-01-14 Fernando Perez <fperez@colorado.edu>
2033
2038
2034 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2039 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2035 names for verbose exceptions, when multiple dotted names and the
2040 names for verbose exceptions, when multiple dotted names and the
2036 'parent' object were present on the same line.
2041 'parent' object were present on the same line.
2037
2042
2038 2005-01-11 Fernando Perez <fperez@colorado.edu>
2043 2005-01-11 Fernando Perez <fperez@colorado.edu>
2039
2044
2040 * IPython/genutils.py (flag_calls): new utility to trap and flag
2045 * IPython/genutils.py (flag_calls): new utility to trap and flag
2041 calls in functions. I need it to clean up matplotlib support.
2046 calls in functions. I need it to clean up matplotlib support.
2042 Also removed some deprecated code in genutils.
2047 Also removed some deprecated code in genutils.
2043
2048
2044 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2049 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2045 that matplotlib scripts called with %run, which don't call show()
2050 that matplotlib scripts called with %run, which don't call show()
2046 themselves, still have their plotting windows open.
2051 themselves, still have their plotting windows open.
2047
2052
2048 2005-01-05 Fernando Perez <fperez@colorado.edu>
2053 2005-01-05 Fernando Perez <fperez@colorado.edu>
2049
2054
2050 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2055 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2051 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2056 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2052
2057
2053 2004-12-19 Fernando Perez <fperez@colorado.edu>
2058 2004-12-19 Fernando Perez <fperez@colorado.edu>
2054
2059
2055 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2060 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2056 parent_runcode, which was an eyesore. The same result can be
2061 parent_runcode, which was an eyesore. The same result can be
2057 obtained with Python's regular superclass mechanisms.
2062 obtained with Python's regular superclass mechanisms.
2058
2063
2059 2004-12-17 Fernando Perez <fperez@colorado.edu>
2064 2004-12-17 Fernando Perez <fperez@colorado.edu>
2060
2065
2061 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2066 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2062 reported by Prabhu.
2067 reported by Prabhu.
2063 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2068 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2064 sys.stderr) instead of explicitly calling sys.stderr. This helps
2069 sys.stderr) instead of explicitly calling sys.stderr. This helps
2065 maintain our I/O abstractions clean, for future GUI embeddings.
2070 maintain our I/O abstractions clean, for future GUI embeddings.
2066
2071
2067 * IPython/genutils.py (info): added new utility for sys.stderr
2072 * IPython/genutils.py (info): added new utility for sys.stderr
2068 unified info message handling (thin wrapper around warn()).
2073 unified info message handling (thin wrapper around warn()).
2069
2074
2070 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2075 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2071 composite (dotted) names on verbose exceptions.
2076 composite (dotted) names on verbose exceptions.
2072 (VerboseTB.nullrepr): harden against another kind of errors which
2077 (VerboseTB.nullrepr): harden against another kind of errors which
2073 Python's inspect module can trigger, and which were crashing
2078 Python's inspect module can trigger, and which were crashing
2074 IPython. Thanks to a report by Marco Lombardi
2079 IPython. Thanks to a report by Marco Lombardi
2075 <mlombard-AT-ma010192.hq.eso.org>.
2080 <mlombard-AT-ma010192.hq.eso.org>.
2076
2081
2077 2004-12-13 *** Released version 0.6.6
2082 2004-12-13 *** Released version 0.6.6
2078
2083
2079 2004-12-12 Fernando Perez <fperez@colorado.edu>
2084 2004-12-12 Fernando Perez <fperez@colorado.edu>
2080
2085
2081 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2086 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2082 generated by pygtk upon initialization if it was built without
2087 generated by pygtk upon initialization if it was built without
2083 threads (for matplotlib users). After a crash reported by
2088 threads (for matplotlib users). After a crash reported by
2084 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2089 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2085
2090
2086 * IPython/ipmaker.py (make_IPython): fix small bug in the
2091 * IPython/ipmaker.py (make_IPython): fix small bug in the
2087 import_some parameter for multiple imports.
2092 import_some parameter for multiple imports.
2088
2093
2089 * IPython/iplib.py (ipmagic): simplified the interface of
2094 * IPython/iplib.py (ipmagic): simplified the interface of
2090 ipmagic() to take a single string argument, just as it would be
2095 ipmagic() to take a single string argument, just as it would be
2091 typed at the IPython cmd line.
2096 typed at the IPython cmd line.
2092 (ipalias): Added new ipalias() with an interface identical to
2097 (ipalias): Added new ipalias() with an interface identical to
2093 ipmagic(). This completes exposing a pure python interface to the
2098 ipmagic(). This completes exposing a pure python interface to the
2094 alias and magic system, which can be used in loops or more complex
2099 alias and magic system, which can be used in loops or more complex
2095 code where IPython's automatic line mangling is not active.
2100 code where IPython's automatic line mangling is not active.
2096
2101
2097 * IPython/genutils.py (timing): changed interface of timing to
2102 * IPython/genutils.py (timing): changed interface of timing to
2098 simply run code once, which is the most common case. timings()
2103 simply run code once, which is the most common case. timings()
2099 remains unchanged, for the cases where you want multiple runs.
2104 remains unchanged, for the cases where you want multiple runs.
2100
2105
2101 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2106 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2102 bug where Python2.2 crashes with exec'ing code which does not end
2107 bug where Python2.2 crashes with exec'ing code which does not end
2103 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2108 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2104 before.
2109 before.
2105
2110
2106 2004-12-10 Fernando Perez <fperez@colorado.edu>
2111 2004-12-10 Fernando Perez <fperez@colorado.edu>
2107
2112
2108 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2113 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2109 -t to -T, to accomodate the new -t flag in %run (the %run and
2114 -t to -T, to accomodate the new -t flag in %run (the %run and
2110 %prun options are kind of intermixed, and it's not easy to change
2115 %prun options are kind of intermixed, and it's not easy to change
2111 this with the limitations of python's getopt).
2116 this with the limitations of python's getopt).
2112
2117
2113 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2118 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2114 the execution of scripts. It's not as fine-tuned as timeit.py,
2119 the execution of scripts. It's not as fine-tuned as timeit.py,
2115 but it works from inside ipython (and under 2.2, which lacks
2120 but it works from inside ipython (and under 2.2, which lacks
2116 timeit.py). Optionally a number of runs > 1 can be given for
2121 timeit.py). Optionally a number of runs > 1 can be given for
2117 timing very short-running code.
2122 timing very short-running code.
2118
2123
2119 * IPython/genutils.py (uniq_stable): new routine which returns a
2124 * IPython/genutils.py (uniq_stable): new routine which returns a
2120 list of unique elements in any iterable, but in stable order of
2125 list of unique elements in any iterable, but in stable order of
2121 appearance. I needed this for the ultraTB fixes, and it's a handy
2126 appearance. I needed this for the ultraTB fixes, and it's a handy
2122 utility.
2127 utility.
2123
2128
2124 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2129 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2125 dotted names in Verbose exceptions. This had been broken since
2130 dotted names in Verbose exceptions. This had been broken since
2126 the very start, now x.y will properly be printed in a Verbose
2131 the very start, now x.y will properly be printed in a Verbose
2127 traceback, instead of x being shown and y appearing always as an
2132 traceback, instead of x being shown and y appearing always as an
2128 'undefined global'. Getting this to work was a bit tricky,
2133 'undefined global'. Getting this to work was a bit tricky,
2129 because by default python tokenizers are stateless. Saved by
2134 because by default python tokenizers are stateless. Saved by
2130 python's ability to easily add a bit of state to an arbitrary
2135 python's ability to easily add a bit of state to an arbitrary
2131 function (without needing to build a full-blown callable object).
2136 function (without needing to build a full-blown callable object).
2132
2137
2133 Also big cleanup of this code, which had horrendous runtime
2138 Also big cleanup of this code, which had horrendous runtime
2134 lookups of zillions of attributes for colorization. Moved all
2139 lookups of zillions of attributes for colorization. Moved all
2135 this code into a few templates, which make it cleaner and quicker.
2140 this code into a few templates, which make it cleaner and quicker.
2136
2141
2137 Printout quality was also improved for Verbose exceptions: one
2142 Printout quality was also improved for Verbose exceptions: one
2138 variable per line, and memory addresses are printed (this can be
2143 variable per line, and memory addresses are printed (this can be
2139 quite handy in nasty debugging situations, which is what Verbose
2144 quite handy in nasty debugging situations, which is what Verbose
2140 is for).
2145 is for).
2141
2146
2142 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2147 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2143 the command line as scripts to be loaded by embedded instances.
2148 the command line as scripts to be loaded by embedded instances.
2144 Doing so has the potential for an infinite recursion if there are
2149 Doing so has the potential for an infinite recursion if there are
2145 exceptions thrown in the process. This fixes a strange crash
2150 exceptions thrown in the process. This fixes a strange crash
2146 reported by Philippe MULLER <muller-AT-irit.fr>.
2151 reported by Philippe MULLER <muller-AT-irit.fr>.
2147
2152
2148 2004-12-09 Fernando Perez <fperez@colorado.edu>
2153 2004-12-09 Fernando Perez <fperez@colorado.edu>
2149
2154
2150 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2155 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2151 to reflect new names in matplotlib, which now expose the
2156 to reflect new names in matplotlib, which now expose the
2152 matlab-compatible interface via a pylab module instead of the
2157 matlab-compatible interface via a pylab module instead of the
2153 'matlab' name. The new code is backwards compatible, so users of
2158 'matlab' name. The new code is backwards compatible, so users of
2154 all matplotlib versions are OK. Patch by J. Hunter.
2159 all matplotlib versions are OK. Patch by J. Hunter.
2155
2160
2156 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2161 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2157 of __init__ docstrings for instances (class docstrings are already
2162 of __init__ docstrings for instances (class docstrings are already
2158 automatically printed). Instances with customized docstrings
2163 automatically printed). Instances with customized docstrings
2159 (indep. of the class) are also recognized and all 3 separate
2164 (indep. of the class) are also recognized and all 3 separate
2160 docstrings are printed (instance, class, constructor). After some
2165 docstrings are printed (instance, class, constructor). After some
2161 comments/suggestions by J. Hunter.
2166 comments/suggestions by J. Hunter.
2162
2167
2163 2004-12-05 Fernando Perez <fperez@colorado.edu>
2168 2004-12-05 Fernando Perez <fperez@colorado.edu>
2164
2169
2165 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2170 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2166 warnings when tab-completion fails and triggers an exception.
2171 warnings when tab-completion fails and triggers an exception.
2167
2172
2168 2004-12-03 Fernando Perez <fperez@colorado.edu>
2173 2004-12-03 Fernando Perez <fperez@colorado.edu>
2169
2174
2170 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2175 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2171 be triggered when using 'run -p'. An incorrect option flag was
2176 be triggered when using 'run -p'. An incorrect option flag was
2172 being set ('d' instead of 'D').
2177 being set ('d' instead of 'D').
2173 (manpage): fix missing escaped \- sign.
2178 (manpage): fix missing escaped \- sign.
2174
2179
2175 2004-11-30 *** Released version 0.6.5
2180 2004-11-30 *** Released version 0.6.5
2176
2181
2177 2004-11-30 Fernando Perez <fperez@colorado.edu>
2182 2004-11-30 Fernando Perez <fperez@colorado.edu>
2178
2183
2179 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2184 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2180 setting with -d option.
2185 setting with -d option.
2181
2186
2182 * setup.py (docfiles): Fix problem where the doc glob I was using
2187 * setup.py (docfiles): Fix problem where the doc glob I was using
2183 was COMPLETELY BROKEN. It was giving the right files by pure
2188 was COMPLETELY BROKEN. It was giving the right files by pure
2184 accident, but failed once I tried to include ipython.el. Note:
2189 accident, but failed once I tried to include ipython.el. Note:
2185 glob() does NOT allow you to do exclusion on multiple endings!
2190 glob() does NOT allow you to do exclusion on multiple endings!
2186
2191
2187 2004-11-29 Fernando Perez <fperez@colorado.edu>
2192 2004-11-29 Fernando Perez <fperez@colorado.edu>
2188
2193
2189 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2194 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2190 the manpage as the source. Better formatting & consistency.
2195 the manpage as the source. Better formatting & consistency.
2191
2196
2192 * IPython/Magic.py (magic_run): Added new -d option, to run
2197 * IPython/Magic.py (magic_run): Added new -d option, to run
2193 scripts under the control of the python pdb debugger. Note that
2198 scripts under the control of the python pdb debugger. Note that
2194 this required changing the %prun option -d to -D, to avoid a clash
2199 this required changing the %prun option -d to -D, to avoid a clash
2195 (since %run must pass options to %prun, and getopt is too dumb to
2200 (since %run must pass options to %prun, and getopt is too dumb to
2196 handle options with string values with embedded spaces). Thanks
2201 handle options with string values with embedded spaces). Thanks
2197 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2202 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2198 (magic_who_ls): added type matching to %who and %whos, so that one
2203 (magic_who_ls): added type matching to %who and %whos, so that one
2199 can filter their output to only include variables of certain
2204 can filter their output to only include variables of certain
2200 types. Another suggestion by Matthew.
2205 types. Another suggestion by Matthew.
2201 (magic_whos): Added memory summaries in kb and Mb for arrays.
2206 (magic_whos): Added memory summaries in kb and Mb for arrays.
2202 (magic_who): Improve formatting (break lines every 9 vars).
2207 (magic_who): Improve formatting (break lines every 9 vars).
2203
2208
2204 2004-11-28 Fernando Perez <fperez@colorado.edu>
2209 2004-11-28 Fernando Perez <fperez@colorado.edu>
2205
2210
2206 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2211 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2207 cache when empty lines were present.
2212 cache when empty lines were present.
2208
2213
2209 2004-11-24 Fernando Perez <fperez@colorado.edu>
2214 2004-11-24 Fernando Perez <fperez@colorado.edu>
2210
2215
2211 * IPython/usage.py (__doc__): document the re-activated threading
2216 * IPython/usage.py (__doc__): document the re-activated threading
2212 options for WX and GTK.
2217 options for WX and GTK.
2213
2218
2214 2004-11-23 Fernando Perez <fperez@colorado.edu>
2219 2004-11-23 Fernando Perez <fperez@colorado.edu>
2215
2220
2216 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2221 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2217 the -wthread and -gthread options, along with a new -tk one to try
2222 the -wthread and -gthread options, along with a new -tk one to try
2218 and coordinate Tk threading with wx/gtk. The tk support is very
2223 and coordinate Tk threading with wx/gtk. The tk support is very
2219 platform dependent, since it seems to require Tcl and Tk to be
2224 platform dependent, since it seems to require Tcl and Tk to be
2220 built with threads (Fedora1/2 appears NOT to have it, but in
2225 built with threads (Fedora1/2 appears NOT to have it, but in
2221 Prabhu's Debian boxes it works OK). But even with some Tk
2226 Prabhu's Debian boxes it works OK). But even with some Tk
2222 limitations, this is a great improvement.
2227 limitations, this is a great improvement.
2223
2228
2224 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2229 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2225 info in user prompts. Patch by Prabhu.
2230 info in user prompts. Patch by Prabhu.
2226
2231
2227 2004-11-18 Fernando Perez <fperez@colorado.edu>
2232 2004-11-18 Fernando Perez <fperez@colorado.edu>
2228
2233
2229 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2234 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2230 EOFErrors and bail, to avoid infinite loops if a non-terminating
2235 EOFErrors and bail, to avoid infinite loops if a non-terminating
2231 file is fed into ipython. Patch submitted in issue 19 by user,
2236 file is fed into ipython. Patch submitted in issue 19 by user,
2232 many thanks.
2237 many thanks.
2233
2238
2234 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2239 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2235 autoquote/parens in continuation prompts, which can cause lots of
2240 autoquote/parens in continuation prompts, which can cause lots of
2236 problems. Closes roundup issue 20.
2241 problems. Closes roundup issue 20.
2237
2242
2238 2004-11-17 Fernando Perez <fperez@colorado.edu>
2243 2004-11-17 Fernando Perez <fperez@colorado.edu>
2239
2244
2240 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2245 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2241 reported as debian bug #280505. I'm not sure my local changelog
2246 reported as debian bug #280505. I'm not sure my local changelog
2242 entry has the proper debian format (Jack?).
2247 entry has the proper debian format (Jack?).
2243
2248
2244 2004-11-08 *** Released version 0.6.4
2249 2004-11-08 *** Released version 0.6.4
2245
2250
2246 2004-11-08 Fernando Perez <fperez@colorado.edu>
2251 2004-11-08 Fernando Perez <fperez@colorado.edu>
2247
2252
2248 * IPython/iplib.py (init_readline): Fix exit message for Windows
2253 * IPython/iplib.py (init_readline): Fix exit message for Windows
2249 when readline is active. Thanks to a report by Eric Jones
2254 when readline is active. Thanks to a report by Eric Jones
2250 <eric-AT-enthought.com>.
2255 <eric-AT-enthought.com>.
2251
2256
2252 2004-11-07 Fernando Perez <fperez@colorado.edu>
2257 2004-11-07 Fernando Perez <fperez@colorado.edu>
2253
2258
2254 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2259 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2255 sometimes seen by win2k/cygwin users.
2260 sometimes seen by win2k/cygwin users.
2256
2261
2257 2004-11-06 Fernando Perez <fperez@colorado.edu>
2262 2004-11-06 Fernando Perez <fperez@colorado.edu>
2258
2263
2259 * IPython/iplib.py (interact): Change the handling of %Exit from
2264 * IPython/iplib.py (interact): Change the handling of %Exit from
2260 trying to propagate a SystemExit to an internal ipython flag.
2265 trying to propagate a SystemExit to an internal ipython flag.
2261 This is less elegant than using Python's exception mechanism, but
2266 This is less elegant than using Python's exception mechanism, but
2262 I can't get that to work reliably with threads, so under -pylab
2267 I can't get that to work reliably with threads, so under -pylab
2263 %Exit was hanging IPython. Cross-thread exception handling is
2268 %Exit was hanging IPython. Cross-thread exception handling is
2264 really a bitch. Thaks to a bug report by Stephen Walton
2269 really a bitch. Thaks to a bug report by Stephen Walton
2265 <stephen.walton-AT-csun.edu>.
2270 <stephen.walton-AT-csun.edu>.
2266
2271
2267 2004-11-04 Fernando Perez <fperez@colorado.edu>
2272 2004-11-04 Fernando Perez <fperez@colorado.edu>
2268
2273
2269 * IPython/iplib.py (raw_input_original): store a pointer to the
2274 * IPython/iplib.py (raw_input_original): store a pointer to the
2270 true raw_input to harden against code which can modify it
2275 true raw_input to harden against code which can modify it
2271 (wx.py.PyShell does this and would otherwise crash ipython).
2276 (wx.py.PyShell does this and would otherwise crash ipython).
2272 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2277 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2273
2278
2274 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2279 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2275 Ctrl-C problem, which does not mess up the input line.
2280 Ctrl-C problem, which does not mess up the input line.
2276
2281
2277 2004-11-03 Fernando Perez <fperez@colorado.edu>
2282 2004-11-03 Fernando Perez <fperez@colorado.edu>
2278
2283
2279 * IPython/Release.py: Changed licensing to BSD, in all files.
2284 * IPython/Release.py: Changed licensing to BSD, in all files.
2280 (name): lowercase name for tarball/RPM release.
2285 (name): lowercase name for tarball/RPM release.
2281
2286
2282 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2287 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2283 use throughout ipython.
2288 use throughout ipython.
2284
2289
2285 * IPython/Magic.py (Magic._ofind): Switch to using the new
2290 * IPython/Magic.py (Magic._ofind): Switch to using the new
2286 OInspect.getdoc() function.
2291 OInspect.getdoc() function.
2287
2292
2288 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2293 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2289 of the line currently being canceled via Ctrl-C. It's extremely
2294 of the line currently being canceled via Ctrl-C. It's extremely
2290 ugly, but I don't know how to do it better (the problem is one of
2295 ugly, but I don't know how to do it better (the problem is one of
2291 handling cross-thread exceptions).
2296 handling cross-thread exceptions).
2292
2297
2293 2004-10-28 Fernando Perez <fperez@colorado.edu>
2298 2004-10-28 Fernando Perez <fperez@colorado.edu>
2294
2299
2295 * IPython/Shell.py (signal_handler): add signal handlers to trap
2300 * IPython/Shell.py (signal_handler): add signal handlers to trap
2296 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2301 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2297 report by Francesc Alted.
2302 report by Francesc Alted.
2298
2303
2299 2004-10-21 Fernando Perez <fperez@colorado.edu>
2304 2004-10-21 Fernando Perez <fperez@colorado.edu>
2300
2305
2301 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2306 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2302 to % for pysh syntax extensions.
2307 to % for pysh syntax extensions.
2303
2308
2304 2004-10-09 Fernando Perez <fperez@colorado.edu>
2309 2004-10-09 Fernando Perez <fperez@colorado.edu>
2305
2310
2306 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2311 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2307 arrays to print a more useful summary, without calling str(arr).
2312 arrays to print a more useful summary, without calling str(arr).
2308 This avoids the problem of extremely lengthy computations which
2313 This avoids the problem of extremely lengthy computations which
2309 occur if arr is large, and appear to the user as a system lockup
2314 occur if arr is large, and appear to the user as a system lockup
2310 with 100% cpu activity. After a suggestion by Kristian Sandberg
2315 with 100% cpu activity. After a suggestion by Kristian Sandberg
2311 <Kristian.Sandberg@colorado.edu>.
2316 <Kristian.Sandberg@colorado.edu>.
2312 (Magic.__init__): fix bug in global magic escapes not being
2317 (Magic.__init__): fix bug in global magic escapes not being
2313 correctly set.
2318 correctly set.
2314
2319
2315 2004-10-08 Fernando Perez <fperez@colorado.edu>
2320 2004-10-08 Fernando Perez <fperez@colorado.edu>
2316
2321
2317 * IPython/Magic.py (__license__): change to absolute imports of
2322 * IPython/Magic.py (__license__): change to absolute imports of
2318 ipython's own internal packages, to start adapting to the absolute
2323 ipython's own internal packages, to start adapting to the absolute
2319 import requirement of PEP-328.
2324 import requirement of PEP-328.
2320
2325
2321 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2326 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2322 files, and standardize author/license marks through the Release
2327 files, and standardize author/license marks through the Release
2323 module instead of having per/file stuff (except for files with
2328 module instead of having per/file stuff (except for files with
2324 particular licenses, like the MIT/PSF-licensed codes).
2329 particular licenses, like the MIT/PSF-licensed codes).
2325
2330
2326 * IPython/Debugger.py: remove dead code for python 2.1
2331 * IPython/Debugger.py: remove dead code for python 2.1
2327
2332
2328 2004-10-04 Fernando Perez <fperez@colorado.edu>
2333 2004-10-04 Fernando Perez <fperez@colorado.edu>
2329
2334
2330 * IPython/iplib.py (ipmagic): New function for accessing magics
2335 * IPython/iplib.py (ipmagic): New function for accessing magics
2331 via a normal python function call.
2336 via a normal python function call.
2332
2337
2333 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2338 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2334 from '@' to '%', to accomodate the new @decorator syntax of python
2339 from '@' to '%', to accomodate the new @decorator syntax of python
2335 2.4.
2340 2.4.
2336
2341
2337 2004-09-29 Fernando Perez <fperez@colorado.edu>
2342 2004-09-29 Fernando Perez <fperez@colorado.edu>
2338
2343
2339 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2344 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2340 matplotlib.use to prevent running scripts which try to switch
2345 matplotlib.use to prevent running scripts which try to switch
2341 interactive backends from within ipython. This will just crash
2346 interactive backends from within ipython. This will just crash
2342 the python interpreter, so we can't allow it (but a detailed error
2347 the python interpreter, so we can't allow it (but a detailed error
2343 is given to the user).
2348 is given to the user).
2344
2349
2345 2004-09-28 Fernando Perez <fperez@colorado.edu>
2350 2004-09-28 Fernando Perez <fperez@colorado.edu>
2346
2351
2347 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2352 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2348 matplotlib-related fixes so that using @run with non-matplotlib
2353 matplotlib-related fixes so that using @run with non-matplotlib
2349 scripts doesn't pop up spurious plot windows. This requires
2354 scripts doesn't pop up spurious plot windows. This requires
2350 matplotlib >= 0.63, where I had to make some changes as well.
2355 matplotlib >= 0.63, where I had to make some changes as well.
2351
2356
2352 * IPython/ipmaker.py (make_IPython): update version requirement to
2357 * IPython/ipmaker.py (make_IPython): update version requirement to
2353 python 2.2.
2358 python 2.2.
2354
2359
2355 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2360 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2356 banner arg for embedded customization.
2361 banner arg for embedded customization.
2357
2362
2358 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2363 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2359 explicit uses of __IP as the IPython's instance name. Now things
2364 explicit uses of __IP as the IPython's instance name. Now things
2360 are properly handled via the shell.name value. The actual code
2365 are properly handled via the shell.name value. The actual code
2361 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2366 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2362 is much better than before. I'll clean things completely when the
2367 is much better than before. I'll clean things completely when the
2363 magic stuff gets a real overhaul.
2368 magic stuff gets a real overhaul.
2364
2369
2365 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2370 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2366 minor changes to debian dir.
2371 minor changes to debian dir.
2367
2372
2368 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2373 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2369 pointer to the shell itself in the interactive namespace even when
2374 pointer to the shell itself in the interactive namespace even when
2370 a user-supplied dict is provided. This is needed for embedding
2375 a user-supplied dict is provided. This is needed for embedding
2371 purposes (found by tests with Michel Sanner).
2376 purposes (found by tests with Michel Sanner).
2372
2377
2373 2004-09-27 Fernando Perez <fperez@colorado.edu>
2378 2004-09-27 Fernando Perez <fperez@colorado.edu>
2374
2379
2375 * IPython/UserConfig/ipythonrc: remove []{} from
2380 * IPython/UserConfig/ipythonrc: remove []{} from
2376 readline_remove_delims, so that things like [modname.<TAB> do
2381 readline_remove_delims, so that things like [modname.<TAB> do
2377 proper completion. This disables [].TAB, but that's a less common
2382 proper completion. This disables [].TAB, but that's a less common
2378 case than module names in list comprehensions, for example.
2383 case than module names in list comprehensions, for example.
2379 Thanks to a report by Andrea Riciputi.
2384 Thanks to a report by Andrea Riciputi.
2380
2385
2381 2004-09-09 Fernando Perez <fperez@colorado.edu>
2386 2004-09-09 Fernando Perez <fperez@colorado.edu>
2382
2387
2383 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2388 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2384 blocking problems in win32 and osx. Fix by John.
2389 blocking problems in win32 and osx. Fix by John.
2385
2390
2386 2004-09-08 Fernando Perez <fperez@colorado.edu>
2391 2004-09-08 Fernando Perez <fperez@colorado.edu>
2387
2392
2388 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2393 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2389 for Win32 and OSX. Fix by John Hunter.
2394 for Win32 and OSX. Fix by John Hunter.
2390
2395
2391 2004-08-30 *** Released version 0.6.3
2396 2004-08-30 *** Released version 0.6.3
2392
2397
2393 2004-08-30 Fernando Perez <fperez@colorado.edu>
2398 2004-08-30 Fernando Perez <fperez@colorado.edu>
2394
2399
2395 * setup.py (isfile): Add manpages to list of dependent files to be
2400 * setup.py (isfile): Add manpages to list of dependent files to be
2396 updated.
2401 updated.
2397
2402
2398 2004-08-27 Fernando Perez <fperez@colorado.edu>
2403 2004-08-27 Fernando Perez <fperez@colorado.edu>
2399
2404
2400 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2405 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2401 for now. They don't really work with standalone WX/GTK code
2406 for now. They don't really work with standalone WX/GTK code
2402 (though matplotlib IS working fine with both of those backends).
2407 (though matplotlib IS working fine with both of those backends).
2403 This will neeed much more testing. I disabled most things with
2408 This will neeed much more testing. I disabled most things with
2404 comments, so turning it back on later should be pretty easy.
2409 comments, so turning it back on later should be pretty easy.
2405
2410
2406 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2411 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2407 autocalling of expressions like r'foo', by modifying the line
2412 autocalling of expressions like r'foo', by modifying the line
2408 split regexp. Closes
2413 split regexp. Closes
2409 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2414 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2410 Riley <ipythonbugs-AT-sabi.net>.
2415 Riley <ipythonbugs-AT-sabi.net>.
2411 (InteractiveShell.mainloop): honor --nobanner with banner
2416 (InteractiveShell.mainloop): honor --nobanner with banner
2412 extensions.
2417 extensions.
2413
2418
2414 * IPython/Shell.py: Significant refactoring of all classes, so
2419 * IPython/Shell.py: Significant refactoring of all classes, so
2415 that we can really support ALL matplotlib backends and threading
2420 that we can really support ALL matplotlib backends and threading
2416 models (John spotted a bug with Tk which required this). Now we
2421 models (John spotted a bug with Tk which required this). Now we
2417 should support single-threaded, WX-threads and GTK-threads, both
2422 should support single-threaded, WX-threads and GTK-threads, both
2418 for generic code and for matplotlib.
2423 for generic code and for matplotlib.
2419
2424
2420 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2425 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2421 -pylab, to simplify things for users. Will also remove the pylab
2426 -pylab, to simplify things for users. Will also remove the pylab
2422 profile, since now all of matplotlib configuration is directly
2427 profile, since now all of matplotlib configuration is directly
2423 handled here. This also reduces startup time.
2428 handled here. This also reduces startup time.
2424
2429
2425 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2430 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2426 shell wasn't being correctly called. Also in IPShellWX.
2431 shell wasn't being correctly called. Also in IPShellWX.
2427
2432
2428 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2433 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2429 fine-tune banner.
2434 fine-tune banner.
2430
2435
2431 * IPython/numutils.py (spike): Deprecate these spike functions,
2436 * IPython/numutils.py (spike): Deprecate these spike functions,
2432 delete (long deprecated) gnuplot_exec handler.
2437 delete (long deprecated) gnuplot_exec handler.
2433
2438
2434 2004-08-26 Fernando Perez <fperez@colorado.edu>
2439 2004-08-26 Fernando Perez <fperez@colorado.edu>
2435
2440
2436 * ipython.1: Update for threading options, plus some others which
2441 * ipython.1: Update for threading options, plus some others which
2437 were missing.
2442 were missing.
2438
2443
2439 * IPython/ipmaker.py (__call__): Added -wthread option for
2444 * IPython/ipmaker.py (__call__): Added -wthread option for
2440 wxpython thread handling. Make sure threading options are only
2445 wxpython thread handling. Make sure threading options are only
2441 valid at the command line.
2446 valid at the command line.
2442
2447
2443 * scripts/ipython: moved shell selection into a factory function
2448 * scripts/ipython: moved shell selection into a factory function
2444 in Shell.py, to keep the starter script to a minimum.
2449 in Shell.py, to keep the starter script to a minimum.
2445
2450
2446 2004-08-25 Fernando Perez <fperez@colorado.edu>
2451 2004-08-25 Fernando Perez <fperez@colorado.edu>
2447
2452
2448 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2453 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2449 John. Along with some recent changes he made to matplotlib, the
2454 John. Along with some recent changes he made to matplotlib, the
2450 next versions of both systems should work very well together.
2455 next versions of both systems should work very well together.
2451
2456
2452 2004-08-24 Fernando Perez <fperez@colorado.edu>
2457 2004-08-24 Fernando Perez <fperez@colorado.edu>
2453
2458
2454 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2459 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2455 tried to switch the profiling to using hotshot, but I'm getting
2460 tried to switch the profiling to using hotshot, but I'm getting
2456 strange errors from prof.runctx() there. I may be misreading the
2461 strange errors from prof.runctx() there. I may be misreading the
2457 docs, but it looks weird. For now the profiling code will
2462 docs, but it looks weird. For now the profiling code will
2458 continue to use the standard profiler.
2463 continue to use the standard profiler.
2459
2464
2460 2004-08-23 Fernando Perez <fperez@colorado.edu>
2465 2004-08-23 Fernando Perez <fperez@colorado.edu>
2461
2466
2462 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2467 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2463 threaded shell, by John Hunter. It's not quite ready yet, but
2468 threaded shell, by John Hunter. It's not quite ready yet, but
2464 close.
2469 close.
2465
2470
2466 2004-08-22 Fernando Perez <fperez@colorado.edu>
2471 2004-08-22 Fernando Perez <fperez@colorado.edu>
2467
2472
2468 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2473 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2469 in Magic and ultraTB.
2474 in Magic and ultraTB.
2470
2475
2471 * ipython.1: document threading options in manpage.
2476 * ipython.1: document threading options in manpage.
2472
2477
2473 * scripts/ipython: Changed name of -thread option to -gthread,
2478 * scripts/ipython: Changed name of -thread option to -gthread,
2474 since this is GTK specific. I want to leave the door open for a
2479 since this is GTK specific. I want to leave the door open for a
2475 -wthread option for WX, which will most likely be necessary. This
2480 -wthread option for WX, which will most likely be necessary. This
2476 change affects usage and ipmaker as well.
2481 change affects usage and ipmaker as well.
2477
2482
2478 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2483 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2479 handle the matplotlib shell issues. Code by John Hunter
2484 handle the matplotlib shell issues. Code by John Hunter
2480 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2485 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2481 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2486 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2482 broken (and disabled for end users) for now, but it puts the
2487 broken (and disabled for end users) for now, but it puts the
2483 infrastructure in place.
2488 infrastructure in place.
2484
2489
2485 2004-08-21 Fernando Perez <fperez@colorado.edu>
2490 2004-08-21 Fernando Perez <fperez@colorado.edu>
2486
2491
2487 * ipythonrc-pylab: Add matplotlib support.
2492 * ipythonrc-pylab: Add matplotlib support.
2488
2493
2489 * matplotlib_config.py: new files for matplotlib support, part of
2494 * matplotlib_config.py: new files for matplotlib support, part of
2490 the pylab profile.
2495 the pylab profile.
2491
2496
2492 * IPython/usage.py (__doc__): documented the threading options.
2497 * IPython/usage.py (__doc__): documented the threading options.
2493
2498
2494 2004-08-20 Fernando Perez <fperez@colorado.edu>
2499 2004-08-20 Fernando Perez <fperez@colorado.edu>
2495
2500
2496 * ipython: Modified the main calling routine to handle the -thread
2501 * ipython: Modified the main calling routine to handle the -thread
2497 and -mpthread options. This needs to be done as a top-level hack,
2502 and -mpthread options. This needs to be done as a top-level hack,
2498 because it determines which class to instantiate for IPython
2503 because it determines which class to instantiate for IPython
2499 itself.
2504 itself.
2500
2505
2501 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2506 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2502 classes to support multithreaded GTK operation without blocking,
2507 classes to support multithreaded GTK operation without blocking,
2503 and matplotlib with all backends. This is a lot of still very
2508 and matplotlib with all backends. This is a lot of still very
2504 experimental code, and threads are tricky. So it may still have a
2509 experimental code, and threads are tricky. So it may still have a
2505 few rough edges... This code owes a lot to
2510 few rough edges... This code owes a lot to
2506 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2511 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2507 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2512 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2508 to John Hunter for all the matplotlib work.
2513 to John Hunter for all the matplotlib work.
2509
2514
2510 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2515 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2511 options for gtk thread and matplotlib support.
2516 options for gtk thread and matplotlib support.
2512
2517
2513 2004-08-16 Fernando Perez <fperez@colorado.edu>
2518 2004-08-16 Fernando Perez <fperez@colorado.edu>
2514
2519
2515 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2520 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2516 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2521 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2517 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2522 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2518
2523
2519 2004-08-11 Fernando Perez <fperez@colorado.edu>
2524 2004-08-11 Fernando Perez <fperez@colorado.edu>
2520
2525
2521 * setup.py (isfile): Fix build so documentation gets updated for
2526 * setup.py (isfile): Fix build so documentation gets updated for
2522 rpms (it was only done for .tgz builds).
2527 rpms (it was only done for .tgz builds).
2523
2528
2524 2004-08-10 Fernando Perez <fperez@colorado.edu>
2529 2004-08-10 Fernando Perez <fperez@colorado.edu>
2525
2530
2526 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2531 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2527
2532
2528 * iplib.py : Silence syntax error exceptions in tab-completion.
2533 * iplib.py : Silence syntax error exceptions in tab-completion.
2529
2534
2530 2004-08-05 Fernando Perez <fperez@colorado.edu>
2535 2004-08-05 Fernando Perez <fperez@colorado.edu>
2531
2536
2532 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2537 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2533 'color off' mark for continuation prompts. This was causing long
2538 'color off' mark for continuation prompts. This was causing long
2534 continuation lines to mis-wrap.
2539 continuation lines to mis-wrap.
2535
2540
2536 2004-08-01 Fernando Perez <fperez@colorado.edu>
2541 2004-08-01 Fernando Perez <fperez@colorado.edu>
2537
2542
2538 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2543 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2539 for building ipython to be a parameter. All this is necessary
2544 for building ipython to be a parameter. All this is necessary
2540 right now to have a multithreaded version, but this insane
2545 right now to have a multithreaded version, but this insane
2541 non-design will be cleaned up soon. For now, it's a hack that
2546 non-design will be cleaned up soon. For now, it's a hack that
2542 works.
2547 works.
2543
2548
2544 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2549 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2545 args in various places. No bugs so far, but it's a dangerous
2550 args in various places. No bugs so far, but it's a dangerous
2546 practice.
2551 practice.
2547
2552
2548 2004-07-31 Fernando Perez <fperez@colorado.edu>
2553 2004-07-31 Fernando Perez <fperez@colorado.edu>
2549
2554
2550 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2555 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2551 fix completion of files with dots in their names under most
2556 fix completion of files with dots in their names under most
2552 profiles (pysh was OK because the completion order is different).
2557 profiles (pysh was OK because the completion order is different).
2553
2558
2554 2004-07-27 Fernando Perez <fperez@colorado.edu>
2559 2004-07-27 Fernando Perez <fperez@colorado.edu>
2555
2560
2556 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2561 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2557 keywords manually, b/c the one in keyword.py was removed in python
2562 keywords manually, b/c the one in keyword.py was removed in python
2558 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2563 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2559 This is NOT a bug under python 2.3 and earlier.
2564 This is NOT a bug under python 2.3 and earlier.
2560
2565
2561 2004-07-26 Fernando Perez <fperez@colorado.edu>
2566 2004-07-26 Fernando Perez <fperez@colorado.edu>
2562
2567
2563 * IPython/ultraTB.py (VerboseTB.text): Add another
2568 * IPython/ultraTB.py (VerboseTB.text): Add another
2564 linecache.checkcache() call to try to prevent inspect.py from
2569 linecache.checkcache() call to try to prevent inspect.py from
2565 crashing under python 2.3. I think this fixes
2570 crashing under python 2.3. I think this fixes
2566 http://www.scipy.net/roundup/ipython/issue17.
2571 http://www.scipy.net/roundup/ipython/issue17.
2567
2572
2568 2004-07-26 *** Released version 0.6.2
2573 2004-07-26 *** Released version 0.6.2
2569
2574
2570 2004-07-26 Fernando Perez <fperez@colorado.edu>
2575 2004-07-26 Fernando Perez <fperez@colorado.edu>
2571
2576
2572 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2577 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2573 fail for any number.
2578 fail for any number.
2574 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2579 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2575 empty bookmarks.
2580 empty bookmarks.
2576
2581
2577 2004-07-26 *** Released version 0.6.1
2582 2004-07-26 *** Released version 0.6.1
2578
2583
2579 2004-07-26 Fernando Perez <fperez@colorado.edu>
2584 2004-07-26 Fernando Perez <fperez@colorado.edu>
2580
2585
2581 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2586 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2582
2587
2583 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2588 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2584 escaping '()[]{}' in filenames.
2589 escaping '()[]{}' in filenames.
2585
2590
2586 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2591 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2587 Python 2.2 users who lack a proper shlex.split.
2592 Python 2.2 users who lack a proper shlex.split.
2588
2593
2589 2004-07-19 Fernando Perez <fperez@colorado.edu>
2594 2004-07-19 Fernando Perez <fperez@colorado.edu>
2590
2595
2591 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2596 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2592 for reading readline's init file. I follow the normal chain:
2597 for reading readline's init file. I follow the normal chain:
2593 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2598 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2594 report by Mike Heeter. This closes
2599 report by Mike Heeter. This closes
2595 http://www.scipy.net/roundup/ipython/issue16.
2600 http://www.scipy.net/roundup/ipython/issue16.
2596
2601
2597 2004-07-18 Fernando Perez <fperez@colorado.edu>
2602 2004-07-18 Fernando Perez <fperez@colorado.edu>
2598
2603
2599 * IPython/iplib.py (__init__): Add better handling of '\' under
2604 * IPython/iplib.py (__init__): Add better handling of '\' under
2600 Win32 for filenames. After a patch by Ville.
2605 Win32 for filenames. After a patch by Ville.
2601
2606
2602 2004-07-17 Fernando Perez <fperez@colorado.edu>
2607 2004-07-17 Fernando Perez <fperez@colorado.edu>
2603
2608
2604 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2609 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2605 autocalling would be triggered for 'foo is bar' if foo is
2610 autocalling would be triggered for 'foo is bar' if foo is
2606 callable. I also cleaned up the autocall detection code to use a
2611 callable. I also cleaned up the autocall detection code to use a
2607 regexp, which is faster. Bug reported by Alexander Schmolck.
2612 regexp, which is faster. Bug reported by Alexander Schmolck.
2608
2613
2609 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2614 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2610 '?' in them would confuse the help system. Reported by Alex
2615 '?' in them would confuse the help system. Reported by Alex
2611 Schmolck.
2616 Schmolck.
2612
2617
2613 2004-07-16 Fernando Perez <fperez@colorado.edu>
2618 2004-07-16 Fernando Perez <fperez@colorado.edu>
2614
2619
2615 * IPython/GnuplotInteractive.py (__all__): added plot2.
2620 * IPython/GnuplotInteractive.py (__all__): added plot2.
2616
2621
2617 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2622 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2618 plotting dictionaries, lists or tuples of 1d arrays.
2623 plotting dictionaries, lists or tuples of 1d arrays.
2619
2624
2620 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2625 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2621 optimizations.
2626 optimizations.
2622
2627
2623 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2628 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2624 the information which was there from Janko's original IPP code:
2629 the information which was there from Janko's original IPP code:
2625
2630
2626 03.05.99 20:53 porto.ifm.uni-kiel.de
2631 03.05.99 20:53 porto.ifm.uni-kiel.de
2627 --Started changelog.
2632 --Started changelog.
2628 --make clear do what it say it does
2633 --make clear do what it say it does
2629 --added pretty output of lines from inputcache
2634 --added pretty output of lines from inputcache
2630 --Made Logger a mixin class, simplifies handling of switches
2635 --Made Logger a mixin class, simplifies handling of switches
2631 --Added own completer class. .string<TAB> expands to last history
2636 --Added own completer class. .string<TAB> expands to last history
2632 line which starts with string. The new expansion is also present
2637 line which starts with string. The new expansion is also present
2633 with Ctrl-r from the readline library. But this shows, who this
2638 with Ctrl-r from the readline library. But this shows, who this
2634 can be done for other cases.
2639 can be done for other cases.
2635 --Added convention that all shell functions should accept a
2640 --Added convention that all shell functions should accept a
2636 parameter_string This opens the door for different behaviour for
2641 parameter_string This opens the door for different behaviour for
2637 each function. @cd is a good example of this.
2642 each function. @cd is a good example of this.
2638
2643
2639 04.05.99 12:12 porto.ifm.uni-kiel.de
2644 04.05.99 12:12 porto.ifm.uni-kiel.de
2640 --added logfile rotation
2645 --added logfile rotation
2641 --added new mainloop method which freezes first the namespace
2646 --added new mainloop method which freezes first the namespace
2642
2647
2643 07.05.99 21:24 porto.ifm.uni-kiel.de
2648 07.05.99 21:24 porto.ifm.uni-kiel.de
2644 --added the docreader classes. Now there is a help system.
2649 --added the docreader classes. Now there is a help system.
2645 -This is only a first try. Currently it's not easy to put new
2650 -This is only a first try. Currently it's not easy to put new
2646 stuff in the indices. But this is the way to go. Info would be
2651 stuff in the indices. But this is the way to go. Info would be
2647 better, but HTML is every where and not everybody has an info
2652 better, but HTML is every where and not everybody has an info
2648 system installed and it's not so easy to change html-docs to info.
2653 system installed and it's not so easy to change html-docs to info.
2649 --added global logfile option
2654 --added global logfile option
2650 --there is now a hook for object inspection method pinfo needs to
2655 --there is now a hook for object inspection method pinfo needs to
2651 be provided for this. Can be reached by two '??'.
2656 be provided for this. Can be reached by two '??'.
2652
2657
2653 08.05.99 20:51 porto.ifm.uni-kiel.de
2658 08.05.99 20:51 porto.ifm.uni-kiel.de
2654 --added a README
2659 --added a README
2655 --bug in rc file. Something has changed so functions in the rc
2660 --bug in rc file. Something has changed so functions in the rc
2656 file need to reference the shell and not self. Not clear if it's a
2661 file need to reference the shell and not self. Not clear if it's a
2657 bug or feature.
2662 bug or feature.
2658 --changed rc file for new behavior
2663 --changed rc file for new behavior
2659
2664
2660 2004-07-15 Fernando Perez <fperez@colorado.edu>
2665 2004-07-15 Fernando Perez <fperez@colorado.edu>
2661
2666
2662 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2667 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2663 cache was falling out of sync in bizarre manners when multi-line
2668 cache was falling out of sync in bizarre manners when multi-line
2664 input was present. Minor optimizations and cleanup.
2669 input was present. Minor optimizations and cleanup.
2665
2670
2666 (Logger): Remove old Changelog info for cleanup. This is the
2671 (Logger): Remove old Changelog info for cleanup. This is the
2667 information which was there from Janko's original code:
2672 information which was there from Janko's original code:
2668
2673
2669 Changes to Logger: - made the default log filename a parameter
2674 Changes to Logger: - made the default log filename a parameter
2670
2675
2671 - put a check for lines beginning with !@? in log(). Needed
2676 - put a check for lines beginning with !@? in log(). Needed
2672 (even if the handlers properly log their lines) for mid-session
2677 (even if the handlers properly log their lines) for mid-session
2673 logging activation to work properly. Without this, lines logged
2678 logging activation to work properly. Without this, lines logged
2674 in mid session, which get read from the cache, would end up
2679 in mid session, which get read from the cache, would end up
2675 'bare' (with !@? in the open) in the log. Now they are caught
2680 'bare' (with !@? in the open) in the log. Now they are caught
2676 and prepended with a #.
2681 and prepended with a #.
2677
2682
2678 * IPython/iplib.py (InteractiveShell.init_readline): added check
2683 * IPython/iplib.py (InteractiveShell.init_readline): added check
2679 in case MagicCompleter fails to be defined, so we don't crash.
2684 in case MagicCompleter fails to be defined, so we don't crash.
2680
2685
2681 2004-07-13 Fernando Perez <fperez@colorado.edu>
2686 2004-07-13 Fernando Perez <fperez@colorado.edu>
2682
2687
2683 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2688 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2684 of EPS if the requested filename ends in '.eps'.
2689 of EPS if the requested filename ends in '.eps'.
2685
2690
2686 2004-07-04 Fernando Perez <fperez@colorado.edu>
2691 2004-07-04 Fernando Perez <fperez@colorado.edu>
2687
2692
2688 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2693 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2689 escaping of quotes when calling the shell.
2694 escaping of quotes when calling the shell.
2690
2695
2691 2004-07-02 Fernando Perez <fperez@colorado.edu>
2696 2004-07-02 Fernando Perez <fperez@colorado.edu>
2692
2697
2693 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2698 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2694 gettext not working because we were clobbering '_'. Fixes
2699 gettext not working because we were clobbering '_'. Fixes
2695 http://www.scipy.net/roundup/ipython/issue6.
2700 http://www.scipy.net/roundup/ipython/issue6.
2696
2701
2697 2004-07-01 Fernando Perez <fperez@colorado.edu>
2702 2004-07-01 Fernando Perez <fperez@colorado.edu>
2698
2703
2699 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2704 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2700 into @cd. Patch by Ville.
2705 into @cd. Patch by Ville.
2701
2706
2702 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2707 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2703 new function to store things after ipmaker runs. Patch by Ville.
2708 new function to store things after ipmaker runs. Patch by Ville.
2704 Eventually this will go away once ipmaker is removed and the class
2709 Eventually this will go away once ipmaker is removed and the class
2705 gets cleaned up, but for now it's ok. Key functionality here is
2710 gets cleaned up, but for now it's ok. Key functionality here is
2706 the addition of the persistent storage mechanism, a dict for
2711 the addition of the persistent storage mechanism, a dict for
2707 keeping data across sessions (for now just bookmarks, but more can
2712 keeping data across sessions (for now just bookmarks, but more can
2708 be implemented later).
2713 be implemented later).
2709
2714
2710 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2715 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2711 persistent across sections. Patch by Ville, I modified it
2716 persistent across sections. Patch by Ville, I modified it
2712 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2717 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2713 added a '-l' option to list all bookmarks.
2718 added a '-l' option to list all bookmarks.
2714
2719
2715 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2720 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2716 center for cleanup. Registered with atexit.register(). I moved
2721 center for cleanup. Registered with atexit.register(). I moved
2717 here the old exit_cleanup(). After a patch by Ville.
2722 here the old exit_cleanup(). After a patch by Ville.
2718
2723
2719 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2724 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2720 characters in the hacked shlex_split for python 2.2.
2725 characters in the hacked shlex_split for python 2.2.
2721
2726
2722 * IPython/iplib.py (file_matches): more fixes to filenames with
2727 * IPython/iplib.py (file_matches): more fixes to filenames with
2723 whitespace in them. It's not perfect, but limitations in python's
2728 whitespace in them. It's not perfect, but limitations in python's
2724 readline make it impossible to go further.
2729 readline make it impossible to go further.
2725
2730
2726 2004-06-29 Fernando Perez <fperez@colorado.edu>
2731 2004-06-29 Fernando Perez <fperez@colorado.edu>
2727
2732
2728 * IPython/iplib.py (file_matches): escape whitespace correctly in
2733 * IPython/iplib.py (file_matches): escape whitespace correctly in
2729 filename completions. Bug reported by Ville.
2734 filename completions. Bug reported by Ville.
2730
2735
2731 2004-06-28 Fernando Perez <fperez@colorado.edu>
2736 2004-06-28 Fernando Perez <fperez@colorado.edu>
2732
2737
2733 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2738 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2734 the history file will be called 'history-PROFNAME' (or just
2739 the history file will be called 'history-PROFNAME' (or just
2735 'history' if no profile is loaded). I was getting annoyed at
2740 'history' if no profile is loaded). I was getting annoyed at
2736 getting my Numerical work history clobbered by pysh sessions.
2741 getting my Numerical work history clobbered by pysh sessions.
2737
2742
2738 * IPython/iplib.py (InteractiveShell.__init__): Internal
2743 * IPython/iplib.py (InteractiveShell.__init__): Internal
2739 getoutputerror() function so that we can honor the system_verbose
2744 getoutputerror() function so that we can honor the system_verbose
2740 flag for _all_ system calls. I also added escaping of #
2745 flag for _all_ system calls. I also added escaping of #
2741 characters here to avoid confusing Itpl.
2746 characters here to avoid confusing Itpl.
2742
2747
2743 * IPython/Magic.py (shlex_split): removed call to shell in
2748 * IPython/Magic.py (shlex_split): removed call to shell in
2744 parse_options and replaced it with shlex.split(). The annoying
2749 parse_options and replaced it with shlex.split(). The annoying
2745 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2750 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2746 to backport it from 2.3, with several frail hacks (the shlex
2751 to backport it from 2.3, with several frail hacks (the shlex
2747 module is rather limited in 2.2). Thanks to a suggestion by Ville
2752 module is rather limited in 2.2). Thanks to a suggestion by Ville
2748 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2753 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2749 problem.
2754 problem.
2750
2755
2751 (Magic.magic_system_verbose): new toggle to print the actual
2756 (Magic.magic_system_verbose): new toggle to print the actual
2752 system calls made by ipython. Mainly for debugging purposes.
2757 system calls made by ipython. Mainly for debugging purposes.
2753
2758
2754 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2759 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2755 doesn't support persistence. Reported (and fix suggested) by
2760 doesn't support persistence. Reported (and fix suggested) by
2756 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2761 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2757
2762
2758 2004-06-26 Fernando Perez <fperez@colorado.edu>
2763 2004-06-26 Fernando Perez <fperez@colorado.edu>
2759
2764
2760 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2765 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2761 continue prompts.
2766 continue prompts.
2762
2767
2763 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2768 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2764 function (basically a big docstring) and a few more things here to
2769 function (basically a big docstring) and a few more things here to
2765 speedup startup. pysh.py is now very lightweight. We want because
2770 speedup startup. pysh.py is now very lightweight. We want because
2766 it gets execfile'd, while InterpreterExec gets imported, so
2771 it gets execfile'd, while InterpreterExec gets imported, so
2767 byte-compilation saves time.
2772 byte-compilation saves time.
2768
2773
2769 2004-06-25 Fernando Perez <fperez@colorado.edu>
2774 2004-06-25 Fernando Perez <fperez@colorado.edu>
2770
2775
2771 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2776 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2772 -NUM', which was recently broken.
2777 -NUM', which was recently broken.
2773
2778
2774 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2779 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2775 in multi-line input (but not !!, which doesn't make sense there).
2780 in multi-line input (but not !!, which doesn't make sense there).
2776
2781
2777 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2782 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2778 It's just too useful, and people can turn it off in the less
2783 It's just too useful, and people can turn it off in the less
2779 common cases where it's a problem.
2784 common cases where it's a problem.
2780
2785
2781 2004-06-24 Fernando Perez <fperez@colorado.edu>
2786 2004-06-24 Fernando Perez <fperez@colorado.edu>
2782
2787
2783 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2788 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2784 special syntaxes (like alias calling) is now allied in multi-line
2789 special syntaxes (like alias calling) is now allied in multi-line
2785 input. This is still _very_ experimental, but it's necessary for
2790 input. This is still _very_ experimental, but it's necessary for
2786 efficient shell usage combining python looping syntax with system
2791 efficient shell usage combining python looping syntax with system
2787 calls. For now it's restricted to aliases, I don't think it
2792 calls. For now it's restricted to aliases, I don't think it
2788 really even makes sense to have this for magics.
2793 really even makes sense to have this for magics.
2789
2794
2790 2004-06-23 Fernando Perez <fperez@colorado.edu>
2795 2004-06-23 Fernando Perez <fperez@colorado.edu>
2791
2796
2792 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2797 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2793 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2798 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2794
2799
2795 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2800 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2796 extensions under Windows (after code sent by Gary Bishop). The
2801 extensions under Windows (after code sent by Gary Bishop). The
2797 extensions considered 'executable' are stored in IPython's rc
2802 extensions considered 'executable' are stored in IPython's rc
2798 structure as win_exec_ext.
2803 structure as win_exec_ext.
2799
2804
2800 * IPython/genutils.py (shell): new function, like system() but
2805 * IPython/genutils.py (shell): new function, like system() but
2801 without return value. Very useful for interactive shell work.
2806 without return value. Very useful for interactive shell work.
2802
2807
2803 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2808 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2804 delete aliases.
2809 delete aliases.
2805
2810
2806 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2811 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2807 sure that the alias table doesn't contain python keywords.
2812 sure that the alias table doesn't contain python keywords.
2808
2813
2809 2004-06-21 Fernando Perez <fperez@colorado.edu>
2814 2004-06-21 Fernando Perez <fperez@colorado.edu>
2810
2815
2811 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2816 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2812 non-existent items are found in $PATH. Reported by Thorsten.
2817 non-existent items are found in $PATH. Reported by Thorsten.
2813
2818
2814 2004-06-20 Fernando Perez <fperez@colorado.edu>
2819 2004-06-20 Fernando Perez <fperez@colorado.edu>
2815
2820
2816 * IPython/iplib.py (complete): modified the completer so that the
2821 * IPython/iplib.py (complete): modified the completer so that the
2817 order of priorities can be easily changed at runtime.
2822 order of priorities can be easily changed at runtime.
2818
2823
2819 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2824 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2820 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2825 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2821
2826
2822 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2827 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2823 expand Python variables prepended with $ in all system calls. The
2828 expand Python variables prepended with $ in all system calls. The
2824 same was done to InteractiveShell.handle_shell_escape. Now all
2829 same was done to InteractiveShell.handle_shell_escape. Now all
2825 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2830 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2826 expansion of python variables and expressions according to the
2831 expansion of python variables and expressions according to the
2827 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2832 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2828
2833
2829 Though PEP-215 has been rejected, a similar (but simpler) one
2834 Though PEP-215 has been rejected, a similar (but simpler) one
2830 seems like it will go into Python 2.4, PEP-292 -
2835 seems like it will go into Python 2.4, PEP-292 -
2831 http://www.python.org/peps/pep-0292.html.
2836 http://www.python.org/peps/pep-0292.html.
2832
2837
2833 I'll keep the full syntax of PEP-215, since IPython has since the
2838 I'll keep the full syntax of PEP-215, since IPython has since the
2834 start used Ka-Ping Yee's reference implementation discussed there
2839 start used Ka-Ping Yee's reference implementation discussed there
2835 (Itpl), and I actually like the powerful semantics it offers.
2840 (Itpl), and I actually like the powerful semantics it offers.
2836
2841
2837 In order to access normal shell variables, the $ has to be escaped
2842 In order to access normal shell variables, the $ has to be escaped
2838 via an extra $. For example:
2843 via an extra $. For example:
2839
2844
2840 In [7]: PATH='a python variable'
2845 In [7]: PATH='a python variable'
2841
2846
2842 In [8]: !echo $PATH
2847 In [8]: !echo $PATH
2843 a python variable
2848 a python variable
2844
2849
2845 In [9]: !echo $$PATH
2850 In [9]: !echo $$PATH
2846 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2851 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2847
2852
2848 (Magic.parse_options): escape $ so the shell doesn't evaluate
2853 (Magic.parse_options): escape $ so the shell doesn't evaluate
2849 things prematurely.
2854 things prematurely.
2850
2855
2851 * IPython/iplib.py (InteractiveShell.call_alias): added the
2856 * IPython/iplib.py (InteractiveShell.call_alias): added the
2852 ability for aliases to expand python variables via $.
2857 ability for aliases to expand python variables via $.
2853
2858
2854 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2859 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2855 system, now there's a @rehash/@rehashx pair of magics. These work
2860 system, now there's a @rehash/@rehashx pair of magics. These work
2856 like the csh rehash command, and can be invoked at any time. They
2861 like the csh rehash command, and can be invoked at any time. They
2857 build a table of aliases to everything in the user's $PATH
2862 build a table of aliases to everything in the user's $PATH
2858 (@rehash uses everything, @rehashx is slower but only adds
2863 (@rehash uses everything, @rehashx is slower but only adds
2859 executable files). With this, the pysh.py-based shell profile can
2864 executable files). With this, the pysh.py-based shell profile can
2860 now simply call rehash upon startup, and full access to all
2865 now simply call rehash upon startup, and full access to all
2861 programs in the user's path is obtained.
2866 programs in the user's path is obtained.
2862
2867
2863 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2868 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2864 functionality is now fully in place. I removed the old dynamic
2869 functionality is now fully in place. I removed the old dynamic
2865 code generation based approach, in favor of a much lighter one
2870 code generation based approach, in favor of a much lighter one
2866 based on a simple dict. The advantage is that this allows me to
2871 based on a simple dict. The advantage is that this allows me to
2867 now have thousands of aliases with negligible cost (unthinkable
2872 now have thousands of aliases with negligible cost (unthinkable
2868 with the old system).
2873 with the old system).
2869
2874
2870 2004-06-19 Fernando Perez <fperez@colorado.edu>
2875 2004-06-19 Fernando Perez <fperez@colorado.edu>
2871
2876
2872 * IPython/iplib.py (__init__): extended MagicCompleter class to
2877 * IPython/iplib.py (__init__): extended MagicCompleter class to
2873 also complete (last in priority) on user aliases.
2878 also complete (last in priority) on user aliases.
2874
2879
2875 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2880 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2876 call to eval.
2881 call to eval.
2877 (ItplNS.__init__): Added a new class which functions like Itpl,
2882 (ItplNS.__init__): Added a new class which functions like Itpl,
2878 but allows configuring the namespace for the evaluation to occur
2883 but allows configuring the namespace for the evaluation to occur
2879 in.
2884 in.
2880
2885
2881 2004-06-18 Fernando Perez <fperez@colorado.edu>
2886 2004-06-18 Fernando Perez <fperez@colorado.edu>
2882
2887
2883 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2888 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2884 better message when 'exit' or 'quit' are typed (a common newbie
2889 better message when 'exit' or 'quit' are typed (a common newbie
2885 confusion).
2890 confusion).
2886
2891
2887 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2892 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2888 check for Windows users.
2893 check for Windows users.
2889
2894
2890 * IPython/iplib.py (InteractiveShell.user_setup): removed
2895 * IPython/iplib.py (InteractiveShell.user_setup): removed
2891 disabling of colors for Windows. I'll test at runtime and issue a
2896 disabling of colors for Windows. I'll test at runtime and issue a
2892 warning if Gary's readline isn't found, as to nudge users to
2897 warning if Gary's readline isn't found, as to nudge users to
2893 download it.
2898 download it.
2894
2899
2895 2004-06-16 Fernando Perez <fperez@colorado.edu>
2900 2004-06-16 Fernando Perez <fperez@colorado.edu>
2896
2901
2897 * IPython/genutils.py (Stream.__init__): changed to print errors
2902 * IPython/genutils.py (Stream.__init__): changed to print errors
2898 to sys.stderr. I had a circular dependency here. Now it's
2903 to sys.stderr. I had a circular dependency here. Now it's
2899 possible to run ipython as IDLE's shell (consider this pre-alpha,
2904 possible to run ipython as IDLE's shell (consider this pre-alpha,
2900 since true stdout things end up in the starting terminal instead
2905 since true stdout things end up in the starting terminal instead
2901 of IDLE's out).
2906 of IDLE's out).
2902
2907
2903 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2908 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2904 users who haven't # updated their prompt_in2 definitions. Remove
2909 users who haven't # updated their prompt_in2 definitions. Remove
2905 eventually.
2910 eventually.
2906 (multiple_replace): added credit to original ASPN recipe.
2911 (multiple_replace): added credit to original ASPN recipe.
2907
2912
2908 2004-06-15 Fernando Perez <fperez@colorado.edu>
2913 2004-06-15 Fernando Perez <fperez@colorado.edu>
2909
2914
2910 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2915 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
2911 list of auto-defined aliases.
2916 list of auto-defined aliases.
2912
2917
2913 2004-06-13 Fernando Perez <fperez@colorado.edu>
2918 2004-06-13 Fernando Perez <fperez@colorado.edu>
2914
2919
2915 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2920 * setup.py (scriptfiles): Don't trigger win_post_install unless an
2916 install was really requested (so setup.py can be used for other
2921 install was really requested (so setup.py can be used for other
2917 things under Windows).
2922 things under Windows).
2918
2923
2919 2004-06-10 Fernando Perez <fperez@colorado.edu>
2924 2004-06-10 Fernando Perez <fperez@colorado.edu>
2920
2925
2921 * IPython/Logger.py (Logger.create_log): Manually remove any old
2926 * IPython/Logger.py (Logger.create_log): Manually remove any old
2922 backup, since os.remove may fail under Windows. Fixes bug
2927 backup, since os.remove may fail under Windows. Fixes bug
2923 reported by Thorsten.
2928 reported by Thorsten.
2924
2929
2925 2004-06-09 Fernando Perez <fperez@colorado.edu>
2930 2004-06-09 Fernando Perez <fperez@colorado.edu>
2926
2931
2927 * examples/example-embed.py: fixed all references to %n (replaced
2932 * examples/example-embed.py: fixed all references to %n (replaced
2928 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2933 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
2929 for all examples and the manual as well.
2934 for all examples and the manual as well.
2930
2935
2931 2004-06-08 Fernando Perez <fperez@colorado.edu>
2936 2004-06-08 Fernando Perez <fperez@colorado.edu>
2932
2937
2933 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2938 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
2934 alignment and color management. All 3 prompt subsystems now
2939 alignment and color management. All 3 prompt subsystems now
2935 inherit from BasePrompt.
2940 inherit from BasePrompt.
2936
2941
2937 * tools/release: updates for windows installer build and tag rpms
2942 * tools/release: updates for windows installer build and tag rpms
2938 with python version (since paths are fixed).
2943 with python version (since paths are fixed).
2939
2944
2940 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2945 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
2941 which will become eventually obsolete. Also fixed the default
2946 which will become eventually obsolete. Also fixed the default
2942 prompt_in2 to use \D, so at least new users start with the correct
2947 prompt_in2 to use \D, so at least new users start with the correct
2943 defaults.
2948 defaults.
2944 WARNING: Users with existing ipythonrc files will need to apply
2949 WARNING: Users with existing ipythonrc files will need to apply
2945 this fix manually!
2950 this fix manually!
2946
2951
2947 * setup.py: make windows installer (.exe). This is finally the
2952 * setup.py: make windows installer (.exe). This is finally the
2948 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2953 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
2949 which I hadn't included because it required Python 2.3 (or recent
2954 which I hadn't included because it required Python 2.3 (or recent
2950 distutils).
2955 distutils).
2951
2956
2952 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2957 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
2953 usage of new '\D' escape.
2958 usage of new '\D' escape.
2954
2959
2955 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2960 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
2956 lacks os.getuid())
2961 lacks os.getuid())
2957 (CachedOutput.set_colors): Added the ability to turn coloring
2962 (CachedOutput.set_colors): Added the ability to turn coloring
2958 on/off with @colors even for manually defined prompt colors. It
2963 on/off with @colors even for manually defined prompt colors. It
2959 uses a nasty global, but it works safely and via the generic color
2964 uses a nasty global, but it works safely and via the generic color
2960 handling mechanism.
2965 handling mechanism.
2961 (Prompt2.__init__): Introduced new escape '\D' for continuation
2966 (Prompt2.__init__): Introduced new escape '\D' for continuation
2962 prompts. It represents the counter ('\#') as dots.
2967 prompts. It represents the counter ('\#') as dots.
2963 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2968 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
2964 need to update their ipythonrc files and replace '%n' with '\D' in
2969 need to update their ipythonrc files and replace '%n' with '\D' in
2965 their prompt_in2 settings everywhere. Sorry, but there's
2970 their prompt_in2 settings everywhere. Sorry, but there's
2966 otherwise no clean way to get all prompts to properly align. The
2971 otherwise no clean way to get all prompts to properly align. The
2967 ipythonrc shipped with IPython has been updated.
2972 ipythonrc shipped with IPython has been updated.
2968
2973
2969 2004-06-07 Fernando Perez <fperez@colorado.edu>
2974 2004-06-07 Fernando Perez <fperez@colorado.edu>
2970
2975
2971 * setup.py (isfile): Pass local_icons option to latex2html, so the
2976 * setup.py (isfile): Pass local_icons option to latex2html, so the
2972 resulting HTML file is self-contained. Thanks to
2977 resulting HTML file is self-contained. Thanks to
2973 dryice-AT-liu.com.cn for the tip.
2978 dryice-AT-liu.com.cn for the tip.
2974
2979
2975 * pysh.py: I created a new profile 'shell', which implements a
2980 * pysh.py: I created a new profile 'shell', which implements a
2976 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2981 _rudimentary_ IPython-based shell. This is in NO WAY a realy
2977 system shell, nor will it become one anytime soon. It's mainly
2982 system shell, nor will it become one anytime soon. It's mainly
2978 meant to illustrate the use of the new flexible bash-like prompts.
2983 meant to illustrate the use of the new flexible bash-like prompts.
2979 I guess it could be used by hardy souls for true shell management,
2984 I guess it could be used by hardy souls for true shell management,
2980 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2985 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
2981 profile. This uses the InterpreterExec extension provided by
2986 profile. This uses the InterpreterExec extension provided by
2982 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2987 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2983
2988
2984 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2989 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2985 auto-align itself with the length of the previous input prompt
2990 auto-align itself with the length of the previous input prompt
2986 (taking into account the invisible color escapes).
2991 (taking into account the invisible color escapes).
2987 (CachedOutput.__init__): Large restructuring of this class. Now
2992 (CachedOutput.__init__): Large restructuring of this class. Now
2988 all three prompts (primary1, primary2, output) are proper objects,
2993 all three prompts (primary1, primary2, output) are proper objects,
2989 managed by the 'parent' CachedOutput class. The code is still a
2994 managed by the 'parent' CachedOutput class. The code is still a
2990 bit hackish (all prompts share state via a pointer to the cache),
2995 bit hackish (all prompts share state via a pointer to the cache),
2991 but it's overall far cleaner than before.
2996 but it's overall far cleaner than before.
2992
2997
2993 * IPython/genutils.py (getoutputerror): modified to add verbose,
2998 * IPython/genutils.py (getoutputerror): modified to add verbose,
2994 debug and header options. This makes the interface of all getout*
2999 debug and header options. This makes the interface of all getout*
2995 functions uniform.
3000 functions uniform.
2996 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3001 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2997
3002
2998 * IPython/Magic.py (Magic.default_option): added a function to
3003 * IPython/Magic.py (Magic.default_option): added a function to
2999 allow registering default options for any magic command. This
3004 allow registering default options for any magic command. This
3000 makes it easy to have profiles which customize the magics globally
3005 makes it easy to have profiles which customize the magics globally
3001 for a certain use. The values set through this function are
3006 for a certain use. The values set through this function are
3002 picked up by the parse_options() method, which all magics should
3007 picked up by the parse_options() method, which all magics should
3003 use to parse their options.
3008 use to parse their options.
3004
3009
3005 * IPython/genutils.py (warn): modified the warnings framework to
3010 * IPython/genutils.py (warn): modified the warnings framework to
3006 use the Term I/O class. I'm trying to slowly unify all of
3011 use the Term I/O class. I'm trying to slowly unify all of
3007 IPython's I/O operations to pass through Term.
3012 IPython's I/O operations to pass through Term.
3008
3013
3009 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3014 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3010 the secondary prompt to correctly match the length of the primary
3015 the secondary prompt to correctly match the length of the primary
3011 one for any prompt. Now multi-line code will properly line up
3016 one for any prompt. Now multi-line code will properly line up
3012 even for path dependent prompts, such as the new ones available
3017 even for path dependent prompts, such as the new ones available
3013 via the prompt_specials.
3018 via the prompt_specials.
3014
3019
3015 2004-06-06 Fernando Perez <fperez@colorado.edu>
3020 2004-06-06 Fernando Perez <fperez@colorado.edu>
3016
3021
3017 * IPython/Prompts.py (prompt_specials): Added the ability to have
3022 * IPython/Prompts.py (prompt_specials): Added the ability to have
3018 bash-like special sequences in the prompts, which get
3023 bash-like special sequences in the prompts, which get
3019 automatically expanded. Things like hostname, current working
3024 automatically expanded. Things like hostname, current working
3020 directory and username are implemented already, but it's easy to
3025 directory and username are implemented already, but it's easy to
3021 add more in the future. Thanks to a patch by W.J. van der Laan
3026 add more in the future. Thanks to a patch by W.J. van der Laan
3022 <gnufnork-AT-hetdigitalegat.nl>
3027 <gnufnork-AT-hetdigitalegat.nl>
3023 (prompt_specials): Added color support for prompt strings, so
3028 (prompt_specials): Added color support for prompt strings, so
3024 users can define arbitrary color setups for their prompts.
3029 users can define arbitrary color setups for their prompts.
3025
3030
3026 2004-06-05 Fernando Perez <fperez@colorado.edu>
3031 2004-06-05 Fernando Perez <fperez@colorado.edu>
3027
3032
3028 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3033 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3029 code to load Gary Bishop's readline and configure it
3034 code to load Gary Bishop's readline and configure it
3030 automatically. Thanks to Gary for help on this.
3035 automatically. Thanks to Gary for help on this.
3031
3036
3032 2004-06-01 Fernando Perez <fperez@colorado.edu>
3037 2004-06-01 Fernando Perez <fperez@colorado.edu>
3033
3038
3034 * IPython/Logger.py (Logger.create_log): fix bug for logging
3039 * IPython/Logger.py (Logger.create_log): fix bug for logging
3035 with no filename (previous fix was incomplete).
3040 with no filename (previous fix was incomplete).
3036
3041
3037 2004-05-25 Fernando Perez <fperez@colorado.edu>
3042 2004-05-25 Fernando Perez <fperez@colorado.edu>
3038
3043
3039 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3044 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3040 parens would get passed to the shell.
3045 parens would get passed to the shell.
3041
3046
3042 2004-05-20 Fernando Perez <fperez@colorado.edu>
3047 2004-05-20 Fernando Perez <fperez@colorado.edu>
3043
3048
3044 * IPython/Magic.py (Magic.magic_prun): changed default profile
3049 * IPython/Magic.py (Magic.magic_prun): changed default profile
3045 sort order to 'time' (the more common profiling need).
3050 sort order to 'time' (the more common profiling need).
3046
3051
3047 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3052 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3048 so that source code shown is guaranteed in sync with the file on
3053 so that source code shown is guaranteed in sync with the file on
3049 disk (also changed in psource). Similar fix to the one for
3054 disk (also changed in psource). Similar fix to the one for
3050 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3055 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3051 <yann.ledu-AT-noos.fr>.
3056 <yann.ledu-AT-noos.fr>.
3052
3057
3053 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3058 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3054 with a single option would not be correctly parsed. Closes
3059 with a single option would not be correctly parsed. Closes
3055 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3060 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3056 introduced in 0.6.0 (on 2004-05-06).
3061 introduced in 0.6.0 (on 2004-05-06).
3057
3062
3058 2004-05-13 *** Released version 0.6.0
3063 2004-05-13 *** Released version 0.6.0
3059
3064
3060 2004-05-13 Fernando Perez <fperez@colorado.edu>
3065 2004-05-13 Fernando Perez <fperez@colorado.edu>
3061
3066
3062 * debian/: Added debian/ directory to CVS, so that debian support
3067 * debian/: Added debian/ directory to CVS, so that debian support
3063 is publicly accessible. The debian package is maintained by Jack
3068 is publicly accessible. The debian package is maintained by Jack
3064 Moffit <jack-AT-xiph.org>.
3069 Moffit <jack-AT-xiph.org>.
3065
3070
3066 * Documentation: included the notes about an ipython-based system
3071 * Documentation: included the notes about an ipython-based system
3067 shell (the hypothetical 'pysh') into the new_design.pdf document,
3072 shell (the hypothetical 'pysh') into the new_design.pdf document,
3068 so that these ideas get distributed to users along with the
3073 so that these ideas get distributed to users along with the
3069 official documentation.
3074 official documentation.
3070
3075
3071 2004-05-10 Fernando Perez <fperez@colorado.edu>
3076 2004-05-10 Fernando Perez <fperez@colorado.edu>
3072
3077
3073 * IPython/Logger.py (Logger.create_log): fix recently introduced
3078 * IPython/Logger.py (Logger.create_log): fix recently introduced
3074 bug (misindented line) where logstart would fail when not given an
3079 bug (misindented line) where logstart would fail when not given an
3075 explicit filename.
3080 explicit filename.
3076
3081
3077 2004-05-09 Fernando Perez <fperez@colorado.edu>
3082 2004-05-09 Fernando Perez <fperez@colorado.edu>
3078
3083
3079 * IPython/Magic.py (Magic.parse_options): skip system call when
3084 * IPython/Magic.py (Magic.parse_options): skip system call when
3080 there are no options to look for. Faster, cleaner for the common
3085 there are no options to look for. Faster, cleaner for the common
3081 case.
3086 case.
3082
3087
3083 * Documentation: many updates to the manual: describing Windows
3088 * Documentation: many updates to the manual: describing Windows
3084 support better, Gnuplot updates, credits, misc small stuff. Also
3089 support better, Gnuplot updates, credits, misc small stuff. Also
3085 updated the new_design doc a bit.
3090 updated the new_design doc a bit.
3086
3091
3087 2004-05-06 *** Released version 0.6.0.rc1
3092 2004-05-06 *** Released version 0.6.0.rc1
3088
3093
3089 2004-05-06 Fernando Perez <fperez@colorado.edu>
3094 2004-05-06 Fernando Perez <fperez@colorado.edu>
3090
3095
3091 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3096 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3092 operations to use the vastly more efficient list/''.join() method.
3097 operations to use the vastly more efficient list/''.join() method.
3093 (FormattedTB.text): Fix
3098 (FormattedTB.text): Fix
3094 http://www.scipy.net/roundup/ipython/issue12 - exception source
3099 http://www.scipy.net/roundup/ipython/issue12 - exception source
3095 extract not updated after reload. Thanks to Mike Salib
3100 extract not updated after reload. Thanks to Mike Salib
3096 <msalib-AT-mit.edu> for pinning the source of the problem.
3101 <msalib-AT-mit.edu> for pinning the source of the problem.
3097 Fortunately, the solution works inside ipython and doesn't require
3102 Fortunately, the solution works inside ipython and doesn't require
3098 any changes to python proper.
3103 any changes to python proper.
3099
3104
3100 * IPython/Magic.py (Magic.parse_options): Improved to process the
3105 * IPython/Magic.py (Magic.parse_options): Improved to process the
3101 argument list as a true shell would (by actually using the
3106 argument list as a true shell would (by actually using the
3102 underlying system shell). This way, all @magics automatically get
3107 underlying system shell). This way, all @magics automatically get
3103 shell expansion for variables. Thanks to a comment by Alex
3108 shell expansion for variables. Thanks to a comment by Alex
3104 Schmolck.
3109 Schmolck.
3105
3110
3106 2004-04-04 Fernando Perez <fperez@colorado.edu>
3111 2004-04-04 Fernando Perez <fperez@colorado.edu>
3107
3112
3108 * IPython/iplib.py (InteractiveShell.interact): Added a special
3113 * IPython/iplib.py (InteractiveShell.interact): Added a special
3109 trap for a debugger quit exception, which is basically impossible
3114 trap for a debugger quit exception, which is basically impossible
3110 to handle by normal mechanisms, given what pdb does to the stack.
3115 to handle by normal mechanisms, given what pdb does to the stack.
3111 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3116 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3112
3117
3113 2004-04-03 Fernando Perez <fperez@colorado.edu>
3118 2004-04-03 Fernando Perez <fperez@colorado.edu>
3114
3119
3115 * IPython/genutils.py (Term): Standardized the names of the Term
3120 * IPython/genutils.py (Term): Standardized the names of the Term
3116 class streams to cin/cout/cerr, following C++ naming conventions
3121 class streams to cin/cout/cerr, following C++ naming conventions
3117 (I can't use in/out/err because 'in' is not a valid attribute
3122 (I can't use in/out/err because 'in' is not a valid attribute
3118 name).
3123 name).
3119
3124
3120 * IPython/iplib.py (InteractiveShell.interact): don't increment
3125 * IPython/iplib.py (InteractiveShell.interact): don't increment
3121 the prompt if there's no user input. By Daniel 'Dang' Griffith
3126 the prompt if there's no user input. By Daniel 'Dang' Griffith
3122 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3127 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3123 Francois Pinard.
3128 Francois Pinard.
3124
3129
3125 2004-04-02 Fernando Perez <fperez@colorado.edu>
3130 2004-04-02 Fernando Perez <fperez@colorado.edu>
3126
3131
3127 * IPython/genutils.py (Stream.__init__): Modified to survive at
3132 * IPython/genutils.py (Stream.__init__): Modified to survive at
3128 least importing in contexts where stdin/out/err aren't true file
3133 least importing in contexts where stdin/out/err aren't true file
3129 objects, such as PyCrust (they lack fileno() and mode). However,
3134 objects, such as PyCrust (they lack fileno() and mode). However,
3130 the recovery facilities which rely on these things existing will
3135 the recovery facilities which rely on these things existing will
3131 not work.
3136 not work.
3132
3137
3133 2004-04-01 Fernando Perez <fperez@colorado.edu>
3138 2004-04-01 Fernando Perez <fperez@colorado.edu>
3134
3139
3135 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3140 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3136 use the new getoutputerror() function, so it properly
3141 use the new getoutputerror() function, so it properly
3137 distinguishes stdout/err.
3142 distinguishes stdout/err.
3138
3143
3139 * IPython/genutils.py (getoutputerror): added a function to
3144 * IPython/genutils.py (getoutputerror): added a function to
3140 capture separately the standard output and error of a command.
3145 capture separately the standard output and error of a command.
3141 After a comment from dang on the mailing lists. This code is
3146 After a comment from dang on the mailing lists. This code is
3142 basically a modified version of commands.getstatusoutput(), from
3147 basically a modified version of commands.getstatusoutput(), from
3143 the standard library.
3148 the standard library.
3144
3149
3145 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3150 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3146 '!!' as a special syntax (shorthand) to access @sx.
3151 '!!' as a special syntax (shorthand) to access @sx.
3147
3152
3148 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3153 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3149 command and return its output as a list split on '\n'.
3154 command and return its output as a list split on '\n'.
3150
3155
3151 2004-03-31 Fernando Perez <fperez@colorado.edu>
3156 2004-03-31 Fernando Perez <fperez@colorado.edu>
3152
3157
3153 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3158 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3154 method to dictionaries used as FakeModule instances if they lack
3159 method to dictionaries used as FakeModule instances if they lack
3155 it. At least pydoc in python2.3 breaks for runtime-defined
3160 it. At least pydoc in python2.3 breaks for runtime-defined
3156 functions without this hack. At some point I need to _really_
3161 functions without this hack. At some point I need to _really_
3157 understand what FakeModule is doing, because it's a gross hack.
3162 understand what FakeModule is doing, because it's a gross hack.
3158 But it solves Arnd's problem for now...
3163 But it solves Arnd's problem for now...
3159
3164
3160 2004-02-27 Fernando Perez <fperez@colorado.edu>
3165 2004-02-27 Fernando Perez <fperez@colorado.edu>
3161
3166
3162 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3167 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3163 mode would behave erratically. Also increased the number of
3168 mode would behave erratically. Also increased the number of
3164 possible logs in rotate mod to 999. Thanks to Rod Holland
3169 possible logs in rotate mod to 999. Thanks to Rod Holland
3165 <rhh@StructureLABS.com> for the report and fixes.
3170 <rhh@StructureLABS.com> for the report and fixes.
3166
3171
3167 2004-02-26 Fernando Perez <fperez@colorado.edu>
3172 2004-02-26 Fernando Perez <fperez@colorado.edu>
3168
3173
3169 * IPython/genutils.py (page): Check that the curses module really
3174 * IPython/genutils.py (page): Check that the curses module really
3170 has the initscr attribute before trying to use it. For some
3175 has the initscr attribute before trying to use it. For some
3171 reason, the Solaris curses module is missing this. I think this
3176 reason, the Solaris curses module is missing this. I think this
3172 should be considered a Solaris python bug, but I'm not sure.
3177 should be considered a Solaris python bug, but I'm not sure.
3173
3178
3174 2004-01-17 Fernando Perez <fperez@colorado.edu>
3179 2004-01-17 Fernando Perez <fperez@colorado.edu>
3175
3180
3176 * IPython/genutils.py (Stream.__init__): Changes to try to make
3181 * IPython/genutils.py (Stream.__init__): Changes to try to make
3177 ipython robust against stdin/out/err being closed by the user.
3182 ipython robust against stdin/out/err being closed by the user.
3178 This is 'user error' (and blocks a normal python session, at least
3183 This is 'user error' (and blocks a normal python session, at least
3179 the stdout case). However, Ipython should be able to survive such
3184 the stdout case). However, Ipython should be able to survive such
3180 instances of abuse as gracefully as possible. To simplify the
3185 instances of abuse as gracefully as possible. To simplify the
3181 coding and maintain compatibility with Gary Bishop's Term
3186 coding and maintain compatibility with Gary Bishop's Term
3182 contributions, I've made use of classmethods for this. I think
3187 contributions, I've made use of classmethods for this. I think
3183 this introduces a dependency on python 2.2.
3188 this introduces a dependency on python 2.2.
3184
3189
3185 2004-01-13 Fernando Perez <fperez@colorado.edu>
3190 2004-01-13 Fernando Perez <fperez@colorado.edu>
3186
3191
3187 * IPython/numutils.py (exp_safe): simplified the code a bit and
3192 * IPython/numutils.py (exp_safe): simplified the code a bit and
3188 removed the need for importing the kinds module altogether.
3193 removed the need for importing the kinds module altogether.
3189
3194
3190 2004-01-06 Fernando Perez <fperez@colorado.edu>
3195 2004-01-06 Fernando Perez <fperez@colorado.edu>
3191
3196
3192 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3197 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3193 a magic function instead, after some community feedback. No
3198 a magic function instead, after some community feedback. No
3194 special syntax will exist for it, but its name is deliberately
3199 special syntax will exist for it, but its name is deliberately
3195 very short.
3200 very short.
3196
3201
3197 2003-12-20 Fernando Perez <fperez@colorado.edu>
3202 2003-12-20 Fernando Perez <fperez@colorado.edu>
3198
3203
3199 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3204 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3200 new functionality, to automagically assign the result of a shell
3205 new functionality, to automagically assign the result of a shell
3201 command to a variable. I'll solicit some community feedback on
3206 command to a variable. I'll solicit some community feedback on
3202 this before making it permanent.
3207 this before making it permanent.
3203
3208
3204 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3209 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3205 requested about callables for which inspect couldn't obtain a
3210 requested about callables for which inspect couldn't obtain a
3206 proper argspec. Thanks to a crash report sent by Etienne
3211 proper argspec. Thanks to a crash report sent by Etienne
3207 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3212 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3208
3213
3209 2003-12-09 Fernando Perez <fperez@colorado.edu>
3214 2003-12-09 Fernando Perez <fperez@colorado.edu>
3210
3215
3211 * IPython/genutils.py (page): patch for the pager to work across
3216 * IPython/genutils.py (page): patch for the pager to work across
3212 various versions of Windows. By Gary Bishop.
3217 various versions of Windows. By Gary Bishop.
3213
3218
3214 2003-12-04 Fernando Perez <fperez@colorado.edu>
3219 2003-12-04 Fernando Perez <fperez@colorado.edu>
3215
3220
3216 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3221 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3217 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3222 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3218 While I tested this and it looks ok, there may still be corner
3223 While I tested this and it looks ok, there may still be corner
3219 cases I've missed.
3224 cases I've missed.
3220
3225
3221 2003-12-01 Fernando Perez <fperez@colorado.edu>
3226 2003-12-01 Fernando Perez <fperez@colorado.edu>
3222
3227
3223 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3228 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3224 where a line like 'p,q=1,2' would fail because the automagic
3229 where a line like 'p,q=1,2' would fail because the automagic
3225 system would be triggered for @p.
3230 system would be triggered for @p.
3226
3231
3227 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3232 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3228 cleanups, code unmodified.
3233 cleanups, code unmodified.
3229
3234
3230 * IPython/genutils.py (Term): added a class for IPython to handle
3235 * IPython/genutils.py (Term): added a class for IPython to handle
3231 output. In most cases it will just be a proxy for stdout/err, but
3236 output. In most cases it will just be a proxy for stdout/err, but
3232 having this allows modifications to be made for some platforms,
3237 having this allows modifications to be made for some platforms,
3233 such as handling color escapes under Windows. All of this code
3238 such as handling color escapes under Windows. All of this code
3234 was contributed by Gary Bishop, with minor modifications by me.
3239 was contributed by Gary Bishop, with minor modifications by me.
3235 The actual changes affect many files.
3240 The actual changes affect many files.
3236
3241
3237 2003-11-30 Fernando Perez <fperez@colorado.edu>
3242 2003-11-30 Fernando Perez <fperez@colorado.edu>
3238
3243
3239 * IPython/iplib.py (file_matches): new completion code, courtesy
3244 * IPython/iplib.py (file_matches): new completion code, courtesy
3240 of Jeff Collins. This enables filename completion again under
3245 of Jeff Collins. This enables filename completion again under
3241 python 2.3, which disabled it at the C level.
3246 python 2.3, which disabled it at the C level.
3242
3247
3243 2003-11-11 Fernando Perez <fperez@colorado.edu>
3248 2003-11-11 Fernando Perez <fperez@colorado.edu>
3244
3249
3245 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3250 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3246 for Numeric.array(map(...)), but often convenient.
3251 for Numeric.array(map(...)), but often convenient.
3247
3252
3248 2003-11-05 Fernando Perez <fperez@colorado.edu>
3253 2003-11-05 Fernando Perez <fperez@colorado.edu>
3249
3254
3250 * IPython/numutils.py (frange): Changed a call from int() to
3255 * IPython/numutils.py (frange): Changed a call from int() to
3251 int(round()) to prevent a problem reported with arange() in the
3256 int(round()) to prevent a problem reported with arange() in the
3252 numpy list.
3257 numpy list.
3253
3258
3254 2003-10-06 Fernando Perez <fperez@colorado.edu>
3259 2003-10-06 Fernando Perez <fperez@colorado.edu>
3255
3260
3256 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3261 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3257 prevent crashes if sys lacks an argv attribute (it happens with
3262 prevent crashes if sys lacks an argv attribute (it happens with
3258 embedded interpreters which build a bare-bones sys module).
3263 embedded interpreters which build a bare-bones sys module).
3259 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3264 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3260
3265
3261 2003-09-24 Fernando Perez <fperez@colorado.edu>
3266 2003-09-24 Fernando Perez <fperez@colorado.edu>
3262
3267
3263 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3268 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3264 to protect against poorly written user objects where __getattr__
3269 to protect against poorly written user objects where __getattr__
3265 raises exceptions other than AttributeError. Thanks to a bug
3270 raises exceptions other than AttributeError. Thanks to a bug
3266 report by Oliver Sander <osander-AT-gmx.de>.
3271 report by Oliver Sander <osander-AT-gmx.de>.
3267
3272
3268 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3273 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3269 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3274 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3270
3275
3271 2003-09-09 Fernando Perez <fperez@colorado.edu>
3276 2003-09-09 Fernando Perez <fperez@colorado.edu>
3272
3277
3273 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3278 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3274 unpacking a list whith a callable as first element would
3279 unpacking a list whith a callable as first element would
3275 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3280 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3276 Collins.
3281 Collins.
3277
3282
3278 2003-08-25 *** Released version 0.5.0
3283 2003-08-25 *** Released version 0.5.0
3279
3284
3280 2003-08-22 Fernando Perez <fperez@colorado.edu>
3285 2003-08-22 Fernando Perez <fperez@colorado.edu>
3281
3286
3282 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3287 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3283 improperly defined user exceptions. Thanks to feedback from Mark
3288 improperly defined user exceptions. Thanks to feedback from Mark
3284 Russell <mrussell-AT-verio.net>.
3289 Russell <mrussell-AT-verio.net>.
3285
3290
3286 2003-08-20 Fernando Perez <fperez@colorado.edu>
3291 2003-08-20 Fernando Perez <fperez@colorado.edu>
3287
3292
3288 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3293 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3289 printing so that it would print multi-line string forms starting
3294 printing so that it would print multi-line string forms starting
3290 with a new line. This way the formatting is better respected for
3295 with a new line. This way the formatting is better respected for
3291 objects which work hard to make nice string forms.
3296 objects which work hard to make nice string forms.
3292
3297
3293 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3298 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3294 autocall would overtake data access for objects with both
3299 autocall would overtake data access for objects with both
3295 __getitem__ and __call__.
3300 __getitem__ and __call__.
3296
3301
3297 2003-08-19 *** Released version 0.5.0-rc1
3302 2003-08-19 *** Released version 0.5.0-rc1
3298
3303
3299 2003-08-19 Fernando Perez <fperez@colorado.edu>
3304 2003-08-19 Fernando Perez <fperez@colorado.edu>
3300
3305
3301 * IPython/deep_reload.py (load_tail): single tiny change here
3306 * IPython/deep_reload.py (load_tail): single tiny change here
3302 seems to fix the long-standing bug of dreload() failing to work
3307 seems to fix the long-standing bug of dreload() failing to work
3303 for dotted names. But this module is pretty tricky, so I may have
3308 for dotted names. But this module is pretty tricky, so I may have
3304 missed some subtlety. Needs more testing!.
3309 missed some subtlety. Needs more testing!.
3305
3310
3306 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3311 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3307 exceptions which have badly implemented __str__ methods.
3312 exceptions which have badly implemented __str__ methods.
3308 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3313 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3309 which I've been getting reports about from Python 2.3 users. I
3314 which I've been getting reports about from Python 2.3 users. I
3310 wish I had a simple test case to reproduce the problem, so I could
3315 wish I had a simple test case to reproduce the problem, so I could
3311 either write a cleaner workaround or file a bug report if
3316 either write a cleaner workaround or file a bug report if
3312 necessary.
3317 necessary.
3313
3318
3314 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3319 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3315 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3320 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3316 a bug report by Tjabo Kloppenburg.
3321 a bug report by Tjabo Kloppenburg.
3317
3322
3318 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3323 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3319 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3324 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3320 seems rather unstable. Thanks to a bug report by Tjabo
3325 seems rather unstable. Thanks to a bug report by Tjabo
3321 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3326 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3322
3327
3323 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3328 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3324 this out soon because of the critical fixes in the inner loop for
3329 this out soon because of the critical fixes in the inner loop for
3325 generators.
3330 generators.
3326
3331
3327 * IPython/Magic.py (Magic.getargspec): removed. This (and
3332 * IPython/Magic.py (Magic.getargspec): removed. This (and
3328 _get_def) have been obsoleted by OInspect for a long time, I
3333 _get_def) have been obsoleted by OInspect for a long time, I
3329 hadn't noticed that they were dead code.
3334 hadn't noticed that they were dead code.
3330 (Magic._ofind): restored _ofind functionality for a few literals
3335 (Magic._ofind): restored _ofind functionality for a few literals
3331 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3336 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3332 for things like "hello".capitalize?, since that would require a
3337 for things like "hello".capitalize?, since that would require a
3333 potentially dangerous eval() again.
3338 potentially dangerous eval() again.
3334
3339
3335 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3340 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3336 logic a bit more to clean up the escapes handling and minimize the
3341 logic a bit more to clean up the escapes handling and minimize the
3337 use of _ofind to only necessary cases. The interactive 'feel' of
3342 use of _ofind to only necessary cases. The interactive 'feel' of
3338 IPython should have improved quite a bit with the changes in
3343 IPython should have improved quite a bit with the changes in
3339 _prefilter and _ofind (besides being far safer than before).
3344 _prefilter and _ofind (besides being far safer than before).
3340
3345
3341 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3346 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3342 obscure, never reported). Edit would fail to find the object to
3347 obscure, never reported). Edit would fail to find the object to
3343 edit under some circumstances.
3348 edit under some circumstances.
3344 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3349 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3345 which were causing double-calling of generators. Those eval calls
3350 which were causing double-calling of generators. Those eval calls
3346 were _very_ dangerous, since code with side effects could be
3351 were _very_ dangerous, since code with side effects could be
3347 triggered. As they say, 'eval is evil'... These were the
3352 triggered. As they say, 'eval is evil'... These were the
3348 nastiest evals in IPython. Besides, _ofind is now far simpler,
3353 nastiest evals in IPython. Besides, _ofind is now far simpler,
3349 and it should also be quite a bit faster. Its use of inspect is
3354 and it should also be quite a bit faster. Its use of inspect is
3350 also safer, so perhaps some of the inspect-related crashes I've
3355 also safer, so perhaps some of the inspect-related crashes I've
3351 seen lately with Python 2.3 might be taken care of. That will
3356 seen lately with Python 2.3 might be taken care of. That will
3352 need more testing.
3357 need more testing.
3353
3358
3354 2003-08-17 Fernando Perez <fperez@colorado.edu>
3359 2003-08-17 Fernando Perez <fperez@colorado.edu>
3355
3360
3356 * IPython/iplib.py (InteractiveShell._prefilter): significant
3361 * IPython/iplib.py (InteractiveShell._prefilter): significant
3357 simplifications to the logic for handling user escapes. Faster
3362 simplifications to the logic for handling user escapes. Faster
3358 and simpler code.
3363 and simpler code.
3359
3364
3360 2003-08-14 Fernando Perez <fperez@colorado.edu>
3365 2003-08-14 Fernando Perez <fperez@colorado.edu>
3361
3366
3362 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3367 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3363 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3368 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3364 but it should be quite a bit faster. And the recursive version
3369 but it should be quite a bit faster. And the recursive version
3365 generated O(log N) intermediate storage for all rank>1 arrays,
3370 generated O(log N) intermediate storage for all rank>1 arrays,
3366 even if they were contiguous.
3371 even if they were contiguous.
3367 (l1norm): Added this function.
3372 (l1norm): Added this function.
3368 (norm): Added this function for arbitrary norms (including
3373 (norm): Added this function for arbitrary norms (including
3369 l-infinity). l1 and l2 are still special cases for convenience
3374 l-infinity). l1 and l2 are still special cases for convenience
3370 and speed.
3375 and speed.
3371
3376
3372 2003-08-03 Fernando Perez <fperez@colorado.edu>
3377 2003-08-03 Fernando Perez <fperez@colorado.edu>
3373
3378
3374 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3379 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3375 exceptions, which now raise PendingDeprecationWarnings in Python
3380 exceptions, which now raise PendingDeprecationWarnings in Python
3376 2.3. There were some in Magic and some in Gnuplot2.
3381 2.3. There were some in Magic and some in Gnuplot2.
3377
3382
3378 2003-06-30 Fernando Perez <fperez@colorado.edu>
3383 2003-06-30 Fernando Perez <fperez@colorado.edu>
3379
3384
3380 * IPython/genutils.py (page): modified to call curses only for
3385 * IPython/genutils.py (page): modified to call curses only for
3381 terminals where TERM=='xterm'. After problems under many other
3386 terminals where TERM=='xterm'. After problems under many other
3382 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3387 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3383
3388
3384 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3389 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3385 would be triggered when readline was absent. This was just an old
3390 would be triggered when readline was absent. This was just an old
3386 debugging statement I'd forgotten to take out.
3391 debugging statement I'd forgotten to take out.
3387
3392
3388 2003-06-20 Fernando Perez <fperez@colorado.edu>
3393 2003-06-20 Fernando Perez <fperez@colorado.edu>
3389
3394
3390 * IPython/genutils.py (clock): modified to return only user time
3395 * IPython/genutils.py (clock): modified to return only user time
3391 (not counting system time), after a discussion on scipy. While
3396 (not counting system time), after a discussion on scipy. While
3392 system time may be a useful quantity occasionally, it may much
3397 system time may be a useful quantity occasionally, it may much
3393 more easily be skewed by occasional swapping or other similar
3398 more easily be skewed by occasional swapping or other similar
3394 activity.
3399 activity.
3395
3400
3396 2003-06-05 Fernando Perez <fperez@colorado.edu>
3401 2003-06-05 Fernando Perez <fperez@colorado.edu>
3397
3402
3398 * IPython/numutils.py (identity): new function, for building
3403 * IPython/numutils.py (identity): new function, for building
3399 arbitrary rank Kronecker deltas (mostly backwards compatible with
3404 arbitrary rank Kronecker deltas (mostly backwards compatible with
3400 Numeric.identity)
3405 Numeric.identity)
3401
3406
3402 2003-06-03 Fernando Perez <fperez@colorado.edu>
3407 2003-06-03 Fernando Perez <fperez@colorado.edu>
3403
3408
3404 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3409 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3405 arguments passed to magics with spaces, to allow trailing '\' to
3410 arguments passed to magics with spaces, to allow trailing '\' to
3406 work normally (mainly for Windows users).
3411 work normally (mainly for Windows users).
3407
3412
3408 2003-05-29 Fernando Perez <fperez@colorado.edu>
3413 2003-05-29 Fernando Perez <fperez@colorado.edu>
3409
3414
3410 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3415 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3411 instead of pydoc.help. This fixes a bizarre behavior where
3416 instead of pydoc.help. This fixes a bizarre behavior where
3412 printing '%s' % locals() would trigger the help system. Now
3417 printing '%s' % locals() would trigger the help system. Now
3413 ipython behaves like normal python does.
3418 ipython behaves like normal python does.
3414
3419
3415 Note that if one does 'from pydoc import help', the bizarre
3420 Note that if one does 'from pydoc import help', the bizarre
3416 behavior returns, but this will also happen in normal python, so
3421 behavior returns, but this will also happen in normal python, so
3417 it's not an ipython bug anymore (it has to do with how pydoc.help
3422 it's not an ipython bug anymore (it has to do with how pydoc.help
3418 is implemented).
3423 is implemented).
3419
3424
3420 2003-05-22 Fernando Perez <fperez@colorado.edu>
3425 2003-05-22 Fernando Perez <fperez@colorado.edu>
3421
3426
3422 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3427 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3423 return [] instead of None when nothing matches, also match to end
3428 return [] instead of None when nothing matches, also match to end
3424 of line. Patch by Gary Bishop.
3429 of line. Patch by Gary Bishop.
3425
3430
3426 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3431 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3427 protection as before, for files passed on the command line. This
3432 protection as before, for files passed on the command line. This
3428 prevents the CrashHandler from kicking in if user files call into
3433 prevents the CrashHandler from kicking in if user files call into
3429 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3434 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3430 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3435 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3431
3436
3432 2003-05-20 *** Released version 0.4.0
3437 2003-05-20 *** Released version 0.4.0
3433
3438
3434 2003-05-20 Fernando Perez <fperez@colorado.edu>
3439 2003-05-20 Fernando Perez <fperez@colorado.edu>
3435
3440
3436 * setup.py: added support for manpages. It's a bit hackish b/c of
3441 * setup.py: added support for manpages. It's a bit hackish b/c of
3437 a bug in the way the bdist_rpm distutils target handles gzipped
3442 a bug in the way the bdist_rpm distutils target handles gzipped
3438 manpages, but it works. After a patch by Jack.
3443 manpages, but it works. After a patch by Jack.
3439
3444
3440 2003-05-19 Fernando Perez <fperez@colorado.edu>
3445 2003-05-19 Fernando Perez <fperez@colorado.edu>
3441
3446
3442 * IPython/numutils.py: added a mockup of the kinds module, since
3447 * IPython/numutils.py: added a mockup of the kinds module, since
3443 it was recently removed from Numeric. This way, numutils will
3448 it was recently removed from Numeric. This way, numutils will
3444 work for all users even if they are missing kinds.
3449 work for all users even if they are missing kinds.
3445
3450
3446 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3451 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3447 failure, which can occur with SWIG-wrapped extensions. After a
3452 failure, which can occur with SWIG-wrapped extensions. After a
3448 crash report from Prabhu.
3453 crash report from Prabhu.
3449
3454
3450 2003-05-16 Fernando Perez <fperez@colorado.edu>
3455 2003-05-16 Fernando Perez <fperez@colorado.edu>
3451
3456
3452 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3457 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3453 protect ipython from user code which may call directly
3458 protect ipython from user code which may call directly
3454 sys.excepthook (this looks like an ipython crash to the user, even
3459 sys.excepthook (this looks like an ipython crash to the user, even
3455 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3460 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3456 This is especially important to help users of WxWindows, but may
3461 This is especially important to help users of WxWindows, but may
3457 also be useful in other cases.
3462 also be useful in other cases.
3458
3463
3459 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3464 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3460 an optional tb_offset to be specified, and to preserve exception
3465 an optional tb_offset to be specified, and to preserve exception
3461 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3466 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3462
3467
3463 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3468 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3464
3469
3465 2003-05-15 Fernando Perez <fperez@colorado.edu>
3470 2003-05-15 Fernando Perez <fperez@colorado.edu>
3466
3471
3467 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3472 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3468 installing for a new user under Windows.
3473 installing for a new user under Windows.
3469
3474
3470 2003-05-12 Fernando Perez <fperez@colorado.edu>
3475 2003-05-12 Fernando Perez <fperez@colorado.edu>
3471
3476
3472 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3477 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3473 handler for Emacs comint-based lines. Currently it doesn't do
3478 handler for Emacs comint-based lines. Currently it doesn't do
3474 much (but importantly, it doesn't update the history cache). In
3479 much (but importantly, it doesn't update the history cache). In
3475 the future it may be expanded if Alex needs more functionality
3480 the future it may be expanded if Alex needs more functionality
3476 there.
3481 there.
3477
3482
3478 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3483 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3479 info to crash reports.
3484 info to crash reports.
3480
3485
3481 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3486 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3482 just like Python's -c. Also fixed crash with invalid -color
3487 just like Python's -c. Also fixed crash with invalid -color
3483 option value at startup. Thanks to Will French
3488 option value at startup. Thanks to Will French
3484 <wfrench-AT-bestweb.net> for the bug report.
3489 <wfrench-AT-bestweb.net> for the bug report.
3485
3490
3486 2003-05-09 Fernando Perez <fperez@colorado.edu>
3491 2003-05-09 Fernando Perez <fperez@colorado.edu>
3487
3492
3488 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3493 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3489 to EvalDict (it's a mapping, after all) and simplified its code
3494 to EvalDict (it's a mapping, after all) and simplified its code
3490 quite a bit, after a nice discussion on c.l.py where Gustavo
3495 quite a bit, after a nice discussion on c.l.py where Gustavo
3491 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3496 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3492
3497
3493 2003-04-30 Fernando Perez <fperez@colorado.edu>
3498 2003-04-30 Fernando Perez <fperez@colorado.edu>
3494
3499
3495 * IPython/genutils.py (timings_out): modified it to reduce its
3500 * IPython/genutils.py (timings_out): modified it to reduce its
3496 overhead in the common reps==1 case.
3501 overhead in the common reps==1 case.
3497
3502
3498 2003-04-29 Fernando Perez <fperez@colorado.edu>
3503 2003-04-29 Fernando Perez <fperez@colorado.edu>
3499
3504
3500 * IPython/genutils.py (timings_out): Modified to use the resource
3505 * IPython/genutils.py (timings_out): Modified to use the resource
3501 module, which avoids the wraparound problems of time.clock().
3506 module, which avoids the wraparound problems of time.clock().
3502
3507
3503 2003-04-17 *** Released version 0.2.15pre4
3508 2003-04-17 *** Released version 0.2.15pre4
3504
3509
3505 2003-04-17 Fernando Perez <fperez@colorado.edu>
3510 2003-04-17 Fernando Perez <fperez@colorado.edu>
3506
3511
3507 * setup.py (scriptfiles): Split windows-specific stuff over to a
3512 * setup.py (scriptfiles): Split windows-specific stuff over to a
3508 separate file, in an attempt to have a Windows GUI installer.
3513 separate file, in an attempt to have a Windows GUI installer.
3509 That didn't work, but part of the groundwork is done.
3514 That didn't work, but part of the groundwork is done.
3510
3515
3511 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3516 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3512 indent/unindent with 4 spaces. Particularly useful in combination
3517 indent/unindent with 4 spaces. Particularly useful in combination
3513 with the new auto-indent option.
3518 with the new auto-indent option.
3514
3519
3515 2003-04-16 Fernando Perez <fperez@colorado.edu>
3520 2003-04-16 Fernando Perez <fperez@colorado.edu>
3516
3521
3517 * IPython/Magic.py: various replacements of self.rc for
3522 * IPython/Magic.py: various replacements of self.rc for
3518 self.shell.rc. A lot more remains to be done to fully disentangle
3523 self.shell.rc. A lot more remains to be done to fully disentangle
3519 this class from the main Shell class.
3524 this class from the main Shell class.
3520
3525
3521 * IPython/GnuplotRuntime.py: added checks for mouse support so
3526 * IPython/GnuplotRuntime.py: added checks for mouse support so
3522 that we don't try to enable it if the current gnuplot doesn't
3527 that we don't try to enable it if the current gnuplot doesn't
3523 really support it. Also added checks so that we don't try to
3528 really support it. Also added checks so that we don't try to
3524 enable persist under Windows (where Gnuplot doesn't recognize the
3529 enable persist under Windows (where Gnuplot doesn't recognize the
3525 option).
3530 option).
3526
3531
3527 * IPython/iplib.py (InteractiveShell.interact): Added optional
3532 * IPython/iplib.py (InteractiveShell.interact): Added optional
3528 auto-indenting code, after a patch by King C. Shu
3533 auto-indenting code, after a patch by King C. Shu
3529 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3534 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3530 get along well with pasting indented code. If I ever figure out
3535 get along well with pasting indented code. If I ever figure out
3531 how to make that part go well, it will become on by default.
3536 how to make that part go well, it will become on by default.
3532
3537
3533 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3538 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3534 crash ipython if there was an unmatched '%' in the user's prompt
3539 crash ipython if there was an unmatched '%' in the user's prompt
3535 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3540 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3536
3541
3537 * IPython/iplib.py (InteractiveShell.interact): removed the
3542 * IPython/iplib.py (InteractiveShell.interact): removed the
3538 ability to ask the user whether he wants to crash or not at the
3543 ability to ask the user whether he wants to crash or not at the
3539 'last line' exception handler. Calling functions at that point
3544 'last line' exception handler. Calling functions at that point
3540 changes the stack, and the error reports would have incorrect
3545 changes the stack, and the error reports would have incorrect
3541 tracebacks.
3546 tracebacks.
3542
3547
3543 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3548 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3544 pass through a peger a pretty-printed form of any object. After a
3549 pass through a peger a pretty-printed form of any object. After a
3545 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3550 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3546
3551
3547 2003-04-14 Fernando Perez <fperez@colorado.edu>
3552 2003-04-14 Fernando Perez <fperez@colorado.edu>
3548
3553
3549 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3554 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3550 all files in ~ would be modified at first install (instead of
3555 all files in ~ would be modified at first install (instead of
3551 ~/.ipython). This could be potentially disastrous, as the
3556 ~/.ipython). This could be potentially disastrous, as the
3552 modification (make line-endings native) could damage binary files.
3557 modification (make line-endings native) could damage binary files.
3553
3558
3554 2003-04-10 Fernando Perez <fperez@colorado.edu>
3559 2003-04-10 Fernando Perez <fperez@colorado.edu>
3555
3560
3556 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3561 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3557 handle only lines which are invalid python. This now means that
3562 handle only lines which are invalid python. This now means that
3558 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3563 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3559 for the bug report.
3564 for the bug report.
3560
3565
3561 2003-04-01 Fernando Perez <fperez@colorado.edu>
3566 2003-04-01 Fernando Perez <fperez@colorado.edu>
3562
3567
3563 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3568 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3564 where failing to set sys.last_traceback would crash pdb.pm().
3569 where failing to set sys.last_traceback would crash pdb.pm().
3565 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3570 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3566 report.
3571 report.
3567
3572
3568 2003-03-25 Fernando Perez <fperez@colorado.edu>
3573 2003-03-25 Fernando Perez <fperez@colorado.edu>
3569
3574
3570 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3575 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3571 before printing it (it had a lot of spurious blank lines at the
3576 before printing it (it had a lot of spurious blank lines at the
3572 end).
3577 end).
3573
3578
3574 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3579 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3575 output would be sent 21 times! Obviously people don't use this
3580 output would be sent 21 times! Obviously people don't use this
3576 too often, or I would have heard about it.
3581 too often, or I would have heard about it.
3577
3582
3578 2003-03-24 Fernando Perez <fperez@colorado.edu>
3583 2003-03-24 Fernando Perez <fperez@colorado.edu>
3579
3584
3580 * setup.py (scriptfiles): renamed the data_files parameter from
3585 * setup.py (scriptfiles): renamed the data_files parameter from
3581 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3586 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3582 for the patch.
3587 for the patch.
3583
3588
3584 2003-03-20 Fernando Perez <fperez@colorado.edu>
3589 2003-03-20 Fernando Perez <fperez@colorado.edu>
3585
3590
3586 * IPython/genutils.py (error): added error() and fatal()
3591 * IPython/genutils.py (error): added error() and fatal()
3587 functions.
3592 functions.
3588
3593
3589 2003-03-18 *** Released version 0.2.15pre3
3594 2003-03-18 *** Released version 0.2.15pre3
3590
3595
3591 2003-03-18 Fernando Perez <fperez@colorado.edu>
3596 2003-03-18 Fernando Perez <fperez@colorado.edu>
3592
3597
3593 * setupext/install_data_ext.py
3598 * setupext/install_data_ext.py
3594 (install_data_ext.initialize_options): Class contributed by Jack
3599 (install_data_ext.initialize_options): Class contributed by Jack
3595 Moffit for fixing the old distutils hack. He is sending this to
3600 Moffit for fixing the old distutils hack. He is sending this to
3596 the distutils folks so in the future we may not need it as a
3601 the distutils folks so in the future we may not need it as a
3597 private fix.
3602 private fix.
3598
3603
3599 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3604 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3600 changes for Debian packaging. See his patch for full details.
3605 changes for Debian packaging. See his patch for full details.
3601 The old distutils hack of making the ipythonrc* files carry a
3606 The old distutils hack of making the ipythonrc* files carry a
3602 bogus .py extension is gone, at last. Examples were moved to a
3607 bogus .py extension is gone, at last. Examples were moved to a
3603 separate subdir under doc/, and the separate executable scripts
3608 separate subdir under doc/, and the separate executable scripts
3604 now live in their own directory. Overall a great cleanup. The
3609 now live in their own directory. Overall a great cleanup. The
3605 manual was updated to use the new files, and setup.py has been
3610 manual was updated to use the new files, and setup.py has been
3606 fixed for this setup.
3611 fixed for this setup.
3607
3612
3608 * IPython/PyColorize.py (Parser.usage): made non-executable and
3613 * IPython/PyColorize.py (Parser.usage): made non-executable and
3609 created a pycolor wrapper around it to be included as a script.
3614 created a pycolor wrapper around it to be included as a script.
3610
3615
3611 2003-03-12 *** Released version 0.2.15pre2
3616 2003-03-12 *** Released version 0.2.15pre2
3612
3617
3613 2003-03-12 Fernando Perez <fperez@colorado.edu>
3618 2003-03-12 Fernando Perez <fperez@colorado.edu>
3614
3619
3615 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3620 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3616 long-standing problem with garbage characters in some terminals.
3621 long-standing problem with garbage characters in some terminals.
3617 The issue was really that the \001 and \002 escapes must _only_ be
3622 The issue was really that the \001 and \002 escapes must _only_ be
3618 passed to input prompts (which call readline), but _never_ to
3623 passed to input prompts (which call readline), but _never_ to
3619 normal text to be printed on screen. I changed ColorANSI to have
3624 normal text to be printed on screen. I changed ColorANSI to have
3620 two classes: TermColors and InputTermColors, each with the
3625 two classes: TermColors and InputTermColors, each with the
3621 appropriate escapes for input prompts or normal text. The code in
3626 appropriate escapes for input prompts or normal text. The code in
3622 Prompts.py got slightly more complicated, but this very old and
3627 Prompts.py got slightly more complicated, but this very old and
3623 annoying bug is finally fixed.
3628 annoying bug is finally fixed.
3624
3629
3625 All the credit for nailing down the real origin of this problem
3630 All the credit for nailing down the real origin of this problem
3626 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3631 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3627 *Many* thanks to him for spending quite a bit of effort on this.
3632 *Many* thanks to him for spending quite a bit of effort on this.
3628
3633
3629 2003-03-05 *** Released version 0.2.15pre1
3634 2003-03-05 *** Released version 0.2.15pre1
3630
3635
3631 2003-03-03 Fernando Perez <fperez@colorado.edu>
3636 2003-03-03 Fernando Perez <fperez@colorado.edu>
3632
3637
3633 * IPython/FakeModule.py: Moved the former _FakeModule to a
3638 * IPython/FakeModule.py: Moved the former _FakeModule to a
3634 separate file, because it's also needed by Magic (to fix a similar
3639 separate file, because it's also needed by Magic (to fix a similar
3635 pickle-related issue in @run).
3640 pickle-related issue in @run).
3636
3641
3637 2003-03-02 Fernando Perez <fperez@colorado.edu>
3642 2003-03-02 Fernando Perez <fperez@colorado.edu>
3638
3643
3639 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3644 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3640 the autocall option at runtime.
3645 the autocall option at runtime.
3641 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3646 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3642 across Magic.py to start separating Magic from InteractiveShell.
3647 across Magic.py to start separating Magic from InteractiveShell.
3643 (Magic._ofind): Fixed to return proper namespace for dotted
3648 (Magic._ofind): Fixed to return proper namespace for dotted
3644 names. Before, a dotted name would always return 'not currently
3649 names. Before, a dotted name would always return 'not currently
3645 defined', because it would find the 'parent'. s.x would be found,
3650 defined', because it would find the 'parent'. s.x would be found,
3646 but since 'x' isn't defined by itself, it would get confused.
3651 but since 'x' isn't defined by itself, it would get confused.
3647 (Magic.magic_run): Fixed pickling problems reported by Ralf
3652 (Magic.magic_run): Fixed pickling problems reported by Ralf
3648 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3653 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3649 that I'd used when Mike Heeter reported similar issues at the
3654 that I'd used when Mike Heeter reported similar issues at the
3650 top-level, but now for @run. It boils down to injecting the
3655 top-level, but now for @run. It boils down to injecting the
3651 namespace where code is being executed with something that looks
3656 namespace where code is being executed with something that looks
3652 enough like a module to fool pickle.dump(). Since a pickle stores
3657 enough like a module to fool pickle.dump(). Since a pickle stores
3653 a named reference to the importing module, we need this for
3658 a named reference to the importing module, we need this for
3654 pickles to save something sensible.
3659 pickles to save something sensible.
3655
3660
3656 * IPython/ipmaker.py (make_IPython): added an autocall option.
3661 * IPython/ipmaker.py (make_IPython): added an autocall option.
3657
3662
3658 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3663 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3659 the auto-eval code. Now autocalling is an option, and the code is
3664 the auto-eval code. Now autocalling is an option, and the code is
3660 also vastly safer. There is no more eval() involved at all.
3665 also vastly safer. There is no more eval() involved at all.
3661
3666
3662 2003-03-01 Fernando Perez <fperez@colorado.edu>
3667 2003-03-01 Fernando Perez <fperez@colorado.edu>
3663
3668
3664 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3669 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3665 dict with named keys instead of a tuple.
3670 dict with named keys instead of a tuple.
3666
3671
3667 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3672 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3668
3673
3669 * setup.py (make_shortcut): Fixed message about directories
3674 * setup.py (make_shortcut): Fixed message about directories
3670 created during Windows installation (the directories were ok, just
3675 created during Windows installation (the directories were ok, just
3671 the printed message was misleading). Thanks to Chris Liechti
3676 the printed message was misleading). Thanks to Chris Liechti
3672 <cliechti-AT-gmx.net> for the heads up.
3677 <cliechti-AT-gmx.net> for the heads up.
3673
3678
3674 2003-02-21 Fernando Perez <fperez@colorado.edu>
3679 2003-02-21 Fernando Perez <fperez@colorado.edu>
3675
3680
3676 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3681 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3677 of ValueError exception when checking for auto-execution. This
3682 of ValueError exception when checking for auto-execution. This
3678 one is raised by things like Numeric arrays arr.flat when the
3683 one is raised by things like Numeric arrays arr.flat when the
3679 array is non-contiguous.
3684 array is non-contiguous.
3680
3685
3681 2003-01-31 Fernando Perez <fperez@colorado.edu>
3686 2003-01-31 Fernando Perez <fperez@colorado.edu>
3682
3687
3683 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3688 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3684 not return any value at all (even though the command would get
3689 not return any value at all (even though the command would get
3685 executed).
3690 executed).
3686 (xsys): Flush stdout right after printing the command to ensure
3691 (xsys): Flush stdout right after printing the command to ensure
3687 proper ordering of commands and command output in the total
3692 proper ordering of commands and command output in the total
3688 output.
3693 output.
3689 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3694 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3690 system/getoutput as defaults. The old ones are kept for
3695 system/getoutput as defaults. The old ones are kept for
3691 compatibility reasons, so no code which uses this library needs
3696 compatibility reasons, so no code which uses this library needs
3692 changing.
3697 changing.
3693
3698
3694 2003-01-27 *** Released version 0.2.14
3699 2003-01-27 *** Released version 0.2.14
3695
3700
3696 2003-01-25 Fernando Perez <fperez@colorado.edu>
3701 2003-01-25 Fernando Perez <fperez@colorado.edu>
3697
3702
3698 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3703 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3699 functions defined in previous edit sessions could not be re-edited
3704 functions defined in previous edit sessions could not be re-edited
3700 (because the temp files were immediately removed). Now temp files
3705 (because the temp files were immediately removed). Now temp files
3701 are removed only at IPython's exit.
3706 are removed only at IPython's exit.
3702 (Magic.magic_run): Improved @run to perform shell-like expansions
3707 (Magic.magic_run): Improved @run to perform shell-like expansions
3703 on its arguments (~users and $VARS). With this, @run becomes more
3708 on its arguments (~users and $VARS). With this, @run becomes more
3704 like a normal command-line.
3709 like a normal command-line.
3705
3710
3706 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3711 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3707 bugs related to embedding and cleaned up that code. A fairly
3712 bugs related to embedding and cleaned up that code. A fairly
3708 important one was the impossibility to access the global namespace
3713 important one was the impossibility to access the global namespace
3709 through the embedded IPython (only local variables were visible).
3714 through the embedded IPython (only local variables were visible).
3710
3715
3711 2003-01-14 Fernando Perez <fperez@colorado.edu>
3716 2003-01-14 Fernando Perez <fperez@colorado.edu>
3712
3717
3713 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3718 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3714 auto-calling to be a bit more conservative. Now it doesn't get
3719 auto-calling to be a bit more conservative. Now it doesn't get
3715 triggered if any of '!=()<>' are in the rest of the input line, to
3720 triggered if any of '!=()<>' are in the rest of the input line, to
3716 allow comparing callables. Thanks to Alex for the heads up.
3721 allow comparing callables. Thanks to Alex for the heads up.
3717
3722
3718 2003-01-07 Fernando Perez <fperez@colorado.edu>
3723 2003-01-07 Fernando Perez <fperez@colorado.edu>
3719
3724
3720 * IPython/genutils.py (page): fixed estimation of the number of
3725 * IPython/genutils.py (page): fixed estimation of the number of
3721 lines in a string to be paged to simply count newlines. This
3726 lines in a string to be paged to simply count newlines. This
3722 prevents over-guessing due to embedded escape sequences. A better
3727 prevents over-guessing due to embedded escape sequences. A better
3723 long-term solution would involve stripping out the control chars
3728 long-term solution would involve stripping out the control chars
3724 for the count, but it's potentially so expensive I just don't
3729 for the count, but it's potentially so expensive I just don't
3725 think it's worth doing.
3730 think it's worth doing.
3726
3731
3727 2002-12-19 *** Released version 0.2.14pre50
3732 2002-12-19 *** Released version 0.2.14pre50
3728
3733
3729 2002-12-19 Fernando Perez <fperez@colorado.edu>
3734 2002-12-19 Fernando Perez <fperez@colorado.edu>
3730
3735
3731 * tools/release (version): Changed release scripts to inform
3736 * tools/release (version): Changed release scripts to inform
3732 Andrea and build a NEWS file with a list of recent changes.
3737 Andrea and build a NEWS file with a list of recent changes.
3733
3738
3734 * IPython/ColorANSI.py (__all__): changed terminal detection
3739 * IPython/ColorANSI.py (__all__): changed terminal detection
3735 code. Seems to work better for xterms without breaking
3740 code. Seems to work better for xterms without breaking
3736 konsole. Will need more testing to determine if WinXP and Mac OSX
3741 konsole. Will need more testing to determine if WinXP and Mac OSX
3737 also work ok.
3742 also work ok.
3738
3743
3739 2002-12-18 *** Released version 0.2.14pre49
3744 2002-12-18 *** Released version 0.2.14pre49
3740
3745
3741 2002-12-18 Fernando Perez <fperez@colorado.edu>
3746 2002-12-18 Fernando Perez <fperez@colorado.edu>
3742
3747
3743 * Docs: added new info about Mac OSX, from Andrea.
3748 * Docs: added new info about Mac OSX, from Andrea.
3744
3749
3745 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3750 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3746 allow direct plotting of python strings whose format is the same
3751 allow direct plotting of python strings whose format is the same
3747 of gnuplot data files.
3752 of gnuplot data files.
3748
3753
3749 2002-12-16 Fernando Perez <fperez@colorado.edu>
3754 2002-12-16 Fernando Perez <fperez@colorado.edu>
3750
3755
3751 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3756 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3752 value of exit question to be acknowledged.
3757 value of exit question to be acknowledged.
3753
3758
3754 2002-12-03 Fernando Perez <fperez@colorado.edu>
3759 2002-12-03 Fernando Perez <fperez@colorado.edu>
3755
3760
3756 * IPython/ipmaker.py: removed generators, which had been added
3761 * IPython/ipmaker.py: removed generators, which had been added
3757 by mistake in an earlier debugging run. This was causing trouble
3762 by mistake in an earlier debugging run. This was causing trouble
3758 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3763 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3759 for pointing this out.
3764 for pointing this out.
3760
3765
3761 2002-11-17 Fernando Perez <fperez@colorado.edu>
3766 2002-11-17 Fernando Perez <fperez@colorado.edu>
3762
3767
3763 * Manual: updated the Gnuplot section.
3768 * Manual: updated the Gnuplot section.
3764
3769
3765 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3770 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3766 a much better split of what goes in Runtime and what goes in
3771 a much better split of what goes in Runtime and what goes in
3767 Interactive.
3772 Interactive.
3768
3773
3769 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3774 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3770 being imported from iplib.
3775 being imported from iplib.
3771
3776
3772 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3777 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3773 for command-passing. Now the global Gnuplot instance is called
3778 for command-passing. Now the global Gnuplot instance is called
3774 'gp' instead of 'g', which was really a far too fragile and
3779 'gp' instead of 'g', which was really a far too fragile and
3775 common name.
3780 common name.
3776
3781
3777 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3782 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3778 bounding boxes generated by Gnuplot for square plots.
3783 bounding boxes generated by Gnuplot for square plots.
3779
3784
3780 * IPython/genutils.py (popkey): new function added. I should
3785 * IPython/genutils.py (popkey): new function added. I should
3781 suggest this on c.l.py as a dict method, it seems useful.
3786 suggest this on c.l.py as a dict method, it seems useful.
3782
3787
3783 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3788 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3784 to transparently handle PostScript generation. MUCH better than
3789 to transparently handle PostScript generation. MUCH better than
3785 the previous plot_eps/replot_eps (which I removed now). The code
3790 the previous plot_eps/replot_eps (which I removed now). The code
3786 is also fairly clean and well documented now (including
3791 is also fairly clean and well documented now (including
3787 docstrings).
3792 docstrings).
3788
3793
3789 2002-11-13 Fernando Perez <fperez@colorado.edu>
3794 2002-11-13 Fernando Perez <fperez@colorado.edu>
3790
3795
3791 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3796 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3792 (inconsistent with options).
3797 (inconsistent with options).
3793
3798
3794 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3799 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3795 manually disabled, I don't know why. Fixed it.
3800 manually disabled, I don't know why. Fixed it.
3796 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3801 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3797 eps output.
3802 eps output.
3798
3803
3799 2002-11-12 Fernando Perez <fperez@colorado.edu>
3804 2002-11-12 Fernando Perez <fperez@colorado.edu>
3800
3805
3801 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3806 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3802 don't propagate up to caller. Fixes crash reported by François
3807 don't propagate up to caller. Fixes crash reported by François
3803 Pinard.
3808 Pinard.
3804
3809
3805 2002-11-09 Fernando Perez <fperez@colorado.edu>
3810 2002-11-09 Fernando Perez <fperez@colorado.edu>
3806
3811
3807 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3812 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3808 history file for new users.
3813 history file for new users.
3809 (make_IPython): fixed bug where initial install would leave the
3814 (make_IPython): fixed bug where initial install would leave the
3810 user running in the .ipython dir.
3815 user running in the .ipython dir.
3811 (make_IPython): fixed bug where config dir .ipython would be
3816 (make_IPython): fixed bug where config dir .ipython would be
3812 created regardless of the given -ipythondir option. Thanks to Cory
3817 created regardless of the given -ipythondir option. Thanks to Cory
3813 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3818 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3814
3819
3815 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3820 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3816 type confirmations. Will need to use it in all of IPython's code
3821 type confirmations. Will need to use it in all of IPython's code
3817 consistently.
3822 consistently.
3818
3823
3819 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3824 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3820 context to print 31 lines instead of the default 5. This will make
3825 context to print 31 lines instead of the default 5. This will make
3821 the crash reports extremely detailed in case the problem is in
3826 the crash reports extremely detailed in case the problem is in
3822 libraries I don't have access to.
3827 libraries I don't have access to.
3823
3828
3824 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3829 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3825 line of defense' code to still crash, but giving users fair
3830 line of defense' code to still crash, but giving users fair
3826 warning. I don't want internal errors to go unreported: if there's
3831 warning. I don't want internal errors to go unreported: if there's
3827 an internal problem, IPython should crash and generate a full
3832 an internal problem, IPython should crash and generate a full
3828 report.
3833 report.
3829
3834
3830 2002-11-08 Fernando Perez <fperez@colorado.edu>
3835 2002-11-08 Fernando Perez <fperez@colorado.edu>
3831
3836
3832 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3837 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3833 otherwise uncaught exceptions which can appear if people set
3838 otherwise uncaught exceptions which can appear if people set
3834 sys.stdout to something badly broken. Thanks to a crash report
3839 sys.stdout to something badly broken. Thanks to a crash report
3835 from henni-AT-mail.brainbot.com.
3840 from henni-AT-mail.brainbot.com.
3836
3841
3837 2002-11-04 Fernando Perez <fperez@colorado.edu>
3842 2002-11-04 Fernando Perez <fperez@colorado.edu>
3838
3843
3839 * IPython/iplib.py (InteractiveShell.interact): added
3844 * IPython/iplib.py (InteractiveShell.interact): added
3840 __IPYTHON__active to the builtins. It's a flag which goes on when
3845 __IPYTHON__active to the builtins. It's a flag which goes on when
3841 the interaction starts and goes off again when it stops. This
3846 the interaction starts and goes off again when it stops. This
3842 allows embedding code to detect being inside IPython. Before this
3847 allows embedding code to detect being inside IPython. Before this
3843 was done via __IPYTHON__, but that only shows that an IPython
3848 was done via __IPYTHON__, but that only shows that an IPython
3844 instance has been created.
3849 instance has been created.
3845
3850
3846 * IPython/Magic.py (Magic.magic_env): I realized that in a
3851 * IPython/Magic.py (Magic.magic_env): I realized that in a
3847 UserDict, instance.data holds the data as a normal dict. So I
3852 UserDict, instance.data holds the data as a normal dict. So I
3848 modified @env to return os.environ.data instead of rebuilding a
3853 modified @env to return os.environ.data instead of rebuilding a
3849 dict by hand.
3854 dict by hand.
3850
3855
3851 2002-11-02 Fernando Perez <fperez@colorado.edu>
3856 2002-11-02 Fernando Perez <fperez@colorado.edu>
3852
3857
3853 * IPython/genutils.py (warn): changed so that level 1 prints no
3858 * IPython/genutils.py (warn): changed so that level 1 prints no
3854 header. Level 2 is now the default (with 'WARNING' header, as
3859 header. Level 2 is now the default (with 'WARNING' header, as
3855 before). I think I tracked all places where changes were needed in
3860 before). I think I tracked all places where changes were needed in
3856 IPython, but outside code using the old level numbering may have
3861 IPython, but outside code using the old level numbering may have
3857 broken.
3862 broken.
3858
3863
3859 * IPython/iplib.py (InteractiveShell.runcode): added this to
3864 * IPython/iplib.py (InteractiveShell.runcode): added this to
3860 handle the tracebacks in SystemExit traps correctly. The previous
3865 handle the tracebacks in SystemExit traps correctly. The previous
3861 code (through interact) was printing more of the stack than
3866 code (through interact) was printing more of the stack than
3862 necessary, showing IPython internal code to the user.
3867 necessary, showing IPython internal code to the user.
3863
3868
3864 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3869 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3865 default. Now that the default at the confirmation prompt is yes,
3870 default. Now that the default at the confirmation prompt is yes,
3866 it's not so intrusive. François' argument that ipython sessions
3871 it's not so intrusive. François' argument that ipython sessions
3867 tend to be complex enough not to lose them from an accidental C-d,
3872 tend to be complex enough not to lose them from an accidental C-d,
3868 is a valid one.
3873 is a valid one.
3869
3874
3870 * IPython/iplib.py (InteractiveShell.interact): added a
3875 * IPython/iplib.py (InteractiveShell.interact): added a
3871 showtraceback() call to the SystemExit trap, and modified the exit
3876 showtraceback() call to the SystemExit trap, and modified the exit
3872 confirmation to have yes as the default.
3877 confirmation to have yes as the default.
3873
3878
3874 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3879 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3875 this file. It's been gone from the code for a long time, this was
3880 this file. It's been gone from the code for a long time, this was
3876 simply leftover junk.
3881 simply leftover junk.
3877
3882
3878 2002-11-01 Fernando Perez <fperez@colorado.edu>
3883 2002-11-01 Fernando Perez <fperez@colorado.edu>
3879
3884
3880 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3885 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3881 added. If set, IPython now traps EOF and asks for
3886 added. If set, IPython now traps EOF and asks for
3882 confirmation. After a request by François Pinard.
3887 confirmation. After a request by François Pinard.
3883
3888
3884 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3889 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3885 of @abort, and with a new (better) mechanism for handling the
3890 of @abort, and with a new (better) mechanism for handling the
3886 exceptions.
3891 exceptions.
3887
3892
3888 2002-10-27 Fernando Perez <fperez@colorado.edu>
3893 2002-10-27 Fernando Perez <fperez@colorado.edu>
3889
3894
3890 * IPython/usage.py (__doc__): updated the --help information and
3895 * IPython/usage.py (__doc__): updated the --help information and
3891 the ipythonrc file to indicate that -log generates
3896 the ipythonrc file to indicate that -log generates
3892 ./ipython.log. Also fixed the corresponding info in @logstart.
3897 ./ipython.log. Also fixed the corresponding info in @logstart.
3893 This and several other fixes in the manuals thanks to reports by
3898 This and several other fixes in the manuals thanks to reports by
3894 François Pinard <pinard-AT-iro.umontreal.ca>.
3899 François Pinard <pinard-AT-iro.umontreal.ca>.
3895
3900
3896 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3901 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3897 refer to @logstart (instead of @log, which doesn't exist).
3902 refer to @logstart (instead of @log, which doesn't exist).
3898
3903
3899 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3904 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3900 AttributeError crash. Thanks to Christopher Armstrong
3905 AttributeError crash. Thanks to Christopher Armstrong
3901 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3906 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3902 introduced recently (in 0.2.14pre37) with the fix to the eval
3907 introduced recently (in 0.2.14pre37) with the fix to the eval
3903 problem mentioned below.
3908 problem mentioned below.
3904
3909
3905 2002-10-17 Fernando Perez <fperez@colorado.edu>
3910 2002-10-17 Fernando Perez <fperez@colorado.edu>
3906
3911
3907 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3912 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
3908 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3913 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
3909
3914
3910 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3915 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
3911 this function to fix a problem reported by Alex Schmolck. He saw
3916 this function to fix a problem reported by Alex Schmolck. He saw
3912 it with list comprehensions and generators, which were getting
3917 it with list comprehensions and generators, which were getting
3913 called twice. The real problem was an 'eval' call in testing for
3918 called twice. The real problem was an 'eval' call in testing for
3914 automagic which was evaluating the input line silently.
3919 automagic which was evaluating the input line silently.
3915
3920
3916 This is a potentially very nasty bug, if the input has side
3921 This is a potentially very nasty bug, if the input has side
3917 effects which must not be repeated. The code is much cleaner now,
3922 effects which must not be repeated. The code is much cleaner now,
3918 without any blanket 'except' left and with a regexp test for
3923 without any blanket 'except' left and with a regexp test for
3919 actual function names.
3924 actual function names.
3920
3925
3921 But an eval remains, which I'm not fully comfortable with. I just
3926 But an eval remains, which I'm not fully comfortable with. I just
3922 don't know how to find out if an expression could be a callable in
3927 don't know how to find out if an expression could be a callable in
3923 the user's namespace without doing an eval on the string. However
3928 the user's namespace without doing an eval on the string. However
3924 that string is now much more strictly checked so that no code
3929 that string is now much more strictly checked so that no code
3925 slips by, so the eval should only happen for things that can
3930 slips by, so the eval should only happen for things that can
3926 really be only function/method names.
3931 really be only function/method names.
3927
3932
3928 2002-10-15 Fernando Perez <fperez@colorado.edu>
3933 2002-10-15 Fernando Perez <fperez@colorado.edu>
3929
3934
3930 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3935 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
3931 OSX information to main manual, removed README_Mac_OSX file from
3936 OSX information to main manual, removed README_Mac_OSX file from
3932 distribution. Also updated credits for recent additions.
3937 distribution. Also updated credits for recent additions.
3933
3938
3934 2002-10-10 Fernando Perez <fperez@colorado.edu>
3939 2002-10-10 Fernando Perez <fperez@colorado.edu>
3935
3940
3936 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3941 * README_Mac_OSX: Added a README for Mac OSX users for fixing
3937 terminal-related issues. Many thanks to Andrea Riciputi
3942 terminal-related issues. Many thanks to Andrea Riciputi
3938 <andrea.riciputi-AT-libero.it> for writing it.
3943 <andrea.riciputi-AT-libero.it> for writing it.
3939
3944
3940 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3945 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
3941 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3946 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3942
3947
3943 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3948 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
3944 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3949 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
3945 <syver-en-AT-online.no> who both submitted patches for this problem.
3950 <syver-en-AT-online.no> who both submitted patches for this problem.
3946
3951
3947 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3952 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
3948 global embedding to make sure that things don't overwrite user
3953 global embedding to make sure that things don't overwrite user
3949 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3954 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
3950
3955
3951 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3956 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
3952 compatibility. Thanks to Hayden Callow
3957 compatibility. Thanks to Hayden Callow
3953 <h.callow-AT-elec.canterbury.ac.nz>
3958 <h.callow-AT-elec.canterbury.ac.nz>
3954
3959
3955 2002-10-04 Fernando Perez <fperez@colorado.edu>
3960 2002-10-04 Fernando Perez <fperez@colorado.edu>
3956
3961
3957 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3962 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
3958 Gnuplot.File objects.
3963 Gnuplot.File objects.
3959
3964
3960 2002-07-23 Fernando Perez <fperez@colorado.edu>
3965 2002-07-23 Fernando Perez <fperez@colorado.edu>
3961
3966
3962 * IPython/genutils.py (timing): Added timings() and timing() for
3967 * IPython/genutils.py (timing): Added timings() and timing() for
3963 quick access to the most commonly needed data, the execution
3968 quick access to the most commonly needed data, the execution
3964 times. Old timing() renamed to timings_out().
3969 times. Old timing() renamed to timings_out().
3965
3970
3966 2002-07-18 Fernando Perez <fperez@colorado.edu>
3971 2002-07-18 Fernando Perez <fperez@colorado.edu>
3967
3972
3968 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3973 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
3969 bug with nested instances disrupting the parent's tab completion.
3974 bug with nested instances disrupting the parent's tab completion.
3970
3975
3971 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3976 * IPython/iplib.py (all_completions): Added Alex Schmolck's
3972 all_completions code to begin the emacs integration.
3977 all_completions code to begin the emacs integration.
3973
3978
3974 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3979 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
3975 argument to allow titling individual arrays when plotting.
3980 argument to allow titling individual arrays when plotting.
3976
3981
3977 2002-07-15 Fernando Perez <fperez@colorado.edu>
3982 2002-07-15 Fernando Perez <fperez@colorado.edu>
3978
3983
3979 * setup.py (make_shortcut): changed to retrieve the value of
3984 * setup.py (make_shortcut): changed to retrieve the value of
3980 'Program Files' directory from the registry (this value changes in
3985 'Program Files' directory from the registry (this value changes in
3981 non-english versions of Windows). Thanks to Thomas Fanslau
3986 non-english versions of Windows). Thanks to Thomas Fanslau
3982 <tfanslau-AT-gmx.de> for the report.
3987 <tfanslau-AT-gmx.de> for the report.
3983
3988
3984 2002-07-10 Fernando Perez <fperez@colorado.edu>
3989 2002-07-10 Fernando Perez <fperez@colorado.edu>
3985
3990
3986 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3991 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3987 a bug in pdb, which crashes if a line with only whitespace is
3992 a bug in pdb, which crashes if a line with only whitespace is
3988 entered. Bug report submitted to sourceforge.
3993 entered. Bug report submitted to sourceforge.
3989
3994
3990 2002-07-09 Fernando Perez <fperez@colorado.edu>
3995 2002-07-09 Fernando Perez <fperez@colorado.edu>
3991
3996
3992 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3997 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3993 reporting exceptions (it's a bug in inspect.py, I just set a
3998 reporting exceptions (it's a bug in inspect.py, I just set a
3994 workaround).
3999 workaround).
3995
4000
3996 2002-07-08 Fernando Perez <fperez@colorado.edu>
4001 2002-07-08 Fernando Perez <fperez@colorado.edu>
3997
4002
3998 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4003 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3999 __IPYTHON__ in __builtins__ to show up in user_ns.
4004 __IPYTHON__ in __builtins__ to show up in user_ns.
4000
4005
4001 2002-07-03 Fernando Perez <fperez@colorado.edu>
4006 2002-07-03 Fernando Perez <fperez@colorado.edu>
4002
4007
4003 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4008 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4004 name from @gp_set_instance to @gp_set_default.
4009 name from @gp_set_instance to @gp_set_default.
4005
4010
4006 * IPython/ipmaker.py (make_IPython): default editor value set to
4011 * IPython/ipmaker.py (make_IPython): default editor value set to
4007 '0' (a string), to match the rc file. Otherwise will crash when
4012 '0' (a string), to match the rc file. Otherwise will crash when
4008 .strip() is called on it.
4013 .strip() is called on it.
4009
4014
4010
4015
4011 2002-06-28 Fernando Perez <fperez@colorado.edu>
4016 2002-06-28 Fernando Perez <fperez@colorado.edu>
4012
4017
4013 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4018 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4014 of files in current directory when a file is executed via
4019 of files in current directory when a file is executed via
4015 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4020 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4016
4021
4017 * setup.py (manfiles): fix for rpm builds, submitted by RA
4022 * setup.py (manfiles): fix for rpm builds, submitted by RA
4018 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4023 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4019
4024
4020 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4025 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4021 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4026 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4022 string!). A. Schmolck caught this one.
4027 string!). A. Schmolck caught this one.
4023
4028
4024 2002-06-27 Fernando Perez <fperez@colorado.edu>
4029 2002-06-27 Fernando Perez <fperez@colorado.edu>
4025
4030
4026 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4031 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4027 defined files at the cmd line. __name__ wasn't being set to
4032 defined files at the cmd line. __name__ wasn't being set to
4028 __main__.
4033 __main__.
4029
4034
4030 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4035 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4031 regular lists and tuples besides Numeric arrays.
4036 regular lists and tuples besides Numeric arrays.
4032
4037
4033 * IPython/Prompts.py (CachedOutput.__call__): Added output
4038 * IPython/Prompts.py (CachedOutput.__call__): Added output
4034 supression for input ending with ';'. Similar to Mathematica and
4039 supression for input ending with ';'. Similar to Mathematica and
4035 Matlab. The _* vars and Out[] list are still updated, just like
4040 Matlab. The _* vars and Out[] list are still updated, just like
4036 Mathematica behaves.
4041 Mathematica behaves.
4037
4042
4038 2002-06-25 Fernando Perez <fperez@colorado.edu>
4043 2002-06-25 Fernando Perez <fperez@colorado.edu>
4039
4044
4040 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4045 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4041 .ini extensions for profiels under Windows.
4046 .ini extensions for profiels under Windows.
4042
4047
4043 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4048 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4044 string form. Fix contributed by Alexander Schmolck
4049 string form. Fix contributed by Alexander Schmolck
4045 <a.schmolck-AT-gmx.net>
4050 <a.schmolck-AT-gmx.net>
4046
4051
4047 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4052 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4048 pre-configured Gnuplot instance.
4053 pre-configured Gnuplot instance.
4049
4054
4050 2002-06-21 Fernando Perez <fperez@colorado.edu>
4055 2002-06-21 Fernando Perez <fperez@colorado.edu>
4051
4056
4052 * IPython/numutils.py (exp_safe): new function, works around the
4057 * IPython/numutils.py (exp_safe): new function, works around the
4053 underflow problems in Numeric.
4058 underflow problems in Numeric.
4054 (log2): New fn. Safe log in base 2: returns exact integer answer
4059 (log2): New fn. Safe log in base 2: returns exact integer answer
4055 for exact integer powers of 2.
4060 for exact integer powers of 2.
4056
4061
4057 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4062 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4058 properly.
4063 properly.
4059
4064
4060 2002-06-20 Fernando Perez <fperez@colorado.edu>
4065 2002-06-20 Fernando Perez <fperez@colorado.edu>
4061
4066
4062 * IPython/genutils.py (timing): new function like
4067 * IPython/genutils.py (timing): new function like
4063 Mathematica's. Similar to time_test, but returns more info.
4068 Mathematica's. Similar to time_test, but returns more info.
4064
4069
4065 2002-06-18 Fernando Perez <fperez@colorado.edu>
4070 2002-06-18 Fernando Perez <fperez@colorado.edu>
4066
4071
4067 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4072 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4068 according to Mike Heeter's suggestions.
4073 according to Mike Heeter's suggestions.
4069
4074
4070 2002-06-16 Fernando Perez <fperez@colorado.edu>
4075 2002-06-16 Fernando Perez <fperez@colorado.edu>
4071
4076
4072 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4077 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4073 system. GnuplotMagic is gone as a user-directory option. New files
4078 system. GnuplotMagic is gone as a user-directory option. New files
4074 make it easier to use all the gnuplot stuff both from external
4079 make it easier to use all the gnuplot stuff both from external
4075 programs as well as from IPython. Had to rewrite part of
4080 programs as well as from IPython. Had to rewrite part of
4076 hardcopy() b/c of a strange bug: often the ps files simply don't
4081 hardcopy() b/c of a strange bug: often the ps files simply don't
4077 get created, and require a repeat of the command (often several
4082 get created, and require a repeat of the command (often several
4078 times).
4083 times).
4079
4084
4080 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4085 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4081 resolve output channel at call time, so that if sys.stderr has
4086 resolve output channel at call time, so that if sys.stderr has
4082 been redirected by user this gets honored.
4087 been redirected by user this gets honored.
4083
4088
4084 2002-06-13 Fernando Perez <fperez@colorado.edu>
4089 2002-06-13 Fernando Perez <fperez@colorado.edu>
4085
4090
4086 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4091 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4087 IPShell. Kept a copy with the old names to avoid breaking people's
4092 IPShell. Kept a copy with the old names to avoid breaking people's
4088 embedded code.
4093 embedded code.
4089
4094
4090 * IPython/ipython: simplified it to the bare minimum after
4095 * IPython/ipython: simplified it to the bare minimum after
4091 Holger's suggestions. Added info about how to use it in
4096 Holger's suggestions. Added info about how to use it in
4092 PYTHONSTARTUP.
4097 PYTHONSTARTUP.
4093
4098
4094 * IPython/Shell.py (IPythonShell): changed the options passing
4099 * IPython/Shell.py (IPythonShell): changed the options passing
4095 from a string with funky %s replacements to a straight list. Maybe
4100 from a string with funky %s replacements to a straight list. Maybe
4096 a bit more typing, but it follows sys.argv conventions, so there's
4101 a bit more typing, but it follows sys.argv conventions, so there's
4097 less special-casing to remember.
4102 less special-casing to remember.
4098
4103
4099 2002-06-12 Fernando Perez <fperez@colorado.edu>
4104 2002-06-12 Fernando Perez <fperez@colorado.edu>
4100
4105
4101 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4106 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4102 command. Thanks to a suggestion by Mike Heeter.
4107 command. Thanks to a suggestion by Mike Heeter.
4103 (Magic.magic_pfile): added behavior to look at filenames if given
4108 (Magic.magic_pfile): added behavior to look at filenames if given
4104 arg is not a defined object.
4109 arg is not a defined object.
4105 (Magic.magic_save): New @save function to save code snippets. Also
4110 (Magic.magic_save): New @save function to save code snippets. Also
4106 a Mike Heeter idea.
4111 a Mike Heeter idea.
4107
4112
4108 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4113 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4109 plot() and replot(). Much more convenient now, especially for
4114 plot() and replot(). Much more convenient now, especially for
4110 interactive use.
4115 interactive use.
4111
4116
4112 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4117 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4113 filenames.
4118 filenames.
4114
4119
4115 2002-06-02 Fernando Perez <fperez@colorado.edu>
4120 2002-06-02 Fernando Perez <fperez@colorado.edu>
4116
4121
4117 * IPython/Struct.py (Struct.__init__): modified to admit
4122 * IPython/Struct.py (Struct.__init__): modified to admit
4118 initialization via another struct.
4123 initialization via another struct.
4119
4124
4120 * IPython/genutils.py (SystemExec.__init__): New stateful
4125 * IPython/genutils.py (SystemExec.__init__): New stateful
4121 interface to xsys and bq. Useful for writing system scripts.
4126 interface to xsys and bq. Useful for writing system scripts.
4122
4127
4123 2002-05-30 Fernando Perez <fperez@colorado.edu>
4128 2002-05-30 Fernando Perez <fperez@colorado.edu>
4124
4129
4125 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4130 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4126 documents. This will make the user download smaller (it's getting
4131 documents. This will make the user download smaller (it's getting
4127 too big).
4132 too big).
4128
4133
4129 2002-05-29 Fernando Perez <fperez@colorado.edu>
4134 2002-05-29 Fernando Perez <fperez@colorado.edu>
4130
4135
4131 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4136 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4132 fix problems with shelve and pickle. Seems to work, but I don't
4137 fix problems with shelve and pickle. Seems to work, but I don't
4133 know if corner cases break it. Thanks to Mike Heeter
4138 know if corner cases break it. Thanks to Mike Heeter
4134 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4139 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4135
4140
4136 2002-05-24 Fernando Perez <fperez@colorado.edu>
4141 2002-05-24 Fernando Perez <fperez@colorado.edu>
4137
4142
4138 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4143 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4139 macros having broken.
4144 macros having broken.
4140
4145
4141 2002-05-21 Fernando Perez <fperez@colorado.edu>
4146 2002-05-21 Fernando Perez <fperez@colorado.edu>
4142
4147
4143 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4148 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4144 introduced logging bug: all history before logging started was
4149 introduced logging bug: all history before logging started was
4145 being written one character per line! This came from the redesign
4150 being written one character per line! This came from the redesign
4146 of the input history as a special list which slices to strings,
4151 of the input history as a special list which slices to strings,
4147 not to lists.
4152 not to lists.
4148
4153
4149 2002-05-20 Fernando Perez <fperez@colorado.edu>
4154 2002-05-20 Fernando Perez <fperez@colorado.edu>
4150
4155
4151 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4156 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4152 be an attribute of all classes in this module. The design of these
4157 be an attribute of all classes in this module. The design of these
4153 classes needs some serious overhauling.
4158 classes needs some serious overhauling.
4154
4159
4155 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4160 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4156 which was ignoring '_' in option names.
4161 which was ignoring '_' in option names.
4157
4162
4158 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4163 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4159 'Verbose_novars' to 'Context' and made it the new default. It's a
4164 'Verbose_novars' to 'Context' and made it the new default. It's a
4160 bit more readable and also safer than verbose.
4165 bit more readable and also safer than verbose.
4161
4166
4162 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4167 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4163 triple-quoted strings.
4168 triple-quoted strings.
4164
4169
4165 * IPython/OInspect.py (__all__): new module exposing the object
4170 * IPython/OInspect.py (__all__): new module exposing the object
4166 introspection facilities. Now the corresponding magics are dummy
4171 introspection facilities. Now the corresponding magics are dummy
4167 wrappers around this. Having this module will make it much easier
4172 wrappers around this. Having this module will make it much easier
4168 to put these functions into our modified pdb.
4173 to put these functions into our modified pdb.
4169 This new object inspector system uses the new colorizing module,
4174 This new object inspector system uses the new colorizing module,
4170 so source code and other things are nicely syntax highlighted.
4175 so source code and other things are nicely syntax highlighted.
4171
4176
4172 2002-05-18 Fernando Perez <fperez@colorado.edu>
4177 2002-05-18 Fernando Perez <fperez@colorado.edu>
4173
4178
4174 * IPython/ColorANSI.py: Split the coloring tools into a separate
4179 * IPython/ColorANSI.py: Split the coloring tools into a separate
4175 module so I can use them in other code easier (they were part of
4180 module so I can use them in other code easier (they were part of
4176 ultraTB).
4181 ultraTB).
4177
4182
4178 2002-05-17 Fernando Perez <fperez@colorado.edu>
4183 2002-05-17 Fernando Perez <fperez@colorado.edu>
4179
4184
4180 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4185 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4181 fixed it to set the global 'g' also to the called instance, as
4186 fixed it to set the global 'g' also to the called instance, as
4182 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4187 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4183 user's 'g' variables).
4188 user's 'g' variables).
4184
4189
4185 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4190 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4186 global variables (aliases to _ih,_oh) so that users which expect
4191 global variables (aliases to _ih,_oh) so that users which expect
4187 In[5] or Out[7] to work aren't unpleasantly surprised.
4192 In[5] or Out[7] to work aren't unpleasantly surprised.
4188 (InputList.__getslice__): new class to allow executing slices of
4193 (InputList.__getslice__): new class to allow executing slices of
4189 input history directly. Very simple class, complements the use of
4194 input history directly. Very simple class, complements the use of
4190 macros.
4195 macros.
4191
4196
4192 2002-05-16 Fernando Perez <fperez@colorado.edu>
4197 2002-05-16 Fernando Perez <fperez@colorado.edu>
4193
4198
4194 * setup.py (docdirbase): make doc directory be just doc/IPython
4199 * setup.py (docdirbase): make doc directory be just doc/IPython
4195 without version numbers, it will reduce clutter for users.
4200 without version numbers, it will reduce clutter for users.
4196
4201
4197 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4202 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4198 execfile call to prevent possible memory leak. See for details:
4203 execfile call to prevent possible memory leak. See for details:
4199 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4204 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4200
4205
4201 2002-05-15 Fernando Perez <fperez@colorado.edu>
4206 2002-05-15 Fernando Perez <fperez@colorado.edu>
4202
4207
4203 * IPython/Magic.py (Magic.magic_psource): made the object
4208 * IPython/Magic.py (Magic.magic_psource): made the object
4204 introspection names be more standard: pdoc, pdef, pfile and
4209 introspection names be more standard: pdoc, pdef, pfile and
4205 psource. They all print/page their output, and it makes
4210 psource. They all print/page their output, and it makes
4206 remembering them easier. Kept old names for compatibility as
4211 remembering them easier. Kept old names for compatibility as
4207 aliases.
4212 aliases.
4208
4213
4209 2002-05-14 Fernando Perez <fperez@colorado.edu>
4214 2002-05-14 Fernando Perez <fperez@colorado.edu>
4210
4215
4211 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4216 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4212 what the mouse problem was. The trick is to use gnuplot with temp
4217 what the mouse problem was. The trick is to use gnuplot with temp
4213 files and NOT with pipes (for data communication), because having
4218 files and NOT with pipes (for data communication), because having
4214 both pipes and the mouse on is bad news.
4219 both pipes and the mouse on is bad news.
4215
4220
4216 2002-05-13 Fernando Perez <fperez@colorado.edu>
4221 2002-05-13 Fernando Perez <fperez@colorado.edu>
4217
4222
4218 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4223 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4219 bug. Information would be reported about builtins even when
4224 bug. Information would be reported about builtins even when
4220 user-defined functions overrode them.
4225 user-defined functions overrode them.
4221
4226
4222 2002-05-11 Fernando Perez <fperez@colorado.edu>
4227 2002-05-11 Fernando Perez <fperez@colorado.edu>
4223
4228
4224 * IPython/__init__.py (__all__): removed FlexCompleter from
4229 * IPython/__init__.py (__all__): removed FlexCompleter from
4225 __all__ so that things don't fail in platforms without readline.
4230 __all__ so that things don't fail in platforms without readline.
4226
4231
4227 2002-05-10 Fernando Perez <fperez@colorado.edu>
4232 2002-05-10 Fernando Perez <fperez@colorado.edu>
4228
4233
4229 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4234 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4230 it requires Numeric, effectively making Numeric a dependency for
4235 it requires Numeric, effectively making Numeric a dependency for
4231 IPython.
4236 IPython.
4232
4237
4233 * Released 0.2.13
4238 * Released 0.2.13
4234
4239
4235 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4240 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4236 profiler interface. Now all the major options from the profiler
4241 profiler interface. Now all the major options from the profiler
4237 module are directly supported in IPython, both for single
4242 module are directly supported in IPython, both for single
4238 expressions (@prun) and for full programs (@run -p).
4243 expressions (@prun) and for full programs (@run -p).
4239
4244
4240 2002-05-09 Fernando Perez <fperez@colorado.edu>
4245 2002-05-09 Fernando Perez <fperez@colorado.edu>
4241
4246
4242 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4247 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4243 magic properly formatted for screen.
4248 magic properly formatted for screen.
4244
4249
4245 * setup.py (make_shortcut): Changed things to put pdf version in
4250 * setup.py (make_shortcut): Changed things to put pdf version in
4246 doc/ instead of doc/manual (had to change lyxport a bit).
4251 doc/ instead of doc/manual (had to change lyxport a bit).
4247
4252
4248 * IPython/Magic.py (Profile.string_stats): made profile runs go
4253 * IPython/Magic.py (Profile.string_stats): made profile runs go
4249 through pager (they are long and a pager allows searching, saving,
4254 through pager (they are long and a pager allows searching, saving,
4250 etc.)
4255 etc.)
4251
4256
4252 2002-05-08 Fernando Perez <fperez@colorado.edu>
4257 2002-05-08 Fernando Perez <fperez@colorado.edu>
4253
4258
4254 * Released 0.2.12
4259 * Released 0.2.12
4255
4260
4256 2002-05-06 Fernando Perez <fperez@colorado.edu>
4261 2002-05-06 Fernando Perez <fperez@colorado.edu>
4257
4262
4258 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4263 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4259 introduced); 'hist n1 n2' was broken.
4264 introduced); 'hist n1 n2' was broken.
4260 (Magic.magic_pdb): added optional on/off arguments to @pdb
4265 (Magic.magic_pdb): added optional on/off arguments to @pdb
4261 (Magic.magic_run): added option -i to @run, which executes code in
4266 (Magic.magic_run): added option -i to @run, which executes code in
4262 the IPython namespace instead of a clean one. Also added @irun as
4267 the IPython namespace instead of a clean one. Also added @irun as
4263 an alias to @run -i.
4268 an alias to @run -i.
4264
4269
4265 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4270 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4266 fixed (it didn't really do anything, the namespaces were wrong).
4271 fixed (it didn't really do anything, the namespaces were wrong).
4267
4272
4268 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4273 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4269
4274
4270 * IPython/__init__.py (__all__): Fixed package namespace, now
4275 * IPython/__init__.py (__all__): Fixed package namespace, now
4271 'import IPython' does give access to IPython.<all> as
4276 'import IPython' does give access to IPython.<all> as
4272 expected. Also renamed __release__ to Release.
4277 expected. Also renamed __release__ to Release.
4273
4278
4274 * IPython/Debugger.py (__license__): created new Pdb class which
4279 * IPython/Debugger.py (__license__): created new Pdb class which
4275 functions like a drop-in for the normal pdb.Pdb but does NOT
4280 functions like a drop-in for the normal pdb.Pdb but does NOT
4276 import readline by default. This way it doesn't muck up IPython's
4281 import readline by default. This way it doesn't muck up IPython's
4277 readline handling, and now tab-completion finally works in the
4282 readline handling, and now tab-completion finally works in the
4278 debugger -- sort of. It completes things globally visible, but the
4283 debugger -- sort of. It completes things globally visible, but the
4279 completer doesn't track the stack as pdb walks it. That's a bit
4284 completer doesn't track the stack as pdb walks it. That's a bit
4280 tricky, and I'll have to implement it later.
4285 tricky, and I'll have to implement it later.
4281
4286
4282 2002-05-05 Fernando Perez <fperez@colorado.edu>
4287 2002-05-05 Fernando Perez <fperez@colorado.edu>
4283
4288
4284 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4289 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4285 magic docstrings when printed via ? (explicit \'s were being
4290 magic docstrings when printed via ? (explicit \'s were being
4286 printed).
4291 printed).
4287
4292
4288 * IPython/ipmaker.py (make_IPython): fixed namespace
4293 * IPython/ipmaker.py (make_IPython): fixed namespace
4289 identification bug. Now variables loaded via logs or command-line
4294 identification bug. Now variables loaded via logs or command-line
4290 files are recognized in the interactive namespace by @who.
4295 files are recognized in the interactive namespace by @who.
4291
4296
4292 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4297 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4293 log replay system stemming from the string form of Structs.
4298 log replay system stemming from the string form of Structs.
4294
4299
4295 * IPython/Magic.py (Macro.__init__): improved macros to properly
4300 * IPython/Magic.py (Macro.__init__): improved macros to properly
4296 handle magic commands in them.
4301 handle magic commands in them.
4297 (Magic.magic_logstart): usernames are now expanded so 'logstart
4302 (Magic.magic_logstart): usernames are now expanded so 'logstart
4298 ~/mylog' now works.
4303 ~/mylog' now works.
4299
4304
4300 * IPython/iplib.py (complete): fixed bug where paths starting with
4305 * IPython/iplib.py (complete): fixed bug where paths starting with
4301 '/' would be completed as magic names.
4306 '/' would be completed as magic names.
4302
4307
4303 2002-05-04 Fernando Perez <fperez@colorado.edu>
4308 2002-05-04 Fernando Perez <fperez@colorado.edu>
4304
4309
4305 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4310 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4306 allow running full programs under the profiler's control.
4311 allow running full programs under the profiler's control.
4307
4312
4308 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4313 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4309 mode to report exceptions verbosely but without formatting
4314 mode to report exceptions verbosely but without formatting
4310 variables. This addresses the issue of ipython 'freezing' (it's
4315 variables. This addresses the issue of ipython 'freezing' (it's
4311 not frozen, but caught in an expensive formatting loop) when huge
4316 not frozen, but caught in an expensive formatting loop) when huge
4312 variables are in the context of an exception.
4317 variables are in the context of an exception.
4313 (VerboseTB.text): Added '--->' markers at line where exception was
4318 (VerboseTB.text): Added '--->' markers at line where exception was
4314 triggered. Much clearer to read, especially in NoColor modes.
4319 triggered. Much clearer to read, especially in NoColor modes.
4315
4320
4316 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4321 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4317 implemented in reverse when changing to the new parse_options().
4322 implemented in reverse when changing to the new parse_options().
4318
4323
4319 2002-05-03 Fernando Perez <fperez@colorado.edu>
4324 2002-05-03 Fernando Perez <fperez@colorado.edu>
4320
4325
4321 * IPython/Magic.py (Magic.parse_options): new function so that
4326 * IPython/Magic.py (Magic.parse_options): new function so that
4322 magics can parse options easier.
4327 magics can parse options easier.
4323 (Magic.magic_prun): new function similar to profile.run(),
4328 (Magic.magic_prun): new function similar to profile.run(),
4324 suggested by Chris Hart.
4329 suggested by Chris Hart.
4325 (Magic.magic_cd): fixed behavior so that it only changes if
4330 (Magic.magic_cd): fixed behavior so that it only changes if
4326 directory actually is in history.
4331 directory actually is in history.
4327
4332
4328 * IPython/usage.py (__doc__): added information about potential
4333 * IPython/usage.py (__doc__): added information about potential
4329 slowness of Verbose exception mode when there are huge data
4334 slowness of Verbose exception mode when there are huge data
4330 structures to be formatted (thanks to Archie Paulson).
4335 structures to be formatted (thanks to Archie Paulson).
4331
4336
4332 * IPython/ipmaker.py (make_IPython): Changed default logging
4337 * IPython/ipmaker.py (make_IPython): Changed default logging
4333 (when simply called with -log) to use curr_dir/ipython.log in
4338 (when simply called with -log) to use curr_dir/ipython.log in
4334 rotate mode. Fixed crash which was occuring with -log before
4339 rotate mode. Fixed crash which was occuring with -log before
4335 (thanks to Jim Boyle).
4340 (thanks to Jim Boyle).
4336
4341
4337 2002-05-01 Fernando Perez <fperez@colorado.edu>
4342 2002-05-01 Fernando Perez <fperez@colorado.edu>
4338
4343
4339 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4344 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4340 was nasty -- though somewhat of a corner case).
4345 was nasty -- though somewhat of a corner case).
4341
4346
4342 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4347 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4343 text (was a bug).
4348 text (was a bug).
4344
4349
4345 2002-04-30 Fernando Perez <fperez@colorado.edu>
4350 2002-04-30 Fernando Perez <fperez@colorado.edu>
4346
4351
4347 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4352 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4348 a print after ^D or ^C from the user so that the In[] prompt
4353 a print after ^D or ^C from the user so that the In[] prompt
4349 doesn't over-run the gnuplot one.
4354 doesn't over-run the gnuplot one.
4350
4355
4351 2002-04-29 Fernando Perez <fperez@colorado.edu>
4356 2002-04-29 Fernando Perez <fperez@colorado.edu>
4352
4357
4353 * Released 0.2.10
4358 * Released 0.2.10
4354
4359
4355 * IPython/__release__.py (version): get date dynamically.
4360 * IPython/__release__.py (version): get date dynamically.
4356
4361
4357 * Misc. documentation updates thanks to Arnd's comments. Also ran
4362 * Misc. documentation updates thanks to Arnd's comments. Also ran
4358 a full spellcheck on the manual (hadn't been done in a while).
4363 a full spellcheck on the manual (hadn't been done in a while).
4359
4364
4360 2002-04-27 Fernando Perez <fperez@colorado.edu>
4365 2002-04-27 Fernando Perez <fperez@colorado.edu>
4361
4366
4362 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4367 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4363 starting a log in mid-session would reset the input history list.
4368 starting a log in mid-session would reset the input history list.
4364
4369
4365 2002-04-26 Fernando Perez <fperez@colorado.edu>
4370 2002-04-26 Fernando Perez <fperez@colorado.edu>
4366
4371
4367 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4372 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4368 all files were being included in an update. Now anything in
4373 all files were being included in an update. Now anything in
4369 UserConfig that matches [A-Za-z]*.py will go (this excludes
4374 UserConfig that matches [A-Za-z]*.py will go (this excludes
4370 __init__.py)
4375 __init__.py)
4371
4376
4372 2002-04-25 Fernando Perez <fperez@colorado.edu>
4377 2002-04-25 Fernando Perez <fperez@colorado.edu>
4373
4378
4374 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4379 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4375 to __builtins__ so that any form of embedded or imported code can
4380 to __builtins__ so that any form of embedded or imported code can
4376 test for being inside IPython.
4381 test for being inside IPython.
4377
4382
4378 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4383 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4379 changed to GnuplotMagic because it's now an importable module,
4384 changed to GnuplotMagic because it's now an importable module,
4380 this makes the name follow that of the standard Gnuplot module.
4385 this makes the name follow that of the standard Gnuplot module.
4381 GnuplotMagic can now be loaded at any time in mid-session.
4386 GnuplotMagic can now be loaded at any time in mid-session.
4382
4387
4383 2002-04-24 Fernando Perez <fperez@colorado.edu>
4388 2002-04-24 Fernando Perez <fperez@colorado.edu>
4384
4389
4385 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4390 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4386 the globals (IPython has its own namespace) and the
4391 the globals (IPython has its own namespace) and the
4387 PhysicalQuantity stuff is much better anyway.
4392 PhysicalQuantity stuff is much better anyway.
4388
4393
4389 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4394 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4390 embedding example to standard user directory for
4395 embedding example to standard user directory for
4391 distribution. Also put it in the manual.
4396 distribution. Also put it in the manual.
4392
4397
4393 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4398 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4394 instance as first argument (so it doesn't rely on some obscure
4399 instance as first argument (so it doesn't rely on some obscure
4395 hidden global).
4400 hidden global).
4396
4401
4397 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4402 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4398 delimiters. While it prevents ().TAB from working, it allows
4403 delimiters. While it prevents ().TAB from working, it allows
4399 completions in open (... expressions. This is by far a more common
4404 completions in open (... expressions. This is by far a more common
4400 case.
4405 case.
4401
4406
4402 2002-04-23 Fernando Perez <fperez@colorado.edu>
4407 2002-04-23 Fernando Perez <fperez@colorado.edu>
4403
4408
4404 * IPython/Extensions/InterpreterPasteInput.py: new
4409 * IPython/Extensions/InterpreterPasteInput.py: new
4405 syntax-processing module for pasting lines with >>> or ... at the
4410 syntax-processing module for pasting lines with >>> or ... at the
4406 start.
4411 start.
4407
4412
4408 * IPython/Extensions/PhysicalQ_Interactive.py
4413 * IPython/Extensions/PhysicalQ_Interactive.py
4409 (PhysicalQuantityInteractive.__int__): fixed to work with either
4414 (PhysicalQuantityInteractive.__int__): fixed to work with either
4410 Numeric or math.
4415 Numeric or math.
4411
4416
4412 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4417 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4413 provided profiles. Now we have:
4418 provided profiles. Now we have:
4414 -math -> math module as * and cmath with its own namespace.
4419 -math -> math module as * and cmath with its own namespace.
4415 -numeric -> Numeric as *, plus gnuplot & grace
4420 -numeric -> Numeric as *, plus gnuplot & grace
4416 -physics -> same as before
4421 -physics -> same as before
4417
4422
4418 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4423 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4419 user-defined magics wouldn't be found by @magic if they were
4424 user-defined magics wouldn't be found by @magic if they were
4420 defined as class methods. Also cleaned up the namespace search
4425 defined as class methods. Also cleaned up the namespace search
4421 logic and the string building (to use %s instead of many repeated
4426 logic and the string building (to use %s instead of many repeated
4422 string adds).
4427 string adds).
4423
4428
4424 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4429 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4425 of user-defined magics to operate with class methods (cleaner, in
4430 of user-defined magics to operate with class methods (cleaner, in
4426 line with the gnuplot code).
4431 line with the gnuplot code).
4427
4432
4428 2002-04-22 Fernando Perez <fperez@colorado.edu>
4433 2002-04-22 Fernando Perez <fperez@colorado.edu>
4429
4434
4430 * setup.py: updated dependency list so that manual is updated when
4435 * setup.py: updated dependency list so that manual is updated when
4431 all included files change.
4436 all included files change.
4432
4437
4433 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4438 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4434 the delimiter removal option (the fix is ugly right now).
4439 the delimiter removal option (the fix is ugly right now).
4435
4440
4436 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4441 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4437 all of the math profile (quicker loading, no conflict between
4442 all of the math profile (quicker loading, no conflict between
4438 g-9.8 and g-gnuplot).
4443 g-9.8 and g-gnuplot).
4439
4444
4440 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4445 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4441 name of post-mortem files to IPython_crash_report.txt.
4446 name of post-mortem files to IPython_crash_report.txt.
4442
4447
4443 * Cleanup/update of the docs. Added all the new readline info and
4448 * Cleanup/update of the docs. Added all the new readline info and
4444 formatted all lists as 'real lists'.
4449 formatted all lists as 'real lists'.
4445
4450
4446 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4451 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4447 tab-completion options, since the full readline parse_and_bind is
4452 tab-completion options, since the full readline parse_and_bind is
4448 now accessible.
4453 now accessible.
4449
4454
4450 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4455 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4451 handling of readline options. Now users can specify any string to
4456 handling of readline options. Now users can specify any string to
4452 be passed to parse_and_bind(), as well as the delimiters to be
4457 be passed to parse_and_bind(), as well as the delimiters to be
4453 removed.
4458 removed.
4454 (InteractiveShell.__init__): Added __name__ to the global
4459 (InteractiveShell.__init__): Added __name__ to the global
4455 namespace so that things like Itpl which rely on its existence
4460 namespace so that things like Itpl which rely on its existence
4456 don't crash.
4461 don't crash.
4457 (InteractiveShell._prefilter): Defined the default with a _ so
4462 (InteractiveShell._prefilter): Defined the default with a _ so
4458 that prefilter() is easier to override, while the default one
4463 that prefilter() is easier to override, while the default one
4459 remains available.
4464 remains available.
4460
4465
4461 2002-04-18 Fernando Perez <fperez@colorado.edu>
4466 2002-04-18 Fernando Perez <fperez@colorado.edu>
4462
4467
4463 * Added information about pdb in the docs.
4468 * Added information about pdb in the docs.
4464
4469
4465 2002-04-17 Fernando Perez <fperez@colorado.edu>
4470 2002-04-17 Fernando Perez <fperez@colorado.edu>
4466
4471
4467 * IPython/ipmaker.py (make_IPython): added rc_override option to
4472 * IPython/ipmaker.py (make_IPython): added rc_override option to
4468 allow passing config options at creation time which may override
4473 allow passing config options at creation time which may override
4469 anything set in the config files or command line. This is
4474 anything set in the config files or command line. This is
4470 particularly useful for configuring embedded instances.
4475 particularly useful for configuring embedded instances.
4471
4476
4472 2002-04-15 Fernando Perez <fperez@colorado.edu>
4477 2002-04-15 Fernando Perez <fperez@colorado.edu>
4473
4478
4474 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4479 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4475 crash embedded instances because of the input cache falling out of
4480 crash embedded instances because of the input cache falling out of
4476 sync with the output counter.
4481 sync with the output counter.
4477
4482
4478 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4483 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4479 mode which calls pdb after an uncaught exception in IPython itself.
4484 mode which calls pdb after an uncaught exception in IPython itself.
4480
4485
4481 2002-04-14 Fernando Perez <fperez@colorado.edu>
4486 2002-04-14 Fernando Perez <fperez@colorado.edu>
4482
4487
4483 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4488 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4484 readline, fix it back after each call.
4489 readline, fix it back after each call.
4485
4490
4486 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4491 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4487 method to force all access via __call__(), which guarantees that
4492 method to force all access via __call__(), which guarantees that
4488 traceback references are properly deleted.
4493 traceback references are properly deleted.
4489
4494
4490 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4495 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4491 improve printing when pprint is in use.
4496 improve printing when pprint is in use.
4492
4497
4493 2002-04-13 Fernando Perez <fperez@colorado.edu>
4498 2002-04-13 Fernando Perez <fperez@colorado.edu>
4494
4499
4495 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4500 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4496 exceptions aren't caught anymore. If the user triggers one, he
4501 exceptions aren't caught anymore. If the user triggers one, he
4497 should know why he's doing it and it should go all the way up,
4502 should know why he's doing it and it should go all the way up,
4498 just like any other exception. So now @abort will fully kill the
4503 just like any other exception. So now @abort will fully kill the
4499 embedded interpreter and the embedding code (unless that happens
4504 embedded interpreter and the embedding code (unless that happens
4500 to catch SystemExit).
4505 to catch SystemExit).
4501
4506
4502 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4507 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4503 and a debugger() method to invoke the interactive pdb debugger
4508 and a debugger() method to invoke the interactive pdb debugger
4504 after printing exception information. Also added the corresponding
4509 after printing exception information. Also added the corresponding
4505 -pdb option and @pdb magic to control this feature, and updated
4510 -pdb option and @pdb magic to control this feature, and updated
4506 the docs. After a suggestion from Christopher Hart
4511 the docs. After a suggestion from Christopher Hart
4507 (hart-AT-caltech.edu).
4512 (hart-AT-caltech.edu).
4508
4513
4509 2002-04-12 Fernando Perez <fperez@colorado.edu>
4514 2002-04-12 Fernando Perez <fperez@colorado.edu>
4510
4515
4511 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4516 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4512 the exception handlers defined by the user (not the CrashHandler)
4517 the exception handlers defined by the user (not the CrashHandler)
4513 so that user exceptions don't trigger an ipython bug report.
4518 so that user exceptions don't trigger an ipython bug report.
4514
4519
4515 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4520 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4516 configurable (it should have always been so).
4521 configurable (it should have always been so).
4517
4522
4518 2002-03-26 Fernando Perez <fperez@colorado.edu>
4523 2002-03-26 Fernando Perez <fperez@colorado.edu>
4519
4524
4520 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4525 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4521 and there to fix embedding namespace issues. This should all be
4526 and there to fix embedding namespace issues. This should all be
4522 done in a more elegant way.
4527 done in a more elegant way.
4523
4528
4524 2002-03-25 Fernando Perez <fperez@colorado.edu>
4529 2002-03-25 Fernando Perez <fperez@colorado.edu>
4525
4530
4526 * IPython/genutils.py (get_home_dir): Try to make it work under
4531 * IPython/genutils.py (get_home_dir): Try to make it work under
4527 win9x also.
4532 win9x also.
4528
4533
4529 2002-03-20 Fernando Perez <fperez@colorado.edu>
4534 2002-03-20 Fernando Perez <fperez@colorado.edu>
4530
4535
4531 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4536 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4532 sys.displayhook untouched upon __init__.
4537 sys.displayhook untouched upon __init__.
4533
4538
4534 2002-03-19 Fernando Perez <fperez@colorado.edu>
4539 2002-03-19 Fernando Perez <fperez@colorado.edu>
4535
4540
4536 * Released 0.2.9 (for embedding bug, basically).
4541 * Released 0.2.9 (for embedding bug, basically).
4537
4542
4538 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4543 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4539 exceptions so that enclosing shell's state can be restored.
4544 exceptions so that enclosing shell's state can be restored.
4540
4545
4541 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4546 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4542 naming conventions in the .ipython/ dir.
4547 naming conventions in the .ipython/ dir.
4543
4548
4544 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4549 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4545 from delimiters list so filenames with - in them get expanded.
4550 from delimiters list so filenames with - in them get expanded.
4546
4551
4547 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4552 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4548 sys.displayhook not being properly restored after an embedded call.
4553 sys.displayhook not being properly restored after an embedded call.
4549
4554
4550 2002-03-18 Fernando Perez <fperez@colorado.edu>
4555 2002-03-18 Fernando Perez <fperez@colorado.edu>
4551
4556
4552 * Released 0.2.8
4557 * Released 0.2.8
4553
4558
4554 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4559 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4555 some files weren't being included in a -upgrade.
4560 some files weren't being included in a -upgrade.
4556 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4561 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4557 on' so that the first tab completes.
4562 on' so that the first tab completes.
4558 (InteractiveShell.handle_magic): fixed bug with spaces around
4563 (InteractiveShell.handle_magic): fixed bug with spaces around
4559 quotes breaking many magic commands.
4564 quotes breaking many magic commands.
4560
4565
4561 * setup.py: added note about ignoring the syntax error messages at
4566 * setup.py: added note about ignoring the syntax error messages at
4562 installation.
4567 installation.
4563
4568
4564 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4569 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4565 streamlining the gnuplot interface, now there's only one magic @gp.
4570 streamlining the gnuplot interface, now there's only one magic @gp.
4566
4571
4567 2002-03-17 Fernando Perez <fperez@colorado.edu>
4572 2002-03-17 Fernando Perez <fperez@colorado.edu>
4568
4573
4569 * IPython/UserConfig/magic_gnuplot.py: new name for the
4574 * IPython/UserConfig/magic_gnuplot.py: new name for the
4570 example-magic_pm.py file. Much enhanced system, now with a shell
4575 example-magic_pm.py file. Much enhanced system, now with a shell
4571 for communicating directly with gnuplot, one command at a time.
4576 for communicating directly with gnuplot, one command at a time.
4572
4577
4573 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4578 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4574 setting __name__=='__main__'.
4579 setting __name__=='__main__'.
4575
4580
4576 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4581 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4577 mini-shell for accessing gnuplot from inside ipython. Should
4582 mini-shell for accessing gnuplot from inside ipython. Should
4578 extend it later for grace access too. Inspired by Arnd's
4583 extend it later for grace access too. Inspired by Arnd's
4579 suggestion.
4584 suggestion.
4580
4585
4581 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4586 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4582 calling magic functions with () in their arguments. Thanks to Arnd
4587 calling magic functions with () in their arguments. Thanks to Arnd
4583 Baecker for pointing this to me.
4588 Baecker for pointing this to me.
4584
4589
4585 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4590 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4586 infinitely for integer or complex arrays (only worked with floats).
4591 infinitely for integer or complex arrays (only worked with floats).
4587
4592
4588 2002-03-16 Fernando Perez <fperez@colorado.edu>
4593 2002-03-16 Fernando Perez <fperez@colorado.edu>
4589
4594
4590 * setup.py: Merged setup and setup_windows into a single script
4595 * setup.py: Merged setup and setup_windows into a single script
4591 which properly handles things for windows users.
4596 which properly handles things for windows users.
4592
4597
4593 2002-03-15 Fernando Perez <fperez@colorado.edu>
4598 2002-03-15 Fernando Perez <fperez@colorado.edu>
4594
4599
4595 * Big change to the manual: now the magics are all automatically
4600 * Big change to the manual: now the magics are all automatically
4596 documented. This information is generated from their docstrings
4601 documented. This information is generated from their docstrings
4597 and put in a latex file included by the manual lyx file. This way
4602 and put in a latex file included by the manual lyx file. This way
4598 we get always up to date information for the magics. The manual
4603 we get always up to date information for the magics. The manual
4599 now also has proper version information, also auto-synced.
4604 now also has proper version information, also auto-synced.
4600
4605
4601 For this to work, an undocumented --magic_docstrings option was added.
4606 For this to work, an undocumented --magic_docstrings option was added.
4602
4607
4603 2002-03-13 Fernando Perez <fperez@colorado.edu>
4608 2002-03-13 Fernando Perez <fperez@colorado.edu>
4604
4609
4605 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4610 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4606 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4611 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4607
4612
4608 2002-03-12 Fernando Perez <fperez@colorado.edu>
4613 2002-03-12 Fernando Perez <fperez@colorado.edu>
4609
4614
4610 * IPython/ultraTB.py (TermColors): changed color escapes again to
4615 * IPython/ultraTB.py (TermColors): changed color escapes again to
4611 fix the (old, reintroduced) line-wrapping bug. Basically, if
4616 fix the (old, reintroduced) line-wrapping bug. Basically, if
4612 \001..\002 aren't given in the color escapes, lines get wrapped
4617 \001..\002 aren't given in the color escapes, lines get wrapped
4613 weirdly. But giving those screws up old xterms and emacs terms. So
4618 weirdly. But giving those screws up old xterms and emacs terms. So
4614 I added some logic for emacs terms to be ok, but I can't identify old
4619 I added some logic for emacs terms to be ok, but I can't identify old
4615 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4620 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4616
4621
4617 2002-03-10 Fernando Perez <fperez@colorado.edu>
4622 2002-03-10 Fernando Perez <fperez@colorado.edu>
4618
4623
4619 * IPython/usage.py (__doc__): Various documentation cleanups and
4624 * IPython/usage.py (__doc__): Various documentation cleanups and
4620 updates, both in usage docstrings and in the manual.
4625 updates, both in usage docstrings and in the manual.
4621
4626
4622 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4627 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4623 handling of caching. Set minimum acceptabe value for having a
4628 handling of caching. Set minimum acceptabe value for having a
4624 cache at 20 values.
4629 cache at 20 values.
4625
4630
4626 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4631 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4627 install_first_time function to a method, renamed it and added an
4632 install_first_time function to a method, renamed it and added an
4628 'upgrade' mode. Now people can update their config directory with
4633 'upgrade' mode. Now people can update their config directory with
4629 a simple command line switch (-upgrade, also new).
4634 a simple command line switch (-upgrade, also new).
4630
4635
4631 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4636 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4632 @file (convenient for automagic users under Python >= 2.2).
4637 @file (convenient for automagic users under Python >= 2.2).
4633 Removed @files (it seemed more like a plural than an abbrev. of
4638 Removed @files (it seemed more like a plural than an abbrev. of
4634 'file show').
4639 'file show').
4635
4640
4636 * IPython/iplib.py (install_first_time): Fixed crash if there were
4641 * IPython/iplib.py (install_first_time): Fixed crash if there were
4637 backup files ('~') in .ipython/ install directory.
4642 backup files ('~') in .ipython/ install directory.
4638
4643
4639 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4644 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4640 system. Things look fine, but these changes are fairly
4645 system. Things look fine, but these changes are fairly
4641 intrusive. Test them for a few days.
4646 intrusive. Test them for a few days.
4642
4647
4643 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4648 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4644 the prompts system. Now all in/out prompt strings are user
4649 the prompts system. Now all in/out prompt strings are user
4645 controllable. This is particularly useful for embedding, as one
4650 controllable. This is particularly useful for embedding, as one
4646 can tag embedded instances with particular prompts.
4651 can tag embedded instances with particular prompts.
4647
4652
4648 Also removed global use of sys.ps1/2, which now allows nested
4653 Also removed global use of sys.ps1/2, which now allows nested
4649 embeddings without any problems. Added command-line options for
4654 embeddings without any problems. Added command-line options for
4650 the prompt strings.
4655 the prompt strings.
4651
4656
4652 2002-03-08 Fernando Perez <fperez@colorado.edu>
4657 2002-03-08 Fernando Perez <fperez@colorado.edu>
4653
4658
4654 * IPython/UserConfig/example-embed-short.py (ipshell): added
4659 * IPython/UserConfig/example-embed-short.py (ipshell): added
4655 example file with the bare minimum code for embedding.
4660 example file with the bare minimum code for embedding.
4656
4661
4657 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4662 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4658 functionality for the embeddable shell to be activated/deactivated
4663 functionality for the embeddable shell to be activated/deactivated
4659 either globally or at each call.
4664 either globally or at each call.
4660
4665
4661 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4666 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4662 rewriting the prompt with '--->' for auto-inputs with proper
4667 rewriting the prompt with '--->' for auto-inputs with proper
4663 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4668 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4664 this is handled by the prompts class itself, as it should.
4669 this is handled by the prompts class itself, as it should.
4665
4670
4666 2002-03-05 Fernando Perez <fperez@colorado.edu>
4671 2002-03-05 Fernando Perez <fperez@colorado.edu>
4667
4672
4668 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4673 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4669 @logstart to avoid name clashes with the math log function.
4674 @logstart to avoid name clashes with the math log function.
4670
4675
4671 * Big updates to X/Emacs section of the manual.
4676 * Big updates to X/Emacs section of the manual.
4672
4677
4673 * Removed ipython_emacs. Milan explained to me how to pass
4678 * Removed ipython_emacs. Milan explained to me how to pass
4674 arguments to ipython through Emacs. Some day I'm going to end up
4679 arguments to ipython through Emacs. Some day I'm going to end up
4675 learning some lisp...
4680 learning some lisp...
4676
4681
4677 2002-03-04 Fernando Perez <fperez@colorado.edu>
4682 2002-03-04 Fernando Perez <fperez@colorado.edu>
4678
4683
4679 * IPython/ipython_emacs: Created script to be used as the
4684 * IPython/ipython_emacs: Created script to be used as the
4680 py-python-command Emacs variable so we can pass IPython
4685 py-python-command Emacs variable so we can pass IPython
4681 parameters. I can't figure out how to tell Emacs directly to pass
4686 parameters. I can't figure out how to tell Emacs directly to pass
4682 parameters to IPython, so a dummy shell script will do it.
4687 parameters to IPython, so a dummy shell script will do it.
4683
4688
4684 Other enhancements made for things to work better under Emacs'
4689 Other enhancements made for things to work better under Emacs'
4685 various types of terminals. Many thanks to Milan Zamazal
4690 various types of terminals. Many thanks to Milan Zamazal
4686 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4691 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4687
4692
4688 2002-03-01 Fernando Perez <fperez@colorado.edu>
4693 2002-03-01 Fernando Perez <fperez@colorado.edu>
4689
4694
4690 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4695 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4691 that loading of readline is now optional. This gives better
4696 that loading of readline is now optional. This gives better
4692 control to emacs users.
4697 control to emacs users.
4693
4698
4694 * IPython/ultraTB.py (__date__): Modified color escape sequences
4699 * IPython/ultraTB.py (__date__): Modified color escape sequences
4695 and now things work fine under xterm and in Emacs' term buffers
4700 and now things work fine under xterm and in Emacs' term buffers
4696 (though not shell ones). Well, in emacs you get colors, but all
4701 (though not shell ones). Well, in emacs you get colors, but all
4697 seem to be 'light' colors (no difference between dark and light
4702 seem to be 'light' colors (no difference between dark and light
4698 ones). But the garbage chars are gone, and also in xterms. It
4703 ones). But the garbage chars are gone, and also in xterms. It
4699 seems that now I'm using 'cleaner' ansi sequences.
4704 seems that now I'm using 'cleaner' ansi sequences.
4700
4705
4701 2002-02-21 Fernando Perez <fperez@colorado.edu>
4706 2002-02-21 Fernando Perez <fperez@colorado.edu>
4702
4707
4703 * Released 0.2.7 (mainly to publish the scoping fix).
4708 * Released 0.2.7 (mainly to publish the scoping fix).
4704
4709
4705 * IPython/Logger.py (Logger.logstate): added. A corresponding
4710 * IPython/Logger.py (Logger.logstate): added. A corresponding
4706 @logstate magic was created.
4711 @logstate magic was created.
4707
4712
4708 * IPython/Magic.py: fixed nested scoping problem under Python
4713 * IPython/Magic.py: fixed nested scoping problem under Python
4709 2.1.x (automagic wasn't working).
4714 2.1.x (automagic wasn't working).
4710
4715
4711 2002-02-20 Fernando Perez <fperez@colorado.edu>
4716 2002-02-20 Fernando Perez <fperez@colorado.edu>
4712
4717
4713 * Released 0.2.6.
4718 * Released 0.2.6.
4714
4719
4715 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4720 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4716 option so that logs can come out without any headers at all.
4721 option so that logs can come out without any headers at all.
4717
4722
4718 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4723 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4719 SciPy.
4724 SciPy.
4720
4725
4721 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4726 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4722 that embedded IPython calls don't require vars() to be explicitly
4727 that embedded IPython calls don't require vars() to be explicitly
4723 passed. Now they are extracted from the caller's frame (code
4728 passed. Now they are extracted from the caller's frame (code
4724 snatched from Eric Jones' weave). Added better documentation to
4729 snatched from Eric Jones' weave). Added better documentation to
4725 the section on embedding and the example file.
4730 the section on embedding and the example file.
4726
4731
4727 * IPython/genutils.py (page): Changed so that under emacs, it just
4732 * IPython/genutils.py (page): Changed so that under emacs, it just
4728 prints the string. You can then page up and down in the emacs
4733 prints the string. You can then page up and down in the emacs
4729 buffer itself. This is how the builtin help() works.
4734 buffer itself. This is how the builtin help() works.
4730
4735
4731 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4736 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4732 macro scoping: macros need to be executed in the user's namespace
4737 macro scoping: macros need to be executed in the user's namespace
4733 to work as if they had been typed by the user.
4738 to work as if they had been typed by the user.
4734
4739
4735 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4740 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4736 execute automatically (no need to type 'exec...'). They then
4741 execute automatically (no need to type 'exec...'). They then
4737 behave like 'true macros'. The printing system was also modified
4742 behave like 'true macros'. The printing system was also modified
4738 for this to work.
4743 for this to work.
4739
4744
4740 2002-02-19 Fernando Perez <fperez@colorado.edu>
4745 2002-02-19 Fernando Perez <fperez@colorado.edu>
4741
4746
4742 * IPython/genutils.py (page_file): new function for paging files
4747 * IPython/genutils.py (page_file): new function for paging files
4743 in an OS-independent way. Also necessary for file viewing to work
4748 in an OS-independent way. Also necessary for file viewing to work
4744 well inside Emacs buffers.
4749 well inside Emacs buffers.
4745 (page): Added checks for being in an emacs buffer.
4750 (page): Added checks for being in an emacs buffer.
4746 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4751 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4747 same bug in iplib.
4752 same bug in iplib.
4748
4753
4749 2002-02-18 Fernando Perez <fperez@colorado.edu>
4754 2002-02-18 Fernando Perez <fperez@colorado.edu>
4750
4755
4751 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4756 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4752 of readline so that IPython can work inside an Emacs buffer.
4757 of readline so that IPython can work inside an Emacs buffer.
4753
4758
4754 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4759 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4755 method signatures (they weren't really bugs, but it looks cleaner
4760 method signatures (they weren't really bugs, but it looks cleaner
4756 and keeps PyChecker happy).
4761 and keeps PyChecker happy).
4757
4762
4758 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4763 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4759 for implementing various user-defined hooks. Currently only
4764 for implementing various user-defined hooks. Currently only
4760 display is done.
4765 display is done.
4761
4766
4762 * IPython/Prompts.py (CachedOutput._display): changed display
4767 * IPython/Prompts.py (CachedOutput._display): changed display
4763 functions so that they can be dynamically changed by users easily.
4768 functions so that they can be dynamically changed by users easily.
4764
4769
4765 * IPython/Extensions/numeric_formats.py (num_display): added an
4770 * IPython/Extensions/numeric_formats.py (num_display): added an
4766 extension for printing NumPy arrays in flexible manners. It
4771 extension for printing NumPy arrays in flexible manners. It
4767 doesn't do anything yet, but all the structure is in
4772 doesn't do anything yet, but all the structure is in
4768 place. Ultimately the plan is to implement output format control
4773 place. Ultimately the plan is to implement output format control
4769 like in Octave.
4774 like in Octave.
4770
4775
4771 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4776 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4772 methods are found at run-time by all the automatic machinery.
4777 methods are found at run-time by all the automatic machinery.
4773
4778
4774 2002-02-17 Fernando Perez <fperez@colorado.edu>
4779 2002-02-17 Fernando Perez <fperez@colorado.edu>
4775
4780
4776 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4781 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4777 whole file a little.
4782 whole file a little.
4778
4783
4779 * ToDo: closed this document. Now there's a new_design.lyx
4784 * ToDo: closed this document. Now there's a new_design.lyx
4780 document for all new ideas. Added making a pdf of it for the
4785 document for all new ideas. Added making a pdf of it for the
4781 end-user distro.
4786 end-user distro.
4782
4787
4783 * IPython/Logger.py (Logger.switch_log): Created this to replace
4788 * IPython/Logger.py (Logger.switch_log): Created this to replace
4784 logon() and logoff(). It also fixes a nasty crash reported by
4789 logon() and logoff(). It also fixes a nasty crash reported by
4785 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4790 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4786
4791
4787 * IPython/iplib.py (complete): got auto-completion to work with
4792 * IPython/iplib.py (complete): got auto-completion to work with
4788 automagic (I had wanted this for a long time).
4793 automagic (I had wanted this for a long time).
4789
4794
4790 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4795 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4791 to @file, since file() is now a builtin and clashes with automagic
4796 to @file, since file() is now a builtin and clashes with automagic
4792 for @file.
4797 for @file.
4793
4798
4794 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4799 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4795 of this was previously in iplib, which had grown to more than 2000
4800 of this was previously in iplib, which had grown to more than 2000
4796 lines, way too long. No new functionality, but it makes managing
4801 lines, way too long. No new functionality, but it makes managing
4797 the code a bit easier.
4802 the code a bit easier.
4798
4803
4799 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4804 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4800 information to crash reports.
4805 information to crash reports.
4801
4806
4802 2002-02-12 Fernando Perez <fperez@colorado.edu>
4807 2002-02-12 Fernando Perez <fperez@colorado.edu>
4803
4808
4804 * Released 0.2.5.
4809 * Released 0.2.5.
4805
4810
4806 2002-02-11 Fernando Perez <fperez@colorado.edu>
4811 2002-02-11 Fernando Perez <fperez@colorado.edu>
4807
4812
4808 * Wrote a relatively complete Windows installer. It puts
4813 * Wrote a relatively complete Windows installer. It puts
4809 everything in place, creates Start Menu entries and fixes the
4814 everything in place, creates Start Menu entries and fixes the
4810 color issues. Nothing fancy, but it works.
4815 color issues. Nothing fancy, but it works.
4811
4816
4812 2002-02-10 Fernando Perez <fperez@colorado.edu>
4817 2002-02-10 Fernando Perez <fperez@colorado.edu>
4813
4818
4814 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4819 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4815 os.path.expanduser() call so that we can type @run ~/myfile.py and
4820 os.path.expanduser() call so that we can type @run ~/myfile.py and
4816 have thigs work as expected.
4821 have thigs work as expected.
4817
4822
4818 * IPython/genutils.py (page): fixed exception handling so things
4823 * IPython/genutils.py (page): fixed exception handling so things
4819 work both in Unix and Windows correctly. Quitting a pager triggers
4824 work both in Unix and Windows correctly. Quitting a pager triggers
4820 an IOError/broken pipe in Unix, and in windows not finding a pager
4825 an IOError/broken pipe in Unix, and in windows not finding a pager
4821 is also an IOError, so I had to actually look at the return value
4826 is also an IOError, so I had to actually look at the return value
4822 of the exception, not just the exception itself. Should be ok now.
4827 of the exception, not just the exception itself. Should be ok now.
4823
4828
4824 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4829 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4825 modified to allow case-insensitive color scheme changes.
4830 modified to allow case-insensitive color scheme changes.
4826
4831
4827 2002-02-09 Fernando Perez <fperez@colorado.edu>
4832 2002-02-09 Fernando Perez <fperez@colorado.edu>
4828
4833
4829 * IPython/genutils.py (native_line_ends): new function to leave
4834 * IPython/genutils.py (native_line_ends): new function to leave
4830 user config files with os-native line-endings.
4835 user config files with os-native line-endings.
4831
4836
4832 * README and manual updates.
4837 * README and manual updates.
4833
4838
4834 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4839 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4835 instead of StringType to catch Unicode strings.
4840 instead of StringType to catch Unicode strings.
4836
4841
4837 * IPython/genutils.py (filefind): fixed bug for paths with
4842 * IPython/genutils.py (filefind): fixed bug for paths with
4838 embedded spaces (very common in Windows).
4843 embedded spaces (very common in Windows).
4839
4844
4840 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4845 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4841 files under Windows, so that they get automatically associated
4846 files under Windows, so that they get automatically associated
4842 with a text editor. Windows makes it a pain to handle
4847 with a text editor. Windows makes it a pain to handle
4843 extension-less files.
4848 extension-less files.
4844
4849
4845 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4850 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4846 warning about readline only occur for Posix. In Windows there's no
4851 warning about readline only occur for Posix. In Windows there's no
4847 way to get readline, so why bother with the warning.
4852 way to get readline, so why bother with the warning.
4848
4853
4849 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4854 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4850 for __str__ instead of dir(self), since dir() changed in 2.2.
4855 for __str__ instead of dir(self), since dir() changed in 2.2.
4851
4856
4852 * Ported to Windows! Tested on XP, I suspect it should work fine
4857 * Ported to Windows! Tested on XP, I suspect it should work fine
4853 on NT/2000, but I don't think it will work on 98 et al. That
4858 on NT/2000, but I don't think it will work on 98 et al. That
4854 series of Windows is such a piece of junk anyway that I won't try
4859 series of Windows is such a piece of junk anyway that I won't try
4855 porting it there. The XP port was straightforward, showed a few
4860 porting it there. The XP port was straightforward, showed a few
4856 bugs here and there (fixed all), in particular some string
4861 bugs here and there (fixed all), in particular some string
4857 handling stuff which required considering Unicode strings (which
4862 handling stuff which required considering Unicode strings (which
4858 Windows uses). This is good, but hasn't been too tested :) No
4863 Windows uses). This is good, but hasn't been too tested :) No
4859 fancy installer yet, I'll put a note in the manual so people at
4864 fancy installer yet, I'll put a note in the manual so people at
4860 least make manually a shortcut.
4865 least make manually a shortcut.
4861
4866
4862 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4867 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4863 into a single one, "colors". This now controls both prompt and
4868 into a single one, "colors". This now controls both prompt and
4864 exception color schemes, and can be changed both at startup
4869 exception color schemes, and can be changed both at startup
4865 (either via command-line switches or via ipythonrc files) and at
4870 (either via command-line switches or via ipythonrc files) and at
4866 runtime, with @colors.
4871 runtime, with @colors.
4867 (Magic.magic_run): renamed @prun to @run and removed the old
4872 (Magic.magic_run): renamed @prun to @run and removed the old
4868 @run. The two were too similar to warrant keeping both.
4873 @run. The two were too similar to warrant keeping both.
4869
4874
4870 2002-02-03 Fernando Perez <fperez@colorado.edu>
4875 2002-02-03 Fernando Perez <fperez@colorado.edu>
4871
4876
4872 * IPython/iplib.py (install_first_time): Added comment on how to
4877 * IPython/iplib.py (install_first_time): Added comment on how to
4873 configure the color options for first-time users. Put a <return>
4878 configure the color options for first-time users. Put a <return>
4874 request at the end so that small-terminal users get a chance to
4879 request at the end so that small-terminal users get a chance to
4875 read the startup info.
4880 read the startup info.
4876
4881
4877 2002-01-23 Fernando Perez <fperez@colorado.edu>
4882 2002-01-23 Fernando Perez <fperez@colorado.edu>
4878
4883
4879 * IPython/iplib.py (CachedOutput.update): Changed output memory
4884 * IPython/iplib.py (CachedOutput.update): Changed output memory
4880 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4885 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4881 input history we still use _i. Did this b/c these variable are
4886 input history we still use _i. Did this b/c these variable are
4882 very commonly used in interactive work, so the less we need to
4887 very commonly used in interactive work, so the less we need to
4883 type the better off we are.
4888 type the better off we are.
4884 (Magic.magic_prun): updated @prun to better handle the namespaces
4889 (Magic.magic_prun): updated @prun to better handle the namespaces
4885 the file will run in, including a fix for __name__ not being set
4890 the file will run in, including a fix for __name__ not being set
4886 before.
4891 before.
4887
4892
4888 2002-01-20 Fernando Perez <fperez@colorado.edu>
4893 2002-01-20 Fernando Perez <fperez@colorado.edu>
4889
4894
4890 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4895 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4891 extra garbage for Python 2.2. Need to look more carefully into
4896 extra garbage for Python 2.2. Need to look more carefully into
4892 this later.
4897 this later.
4893
4898
4894 2002-01-19 Fernando Perez <fperez@colorado.edu>
4899 2002-01-19 Fernando Perez <fperez@colorado.edu>
4895
4900
4896 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4901 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4897 display SyntaxError exceptions properly formatted when they occur
4902 display SyntaxError exceptions properly formatted when they occur
4898 (they can be triggered by imported code).
4903 (they can be triggered by imported code).
4899
4904
4900 2002-01-18 Fernando Perez <fperez@colorado.edu>
4905 2002-01-18 Fernando Perez <fperez@colorado.edu>
4901
4906
4902 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4907 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4903 SyntaxError exceptions are reported nicely formatted, instead of
4908 SyntaxError exceptions are reported nicely formatted, instead of
4904 spitting out only offset information as before.
4909 spitting out only offset information as before.
4905 (Magic.magic_prun): Added the @prun function for executing
4910 (Magic.magic_prun): Added the @prun function for executing
4906 programs with command line args inside IPython.
4911 programs with command line args inside IPython.
4907
4912
4908 2002-01-16 Fernando Perez <fperez@colorado.edu>
4913 2002-01-16 Fernando Perez <fperez@colorado.edu>
4909
4914
4910 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4915 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
4911 to *not* include the last item given in a range. This brings their
4916 to *not* include the last item given in a range. This brings their
4912 behavior in line with Python's slicing:
4917 behavior in line with Python's slicing:
4913 a[n1:n2] -> a[n1]...a[n2-1]
4918 a[n1:n2] -> a[n1]...a[n2-1]
4914 It may be a bit less convenient, but I prefer to stick to Python's
4919 It may be a bit less convenient, but I prefer to stick to Python's
4915 conventions *everywhere*, so users never have to wonder.
4920 conventions *everywhere*, so users never have to wonder.
4916 (Magic.magic_macro): Added @macro function to ease the creation of
4921 (Magic.magic_macro): Added @macro function to ease the creation of
4917 macros.
4922 macros.
4918
4923
4919 2002-01-05 Fernando Perez <fperez@colorado.edu>
4924 2002-01-05 Fernando Perez <fperez@colorado.edu>
4920
4925
4921 * Released 0.2.4.
4926 * Released 0.2.4.
4922
4927
4923 * IPython/iplib.py (Magic.magic_pdef):
4928 * IPython/iplib.py (Magic.magic_pdef):
4924 (InteractiveShell.safe_execfile): report magic lines and error
4929 (InteractiveShell.safe_execfile): report magic lines and error
4925 lines without line numbers so one can easily copy/paste them for
4930 lines without line numbers so one can easily copy/paste them for
4926 re-execution.
4931 re-execution.
4927
4932
4928 * Updated manual with recent changes.
4933 * Updated manual with recent changes.
4929
4934
4930 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4935 * IPython/iplib.py (Magic.magic_oinfo): added constructor
4931 docstring printing when class? is called. Very handy for knowing
4936 docstring printing when class? is called. Very handy for knowing
4932 how to create class instances (as long as __init__ is well
4937 how to create class instances (as long as __init__ is well
4933 documented, of course :)
4938 documented, of course :)
4934 (Magic.magic_doc): print both class and constructor docstrings.
4939 (Magic.magic_doc): print both class and constructor docstrings.
4935 (Magic.magic_pdef): give constructor info if passed a class and
4940 (Magic.magic_pdef): give constructor info if passed a class and
4936 __call__ info for callable object instances.
4941 __call__ info for callable object instances.
4937
4942
4938 2002-01-04 Fernando Perez <fperez@colorado.edu>
4943 2002-01-04 Fernando Perez <fperez@colorado.edu>
4939
4944
4940 * Made deep_reload() off by default. It doesn't always work
4945 * Made deep_reload() off by default. It doesn't always work
4941 exactly as intended, so it's probably safer to have it off. It's
4946 exactly as intended, so it's probably safer to have it off. It's
4942 still available as dreload() anyway, so nothing is lost.
4947 still available as dreload() anyway, so nothing is lost.
4943
4948
4944 2002-01-02 Fernando Perez <fperez@colorado.edu>
4949 2002-01-02 Fernando Perez <fperez@colorado.edu>
4945
4950
4946 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4951 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
4947 so I wanted an updated release).
4952 so I wanted an updated release).
4948
4953
4949 2001-12-27 Fernando Perez <fperez@colorado.edu>
4954 2001-12-27 Fernando Perez <fperez@colorado.edu>
4950
4955
4951 * IPython/iplib.py (InteractiveShell.interact): Added the original
4956 * IPython/iplib.py (InteractiveShell.interact): Added the original
4952 code from 'code.py' for this module in order to change the
4957 code from 'code.py' for this module in order to change the
4953 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4958 handling of a KeyboardInterrupt. This was necessary b/c otherwise
4954 the history cache would break when the user hit Ctrl-C, and
4959 the history cache would break when the user hit Ctrl-C, and
4955 interact() offers no way to add any hooks to it.
4960 interact() offers no way to add any hooks to it.
4956
4961
4957 2001-12-23 Fernando Perez <fperez@colorado.edu>
4962 2001-12-23 Fernando Perez <fperez@colorado.edu>
4958
4963
4959 * setup.py: added check for 'MANIFEST' before trying to remove
4964 * setup.py: added check for 'MANIFEST' before trying to remove
4960 it. Thanks to Sean Reifschneider.
4965 it. Thanks to Sean Reifschneider.
4961
4966
4962 2001-12-22 Fernando Perez <fperez@colorado.edu>
4967 2001-12-22 Fernando Perez <fperez@colorado.edu>
4963
4968
4964 * Released 0.2.2.
4969 * Released 0.2.2.
4965
4970
4966 * Finished (reasonably) writing the manual. Later will add the
4971 * Finished (reasonably) writing the manual. Later will add the
4967 python-standard navigation stylesheets, but for the time being
4972 python-standard navigation stylesheets, but for the time being
4968 it's fairly complete. Distribution will include html and pdf
4973 it's fairly complete. Distribution will include html and pdf
4969 versions.
4974 versions.
4970
4975
4971 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4976 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
4972 (MayaVi author).
4977 (MayaVi author).
4973
4978
4974 2001-12-21 Fernando Perez <fperez@colorado.edu>
4979 2001-12-21 Fernando Perez <fperez@colorado.edu>
4975
4980
4976 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4981 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
4977 good public release, I think (with the manual and the distutils
4982 good public release, I think (with the manual and the distutils
4978 installer). The manual can use some work, but that can go
4983 installer). The manual can use some work, but that can go
4979 slowly. Otherwise I think it's quite nice for end users. Next
4984 slowly. Otherwise I think it's quite nice for end users. Next
4980 summer, rewrite the guts of it...
4985 summer, rewrite the guts of it...
4981
4986
4982 * Changed format of ipythonrc files to use whitespace as the
4987 * Changed format of ipythonrc files to use whitespace as the
4983 separator instead of an explicit '='. Cleaner.
4988 separator instead of an explicit '='. Cleaner.
4984
4989
4985 2001-12-20 Fernando Perez <fperez@colorado.edu>
4990 2001-12-20 Fernando Perez <fperez@colorado.edu>
4986
4991
4987 * Started a manual in LyX. For now it's just a quick merge of the
4992 * Started a manual in LyX. For now it's just a quick merge of the
4988 various internal docstrings and READMEs. Later it may grow into a
4993 various internal docstrings and READMEs. Later it may grow into a
4989 nice, full-blown manual.
4994 nice, full-blown manual.
4990
4995
4991 * Set up a distutils based installer. Installation should now be
4996 * Set up a distutils based installer. Installation should now be
4992 trivially simple for end-users.
4997 trivially simple for end-users.
4993
4998
4994 2001-12-11 Fernando Perez <fperez@colorado.edu>
4999 2001-12-11 Fernando Perez <fperez@colorado.edu>
4995
5000
4996 * Released 0.2.0. First public release, announced it at
5001 * Released 0.2.0. First public release, announced it at
4997 comp.lang.python. From now on, just bugfixes...
5002 comp.lang.python. From now on, just bugfixes...
4998
5003
4999 * Went through all the files, set copyright/license notices and
5004 * Went through all the files, set copyright/license notices and
5000 cleaned up things. Ready for release.
5005 cleaned up things. Ready for release.
5001
5006
5002 2001-12-10 Fernando Perez <fperez@colorado.edu>
5007 2001-12-10 Fernando Perez <fperez@colorado.edu>
5003
5008
5004 * Changed the first-time installer not to use tarfiles. It's more
5009 * Changed the first-time installer not to use tarfiles. It's more
5005 robust now and less unix-dependent. Also makes it easier for
5010 robust now and less unix-dependent. Also makes it easier for
5006 people to later upgrade versions.
5011 people to later upgrade versions.
5007
5012
5008 * Changed @exit to @abort to reflect the fact that it's pretty
5013 * Changed @exit to @abort to reflect the fact that it's pretty
5009 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5014 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5010 becomes significant only when IPyhton is embedded: in that case,
5015 becomes significant only when IPyhton is embedded: in that case,
5011 C-D closes IPython only, but @abort kills the enclosing program
5016 C-D closes IPython only, but @abort kills the enclosing program
5012 too (unless it had called IPython inside a try catching
5017 too (unless it had called IPython inside a try catching
5013 SystemExit).
5018 SystemExit).
5014
5019
5015 * Created Shell module which exposes the actuall IPython Shell
5020 * Created Shell module which exposes the actuall IPython Shell
5016 classes, currently the normal and the embeddable one. This at
5021 classes, currently the normal and the embeddable one. This at
5017 least offers a stable interface we won't need to change when
5022 least offers a stable interface we won't need to change when
5018 (later) the internals are rewritten. That rewrite will be confined
5023 (later) the internals are rewritten. That rewrite will be confined
5019 to iplib and ipmaker, but the Shell interface should remain as is.
5024 to iplib and ipmaker, but the Shell interface should remain as is.
5020
5025
5021 * Added embed module which offers an embeddable IPShell object,
5026 * Added embed module which offers an embeddable IPShell object,
5022 useful to fire up IPython *inside* a running program. Great for
5027 useful to fire up IPython *inside* a running program. Great for
5023 debugging or dynamical data analysis.
5028 debugging or dynamical data analysis.
5024
5029
5025 2001-12-08 Fernando Perez <fperez@colorado.edu>
5030 2001-12-08 Fernando Perez <fperez@colorado.edu>
5026
5031
5027 * Fixed small bug preventing seeing info from methods of defined
5032 * Fixed small bug preventing seeing info from methods of defined
5028 objects (incorrect namespace in _ofind()).
5033 objects (incorrect namespace in _ofind()).
5029
5034
5030 * Documentation cleanup. Moved the main usage docstrings to a
5035 * Documentation cleanup. Moved the main usage docstrings to a
5031 separate file, usage.py (cleaner to maintain, and hopefully in the
5036 separate file, usage.py (cleaner to maintain, and hopefully in the
5032 future some perlpod-like way of producing interactive, man and
5037 future some perlpod-like way of producing interactive, man and
5033 html docs out of it will be found).
5038 html docs out of it will be found).
5034
5039
5035 * Added @profile to see your profile at any time.
5040 * Added @profile to see your profile at any time.
5036
5041
5037 * Added @p as an alias for 'print'. It's especially convenient if
5042 * Added @p as an alias for 'print'. It's especially convenient if
5038 using automagic ('p x' prints x).
5043 using automagic ('p x' prints x).
5039
5044
5040 * Small cleanups and fixes after a pychecker run.
5045 * Small cleanups and fixes after a pychecker run.
5041
5046
5042 * Changed the @cd command to handle @cd - and @cd -<n> for
5047 * Changed the @cd command to handle @cd - and @cd -<n> for
5043 visiting any directory in _dh.
5048 visiting any directory in _dh.
5044
5049
5045 * Introduced _dh, a history of visited directories. @dhist prints
5050 * Introduced _dh, a history of visited directories. @dhist prints
5046 it out with numbers.
5051 it out with numbers.
5047
5052
5048 2001-12-07 Fernando Perez <fperez@colorado.edu>
5053 2001-12-07 Fernando Perez <fperez@colorado.edu>
5049
5054
5050 * Released 0.1.22
5055 * Released 0.1.22
5051
5056
5052 * Made initialization a bit more robust against invalid color
5057 * Made initialization a bit more robust against invalid color
5053 options in user input (exit, not traceback-crash).
5058 options in user input (exit, not traceback-crash).
5054
5059
5055 * Changed the bug crash reporter to write the report only in the
5060 * Changed the bug crash reporter to write the report only in the
5056 user's .ipython directory. That way IPython won't litter people's
5061 user's .ipython directory. That way IPython won't litter people's
5057 hard disks with crash files all over the place. Also print on
5062 hard disks with crash files all over the place. Also print on
5058 screen the necessary mail command.
5063 screen the necessary mail command.
5059
5064
5060 * With the new ultraTB, implemented LightBG color scheme for light
5065 * With the new ultraTB, implemented LightBG color scheme for light
5061 background terminals. A lot of people like white backgrounds, so I
5066 background terminals. A lot of people like white backgrounds, so I
5062 guess we should at least give them something readable.
5067 guess we should at least give them something readable.
5063
5068
5064 2001-12-06 Fernando Perez <fperez@colorado.edu>
5069 2001-12-06 Fernando Perez <fperez@colorado.edu>
5065
5070
5066 * Modified the structure of ultraTB. Now there's a proper class
5071 * Modified the structure of ultraTB. Now there's a proper class
5067 for tables of color schemes which allow adding schemes easily and
5072 for tables of color schemes which allow adding schemes easily and
5068 switching the active scheme without creating a new instance every
5073 switching the active scheme without creating a new instance every
5069 time (which was ridiculous). The syntax for creating new schemes
5074 time (which was ridiculous). The syntax for creating new schemes
5070 is also cleaner. I think ultraTB is finally done, with a clean
5075 is also cleaner. I think ultraTB is finally done, with a clean
5071 class structure. Names are also much cleaner (now there's proper
5076 class structure. Names are also much cleaner (now there's proper
5072 color tables, no need for every variable to also have 'color' in
5077 color tables, no need for every variable to also have 'color' in
5073 its name).
5078 its name).
5074
5079
5075 * Broke down genutils into separate files. Now genutils only
5080 * Broke down genutils into separate files. Now genutils only
5076 contains utility functions, and classes have been moved to their
5081 contains utility functions, and classes have been moved to their
5077 own files (they had enough independent functionality to warrant
5082 own files (they had enough independent functionality to warrant
5078 it): ConfigLoader, OutputTrap, Struct.
5083 it): ConfigLoader, OutputTrap, Struct.
5079
5084
5080 2001-12-05 Fernando Perez <fperez@colorado.edu>
5085 2001-12-05 Fernando Perez <fperez@colorado.edu>
5081
5086
5082 * IPython turns 21! Released version 0.1.21, as a candidate for
5087 * IPython turns 21! Released version 0.1.21, as a candidate for
5083 public consumption. If all goes well, release in a few days.
5088 public consumption. If all goes well, release in a few days.
5084
5089
5085 * Fixed path bug (files in Extensions/ directory wouldn't be found
5090 * Fixed path bug (files in Extensions/ directory wouldn't be found
5086 unless IPython/ was explicitly in sys.path).
5091 unless IPython/ was explicitly in sys.path).
5087
5092
5088 * Extended the FlexCompleter class as MagicCompleter to allow
5093 * Extended the FlexCompleter class as MagicCompleter to allow
5089 completion of @-starting lines.
5094 completion of @-starting lines.
5090
5095
5091 * Created __release__.py file as a central repository for release
5096 * Created __release__.py file as a central repository for release
5092 info that other files can read from.
5097 info that other files can read from.
5093
5098
5094 * Fixed small bug in logging: when logging was turned on in
5099 * Fixed small bug in logging: when logging was turned on in
5095 mid-session, old lines with special meanings (!@?) were being
5100 mid-session, old lines with special meanings (!@?) were being
5096 logged without the prepended comment, which is necessary since
5101 logged without the prepended comment, which is necessary since
5097 they are not truly valid python syntax. This should make session
5102 they are not truly valid python syntax. This should make session
5098 restores produce less errors.
5103 restores produce less errors.
5099
5104
5100 * The namespace cleanup forced me to make a FlexCompleter class
5105 * The namespace cleanup forced me to make a FlexCompleter class
5101 which is nothing but a ripoff of rlcompleter, but with selectable
5106 which is nothing but a ripoff of rlcompleter, but with selectable
5102 namespace (rlcompleter only works in __main__.__dict__). I'll try
5107 namespace (rlcompleter only works in __main__.__dict__). I'll try
5103 to submit a note to the authors to see if this change can be
5108 to submit a note to the authors to see if this change can be
5104 incorporated in future rlcompleter releases (Dec.6: done)
5109 incorporated in future rlcompleter releases (Dec.6: done)
5105
5110
5106 * More fixes to namespace handling. It was a mess! Now all
5111 * More fixes to namespace handling. It was a mess! Now all
5107 explicit references to __main__.__dict__ are gone (except when
5112 explicit references to __main__.__dict__ are gone (except when
5108 really needed) and everything is handled through the namespace
5113 really needed) and everything is handled through the namespace
5109 dicts in the IPython instance. We seem to be getting somewhere
5114 dicts in the IPython instance. We seem to be getting somewhere
5110 with this, finally...
5115 with this, finally...
5111
5116
5112 * Small documentation updates.
5117 * Small documentation updates.
5113
5118
5114 * Created the Extensions directory under IPython (with an
5119 * Created the Extensions directory under IPython (with an
5115 __init__.py). Put the PhysicalQ stuff there. This directory should
5120 __init__.py). Put the PhysicalQ stuff there. This directory should
5116 be used for all special-purpose extensions.
5121 be used for all special-purpose extensions.
5117
5122
5118 * File renaming:
5123 * File renaming:
5119 ipythonlib --> ipmaker
5124 ipythonlib --> ipmaker
5120 ipplib --> iplib
5125 ipplib --> iplib
5121 This makes a bit more sense in terms of what these files actually do.
5126 This makes a bit more sense in terms of what these files actually do.
5122
5127
5123 * Moved all the classes and functions in ipythonlib to ipplib, so
5128 * Moved all the classes and functions in ipythonlib to ipplib, so
5124 now ipythonlib only has make_IPython(). This will ease up its
5129 now ipythonlib only has make_IPython(). This will ease up its
5125 splitting in smaller functional chunks later.
5130 splitting in smaller functional chunks later.
5126
5131
5127 * Cleaned up (done, I think) output of @whos. Better column
5132 * Cleaned up (done, I think) output of @whos. Better column
5128 formatting, and now shows str(var) for as much as it can, which is
5133 formatting, and now shows str(var) for as much as it can, which is
5129 typically what one gets with a 'print var'.
5134 typically what one gets with a 'print var'.
5130
5135
5131 2001-12-04 Fernando Perez <fperez@colorado.edu>
5136 2001-12-04 Fernando Perez <fperez@colorado.edu>
5132
5137
5133 * Fixed namespace problems. Now builtin/IPyhton/user names get
5138 * Fixed namespace problems. Now builtin/IPyhton/user names get
5134 properly reported in their namespace. Internal namespace handling
5139 properly reported in their namespace. Internal namespace handling
5135 is finally getting decent (not perfect yet, but much better than
5140 is finally getting decent (not perfect yet, but much better than
5136 the ad-hoc mess we had).
5141 the ad-hoc mess we had).
5137
5142
5138 * Removed -exit option. If people just want to run a python
5143 * Removed -exit option. If people just want to run a python
5139 script, that's what the normal interpreter is for. Less
5144 script, that's what the normal interpreter is for. Less
5140 unnecessary options, less chances for bugs.
5145 unnecessary options, less chances for bugs.
5141
5146
5142 * Added a crash handler which generates a complete post-mortem if
5147 * Added a crash handler which generates a complete post-mortem if
5143 IPython crashes. This will help a lot in tracking bugs down the
5148 IPython crashes. This will help a lot in tracking bugs down the
5144 road.
5149 road.
5145
5150
5146 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5151 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5147 which were boud to functions being reassigned would bypass the
5152 which were boud to functions being reassigned would bypass the
5148 logger, breaking the sync of _il with the prompt counter. This
5153 logger, breaking the sync of _il with the prompt counter. This
5149 would then crash IPython later when a new line was logged.
5154 would then crash IPython later when a new line was logged.
5150
5155
5151 2001-12-02 Fernando Perez <fperez@colorado.edu>
5156 2001-12-02 Fernando Perez <fperez@colorado.edu>
5152
5157
5153 * Made IPython a package. This means people don't have to clutter
5158 * Made IPython a package. This means people don't have to clutter
5154 their sys.path with yet another directory. Changed the INSTALL
5159 their sys.path with yet another directory. Changed the INSTALL
5155 file accordingly.
5160 file accordingly.
5156
5161
5157 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5162 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5158 sorts its output (so @who shows it sorted) and @whos formats the
5163 sorts its output (so @who shows it sorted) and @whos formats the
5159 table according to the width of the first column. Nicer, easier to
5164 table according to the width of the first column. Nicer, easier to
5160 read. Todo: write a generic table_format() which takes a list of
5165 read. Todo: write a generic table_format() which takes a list of
5161 lists and prints it nicely formatted, with optional row/column
5166 lists and prints it nicely formatted, with optional row/column
5162 separators and proper padding and justification.
5167 separators and proper padding and justification.
5163
5168
5164 * Released 0.1.20
5169 * Released 0.1.20
5165
5170
5166 * Fixed bug in @log which would reverse the inputcache list (a
5171 * Fixed bug in @log which would reverse the inputcache list (a
5167 copy operation was missing).
5172 copy operation was missing).
5168
5173
5169 * Code cleanup. @config was changed to use page(). Better, since
5174 * Code cleanup. @config was changed to use page(). Better, since
5170 its output is always quite long.
5175 its output is always quite long.
5171
5176
5172 * Itpl is back as a dependency. I was having too many problems
5177 * Itpl is back as a dependency. I was having too many problems
5173 getting the parametric aliases to work reliably, and it's just
5178 getting the parametric aliases to work reliably, and it's just
5174 easier to code weird string operations with it than playing %()s
5179 easier to code weird string operations with it than playing %()s
5175 games. It's only ~6k, so I don't think it's too big a deal.
5180 games. It's only ~6k, so I don't think it's too big a deal.
5176
5181
5177 * Found (and fixed) a very nasty bug with history. !lines weren't
5182 * Found (and fixed) a very nasty bug with history. !lines weren't
5178 getting cached, and the out of sync caches would crash
5183 getting cached, and the out of sync caches would crash
5179 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5184 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5180 division of labor a bit better. Bug fixed, cleaner structure.
5185 division of labor a bit better. Bug fixed, cleaner structure.
5181
5186
5182 2001-12-01 Fernando Perez <fperez@colorado.edu>
5187 2001-12-01 Fernando Perez <fperez@colorado.edu>
5183
5188
5184 * Released 0.1.19
5189 * Released 0.1.19
5185
5190
5186 * Added option -n to @hist to prevent line number printing. Much
5191 * Added option -n to @hist to prevent line number printing. Much
5187 easier to copy/paste code this way.
5192 easier to copy/paste code this way.
5188
5193
5189 * Created global _il to hold the input list. Allows easy
5194 * Created global _il to hold the input list. Allows easy
5190 re-execution of blocks of code by slicing it (inspired by Janko's
5195 re-execution of blocks of code by slicing it (inspired by Janko's
5191 comment on 'macros').
5196 comment on 'macros').
5192
5197
5193 * Small fixes and doc updates.
5198 * Small fixes and doc updates.
5194
5199
5195 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5200 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5196 much too fragile with automagic. Handles properly multi-line
5201 much too fragile with automagic. Handles properly multi-line
5197 statements and takes parameters.
5202 statements and takes parameters.
5198
5203
5199 2001-11-30 Fernando Perez <fperez@colorado.edu>
5204 2001-11-30 Fernando Perez <fperez@colorado.edu>
5200
5205
5201 * Version 0.1.18 released.
5206 * Version 0.1.18 released.
5202
5207
5203 * Fixed nasty namespace bug in initial module imports.
5208 * Fixed nasty namespace bug in initial module imports.
5204
5209
5205 * Added copyright/license notes to all code files (except
5210 * Added copyright/license notes to all code files (except
5206 DPyGetOpt). For the time being, LGPL. That could change.
5211 DPyGetOpt). For the time being, LGPL. That could change.
5207
5212
5208 * Rewrote a much nicer README, updated INSTALL, cleaned up
5213 * Rewrote a much nicer README, updated INSTALL, cleaned up
5209 ipythonrc-* samples.
5214 ipythonrc-* samples.
5210
5215
5211 * Overall code/documentation cleanup. Basically ready for
5216 * Overall code/documentation cleanup. Basically ready for
5212 release. Only remaining thing: licence decision (LGPL?).
5217 release. Only remaining thing: licence decision (LGPL?).
5213
5218
5214 * Converted load_config to a class, ConfigLoader. Now recursion
5219 * Converted load_config to a class, ConfigLoader. Now recursion
5215 control is better organized. Doesn't include the same file twice.
5220 control is better organized. Doesn't include the same file twice.
5216
5221
5217 2001-11-29 Fernando Perez <fperez@colorado.edu>
5222 2001-11-29 Fernando Perez <fperez@colorado.edu>
5218
5223
5219 * Got input history working. Changed output history variables from
5224 * Got input history working. Changed output history variables from
5220 _p to _o so that _i is for input and _o for output. Just cleaner
5225 _p to _o so that _i is for input and _o for output. Just cleaner
5221 convention.
5226 convention.
5222
5227
5223 * Implemented parametric aliases. This pretty much allows the
5228 * Implemented parametric aliases. This pretty much allows the
5224 alias system to offer full-blown shell convenience, I think.
5229 alias system to offer full-blown shell convenience, I think.
5225
5230
5226 * Version 0.1.17 released, 0.1.18 opened.
5231 * Version 0.1.17 released, 0.1.18 opened.
5227
5232
5228 * dot_ipython/ipythonrc (alias): added documentation.
5233 * dot_ipython/ipythonrc (alias): added documentation.
5229 (xcolor): Fixed small bug (xcolors -> xcolor)
5234 (xcolor): Fixed small bug (xcolors -> xcolor)
5230
5235
5231 * Changed the alias system. Now alias is a magic command to define
5236 * Changed the alias system. Now alias is a magic command to define
5232 aliases just like the shell. Rationale: the builtin magics should
5237 aliases just like the shell. Rationale: the builtin magics should
5233 be there for things deeply connected to IPython's
5238 be there for things deeply connected to IPython's
5234 architecture. And this is a much lighter system for what I think
5239 architecture. And this is a much lighter system for what I think
5235 is the really important feature: allowing users to define quickly
5240 is the really important feature: allowing users to define quickly
5236 magics that will do shell things for them, so they can customize
5241 magics that will do shell things for them, so they can customize
5237 IPython easily to match their work habits. If someone is really
5242 IPython easily to match their work habits. If someone is really
5238 desperate to have another name for a builtin alias, they can
5243 desperate to have another name for a builtin alias, they can
5239 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5244 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5240 works.
5245 works.
5241
5246
5242 2001-11-28 Fernando Perez <fperez@colorado.edu>
5247 2001-11-28 Fernando Perez <fperez@colorado.edu>
5243
5248
5244 * Changed @file so that it opens the source file at the proper
5249 * Changed @file so that it opens the source file at the proper
5245 line. Since it uses less, if your EDITOR environment is
5250 line. Since it uses less, if your EDITOR environment is
5246 configured, typing v will immediately open your editor of choice
5251 configured, typing v will immediately open your editor of choice
5247 right at the line where the object is defined. Not as quick as
5252 right at the line where the object is defined. Not as quick as
5248 having a direct @edit command, but for all intents and purposes it
5253 having a direct @edit command, but for all intents and purposes it
5249 works. And I don't have to worry about writing @edit to deal with
5254 works. And I don't have to worry about writing @edit to deal with
5250 all the editors, less does that.
5255 all the editors, less does that.
5251
5256
5252 * Version 0.1.16 released, 0.1.17 opened.
5257 * Version 0.1.16 released, 0.1.17 opened.
5253
5258
5254 * Fixed some nasty bugs in the page/page_dumb combo that could
5259 * Fixed some nasty bugs in the page/page_dumb combo that could
5255 crash IPython.
5260 crash IPython.
5256
5261
5257 2001-11-27 Fernando Perez <fperez@colorado.edu>
5262 2001-11-27 Fernando Perez <fperez@colorado.edu>
5258
5263
5259 * Version 0.1.15 released, 0.1.16 opened.
5264 * Version 0.1.15 released, 0.1.16 opened.
5260
5265
5261 * Finally got ? and ?? to work for undefined things: now it's
5266 * Finally got ? and ?? to work for undefined things: now it's
5262 possible to type {}.get? and get information about the get method
5267 possible to type {}.get? and get information about the get method
5263 of dicts, or os.path? even if only os is defined (so technically
5268 of dicts, or os.path? even if only os is defined (so technically
5264 os.path isn't). Works at any level. For example, after import os,
5269 os.path isn't). Works at any level. For example, after import os,
5265 os?, os.path?, os.path.abspath? all work. This is great, took some
5270 os?, os.path?, os.path.abspath? all work. This is great, took some
5266 work in _ofind.
5271 work in _ofind.
5267
5272
5268 * Fixed more bugs with logging. The sanest way to do it was to add
5273 * Fixed more bugs with logging. The sanest way to do it was to add
5269 to @log a 'mode' parameter. Killed two in one shot (this mode
5274 to @log a 'mode' parameter. Killed two in one shot (this mode
5270 option was a request of Janko's). I think it's finally clean
5275 option was a request of Janko's). I think it's finally clean
5271 (famous last words).
5276 (famous last words).
5272
5277
5273 * Added a page_dumb() pager which does a decent job of paging on
5278 * Added a page_dumb() pager which does a decent job of paging on
5274 screen, if better things (like less) aren't available. One less
5279 screen, if better things (like less) aren't available. One less
5275 unix dependency (someday maybe somebody will port this to
5280 unix dependency (someday maybe somebody will port this to
5276 windows).
5281 windows).
5277
5282
5278 * Fixed problem in magic_log: would lock of logging out if log
5283 * Fixed problem in magic_log: would lock of logging out if log
5279 creation failed (because it would still think it had succeeded).
5284 creation failed (because it would still think it had succeeded).
5280
5285
5281 * Improved the page() function using curses to auto-detect screen
5286 * Improved the page() function using curses to auto-detect screen
5282 size. Now it can make a much better decision on whether to print
5287 size. Now it can make a much better decision on whether to print
5283 or page a string. Option screen_length was modified: a value 0
5288 or page a string. Option screen_length was modified: a value 0
5284 means auto-detect, and that's the default now.
5289 means auto-detect, and that's the default now.
5285
5290
5286 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5291 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5287 go out. I'll test it for a few days, then talk to Janko about
5292 go out. I'll test it for a few days, then talk to Janko about
5288 licences and announce it.
5293 licences and announce it.
5289
5294
5290 * Fixed the length of the auto-generated ---> prompt which appears
5295 * Fixed the length of the auto-generated ---> prompt which appears
5291 for auto-parens and auto-quotes. Getting this right isn't trivial,
5296 for auto-parens and auto-quotes. Getting this right isn't trivial,
5292 with all the color escapes, different prompt types and optional
5297 with all the color escapes, different prompt types and optional
5293 separators. But it seems to be working in all the combinations.
5298 separators. But it seems to be working in all the combinations.
5294
5299
5295 2001-11-26 Fernando Perez <fperez@colorado.edu>
5300 2001-11-26 Fernando Perez <fperez@colorado.edu>
5296
5301
5297 * Wrote a regexp filter to get option types from the option names
5302 * Wrote a regexp filter to get option types from the option names
5298 string. This eliminates the need to manually keep two duplicate
5303 string. This eliminates the need to manually keep two duplicate
5299 lists.
5304 lists.
5300
5305
5301 * Removed the unneeded check_option_names. Now options are handled
5306 * Removed the unneeded check_option_names. Now options are handled
5302 in a much saner manner and it's easy to visually check that things
5307 in a much saner manner and it's easy to visually check that things
5303 are ok.
5308 are ok.
5304
5309
5305 * Updated version numbers on all files I modified to carry a
5310 * Updated version numbers on all files I modified to carry a
5306 notice so Janko and Nathan have clear version markers.
5311 notice so Janko and Nathan have clear version markers.
5307
5312
5308 * Updated docstring for ultraTB with my changes. I should send
5313 * Updated docstring for ultraTB with my changes. I should send
5309 this to Nathan.
5314 this to Nathan.
5310
5315
5311 * Lots of small fixes. Ran everything through pychecker again.
5316 * Lots of small fixes. Ran everything through pychecker again.
5312
5317
5313 * Made loading of deep_reload an cmd line option. If it's not too
5318 * Made loading of deep_reload an cmd line option. If it's not too
5314 kosher, now people can just disable it. With -nodeep_reload it's
5319 kosher, now people can just disable it. With -nodeep_reload it's
5315 still available as dreload(), it just won't overwrite reload().
5320 still available as dreload(), it just won't overwrite reload().
5316
5321
5317 * Moved many options to the no| form (-opt and -noopt
5322 * Moved many options to the no| form (-opt and -noopt
5318 accepted). Cleaner.
5323 accepted). Cleaner.
5319
5324
5320 * Changed magic_log so that if called with no parameters, it uses
5325 * Changed magic_log so that if called with no parameters, it uses
5321 'rotate' mode. That way auto-generated logs aren't automatically
5326 'rotate' mode. That way auto-generated logs aren't automatically
5322 over-written. For normal logs, now a backup is made if it exists
5327 over-written. For normal logs, now a backup is made if it exists
5323 (only 1 level of backups). A new 'backup' mode was added to the
5328 (only 1 level of backups). A new 'backup' mode was added to the
5324 Logger class to support this. This was a request by Janko.
5329 Logger class to support this. This was a request by Janko.
5325
5330
5326 * Added @logoff/@logon to stop/restart an active log.
5331 * Added @logoff/@logon to stop/restart an active log.
5327
5332
5328 * Fixed a lot of bugs in log saving/replay. It was pretty
5333 * Fixed a lot of bugs in log saving/replay. It was pretty
5329 broken. Now special lines (!@,/) appear properly in the command
5334 broken. Now special lines (!@,/) appear properly in the command
5330 history after a log replay.
5335 history after a log replay.
5331
5336
5332 * Tried and failed to implement full session saving via pickle. My
5337 * Tried and failed to implement full session saving via pickle. My
5333 idea was to pickle __main__.__dict__, but modules can't be
5338 idea was to pickle __main__.__dict__, but modules can't be
5334 pickled. This would be a better alternative to replaying logs, but
5339 pickled. This would be a better alternative to replaying logs, but
5335 seems quite tricky to get to work. Changed -session to be called
5340 seems quite tricky to get to work. Changed -session to be called
5336 -logplay, which more accurately reflects what it does. And if we
5341 -logplay, which more accurately reflects what it does. And if we
5337 ever get real session saving working, -session is now available.
5342 ever get real session saving working, -session is now available.
5338
5343
5339 * Implemented color schemes for prompts also. As for tracebacks,
5344 * Implemented color schemes for prompts also. As for tracebacks,
5340 currently only NoColor and Linux are supported. But now the
5345 currently only NoColor and Linux are supported. But now the
5341 infrastructure is in place, based on a generic ColorScheme
5346 infrastructure is in place, based on a generic ColorScheme
5342 class. So writing and activating new schemes both for the prompts
5347 class. So writing and activating new schemes both for the prompts
5343 and the tracebacks should be straightforward.
5348 and the tracebacks should be straightforward.
5344
5349
5345 * Version 0.1.13 released, 0.1.14 opened.
5350 * Version 0.1.13 released, 0.1.14 opened.
5346
5351
5347 * Changed handling of options for output cache. Now counter is
5352 * Changed handling of options for output cache. Now counter is
5348 hardwired starting at 1 and one specifies the maximum number of
5353 hardwired starting at 1 and one specifies the maximum number of
5349 entries *in the outcache* (not the max prompt counter). This is
5354 entries *in the outcache* (not the max prompt counter). This is
5350 much better, since many statements won't increase the cache
5355 much better, since many statements won't increase the cache
5351 count. It also eliminated some confusing options, now there's only
5356 count. It also eliminated some confusing options, now there's only
5352 one: cache_size.
5357 one: cache_size.
5353
5358
5354 * Added 'alias' magic function and magic_alias option in the
5359 * Added 'alias' magic function and magic_alias option in the
5355 ipythonrc file. Now the user can easily define whatever names he
5360 ipythonrc file. Now the user can easily define whatever names he
5356 wants for the magic functions without having to play weird
5361 wants for the magic functions without having to play weird
5357 namespace games. This gives IPython a real shell-like feel.
5362 namespace games. This gives IPython a real shell-like feel.
5358
5363
5359 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5364 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5360 @ or not).
5365 @ or not).
5361
5366
5362 This was one of the last remaining 'visible' bugs (that I know
5367 This was one of the last remaining 'visible' bugs (that I know
5363 of). I think if I can clean up the session loading so it works
5368 of). I think if I can clean up the session loading so it works
5364 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5369 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5365 about licensing).
5370 about licensing).
5366
5371
5367 2001-11-25 Fernando Perez <fperez@colorado.edu>
5372 2001-11-25 Fernando Perez <fperez@colorado.edu>
5368
5373
5369 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5374 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5370 there's a cleaner distinction between what ? and ?? show.
5375 there's a cleaner distinction between what ? and ?? show.
5371
5376
5372 * Added screen_length option. Now the user can define his own
5377 * Added screen_length option. Now the user can define his own
5373 screen size for page() operations.
5378 screen size for page() operations.
5374
5379
5375 * Implemented magic shell-like functions with automatic code
5380 * Implemented magic shell-like functions with automatic code
5376 generation. Now adding another function is just a matter of adding
5381 generation. Now adding another function is just a matter of adding
5377 an entry to a dict, and the function is dynamically generated at
5382 an entry to a dict, and the function is dynamically generated at
5378 run-time. Python has some really cool features!
5383 run-time. Python has some really cool features!
5379
5384
5380 * Renamed many options to cleanup conventions a little. Now all
5385 * Renamed many options to cleanup conventions a little. Now all
5381 are lowercase, and only underscores where needed. Also in the code
5386 are lowercase, and only underscores where needed. Also in the code
5382 option name tables are clearer.
5387 option name tables are clearer.
5383
5388
5384 * Changed prompts a little. Now input is 'In [n]:' instead of
5389 * Changed prompts a little. Now input is 'In [n]:' instead of
5385 'In[n]:='. This allows it the numbers to be aligned with the
5390 'In[n]:='. This allows it the numbers to be aligned with the
5386 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5391 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5387 Python (it was a Mathematica thing). The '...' continuation prompt
5392 Python (it was a Mathematica thing). The '...' continuation prompt
5388 was also changed a little to align better.
5393 was also changed a little to align better.
5389
5394
5390 * Fixed bug when flushing output cache. Not all _p<n> variables
5395 * Fixed bug when flushing output cache. Not all _p<n> variables
5391 exist, so their deletion needs to be wrapped in a try:
5396 exist, so their deletion needs to be wrapped in a try:
5392
5397
5393 * Figured out how to properly use inspect.formatargspec() (it
5398 * Figured out how to properly use inspect.formatargspec() (it
5394 requires the args preceded by *). So I removed all the code from
5399 requires the args preceded by *). So I removed all the code from
5395 _get_pdef in Magic, which was just replicating that.
5400 _get_pdef in Magic, which was just replicating that.
5396
5401
5397 * Added test to prefilter to allow redefining magic function names
5402 * Added test to prefilter to allow redefining magic function names
5398 as variables. This is ok, since the @ form is always available,
5403 as variables. This is ok, since the @ form is always available,
5399 but whe should allow the user to define a variable called 'ls' if
5404 but whe should allow the user to define a variable called 'ls' if
5400 he needs it.
5405 he needs it.
5401
5406
5402 * Moved the ToDo information from README into a separate ToDo.
5407 * Moved the ToDo information from README into a separate ToDo.
5403
5408
5404 * General code cleanup and small bugfixes. I think it's close to a
5409 * General code cleanup and small bugfixes. I think it's close to a
5405 state where it can be released, obviously with a big 'beta'
5410 state where it can be released, obviously with a big 'beta'
5406 warning on it.
5411 warning on it.
5407
5412
5408 * Got the magic function split to work. Now all magics are defined
5413 * Got the magic function split to work. Now all magics are defined
5409 in a separate class. It just organizes things a bit, and now
5414 in a separate class. It just organizes things a bit, and now
5410 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5415 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5411 was too long).
5416 was too long).
5412
5417
5413 * Changed @clear to @reset to avoid potential confusions with
5418 * Changed @clear to @reset to avoid potential confusions with
5414 the shell command clear. Also renamed @cl to @clear, which does
5419 the shell command clear. Also renamed @cl to @clear, which does
5415 exactly what people expect it to from their shell experience.
5420 exactly what people expect it to from their shell experience.
5416
5421
5417 Added a check to the @reset command (since it's so
5422 Added a check to the @reset command (since it's so
5418 destructive, it's probably a good idea to ask for confirmation).
5423 destructive, it's probably a good idea to ask for confirmation).
5419 But now reset only works for full namespace resetting. Since the
5424 But now reset only works for full namespace resetting. Since the
5420 del keyword is already there for deleting a few specific
5425 del keyword is already there for deleting a few specific
5421 variables, I don't see the point of having a redundant magic
5426 variables, I don't see the point of having a redundant magic
5422 function for the same task.
5427 function for the same task.
5423
5428
5424 2001-11-24 Fernando Perez <fperez@colorado.edu>
5429 2001-11-24 Fernando Perez <fperez@colorado.edu>
5425
5430
5426 * Updated the builtin docs (esp. the ? ones).
5431 * Updated the builtin docs (esp. the ? ones).
5427
5432
5428 * Ran all the code through pychecker. Not terribly impressed with
5433 * Ran all the code through pychecker. Not terribly impressed with
5429 it: lots of spurious warnings and didn't really find anything of
5434 it: lots of spurious warnings and didn't really find anything of
5430 substance (just a few modules being imported and not used).
5435 substance (just a few modules being imported and not used).
5431
5436
5432 * Implemented the new ultraTB functionality into IPython. New
5437 * Implemented the new ultraTB functionality into IPython. New
5433 option: xcolors. This chooses color scheme. xmode now only selects
5438 option: xcolors. This chooses color scheme. xmode now only selects
5434 between Plain and Verbose. Better orthogonality.
5439 between Plain and Verbose. Better orthogonality.
5435
5440
5436 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5441 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5437 mode and color scheme for the exception handlers. Now it's
5442 mode and color scheme for the exception handlers. Now it's
5438 possible to have the verbose traceback with no coloring.
5443 possible to have the verbose traceback with no coloring.
5439
5444
5440 2001-11-23 Fernando Perez <fperez@colorado.edu>
5445 2001-11-23 Fernando Perez <fperez@colorado.edu>
5441
5446
5442 * Version 0.1.12 released, 0.1.13 opened.
5447 * Version 0.1.12 released, 0.1.13 opened.
5443
5448
5444 * Removed option to set auto-quote and auto-paren escapes by
5449 * Removed option to set auto-quote and auto-paren escapes by
5445 user. The chances of breaking valid syntax are just too high. If
5450 user. The chances of breaking valid syntax are just too high. If
5446 someone *really* wants, they can always dig into the code.
5451 someone *really* wants, they can always dig into the code.
5447
5452
5448 * Made prompt separators configurable.
5453 * Made prompt separators configurable.
5449
5454
5450 2001-11-22 Fernando Perez <fperez@colorado.edu>
5455 2001-11-22 Fernando Perez <fperez@colorado.edu>
5451
5456
5452 * Small bugfixes in many places.
5457 * Small bugfixes in many places.
5453
5458
5454 * Removed the MyCompleter class from ipplib. It seemed redundant
5459 * Removed the MyCompleter class from ipplib. It seemed redundant
5455 with the C-p,C-n history search functionality. Less code to
5460 with the C-p,C-n history search functionality. Less code to
5456 maintain.
5461 maintain.
5457
5462
5458 * Moved all the original ipython.py code into ipythonlib.py. Right
5463 * Moved all the original ipython.py code into ipythonlib.py. Right
5459 now it's just one big dump into a function called make_IPython, so
5464 now it's just one big dump into a function called make_IPython, so
5460 no real modularity has been gained. But at least it makes the
5465 no real modularity has been gained. But at least it makes the
5461 wrapper script tiny, and since ipythonlib is a module, it gets
5466 wrapper script tiny, and since ipythonlib is a module, it gets
5462 compiled and startup is much faster.
5467 compiled and startup is much faster.
5463
5468
5464 This is a reasobably 'deep' change, so we should test it for a
5469 This is a reasobably 'deep' change, so we should test it for a
5465 while without messing too much more with the code.
5470 while without messing too much more with the code.
5466
5471
5467 2001-11-21 Fernando Perez <fperez@colorado.edu>
5472 2001-11-21 Fernando Perez <fperez@colorado.edu>
5468
5473
5469 * Version 0.1.11 released, 0.1.12 opened for further work.
5474 * Version 0.1.11 released, 0.1.12 opened for further work.
5470
5475
5471 * Removed dependency on Itpl. It was only needed in one place. It
5476 * Removed dependency on Itpl. It was only needed in one place. It
5472 would be nice if this became part of python, though. It makes life
5477 would be nice if this became part of python, though. It makes life
5473 *a lot* easier in some cases.
5478 *a lot* easier in some cases.
5474
5479
5475 * Simplified the prefilter code a bit. Now all handlers are
5480 * Simplified the prefilter code a bit. Now all handlers are
5476 expected to explicitly return a value (at least a blank string).
5481 expected to explicitly return a value (at least a blank string).
5477
5482
5478 * Heavy edits in ipplib. Removed the help system altogether. Now
5483 * Heavy edits in ipplib. Removed the help system altogether. Now
5479 obj?/?? is used for inspecting objects, a magic @doc prints
5484 obj?/?? is used for inspecting objects, a magic @doc prints
5480 docstrings, and full-blown Python help is accessed via the 'help'
5485 docstrings, and full-blown Python help is accessed via the 'help'
5481 keyword. This cleans up a lot of code (less to maintain) and does
5486 keyword. This cleans up a lot of code (less to maintain) and does
5482 the job. Since 'help' is now a standard Python component, might as
5487 the job. Since 'help' is now a standard Python component, might as
5483 well use it and remove duplicate functionality.
5488 well use it and remove duplicate functionality.
5484
5489
5485 Also removed the option to use ipplib as a standalone program. By
5490 Also removed the option to use ipplib as a standalone program. By
5486 now it's too dependent on other parts of IPython to function alone.
5491 now it's too dependent on other parts of IPython to function alone.
5487
5492
5488 * Fixed bug in genutils.pager. It would crash if the pager was
5493 * Fixed bug in genutils.pager. It would crash if the pager was
5489 exited immediately after opening (broken pipe).
5494 exited immediately after opening (broken pipe).
5490
5495
5491 * Trimmed down the VerboseTB reporting a little. The header is
5496 * Trimmed down the VerboseTB reporting a little. The header is
5492 much shorter now and the repeated exception arguments at the end
5497 much shorter now and the repeated exception arguments at the end
5493 have been removed. For interactive use the old header seemed a bit
5498 have been removed. For interactive use the old header seemed a bit
5494 excessive.
5499 excessive.
5495
5500
5496 * Fixed small bug in output of @whos for variables with multi-word
5501 * Fixed small bug in output of @whos for variables with multi-word
5497 types (only first word was displayed).
5502 types (only first word was displayed).
5498
5503
5499 2001-11-17 Fernando Perez <fperez@colorado.edu>
5504 2001-11-17 Fernando Perez <fperez@colorado.edu>
5500
5505
5501 * Version 0.1.10 released, 0.1.11 opened for further work.
5506 * Version 0.1.10 released, 0.1.11 opened for further work.
5502
5507
5503 * Modified dirs and friends. dirs now *returns* the stack (not
5508 * Modified dirs and friends. dirs now *returns* the stack (not
5504 prints), so one can manipulate it as a variable. Convenient to
5509 prints), so one can manipulate it as a variable. Convenient to
5505 travel along many directories.
5510 travel along many directories.
5506
5511
5507 * Fixed bug in magic_pdef: would only work with functions with
5512 * Fixed bug in magic_pdef: would only work with functions with
5508 arguments with default values.
5513 arguments with default values.
5509
5514
5510 2001-11-14 Fernando Perez <fperez@colorado.edu>
5515 2001-11-14 Fernando Perez <fperez@colorado.edu>
5511
5516
5512 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5517 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5513 example with IPython. Various other minor fixes and cleanups.
5518 example with IPython. Various other minor fixes and cleanups.
5514
5519
5515 * Version 0.1.9 released, 0.1.10 opened for further work.
5520 * Version 0.1.9 released, 0.1.10 opened for further work.
5516
5521
5517 * Added sys.path to the list of directories searched in the
5522 * Added sys.path to the list of directories searched in the
5518 execfile= option. It used to be the current directory and the
5523 execfile= option. It used to be the current directory and the
5519 user's IPYTHONDIR only.
5524 user's IPYTHONDIR only.
5520
5525
5521 2001-11-13 Fernando Perez <fperez@colorado.edu>
5526 2001-11-13 Fernando Perez <fperez@colorado.edu>
5522
5527
5523 * Reinstated the raw_input/prefilter separation that Janko had
5528 * Reinstated the raw_input/prefilter separation that Janko had
5524 initially. This gives a more convenient setup for extending the
5529 initially. This gives a more convenient setup for extending the
5525 pre-processor from the outside: raw_input always gets a string,
5530 pre-processor from the outside: raw_input always gets a string,
5526 and prefilter has to process it. We can then redefine prefilter
5531 and prefilter has to process it. We can then redefine prefilter
5527 from the outside and implement extensions for special
5532 from the outside and implement extensions for special
5528 purposes.
5533 purposes.
5529
5534
5530 Today I got one for inputting PhysicalQuantity objects
5535 Today I got one for inputting PhysicalQuantity objects
5531 (from Scientific) without needing any function calls at
5536 (from Scientific) without needing any function calls at
5532 all. Extremely convenient, and it's all done as a user-level
5537 all. Extremely convenient, and it's all done as a user-level
5533 extension (no IPython code was touched). Now instead of:
5538 extension (no IPython code was touched). Now instead of:
5534 a = PhysicalQuantity(4.2,'m/s**2')
5539 a = PhysicalQuantity(4.2,'m/s**2')
5535 one can simply say
5540 one can simply say
5536 a = 4.2 m/s**2
5541 a = 4.2 m/s**2
5537 or even
5542 or even
5538 a = 4.2 m/s^2
5543 a = 4.2 m/s^2
5539
5544
5540 I use this, but it's also a proof of concept: IPython really is
5545 I use this, but it's also a proof of concept: IPython really is
5541 fully user-extensible, even at the level of the parsing of the
5546 fully user-extensible, even at the level of the parsing of the
5542 command line. It's not trivial, but it's perfectly doable.
5547 command line. It's not trivial, but it's perfectly doable.
5543
5548
5544 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5549 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5545 the problem of modules being loaded in the inverse order in which
5550 the problem of modules being loaded in the inverse order in which
5546 they were defined in
5551 they were defined in
5547
5552
5548 * Version 0.1.8 released, 0.1.9 opened for further work.
5553 * Version 0.1.8 released, 0.1.9 opened for further work.
5549
5554
5550 * Added magics pdef, source and file. They respectively show the
5555 * Added magics pdef, source and file. They respectively show the
5551 definition line ('prototype' in C), source code and full python
5556 definition line ('prototype' in C), source code and full python
5552 file for any callable object. The object inspector oinfo uses
5557 file for any callable object. The object inspector oinfo uses
5553 these to show the same information.
5558 these to show the same information.
5554
5559
5555 * Version 0.1.7 released, 0.1.8 opened for further work.
5560 * Version 0.1.7 released, 0.1.8 opened for further work.
5556
5561
5557 * Separated all the magic functions into a class called Magic. The
5562 * Separated all the magic functions into a class called Magic. The
5558 InteractiveShell class was becoming too big for Xemacs to handle
5563 InteractiveShell class was becoming too big for Xemacs to handle
5559 (de-indenting a line would lock it up for 10 seconds while it
5564 (de-indenting a line would lock it up for 10 seconds while it
5560 backtracked on the whole class!)
5565 backtracked on the whole class!)
5561
5566
5562 FIXME: didn't work. It can be done, but right now namespaces are
5567 FIXME: didn't work. It can be done, but right now namespaces are
5563 all messed up. Do it later (reverted it for now, so at least
5568 all messed up. Do it later (reverted it for now, so at least
5564 everything works as before).
5569 everything works as before).
5565
5570
5566 * Got the object introspection system (magic_oinfo) working! I
5571 * Got the object introspection system (magic_oinfo) working! I
5567 think this is pretty much ready for release to Janko, so he can
5572 think this is pretty much ready for release to Janko, so he can
5568 test it for a while and then announce it. Pretty much 100% of what
5573 test it for a while and then announce it. Pretty much 100% of what
5569 I wanted for the 'phase 1' release is ready. Happy, tired.
5574 I wanted for the 'phase 1' release is ready. Happy, tired.
5570
5575
5571 2001-11-12 Fernando Perez <fperez@colorado.edu>
5576 2001-11-12 Fernando Perez <fperez@colorado.edu>
5572
5577
5573 * Version 0.1.6 released, 0.1.7 opened for further work.
5578 * Version 0.1.6 released, 0.1.7 opened for further work.
5574
5579
5575 * Fixed bug in printing: it used to test for truth before
5580 * Fixed bug in printing: it used to test for truth before
5576 printing, so 0 wouldn't print. Now checks for None.
5581 printing, so 0 wouldn't print. Now checks for None.
5577
5582
5578 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5583 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5579 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5584 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5580 reaches by hand into the outputcache. Think of a better way to do
5585 reaches by hand into the outputcache. Think of a better way to do
5581 this later.
5586 this later.
5582
5587
5583 * Various small fixes thanks to Nathan's comments.
5588 * Various small fixes thanks to Nathan's comments.
5584
5589
5585 * Changed magic_pprint to magic_Pprint. This way it doesn't
5590 * Changed magic_pprint to magic_Pprint. This way it doesn't
5586 collide with pprint() and the name is consistent with the command
5591 collide with pprint() and the name is consistent with the command
5587 line option.
5592 line option.
5588
5593
5589 * Changed prompt counter behavior to be fully like
5594 * Changed prompt counter behavior to be fully like
5590 Mathematica's. That is, even input that doesn't return a result
5595 Mathematica's. That is, even input that doesn't return a result
5591 raises the prompt counter. The old behavior was kind of confusing
5596 raises the prompt counter. The old behavior was kind of confusing
5592 (getting the same prompt number several times if the operation
5597 (getting the same prompt number several times if the operation
5593 didn't return a result).
5598 didn't return a result).
5594
5599
5595 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5600 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5596
5601
5597 * Fixed -Classic mode (wasn't working anymore).
5602 * Fixed -Classic mode (wasn't working anymore).
5598
5603
5599 * Added colored prompts using Nathan's new code. Colors are
5604 * Added colored prompts using Nathan's new code. Colors are
5600 currently hardwired, they can be user-configurable. For
5605 currently hardwired, they can be user-configurable. For
5601 developers, they can be chosen in file ipythonlib.py, at the
5606 developers, they can be chosen in file ipythonlib.py, at the
5602 beginning of the CachedOutput class def.
5607 beginning of the CachedOutput class def.
5603
5608
5604 2001-11-11 Fernando Perez <fperez@colorado.edu>
5609 2001-11-11 Fernando Perez <fperez@colorado.edu>
5605
5610
5606 * Version 0.1.5 released, 0.1.6 opened for further work.
5611 * Version 0.1.5 released, 0.1.6 opened for further work.
5607
5612
5608 * Changed magic_env to *return* the environment as a dict (not to
5613 * Changed magic_env to *return* the environment as a dict (not to
5609 print it). This way it prints, but it can also be processed.
5614 print it). This way it prints, but it can also be processed.
5610
5615
5611 * Added Verbose exception reporting to interactive
5616 * Added Verbose exception reporting to interactive
5612 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5617 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5613 traceback. Had to make some changes to the ultraTB file. This is
5618 traceback. Had to make some changes to the ultraTB file. This is
5614 probably the last 'big' thing in my mental todo list. This ties
5619 probably the last 'big' thing in my mental todo list. This ties
5615 in with the next entry:
5620 in with the next entry:
5616
5621
5617 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5622 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5618 has to specify is Plain, Color or Verbose for all exception
5623 has to specify is Plain, Color or Verbose for all exception
5619 handling.
5624 handling.
5620
5625
5621 * Removed ShellServices option. All this can really be done via
5626 * Removed ShellServices option. All this can really be done via
5622 the magic system. It's easier to extend, cleaner and has automatic
5627 the magic system. It's easier to extend, cleaner and has automatic
5623 namespace protection and documentation.
5628 namespace protection and documentation.
5624
5629
5625 2001-11-09 Fernando Perez <fperez@colorado.edu>
5630 2001-11-09 Fernando Perez <fperez@colorado.edu>
5626
5631
5627 * Fixed bug in output cache flushing (missing parameter to
5632 * Fixed bug in output cache flushing (missing parameter to
5628 __init__). Other small bugs fixed (found using pychecker).
5633 __init__). Other small bugs fixed (found using pychecker).
5629
5634
5630 * Version 0.1.4 opened for bugfixing.
5635 * Version 0.1.4 opened for bugfixing.
5631
5636
5632 2001-11-07 Fernando Perez <fperez@colorado.edu>
5637 2001-11-07 Fernando Perez <fperez@colorado.edu>
5633
5638
5634 * Version 0.1.3 released, mainly because of the raw_input bug.
5639 * Version 0.1.3 released, mainly because of the raw_input bug.
5635
5640
5636 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5641 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5637 and when testing for whether things were callable, a call could
5642 and when testing for whether things were callable, a call could
5638 actually be made to certain functions. They would get called again
5643 actually be made to certain functions. They would get called again
5639 once 'really' executed, with a resulting double call. A disaster
5644 once 'really' executed, with a resulting double call. A disaster
5640 in many cases (list.reverse() would never work!).
5645 in many cases (list.reverse() would never work!).
5641
5646
5642 * Removed prefilter() function, moved its code to raw_input (which
5647 * Removed prefilter() function, moved its code to raw_input (which
5643 after all was just a near-empty caller for prefilter). This saves
5648 after all was just a near-empty caller for prefilter). This saves
5644 a function call on every prompt, and simplifies the class a tiny bit.
5649 a function call on every prompt, and simplifies the class a tiny bit.
5645
5650
5646 * Fix _ip to __ip name in magic example file.
5651 * Fix _ip to __ip name in magic example file.
5647
5652
5648 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5653 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5649 work with non-gnu versions of tar.
5654 work with non-gnu versions of tar.
5650
5655
5651 2001-11-06 Fernando Perez <fperez@colorado.edu>
5656 2001-11-06 Fernando Perez <fperez@colorado.edu>
5652
5657
5653 * Version 0.1.2. Just to keep track of the recent changes.
5658 * Version 0.1.2. Just to keep track of the recent changes.
5654
5659
5655 * Fixed nasty bug in output prompt routine. It used to check 'if
5660 * Fixed nasty bug in output prompt routine. It used to check 'if
5656 arg != None...'. Problem is, this fails if arg implements a
5661 arg != None...'. Problem is, this fails if arg implements a
5657 special comparison (__cmp__) which disallows comparing to
5662 special comparison (__cmp__) which disallows comparing to
5658 None. Found it when trying to use the PhysicalQuantity module from
5663 None. Found it when trying to use the PhysicalQuantity module from
5659 ScientificPython.
5664 ScientificPython.
5660
5665
5661 2001-11-05 Fernando Perez <fperez@colorado.edu>
5666 2001-11-05 Fernando Perez <fperez@colorado.edu>
5662
5667
5663 * Also added dirs. Now the pushd/popd/dirs family functions
5668 * Also added dirs. Now the pushd/popd/dirs family functions
5664 basically like the shell, with the added convenience of going home
5669 basically like the shell, with the added convenience of going home
5665 when called with no args.
5670 when called with no args.
5666
5671
5667 * pushd/popd slightly modified to mimic shell behavior more
5672 * pushd/popd slightly modified to mimic shell behavior more
5668 closely.
5673 closely.
5669
5674
5670 * Added env,pushd,popd from ShellServices as magic functions. I
5675 * Added env,pushd,popd from ShellServices as magic functions. I
5671 think the cleanest will be to port all desired functions from
5676 think the cleanest will be to port all desired functions from
5672 ShellServices as magics and remove ShellServices altogether. This
5677 ShellServices as magics and remove ShellServices altogether. This
5673 will provide a single, clean way of adding functionality
5678 will provide a single, clean way of adding functionality
5674 (shell-type or otherwise) to IP.
5679 (shell-type or otherwise) to IP.
5675
5680
5676 2001-11-04 Fernando Perez <fperez@colorado.edu>
5681 2001-11-04 Fernando Perez <fperez@colorado.edu>
5677
5682
5678 * Added .ipython/ directory to sys.path. This way users can keep
5683 * Added .ipython/ directory to sys.path. This way users can keep
5679 customizations there and access them via import.
5684 customizations there and access them via import.
5680
5685
5681 2001-11-03 Fernando Perez <fperez@colorado.edu>
5686 2001-11-03 Fernando Perez <fperez@colorado.edu>
5682
5687
5683 * Opened version 0.1.1 for new changes.
5688 * Opened version 0.1.1 for new changes.
5684
5689
5685 * Changed version number to 0.1.0: first 'public' release, sent to
5690 * Changed version number to 0.1.0: first 'public' release, sent to
5686 Nathan and Janko.
5691 Nathan and Janko.
5687
5692
5688 * Lots of small fixes and tweaks.
5693 * Lots of small fixes and tweaks.
5689
5694
5690 * Minor changes to whos format. Now strings are shown, snipped if
5695 * Minor changes to whos format. Now strings are shown, snipped if
5691 too long.
5696 too long.
5692
5697
5693 * Changed ShellServices to work on __main__ so they show up in @who
5698 * Changed ShellServices to work on __main__ so they show up in @who
5694
5699
5695 * Help also works with ? at the end of a line:
5700 * Help also works with ? at the end of a line:
5696 ?sin and sin?
5701 ?sin and sin?
5697 both produce the same effect. This is nice, as often I use the
5702 both produce the same effect. This is nice, as often I use the
5698 tab-complete to find the name of a method, but I used to then have
5703 tab-complete to find the name of a method, but I used to then have
5699 to go to the beginning of the line to put a ? if I wanted more
5704 to go to the beginning of the line to put a ? if I wanted more
5700 info. Now I can just add the ? and hit return. Convenient.
5705 info. Now I can just add the ? and hit return. Convenient.
5701
5706
5702 2001-11-02 Fernando Perez <fperez@colorado.edu>
5707 2001-11-02 Fernando Perez <fperez@colorado.edu>
5703
5708
5704 * Python version check (>=2.1) added.
5709 * Python version check (>=2.1) added.
5705
5710
5706 * Added LazyPython documentation. At this point the docs are quite
5711 * Added LazyPython documentation. At this point the docs are quite
5707 a mess. A cleanup is in order.
5712 a mess. A cleanup is in order.
5708
5713
5709 * Auto-installer created. For some bizarre reason, the zipfiles
5714 * Auto-installer created. For some bizarre reason, the zipfiles
5710 module isn't working on my system. So I made a tar version
5715 module isn't working on my system. So I made a tar version
5711 (hopefully the command line options in various systems won't kill
5716 (hopefully the command line options in various systems won't kill
5712 me).
5717 me).
5713
5718
5714 * Fixes to Struct in genutils. Now all dictionary-like methods are
5719 * Fixes to Struct in genutils. Now all dictionary-like methods are
5715 protected (reasonably).
5720 protected (reasonably).
5716
5721
5717 * Added pager function to genutils and changed ? to print usage
5722 * Added pager function to genutils and changed ? to print usage
5718 note through it (it was too long).
5723 note through it (it was too long).
5719
5724
5720 * Added the LazyPython functionality. Works great! I changed the
5725 * Added the LazyPython functionality. Works great! I changed the
5721 auto-quote escape to ';', it's on home row and next to '. But
5726 auto-quote escape to ';', it's on home row and next to '. But
5722 both auto-quote and auto-paren (still /) escapes are command-line
5727 both auto-quote and auto-paren (still /) escapes are command-line
5723 parameters.
5728 parameters.
5724
5729
5725
5730
5726 2001-11-01 Fernando Perez <fperez@colorado.edu>
5731 2001-11-01 Fernando Perez <fperez@colorado.edu>
5727
5732
5728 * Version changed to 0.0.7. Fairly large change: configuration now
5733 * Version changed to 0.0.7. Fairly large change: configuration now
5729 is all stored in a directory, by default .ipython. There, all
5734 is all stored in a directory, by default .ipython. There, all
5730 config files have normal looking names (not .names)
5735 config files have normal looking names (not .names)
5731
5736
5732 * Version 0.0.6 Released first to Lucas and Archie as a test
5737 * Version 0.0.6 Released first to Lucas and Archie as a test
5733 run. Since it's the first 'semi-public' release, change version to
5738 run. Since it's the first 'semi-public' release, change version to
5734 > 0.0.6 for any changes now.
5739 > 0.0.6 for any changes now.
5735
5740
5736 * Stuff I had put in the ipplib.py changelog:
5741 * Stuff I had put in the ipplib.py changelog:
5737
5742
5738 Changes to InteractiveShell:
5743 Changes to InteractiveShell:
5739
5744
5740 - Made the usage message a parameter.
5745 - Made the usage message a parameter.
5741
5746
5742 - Require the name of the shell variable to be given. It's a bit
5747 - Require the name of the shell variable to be given. It's a bit
5743 of a hack, but allows the name 'shell' not to be hardwired in the
5748 of a hack, but allows the name 'shell' not to be hardwired in the
5744 magic (@) handler, which is problematic b/c it requires
5749 magic (@) handler, which is problematic b/c it requires
5745 polluting the global namespace with 'shell'. This in turn is
5750 polluting the global namespace with 'shell'. This in turn is
5746 fragile: if a user redefines a variable called shell, things
5751 fragile: if a user redefines a variable called shell, things
5747 break.
5752 break.
5748
5753
5749 - magic @: all functions available through @ need to be defined
5754 - magic @: all functions available through @ need to be defined
5750 as magic_<name>, even though they can be called simply as
5755 as magic_<name>, even though they can be called simply as
5751 @<name>. This allows the special command @magic to gather
5756 @<name>. This allows the special command @magic to gather
5752 information automatically about all existing magic functions,
5757 information automatically about all existing magic functions,
5753 even if they are run-time user extensions, by parsing the shell
5758 even if they are run-time user extensions, by parsing the shell
5754 instance __dict__ looking for special magic_ names.
5759 instance __dict__ looking for special magic_ names.
5755
5760
5756 - mainloop: added *two* local namespace parameters. This allows
5761 - mainloop: added *two* local namespace parameters. This allows
5757 the class to differentiate between parameters which were there
5762 the class to differentiate between parameters which were there
5758 before and after command line initialization was processed. This
5763 before and after command line initialization was processed. This
5759 way, later @who can show things loaded at startup by the
5764 way, later @who can show things loaded at startup by the
5760 user. This trick was necessary to make session saving/reloading
5765 user. This trick was necessary to make session saving/reloading
5761 really work: ideally after saving/exiting/reloading a session,
5766 really work: ideally after saving/exiting/reloading a session,
5762 *everything* should look the same, including the output of @who. I
5767 *everything* should look the same, including the output of @who. I
5763 was only able to make this work with this double namespace
5768 was only able to make this work with this double namespace
5764 trick.
5769 trick.
5765
5770
5766 - added a header to the logfile which allows (almost) full
5771 - added a header to the logfile which allows (almost) full
5767 session restoring.
5772 session restoring.
5768
5773
5769 - prepend lines beginning with @ or !, with a and log
5774 - prepend lines beginning with @ or !, with a and log
5770 them. Why? !lines: may be useful to know what you did @lines:
5775 them. Why? !lines: may be useful to know what you did @lines:
5771 they may affect session state. So when restoring a session, at
5776 they may affect session state. So when restoring a session, at
5772 least inform the user of their presence. I couldn't quite get
5777 least inform the user of their presence. I couldn't quite get
5773 them to properly re-execute, but at least the user is warned.
5778 them to properly re-execute, but at least the user is warned.
5774
5779
5775 * Started ChangeLog.
5780 * Started ChangeLog.
@@ -1,477 +1,479
1 ;;; ipython.el --- Adds support for IPython to python-mode.el
1 ;;; ipython.el --- Adds support for IPython to python-mode.el
2
2
3 ;; Copyright (C) 2002, 2003, 2004, 2005 Alexander Schmolck
3 ;; Copyright (C) 2002, 2003, 2004, 2005 Alexander Schmolck
4 ;; Author: Alexander Schmolck
4 ;; Author: Alexander Schmolck
5 ;; Keywords: ipython python languages oop
5 ;; Keywords: ipython python languages oop
6 ;; URL: http://ipython.scipy.org
6 ;; URL: http://ipython.scipy.org
7 ;; Compatibility: Emacs21, XEmacs21
7 ;; Compatibility: Emacs21, XEmacs21
8 ;; FIXME: #$@! INPUT RING
8 ;; FIXME: #$@! INPUT RING
9 (defconst ipython-version "$Revision: 1499 $"
9 (defconst ipython-version "$Revision: 1823 $"
10 "VC version number.")
10 "VC version number.")
11
11
12 ;;; Commentary
12 ;;; Commentary
13 ;; This library makes all the functionality python-mode has when running with
13 ;; This library makes all the functionality python-mode has when running with
14 ;; the normal python-interpreter available for ipython, too. It also enables a
14 ;; the normal python-interpreter available for ipython, too. It also enables a
15 ;; persistent py-shell command history across sessions (if you exit python
15 ;; persistent py-shell command history across sessions (if you exit python
16 ;; with C-d in py-shell) and defines the command `ipython-to-doctest', which
16 ;; with C-d in py-shell) and defines the command `ipython-to-doctest', which
17 ;; can be used to convert bits of a ipython session into something that can be
17 ;; can be used to convert bits of a ipython session into something that can be
18 ;; used for doctests. To install, put this file somewhere in your emacs
18 ;; used for doctests. To install, put this file somewhere in your emacs
19 ;; `load-path' [1] and add the following line to your ~/.emacs file (the first
19 ;; `load-path' [1] and add the following line to your ~/.emacs file (the first
20 ;; line only needed if the default (``"ipython"``) is wrong)::
20 ;; line only needed if the default (``"ipython"``) is wrong)::
21 ;;
21 ;;
22 ;; (setq ipython-command "/SOME-PATH/ipython")
22 ;; (setq ipython-command "/SOME-PATH/ipython")
23 ;; (require 'ipython)
23 ;; (require 'ipython)
24 ;;
24 ;;
25 ;; Ipython will be set as the default python shell, but only if the ipython
25 ;; Ipython will be set as the default python shell, but only if the ipython
26 ;; executable is in the path. For ipython sessions autocompletion with <tab>
26 ;; executable is in the path. For ipython sessions autocompletion with <tab>
27 ;; is also enabled (experimental feature!). Please also note that all the
27 ;; is also enabled (experimental feature!). Please also note that all the
28 ;; terminal functions in py-shell are handled by emacs's comint, **not** by
28 ;; terminal functions in py-shell are handled by emacs's comint, **not** by
29 ;; (i)python, so importing readline etc. will have 0 effect.
29 ;; (i)python, so importing readline etc. will have 0 effect.
30 ;;
30 ;;
31 ;; To start an interactive ipython session run `py-shell' with ``M-x py-shell``
31 ;; To start an interactive ipython session run `py-shell' with ``M-x py-shell``
32 ;; (or the default keybinding ``C-c C-!``).
32 ;; (or the default keybinding ``C-c C-!``).
33 ;;
33 ;;
34 ;; NOTE: This mode is currently somewhat alpha and although I hope that it
34 ;; NOTE: This mode is currently somewhat alpha and although I hope that it
35 ;; will work fine for most cases, doing certain things (like the
35 ;; will work fine for most cases, doing certain things (like the
36 ;; autocompletion and a decent scheme to switch between python interpreters)
36 ;; autocompletion and a decent scheme to switch between python interpreters)
37 ;; properly will also require changes to ipython that will likely have to wait
37 ;; properly will also require changes to ipython that will likely have to wait
38 ;; for a larger rewrite scheduled some time in the future.
38 ;; for a larger rewrite scheduled some time in the future.
39 ;;
39 ;;
40 ;; Also note that you currently NEED THE CVS VERSION OF PYTHON.EL.
40 ;; Also note that you currently NEED THE CVS VERSION OF PYTHON.EL.
41 ;;
41 ;;
42 ;; Further note that I don't know whether this runs under windows or not and
42 ;; Further note that I don't know whether this runs under windows or not and
43 ;; that if it doesn't I can't really help much, not being afflicted myself.
43 ;; that if it doesn't I can't really help much, not being afflicted myself.
44 ;;
44 ;;
45 ;;
45 ;;
46 ;; Hints for effective usage
46 ;; Hints for effective usage
47 ;; -------------------------
47 ;; -------------------------
48 ;;
48 ;;
49 ;; - IMO the best feature by far of the ipython/emacs combo is how much easier it
49 ;; - IMO the best feature by far of the ipython/emacs combo is how much easier it
50 ;; makes it to find and fix bugs thanks to the ``%pdb on``/ pdbtrack combo. Try
50 ;; makes it to find and fix bugs thanks to the ``%pdb on``/ pdbtrack combo. Try
51 ;; it: first in the ipython to shell do ``%pdb on`` then do something that will
51 ;; it: first in the ipython to shell do ``%pdb on`` then do something that will
52 ;; raise an exception (FIXME nice example) -- and be amazed how easy it is to
52 ;; raise an exception (FIXME nice example) -- and be amazed how easy it is to
53 ;; inspect the live objects in each stack frames and to jump to the
53 ;; inspect the live objects in each stack frames and to jump to the
54 ;; corresponding sourcecode locations as you walk up and down the stack trace
54 ;; corresponding sourcecode locations as you walk up and down the stack trace
55 ;; (even without ``%pdb on`` you can always use ``C-c -`` (`py-up-exception')
55 ;; (even without ``%pdb on`` you can always use ``C-c -`` (`py-up-exception')
56 ;; to jump to the corresponding source code locations).
56 ;; to jump to the corresponding source code locations).
57 ;;
57 ;;
58 ;; - emacs gives you much more powerful commandline editing and output searching
58 ;; - emacs gives you much more powerful commandline editing and output searching
59 ;; capabilities than ipython-standalone -- isearch is your friend if you
59 ;; capabilities than ipython-standalone -- isearch is your friend if you
60 ;; quickly want to print 'DEBUG ...' to stdout out etc.
60 ;; quickly want to print 'DEBUG ...' to stdout out etc.
61 ;;
61 ;;
62 ;; - This is not really specific to ipython, but for more convenient history
62 ;; - This is not really specific to ipython, but for more convenient history
63 ;; access you might want to add something like the following to *the beggining*
63 ;; access you might want to add something like the following to *the beggining*
64 ;; of your ``.emacs`` (if you want behavior that's more similar to stand-alone
64 ;; of your ``.emacs`` (if you want behavior that's more similar to stand-alone
65 ;; ipython, you can change ``meta p`` etc. for ``control p``)::
65 ;; ipython, you can change ``meta p`` etc. for ``control p``)::
66 ;;
66 ;;
67 ;; (require 'comint)
67 ;; (require 'comint)
68 ;; (define-key comint-mode-map [(meta p)]
68 ;; (define-key comint-mode-map [(meta p)]
69 ;; 'comint-previous-matching-input-from-input)
69 ;; 'comint-previous-matching-input-from-input)
70 ;; (define-key comint-mode-map [(meta n)]
70 ;; (define-key comint-mode-map [(meta n)]
71 ;; 'comint-next-matching-input-from-input)
71 ;; 'comint-next-matching-input-from-input)
72 ;; (define-key comint-mode-map [(control meta n)]
72 ;; (define-key comint-mode-map [(control meta n)]
73 ;; 'comint-next-input)
73 ;; 'comint-next-input)
74 ;; (define-key comint-mode-map [(control meta p)]
74 ;; (define-key comint-mode-map [(control meta p)]
75 ;; 'comint-previous-input)
75 ;; 'comint-previous-input)
76 ;;
76 ;;
77 ;; - Be aware that if you customize py-python-command previously, this value
77 ;; - Be aware that if you customize py-python-command previously, this value
78 ;; will override what ipython.el does (because loading the customization
78 ;; will override what ipython.el does (because loading the customization
79 ;; variables comes later).
79 ;; variables comes later).
80 ;;
80 ;;
81 ;; Please send comments and feedback to the ipython-list
81 ;; Please send comments and feedback to the ipython-list
82 ;; (<ipython-user@scipy.net>) where I (a.s.) or someone else will try to
82 ;; (<ipython-user@scipy.net>) where I (a.s.) or someone else will try to
83 ;; answer them (it helps if you specify your emacs version, OS etc;
83 ;; answer them (it helps if you specify your emacs version, OS etc;
84 ;; familiarity with <http://www.catb.org/~esr/faqs/smart-questions.html> might
84 ;; familiarity with <http://www.catb.org/~esr/faqs/smart-questions.html> might
85 ;; speed up things further).
85 ;; speed up things further).
86 ;;
86 ;;
87 ;; Footnotes:
87 ;; Footnotes:
88 ;;
88 ;;
89 ;; [1] If you don't know what `load-path' is, C-h v load-path will tell
89 ;; [1] If you don't know what `load-path' is, C-h v load-path will tell
90 ;; you; if required you can also add a new directory. So assuming that
90 ;; you; if required you can also add a new directory. So assuming that
91 ;; ipython.el resides in ~/el/, put this in your emacs:
91 ;; ipython.el resides in ~/el/, put this in your emacs:
92 ;;
92 ;;
93 ;;
93 ;;
94 ;; (add-to-list 'load-path "~/el")
94 ;; (add-to-list 'load-path "~/el")
95 ;; (setq ipython-command "/some-path/ipython")
95 ;; (setq ipython-command "/some-path/ipython")
96 ;; (require 'ipython)
96 ;; (require 'ipython)
97 ;;
97 ;;
98 ;;
98 ;;
99 ;;
99 ;;
100 ;;
100 ;;
101 ;; TODO:
101 ;; TODO:
102 ;; - do autocompletion properly
102 ;; - do autocompletion properly
103 ;; - implement a proper switching between python interpreters
103 ;; - implement a proper switching between python interpreters
104 ;;
104 ;;
105 ;; BUGS:
105 ;; BUGS:
106 ;; - neither::
106 ;; - neither::
107 ;;
107 ;;
108 ;; (py-shell "-c print 'FOOBAR'")
108 ;; (py-shell "-c print 'FOOBAR'")
109 ;;
109 ;;
110 ;; nor::
110 ;; nor::
111 ;;
111 ;;
112 ;; (let ((py-python-command-args (append py-python-command-args
112 ;; (let ((py-python-command-args (append py-python-command-args
113 ;; '("-c" "print 'FOOBAR'"))))
113 ;; '("-c" "print 'FOOBAR'"))))
114 ;; (py-shell))
114 ;; (py-shell))
115 ;;
115 ;;
116 ;; seem to print anything as they should
116 ;; seem to print anything as they should
117 ;;
117 ;;
118 ;; - look into init priority issues with `py-python-command' (if it's set
118 ;; - look into init priority issues with `py-python-command' (if it's set
119 ;; via custom)
119 ;; via custom)
120
120
121
121
122 ;;; Code
122 ;;; Code
123 (require 'cl)
123 (require 'cl)
124 (require 'shell)
124 (require 'shell)
125 (require 'executable)
125 (require 'executable)
126 (require 'ansi-color)
126 (require 'ansi-color)
127
127
128 (defcustom ipython-command "ipython"
128 (defcustom ipython-command "ipython"
129 "*Shell command used to start ipython."
129 "*Shell command used to start ipython."
130 :type 'string
130 :type 'string
131 :group 'python)
131 :group 'python)
132
132
133 ;; Users can set this to nil
133 ;; Users can set this to nil
134 (defvar py-shell-initial-switch-buffers t
134 (defvar py-shell-initial-switch-buffers t
135 "If nil, don't switch to the *Python* buffer on the first call to
135 "If nil, don't switch to the *Python* buffer on the first call to
136 `py-shell'.")
136 `py-shell'.")
137
137
138 (defvar ipython-backup-of-py-python-command nil
138 (defvar ipython-backup-of-py-python-command nil
139 "HACK")
139 "HACK")
140
140
141
141
142 (defvar ipython-de-input-prompt-regexp "\\(?:
142 (defvar ipython-de-input-prompt-regexp "\\(?:
143 In \\[[0-9]+\\]: *.*
143 In \\[[0-9]+\\]: *.*
144 ----+> \\(.*
144 ----+> \\(.*
145 \\)[\n]?\\)\\|\\(?:
145 \\)[\n]?\\)\\|\\(?:
146 In \\[[0-9]+\\]: *\\(.*
146 In \\[[0-9]+\\]: *\\(.*
147 \\)\\)\\|^[ ]\\{3\\}[.]\\{3,\\}: *\\(.*
147 \\)\\)\\|^[ ]\\{3\\}[.]\\{3,\\}: *\\(.*
148 \\)"
148 \\)"
149 "A regular expression to match the IPython input prompt and the python
149 "A regular expression to match the IPython input prompt and the python
150 command after it. The first match group is for a command that is rewritten,
150 command after it. The first match group is for a command that is rewritten,
151 the second for a 'normal' command, and the third for a multiline command.")
151 the second for a 'normal' command, and the third for a multiline command.")
152 (defvar ipython-de-output-prompt-regexp "^Out\\[[0-9]+\\]: "
152 (defvar ipython-de-output-prompt-regexp "^Out\\[[0-9]+\\]: "
153 "A regular expression to match the output prompt of IPython.")
153 "A regular expression to match the output prompt of IPython.")
154
154
155
155
156 (if (not (executable-find ipython-command))
156 (if (not (executable-find ipython-command))
157 (message (format "Can't find executable %s - ipython.el *NOT* activated!!!"
157 (message (format "Can't find executable %s - ipython.el *NOT* activated!!!"
158 ipython-command))
158 ipython-command))
159 ;; XXX load python-mode, so that we can screw around with its variables
159 ;; XXX load python-mode, so that we can screw around with its variables
160 ;; this has the disadvantage that python-mode is loaded even if no
160 ;; this has the disadvantage that python-mode is loaded even if no
161 ;; python-file is ever edited etc. but it means that `py-shell' works
161 ;; python-file is ever edited etc. but it means that `py-shell' works
162 ;; without loading a python-file first. Obviously screwing around with
162 ;; without loading a python-file first. Obviously screwing around with
163 ;; python-mode's variables like this is a mess, but well.
163 ;; python-mode's variables like this is a mess, but well.
164 (require 'python-mode)
164 (require 'python-mode)
165 ;; turn on ansi colors for ipython and activate completion
165 ;; turn on ansi colors for ipython and activate completion
166 (defun ipython-shell-hook ()
166 (defun ipython-shell-hook ()
167 ;; the following is to synchronize dir-changes
167 ;; the following is to synchronize dir-changes
168 (make-local-variable 'shell-dirstack)
168 (make-local-variable 'shell-dirstack)
169 (setq shell-dirstack nil)
169 (setq shell-dirstack nil)
170 (make-local-variable 'shell-last-dir)
170 (make-local-variable 'shell-last-dir)
171 (setq shell-last-dir nil)
171 (setq shell-last-dir nil)
172 (make-local-variable 'shell-dirtrackp)
172 (make-local-variable 'shell-dirtrackp)
173 (setq shell-dirtrackp t)
173 (setq shell-dirtrackp t)
174 (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t)
174 (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t)
175
175
176 (ansi-color-for-comint-mode-on)
176 (ansi-color-for-comint-mode-on)
177 (define-key py-shell-map [tab] 'ipython-complete)
177 (define-key py-shell-map [tab] 'ipython-complete)
178 ;;XXX this is really just a cheap hack, it only completes symbols in the
178 ;;XXX this is really just a cheap hack, it only completes symbols in the
179 ;;interactive session -- useful nonetheless.
179 ;;interactive session -- useful nonetheless.
180 (define-key py-mode-map [(meta tab)] 'ipython-complete)
180 (define-key py-mode-map [(meta tab)] 'ipython-complete)
181
181
182 )
182 )
183 (add-hook 'py-shell-hook 'ipython-shell-hook)
183 (add-hook 'py-shell-hook 'ipython-shell-hook)
184 ;; Regular expression that describes tracebacks for IPython in context and
184 ;; Regular expression that describes tracebacks for IPython in context and
185 ;; verbose mode.
185 ;; verbose mode.
186
186
187 ;;Adapt python-mode settings for ipython.
187 ;;Adapt python-mode settings for ipython.
188 ;; (this works for %xmode 'verbose' or 'context')
188 ;; (this works for %xmode 'verbose' or 'context')
189
189
190 ;; XXX putative regexps for syntax errors; unfortunately the
190 ;; XXX putative regexps for syntax errors; unfortunately the
191 ;; current python-mode traceback-line-re scheme is too primitive,
191 ;; current python-mode traceback-line-re scheme is too primitive,
192 ;; so it's either matching syntax errors, *or* everything else
192 ;; so it's either matching syntax errors, *or* everything else
193 ;; (XXX: should ask Fernando for a change)
193 ;; (XXX: should ask Fernando for a change)
194 ;;"^ File \"\\(.*?\\)\", line \\([0-9]+\\).*\n.*\n.*\nSyntaxError:"
194 ;;"^ File \"\\(.*?\\)\", line \\([0-9]+\\).*\n.*\n.*\nSyntaxError:"
195 ;;^ File \"\\(.*?\\)\", line \\([0-9]+\\)"
195 ;;^ File \"\\(.*?\\)\", line \\([0-9]+\\)"
196
196
197 (setq py-traceback-line-re
197 (setq py-traceback-line-re
198 "\\(^[^\t ].+?\\.py\\).*\n +[0-9]+[^\00]*?\n-+> \\([0-9]+\\) +")
198 "\\(^[^\t ].+?\\.py\\).*\n +[0-9]+[^\00]*?\n-+> \\([0-9]+\\) +")
199
199
200 ;; Recognize the ipython pdb, whose prompt is 'ipdb>' instead of '(Pdb)'
200 ;; Recognize the ipython pdb, whose prompt is 'ipdb>' or 'ipydb>'
201 (setq py-pdbtrack-input-prompt "\n[(<]*[Ii]?[Pp]db[>)]+ ")
201 ;;instead of '(Pdb)'
202 (setq py-pdbtrack-input-prompt "\n[(<]*[Ii]?[Pp]y?db[>)]+ ")
203 (setq py-pydbtrack-input-prompt "\n[(]*ipydb[>)]+ ")
202
204
203 (setq py-shell-input-prompt-1-regexp "^In \\[[0-9]+\\]: *"
205 (setq py-shell-input-prompt-1-regexp "^In \\[[0-9]+\\]: *"
204 py-shell-input-prompt-2-regexp "^ [.][.][.]+: *" )
206 py-shell-input-prompt-2-regexp "^ [.][.][.]+: *" )
205 ;; select a suitable color-scheme
207 ;; select a suitable color-scheme
206 (unless (member "-colors" py-python-command-args)
208 (unless (member "-colors" py-python-command-args)
207 (setq py-python-command-args
209 (setq py-python-command-args
208 (nconc py-python-command-args
210 (nconc py-python-command-args
209 (list "-colors"
211 (list "-colors"
210 (cond
212 (cond
211 ((eq frame-background-mode 'dark)
213 ((eq frame-background-mode 'dark)
212 "DarkBG")
214 "DarkBG")
213 ((eq frame-background-mode 'light)
215 ((eq frame-background-mode 'light)
214 "LightBG")
216 "LightBG")
215 (t ; default (backg-mode isn't always set by XEmacs)
217 (t ; default (backg-mode isn't always set by XEmacs)
216 "LightBG"))))))
218 "LightBG"))))))
217 (unless (equal ipython-backup-of-py-python-command py-python-command)
219 (unless (equal ipython-backup-of-py-python-command py-python-command)
218 (setq ipython-backup-of-py-python-command py-python-command))
220 (setq ipython-backup-of-py-python-command py-python-command))
219 (setq py-python-command ipython-command))
221 (setq py-python-command ipython-command))
220
222
221
223
222 ;; MODIFY py-shell so that it loads the editing history
224 ;; MODIFY py-shell so that it loads the editing history
223 (defadvice py-shell (around py-shell-with-history)
225 (defadvice py-shell (around py-shell-with-history)
224 "Add persistent command-history support (in
226 "Add persistent command-history support (in
225 $PYTHONHISTORY (or \"~/.ipython/history\", if we use IPython)). Also, if
227 $PYTHONHISTORY (or \"~/.ipython/history\", if we use IPython)). Also, if
226 `py-shell-initial-switch-buffers' is nil, it only switches to *Python* if that
228 `py-shell-initial-switch-buffers' is nil, it only switches to *Python* if that
227 buffer already exists."
229 buffer already exists."
228 (if (comint-check-proc "*Python*")
230 (if (comint-check-proc "*Python*")
229 ad-do-it
231 ad-do-it
230 (setq comint-input-ring-file-name
232 (setq comint-input-ring-file-name
231 (if (string-equal py-python-command ipython-command)
233 (if (string-equal py-python-command ipython-command)
232 (concat (or (getenv "IPYTHONDIR") "~/.ipython") "/history")
234 (concat (or (getenv "IPYTHONDIR") "~/.ipython") "/history")
233 (or (getenv "PYTHONHISTORY") "~/.python-history.py")))
235 (or (getenv "PYTHONHISTORY") "~/.python-history.py")))
234 (comint-read-input-ring t)
236 (comint-read-input-ring t)
235 (let ((buf (current-buffer)))
237 (let ((buf (current-buffer)))
236 ad-do-it
238 ad-do-it
237 (unless py-shell-initial-switch-buffers
239 (unless py-shell-initial-switch-buffers
238 (switch-to-buffer-other-window buf)))))
240 (switch-to-buffer-other-window buf)))))
239 (ad-activate 'py-shell)
241 (ad-activate 'py-shell)
240 ;; (defadvice py-execute-region (before py-execute-buffer-ensure-process)
242 ;; (defadvice py-execute-region (before py-execute-buffer-ensure-process)
241 ;; "HACK: test that ipython is already running before executing something.
243 ;; "HACK: test that ipython is already running before executing something.
242 ;; Doing this properly seems not worth the bother (unless people actually
244 ;; Doing this properly seems not worth the bother (unless people actually
243 ;; request it)."
245 ;; request it)."
244 ;; (unless (comint-check-proc "*Python*")
246 ;; (unless (comint-check-proc "*Python*")
245 ;; (error "Sorry you have to first do M-x py-shell to send something to ipython.")))
247 ;; (error "Sorry you have to first do M-x py-shell to send something to ipython.")))
246 ;; (ad-activate 'py-execute-region)
248 ;; (ad-activate 'py-execute-region)
247
249
248 (defadvice py-execute-region (around py-execute-buffer-ensure-process)
250 (defadvice py-execute-region (around py-execute-buffer-ensure-process)
249 "HACK: if `py-shell' is not active or ASYNC is explicitly desired, fall back
251 "HACK: if `py-shell' is not active or ASYNC is explicitly desired, fall back
250 to python instead of ipython."
252 to python instead of ipython."
251 (let ((py-python-command (if (and (comint-check-proc "*Python*") (not async))
253 (let ((py-python-command (if (and (comint-check-proc "*Python*") (not async))
252 py-python-command
254 py-python-command
253 ipython-backup-of-py-python-command)))
255 ipython-backup-of-py-python-command)))
254 ad-do-it))
256 ad-do-it))
255 (ad-activate 'py-execute-region)
257 (ad-activate 'py-execute-region)
256
258
257 (defun ipython-to-doctest (start end)
259 (defun ipython-to-doctest (start end)
258 "Transform a cut-and-pasted bit from an IPython session into something that
260 "Transform a cut-and-pasted bit from an IPython session into something that
259 looks like it came from a normal interactive python session, so that it can
261 looks like it came from a normal interactive python session, so that it can
260 be used in doctests. Example:
262 be used in doctests. Example:
261
263
262
264
263 In [1]: import sys
265 In [1]: import sys
264
266
265 In [2]: sys.stdout.write 'Hi!\n'
267 In [2]: sys.stdout.write 'Hi!\n'
266 ------> sys.stdout.write ('Hi!\n')
268 ------> sys.stdout.write ('Hi!\n')
267 Hi!
269 Hi!
268
270
269 In [3]: 3 + 4
271 In [3]: 3 + 4
270 Out[3]: 7
272 Out[3]: 7
271
273
272 gets converted to:
274 gets converted to:
273
275
274 >>> import sys
276 >>> import sys
275 >>> sys.stdout.write ('Hi!\n')
277 >>> sys.stdout.write ('Hi!\n')
276 Hi!
278 Hi!
277 >>> 3 + 4
279 >>> 3 + 4
278 7
280 7
279
281
280 "
282 "
281 (interactive "*r\n")
283 (interactive "*r\n")
282 ;(message (format "###DEBUG s:%de:%d" start end))
284 ;(message (format "###DEBUG s:%de:%d" start end))
283 (save-excursion
285 (save-excursion
284 (save-match-data
286 (save-match-data
285 ;; replace ``In [3]: bla`` with ``>>> bla`` and
287 ;; replace ``In [3]: bla`` with ``>>> bla`` and
286 ;; ``... : bla`` with ``... bla``
288 ;; ``... : bla`` with ``... bla``
287 (goto-char start)
289 (goto-char start)
288 (while (re-search-forward ipython-de-input-prompt-regexp end t)
290 (while (re-search-forward ipython-de-input-prompt-regexp end t)
289 ;(message "finding 1")
291 ;(message "finding 1")
290 (cond ((match-string 3) ;continued
292 (cond ((match-string 3) ;continued
291 (replace-match "... \\3" t nil))
293 (replace-match "... \\3" t nil))
292 (t
294 (t
293 (replace-match ">>> \\1\\2" t nil))))
295 (replace-match ">>> \\1\\2" t nil))))
294 ;; replace ``
296 ;; replace ``
295 (goto-char start)
297 (goto-char start)
296 (while (re-search-forward ipython-de-output-prompt-regexp end t)
298 (while (re-search-forward ipython-de-output-prompt-regexp end t)
297 (replace-match "" t nil)))))
299 (replace-match "" t nil)))))
298
300
299 (defvar ipython-completion-command-string
301 (defvar ipython-completion-command-string
300 "print ';'.join(__IP.Completer.all_completions('%s')) #PYTHON-MODE SILENT\n"
302 "print ';'.join(__IP.Completer.all_completions('%s')) #PYTHON-MODE SILENT\n"
301 "The string send to ipython to query for all possible completions")
303 "The string send to ipython to query for all possible completions")
302
304
303
305
304 ;; xemacs doesn't have `comint-preoutput-filter-functions' so we'll try the
306 ;; xemacs doesn't have `comint-preoutput-filter-functions' so we'll try the
305 ;; following wonderful hack to work around this case
307 ;; following wonderful hack to work around this case
306 (if (featurep 'xemacs)
308 (if (featurep 'xemacs)
307 ;;xemacs
309 ;;xemacs
308 (defun ipython-complete ()
310 (defun ipython-complete ()
309 "Try to complete the python symbol before point. Only knows about the stuff
311 "Try to complete the python symbol before point. Only knows about the stuff
310 in the current *Python* session."
312 in the current *Python* session."
311 (interactive)
313 (interactive)
312 (let* ((ugly-return nil)
314 (let* ((ugly-return nil)
313 (sep ";")
315 (sep ";")
314 (python-process (or (get-buffer-process (current-buffer))
316 (python-process (or (get-buffer-process (current-buffer))
315 ;XXX hack for .py buffers
317 ;XXX hack for .py buffers
316 (get-process py-which-bufname)))
318 (get-process py-which-bufname)))
317 ;; XXX currently we go backwards to find the beginning of an
319 ;; XXX currently we go backwards to find the beginning of an
318 ;; expression part; a more powerful approach in the future might be
320 ;; expression part; a more powerful approach in the future might be
319 ;; to let ipython have the complete line, so that context can be used
321 ;; to let ipython have the complete line, so that context can be used
320 ;; to do things like filename completion etc.
322 ;; to do things like filename completion etc.
321 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
323 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
322 (point)))
324 (point)))
323 (end (point))
325 (end (point))
324 (pattern (buffer-substring-no-properties beg end))
326 (pattern (buffer-substring-no-properties beg end))
325 (completions nil)
327 (completions nil)
326 (completion-table nil)
328 (completion-table nil)
327 completion
329 completion
328 (comint-output-filter-functions
330 (comint-output-filter-functions
329 (append comint-output-filter-functions
331 (append comint-output-filter-functions
330 '(ansi-color-filter-apply
332 '(ansi-color-filter-apply
331 (lambda (string)
333 (lambda (string)
332 ;(message (format "DEBUG filtering: %s" string))
334 ;(message (format "DEBUG filtering: %s" string))
333 (setq ugly-return (concat ugly-return string))
335 (setq ugly-return (concat ugly-return string))
334 (delete-region comint-last-output-start
336 (delete-region comint-last-output-start
335 (process-mark (get-buffer-process (current-buffer)))))))))
337 (process-mark (get-buffer-process (current-buffer)))))))))
336 ;(message (format "#DEBUG pattern: '%s'" pattern))
338 ;(message (format "#DEBUG pattern: '%s'" pattern))
337 (process-send-string python-process
339 (process-send-string python-process
338 (format ipython-completion-command-string pattern))
340 (format ipython-completion-command-string pattern))
339 (accept-process-output python-process)
341 (accept-process-output python-process)
340 ;(message (format "DEBUG return: %s" ugly-return))
342 ;(message (format "DEBUG return: %s" ugly-return))
341 (setq completions
343 (setq completions
342 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
344 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
343 (setq completion-table (loop for str in completions
345 (setq completion-table (loop for str in completions
344 collect (list str nil)))
346 collect (list str nil)))
345 (setq completion (try-completion pattern completion-table))
347 (setq completion (try-completion pattern completion-table))
346 (cond ((eq completion t))
348 (cond ((eq completion t))
347 ((null completion)
349 ((null completion)
348 (message "Can't find completion for \"%s\"" pattern)
350 (message "Can't find completion for \"%s\"" pattern)
349 (ding))
351 (ding))
350 ((not (string= pattern completion))
352 ((not (string= pattern completion))
351 (delete-region beg end)
353 (delete-region beg end)
352 (insert completion))
354 (insert completion))
353 (t
355 (t
354 (message "Making completion list...")
356 (message "Making completion list...")
355 (with-output-to-temp-buffer "*Python Completions*"
357 (with-output-to-temp-buffer "*Python Completions*"
356 (display-completion-list (all-completions pattern completion-table)))
358 (display-completion-list (all-completions pattern completion-table)))
357 (message "Making completion list...%s" "done")))))
359 (message "Making completion list...%s" "done")))))
358 ;; emacs
360 ;; emacs
359 (defun ipython-complete ()
361 (defun ipython-complete ()
360 "Try to complete the python symbol before point. Only knows about the stuff
362 "Try to complete the python symbol before point. Only knows about the stuff
361 in the current *Python* session."
363 in the current *Python* session."
362 (interactive)
364 (interactive)
363 (let* ((ugly-return nil)
365 (let* ((ugly-return nil)
364 (sep ";")
366 (sep ";")
365 (python-process (or (get-buffer-process (current-buffer))
367 (python-process (or (get-buffer-process (current-buffer))
366 ;XXX hack for .py buffers
368 ;XXX hack for .py buffers
367 (get-process py-which-bufname)))
369 (get-process py-which-bufname)))
368 ;; XXX currently we go backwards to find the beginning of an
370 ;; XXX currently we go backwards to find the beginning of an
369 ;; expression part; a more powerful approach in the future might be
371 ;; expression part; a more powerful approach in the future might be
370 ;; to let ipython have the complete line, so that context can be used
372 ;; to let ipython have the complete line, so that context can be used
371 ;; to do things like filename completion etc.
373 ;; to do things like filename completion etc.
372 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
374 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
373 (point)))
375 (point)))
374 (end (point))
376 (end (point))
375 (pattern (buffer-substring-no-properties beg end))
377 (pattern (buffer-substring-no-properties beg end))
376 (completions nil)
378 (completions nil)
377 (completion-table nil)
379 (completion-table nil)
378 completion
380 completion
379 (comint-preoutput-filter-functions
381 (comint-preoutput-filter-functions
380 (append comint-preoutput-filter-functions
382 (append comint-preoutput-filter-functions
381 '(ansi-color-filter-apply
383 '(ansi-color-filter-apply
382 (lambda (string)
384 (lambda (string)
383 (setq ugly-return (concat ugly-return string))
385 (setq ugly-return (concat ugly-return string))
384 "")))))
386 "")))))
385 (process-send-string python-process
387 (process-send-string python-process
386 (format ipython-completion-command-string pattern))
388 (format ipython-completion-command-string pattern))
387 (accept-process-output python-process)
389 (accept-process-output python-process)
388 (setq completions
390 (setq completions
389 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
391 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
390 ;(message (format "DEBUG completions: %S" completions))
392 ;(message (format "DEBUG completions: %S" completions))
391 (setq completion-table (loop for str in completions
393 (setq completion-table (loop for str in completions
392 collect (list str nil)))
394 collect (list str nil)))
393 (setq completion (try-completion pattern completion-table))
395 (setq completion (try-completion pattern completion-table))
394 (cond ((eq completion t))
396 (cond ((eq completion t))
395 ((null completion)
397 ((null completion)
396 (message "Can't find completion for \"%s\"" pattern)
398 (message "Can't find completion for \"%s\"" pattern)
397 (ding))
399 (ding))
398 ((not (string= pattern completion))
400 ((not (string= pattern completion))
399 (delete-region beg end)
401 (delete-region beg end)
400 (insert completion))
402 (insert completion))
401 (t
403 (t
402 (message "Making completion list...")
404 (message "Making completion list...")
403 (with-output-to-temp-buffer "*IPython Completions*"
405 (with-output-to-temp-buffer "*IPython Completions*"
404 (display-completion-list (all-completions pattern completion-table)))
406 (display-completion-list (all-completions pattern completion-table)))
405 (message "Making completion list...%s" "done")))))
407 (message "Making completion list...%s" "done")))))
406 )
408 )
407
409
408 ;;; autoindent support: patch sent in by Jin Liu <m.liu.jin@gmail.com>,
410 ;;; autoindent support: patch sent in by Jin Liu <m.liu.jin@gmail.com>,
409 ;;; originally written by doxgen@newsmth.net
411 ;;; originally written by doxgen@newsmth.net
410 ;;; Minor modifications by fperez for xemacs compatibility.
412 ;;; Minor modifications by fperez for xemacs compatibility.
411
413
412 (defvar ipython-autoindent t
414 (defvar ipython-autoindent t
413 "If non-nil, enable autoindent for IPython shell through python-mode.")
415 "If non-nil, enable autoindent for IPython shell through python-mode.")
414
416
415 (defvar ipython-indenting-buffer-name "*IPython Indentation Calculation*"
417 (defvar ipython-indenting-buffer-name "*IPython Indentation Calculation*"
416 "Temporary buffer for indenting multiline statement.")
418 "Temporary buffer for indenting multiline statement.")
417
419
418 (defun ipython-get-indenting-buffer ()
420 (defun ipython-get-indenting-buffer ()
419 "Return a temporary buffer set in python-mode. Create one if necessary."
421 "Return a temporary buffer set in python-mode. Create one if necessary."
420 (let ((buf (get-buffer-create ipython-indenting-buffer-name)))
422 (let ((buf (get-buffer-create ipython-indenting-buffer-name)))
421 (set-buffer buf)
423 (set-buffer buf)
422 (unless (eq major-mode 'python-mode)
424 (unless (eq major-mode 'python-mode)
423 (python-mode))
425 (python-mode))
424 buf))
426 buf))
425
427
426 (defvar ipython-indentation-string nil
428 (defvar ipython-indentation-string nil
427 "Indentation for the next line in a multiline statement.")
429 "Indentation for the next line in a multiline statement.")
428
430
429 (defun ipython-send-and-indent ()
431 (defun ipython-send-and-indent ()
430 "Send the current line to IPython, and calculate the indentation for
432 "Send the current line to IPython, and calculate the indentation for
431 the next line."
433 the next line."
432 (interactive)
434 (interactive)
433 (if ipython-autoindent
435 (if ipython-autoindent
434 (let ((line (buffer-substring (point-at-bol) (point)))
436 (let ((line (buffer-substring (point-at-bol) (point)))
435 (after-prompt1)
437 (after-prompt1)
436 (after-prompt2))
438 (after-prompt2))
437 (save-excursion
439 (save-excursion
438 (comint-bol t)
440 (comint-bol t)
439 (if (looking-at py-shell-input-prompt-1-regexp)
441 (if (looking-at py-shell-input-prompt-1-regexp)
440 (setq after-prompt1 t)
442 (setq after-prompt1 t)
441 (setq after-prompt2 (looking-at py-shell-input-prompt-2-regexp)))
443 (setq after-prompt2 (looking-at py-shell-input-prompt-2-regexp)))
442 (with-current-buffer (ipython-get-indenting-buffer)
444 (with-current-buffer (ipython-get-indenting-buffer)
443 (when after-prompt1
445 (when after-prompt1
444 (erase-buffer))
446 (erase-buffer))
445 (when (or after-prompt1 after-prompt2)
447 (when (or after-prompt1 after-prompt2)
446 (delete-region (point-at-bol) (point))
448 (delete-region (point-at-bol) (point))
447 (insert line)
449 (insert line)
448 (newline-and-indent))))))
450 (newline-and-indent))))))
449 ;; send input line to ipython interpreter
451 ;; send input line to ipython interpreter
450 (comint-send-input))
452 (comint-send-input))
451
453
452 (defun ipython-indentation-hook (string)
454 (defun ipython-indentation-hook (string)
453 "Insert indentation string if py-shell-input-prompt-2-regexp
455 "Insert indentation string if py-shell-input-prompt-2-regexp
454 matches last process output."
456 matches last process output."
455 (let* ((start-marker (or comint-last-output-start
457 (let* ((start-marker (or comint-last-output-start
456 (point-min-marker)))
458 (point-min-marker)))
457 (end-marker (process-mark (get-buffer-process (current-buffer))))
459 (end-marker (process-mark (get-buffer-process (current-buffer))))
458 (text (ansi-color-filter-apply (buffer-substring start-marker end-marker))))
460 (text (ansi-color-filter-apply (buffer-substring start-marker end-marker))))
459 ;; XXX if `text' matches both pattern, it MUST be the last prompt-2
461 ;; XXX if `text' matches both pattern, it MUST be the last prompt-2
460 (when (and (string-match py-shell-input-prompt-2-regexp text)
462 (when (and (string-match py-shell-input-prompt-2-regexp text)
461 (not (string-match "\n$" text)))
463 (not (string-match "\n$" text)))
462 (with-current-buffer (ipython-get-indenting-buffer)
464 (with-current-buffer (ipython-get-indenting-buffer)
463 (setq ipython-indentation-string
465 (setq ipython-indentation-string
464 (buffer-substring (point-at-bol) (point))))
466 (buffer-substring (point-at-bol) (point))))
465 (goto-char end-marker)
467 (goto-char end-marker)
466 (insert ipython-indentation-string)
468 (insert ipython-indentation-string)
467 (setq ipython-indentation-string nil))))
469 (setq ipython-indentation-string nil))))
468
470
469 (add-hook 'py-shell-hook
471 (add-hook 'py-shell-hook
470 (lambda ()
472 (lambda ()
471 (add-hook 'comint-output-filter-functions
473 (add-hook 'comint-output-filter-functions
472 'ipython-indentation-hook)))
474 'ipython-indentation-hook)))
473
475
474 (define-key py-shell-map (kbd "RET") 'ipython-send-and-indent)
476 (define-key py-shell-map (kbd "RET") 'ipython-send-and-indent)
475 ;;; / end autoindent support
477 ;;; / end autoindent support
476
478
477 (provide 'ipython)
479 (provide 'ipython)
General Comments 0
You need to be logged in to leave comments. Login now