##// END OF EJS Templates
fix tab-completion bug in embedded ipython reported by Arnd
fperez -
Show More
@@ -1,556 +1,558 b''
1 """Word completion for IPython.
1 """Word completion for IPython.
2
2
3 This module is a fork of the rlcompleter module in the Python standard
3 This module is a fork of the rlcompleter module in the Python standard
4 library. The original enhancements made to rlcompleter have been sent
4 library. The original enhancements made to rlcompleter have been sent
5 upstream and were accepted as of Python 2.3, but we need a lot more
5 upstream and were accepted as of Python 2.3, but we need a lot more
6 functionality specific to IPython, so this module will continue to live as an
6 functionality specific to IPython, so this module will continue to live as an
7 IPython-specific utility.
7 IPython-specific utility.
8
8
9 ---------------------------------------------------------------------------
9 ---------------------------------------------------------------------------
10 Original rlcompleter documentation:
10 Original rlcompleter documentation:
11
11
12 This requires the latest extension to the readline module (the
12 This requires the latest extension to the readline module (the
13 completes keywords, built-ins and globals in __main__; when completing
13 completes keywords, built-ins and globals in __main__; when completing
14 NAME.NAME..., it evaluates (!) the expression up to the last dot and
14 NAME.NAME..., it evaluates (!) the expression up to the last dot and
15 completes its attributes.
15 completes its attributes.
16
16
17 It's very cool to do "import string" type "string.", hit the
17 It's very cool to do "import string" type "string.", hit the
18 completion key (twice), and see the list of names defined by the
18 completion key (twice), and see the list of names defined by the
19 string module!
19 string module!
20
20
21 Tip: to use the tab key as the completion key, call
21 Tip: to use the tab key as the completion key, call
22
22
23 readline.parse_and_bind("tab: complete")
23 readline.parse_and_bind("tab: complete")
24
24
25 Notes:
25 Notes:
26
26
27 - Exceptions raised by the completer function are *ignored* (and
27 - Exceptions raised by the completer function are *ignored* (and
28 generally cause the completion to fail). This is a feature -- since
28 generally cause the completion to fail). This is a feature -- since
29 readline sets the tty device in raw (or cbreak) mode, printing a
29 readline sets the tty device in raw (or cbreak) mode, printing a
30 traceback wouldn't work well without some complicated hoopla to save,
30 traceback wouldn't work well without some complicated hoopla to save,
31 reset and restore the tty state.
31 reset and restore the tty state.
32
32
33 - The evaluation of the NAME.NAME... form may cause arbitrary
33 - The evaluation of the NAME.NAME... form may cause arbitrary
34 application defined code to be executed if an object with a
34 application defined code to be executed if an object with a
35 __getattr__ hook is found. Since it is the responsibility of the
35 __getattr__ hook is found. Since it is the responsibility of the
36 application (or the user) to enable this feature, I consider this an
36 application (or the user) to enable this feature, I consider this an
37 acceptable risk. More complicated expressions (e.g. function calls or
37 acceptable risk. More complicated expressions (e.g. function calls or
38 indexing operations) are *not* evaluated.
38 indexing operations) are *not* evaluated.
39
39
40 - GNU readline is also used by the built-in functions input() and
40 - GNU readline is also used by the built-in functions input() and
41 raw_input(), and thus these also benefit/suffer from the completer
41 raw_input(), and thus these also benefit/suffer from the completer
42 features. Clearly an interactive application can benefit by
42 features. Clearly an interactive application can benefit by
43 specifying its own completer function and using raw_input() for all
43 specifying its own completer function and using raw_input() for all
44 its input.
44 its input.
45
45
46 - When the original stdin is not a tty device, GNU readline is never
46 - When the original stdin is not a tty device, GNU readline is never
47 used, and this module (and the readline module) are silently inactive.
47 used, and this module (and the readline module) are silently inactive.
48
48
49 """
49 """
50
50
51 #*****************************************************************************
51 #*****************************************************************************
52 #
52 #
53 # Since this file is essentially a minimally modified copy of the rlcompleter
53 # Since this file is essentially a minimally modified copy of the rlcompleter
54 # module which is part of the standard Python distribution, I assume that the
54 # module which is part of the standard Python distribution, I assume that the
55 # proper procedure is to maintain its copyright as belonging to the Python
55 # proper procedure is to maintain its copyright as belonging to the Python
56 # Software Foundation (in addition to my own, for all new code).
56 # Software Foundation (in addition to my own, for all new code).
57 #
57 #
58 # Copyright (C) 2001 Python Software Foundation, www.python.org
58 # Copyright (C) 2001 Python Software Foundation, www.python.org
59 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
59 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
60 #
60 #
61 # Distributed under the terms of the BSD License. The full license is in
61 # Distributed under the terms of the BSD License. The full license is in
62 # the file COPYING, distributed as part of this software.
62 # the file COPYING, distributed as part of this software.
63 #
63 #
64 #*****************************************************************************
64 #*****************************************************************************
65
65
66 import __builtin__
66 import __builtin__
67 import __main__
67 import __main__
68 import glob
68 import glob
69 import keyword
69 import keyword
70 import os
70 import os
71 import re
71 import re
72 import readline
72 import readline
73 import sys
73 import sys
74 import types
74 import types
75
75
76 # Python 2.4 offers sets as a builtin
76 # Python 2.4 offers sets as a builtin
77 try:
77 try:
78 set([1,2])
78 set([1,2])
79 except NameError:
79 except NameError:
80 from sets import Set as set
80 from sets import Set as set
81
81
82
82
83 from IPython.genutils import shlex_split
83 from IPython.genutils import shlex_split,debugp
84
84
85 __all__ = ['Completer','IPCompleter']
85 __all__ = ['Completer','IPCompleter']
86
86
87 def get_class_members(cls):
87 def get_class_members(cls):
88 ret = dir(cls)
88 ret = dir(cls)
89 if hasattr(cls,'__bases__'):
89 if hasattr(cls,'__bases__'):
90 for base in cls.__bases__:
90 for base in cls.__bases__:
91 ret.extend(get_class_members(base))
91 ret.extend(get_class_members(base))
92 return ret
92 return ret
93
93
94 class Completer:
94 class Completer:
95 def __init__(self,namespace=None,global_namespace=None):
95 def __init__(self,namespace=None,global_namespace=None):
96 """Create a new completer for the command line.
96 """Create a new completer for the command line.
97
97
98 Completer([namespace,global_namespace]) -> completer instance.
98 Completer([namespace,global_namespace]) -> completer instance.
99
99
100 If unspecified, the default namespace where completions are performed
100 If unspecified, the default namespace where completions are performed
101 is __main__ (technically, __main__.__dict__). Namespaces should be
101 is __main__ (technically, __main__.__dict__). Namespaces should be
102 given as dictionaries.
102 given as dictionaries.
103
103
104 An optional second namespace can be given. This allows the completer
104 An optional second namespace can be given. This allows the completer
105 to handle cases where both the local and global scopes need to be
105 to handle cases where both the local and global scopes need to be
106 distinguished.
106 distinguished.
107
107
108 Completer instances should be used as the completion mechanism of
108 Completer instances should be used as the completion mechanism of
109 readline via the set_completer() call:
109 readline via the set_completer() call:
110
110
111 readline.set_completer(Completer(my_namespace).complete)
111 readline.set_completer(Completer(my_namespace).complete)
112 """
112 """
113
113
114 # some minimal strict typechecks. For some core data structures, I
114 # some minimal strict typechecks. For some core data structures, I
115 # want actual basic python types, not just anything that looks like
115 # want actual basic python types, not just anything that looks like
116 # one. This is especially true for namespaces.
116 # one. This is especially true for namespaces.
117 for ns in (namespace,global_namespace):
117 for ns in (namespace,global_namespace):
118 if ns is not None and type(ns) != types.DictType:
118 if ns is not None and type(ns) != types.DictType:
119 raise TypeError,'namespace must be a dictionary'
119 raise TypeError,'namespace must be a dictionary'
120
120
121 # Don't bind to namespace quite yet, but flag whether the user wants a
121 # Don't bind to namespace quite yet, but flag whether the user wants a
122 # specific namespace or to use __main__.__dict__. This will allow us
122 # specific namespace or to use __main__.__dict__. This will allow us
123 # to bind to __main__.__dict__ at completion time, not now.
123 # to bind to __main__.__dict__ at completion time, not now.
124 if namespace is None:
124 if namespace is None:
125 self.use_main_ns = 1
125 self.use_main_ns = 1
126 else:
126 else:
127 self.use_main_ns = 0
127 self.use_main_ns = 0
128 self.namespace = namespace
128 self.namespace = namespace
129
129
130 # The global namespace, if given, can be bound directly
130 # The global namespace, if given, can be bound directly
131 if global_namespace is None:
131 if global_namespace is None:
132 self.global_namespace = {}
132 self.global_namespace = {}
133 else:
133 else:
134 self.global_namespace = global_namespace
134 self.global_namespace = global_namespace
135
135
136 def complete(self, text, state):
136 def complete(self, text, state):
137 """Return the next possible completion for 'text'.
137 """Return the next possible completion for 'text'.
138
138
139 This is called successively with state == 0, 1, 2, ... until it
139 This is called successively with state == 0, 1, 2, ... until it
140 returns None. The completion should begin with 'text'.
140 returns None. The completion should begin with 'text'.
141
141
142 """
142 """
143 if self.use_main_ns:
143 if self.use_main_ns:
144 self.namespace = __main__.__dict__
144 self.namespace = __main__.__dict__
145
145
146 if state == 0:
146 if state == 0:
147 if "." in text:
147 if "." in text:
148 self.matches = self.attr_matches(text)
148 self.matches = self.attr_matches(text)
149 else:
149 else:
150 self.matches = self.global_matches(text)
150 self.matches = self.global_matches(text)
151 try:
151 try:
152 return self.matches[state]
152 return self.matches[state]
153 except IndexError:
153 except IndexError:
154 return None
154 return None
155
155
156 def global_matches(self, text):
156 def global_matches(self, text):
157 """Compute matches when text is a simple name.
157 """Compute matches when text is a simple name.
158
158
159 Return a list of all keywords, built-in functions and names currently
159 Return a list of all keywords, built-in functions and names currently
160 defined in self.namespace or self.global_namespace that match.
160 defined in self.namespace or self.global_namespace that match.
161
161
162 """
162 """
163 matches = []
163 matches = []
164 match_append = matches.append
164 match_append = matches.append
165 n = len(text)
165 n = len(text)
166 for lst in [keyword.kwlist,
166 for lst in [keyword.kwlist,
167 __builtin__.__dict__.keys(),
167 __builtin__.__dict__.keys(),
168 self.namespace.keys(),
168 self.namespace.keys(),
169 self.global_namespace.keys()]:
169 self.global_namespace.keys()]:
170 for word in lst:
170 for word in lst:
171 if word[:n] == text and word != "__builtins__":
171 if word[:n] == text and word != "__builtins__":
172 match_append(word)
172 match_append(word)
173 return matches
173 return matches
174
174
175 def attr_matches(self, text):
175 def attr_matches(self, text):
176 """Compute matches when text contains a dot.
176 """Compute matches when text contains a dot.
177
177
178 Assuming the text is of the form NAME.NAME....[NAME], and is
178 Assuming the text is of the form NAME.NAME....[NAME], and is
179 evaluatable in self.namespace or self.global_namespace, it will be
179 evaluatable in self.namespace or self.global_namespace, it will be
180 evaluated and its attributes (as revealed by dir()) are used as
180 evaluated and its attributes (as revealed by dir()) are used as
181 possible completions. (For class instances, class members are are
181 possible completions. (For class instances, class members are are
182 also considered.)
182 also considered.)
183
183
184 WARNING: this can still invoke arbitrary C code, if an object
184 WARNING: this can still invoke arbitrary C code, if an object
185 with a __getattr__ hook is evaluated.
185 with a __getattr__ hook is evaluated.
186
186
187 """
187 """
188 import re
188 import re
189
189
190 # Another option, seems to work great. Catches things like ''.<tab>
190 # Another option, seems to work great. Catches things like ''.<tab>
191 m = re.match(r"(\S+(\.\w+)*)\.(\w*)$", text)
191 m = re.match(r"(\S+(\.\w+)*)\.(\w*)$", text)
192
192
193 if not m:
193 if not m:
194 return []
194 return []
195
195
196 expr, attr = m.group(1, 3)
196 expr, attr = m.group(1, 3)
197 try:
197 try:
198 object = eval(expr, self.namespace)
198 object = eval(expr, self.namespace)
199 except:
199 except:
200 object = eval(expr, self.global_namespace)
200 object = eval(expr, self.global_namespace)
201
201
202 # Start building the attribute list via dir(), and then complete it
202 # Start building the attribute list via dir(), and then complete it
203 # with a few extra special-purpose calls.
203 # with a few extra special-purpose calls.
204 words = dir(object)
204 words = dir(object)
205
205
206 if hasattr(object,'__class__'):
206 if hasattr(object,'__class__'):
207 words.append('__class__')
207 words.append('__class__')
208 words.extend(get_class_members(object.__class__))
208 words.extend(get_class_members(object.__class__))
209
209
210 # this is the 'dir' function for objects with Enthought's traits
210 # this is the 'dir' function for objects with Enthought's traits
211 if hasattr(object, 'trait_names'):
211 if hasattr(object, 'trait_names'):
212 words.extend(object.trait_names())
212 words.extend(object.trait_names())
213 # eliminate possible duplicates, as some traits may also appear as
213 # eliminate possible duplicates, as some traits may also appear as
214 # normal attributes in the dir() call.
214 # normal attributes in the dir() call.
215 words = set(words)
215 words = set(words)
216
216
217 # filter out non-string attributes which may be stuffed by dir() calls
217 # filter out non-string attributes which may be stuffed by dir() calls
218 # and poor coding in third-party modules
218 # and poor coding in third-party modules
219 words = [w for w in words
219 words = [w for w in words
220 if isinstance(w, basestring) and w != "__builtins__"]
220 if isinstance(w, basestring) and w != "__builtins__"]
221 # Build match list to return
221 # Build match list to return
222 n = len(attr)
222 n = len(attr)
223 return ["%s.%s" % (expr, w) for w in words if w[:n] == attr ]
223 return ["%s.%s" % (expr, w) for w in words if w[:n] == attr ]
224
224
225 class IPCompleter(Completer):
225 class IPCompleter(Completer):
226 """Extension of the completer class with IPython-specific features"""
226 """Extension of the completer class with IPython-specific features"""
227
227
228 def __init__(self,shell,namespace=None,global_namespace=None,
228 def __init__(self,shell,namespace=None,global_namespace=None,
229 omit__names=0,alias_table=None):
229 omit__names=0,alias_table=None):
230 """IPCompleter() -> completer
230 """IPCompleter() -> completer
231
231
232 Return a completer object suitable for use by the readline library
232 Return a completer object suitable for use by the readline library
233 via readline.set_completer().
233 via readline.set_completer().
234
234
235 Inputs:
235 Inputs:
236
236
237 - shell: a pointer to the ipython shell itself. This is needed
237 - shell: a pointer to the ipython shell itself. This is needed
238 because this completer knows about magic functions, and those can
238 because this completer knows about magic functions, and those can
239 only be accessed via the ipython instance.
239 only be accessed via the ipython instance.
240
240
241 - namespace: an optional dict where completions are performed.
241 - namespace: an optional dict where completions are performed.
242
242
243 - global_namespace: secondary optional dict for completions, to
243 - global_namespace: secondary optional dict for completions, to
244 handle cases (such as IPython embedded inside functions) where
244 handle cases (such as IPython embedded inside functions) where
245 both Python scopes are visible.
245 both Python scopes are visible.
246
246
247 - The optional omit__names parameter sets the completer to omit the
247 - The optional omit__names parameter sets the completer to omit the
248 'magic' names (__magicname__) for python objects unless the text
248 'magic' names (__magicname__) for python objects unless the text
249 to be completed explicitly starts with one or more underscores.
249 to be completed explicitly starts with one or more underscores.
250
250
251 - If alias_table is supplied, it should be a dictionary of aliases
251 - If alias_table is supplied, it should be a dictionary of aliases
252 to complete. """
252 to complete. """
253
253
254 Completer.__init__(self,namespace,global_namespace)
254 Completer.__init__(self,namespace,global_namespace)
255 self.magic_prefix = shell.name+'.magic_'
255 self.magic_prefix = shell.name+'.magic_'
256 self.magic_escape = shell.ESC_MAGIC
256 self.magic_escape = shell.ESC_MAGIC
257 self.readline = readline
257 self.readline = readline
258 delims = self.readline.get_completer_delims()
258 delims = self.readline.get_completer_delims()
259 delims = delims.replace(self.magic_escape,'')
259 delims = delims.replace(self.magic_escape,'')
260 self.readline.set_completer_delims(delims)
260 self.readline.set_completer_delims(delims)
261 self.get_line_buffer = self.readline.get_line_buffer
261 self.get_line_buffer = self.readline.get_line_buffer
262 self.omit__names = omit__names
262 self.omit__names = omit__names
263 self.merge_completions = shell.rc.readline_merge_completions
263 self.merge_completions = shell.rc.readline_merge_completions
264
264
265 if alias_table is None:
265 if alias_table is None:
266 alias_table = {}
266 alias_table = {}
267 self.alias_table = alias_table
267 self.alias_table = alias_table
268 # Regexp to split filenames with spaces in them
268 # Regexp to split filenames with spaces in them
269 self.space_name_re = re.compile(r'([^\\] )')
269 self.space_name_re = re.compile(r'([^\\] )')
270 # Hold a local ref. to glob.glob for speed
270 # Hold a local ref. to glob.glob for speed
271 self.glob = glob.glob
271 self.glob = glob.glob
272
272
273 # Determine if we are running on 'dumb' terminals, like (X)Emacs
273 # Determine if we are running on 'dumb' terminals, like (X)Emacs
274 # buffers, to avoid completion problems.
274 # buffers, to avoid completion problems.
275 term = os.environ.get('TERM','xterm')
275 term = os.environ.get('TERM','xterm')
276 self.dumb_terminal = term in ['dumb','emacs']
276 self.dumb_terminal = term in ['dumb','emacs']
277
277
278 # Special handling of backslashes needed in win32 platforms
278 # Special handling of backslashes needed in win32 platforms
279 if sys.platform == "win32":
279 if sys.platform == "win32":
280 self.clean_glob = self._clean_glob_win32
280 self.clean_glob = self._clean_glob_win32
281 else:
281 else:
282 self.clean_glob = self._clean_glob
282 self.clean_glob = self._clean_glob
283 self.matchers = [self.python_matches,
283 self.matchers = [self.python_matches,
284 self.file_matches,
284 self.file_matches,
285 self.alias_matches,
285 self.alias_matches,
286 self.python_func_kw_matches]
286 self.python_func_kw_matches]
287
287
288 # Code contributed by Alex Schmolck, for ipython/emacs integration
288 # Code contributed by Alex Schmolck, for ipython/emacs integration
289 def all_completions(self, text):
289 def all_completions(self, text):
290 """Return all possible completions for the benefit of emacs."""
290 """Return all possible completions for the benefit of emacs."""
291
291
292 completions = []
292 completions = []
293 comp_append = completions.append
293 comp_append = completions.append
294 try:
294 try:
295 for i in xrange(sys.maxint):
295 for i in xrange(sys.maxint):
296 res = self.complete(text, i)
296 res = self.complete(text, i)
297
297
298 if not res: break
298 if not res: break
299
299
300 comp_append(res)
300 comp_append(res)
301 #XXX workaround for ``notDefined.<tab>``
301 #XXX workaround for ``notDefined.<tab>``
302 except NameError:
302 except NameError:
303 pass
303 pass
304 return completions
304 return completions
305 # /end Alex Schmolck code.
305 # /end Alex Schmolck code.
306
306
307 def _clean_glob(self,text):
307 def _clean_glob(self,text):
308 return self.glob("%s*" % text)
308 return self.glob("%s*" % text)
309
309
310 def _clean_glob_win32(self,text):
310 def _clean_glob_win32(self,text):
311 return [f.replace("\\","/")
311 return [f.replace("\\","/")
312 for f in self.glob("%s*" % text)]
312 for f in self.glob("%s*" % text)]
313
313
314 def file_matches(self, text):
314 def file_matches(self, text):
315 """Match filneames, expanding ~USER type strings.
315 """Match filneames, expanding ~USER type strings.
316
316
317 Most of the seemingly convoluted logic in this completer is an
317 Most of the seemingly convoluted logic in this completer is an
318 attempt to handle filenames with spaces in them. And yet it's not
318 attempt to handle filenames with spaces in them. And yet it's not
319 quite perfect, because Python's readline doesn't expose all of the
319 quite perfect, because Python's readline doesn't expose all of the
320 GNU readline details needed for this to be done correctly.
320 GNU readline details needed for this to be done correctly.
321
321
322 For a filename with a space in it, the printed completions will be
322 For a filename with a space in it, the printed completions will be
323 only the parts after what's already been typed (instead of the
323 only the parts after what's already been typed (instead of the
324 full completions, as is normally done). I don't think with the
324 full completions, as is normally done). I don't think with the
325 current (as of Python 2.3) Python readline it's possible to do
325 current (as of Python 2.3) Python readline it's possible to do
326 better."""
326 better."""
327
327
328 #print 'Completer->file_matches: <%s>' % text # dbg
328 #print 'Completer->file_matches: <%s>' % text # dbg
329
329
330 # chars that require escaping with backslash - i.e. chars
330 # chars that require escaping with backslash - i.e. chars
331 # that readline treats incorrectly as delimiters, but we
331 # that readline treats incorrectly as delimiters, but we
332 # don't want to treat as delimiters in filename matching
332 # don't want to treat as delimiters in filename matching
333 # when escaped with backslash
333 # when escaped with backslash
334
334
335 protectables = ' ()[]{}'
335 protectables = ' ()[]{}'
336
336
337 def protect_filename(s):
337 def protect_filename(s):
338 return "".join([(ch in protectables and '\\' + ch or ch)
338 return "".join([(ch in protectables and '\\' + ch or ch)
339 for ch in s])
339 for ch in s])
340
340
341 lbuf = self.get_line_buffer()[:self.readline.get_endidx()]
341 lbuf = self.get_line_buffer()[:self.readline.get_endidx()]
342 open_quotes = 0 # track strings with open quotes
342 open_quotes = 0 # track strings with open quotes
343 try:
343 try:
344 lsplit = shlex_split(lbuf)[-1]
344 lsplit = shlex_split(lbuf)[-1]
345 except ValueError:
345 except ValueError:
346 # typically an unmatched ", or backslash without escaped char.
346 # typically an unmatched ", or backslash without escaped char.
347 if lbuf.count('"')==1:
347 if lbuf.count('"')==1:
348 open_quotes = 1
348 open_quotes = 1
349 lsplit = lbuf.split('"')[-1]
349 lsplit = lbuf.split('"')[-1]
350 elif lbuf.count("'")==1:
350 elif lbuf.count("'")==1:
351 open_quotes = 1
351 open_quotes = 1
352 lsplit = lbuf.split("'")[-1]
352 lsplit = lbuf.split("'")[-1]
353 else:
353 else:
354 return None
354 return None
355 except IndexError:
355 except IndexError:
356 # tab pressed on empty line
356 # tab pressed on empty line
357 lsplit = ""
357 lsplit = ""
358
358
359 if lsplit != protect_filename(lsplit):
359 if lsplit != protect_filename(lsplit):
360 # if protectables are found, do matching on the whole escaped
360 # if protectables are found, do matching on the whole escaped
361 # name
361 # name
362 has_protectables = 1
362 has_protectables = 1
363 text0,text = text,lsplit
363 text0,text = text,lsplit
364 else:
364 else:
365 has_protectables = 0
365 has_protectables = 0
366 text = os.path.expanduser(text)
366 text = os.path.expanduser(text)
367
367
368 if text == "":
368 if text == "":
369 return [protect_filename(f) for f in self.glob("*")]
369 return [protect_filename(f) for f in self.glob("*")]
370
370
371 m0 = self.clean_glob(text.replace('\\',''))
371 m0 = self.clean_glob(text.replace('\\',''))
372 if has_protectables:
372 if has_protectables:
373 # If we had protectables, we need to revert our changes to the
373 # If we had protectables, we need to revert our changes to the
374 # beginning of filename so that we don't double-write the part
374 # beginning of filename so that we don't double-write the part
375 # of the filename we have so far
375 # of the filename we have so far
376 len_lsplit = len(lsplit)
376 len_lsplit = len(lsplit)
377 matches = [text0 + protect_filename(f[len_lsplit:]) for f in m0]
377 matches = [text0 + protect_filename(f[len_lsplit:]) for f in m0]
378 else:
378 else:
379 if open_quotes:
379 if open_quotes:
380 # if we have a string with an open quote, we don't need to
380 # if we have a string with an open quote, we don't need to
381 # protect the names at all (and we _shouldn't_, as it
381 # protect the names at all (and we _shouldn't_, as it
382 # would cause bugs when the filesystem call is made).
382 # would cause bugs when the filesystem call is made).
383 matches = m0
383 matches = m0
384 else:
384 else:
385 matches = [protect_filename(f) for f in m0]
385 matches = [protect_filename(f) for f in m0]
386 if len(matches) == 1 and os.path.isdir(matches[0]):
386 if len(matches) == 1 and os.path.isdir(matches[0]):
387 # Takes care of links to directories also. Use '/'
387 # Takes care of links to directories also. Use '/'
388 # explicitly, even under Windows, so that name completions
388 # explicitly, even under Windows, so that name completions
389 # don't end up escaped.
389 # don't end up escaped.
390 matches[0] += '/'
390 matches[0] += '/'
391 return matches
391 return matches
392
392
393 def alias_matches(self, text):
393 def alias_matches(self, text):
394 """Match internal system aliases"""
394 """Match internal system aliases"""
395
395 #print 'Completer->alias_matches:',text # dbg
396 #print 'Completer->alias_matches:',text # dbg
396 text = os.path.expanduser(text)
397 text = os.path.expanduser(text)
397 aliases = self.alias_table.keys()
398 aliases = self.alias_table.keys()
398 if text == "":
399 if text == "":
399 return aliases
400 return aliases
400 else:
401 else:
401 return [alias for alias in aliases if alias.startswith(text)]
402 return [alias for alias in aliases if alias.startswith(text)]
402
403
403 def python_matches(self,text):
404 def python_matches(self,text):
404 """Match attributes or global python names"""
405 """Match attributes or global python names"""
405 #print 'Completer->python_matches' # dbg
406
407 #print 'Completer->python_matches, txt=<%s>' % text # dbg
406 if "." in text:
408 if "." in text:
407 try:
409 try:
408 matches = self.attr_matches(text)
410 matches = self.attr_matches(text)
409 if text.endswith('.') and self.omit__names:
411 if text.endswith('.') and self.omit__names:
410 if self.omit__names == 1:
412 if self.omit__names == 1:
411 # true if txt is _not_ a __ name, false otherwise:
413 # true if txt is _not_ a __ name, false otherwise:
412 no__name = (lambda txt:
414 no__name = (lambda txt:
413 re.match(r'.*\.__.*?__',txt) is None)
415 re.match(r'.*\.__.*?__',txt) is None)
414 else:
416 else:
415 # true if txt is _not_ a _ name, false otherwise:
417 # true if txt is _not_ a _ name, false otherwise:
416 no__name = (lambda txt:
418 no__name = (lambda txt:
417 re.match(r'.*\._.*?',txt) is None)
419 re.match(r'.*\._.*?',txt) is None)
418 matches = filter(no__name, matches)
420 matches = filter(no__name, matches)
419 except NameError:
421 except NameError:
420 # catches <undefined attributes>.<tab>
422 # catches <undefined attributes>.<tab>
421 matches = []
423 matches = []
422 else:
424 else:
423 matches = self.global_matches(text)
425 matches = self.global_matches(text)
424 # this is so completion finds magics when automagic is on:
426 # this is so completion finds magics when automagic is on:
425 if matches == [] and not text.startswith(os.sep):
427 if matches == [] and not text.startswith(os.sep):
426 matches = self.attr_matches(self.magic_prefix+text)
428 matches = self.attr_matches(self.magic_prefix+text)
427 return matches
429 return matches
428
430
429 def _default_arguments(self, obj):
431 def _default_arguments(self, obj):
430 """Return the list of default arguments of obj if it is callable,
432 """Return the list of default arguments of obj if it is callable,
431 or empty list otherwise."""
433 or empty list otherwise."""
432
434
433 if not (inspect.isfunction(obj) or inspect.ismethod(obj)):
435 if not (inspect.isfunction(obj) or inspect.ismethod(obj)):
434 # for classes, check for __init__,__new__
436 # for classes, check for __init__,__new__
435 if inspect.isclass(obj):
437 if inspect.isclass(obj):
436 obj = (getattr(obj,'__init__',None) or
438 obj = (getattr(obj,'__init__',None) or
437 getattr(obj,'__new__',None))
439 getattr(obj,'__new__',None))
438 # for all others, check if they are __call__able
440 # for all others, check if they are __call__able
439 elif hasattr(obj, '__call__'):
441 elif hasattr(obj, '__call__'):
440 obj = obj.__call__
442 obj = obj.__call__
441 # XXX: is there a way to handle the builtins ?
443 # XXX: is there a way to handle the builtins ?
442 try:
444 try:
443 args,_,_1,defaults = inspect.getargspec(obj)
445 args,_,_1,defaults = inspect.getargspec(obj)
444 if defaults:
446 if defaults:
445 return args[-len(defaults):]
447 return args[-len(defaults):]
446 except TypeError: pass
448 except TypeError: pass
447 return []
449 return []
448
450
449 def python_func_kw_matches(self,text):
451 def python_func_kw_matches(self,text):
450 """Match named parameters (kwargs) of the last open function"""
452 """Match named parameters (kwargs) of the last open function"""
451
453
452 if "." in text: # a parameter cannot be dotted
454 if "." in text: # a parameter cannot be dotted
453 return []
455 return []
454 try: regexp = self.__funcParamsRegex
456 try: regexp = self.__funcParamsRegex
455 except AttributeError:
457 except AttributeError:
456 regexp = self.__funcParamsRegex = re.compile(r'''
458 regexp = self.__funcParamsRegex = re.compile(r'''
457 '.*?' | # single quoted strings or
459 '.*?' | # single quoted strings or
458 ".*?" | # double quoted strings or
460 ".*?" | # double quoted strings or
459 \w+ | # identifier
461 \w+ | # identifier
460 \S # other characters
462 \S # other characters
461 ''', re.VERBOSE | re.DOTALL)
463 ''', re.VERBOSE | re.DOTALL)
462 # 1. find the nearest identifier that comes before an unclosed
464 # 1. find the nearest identifier that comes before an unclosed
463 # parenthesis e.g. for "foo (1+bar(x), pa", the candidate is "foo"
465 # parenthesis e.g. for "foo (1+bar(x), pa", the candidate is "foo"
464 tokens = regexp.findall(self.get_line_buffer())
466 tokens = regexp.findall(self.get_line_buffer())
465 tokens.reverse()
467 tokens.reverse()
466 iterTokens = iter(tokens); openPar = 0
468 iterTokens = iter(tokens); openPar = 0
467 for token in iterTokens:
469 for token in iterTokens:
468 if token == ')':
470 if token == ')':
469 openPar -= 1
471 openPar -= 1
470 elif token == '(':
472 elif token == '(':
471 openPar += 1
473 openPar += 1
472 if openPar > 0:
474 if openPar > 0:
473 # found the last unclosed parenthesis
475 # found the last unclosed parenthesis
474 break
476 break
475 else:
477 else:
476 return []
478 return []
477 # 2. Concatenate dotted names ("foo.bar" for "foo.bar(x, pa" )
479 # 2. Concatenate dotted names ("foo.bar" for "foo.bar(x, pa" )
478 ids = []
480 ids = []
479 isId = re.compile(r'\w+$').match
481 isId = re.compile(r'\w+$').match
480 while True:
482 while True:
481 try:
483 try:
482 ids.append(iterTokens.next())
484 ids.append(iterTokens.next())
483 if not isId(ids[-1]):
485 if not isId(ids[-1]):
484 ids.pop(); break
486 ids.pop(); break
485 if not iterTokens.next() == '.':
487 if not iterTokens.next() == '.':
486 break
488 break
487 except StopIteration:
489 except StopIteration:
488 break
490 break
489 # lookup the candidate callable matches either using global_matches
491 # lookup the candidate callable matches either using global_matches
490 # or attr_matches for dotted names
492 # or attr_matches for dotted names
491 if len(ids) == 1:
493 if len(ids) == 1:
492 callableMatches = self.global_matches(ids[0])
494 callableMatches = self.global_matches(ids[0])
493 else:
495 else:
494 callableMatches = self.attr_matches('.'.join(ids[::-1]))
496 callableMatches = self.attr_matches('.'.join(ids[::-1]))
495 argMatches = []
497 argMatches = []
496 for callableMatch in callableMatches:
498 for callableMatch in callableMatches:
497 try: namedArgs = self._default_arguments(eval(callableMatch,
499 try: namedArgs = self._default_arguments(eval(callableMatch,
498 self.namespace))
500 self.namespace))
499 except: continue
501 except: continue
500 for namedArg in namedArgs:
502 for namedArg in namedArgs:
501 if namedArg.startswith(text):
503 if namedArg.startswith(text):
502 argMatches.append("%s=" %namedArg)
504 argMatches.append("%s=" %namedArg)
503 return argMatches
505 return argMatches
504
506
505 def complete(self, text, state):
507 def complete(self, text, state):
506 """Return the next possible completion for 'text'.
508 """Return the next possible completion for 'text'.
507
509
508 This is called successively with state == 0, 1, 2, ... until it
510 This is called successively with state == 0, 1, 2, ... until it
509 returns None. The completion should begin with 'text'. """
511 returns None. The completion should begin with 'text'. """
510
512
511 #print '\n*** COMPLETE: <%s> (%s)' % (text,state) # dbg
513 #print '\n*** COMPLETE: <%s> (%s)' % (text,state) # dbg
512
514
513 # if there is only a tab on a line with only whitespace, instead
515 # if there is only a tab on a line with only whitespace, instead
514 # of the mostly useless 'do you want to see all million
516 # of the mostly useless 'do you want to see all million
515 # completions' message, just do the right thing and give the user
517 # completions' message, just do the right thing and give the user
516 # his tab! Incidentally, this enables pasting of tabbed text from
518 # his tab! Incidentally, this enables pasting of tabbed text from
517 # an editor (as long as autoindent is off).
519 # an editor (as long as autoindent is off).
518
520
519 # don't apply this on 'dumb' terminals, such as emacs buffers, so we
521 # don't apply this on 'dumb' terminals, such as emacs buffers, so we
520 # don't interfere with their own tab-completion mechanism.
522 # don't interfere with their own tab-completion mechanism.
521 if not (self.dumb_terminal or self.get_line_buffer().strip()):
523 if not (self.dumb_terminal or self.get_line_buffer().strip()):
522 self.readline.insert_text('\t')
524 self.readline.insert_text('\t')
523 return None
525 return None
524
526
525 magic_escape = self.magic_escape
527 magic_escape = self.magic_escape
526 magic_prefix = self.magic_prefix
528 magic_prefix = self.magic_prefix
527
529
528 try:
530 try:
529 if text.startswith(magic_escape):
531 if text.startswith(magic_escape):
530 text = text.replace(magic_escape,magic_prefix)
532 text = text.replace(magic_escape,magic_prefix)
531 elif text.startswith('~'):
533 elif text.startswith('~'):
532 text = os.path.expanduser(text)
534 text = os.path.expanduser(text)
533 if state == 0:
535 if state == 0:
534 # Extend the list of completions with the results of each
536 # Extend the list of completions with the results of each
535 # matcher, so we return results to the user from all
537 # matcher, so we return results to the user from all
536 # namespaces.
538 # namespaces.
537 if self.merge_completions:
539 if self.merge_completions:
538 self.matches = []
540 self.matches = []
539 for matcher in self.matchers:
541 for matcher in self.matchers:
540 self.matches.extend(matcher(text))
542 self.matches.extend(matcher(text))
541 else:
543 else:
542 for matcher in self.matchers:
544 for matcher in self.matchers:
543 self.matches = matcher(text)
545 self.matches = matcher(text)
544 if self.matches:
546 if self.matches:
545 break
547 break
546
548
547 try:
549 try:
548 return self.matches[state].replace(magic_prefix,magic_escape)
550 return self.matches[state].replace(magic_prefix,magic_escape)
549 except IndexError:
551 except IndexError:
550 return None
552 return None
551 except:
553 except:
552 #from IPython.ultraTB import AutoFormattedTB; # dbg
554 #from IPython.ultraTB import AutoFormattedTB; # dbg
553 #tb=AutoFormattedTB('Verbose');tb() #dbg
555 #tb=AutoFormattedTB('Verbose');tb() #dbg
554
556
555 # If completion fails, don't annoy the user.
557 # If completion fails, don't annoy the user.
556 return None
558 return None
@@ -1,2163 +1,2165 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 IPython -- An enhanced Interactive Python
3 IPython -- An enhanced Interactive Python
4
4
5 Requires Python 2.1 or newer.
5 Requires Python 2.1 or newer.
6
6
7 This file contains all the classes and helper functions specific to IPython.
7 This file contains all the classes and helper functions specific to IPython.
8
8
9 $Id: iplib.py 994 2006-01-08 08:29:44Z fperez $
9 $Id: iplib.py 995 2006-01-08 16:23:20Z fperez $
10 """
10 """
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #
18 #
19 # Note: this code originally subclassed code.InteractiveConsole from the
19 # Note: this code originally subclassed code.InteractiveConsole from the
20 # Python standard library. Over time, all of that class has been copied
20 # Python standard library. Over time, all of that class has been copied
21 # verbatim here for modifications which could not be accomplished by
21 # verbatim here for modifications which could not be accomplished by
22 # subclassing. At this point, there are no dependencies at all on the code
22 # subclassing. At this point, there are no dependencies at all on the code
23 # module anymore (it is not even imported). The Python License (sec. 2)
23 # module anymore (it is not even imported). The Python License (sec. 2)
24 # allows for this, but it's always nice to acknowledge credit where credit is
24 # allows for this, but it's always nice to acknowledge credit where credit is
25 # due.
25 # due.
26 #*****************************************************************************
26 #*****************************************************************************
27
27
28 #****************************************************************************
28 #****************************************************************************
29 # Modules and globals
29 # Modules and globals
30
30
31 from __future__ import generators # for 2.2 backwards-compatibility
31 from __future__ import generators # for 2.2 backwards-compatibility
32
32
33 from IPython import Release
33 from IPython import Release
34 __author__ = '%s <%s>\n%s <%s>' % \
34 __author__ = '%s <%s>\n%s <%s>' % \
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
35 ( Release.authors['Janko'] + Release.authors['Fernando'] )
36 __license__ = Release.license
36 __license__ = Release.license
37 __version__ = Release.version
37 __version__ = Release.version
38
38
39 # Python standard modules
39 # Python standard modules
40 import __main__
40 import __main__
41 import __builtin__
41 import __builtin__
42 import StringIO
42 import StringIO
43 import bdb
43 import bdb
44 import cPickle as pickle
44 import cPickle as pickle
45 import codeop
45 import codeop
46 import exceptions
46 import exceptions
47 import glob
47 import glob
48 import inspect
48 import inspect
49 import keyword
49 import keyword
50 import new
50 import new
51 import os
51 import os
52 import pdb
52 import pdb
53 import pydoc
53 import pydoc
54 import re
54 import re
55 import shutil
55 import shutil
56 import string
56 import string
57 import sys
57 import sys
58 import tempfile
58 import tempfile
59 import traceback
59 import traceback
60 import types
60 import types
61
61
62 from pprint import pprint, pformat
62 from pprint import pprint, pformat
63
63
64 # IPython's own modules
64 # IPython's own modules
65 import IPython
65 import IPython
66 from IPython import OInspect,PyColorize,ultraTB
66 from IPython import OInspect,PyColorize,ultraTB
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
67 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
68 from IPython.FakeModule import FakeModule
68 from IPython.FakeModule import FakeModule
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
69 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
70 from IPython.Logger import Logger
70 from IPython.Logger import Logger
71 from IPython.Magic import Magic
71 from IPython.Magic import Magic
72 from IPython.Prompts import CachedOutput
72 from IPython.Prompts import CachedOutput
73 from IPython.Struct import Struct
73 from IPython.Struct import Struct
74 from IPython.background_jobs import BackgroundJobManager
74 from IPython.background_jobs import BackgroundJobManager
75 from IPython.usage import cmd_line_usage,interactive_usage
75 from IPython.usage import cmd_line_usage,interactive_usage
76 from IPython.genutils import *
76 from IPython.genutils import *
77
77
78 # Globals
78 # Globals
79
79
80 # store the builtin raw_input globally, and use this always, in case user code
80 # store the builtin raw_input globally, and use this always, in case user code
81 # overwrites it (like wx.py.PyShell does)
81 # overwrites it (like wx.py.PyShell does)
82 raw_input_original = raw_input
82 raw_input_original = raw_input
83
83
84 # compiled regexps for autoindent management
84 # compiled regexps for autoindent management
85 ini_spaces_re = re.compile(r'^(\s+)')
85 ini_spaces_re = re.compile(r'^(\s+)')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87
87
88
88
89 #****************************************************************************
89 #****************************************************************************
90 # Some utility function definitions
90 # Some utility function definitions
91
91
92 def softspace(file, newvalue):
92 def softspace(file, newvalue):
93 """Copied from code.py, to remove the dependency"""
93 """Copied from code.py, to remove the dependency"""
94 oldvalue = 0
94 oldvalue = 0
95 try:
95 try:
96 oldvalue = file.softspace
96 oldvalue = file.softspace
97 except AttributeError:
97 except AttributeError:
98 pass
98 pass
99 try:
99 try:
100 file.softspace = newvalue
100 file.softspace = newvalue
101 except (AttributeError, TypeError):
101 except (AttributeError, TypeError):
102 # "attribute-less object" or "read-only attributes"
102 # "attribute-less object" or "read-only attributes"
103 pass
103 pass
104 return oldvalue
104 return oldvalue
105
105
106
106
107 #****************************************************************************
107 #****************************************************************************
108 # Local use exceptions
108 # Local use exceptions
109 class SpaceInInput(exceptions.Exception): pass
109 class SpaceInInput(exceptions.Exception): pass
110
110
111
111
112 #****************************************************************************
112 #****************************************************************************
113 # Local use classes
113 # Local use classes
114 class Bunch: pass
114 class Bunch: pass
115
115
116 class Undefined: pass
116 class Undefined: pass
117
117
118 class InputList(list):
118 class InputList(list):
119 """Class to store user input.
119 """Class to store user input.
120
120
121 It's basically a list, but slices return a string instead of a list, thus
121 It's basically a list, but slices return a string instead of a list, thus
122 allowing things like (assuming 'In' is an instance):
122 allowing things like (assuming 'In' is an instance):
123
123
124 exec In[4:7]
124 exec In[4:7]
125
125
126 or
126 or
127
127
128 exec In[5:9] + In[14] + In[21:25]"""
128 exec In[5:9] + In[14] + In[21:25]"""
129
129
130 def __getslice__(self,i,j):
130 def __getslice__(self,i,j):
131 return ''.join(list.__getslice__(self,i,j))
131 return ''.join(list.__getslice__(self,i,j))
132
132
133 class SyntaxTB(ultraTB.ListTB):
133 class SyntaxTB(ultraTB.ListTB):
134 """Extension which holds some state: the last exception value"""
134 """Extension which holds some state: the last exception value"""
135
135
136 def __init__(self,color_scheme = 'NoColor'):
136 def __init__(self,color_scheme = 'NoColor'):
137 ultraTB.ListTB.__init__(self,color_scheme)
137 ultraTB.ListTB.__init__(self,color_scheme)
138 self.last_syntax_error = None
138 self.last_syntax_error = None
139
139
140 def __call__(self, etype, value, elist):
140 def __call__(self, etype, value, elist):
141 self.last_syntax_error = value
141 self.last_syntax_error = value
142 ultraTB.ListTB.__call__(self,etype,value,elist)
142 ultraTB.ListTB.__call__(self,etype,value,elist)
143
143
144 def clear_err_state(self):
144 def clear_err_state(self):
145 """Return the current error state and clear it"""
145 """Return the current error state and clear it"""
146 e = self.last_syntax_error
146 e = self.last_syntax_error
147 self.last_syntax_error = None
147 self.last_syntax_error = None
148 return e
148 return e
149
149
150 #****************************************************************************
150 #****************************************************************************
151 # Main IPython class
151 # Main IPython class
152
152
153 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
153 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
154 # until a full rewrite is made. I've cleaned all cross-class uses of
154 # until a full rewrite is made. I've cleaned all cross-class uses of
155 # attributes and methods, but too much user code out there relies on the
155 # attributes and methods, but too much user code out there relies on the
156 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
156 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
157 #
157 #
158 # But at least now, all the pieces have been separated and we could, in
158 # But at least now, all the pieces have been separated and we could, in
159 # principle, stop using the mixin. This will ease the transition to the
159 # principle, stop using the mixin. This will ease the transition to the
160 # chainsaw branch.
160 # chainsaw branch.
161
161
162 # For reference, the following is the list of 'self.foo' uses in the Magic
162 # For reference, the following is the list of 'self.foo' uses in the Magic
163 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
163 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
164 # class, to prevent clashes.
164 # class, to prevent clashes.
165
165
166 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
166 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
167 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
167 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
168 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
168 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
169 # 'self.value']
169 # 'self.value']
170
170
171 class InteractiveShell(object,Magic):
171 class InteractiveShell(object,Magic):
172 """An enhanced console for Python."""
172 """An enhanced console for Python."""
173
173
174 # class attribute to indicate whether the class supports threads or not.
174 # class attribute to indicate whether the class supports threads or not.
175 # Subclasses with thread support should override this as needed.
175 # Subclasses with thread support should override this as needed.
176 isthreaded = False
176 isthreaded = False
177
177
178 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
178 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
179 user_ns = None,user_global_ns=None,banner2='',
179 user_ns = None,user_global_ns=None,banner2='',
180 custom_exceptions=((),None),embedded=False):
180 custom_exceptions=((),None),embedded=False):
181
181
182 # some minimal strict typechecks. For some core data structures, I
182 # some minimal strict typechecks. For some core data structures, I
183 # want actual basic python types, not just anything that looks like
183 # want actual basic python types, not just anything that looks like
184 # one. This is especially true for namespaces.
184 # one. This is especially true for namespaces.
185 for ns in (user_ns,user_global_ns):
185 for ns in (user_ns,user_global_ns):
186 if ns is not None and type(ns) != types.DictType:
186 if ns is not None and type(ns) != types.DictType:
187 raise TypeError,'namespace must be a dictionary'
187 raise TypeError,'namespace must be a dictionary'
188
188
189 # Job manager (for jobs run as background threads)
189 # Job manager (for jobs run as background threads)
190 self.jobs = BackgroundJobManager()
190 self.jobs = BackgroundJobManager()
191
191
192 # track which builtins we add, so we can clean up later
192 # track which builtins we add, so we can clean up later
193 self.builtins_added = {}
193 self.builtins_added = {}
194 # This method will add the necessary builtins for operation, but
194 # This method will add the necessary builtins for operation, but
195 # tracking what it did via the builtins_added dict.
195 # tracking what it did via the builtins_added dict.
196 self.add_builtins()
196 self.add_builtins()
197
197
198 # Do the intuitively correct thing for quit/exit: we remove the
198 # Do the intuitively correct thing for quit/exit: we remove the
199 # builtins if they exist, and our own magics will deal with this
199 # builtins if they exist, and our own magics will deal with this
200 try:
200 try:
201 del __builtin__.exit, __builtin__.quit
201 del __builtin__.exit, __builtin__.quit
202 except AttributeError:
202 except AttributeError:
203 pass
203 pass
204
204
205 # Store the actual shell's name
205 # Store the actual shell's name
206 self.name = name
206 self.name = name
207
207
208 # We need to know whether the instance is meant for embedding, since
208 # We need to know whether the instance is meant for embedding, since
209 # global/local namespaces need to be handled differently in that case
209 # global/local namespaces need to be handled differently in that case
210 self.embedded = embedded
210 self.embedded = embedded
211
211
212 # command compiler
212 # command compiler
213 self.compile = codeop.CommandCompiler()
213 self.compile = codeop.CommandCompiler()
214
214
215 # User input buffer
215 # User input buffer
216 self.buffer = []
216 self.buffer = []
217
217
218 # Default name given in compilation of code
218 # Default name given in compilation of code
219 self.filename = '<ipython console>'
219 self.filename = '<ipython console>'
220
220
221 # Make an empty namespace, which extension writers can rely on both
221 # Make an empty namespace, which extension writers can rely on both
222 # existing and NEVER being used by ipython itself. This gives them a
222 # existing and NEVER being used by ipython itself. This gives them a
223 # convenient location for storing additional information and state
223 # convenient location for storing additional information and state
224 # their extensions may require, without fear of collisions with other
224 # their extensions may require, without fear of collisions with other
225 # ipython names that may develop later.
225 # ipython names that may develop later.
226 self.meta = Bunch()
226 self.meta = Bunch()
227
227
228 # Create the namespace where the user will operate. user_ns is
228 # Create the namespace where the user will operate. user_ns is
229 # normally the only one used, and it is passed to the exec calls as
229 # normally the only one used, and it is passed to the exec calls as
230 # the locals argument. But we do carry a user_global_ns namespace
230 # the locals argument. But we do carry a user_global_ns namespace
231 # given as the exec 'globals' argument, This is useful in embedding
231 # given as the exec 'globals' argument, This is useful in embedding
232 # situations where the ipython shell opens in a context where the
232 # situations where the ipython shell opens in a context where the
233 # distinction between locals and globals is meaningful.
233 # distinction between locals and globals is meaningful.
234
234
235 # FIXME. For some strange reason, __builtins__ is showing up at user
235 # FIXME. For some strange reason, __builtins__ is showing up at user
236 # level as a dict instead of a module. This is a manual fix, but I
236 # level as a dict instead of a module. This is a manual fix, but I
237 # should really track down where the problem is coming from. Alex
237 # should really track down where the problem is coming from. Alex
238 # Schmolck reported this problem first.
238 # Schmolck reported this problem first.
239
239
240 # A useful post by Alex Martelli on this topic:
240 # A useful post by Alex Martelli on this topic:
241 # Re: inconsistent value from __builtins__
241 # Re: inconsistent value from __builtins__
242 # Von: Alex Martelli <aleaxit@yahoo.com>
242 # Von: Alex Martelli <aleaxit@yahoo.com>
243 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
243 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
244 # Gruppen: comp.lang.python
244 # Gruppen: comp.lang.python
245
245
246 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
246 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
247 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
247 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
248 # > <type 'dict'>
248 # > <type 'dict'>
249 # > >>> print type(__builtins__)
249 # > >>> print type(__builtins__)
250 # > <type 'module'>
250 # > <type 'module'>
251 # > Is this difference in return value intentional?
251 # > Is this difference in return value intentional?
252
252
253 # Well, it's documented that '__builtins__' can be either a dictionary
253 # Well, it's documented that '__builtins__' can be either a dictionary
254 # or a module, and it's been that way for a long time. Whether it's
254 # or a module, and it's been that way for a long time. Whether it's
255 # intentional (or sensible), I don't know. In any case, the idea is
255 # intentional (or sensible), I don't know. In any case, the idea is
256 # that if you need to access the built-in namespace directly, you
256 # that if you need to access the built-in namespace directly, you
257 # should start with "import __builtin__" (note, no 's') which will
257 # should start with "import __builtin__" (note, no 's') which will
258 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
258 # definitely give you a module. Yeah, it's somewhatΒ confusing:-(.
259
259
260 if user_ns is None:
260 if user_ns is None:
261 # Set __name__ to __main__ to better match the behavior of the
261 # Set __name__ to __main__ to better match the behavior of the
262 # normal interpreter.
262 # normal interpreter.
263 user_ns = {'__name__' :'__main__',
263 user_ns = {'__name__' :'__main__',
264 '__builtins__' : __builtin__,
264 '__builtins__' : __builtin__,
265 }
265 }
266
266
267 if user_global_ns is None:
267 if user_global_ns is None:
268 user_global_ns = {}
268 user_global_ns = {}
269
269
270 # Assign namespaces
270 # Assign namespaces
271 # This is the namespace where all normal user variables live
271 # This is the namespace where all normal user variables live
272 self.user_ns = user_ns
272 self.user_ns = user_ns
273 # Embedded instances require a separate namespace for globals.
273 # Embedded instances require a separate namespace for globals.
274 # Normally this one is unused by non-embedded instances.
274 # Normally this one is unused by non-embedded instances.
275 self.user_global_ns = user_global_ns
275 self.user_global_ns = user_global_ns
276 # A namespace to keep track of internal data structures to prevent
276 # A namespace to keep track of internal data structures to prevent
277 # them from cluttering user-visible stuff. Will be updated later
277 # them from cluttering user-visible stuff. Will be updated later
278 self.internal_ns = {}
278 self.internal_ns = {}
279
279
280 # Namespace of system aliases. Each entry in the alias
280 # Namespace of system aliases. Each entry in the alias
281 # table must be a 2-tuple of the form (N,name), where N is the number
281 # table must be a 2-tuple of the form (N,name), where N is the number
282 # of positional arguments of the alias.
282 # of positional arguments of the alias.
283 self.alias_table = {}
283 self.alias_table = {}
284
284
285 # A table holding all the namespaces IPython deals with, so that
285 # A table holding all the namespaces IPython deals with, so that
286 # introspection facilities can search easily.
286 # introspection facilities can search easily.
287 self.ns_table = {'user':user_ns,
287 self.ns_table = {'user':user_ns,
288 'user_global':user_global_ns,
288 'user_global':user_global_ns,
289 'alias':self.alias_table,
289 'alias':self.alias_table,
290 'internal':self.internal_ns,
290 'internal':self.internal_ns,
291 'builtin':__builtin__.__dict__
291 'builtin':__builtin__.__dict__
292 }
292 }
293
293
294 # The user namespace MUST have a pointer to the shell itself.
294 # The user namespace MUST have a pointer to the shell itself.
295 self.user_ns[name] = self
295 self.user_ns[name] = self
296
296
297 # We need to insert into sys.modules something that looks like a
297 # We need to insert into sys.modules something that looks like a
298 # module but which accesses the IPython namespace, for shelve and
298 # module but which accesses the IPython namespace, for shelve and
299 # pickle to work interactively. Normally they rely on getting
299 # pickle to work interactively. Normally they rely on getting
300 # everything out of __main__, but for embedding purposes each IPython
300 # everything out of __main__, but for embedding purposes each IPython
301 # instance has its own private namespace, so we can't go shoving
301 # instance has its own private namespace, so we can't go shoving
302 # everything into __main__.
302 # everything into __main__.
303
303
304 # note, however, that we should only do this for non-embedded
304 # note, however, that we should only do this for non-embedded
305 # ipythons, which really mimic the __main__.__dict__ with their own
305 # ipythons, which really mimic the __main__.__dict__ with their own
306 # namespace. Embedded instances, on the other hand, should not do
306 # namespace. Embedded instances, on the other hand, should not do
307 # this because they need to manage the user local/global namespaces
307 # this because they need to manage the user local/global namespaces
308 # only, but they live within a 'normal' __main__ (meaning, they
308 # only, but they live within a 'normal' __main__ (meaning, they
309 # shouldn't overtake the execution environment of the script they're
309 # shouldn't overtake the execution environment of the script they're
310 # embedded in).
310 # embedded in).
311
311
312 if not embedded:
312 if not embedded:
313 try:
313 try:
314 main_name = self.user_ns['__name__']
314 main_name = self.user_ns['__name__']
315 except KeyError:
315 except KeyError:
316 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
316 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
317 else:
317 else:
318 #print "pickle hack in place" # dbg
318 #print "pickle hack in place" # dbg
319 #print 'main_name:',main_name # dbg
319 #print 'main_name:',main_name # dbg
320 sys.modules[main_name] = FakeModule(self.user_ns)
320 sys.modules[main_name] = FakeModule(self.user_ns)
321
321
322 # List of input with multi-line handling.
322 # List of input with multi-line handling.
323 # Fill its zero entry, user counter starts at 1
323 # Fill its zero entry, user counter starts at 1
324 self.input_hist = InputList(['\n'])
324 self.input_hist = InputList(['\n'])
325
325
326 # list of visited directories
326 # list of visited directories
327 try:
327 try:
328 self.dir_hist = [os.getcwd()]
328 self.dir_hist = [os.getcwd()]
329 except IOError, e:
329 except IOError, e:
330 self.dir_hist = []
330 self.dir_hist = []
331
331
332 # dict of output history
332 # dict of output history
333 self.output_hist = {}
333 self.output_hist = {}
334
334
335 # dict of things NOT to alias (keywords, builtins and some magics)
335 # dict of things NOT to alias (keywords, builtins and some magics)
336 no_alias = {}
336 no_alias = {}
337 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
337 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
338 for key in keyword.kwlist + no_alias_magics:
338 for key in keyword.kwlist + no_alias_magics:
339 no_alias[key] = 1
339 no_alias[key] = 1
340 no_alias.update(__builtin__.__dict__)
340 no_alias.update(__builtin__.__dict__)
341 self.no_alias = no_alias
341 self.no_alias = no_alias
342
342
343 # make global variables for user access to these
343 # make global variables for user access to these
344 self.user_ns['_ih'] = self.input_hist
344 self.user_ns['_ih'] = self.input_hist
345 self.user_ns['_oh'] = self.output_hist
345 self.user_ns['_oh'] = self.output_hist
346 self.user_ns['_dh'] = self.dir_hist
346 self.user_ns['_dh'] = self.dir_hist
347
347
348 # user aliases to input and output histories
348 # user aliases to input and output histories
349 self.user_ns['In'] = self.input_hist
349 self.user_ns['In'] = self.input_hist
350 self.user_ns['Out'] = self.output_hist
350 self.user_ns['Out'] = self.output_hist
351
351
352 # Object variable to store code object waiting execution. This is
352 # Object variable to store code object waiting execution. This is
353 # used mainly by the multithreaded shells, but it can come in handy in
353 # used mainly by the multithreaded shells, but it can come in handy in
354 # other situations. No need to use a Queue here, since it's a single
354 # other situations. No need to use a Queue here, since it's a single
355 # item which gets cleared once run.
355 # item which gets cleared once run.
356 self.code_to_run = None
356 self.code_to_run = None
357
357
358 # escapes for automatic behavior on the command line
358 # escapes for automatic behavior on the command line
359 self.ESC_SHELL = '!'
359 self.ESC_SHELL = '!'
360 self.ESC_HELP = '?'
360 self.ESC_HELP = '?'
361 self.ESC_MAGIC = '%'
361 self.ESC_MAGIC = '%'
362 self.ESC_QUOTE = ','
362 self.ESC_QUOTE = ','
363 self.ESC_QUOTE2 = ';'
363 self.ESC_QUOTE2 = ';'
364 self.ESC_PAREN = '/'
364 self.ESC_PAREN = '/'
365
365
366 # And their associated handlers
366 # And their associated handlers
367 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
367 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
368 self.ESC_QUOTE : self.handle_auto,
368 self.ESC_QUOTE : self.handle_auto,
369 self.ESC_QUOTE2 : self.handle_auto,
369 self.ESC_QUOTE2 : self.handle_auto,
370 self.ESC_MAGIC : self.handle_magic,
370 self.ESC_MAGIC : self.handle_magic,
371 self.ESC_HELP : self.handle_help,
371 self.ESC_HELP : self.handle_help,
372 self.ESC_SHELL : self.handle_shell_escape,
372 self.ESC_SHELL : self.handle_shell_escape,
373 }
373 }
374
374
375 # class initializations
375 # class initializations
376 Magic.__init__(self,self)
376 Magic.__init__(self,self)
377
377
378 # Python source parser/formatter for syntax highlighting
378 # Python source parser/formatter for syntax highlighting
379 pyformat = PyColorize.Parser().format
379 pyformat = PyColorize.Parser().format
380 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
380 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
381
381
382 # hooks holds pointers used for user-side customizations
382 # hooks holds pointers used for user-side customizations
383 self.hooks = Struct()
383 self.hooks = Struct()
384
384
385 # Set all default hooks, defined in the IPython.hooks module.
385 # Set all default hooks, defined in the IPython.hooks module.
386 hooks = IPython.hooks
386 hooks = IPython.hooks
387 for hook_name in hooks.__all__:
387 for hook_name in hooks.__all__:
388 self.set_hook(hook_name,getattr(hooks,hook_name))
388 self.set_hook(hook_name,getattr(hooks,hook_name))
389
389
390 # Flag to mark unconditional exit
390 # Flag to mark unconditional exit
391 self.exit_now = False
391 self.exit_now = False
392
392
393 self.usage_min = """\
393 self.usage_min = """\
394 An enhanced console for Python.
394 An enhanced console for Python.
395 Some of its features are:
395 Some of its features are:
396 - Readline support if the readline library is present.
396 - Readline support if the readline library is present.
397 - Tab completion in the local namespace.
397 - Tab completion in the local namespace.
398 - Logging of input, see command-line options.
398 - Logging of input, see command-line options.
399 - System shell escape via ! , eg !ls.
399 - System shell escape via ! , eg !ls.
400 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
400 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
401 - Keeps track of locally defined variables via %who, %whos.
401 - Keeps track of locally defined variables via %who, %whos.
402 - Show object information with a ? eg ?x or x? (use ?? for more info).
402 - Show object information with a ? eg ?x or x? (use ?? for more info).
403 """
403 """
404 if usage: self.usage = usage
404 if usage: self.usage = usage
405 else: self.usage = self.usage_min
405 else: self.usage = self.usage_min
406
406
407 # Storage
407 # Storage
408 self.rc = rc # This will hold all configuration information
408 self.rc = rc # This will hold all configuration information
409 self.pager = 'less'
409 self.pager = 'less'
410 # temporary files used for various purposes. Deleted at exit.
410 # temporary files used for various purposes. Deleted at exit.
411 self.tempfiles = []
411 self.tempfiles = []
412
412
413 # Keep track of readline usage (later set by init_readline)
413 # Keep track of readline usage (later set by init_readline)
414 self.has_readline = False
414 self.has_readline = False
415
415
416 # template for logfile headers. It gets resolved at runtime by the
416 # template for logfile headers. It gets resolved at runtime by the
417 # logstart method.
417 # logstart method.
418 self.loghead_tpl = \
418 self.loghead_tpl = \
419 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
419 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
420 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
420 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
421 #log# opts = %s
421 #log# opts = %s
422 #log# args = %s
422 #log# args = %s
423 #log# It is safe to make manual edits below here.
423 #log# It is safe to make manual edits below here.
424 #log#-----------------------------------------------------------------------
424 #log#-----------------------------------------------------------------------
425 """
425 """
426 # for pushd/popd management
426 # for pushd/popd management
427 try:
427 try:
428 self.home_dir = get_home_dir()
428 self.home_dir = get_home_dir()
429 except HomeDirError,msg:
429 except HomeDirError,msg:
430 fatal(msg)
430 fatal(msg)
431
431
432 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
432 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
433
433
434 # Functions to call the underlying shell.
434 # Functions to call the underlying shell.
435
435
436 # utility to expand user variables via Itpl
436 # utility to expand user variables via Itpl
437 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
437 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
438 self.user_ns))
438 self.user_ns))
439 # The first is similar to os.system, but it doesn't return a value,
439 # The first is similar to os.system, but it doesn't return a value,
440 # and it allows interpolation of variables in the user's namespace.
440 # and it allows interpolation of variables in the user's namespace.
441 self.system = lambda cmd: shell(self.var_expand(cmd),
441 self.system = lambda cmd: shell(self.var_expand(cmd),
442 header='IPython system call: ',
442 header='IPython system call: ',
443 verbose=self.rc.system_verbose)
443 verbose=self.rc.system_verbose)
444 # These are for getoutput and getoutputerror:
444 # These are for getoutput and getoutputerror:
445 self.getoutput = lambda cmd: \
445 self.getoutput = lambda cmd: \
446 getoutput(self.var_expand(cmd),
446 getoutput(self.var_expand(cmd),
447 header='IPython system call: ',
447 header='IPython system call: ',
448 verbose=self.rc.system_verbose)
448 verbose=self.rc.system_verbose)
449 self.getoutputerror = lambda cmd: \
449 self.getoutputerror = lambda cmd: \
450 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
450 getoutputerror(str(ItplNS(cmd.replace('#','\#'),
451 self.user_ns)),
451 self.user_ns)),
452 header='IPython system call: ',
452 header='IPython system call: ',
453 verbose=self.rc.system_verbose)
453 verbose=self.rc.system_verbose)
454
454
455 # RegExp for splitting line contents into pre-char//first
455 # RegExp for splitting line contents into pre-char//first
456 # word-method//rest. For clarity, each group in on one line.
456 # word-method//rest. For clarity, each group in on one line.
457
457
458 # WARNING: update the regexp if the above escapes are changed, as they
458 # WARNING: update the regexp if the above escapes are changed, as they
459 # are hardwired in.
459 # are hardwired in.
460
460
461 # Don't get carried away with trying to make the autocalling catch too
461 # Don't get carried away with trying to make the autocalling catch too
462 # much: it's better to be conservative rather than to trigger hidden
462 # much: it's better to be conservative rather than to trigger hidden
463 # evals() somewhere and end up causing side effects.
463 # evals() somewhere and end up causing side effects.
464
464
465 self.line_split = re.compile(r'^([\s*,;/])'
465 self.line_split = re.compile(r'^([\s*,;/])'
466 r'([\?\w\.]+\w*\s*)'
466 r'([\?\w\.]+\w*\s*)'
467 r'(\(?.*$)')
467 r'(\(?.*$)')
468
468
469 # Original re, keep around for a while in case changes break something
469 # Original re, keep around for a while in case changes break something
470 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
470 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
471 # r'(\s*[\?\w\.]+\w*\s*)'
471 # r'(\s*[\?\w\.]+\w*\s*)'
472 # r'(\(?.*$)')
472 # r'(\(?.*$)')
473
473
474 # RegExp to identify potential function names
474 # RegExp to identify potential function names
475 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
475 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
476 # RegExp to exclude strings with this start from autocalling
476 # RegExp to exclude strings with this start from autocalling
477 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
477 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
478
478
479 # try to catch also methods for stuff in lists/tuples/dicts: off
479 # try to catch also methods for stuff in lists/tuples/dicts: off
480 # (experimental). For this to work, the line_split regexp would need
480 # (experimental). For this to work, the line_split regexp would need
481 # to be modified so it wouldn't break things at '['. That line is
481 # to be modified so it wouldn't break things at '['. That line is
482 # nasty enough that I shouldn't change it until I can test it _well_.
482 # nasty enough that I shouldn't change it until I can test it _well_.
483 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
483 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
484
484
485 # keep track of where we started running (mainly for crash post-mortem)
485 # keep track of where we started running (mainly for crash post-mortem)
486 self.starting_dir = os.getcwd()
486 self.starting_dir = os.getcwd()
487
487
488 # Various switches which can be set
488 # Various switches which can be set
489 self.CACHELENGTH = 5000 # this is cheap, it's just text
489 self.CACHELENGTH = 5000 # this is cheap, it's just text
490 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
490 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
491 self.banner2 = banner2
491 self.banner2 = banner2
492
492
493 # TraceBack handlers:
493 # TraceBack handlers:
494
494
495 # Syntax error handler.
495 # Syntax error handler.
496 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
496 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
497
497
498 # The interactive one is initialized with an offset, meaning we always
498 # The interactive one is initialized with an offset, meaning we always
499 # want to remove the topmost item in the traceback, which is our own
499 # want to remove the topmost item in the traceback, which is our own
500 # internal code. Valid modes: ['Plain','Context','Verbose']
500 # internal code. Valid modes: ['Plain','Context','Verbose']
501 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
501 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
502 color_scheme='NoColor',
502 color_scheme='NoColor',
503 tb_offset = 1)
503 tb_offset = 1)
504
504
505 # IPython itself shouldn't crash. This will produce a detailed
505 # IPython itself shouldn't crash. This will produce a detailed
506 # post-mortem if it does. But we only install the crash handler for
506 # post-mortem if it does. But we only install the crash handler for
507 # non-threaded shells, the threaded ones use a normal verbose reporter
507 # non-threaded shells, the threaded ones use a normal verbose reporter
508 # and lose the crash handler. This is because exceptions in the main
508 # and lose the crash handler. This is because exceptions in the main
509 # thread (such as in GUI code) propagate directly to sys.excepthook,
509 # thread (such as in GUI code) propagate directly to sys.excepthook,
510 # and there's no point in printing crash dumps for every user exception.
510 # and there's no point in printing crash dumps for every user exception.
511 if self.isthreaded:
511 if self.isthreaded:
512 sys.excepthook = ultraTB.FormattedTB()
512 sys.excepthook = ultraTB.FormattedTB()
513 else:
513 else:
514 from IPython import CrashHandler
514 from IPython import CrashHandler
515 sys.excepthook = CrashHandler.CrashHandler(self)
515 sys.excepthook = CrashHandler.CrashHandler(self)
516
516
517 # The instance will store a pointer to this, so that runtime code
517 # The instance will store a pointer to this, so that runtime code
518 # (such as magics) can access it. This is because during the
518 # (such as magics) can access it. This is because during the
519 # read-eval loop, it gets temporarily overwritten (to deal with GUI
519 # read-eval loop, it gets temporarily overwritten (to deal with GUI
520 # frameworks).
520 # frameworks).
521 self.sys_excepthook = sys.excepthook
521 self.sys_excepthook = sys.excepthook
522
522
523 # and add any custom exception handlers the user may have specified
523 # and add any custom exception handlers the user may have specified
524 self.set_custom_exc(*custom_exceptions)
524 self.set_custom_exc(*custom_exceptions)
525
525
526 # Object inspector
526 # Object inspector
527 self.inspector = OInspect.Inspector(OInspect.InspectColors,
527 self.inspector = OInspect.Inspector(OInspect.InspectColors,
528 PyColorize.ANSICodeColors,
528 PyColorize.ANSICodeColors,
529 'NoColor')
529 'NoColor')
530 # indentation management
530 # indentation management
531 self.autoindent = False
531 self.autoindent = False
532 self.indent_current_nsp = 0
532 self.indent_current_nsp = 0
533 self.indent_current = '' # actual indent string
533 self.indent_current = '' # actual indent string
534
534
535 # Make some aliases automatically
535 # Make some aliases automatically
536 # Prepare list of shell aliases to auto-define
536 # Prepare list of shell aliases to auto-define
537 if os.name == 'posix':
537 if os.name == 'posix':
538 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
538 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
539 'mv mv -i','rm rm -i','cp cp -i',
539 'mv mv -i','rm rm -i','cp cp -i',
540 'cat cat','less less','clear clear',
540 'cat cat','less less','clear clear',
541 # a better ls
541 # a better ls
542 'ls ls -F',
542 'ls ls -F',
543 # long ls
543 # long ls
544 'll ls -lF',
544 'll ls -lF',
545 # color ls
545 # color ls
546 'lc ls -F -o --color',
546 'lc ls -F -o --color',
547 # ls normal files only
547 # ls normal files only
548 'lf ls -F -o --color %l | grep ^-',
548 'lf ls -F -o --color %l | grep ^-',
549 # ls symbolic links
549 # ls symbolic links
550 'lk ls -F -o --color %l | grep ^l',
550 'lk ls -F -o --color %l | grep ^l',
551 # directories or links to directories,
551 # directories or links to directories,
552 'ldir ls -F -o --color %l | grep /$',
552 'ldir ls -F -o --color %l | grep /$',
553 # things which are executable
553 # things which are executable
554 'lx ls -F -o --color %l | grep ^-..x',
554 'lx ls -F -o --color %l | grep ^-..x',
555 )
555 )
556 elif os.name in ['nt','dos']:
556 elif os.name in ['nt','dos']:
557 auto_alias = ('dir dir /on', 'ls dir /on',
557 auto_alias = ('dir dir /on', 'ls dir /on',
558 'ddir dir /ad /on', 'ldir dir /ad /on',
558 'ddir dir /ad /on', 'ldir dir /ad /on',
559 'mkdir mkdir','rmdir rmdir','echo echo',
559 'mkdir mkdir','rmdir rmdir','echo echo',
560 'ren ren','cls cls','copy copy')
560 'ren ren','cls cls','copy copy')
561 else:
561 else:
562 auto_alias = ()
562 auto_alias = ()
563 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
563 self.auto_alias = map(lambda s:s.split(None,1),auto_alias)
564 # Call the actual (public) initializer
564 # Call the actual (public) initializer
565 self.init_auto_alias()
565 self.init_auto_alias()
566 # end __init__
566 # end __init__
567
567
568 def post_config_initialization(self):
568 def post_config_initialization(self):
569 """Post configuration init method
569 """Post configuration init method
570
570
571 This is called after the configuration files have been processed to
571 This is called after the configuration files have been processed to
572 'finalize' the initialization."""
572 'finalize' the initialization."""
573
573
574 rc = self.rc
574 rc = self.rc
575
575
576 # Load readline proper
576 # Load readline proper
577 if rc.readline:
577 if rc.readline:
578 self.init_readline()
578 self.init_readline()
579
579
580 # log system
580 # log system
581 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
581 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
582 # local shortcut, this is used a LOT
582 # local shortcut, this is used a LOT
583 self.log = self.logger.log
583 self.log = self.logger.log
584
584
585 # Initialize cache, set in/out prompts and printing system
585 # Initialize cache, set in/out prompts and printing system
586 self.outputcache = CachedOutput(self,
586 self.outputcache = CachedOutput(self,
587 rc.cache_size,
587 rc.cache_size,
588 rc.pprint,
588 rc.pprint,
589 input_sep = rc.separate_in,
589 input_sep = rc.separate_in,
590 output_sep = rc.separate_out,
590 output_sep = rc.separate_out,
591 output_sep2 = rc.separate_out2,
591 output_sep2 = rc.separate_out2,
592 ps1 = rc.prompt_in1,
592 ps1 = rc.prompt_in1,
593 ps2 = rc.prompt_in2,
593 ps2 = rc.prompt_in2,
594 ps_out = rc.prompt_out,
594 ps_out = rc.prompt_out,
595 pad_left = rc.prompts_pad_left)
595 pad_left = rc.prompts_pad_left)
596
596
597 # user may have over-ridden the default print hook:
597 # user may have over-ridden the default print hook:
598 try:
598 try:
599 self.outputcache.__class__.display = self.hooks.display
599 self.outputcache.__class__.display = self.hooks.display
600 except AttributeError:
600 except AttributeError:
601 pass
601 pass
602
602
603 # I don't like assigning globally to sys, because it means when embedding
603 # I don't like assigning globally to sys, because it means when embedding
604 # instances, each embedded instance overrides the previous choice. But
604 # instances, each embedded instance overrides the previous choice. But
605 # sys.displayhook seems to be called internally by exec, so I don't see a
605 # sys.displayhook seems to be called internally by exec, so I don't see a
606 # way around it.
606 # way around it.
607 sys.displayhook = self.outputcache
607 sys.displayhook = self.outputcache
608
608
609 # Set user colors (don't do it in the constructor above so that it
609 # Set user colors (don't do it in the constructor above so that it
610 # doesn't crash if colors option is invalid)
610 # doesn't crash if colors option is invalid)
611 self.magic_colors(rc.colors)
611 self.magic_colors(rc.colors)
612
612
613 # Set calling of pdb on exceptions
613 # Set calling of pdb on exceptions
614 self.call_pdb = rc.pdb
614 self.call_pdb = rc.pdb
615
615
616 # Load user aliases
616 # Load user aliases
617 for alias in rc.alias:
617 for alias in rc.alias:
618 self.magic_alias(alias)
618 self.magic_alias(alias)
619
619
620 # dynamic data that survives through sessions
620 # dynamic data that survives through sessions
621 # XXX make the filename a config option?
621 # XXX make the filename a config option?
622 persist_base = 'persist'
622 persist_base = 'persist'
623 if rc.profile:
623 if rc.profile:
624 persist_base += '_%s' % rc.profile
624 persist_base += '_%s' % rc.profile
625 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
625 self.persist_fname = os.path.join(rc.ipythondir,persist_base)
626
626
627 try:
627 try:
628 self.persist = pickle.load(file(self.persist_fname))
628 self.persist = pickle.load(file(self.persist_fname))
629 except:
629 except:
630 self.persist = {}
630 self.persist = {}
631
631
632
632
633 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
633 for (key, value) in [(k[2:],v) for (k,v) in self.persist.items() if k.startswith('S:')]:
634 try:
634 try:
635 obj = pickle.loads(value)
635 obj = pickle.loads(value)
636 except:
636 except:
637
637
638 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
638 print "Unable to restore variable '%s', ignoring (use %%store -d to forget!)" % key
639 print "The error was:",sys.exc_info()[0]
639 print "The error was:",sys.exc_info()[0]
640 continue
640 continue
641
641
642
642
643 self.user_ns[key] = obj
643 self.user_ns[key] = obj
644
644
645 def add_builtins(self):
645 def add_builtins(self):
646 """Store ipython references into the builtin namespace.
646 """Store ipython references into the builtin namespace.
647
647
648 Some parts of ipython operate via builtins injected here, which hold a
648 Some parts of ipython operate via builtins injected here, which hold a
649 reference to IPython itself."""
649 reference to IPython itself."""
650
650
651 builtins_new = dict(__IPYTHON__ = self,
651 builtins_new = dict(__IPYTHON__ = self,
652 ip_set_hook = self.set_hook,
652 ip_set_hook = self.set_hook,
653 jobs = self.jobs,
653 jobs = self.jobs,
654 ipmagic = self.ipmagic,
654 ipmagic = self.ipmagic,
655 ipalias = self.ipalias,
655 ipalias = self.ipalias,
656 ipsystem = self.ipsystem,
656 ipsystem = self.ipsystem,
657 )
657 )
658 for biname,bival in builtins_new.items():
658 for biname,bival in builtins_new.items():
659 try:
659 try:
660 # store the orignal value so we can restore it
660 # store the orignal value so we can restore it
661 self.builtins_added[biname] = __builtin__.__dict__[biname]
661 self.builtins_added[biname] = __builtin__.__dict__[biname]
662 except KeyError:
662 except KeyError:
663 # or mark that it wasn't defined, and we'll just delete it at
663 # or mark that it wasn't defined, and we'll just delete it at
664 # cleanup
664 # cleanup
665 self.builtins_added[biname] = Undefined
665 self.builtins_added[biname] = Undefined
666 __builtin__.__dict__[biname] = bival
666 __builtin__.__dict__[biname] = bival
667
667
668 # Keep in the builtins a flag for when IPython is active. We set it
668 # Keep in the builtins a flag for when IPython is active. We set it
669 # with setdefault so that multiple nested IPythons don't clobber one
669 # with setdefault so that multiple nested IPythons don't clobber one
670 # another. Each will increase its value by one upon being activated,
670 # another. Each will increase its value by one upon being activated,
671 # which also gives us a way to determine the nesting level.
671 # which also gives us a way to determine the nesting level.
672 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
672 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
673
673
674 def clean_builtins(self):
674 def clean_builtins(self):
675 """Remove any builtins which might have been added by add_builtins, or
675 """Remove any builtins which might have been added by add_builtins, or
676 restore overwritten ones to their previous values."""
676 restore overwritten ones to their previous values."""
677 for biname,bival in self.builtins_added.items():
677 for biname,bival in self.builtins_added.items():
678 if bival is Undefined:
678 if bival is Undefined:
679 del __builtin__.__dict__[biname]
679 del __builtin__.__dict__[biname]
680 else:
680 else:
681 __builtin__.__dict__[biname] = bival
681 __builtin__.__dict__[biname] = bival
682 self.builtins_added.clear()
682 self.builtins_added.clear()
683
683
684 def set_hook(self,name,hook):
684 def set_hook(self,name,hook):
685 """set_hook(name,hook) -> sets an internal IPython hook.
685 """set_hook(name,hook) -> sets an internal IPython hook.
686
686
687 IPython exposes some of its internal API as user-modifiable hooks. By
687 IPython exposes some of its internal API as user-modifiable hooks. By
688 resetting one of these hooks, you can modify IPython's behavior to
688 resetting one of these hooks, you can modify IPython's behavior to
689 call at runtime your own routines."""
689 call at runtime your own routines."""
690
690
691 # At some point in the future, this should validate the hook before it
691 # At some point in the future, this should validate the hook before it
692 # accepts it. Probably at least check that the hook takes the number
692 # accepts it. Probably at least check that the hook takes the number
693 # of args it's supposed to.
693 # of args it's supposed to.
694 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
694 setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
695
695
696 def set_custom_exc(self,exc_tuple,handler):
696 def set_custom_exc(self,exc_tuple,handler):
697 """set_custom_exc(exc_tuple,handler)
697 """set_custom_exc(exc_tuple,handler)
698
698
699 Set a custom exception handler, which will be called if any of the
699 Set a custom exception handler, which will be called if any of the
700 exceptions in exc_tuple occur in the mainloop (specifically, in the
700 exceptions in exc_tuple occur in the mainloop (specifically, in the
701 runcode() method.
701 runcode() method.
702
702
703 Inputs:
703 Inputs:
704
704
705 - exc_tuple: a *tuple* of valid exceptions to call the defined
705 - exc_tuple: a *tuple* of valid exceptions to call the defined
706 handler for. It is very important that you use a tuple, and NOT A
706 handler for. It is very important that you use a tuple, and NOT A
707 LIST here, because of the way Python's except statement works. If
707 LIST here, because of the way Python's except statement works. If
708 you only want to trap a single exception, use a singleton tuple:
708 you only want to trap a single exception, use a singleton tuple:
709
709
710 exc_tuple == (MyCustomException,)
710 exc_tuple == (MyCustomException,)
711
711
712 - handler: this must be defined as a function with the following
712 - handler: this must be defined as a function with the following
713 basic interface: def my_handler(self,etype,value,tb).
713 basic interface: def my_handler(self,etype,value,tb).
714
714
715 This will be made into an instance method (via new.instancemethod)
715 This will be made into an instance method (via new.instancemethod)
716 of IPython itself, and it will be called if any of the exceptions
716 of IPython itself, and it will be called if any of the exceptions
717 listed in the exc_tuple are caught. If the handler is None, an
717 listed in the exc_tuple are caught. If the handler is None, an
718 internal basic one is used, which just prints basic info.
718 internal basic one is used, which just prints basic info.
719
719
720 WARNING: by putting in your own exception handler into IPython's main
720 WARNING: by putting in your own exception handler into IPython's main
721 execution loop, you run a very good chance of nasty crashes. This
721 execution loop, you run a very good chance of nasty crashes. This
722 facility should only be used if you really know what you are doing."""
722 facility should only be used if you really know what you are doing."""
723
723
724 assert type(exc_tuple)==type(()) , \
724 assert type(exc_tuple)==type(()) , \
725 "The custom exceptions must be given AS A TUPLE."
725 "The custom exceptions must be given AS A TUPLE."
726
726
727 def dummy_handler(self,etype,value,tb):
727 def dummy_handler(self,etype,value,tb):
728 print '*** Simple custom exception handler ***'
728 print '*** Simple custom exception handler ***'
729 print 'Exception type :',etype
729 print 'Exception type :',etype
730 print 'Exception value:',value
730 print 'Exception value:',value
731 print 'Traceback :',tb
731 print 'Traceback :',tb
732 print 'Source code :','\n'.join(self.buffer)
732 print 'Source code :','\n'.join(self.buffer)
733
733
734 if handler is None: handler = dummy_handler
734 if handler is None: handler = dummy_handler
735
735
736 self.CustomTB = new.instancemethod(handler,self,self.__class__)
736 self.CustomTB = new.instancemethod(handler,self,self.__class__)
737 self.custom_exceptions = exc_tuple
737 self.custom_exceptions = exc_tuple
738
738
739 def set_custom_completer(self,completer,pos=0):
739 def set_custom_completer(self,completer,pos=0):
740 """set_custom_completer(completer,pos=0)
740 """set_custom_completer(completer,pos=0)
741
741
742 Adds a new custom completer function.
742 Adds a new custom completer function.
743
743
744 The position argument (defaults to 0) is the index in the completers
744 The position argument (defaults to 0) is the index in the completers
745 list where you want the completer to be inserted."""
745 list where you want the completer to be inserted."""
746
746
747 newcomp = new.instancemethod(completer,self.Completer,
747 newcomp = new.instancemethod(completer,self.Completer,
748 self.Completer.__class__)
748 self.Completer.__class__)
749 self.Completer.matchers.insert(pos,newcomp)
749 self.Completer.matchers.insert(pos,newcomp)
750
750
751 def _get_call_pdb(self):
751 def _get_call_pdb(self):
752 return self._call_pdb
752 return self._call_pdb
753
753
754 def _set_call_pdb(self,val):
754 def _set_call_pdb(self,val):
755
755
756 if val not in (0,1,False,True):
756 if val not in (0,1,False,True):
757 raise ValueError,'new call_pdb value must be boolean'
757 raise ValueError,'new call_pdb value must be boolean'
758
758
759 # store value in instance
759 # store value in instance
760 self._call_pdb = val
760 self._call_pdb = val
761
761
762 # notify the actual exception handlers
762 # notify the actual exception handlers
763 self.InteractiveTB.call_pdb = val
763 self.InteractiveTB.call_pdb = val
764 if self.isthreaded:
764 if self.isthreaded:
765 try:
765 try:
766 self.sys_excepthook.call_pdb = val
766 self.sys_excepthook.call_pdb = val
767 except:
767 except:
768 warn('Failed to activate pdb for threaded exception handler')
768 warn('Failed to activate pdb for threaded exception handler')
769
769
770 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
770 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
771 'Control auto-activation of pdb at exceptions')
771 'Control auto-activation of pdb at exceptions')
772
772
773
773
774 # These special functions get installed in the builtin namespace, to
774 # These special functions get installed in the builtin namespace, to
775 # provide programmatic (pure python) access to magics, aliases and system
775 # provide programmatic (pure python) access to magics, aliases and system
776 # calls. This is important for logging, user scripting, and more.
776 # calls. This is important for logging, user scripting, and more.
777
777
778 # We are basically exposing, via normal python functions, the three
778 # We are basically exposing, via normal python functions, the three
779 # mechanisms in which ipython offers special call modes (magics for
779 # mechanisms in which ipython offers special call modes (magics for
780 # internal control, aliases for direct system access via pre-selected
780 # internal control, aliases for direct system access via pre-selected
781 # names, and !cmd for calling arbitrary system commands).
781 # names, and !cmd for calling arbitrary system commands).
782
782
783 def ipmagic(self,arg_s):
783 def ipmagic(self,arg_s):
784 """Call a magic function by name.
784 """Call a magic function by name.
785
785
786 Input: a string containing the name of the magic function to call and any
786 Input: a string containing the name of the magic function to call and any
787 additional arguments to be passed to the magic.
787 additional arguments to be passed to the magic.
788
788
789 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
789 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
790 prompt:
790 prompt:
791
791
792 In[1]: %name -opt foo bar
792 In[1]: %name -opt foo bar
793
793
794 To call a magic without arguments, simply use ipmagic('name').
794 To call a magic without arguments, simply use ipmagic('name').
795
795
796 This provides a proper Python function to call IPython's magics in any
796 This provides a proper Python function to call IPython's magics in any
797 valid Python code you can type at the interpreter, including loops and
797 valid Python code you can type at the interpreter, including loops and
798 compound statements. It is added by IPython to the Python builtin
798 compound statements. It is added by IPython to the Python builtin
799 namespace upon initialization."""
799 namespace upon initialization."""
800
800
801 args = arg_s.split(' ',1)
801 args = arg_s.split(' ',1)
802 magic_name = args[0]
802 magic_name = args[0]
803 if magic_name.startswith(self.ESC_MAGIC):
803 if magic_name.startswith(self.ESC_MAGIC):
804 magic_name = magic_name[1:]
804 magic_name = magic_name[1:]
805 try:
805 try:
806 magic_args = args[1]
806 magic_args = args[1]
807 except IndexError:
807 except IndexError:
808 magic_args = ''
808 magic_args = ''
809 fn = getattr(self,'magic_'+magic_name,None)
809 fn = getattr(self,'magic_'+magic_name,None)
810 if fn is None:
810 if fn is None:
811 error("Magic function `%s` not found." % magic_name)
811 error("Magic function `%s` not found." % magic_name)
812 else:
812 else:
813 magic_args = self.var_expand(magic_args)
813 magic_args = self.var_expand(magic_args)
814 return fn(magic_args)
814 return fn(magic_args)
815
815
816 def ipalias(self,arg_s):
816 def ipalias(self,arg_s):
817 """Call an alias by name.
817 """Call an alias by name.
818
818
819 Input: a string containing the name of the alias to call and any
819 Input: a string containing the name of the alias to call and any
820 additional arguments to be passed to the magic.
820 additional arguments to be passed to the magic.
821
821
822 ipalias('name -opt foo bar') is equivalent to typing at the ipython
822 ipalias('name -opt foo bar') is equivalent to typing at the ipython
823 prompt:
823 prompt:
824
824
825 In[1]: name -opt foo bar
825 In[1]: name -opt foo bar
826
826
827 To call an alias without arguments, simply use ipalias('name').
827 To call an alias without arguments, simply use ipalias('name').
828
828
829 This provides a proper Python function to call IPython's aliases in any
829 This provides a proper Python function to call IPython's aliases in any
830 valid Python code you can type at the interpreter, including loops and
830 valid Python code you can type at the interpreter, including loops and
831 compound statements. It is added by IPython to the Python builtin
831 compound statements. It is added by IPython to the Python builtin
832 namespace upon initialization."""
832 namespace upon initialization."""
833
833
834 args = arg_s.split(' ',1)
834 args = arg_s.split(' ',1)
835 alias_name = args[0]
835 alias_name = args[0]
836 try:
836 try:
837 alias_args = args[1]
837 alias_args = args[1]
838 except IndexError:
838 except IndexError:
839 alias_args = ''
839 alias_args = ''
840 if alias_name in self.alias_table:
840 if alias_name in self.alias_table:
841 self.call_alias(alias_name,alias_args)
841 self.call_alias(alias_name,alias_args)
842 else:
842 else:
843 error("Alias `%s` not found." % alias_name)
843 error("Alias `%s` not found." % alias_name)
844
844
845 def ipsystem(self,arg_s):
845 def ipsystem(self,arg_s):
846 """Make a system call, using IPython."""
846 """Make a system call, using IPython."""
847
847 self.system(arg_s)
848 self.system(arg_s)
848
849
849 def complete(self,text):
850 def complete(self,text):
850 """Return a sorted list of all possible completions on text.
851 """Return a sorted list of all possible completions on text.
851
852
852 Inputs:
853 Inputs:
853
854
854 - text: a string of text to be completed on.
855 - text: a string of text to be completed on.
855
856
856 This is a wrapper around the completion mechanism, similar to what
857 This is a wrapper around the completion mechanism, similar to what
857 readline does at the command line when the TAB key is hit. By
858 readline does at the command line when the TAB key is hit. By
858 exposing it as a method, it can be used by other non-readline
859 exposing it as a method, it can be used by other non-readline
859 environments (such as GUIs) for text completion.
860 environments (such as GUIs) for text completion.
860
861
861 Simple usage example:
862 Simple usage example:
862
863
863 In [1]: x = 'hello'
864 In [1]: x = 'hello'
864
865
865 In [2]: __IP.complete('x.l')
866 In [2]: __IP.complete('x.l')
866 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
867 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
867
868
868 complete = self.Completer.complete
869 complete = self.Completer.complete
869 state = 0
870 state = 0
870 # use a dict so we get unique keys, since ipyhton's multiple
871 # use a dict so we get unique keys, since ipyhton's multiple
871 # completers can return duplicates.
872 # completers can return duplicates.
872 comps = {}
873 comps = {}
873 while True:
874 while True:
874 newcomp = complete(text,state)
875 newcomp = complete(text,state)
875 if newcomp is None:
876 if newcomp is None:
876 break
877 break
877 comps[newcomp] = 1
878 comps[newcomp] = 1
878 state += 1
879 state += 1
879 outcomps = comps.keys()
880 outcomps = comps.keys()
880 outcomps.sort()
881 outcomps.sort()
881 return outcomps
882 return outcomps
882
883
883 def set_completer_frame(self, frame):
884 def set_completer_frame(self, frame=None):
884 if frame:
885 if frame:
885 self.Completer.namespace = frame.f_locals
886 self.Completer.namespace = frame.f_locals
886 self.Completer.global_namespace = frame.f_globals
887 self.Completer.global_namespace = frame.f_globals
887 else:
888 else:
888 self.Completer.namespace = self.user_ns
889 self.Completer.namespace = self.user_ns
889 self.Completer.global_namespace = self.user_global_ns
890 self.Completer.global_namespace = self.user_global_ns
890
891
891 def init_auto_alias(self):
892 def init_auto_alias(self):
892 """Define some aliases automatically.
893 """Define some aliases automatically.
893
894
894 These are ALL parameter-less aliases"""
895 These are ALL parameter-less aliases"""
896
895 for alias,cmd in self.auto_alias:
897 for alias,cmd in self.auto_alias:
896 self.alias_table[alias] = (0,cmd)
898 self.alias_table[alias] = (0,cmd)
897
899
898 def alias_table_validate(self,verbose=0):
900 def alias_table_validate(self,verbose=0):
899 """Update information about the alias table.
901 """Update information about the alias table.
900
902
901 In particular, make sure no Python keywords/builtins are in it."""
903 In particular, make sure no Python keywords/builtins are in it."""
902
904
903 no_alias = self.no_alias
905 no_alias = self.no_alias
904 for k in self.alias_table.keys():
906 for k in self.alias_table.keys():
905 if k in no_alias:
907 if k in no_alias:
906 del self.alias_table[k]
908 del self.alias_table[k]
907 if verbose:
909 if verbose:
908 print ("Deleting alias <%s>, it's a Python "
910 print ("Deleting alias <%s>, it's a Python "
909 "keyword or builtin." % k)
911 "keyword or builtin." % k)
910
912
911 def set_autoindent(self,value=None):
913 def set_autoindent(self,value=None):
912 """Set the autoindent flag, checking for readline support.
914 """Set the autoindent flag, checking for readline support.
913
915
914 If called with no arguments, it acts as a toggle."""
916 If called with no arguments, it acts as a toggle."""
915
917
916 if not self.has_readline:
918 if not self.has_readline:
917 if os.name == 'posix':
919 if os.name == 'posix':
918 warn("The auto-indent feature requires the readline library")
920 warn("The auto-indent feature requires the readline library")
919 self.autoindent = 0
921 self.autoindent = 0
920 return
922 return
921 if value is None:
923 if value is None:
922 self.autoindent = not self.autoindent
924 self.autoindent = not self.autoindent
923 else:
925 else:
924 self.autoindent = value
926 self.autoindent = value
925
927
926 def rc_set_toggle(self,rc_field,value=None):
928 def rc_set_toggle(self,rc_field,value=None):
927 """Set or toggle a field in IPython's rc config. structure.
929 """Set or toggle a field in IPython's rc config. structure.
928
930
929 If called with no arguments, it acts as a toggle.
931 If called with no arguments, it acts as a toggle.
930
932
931 If called with a non-existent field, the resulting AttributeError
933 If called with a non-existent field, the resulting AttributeError
932 exception will propagate out."""
934 exception will propagate out."""
933
935
934 rc_val = getattr(self.rc,rc_field)
936 rc_val = getattr(self.rc,rc_field)
935 if value is None:
937 if value is None:
936 value = not rc_val
938 value = not rc_val
937 setattr(self.rc,rc_field,value)
939 setattr(self.rc,rc_field,value)
938
940
939 def user_setup(self,ipythondir,rc_suffix,mode='install'):
941 def user_setup(self,ipythondir,rc_suffix,mode='install'):
940 """Install the user configuration directory.
942 """Install the user configuration directory.
941
943
942 Can be called when running for the first time or to upgrade the user's
944 Can be called when running for the first time or to upgrade the user's
943 .ipython/ directory with the mode parameter. Valid modes are 'install'
945 .ipython/ directory with the mode parameter. Valid modes are 'install'
944 and 'upgrade'."""
946 and 'upgrade'."""
945
947
946 def wait():
948 def wait():
947 try:
949 try:
948 raw_input("Please press <RETURN> to start IPython.")
950 raw_input("Please press <RETURN> to start IPython.")
949 except EOFError:
951 except EOFError:
950 print >> Term.cout
952 print >> Term.cout
951 print '*'*70
953 print '*'*70
952
954
953 cwd = os.getcwd() # remember where we started
955 cwd = os.getcwd() # remember where we started
954 glb = glob.glob
956 glb = glob.glob
955 print '*'*70
957 print '*'*70
956 if mode == 'install':
958 if mode == 'install':
957 print \
959 print \
958 """Welcome to IPython. I will try to create a personal configuration directory
960 """Welcome to IPython. I will try to create a personal configuration directory
959 where you can customize many aspects of IPython's functionality in:\n"""
961 where you can customize many aspects of IPython's functionality in:\n"""
960 else:
962 else:
961 print 'I am going to upgrade your configuration in:'
963 print 'I am going to upgrade your configuration in:'
962
964
963 print ipythondir
965 print ipythondir
964
966
965 rcdirend = os.path.join('IPython','UserConfig')
967 rcdirend = os.path.join('IPython','UserConfig')
966 cfg = lambda d: os.path.join(d,rcdirend)
968 cfg = lambda d: os.path.join(d,rcdirend)
967 try:
969 try:
968 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
970 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
969 except IOError:
971 except IOError:
970 warning = """
972 warning = """
971 Installation error. IPython's directory was not found.
973 Installation error. IPython's directory was not found.
972
974
973 Check the following:
975 Check the following:
974
976
975 The ipython/IPython directory should be in a directory belonging to your
977 The ipython/IPython directory should be in a directory belonging to your
976 PYTHONPATH environment variable (that is, it should be in a directory
978 PYTHONPATH environment variable (that is, it should be in a directory
977 belonging to sys.path). You can copy it explicitly there or just link to it.
979 belonging to sys.path). You can copy it explicitly there or just link to it.
978
980
979 IPython will proceed with builtin defaults.
981 IPython will proceed with builtin defaults.
980 """
982 """
981 warn(warning)
983 warn(warning)
982 wait()
984 wait()
983 return
985 return
984
986
985 if mode == 'install':
987 if mode == 'install':
986 try:
988 try:
987 shutil.copytree(rcdir,ipythondir)
989 shutil.copytree(rcdir,ipythondir)
988 os.chdir(ipythondir)
990 os.chdir(ipythondir)
989 rc_files = glb("ipythonrc*")
991 rc_files = glb("ipythonrc*")
990 for rc_file in rc_files:
992 for rc_file in rc_files:
991 os.rename(rc_file,rc_file+rc_suffix)
993 os.rename(rc_file,rc_file+rc_suffix)
992 except:
994 except:
993 warning = """
995 warning = """
994
996
995 There was a problem with the installation:
997 There was a problem with the installation:
996 %s
998 %s
997 Try to correct it or contact the developers if you think it's a bug.
999 Try to correct it or contact the developers if you think it's a bug.
998 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1000 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
999 warn(warning)
1001 warn(warning)
1000 wait()
1002 wait()
1001 return
1003 return
1002
1004
1003 elif mode == 'upgrade':
1005 elif mode == 'upgrade':
1004 try:
1006 try:
1005 os.chdir(ipythondir)
1007 os.chdir(ipythondir)
1006 except:
1008 except:
1007 print """
1009 print """
1008 Can not upgrade: changing to directory %s failed. Details:
1010 Can not upgrade: changing to directory %s failed. Details:
1009 %s
1011 %s
1010 """ % (ipythondir,sys.exc_info()[1])
1012 """ % (ipythondir,sys.exc_info()[1])
1011 wait()
1013 wait()
1012 return
1014 return
1013 else:
1015 else:
1014 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1016 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1015 for new_full_path in sources:
1017 for new_full_path in sources:
1016 new_filename = os.path.basename(new_full_path)
1018 new_filename = os.path.basename(new_full_path)
1017 if new_filename.startswith('ipythonrc'):
1019 if new_filename.startswith('ipythonrc'):
1018 new_filename = new_filename + rc_suffix
1020 new_filename = new_filename + rc_suffix
1019 # The config directory should only contain files, skip any
1021 # The config directory should only contain files, skip any
1020 # directories which may be there (like CVS)
1022 # directories which may be there (like CVS)
1021 if os.path.isdir(new_full_path):
1023 if os.path.isdir(new_full_path):
1022 continue
1024 continue
1023 if os.path.exists(new_filename):
1025 if os.path.exists(new_filename):
1024 old_file = new_filename+'.old'
1026 old_file = new_filename+'.old'
1025 if os.path.exists(old_file):
1027 if os.path.exists(old_file):
1026 os.remove(old_file)
1028 os.remove(old_file)
1027 os.rename(new_filename,old_file)
1029 os.rename(new_filename,old_file)
1028 shutil.copy(new_full_path,new_filename)
1030 shutil.copy(new_full_path,new_filename)
1029 else:
1031 else:
1030 raise ValueError,'unrecognized mode for install:',`mode`
1032 raise ValueError,'unrecognized mode for install:',`mode`
1031
1033
1032 # Fix line-endings to those native to each platform in the config
1034 # Fix line-endings to those native to each platform in the config
1033 # directory.
1035 # directory.
1034 try:
1036 try:
1035 os.chdir(ipythondir)
1037 os.chdir(ipythondir)
1036 except:
1038 except:
1037 print """
1039 print """
1038 Problem: changing to directory %s failed.
1040 Problem: changing to directory %s failed.
1039 Details:
1041 Details:
1040 %s
1042 %s
1041
1043
1042 Some configuration files may have incorrect line endings. This should not
1044 Some configuration files may have incorrect line endings. This should not
1043 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1045 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1044 wait()
1046 wait()
1045 else:
1047 else:
1046 for fname in glb('ipythonrc*'):
1048 for fname in glb('ipythonrc*'):
1047 try:
1049 try:
1048 native_line_ends(fname,backup=0)
1050 native_line_ends(fname,backup=0)
1049 except IOError:
1051 except IOError:
1050 pass
1052 pass
1051
1053
1052 if mode == 'install':
1054 if mode == 'install':
1053 print """
1055 print """
1054 Successful installation!
1056 Successful installation!
1055
1057
1056 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1058 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1057 IPython manual (there are both HTML and PDF versions supplied with the
1059 IPython manual (there are both HTML and PDF versions supplied with the
1058 distribution) to make sure that your system environment is properly configured
1060 distribution) to make sure that your system environment is properly configured
1059 to take advantage of IPython's features."""
1061 to take advantage of IPython's features."""
1060 else:
1062 else:
1061 print """
1063 print """
1062 Successful upgrade!
1064 Successful upgrade!
1063
1065
1064 All files in your directory:
1066 All files in your directory:
1065 %(ipythondir)s
1067 %(ipythondir)s
1066 which would have been overwritten by the upgrade were backed up with a .old
1068 which would have been overwritten by the upgrade were backed up with a .old
1067 extension. If you had made particular customizations in those files you may
1069 extension. If you had made particular customizations in those files you may
1068 want to merge them back into the new files.""" % locals()
1070 want to merge them back into the new files.""" % locals()
1069 wait()
1071 wait()
1070 os.chdir(cwd)
1072 os.chdir(cwd)
1071 # end user_setup()
1073 # end user_setup()
1072
1074
1073 def atexit_operations(self):
1075 def atexit_operations(self):
1074 """This will be executed at the time of exit.
1076 """This will be executed at the time of exit.
1075
1077
1076 Saving of persistent data should be performed here. """
1078 Saving of persistent data should be performed here. """
1077
1079
1078 # input history
1080 # input history
1079 self.savehist()
1081 self.savehist()
1080
1082
1081 # Cleanup all tempfiles left around
1083 # Cleanup all tempfiles left around
1082 for tfile in self.tempfiles:
1084 for tfile in self.tempfiles:
1083 try:
1085 try:
1084 os.unlink(tfile)
1086 os.unlink(tfile)
1085 except OSError:
1087 except OSError:
1086 pass
1088 pass
1087
1089
1088 # save the "persistent data" catch-all dictionary
1090 # save the "persistent data" catch-all dictionary
1089 try:
1091 try:
1090 pickle.dump(self.persist, open(self.persist_fname,"w"))
1092 pickle.dump(self.persist, open(self.persist_fname,"w"))
1091 except:
1093 except:
1092 print "*** ERROR *** persistent data saving failed."
1094 print "*** ERROR *** persistent data saving failed."
1093
1095
1094 def savehist(self):
1096 def savehist(self):
1095 """Save input history to a file (via readline library)."""
1097 """Save input history to a file (via readline library)."""
1096 try:
1098 try:
1097 self.readline.write_history_file(self.histfile)
1099 self.readline.write_history_file(self.histfile)
1098 except:
1100 except:
1099 print 'Unable to save IPython command history to file: ' + \
1101 print 'Unable to save IPython command history to file: ' + \
1100 `self.histfile`
1102 `self.histfile`
1101
1103
1102 def pre_readline(self):
1104 def pre_readline(self):
1103 """readline hook to be used at the start of each line.
1105 """readline hook to be used at the start of each line.
1104
1106
1105 Currently it handles auto-indent only."""
1107 Currently it handles auto-indent only."""
1106
1108
1107 self.readline.insert_text(self.indent_current)
1109 self.readline.insert_text(self.indent_current)
1108
1110
1109 def init_readline(self):
1111 def init_readline(self):
1110 """Command history completion/saving/reloading."""
1112 """Command history completion/saving/reloading."""
1111 try:
1113 try:
1112 import readline
1114 import readline
1113 except ImportError:
1115 except ImportError:
1114 self.has_readline = 0
1116 self.has_readline = 0
1115 self.readline = None
1117 self.readline = None
1116 # no point in bugging windows users with this every time:
1118 # no point in bugging windows users with this every time:
1117 if os.name == 'posix':
1119 if os.name == 'posix':
1118 warn('Readline services not available on this platform.')
1120 warn('Readline services not available on this platform.')
1119 else:
1121 else:
1120 import atexit
1122 import atexit
1121 from IPython.completer import IPCompleter
1123 from IPython.completer import IPCompleter
1122 self.Completer = IPCompleter(self,
1124 self.Completer = IPCompleter(self,
1123 self.user_ns,
1125 self.user_ns,
1124 self.user_global_ns,
1126 self.user_global_ns,
1125 self.rc.readline_omit__names,
1127 self.rc.readline_omit__names,
1126 self.alias_table)
1128 self.alias_table)
1127
1129
1128 # Platform-specific configuration
1130 # Platform-specific configuration
1129 if os.name == 'nt':
1131 if os.name == 'nt':
1130 self.readline_startup_hook = readline.set_pre_input_hook
1132 self.readline_startup_hook = readline.set_pre_input_hook
1131 else:
1133 else:
1132 self.readline_startup_hook = readline.set_startup_hook
1134 self.readline_startup_hook = readline.set_startup_hook
1133
1135
1134 # Load user's initrc file (readline config)
1136 # Load user's initrc file (readline config)
1135 inputrc_name = os.environ.get('INPUTRC')
1137 inputrc_name = os.environ.get('INPUTRC')
1136 if inputrc_name is None:
1138 if inputrc_name is None:
1137 home_dir = get_home_dir()
1139 home_dir = get_home_dir()
1138 if home_dir is not None:
1140 if home_dir is not None:
1139 inputrc_name = os.path.join(home_dir,'.inputrc')
1141 inputrc_name = os.path.join(home_dir,'.inputrc')
1140 if os.path.isfile(inputrc_name):
1142 if os.path.isfile(inputrc_name):
1141 try:
1143 try:
1142 readline.read_init_file(inputrc_name)
1144 readline.read_init_file(inputrc_name)
1143 except:
1145 except:
1144 warn('Problems reading readline initialization file <%s>'
1146 warn('Problems reading readline initialization file <%s>'
1145 % inputrc_name)
1147 % inputrc_name)
1146
1148
1147 self.has_readline = 1
1149 self.has_readline = 1
1148 self.readline = readline
1150 self.readline = readline
1149 # save this in sys so embedded copies can restore it properly
1151 # save this in sys so embedded copies can restore it properly
1150 sys.ipcompleter = self.Completer.complete
1152 sys.ipcompleter = self.Completer.complete
1151 readline.set_completer(self.Completer.complete)
1153 readline.set_completer(self.Completer.complete)
1152
1154
1153 # Configure readline according to user's prefs
1155 # Configure readline according to user's prefs
1154 for rlcommand in self.rc.readline_parse_and_bind:
1156 for rlcommand in self.rc.readline_parse_and_bind:
1155 readline.parse_and_bind(rlcommand)
1157 readline.parse_and_bind(rlcommand)
1156
1158
1157 # remove some chars from the delimiters list
1159 # remove some chars from the delimiters list
1158 delims = readline.get_completer_delims()
1160 delims = readline.get_completer_delims()
1159 delims = delims.translate(string._idmap,
1161 delims = delims.translate(string._idmap,
1160 self.rc.readline_remove_delims)
1162 self.rc.readline_remove_delims)
1161 readline.set_completer_delims(delims)
1163 readline.set_completer_delims(delims)
1162 # otherwise we end up with a monster history after a while:
1164 # otherwise we end up with a monster history after a while:
1163 readline.set_history_length(1000)
1165 readline.set_history_length(1000)
1164 try:
1166 try:
1165 #print '*** Reading readline history' # dbg
1167 #print '*** Reading readline history' # dbg
1166 readline.read_history_file(self.histfile)
1168 readline.read_history_file(self.histfile)
1167 except IOError:
1169 except IOError:
1168 pass # It doesn't exist yet.
1170 pass # It doesn't exist yet.
1169
1171
1170 atexit.register(self.atexit_operations)
1172 atexit.register(self.atexit_operations)
1171 del atexit
1173 del atexit
1172
1174
1173 # Configure auto-indent for all platforms
1175 # Configure auto-indent for all platforms
1174 self.set_autoindent(self.rc.autoindent)
1176 self.set_autoindent(self.rc.autoindent)
1175
1177
1176 def _should_recompile(self,e):
1178 def _should_recompile(self,e):
1177 """Utility routine for edit_syntax_error"""
1179 """Utility routine for edit_syntax_error"""
1178
1180
1179 if e.filename in ('<ipython console>','<input>','<string>',
1181 if e.filename in ('<ipython console>','<input>','<string>',
1180 '<console>'):
1182 '<console>'):
1181 return False
1183 return False
1182 try:
1184 try:
1183 if not ask_yes_no('Return to editor to correct syntax error? '
1185 if not ask_yes_no('Return to editor to correct syntax error? '
1184 '[Y/n] ','y'):
1186 '[Y/n] ','y'):
1185 return False
1187 return False
1186 except EOFError:
1188 except EOFError:
1187 return False
1189 return False
1188
1190
1189 def int0(x):
1191 def int0(x):
1190 try:
1192 try:
1191 return int(x)
1193 return int(x)
1192 except TypeError:
1194 except TypeError:
1193 return 0
1195 return 0
1194 # always pass integer line and offset values to editor hook
1196 # always pass integer line and offset values to editor hook
1195 self.hooks.fix_error_editor(e.filename,
1197 self.hooks.fix_error_editor(e.filename,
1196 int0(e.lineno),int0(e.offset),e.msg)
1198 int0(e.lineno),int0(e.offset),e.msg)
1197 return True
1199 return True
1198
1200
1199 def edit_syntax_error(self):
1201 def edit_syntax_error(self):
1200 """The bottom half of the syntax error handler called in the main loop.
1202 """The bottom half of the syntax error handler called in the main loop.
1201
1203
1202 Loop until syntax error is fixed or user cancels.
1204 Loop until syntax error is fixed or user cancels.
1203 """
1205 """
1204
1206
1205 while self.SyntaxTB.last_syntax_error:
1207 while self.SyntaxTB.last_syntax_error:
1206 # copy and clear last_syntax_error
1208 # copy and clear last_syntax_error
1207 err = self.SyntaxTB.clear_err_state()
1209 err = self.SyntaxTB.clear_err_state()
1208 if not self._should_recompile(err):
1210 if not self._should_recompile(err):
1209 return
1211 return
1210 try:
1212 try:
1211 # may set last_syntax_error again if a SyntaxError is raised
1213 # may set last_syntax_error again if a SyntaxError is raised
1212 self.safe_execfile(err.filename,self.shell.user_ns)
1214 self.safe_execfile(err.filename,self.shell.user_ns)
1213 except:
1215 except:
1214 self.showtraceback()
1216 self.showtraceback()
1215 else:
1217 else:
1216 f = file(err.filename)
1218 f = file(err.filename)
1217 try:
1219 try:
1218 sys.displayhook(f.read())
1220 sys.displayhook(f.read())
1219 finally:
1221 finally:
1220 f.close()
1222 f.close()
1221
1223
1222 def showsyntaxerror(self, filename=None):
1224 def showsyntaxerror(self, filename=None):
1223 """Display the syntax error that just occurred.
1225 """Display the syntax error that just occurred.
1224
1226
1225 This doesn't display a stack trace because there isn't one.
1227 This doesn't display a stack trace because there isn't one.
1226
1228
1227 If a filename is given, it is stuffed in the exception instead
1229 If a filename is given, it is stuffed in the exception instead
1228 of what was there before (because Python's parser always uses
1230 of what was there before (because Python's parser always uses
1229 "<string>" when reading from a string).
1231 "<string>" when reading from a string).
1230 """
1232 """
1231 etype, value, last_traceback = sys.exc_info()
1233 etype, value, last_traceback = sys.exc_info()
1232 if filename and etype is SyntaxError:
1234 if filename and etype is SyntaxError:
1233 # Work hard to stuff the correct filename in the exception
1235 # Work hard to stuff the correct filename in the exception
1234 try:
1236 try:
1235 msg, (dummy_filename, lineno, offset, line) = value
1237 msg, (dummy_filename, lineno, offset, line) = value
1236 except:
1238 except:
1237 # Not the format we expect; leave it alone
1239 # Not the format we expect; leave it alone
1238 pass
1240 pass
1239 else:
1241 else:
1240 # Stuff in the right filename
1242 # Stuff in the right filename
1241 try:
1243 try:
1242 # Assume SyntaxError is a class exception
1244 # Assume SyntaxError is a class exception
1243 value = SyntaxError(msg, (filename, lineno, offset, line))
1245 value = SyntaxError(msg, (filename, lineno, offset, line))
1244 except:
1246 except:
1245 # If that failed, assume SyntaxError is a string
1247 # If that failed, assume SyntaxError is a string
1246 value = msg, (filename, lineno, offset, line)
1248 value = msg, (filename, lineno, offset, line)
1247 self.SyntaxTB(etype,value,[])
1249 self.SyntaxTB(etype,value,[])
1248
1250
1249 def debugger(self):
1251 def debugger(self):
1250 """Call the pdb debugger."""
1252 """Call the pdb debugger."""
1251
1253
1252 if not self.rc.pdb:
1254 if not self.rc.pdb:
1253 return
1255 return
1254 pdb.pm()
1256 pdb.pm()
1255
1257
1256 def showtraceback(self,exc_tuple = None,filename=None):
1258 def showtraceback(self,exc_tuple = None,filename=None):
1257 """Display the exception that just occurred."""
1259 """Display the exception that just occurred."""
1258
1260
1259 # Though this won't be called by syntax errors in the input line,
1261 # Though this won't be called by syntax errors in the input line,
1260 # there may be SyntaxError cases whith imported code.
1262 # there may be SyntaxError cases whith imported code.
1261 if exc_tuple is None:
1263 if exc_tuple is None:
1262 type, value, tb = sys.exc_info()
1264 type, value, tb = sys.exc_info()
1263 else:
1265 else:
1264 type, value, tb = exc_tuple
1266 type, value, tb = exc_tuple
1265 if type is SyntaxError:
1267 if type is SyntaxError:
1266 self.showsyntaxerror(filename)
1268 self.showsyntaxerror(filename)
1267 else:
1269 else:
1268 self.InteractiveTB()
1270 self.InteractiveTB()
1269 if self.InteractiveTB.call_pdb and self.has_readline:
1271 if self.InteractiveTB.call_pdb and self.has_readline:
1270 # pdb mucks up readline, fix it back
1272 # pdb mucks up readline, fix it back
1271 self.readline.set_completer(self.Completer.complete)
1273 self.readline.set_completer(self.Completer.complete)
1272
1274
1273 def mainloop(self,banner=None):
1275 def mainloop(self,banner=None):
1274 """Creates the local namespace and starts the mainloop.
1276 """Creates the local namespace and starts the mainloop.
1275
1277
1276 If an optional banner argument is given, it will override the
1278 If an optional banner argument is given, it will override the
1277 internally created default banner."""
1279 internally created default banner."""
1278
1280
1279 if self.rc.c: # Emulate Python's -c option
1281 if self.rc.c: # Emulate Python's -c option
1280 self.exec_init_cmd()
1282 self.exec_init_cmd()
1281 if banner is None:
1283 if banner is None:
1282 if self.rc.banner:
1284 if self.rc.banner:
1283 banner = self.BANNER+self.banner2
1285 banner = self.BANNER+self.banner2
1284 else:
1286 else:
1285 banner = ''
1287 banner = ''
1286 self.interact(banner)
1288 self.interact(banner)
1287
1289
1288 def exec_init_cmd(self):
1290 def exec_init_cmd(self):
1289 """Execute a command given at the command line.
1291 """Execute a command given at the command line.
1290
1292
1291 This emulates Python's -c option."""
1293 This emulates Python's -c option."""
1292
1294
1293 sys.argv = ['-c']
1295 sys.argv = ['-c']
1294 self.push(self.rc.c)
1296 self.push(self.rc.c)
1295
1297
1296 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1298 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1297 """Embeds IPython into a running python program.
1299 """Embeds IPython into a running python program.
1298
1300
1299 Input:
1301 Input:
1300
1302
1301 - header: An optional header message can be specified.
1303 - header: An optional header message can be specified.
1302
1304
1303 - local_ns, global_ns: working namespaces. If given as None, the
1305 - local_ns, global_ns: working namespaces. If given as None, the
1304 IPython-initialized one is updated with __main__.__dict__, so that
1306 IPython-initialized one is updated with __main__.__dict__, so that
1305 program variables become visible but user-specific configuration
1307 program variables become visible but user-specific configuration
1306 remains possible.
1308 remains possible.
1307
1309
1308 - stack_depth: specifies how many levels in the stack to go to
1310 - stack_depth: specifies how many levels in the stack to go to
1309 looking for namespaces (when local_ns and global_ns are None). This
1311 looking for namespaces (when local_ns and global_ns are None). This
1310 allows an intermediate caller to make sure that this function gets
1312 allows an intermediate caller to make sure that this function gets
1311 the namespace from the intended level in the stack. By default (0)
1313 the namespace from the intended level in the stack. By default (0)
1312 it will get its locals and globals from the immediate caller.
1314 it will get its locals and globals from the immediate caller.
1313
1315
1314 Warning: it's possible to use this in a program which is being run by
1316 Warning: it's possible to use this in a program which is being run by
1315 IPython itself (via %run), but some funny things will happen (a few
1317 IPython itself (via %run), but some funny things will happen (a few
1316 globals get overwritten). In the future this will be cleaned up, as
1318 globals get overwritten). In the future this will be cleaned up, as
1317 there is no fundamental reason why it can't work perfectly."""
1319 there is no fundamental reason why it can't work perfectly."""
1318
1320
1319 # Get locals and globals from caller
1321 # Get locals and globals from caller
1320 if local_ns is None or global_ns is None:
1322 if local_ns is None or global_ns is None:
1321 call_frame = sys._getframe(stack_depth).f_back
1323 call_frame = sys._getframe(stack_depth).f_back
1322
1324
1323 if local_ns is None:
1325 if local_ns is None:
1324 local_ns = call_frame.f_locals
1326 local_ns = call_frame.f_locals
1325 if global_ns is None:
1327 if global_ns is None:
1326 global_ns = call_frame.f_globals
1328 global_ns = call_frame.f_globals
1327
1329
1328 # Update namespaces and fire up interpreter
1330 # Update namespaces and fire up interpreter
1329
1331
1330 # The global one is easy, we can just throw it in
1332 # The global one is easy, we can just throw it in
1331 self.user_global_ns = global_ns
1333 self.user_global_ns = global_ns
1332
1334
1333 # but the user/local one is tricky: ipython needs it to store internal
1335 # but the user/local one is tricky: ipython needs it to store internal
1334 # data, but we also need the locals. We'll copy locals in the user
1336 # data, but we also need the locals. We'll copy locals in the user
1335 # one, but will track what got copied so we can delete them at exit.
1337 # one, but will track what got copied so we can delete them at exit.
1336 # This is so that a later embedded call doesn't see locals from a
1338 # This is so that a later embedded call doesn't see locals from a
1337 # previous call (which most likely existed in a separate scope).
1339 # previous call (which most likely existed in a separate scope).
1338 local_varnames = local_ns.keys()
1340 local_varnames = local_ns.keys()
1339 self.user_ns.update(local_ns)
1341 self.user_ns.update(local_ns)
1340
1342
1341 # Patch for global embedding to make sure that things don't overwrite
1343 # Patch for global embedding to make sure that things don't overwrite
1342 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1344 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1343 # FIXME. Test this a bit more carefully (the if.. is new)
1345 # FIXME. Test this a bit more carefully (the if.. is new)
1344 if local_ns is None and global_ns is None:
1346 if local_ns is None and global_ns is None:
1345 self.user_global_ns.update(__main__.__dict__)
1347 self.user_global_ns.update(__main__.__dict__)
1346
1348
1347 # make sure the tab-completer has the correct frame information, so it
1349 # make sure the tab-completer has the correct frame information, so it
1348 # actually completes using the frame's locals/globals
1350 # actually completes using the frame's locals/globals
1349 self.set_completer_frame(call_frame)
1351 self.set_completer_frame()
1350
1352
1351 # before activating the interactive mode, we need to make sure that
1353 # before activating the interactive mode, we need to make sure that
1352 # all names in the builtin namespace needed by ipython point to
1354 # all names in the builtin namespace needed by ipython point to
1353 # ourselves, and not to other instances.
1355 # ourselves, and not to other instances.
1354 self.add_builtins()
1356 self.add_builtins()
1355
1357
1356 self.interact(header)
1358 self.interact(header)
1357
1359
1358 # now, purge out the user namespace from anything we might have added
1360 # now, purge out the user namespace from anything we might have added
1359 # from the caller's local namespace
1361 # from the caller's local namespace
1360 delvar = self.user_ns.pop
1362 delvar = self.user_ns.pop
1361 for var in local_varnames:
1363 for var in local_varnames:
1362 delvar(var,None)
1364 delvar(var,None)
1363 # and clean builtins we may have overridden
1365 # and clean builtins we may have overridden
1364 self.clean_builtins()
1366 self.clean_builtins()
1365
1367
1366 def interact(self, banner=None):
1368 def interact(self, banner=None):
1367 """Closely emulate the interactive Python console.
1369 """Closely emulate the interactive Python console.
1368
1370
1369 The optional banner argument specify the banner to print
1371 The optional banner argument specify the banner to print
1370 before the first interaction; by default it prints a banner
1372 before the first interaction; by default it prints a banner
1371 similar to the one printed by the real Python interpreter,
1373 similar to the one printed by the real Python interpreter,
1372 followed by the current class name in parentheses (so as not
1374 followed by the current class name in parentheses (so as not
1373 to confuse this with the real interpreter -- since it's so
1375 to confuse this with the real interpreter -- since it's so
1374 close!).
1376 close!).
1375
1377
1376 """
1378 """
1377 cprt = 'Type "copyright", "credits" or "license" for more information.'
1379 cprt = 'Type "copyright", "credits" or "license" for more information.'
1378 if banner is None:
1380 if banner is None:
1379 self.write("Python %s on %s\n%s\n(%s)\n" %
1381 self.write("Python %s on %s\n%s\n(%s)\n" %
1380 (sys.version, sys.platform, cprt,
1382 (sys.version, sys.platform, cprt,
1381 self.__class__.__name__))
1383 self.__class__.__name__))
1382 else:
1384 else:
1383 self.write(banner)
1385 self.write(banner)
1384
1386
1385 more = 0
1387 more = 0
1386
1388
1387 # Mark activity in the builtins
1389 # Mark activity in the builtins
1388 __builtin__.__dict__['__IPYTHON__active'] += 1
1390 __builtin__.__dict__['__IPYTHON__active'] += 1
1389
1391
1390 # exit_now is set by a call to %Exit or %Quit
1392 # exit_now is set by a call to %Exit or %Quit
1391 self.exit_now = False
1393 self.exit_now = False
1392 while not self.exit_now:
1394 while not self.exit_now:
1393
1395
1394 try:
1396 try:
1395 if more:
1397 if more:
1396 prompt = self.outputcache.prompt2
1398 prompt = self.outputcache.prompt2
1397 if self.autoindent:
1399 if self.autoindent:
1398 self.readline_startup_hook(self.pre_readline)
1400 self.readline_startup_hook(self.pre_readline)
1399 else:
1401 else:
1400 prompt = self.outputcache.prompt1
1402 prompt = self.outputcache.prompt1
1401 try:
1403 try:
1402 line = self.raw_input(prompt,more)
1404 line = self.raw_input(prompt,more)
1403 if self.autoindent:
1405 if self.autoindent:
1404 self.readline_startup_hook(None)
1406 self.readline_startup_hook(None)
1405 except EOFError:
1407 except EOFError:
1406 if self.autoindent:
1408 if self.autoindent:
1407 self.readline_startup_hook(None)
1409 self.readline_startup_hook(None)
1408 self.write("\n")
1410 self.write("\n")
1409 self.exit()
1411 self.exit()
1410 else:
1412 else:
1411 more = self.push(line)
1413 more = self.push(line)
1412
1414
1413 if (self.SyntaxTB.last_syntax_error and
1415 if (self.SyntaxTB.last_syntax_error and
1414 self.rc.autoedit_syntax):
1416 self.rc.autoedit_syntax):
1415 self.edit_syntax_error()
1417 self.edit_syntax_error()
1416
1418
1417 except KeyboardInterrupt:
1419 except KeyboardInterrupt:
1418 self.write("\nKeyboardInterrupt\n")
1420 self.write("\nKeyboardInterrupt\n")
1419 self.resetbuffer()
1421 self.resetbuffer()
1420 more = 0
1422 more = 0
1421 # keep cache in sync with the prompt counter:
1423 # keep cache in sync with the prompt counter:
1422 self.outputcache.prompt_count -= 1
1424 self.outputcache.prompt_count -= 1
1423
1425
1424 if self.autoindent:
1426 if self.autoindent:
1425 self.indent_current_nsp = 0
1427 self.indent_current_nsp = 0
1426 self.indent_current = ' '* self.indent_current_nsp
1428 self.indent_current = ' '* self.indent_current_nsp
1427
1429
1428 except bdb.BdbQuit:
1430 except bdb.BdbQuit:
1429 warn("The Python debugger has exited with a BdbQuit exception.\n"
1431 warn("The Python debugger has exited with a BdbQuit exception.\n"
1430 "Because of how pdb handles the stack, it is impossible\n"
1432 "Because of how pdb handles the stack, it is impossible\n"
1431 "for IPython to properly format this particular exception.\n"
1433 "for IPython to properly format this particular exception.\n"
1432 "IPython will resume normal operation.")
1434 "IPython will resume normal operation.")
1433
1435
1434 # We are off again...
1436 # We are off again...
1435 __builtin__.__dict__['__IPYTHON__active'] -= 1
1437 __builtin__.__dict__['__IPYTHON__active'] -= 1
1436
1438
1437 def excepthook(self, type, value, tb):
1439 def excepthook(self, type, value, tb):
1438 """One more defense for GUI apps that call sys.excepthook.
1440 """One more defense for GUI apps that call sys.excepthook.
1439
1441
1440 GUI frameworks like wxPython trap exceptions and call
1442 GUI frameworks like wxPython trap exceptions and call
1441 sys.excepthook themselves. I guess this is a feature that
1443 sys.excepthook themselves. I guess this is a feature that
1442 enables them to keep running after exceptions that would
1444 enables them to keep running after exceptions that would
1443 otherwise kill their mainloop. This is a bother for IPython
1445 otherwise kill their mainloop. This is a bother for IPython
1444 which excepts to catch all of the program exceptions with a try:
1446 which excepts to catch all of the program exceptions with a try:
1445 except: statement.
1447 except: statement.
1446
1448
1447 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1449 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1448 any app directly invokes sys.excepthook, it will look to the user like
1450 any app directly invokes sys.excepthook, it will look to the user like
1449 IPython crashed. In order to work around this, we can disable the
1451 IPython crashed. In order to work around this, we can disable the
1450 CrashHandler and replace it with this excepthook instead, which prints a
1452 CrashHandler and replace it with this excepthook instead, which prints a
1451 regular traceback using our InteractiveTB. In this fashion, apps which
1453 regular traceback using our InteractiveTB. In this fashion, apps which
1452 call sys.excepthook will generate a regular-looking exception from
1454 call sys.excepthook will generate a regular-looking exception from
1453 IPython, and the CrashHandler will only be triggered by real IPython
1455 IPython, and the CrashHandler will only be triggered by real IPython
1454 crashes.
1456 crashes.
1455
1457
1456 This hook should be used sparingly, only in places which are not likely
1458 This hook should be used sparingly, only in places which are not likely
1457 to be true IPython errors.
1459 to be true IPython errors.
1458 """
1460 """
1459
1461
1460 self.InteractiveTB(type, value, tb, tb_offset=0)
1462 self.InteractiveTB(type, value, tb, tb_offset=0)
1461 if self.InteractiveTB.call_pdb and self.has_readline:
1463 if self.InteractiveTB.call_pdb and self.has_readline:
1462 self.readline.set_completer(self.Completer.complete)
1464 self.readline.set_completer(self.Completer.complete)
1463
1465
1464 def call_alias(self,alias,rest=''):
1466 def call_alias(self,alias,rest=''):
1465 """Call an alias given its name and the rest of the line.
1467 """Call an alias given its name and the rest of the line.
1466
1468
1467 This function MUST be given a proper alias, because it doesn't make
1469 This function MUST be given a proper alias, because it doesn't make
1468 any checks when looking up into the alias table. The caller is
1470 any checks when looking up into the alias table. The caller is
1469 responsible for invoking it only with a valid alias."""
1471 responsible for invoking it only with a valid alias."""
1470
1472
1471 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1473 #print 'ALIAS: <%s>+<%s>' % (alias,rest) # dbg
1472 nargs,cmd = self.alias_table[alias]
1474 nargs,cmd = self.alias_table[alias]
1473 # Expand the %l special to be the user's input line
1475 # Expand the %l special to be the user's input line
1474 if cmd.find('%l') >= 0:
1476 if cmd.find('%l') >= 0:
1475 cmd = cmd.replace('%l',rest)
1477 cmd = cmd.replace('%l',rest)
1476 rest = ''
1478 rest = ''
1477 if nargs==0:
1479 if nargs==0:
1478 # Simple, argument-less aliases
1480 # Simple, argument-less aliases
1479 cmd = '%s %s' % (cmd,rest)
1481 cmd = '%s %s' % (cmd,rest)
1480 else:
1482 else:
1481 # Handle aliases with positional arguments
1483 # Handle aliases with positional arguments
1482 args = rest.split(None,nargs)
1484 args = rest.split(None,nargs)
1483 if len(args)< nargs:
1485 if len(args)< nargs:
1484 error('Alias <%s> requires %s arguments, %s given.' %
1486 error('Alias <%s> requires %s arguments, %s given.' %
1485 (alias,nargs,len(args)))
1487 (alias,nargs,len(args)))
1486 return
1488 return
1487 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1489 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1488 # Now call the macro, evaluating in the user's namespace
1490 # Now call the macro, evaluating in the user's namespace
1489 try:
1491 try:
1490 self.system(cmd)
1492 self.system(cmd)
1491 except:
1493 except:
1492 self.showtraceback()
1494 self.showtraceback()
1493
1495
1494 def autoindent_update(self,line):
1496 def autoindent_update(self,line):
1495 """Keep track of the indent level."""
1497 """Keep track of the indent level."""
1496 if self.autoindent:
1498 if self.autoindent:
1497 if line:
1499 if line:
1498 ini_spaces = ini_spaces_re.match(line)
1500 ini_spaces = ini_spaces_re.match(line)
1499 if ini_spaces:
1501 if ini_spaces:
1500 nspaces = ini_spaces.end()
1502 nspaces = ini_spaces.end()
1501 else:
1503 else:
1502 nspaces = 0
1504 nspaces = 0
1503 self.indent_current_nsp = nspaces
1505 self.indent_current_nsp = nspaces
1504
1506
1505 if line[-1] == ':':
1507 if line[-1] == ':':
1506 self.indent_current_nsp += 4
1508 self.indent_current_nsp += 4
1507 elif dedent_re.match(line):
1509 elif dedent_re.match(line):
1508 self.indent_current_nsp -= 4
1510 self.indent_current_nsp -= 4
1509 else:
1511 else:
1510 self.indent_current_nsp = 0
1512 self.indent_current_nsp = 0
1511
1513
1512 # indent_current is the actual string to be inserted
1514 # indent_current is the actual string to be inserted
1513 # by the readline hooks for indentation
1515 # by the readline hooks for indentation
1514 self.indent_current = ' '* self.indent_current_nsp
1516 self.indent_current = ' '* self.indent_current_nsp
1515
1517
1516 def runlines(self,lines):
1518 def runlines(self,lines):
1517 """Run a string of one or more lines of source.
1519 """Run a string of one or more lines of source.
1518
1520
1519 This method is capable of running a string containing multiple source
1521 This method is capable of running a string containing multiple source
1520 lines, as if they had been entered at the IPython prompt. Since it
1522 lines, as if they had been entered at the IPython prompt. Since it
1521 exposes IPython's processing machinery, the given strings can contain
1523 exposes IPython's processing machinery, the given strings can contain
1522 magic calls (%magic), special shell access (!cmd), etc."""
1524 magic calls (%magic), special shell access (!cmd), etc."""
1523
1525
1524 # We must start with a clean buffer, in case this is run from an
1526 # We must start with a clean buffer, in case this is run from an
1525 # interactive IPython session (via a magic, for example).
1527 # interactive IPython session (via a magic, for example).
1526 self.resetbuffer()
1528 self.resetbuffer()
1527 lines = lines.split('\n')
1529 lines = lines.split('\n')
1528 more = 0
1530 more = 0
1529 for line in lines:
1531 for line in lines:
1530 # skip blank lines so we don't mess up the prompt counter, but do
1532 # skip blank lines so we don't mess up the prompt counter, but do
1531 # NOT skip even a blank line if we are in a code block (more is
1533 # NOT skip even a blank line if we are in a code block (more is
1532 # true)
1534 # true)
1533 if line or more:
1535 if line or more:
1534 more = self.push(self.prefilter(line,more))
1536 more = self.push(self.prefilter(line,more))
1535 # IPython's runsource returns None if there was an error
1537 # IPython's runsource returns None if there was an error
1536 # compiling the code. This allows us to stop processing right
1538 # compiling the code. This allows us to stop processing right
1537 # away, so the user gets the error message at the right place.
1539 # away, so the user gets the error message at the right place.
1538 if more is None:
1540 if more is None:
1539 break
1541 break
1540 # final newline in case the input didn't have it, so that the code
1542 # final newline in case the input didn't have it, so that the code
1541 # actually does get executed
1543 # actually does get executed
1542 if more:
1544 if more:
1543 self.push('\n')
1545 self.push('\n')
1544
1546
1545 def runsource(self, source, filename='<input>', symbol='single'):
1547 def runsource(self, source, filename='<input>', symbol='single'):
1546 """Compile and run some source in the interpreter.
1548 """Compile and run some source in the interpreter.
1547
1549
1548 Arguments are as for compile_command().
1550 Arguments are as for compile_command().
1549
1551
1550 One several things can happen:
1552 One several things can happen:
1551
1553
1552 1) The input is incorrect; compile_command() raised an
1554 1) The input is incorrect; compile_command() raised an
1553 exception (SyntaxError or OverflowError). A syntax traceback
1555 exception (SyntaxError or OverflowError). A syntax traceback
1554 will be printed by calling the showsyntaxerror() method.
1556 will be printed by calling the showsyntaxerror() method.
1555
1557
1556 2) The input is incomplete, and more input is required;
1558 2) The input is incomplete, and more input is required;
1557 compile_command() returned None. Nothing happens.
1559 compile_command() returned None. Nothing happens.
1558
1560
1559 3) The input is complete; compile_command() returned a code
1561 3) The input is complete; compile_command() returned a code
1560 object. The code is executed by calling self.runcode() (which
1562 object. The code is executed by calling self.runcode() (which
1561 also handles run-time exceptions, except for SystemExit).
1563 also handles run-time exceptions, except for SystemExit).
1562
1564
1563 The return value is:
1565 The return value is:
1564
1566
1565 - True in case 2
1567 - True in case 2
1566
1568
1567 - False in the other cases, unless an exception is raised, where
1569 - False in the other cases, unless an exception is raised, where
1568 None is returned instead. This can be used by external callers to
1570 None is returned instead. This can be used by external callers to
1569 know whether to continue feeding input or not.
1571 know whether to continue feeding input or not.
1570
1572
1571 The return value can be used to decide whether to use sys.ps1 or
1573 The return value can be used to decide whether to use sys.ps1 or
1572 sys.ps2 to prompt the next line."""
1574 sys.ps2 to prompt the next line."""
1573
1575
1574 try:
1576 try:
1575 code = self.compile(source,filename,symbol)
1577 code = self.compile(source,filename,symbol)
1576 except (OverflowError, SyntaxError, ValueError):
1578 except (OverflowError, SyntaxError, ValueError):
1577 # Case 1
1579 # Case 1
1578 self.showsyntaxerror(filename)
1580 self.showsyntaxerror(filename)
1579 return None
1581 return None
1580
1582
1581 if code is None:
1583 if code is None:
1582 # Case 2
1584 # Case 2
1583 return True
1585 return True
1584
1586
1585 # Case 3
1587 # Case 3
1586 # We store the code object so that threaded shells and
1588 # We store the code object so that threaded shells and
1587 # custom exception handlers can access all this info if needed.
1589 # custom exception handlers can access all this info if needed.
1588 # The source corresponding to this can be obtained from the
1590 # The source corresponding to this can be obtained from the
1589 # buffer attribute as '\n'.join(self.buffer).
1591 # buffer attribute as '\n'.join(self.buffer).
1590 self.code_to_run = code
1592 self.code_to_run = code
1591 # now actually execute the code object
1593 # now actually execute the code object
1592 if self.runcode(code) == 0:
1594 if self.runcode(code) == 0:
1593 return False
1595 return False
1594 else:
1596 else:
1595 return None
1597 return None
1596
1598
1597 def runcode(self,code_obj):
1599 def runcode(self,code_obj):
1598 """Execute a code object.
1600 """Execute a code object.
1599
1601
1600 When an exception occurs, self.showtraceback() is called to display a
1602 When an exception occurs, self.showtraceback() is called to display a
1601 traceback.
1603 traceback.
1602
1604
1603 Return value: a flag indicating whether the code to be run completed
1605 Return value: a flag indicating whether the code to be run completed
1604 successfully:
1606 successfully:
1605
1607
1606 - 0: successful execution.
1608 - 0: successful execution.
1607 - 1: an error occurred.
1609 - 1: an error occurred.
1608 """
1610 """
1609
1611
1610 # Set our own excepthook in case the user code tries to call it
1612 # Set our own excepthook in case the user code tries to call it
1611 # directly, so that the IPython crash handler doesn't get triggered
1613 # directly, so that the IPython crash handler doesn't get triggered
1612 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1614 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1613
1615
1614 # we save the original sys.excepthook in the instance, in case config
1616 # we save the original sys.excepthook in the instance, in case config
1615 # code (such as magics) needs access to it.
1617 # code (such as magics) needs access to it.
1616 self.sys_excepthook = old_excepthook
1618 self.sys_excepthook = old_excepthook
1617 outflag = 1 # happens in more places, so it's easier as default
1619 outflag = 1 # happens in more places, so it's easier as default
1618 try:
1620 try:
1619 try:
1621 try:
1620 # Embedded instances require separate global/local namespaces
1622 # Embedded instances require separate global/local namespaces
1621 # so they can see both the surrounding (local) namespace and
1623 # so they can see both the surrounding (local) namespace and
1622 # the module-level globals when called inside another function.
1624 # the module-level globals when called inside another function.
1623 if self.embedded:
1625 if self.embedded:
1624 exec code_obj in self.user_global_ns, self.user_ns
1626 exec code_obj in self.user_global_ns, self.user_ns
1625 # Normal (non-embedded) instances should only have a single
1627 # Normal (non-embedded) instances should only have a single
1626 # namespace for user code execution, otherwise functions won't
1628 # namespace for user code execution, otherwise functions won't
1627 # see interactive top-level globals.
1629 # see interactive top-level globals.
1628 else:
1630 else:
1629 exec code_obj in self.user_ns
1631 exec code_obj in self.user_ns
1630 finally:
1632 finally:
1631 # Reset our crash handler in place
1633 # Reset our crash handler in place
1632 sys.excepthook = old_excepthook
1634 sys.excepthook = old_excepthook
1633 except SystemExit:
1635 except SystemExit:
1634 self.resetbuffer()
1636 self.resetbuffer()
1635 self.showtraceback()
1637 self.showtraceback()
1636 warn("Type exit or quit to exit IPython "
1638 warn("Type exit or quit to exit IPython "
1637 "(%Exit or %Quit do so unconditionally).",level=1)
1639 "(%Exit or %Quit do so unconditionally).",level=1)
1638 except self.custom_exceptions:
1640 except self.custom_exceptions:
1639 etype,value,tb = sys.exc_info()
1641 etype,value,tb = sys.exc_info()
1640 self.CustomTB(etype,value,tb)
1642 self.CustomTB(etype,value,tb)
1641 except:
1643 except:
1642 self.showtraceback()
1644 self.showtraceback()
1643 else:
1645 else:
1644 outflag = 0
1646 outflag = 0
1645 if softspace(sys.stdout, 0):
1647 if softspace(sys.stdout, 0):
1646 print
1648 print
1647 # Flush out code object which has been run (and source)
1649 # Flush out code object which has been run (and source)
1648 self.code_to_run = None
1650 self.code_to_run = None
1649 return outflag
1651 return outflag
1650
1652
1651 def push(self, line):
1653 def push(self, line):
1652 """Push a line to the interpreter.
1654 """Push a line to the interpreter.
1653
1655
1654 The line should not have a trailing newline; it may have
1656 The line should not have a trailing newline; it may have
1655 internal newlines. The line is appended to a buffer and the
1657 internal newlines. The line is appended to a buffer and the
1656 interpreter's runsource() method is called with the
1658 interpreter's runsource() method is called with the
1657 concatenated contents of the buffer as source. If this
1659 concatenated contents of the buffer as source. If this
1658 indicates that the command was executed or invalid, the buffer
1660 indicates that the command was executed or invalid, the buffer
1659 is reset; otherwise, the command is incomplete, and the buffer
1661 is reset; otherwise, the command is incomplete, and the buffer
1660 is left as it was after the line was appended. The return
1662 is left as it was after the line was appended. The return
1661 value is 1 if more input is required, 0 if the line was dealt
1663 value is 1 if more input is required, 0 if the line was dealt
1662 with in some way (this is the same as runsource()).
1664 with in some way (this is the same as runsource()).
1663 """
1665 """
1664
1666
1665 # autoindent management should be done here, and not in the
1667 # autoindent management should be done here, and not in the
1666 # interactive loop, since that one is only seen by keyboard input. We
1668 # interactive loop, since that one is only seen by keyboard input. We
1667 # need this done correctly even for code run via runlines (which uses
1669 # need this done correctly even for code run via runlines (which uses
1668 # push).
1670 # push).
1669
1671
1670 #print 'push line: <%s>' % line # dbg
1672 #print 'push line: <%s>' % line # dbg
1671 self.autoindent_update(line)
1673 self.autoindent_update(line)
1672
1674
1673 self.buffer.append(line)
1675 self.buffer.append(line)
1674 more = self.runsource('\n'.join(self.buffer), self.filename)
1676 more = self.runsource('\n'.join(self.buffer), self.filename)
1675 if not more:
1677 if not more:
1676 self.resetbuffer()
1678 self.resetbuffer()
1677 return more
1679 return more
1678
1680
1679 def resetbuffer(self):
1681 def resetbuffer(self):
1680 """Reset the input buffer."""
1682 """Reset the input buffer."""
1681 self.buffer[:] = []
1683 self.buffer[:] = []
1682
1684
1683 def raw_input(self,prompt='',continue_prompt=False):
1685 def raw_input(self,prompt='',continue_prompt=False):
1684 """Write a prompt and read a line.
1686 """Write a prompt and read a line.
1685
1687
1686 The returned line does not include the trailing newline.
1688 The returned line does not include the trailing newline.
1687 When the user enters the EOF key sequence, EOFError is raised.
1689 When the user enters the EOF key sequence, EOFError is raised.
1688
1690
1689 Optional inputs:
1691 Optional inputs:
1690
1692
1691 - prompt(''): a string to be printed to prompt the user.
1693 - prompt(''): a string to be printed to prompt the user.
1692
1694
1693 - continue_prompt(False): whether this line is the first one or a
1695 - continue_prompt(False): whether this line is the first one or a
1694 continuation in a sequence of inputs.
1696 continuation in a sequence of inputs.
1695 """
1697 """
1696
1698
1697 line = raw_input_original(prompt)
1699 line = raw_input_original(prompt)
1698 # Try to be reasonably smart about not re-indenting pasted input more
1700 # Try to be reasonably smart about not re-indenting pasted input more
1699 # than necessary. We do this by trimming out the auto-indent initial
1701 # than necessary. We do this by trimming out the auto-indent initial
1700 # spaces, if the user's actual input started itself with whitespace.
1702 # spaces, if the user's actual input started itself with whitespace.
1701 if self.autoindent:
1703 if self.autoindent:
1702 line2 = line[self.indent_current_nsp:]
1704 line2 = line[self.indent_current_nsp:]
1703 if line2[0:1] in (' ','\t'):
1705 if line2[0:1] in (' ','\t'):
1704 line = line2
1706 line = line2
1705 return self.prefilter(line,continue_prompt)
1707 return self.prefilter(line,continue_prompt)
1706
1708
1707 def split_user_input(self,line):
1709 def split_user_input(self,line):
1708 """Split user input into pre-char, function part and rest."""
1710 """Split user input into pre-char, function part and rest."""
1709
1711
1710 lsplit = self.line_split.match(line)
1712 lsplit = self.line_split.match(line)
1711 if lsplit is None: # no regexp match returns None
1713 if lsplit is None: # no regexp match returns None
1712 try:
1714 try:
1713 iFun,theRest = line.split(None,1)
1715 iFun,theRest = line.split(None,1)
1714 except ValueError:
1716 except ValueError:
1715 iFun,theRest = line,''
1717 iFun,theRest = line,''
1716 pre = re.match('^(\s*)(.*)',line).groups()[0]
1718 pre = re.match('^(\s*)(.*)',line).groups()[0]
1717 else:
1719 else:
1718 pre,iFun,theRest = lsplit.groups()
1720 pre,iFun,theRest = lsplit.groups()
1719
1721
1720 #print 'line:<%s>' % line # dbg
1722 #print 'line:<%s>' % line # dbg
1721 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1723 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1722 return pre,iFun.strip(),theRest
1724 return pre,iFun.strip(),theRest
1723
1725
1724 def _prefilter(self, line, continue_prompt):
1726 def _prefilter(self, line, continue_prompt):
1725 """Calls different preprocessors, depending on the form of line."""
1727 """Calls different preprocessors, depending on the form of line."""
1726
1728
1727 # All handlers *must* return a value, even if it's blank ('').
1729 # All handlers *must* return a value, even if it's blank ('').
1728
1730
1729 # Lines are NOT logged here. Handlers should process the line as
1731 # Lines are NOT logged here. Handlers should process the line as
1730 # needed, update the cache AND log it (so that the input cache array
1732 # needed, update the cache AND log it (so that the input cache array
1731 # stays synced).
1733 # stays synced).
1732
1734
1733 # This function is _very_ delicate, and since it's also the one which
1735 # This function is _very_ delicate, and since it's also the one which
1734 # determines IPython's response to user input, it must be as efficient
1736 # determines IPython's response to user input, it must be as efficient
1735 # as possible. For this reason it has _many_ returns in it, trying
1737 # as possible. For this reason it has _many_ returns in it, trying
1736 # always to exit as quickly as it can figure out what it needs to do.
1738 # always to exit as quickly as it can figure out what it needs to do.
1737
1739
1738 # This function is the main responsible for maintaining IPython's
1740 # This function is the main responsible for maintaining IPython's
1739 # behavior respectful of Python's semantics. So be _very_ careful if
1741 # behavior respectful of Python's semantics. So be _very_ careful if
1740 # making changes to anything here.
1742 # making changes to anything here.
1741
1743
1742 #.....................................................................
1744 #.....................................................................
1743 # Code begins
1745 # Code begins
1744
1746
1745 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1747 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1746
1748
1747 # save the line away in case we crash, so the post-mortem handler can
1749 # save the line away in case we crash, so the post-mortem handler can
1748 # record it
1750 # record it
1749 self._last_input_line = line
1751 self._last_input_line = line
1750
1752
1751 #print '***line: <%s>' % line # dbg
1753 #print '***line: <%s>' % line # dbg
1752
1754
1753 # the input history needs to track even empty lines
1755 # the input history needs to track even empty lines
1754 if not line.strip():
1756 if not line.strip():
1755 if not continue_prompt:
1757 if not continue_prompt:
1756 self.outputcache.prompt_count -= 1
1758 self.outputcache.prompt_count -= 1
1757 return self.handle_normal(line,continue_prompt)
1759 return self.handle_normal(line,continue_prompt)
1758 #return self.handle_normal('',continue_prompt)
1760 #return self.handle_normal('',continue_prompt)
1759
1761
1760 # print '***cont',continue_prompt # dbg
1762 # print '***cont',continue_prompt # dbg
1761 # special handlers are only allowed for single line statements
1763 # special handlers are only allowed for single line statements
1762 if continue_prompt and not self.rc.multi_line_specials:
1764 if continue_prompt and not self.rc.multi_line_specials:
1763 return self.handle_normal(line,continue_prompt)
1765 return self.handle_normal(line,continue_prompt)
1764
1766
1765 # For the rest, we need the structure of the input
1767 # For the rest, we need the structure of the input
1766 pre,iFun,theRest = self.split_user_input(line)
1768 pre,iFun,theRest = self.split_user_input(line)
1767 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1769 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1768
1770
1769 # First check for explicit escapes in the last/first character
1771 # First check for explicit escapes in the last/first character
1770 handler = None
1772 handler = None
1771 if line[-1] == self.ESC_HELP:
1773 if line[-1] == self.ESC_HELP:
1772 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1774 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
1773 if handler is None:
1775 if handler is None:
1774 # look at the first character of iFun, NOT of line, so we skip
1776 # look at the first character of iFun, NOT of line, so we skip
1775 # leading whitespace in multiline input
1777 # leading whitespace in multiline input
1776 handler = self.esc_handlers.get(iFun[0:1])
1778 handler = self.esc_handlers.get(iFun[0:1])
1777 if handler is not None:
1779 if handler is not None:
1778 return handler(line,continue_prompt,pre,iFun,theRest)
1780 return handler(line,continue_prompt,pre,iFun,theRest)
1779 # Emacs ipython-mode tags certain input lines
1781 # Emacs ipython-mode tags certain input lines
1780 if line.endswith('# PYTHON-MODE'):
1782 if line.endswith('# PYTHON-MODE'):
1781 return self.handle_emacs(line,continue_prompt)
1783 return self.handle_emacs(line,continue_prompt)
1782
1784
1783 # Next, check if we can automatically execute this thing
1785 # Next, check if we can automatically execute this thing
1784
1786
1785 # Allow ! in multi-line statements if multi_line_specials is on:
1787 # Allow ! in multi-line statements if multi_line_specials is on:
1786 if continue_prompt and self.rc.multi_line_specials and \
1788 if continue_prompt and self.rc.multi_line_specials and \
1787 iFun.startswith(self.ESC_SHELL):
1789 iFun.startswith(self.ESC_SHELL):
1788 return self.handle_shell_escape(line,continue_prompt,
1790 return self.handle_shell_escape(line,continue_prompt,
1789 pre=pre,iFun=iFun,
1791 pre=pre,iFun=iFun,
1790 theRest=theRest)
1792 theRest=theRest)
1791
1793
1792 # Let's try to find if the input line is a magic fn
1794 # Let's try to find if the input line is a magic fn
1793 oinfo = None
1795 oinfo = None
1794 if hasattr(self,'magic_'+iFun):
1796 if hasattr(self,'magic_'+iFun):
1795 # WARNING: _ofind uses getattr(), so it can consume generators and
1797 # WARNING: _ofind uses getattr(), so it can consume generators and
1796 # cause other side effects.
1798 # cause other side effects.
1797 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1799 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1798 if oinfo['ismagic']:
1800 if oinfo['ismagic']:
1799 # Be careful not to call magics when a variable assignment is
1801 # Be careful not to call magics when a variable assignment is
1800 # being made (ls='hi', for example)
1802 # being made (ls='hi', for example)
1801 if self.rc.automagic and \
1803 if self.rc.automagic and \
1802 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1804 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
1803 (self.rc.multi_line_specials or not continue_prompt):
1805 (self.rc.multi_line_specials or not continue_prompt):
1804 return self.handle_magic(line,continue_prompt,
1806 return self.handle_magic(line,continue_prompt,
1805 pre,iFun,theRest)
1807 pre,iFun,theRest)
1806 else:
1808 else:
1807 return self.handle_normal(line,continue_prompt)
1809 return self.handle_normal(line,continue_prompt)
1808
1810
1809 # If the rest of the line begins with an (in)equality, assginment or
1811 # If the rest of the line begins with an (in)equality, assginment or
1810 # function call, we should not call _ofind but simply execute it.
1812 # function call, we should not call _ofind but simply execute it.
1811 # This avoids spurious geattr() accesses on objects upon assignment.
1813 # This avoids spurious geattr() accesses on objects upon assignment.
1812 #
1814 #
1813 # It also allows users to assign to either alias or magic names true
1815 # It also allows users to assign to either alias or magic names true
1814 # python variables (the magic/alias systems always take second seat to
1816 # python variables (the magic/alias systems always take second seat to
1815 # true python code).
1817 # true python code).
1816 if theRest and theRest[0] in '!=()':
1818 if theRest and theRest[0] in '!=()':
1817 return self.handle_normal(line,continue_prompt)
1819 return self.handle_normal(line,continue_prompt)
1818
1820
1819 if oinfo is None:
1821 if oinfo is None:
1820 # let's try to ensure that _oinfo is ONLY called when autocall is
1822 # let's try to ensure that _oinfo is ONLY called when autocall is
1821 # on. Since it has inevitable potential side effects, at least
1823 # on. Since it has inevitable potential side effects, at least
1822 # having autocall off should be a guarantee to the user that no
1824 # having autocall off should be a guarantee to the user that no
1823 # weird things will happen.
1825 # weird things will happen.
1824
1826
1825 if self.rc.autocall:
1827 if self.rc.autocall:
1826 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1828 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
1827 else:
1829 else:
1828 # in this case, all that's left is either an alias or
1830 # in this case, all that's left is either an alias or
1829 # processing the line normally.
1831 # processing the line normally.
1830 if iFun in self.alias_table:
1832 if iFun in self.alias_table:
1831 return self.handle_alias(line,continue_prompt,
1833 return self.handle_alias(line,continue_prompt,
1832 pre,iFun,theRest)
1834 pre,iFun,theRest)
1833 else:
1835 else:
1834 return self.handle_normal(line,continue_prompt)
1836 return self.handle_normal(line,continue_prompt)
1835
1837
1836 if not oinfo['found']:
1838 if not oinfo['found']:
1837 return self.handle_normal(line,continue_prompt)
1839 return self.handle_normal(line,continue_prompt)
1838 else:
1840 else:
1839 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1841 #print 'iFun <%s> rest <%s>' % (iFun,theRest) # dbg
1840 if oinfo['isalias']:
1842 if oinfo['isalias']:
1841 return self.handle_alias(line,continue_prompt,
1843 return self.handle_alias(line,continue_prompt,
1842 pre,iFun,theRest)
1844 pre,iFun,theRest)
1843
1845
1844 if self.rc.autocall and \
1846 if self.rc.autocall and \
1845 not self.re_exclude_auto.match(theRest) and \
1847 not self.re_exclude_auto.match(theRest) and \
1846 self.re_fun_name.match(iFun) and \
1848 self.re_fun_name.match(iFun) and \
1847 callable(oinfo['obj']) :
1849 callable(oinfo['obj']) :
1848 #print 'going auto' # dbg
1850 #print 'going auto' # dbg
1849 return self.handle_auto(line,continue_prompt,
1851 return self.handle_auto(line,continue_prompt,
1850 pre,iFun,theRest,oinfo['obj'])
1852 pre,iFun,theRest,oinfo['obj'])
1851 else:
1853 else:
1852 #print 'was callable?', callable(oinfo['obj']) # dbg
1854 #print 'was callable?', callable(oinfo['obj']) # dbg
1853 return self.handle_normal(line,continue_prompt)
1855 return self.handle_normal(line,continue_prompt)
1854
1856
1855 # If we get here, we have a normal Python line. Log and return.
1857 # If we get here, we have a normal Python line. Log and return.
1856 return self.handle_normal(line,continue_prompt)
1858 return self.handle_normal(line,continue_prompt)
1857
1859
1858 def _prefilter_dumb(self, line, continue_prompt):
1860 def _prefilter_dumb(self, line, continue_prompt):
1859 """simple prefilter function, for debugging"""
1861 """simple prefilter function, for debugging"""
1860 return self.handle_normal(line,continue_prompt)
1862 return self.handle_normal(line,continue_prompt)
1861
1863
1862 # Set the default prefilter() function (this can be user-overridden)
1864 # Set the default prefilter() function (this can be user-overridden)
1863 prefilter = _prefilter
1865 prefilter = _prefilter
1864
1866
1865 def handle_normal(self,line,continue_prompt=None,
1867 def handle_normal(self,line,continue_prompt=None,
1866 pre=None,iFun=None,theRest=None):
1868 pre=None,iFun=None,theRest=None):
1867 """Handle normal input lines. Use as a template for handlers."""
1869 """Handle normal input lines. Use as a template for handlers."""
1868
1870
1869 # With autoindent on, we need some way to exit the input loop, and I
1871 # With autoindent on, we need some way to exit the input loop, and I
1870 # don't want to force the user to have to backspace all the way to
1872 # don't want to force the user to have to backspace all the way to
1871 # clear the line. The rule will be in this case, that either two
1873 # clear the line. The rule will be in this case, that either two
1872 # lines of pure whitespace in a row, or a line of pure whitespace but
1874 # lines of pure whitespace in a row, or a line of pure whitespace but
1873 # of a size different to the indent level, will exit the input loop.
1875 # of a size different to the indent level, will exit the input loop.
1874
1876
1875 if (continue_prompt and self.autoindent and isspace(line) and
1877 if (continue_prompt and self.autoindent and isspace(line) and
1876 (line != self.indent_current or isspace(self.buffer[-1]))):
1878 (line != self.indent_current or isspace(self.buffer[-1]))):
1877 line = ''
1879 line = ''
1878
1880
1879 self.log(line,continue_prompt)
1881 self.log(line,continue_prompt)
1880 return line
1882 return line
1881
1883
1882 def handle_alias(self,line,continue_prompt=None,
1884 def handle_alias(self,line,continue_prompt=None,
1883 pre=None,iFun=None,theRest=None):
1885 pre=None,iFun=None,theRest=None):
1884 """Handle alias input lines. """
1886 """Handle alias input lines. """
1885
1887
1886 # pre is needed, because it carries the leading whitespace. Otherwise
1888 # pre is needed, because it carries the leading whitespace. Otherwise
1887 # aliases won't work in indented sections.
1889 # aliases won't work in indented sections.
1888 line_out = '%sipalias("%s %s")' % (pre,iFun,esc_quotes(theRest))
1890 line_out = '%sipalias("%s %s")' % (pre,iFun,esc_quotes(theRest))
1889 self.log(line_out,continue_prompt)
1891 self.log(line_out,continue_prompt)
1890 return line_out
1892 return line_out
1891
1893
1892 def handle_shell_escape(self, line, continue_prompt=None,
1894 def handle_shell_escape(self, line, continue_prompt=None,
1893 pre=None,iFun=None,theRest=None):
1895 pre=None,iFun=None,theRest=None):
1894 """Execute the line in a shell, empty return value"""
1896 """Execute the line in a shell, empty return value"""
1895
1897
1896 #print 'line in :', `line` # dbg
1898 #print 'line in :', `line` # dbg
1897 # Example of a special handler. Others follow a similar pattern.
1899 # Example of a special handler. Others follow a similar pattern.
1898 if continue_prompt: # multi-line statements
1900 if continue_prompt: # multi-line statements
1899 if iFun.startswith('!!'):
1901 if iFun.startswith('!!'):
1900 print 'SyntaxError: !! is not allowed in multiline statements'
1902 print 'SyntaxError: !! is not allowed in multiline statements'
1901 return pre
1903 return pre
1902 else:
1904 else:
1903 cmd = ("%s %s" % (iFun[1:],theRest))
1905 cmd = ("%s %s" % (iFun[1:],theRest))
1904 line_out = '%sipsystem(r"""%s"""[:-1])' % (pre,cmd + "_")
1906 line_out = '%sipsystem(r"""%s"""[:-1])' % (pre,cmd + "_")
1905 else: # single-line input
1907 else: # single-line input
1906 if line.startswith('!!'):
1908 if line.startswith('!!'):
1907 # rewrite iFun/theRest to properly hold the call to %sx and
1909 # rewrite iFun/theRest to properly hold the call to %sx and
1908 # the actual command to be executed, so handle_magic can work
1910 # the actual command to be executed, so handle_magic can work
1909 # correctly
1911 # correctly
1910 theRest = '%s %s' % (iFun[2:],theRest)
1912 theRest = '%s %s' % (iFun[2:],theRest)
1911 iFun = 'sx'
1913 iFun = 'sx'
1912 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1914 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,line[2:]),
1913 continue_prompt,pre,iFun,theRest)
1915 continue_prompt,pre,iFun,theRest)
1914 else:
1916 else:
1915 cmd=line[1:]
1917 cmd=line[1:]
1916 line_out = '%sipsystem(r"""%s"""[:-1])' % (pre,cmd +"_")
1918 line_out = '%sipsystem(r"""%s"""[:-1])' % (pre,cmd +"_")
1917 # update cache/log and return
1919 # update cache/log and return
1918 self.log(line_out,continue_prompt)
1920 self.log(line_out,continue_prompt)
1919 return line_out
1921 return line_out
1920
1922
1921 def handle_magic(self, line, continue_prompt=None,
1923 def handle_magic(self, line, continue_prompt=None,
1922 pre=None,iFun=None,theRest=None):
1924 pre=None,iFun=None,theRest=None):
1923 """Execute magic functions.
1925 """Execute magic functions.
1924
1926
1925 Also log them with a prepended # so the log is clean Python."""
1927 Also log them with a prepended # so the log is clean Python."""
1926
1928
1927 cmd = '%sipmagic("%s")' % (pre,esc_quotes('%s %s' % (iFun,theRest)))
1929 cmd = '%sipmagic("%s")' % (pre,esc_quotes('%s %s' % (iFun,theRest)))
1928 self.log(cmd,continue_prompt)
1930 self.log(cmd,continue_prompt)
1929 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1931 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
1930 return cmd
1932 return cmd
1931
1933
1932 def handle_auto(self, line, continue_prompt=None,
1934 def handle_auto(self, line, continue_prompt=None,
1933 pre=None,iFun=None,theRest=None,obj=None):
1935 pre=None,iFun=None,theRest=None,obj=None):
1934 """Hande lines which can be auto-executed, quoting if requested."""
1936 """Hande lines which can be auto-executed, quoting if requested."""
1935
1937
1936 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1938 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
1937
1939
1938 # This should only be active for single-line input!
1940 # This should only be active for single-line input!
1939 if continue_prompt:
1941 if continue_prompt:
1940 self.log(line,continue_prompt)
1942 self.log(line,continue_prompt)
1941 return line
1943 return line
1942
1944
1943 auto_rewrite = True
1945 auto_rewrite = True
1944 if pre == self.ESC_QUOTE:
1946 if pre == self.ESC_QUOTE:
1945 # Auto-quote splitting on whitespace
1947 # Auto-quote splitting on whitespace
1946 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1948 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
1947 elif pre == self.ESC_QUOTE2:
1949 elif pre == self.ESC_QUOTE2:
1948 # Auto-quote whole string
1950 # Auto-quote whole string
1949 newcmd = '%s("%s")' % (iFun,theRest)
1951 newcmd = '%s("%s")' % (iFun,theRest)
1950 else:
1952 else:
1951 # Auto-paren.
1953 # Auto-paren.
1952 # We only apply it to argument-less calls if the autocall
1954 # We only apply it to argument-less calls if the autocall
1953 # parameter is set to 2. We only need to check that autocall is <
1955 # parameter is set to 2. We only need to check that autocall is <
1954 # 2, since this function isn't called unless it's at least 1.
1956 # 2, since this function isn't called unless it's at least 1.
1955 if not theRest and (self.rc.autocall < 2):
1957 if not theRest and (self.rc.autocall < 2):
1956 newcmd = '%s %s' % (iFun,theRest)
1958 newcmd = '%s %s' % (iFun,theRest)
1957 auto_rewrite = False
1959 auto_rewrite = False
1958 else:
1960 else:
1959 if theRest.startswith('['):
1961 if theRest.startswith('['):
1960 if hasattr(obj,'__getitem__'):
1962 if hasattr(obj,'__getitem__'):
1961 # Don't autocall in this case: item access for an object
1963 # Don't autocall in this case: item access for an object
1962 # which is BOTH callable and implements __getitem__.
1964 # which is BOTH callable and implements __getitem__.
1963 newcmd = '%s %s' % (iFun,theRest)
1965 newcmd = '%s %s' % (iFun,theRest)
1964 auto_rewrite = False
1966 auto_rewrite = False
1965 else:
1967 else:
1966 # if the object doesn't support [] access, go ahead and
1968 # if the object doesn't support [] access, go ahead and
1967 # autocall
1969 # autocall
1968 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1970 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1969 elif theRest.endswith(';'):
1971 elif theRest.endswith(';'):
1970 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1972 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
1971 else:
1973 else:
1972 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1974 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
1973
1975
1974 if auto_rewrite:
1976 if auto_rewrite:
1975 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
1977 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
1976 # log what is now valid Python, not the actual user input (without the
1978 # log what is now valid Python, not the actual user input (without the
1977 # final newline)
1979 # final newline)
1978 self.log(newcmd,continue_prompt)
1980 self.log(newcmd,continue_prompt)
1979 return newcmd
1981 return newcmd
1980
1982
1981 def handle_help(self, line, continue_prompt=None,
1983 def handle_help(self, line, continue_prompt=None,
1982 pre=None,iFun=None,theRest=None):
1984 pre=None,iFun=None,theRest=None):
1983 """Try to get some help for the object.
1985 """Try to get some help for the object.
1984
1986
1985 obj? or ?obj -> basic information.
1987 obj? or ?obj -> basic information.
1986 obj?? or ??obj -> more details.
1988 obj?? or ??obj -> more details.
1987 """
1989 """
1988
1990
1989 # We need to make sure that we don't process lines which would be
1991 # We need to make sure that we don't process lines which would be
1990 # otherwise valid python, such as "x=1 # what?"
1992 # otherwise valid python, such as "x=1 # what?"
1991 try:
1993 try:
1992 codeop.compile_command(line)
1994 codeop.compile_command(line)
1993 except SyntaxError:
1995 except SyntaxError:
1994 # We should only handle as help stuff which is NOT valid syntax
1996 # We should only handle as help stuff which is NOT valid syntax
1995 if line[0]==self.ESC_HELP:
1997 if line[0]==self.ESC_HELP:
1996 line = line[1:]
1998 line = line[1:]
1997 elif line[-1]==self.ESC_HELP:
1999 elif line[-1]==self.ESC_HELP:
1998 line = line[:-1]
2000 line = line[:-1]
1999 self.log('#?'+line)
2001 self.log('#?'+line)
2000 if line:
2002 if line:
2001 self.magic_pinfo(line)
2003 self.magic_pinfo(line)
2002 else:
2004 else:
2003 page(self.usage,screen_lines=self.rc.screen_length)
2005 page(self.usage,screen_lines=self.rc.screen_length)
2004 return '' # Empty string is needed here!
2006 return '' # Empty string is needed here!
2005 except:
2007 except:
2006 # Pass any other exceptions through to the normal handler
2008 # Pass any other exceptions through to the normal handler
2007 return self.handle_normal(line,continue_prompt)
2009 return self.handle_normal(line,continue_prompt)
2008 else:
2010 else:
2009 # If the code compiles ok, we should handle it normally
2011 # If the code compiles ok, we should handle it normally
2010 return self.handle_normal(line,continue_prompt)
2012 return self.handle_normal(line,continue_prompt)
2011
2013
2012 def handle_emacs(self,line,continue_prompt=None,
2014 def handle_emacs(self,line,continue_prompt=None,
2013 pre=None,iFun=None,theRest=None):
2015 pre=None,iFun=None,theRest=None):
2014 """Handle input lines marked by python-mode."""
2016 """Handle input lines marked by python-mode."""
2015
2017
2016 # Currently, nothing is done. Later more functionality can be added
2018 # Currently, nothing is done. Later more functionality can be added
2017 # here if needed.
2019 # here if needed.
2018
2020
2019 # The input cache shouldn't be updated
2021 # The input cache shouldn't be updated
2020
2022
2021 return line
2023 return line
2022
2024
2023 def mktempfile(self,data=None):
2025 def mktempfile(self,data=None):
2024 """Make a new tempfile and return its filename.
2026 """Make a new tempfile and return its filename.
2025
2027
2026 This makes a call to tempfile.mktemp, but it registers the created
2028 This makes a call to tempfile.mktemp, but it registers the created
2027 filename internally so ipython cleans it up at exit time.
2029 filename internally so ipython cleans it up at exit time.
2028
2030
2029 Optional inputs:
2031 Optional inputs:
2030
2032
2031 - data(None): if data is given, it gets written out to the temp file
2033 - data(None): if data is given, it gets written out to the temp file
2032 immediately, and the file is closed again."""
2034 immediately, and the file is closed again."""
2033
2035
2034 filename = tempfile.mktemp('.py')
2036 filename = tempfile.mktemp('.py')
2035 self.tempfiles.append(filename)
2037 self.tempfiles.append(filename)
2036
2038
2037 if data:
2039 if data:
2038 tmp_file = open(filename,'w')
2040 tmp_file = open(filename,'w')
2039 tmp_file.write(data)
2041 tmp_file.write(data)
2040 tmp_file.close()
2042 tmp_file.close()
2041 return filename
2043 return filename
2042
2044
2043 def write(self,data):
2045 def write(self,data):
2044 """Write a string to the default output"""
2046 """Write a string to the default output"""
2045 Term.cout.write(data)
2047 Term.cout.write(data)
2046
2048
2047 def write_err(self,data):
2049 def write_err(self,data):
2048 """Write a string to the default error output"""
2050 """Write a string to the default error output"""
2049 Term.cerr.write(data)
2051 Term.cerr.write(data)
2050
2052
2051 def exit(self):
2053 def exit(self):
2052 """Handle interactive exit.
2054 """Handle interactive exit.
2053
2055
2054 This method sets the exit_now attribute."""
2056 This method sets the exit_now attribute."""
2055
2057
2056 if self.rc.confirm_exit:
2058 if self.rc.confirm_exit:
2057 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2059 if ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2058 self.exit_now = True
2060 self.exit_now = True
2059 else:
2061 else:
2060 self.exit_now = True
2062 self.exit_now = True
2061 return self.exit_now
2063 return self.exit_now
2062
2064
2063 def safe_execfile(self,fname,*where,**kw):
2065 def safe_execfile(self,fname,*where,**kw):
2064 fname = os.path.expanduser(fname)
2066 fname = os.path.expanduser(fname)
2065
2067
2066 # find things also in current directory
2068 # find things also in current directory
2067 dname = os.path.dirname(fname)
2069 dname = os.path.dirname(fname)
2068 if not sys.path.count(dname):
2070 if not sys.path.count(dname):
2069 sys.path.append(dname)
2071 sys.path.append(dname)
2070
2072
2071 try:
2073 try:
2072 xfile = open(fname)
2074 xfile = open(fname)
2073 except:
2075 except:
2074 print >> Term.cerr, \
2076 print >> Term.cerr, \
2075 'Could not open file <%s> for safe execution.' % fname
2077 'Could not open file <%s> for safe execution.' % fname
2076 return None
2078 return None
2077
2079
2078 kw.setdefault('islog',0)
2080 kw.setdefault('islog',0)
2079 kw.setdefault('quiet',1)
2081 kw.setdefault('quiet',1)
2080 kw.setdefault('exit_ignore',0)
2082 kw.setdefault('exit_ignore',0)
2081 first = xfile.readline()
2083 first = xfile.readline()
2082 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2084 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2083 xfile.close()
2085 xfile.close()
2084 # line by line execution
2086 # line by line execution
2085 if first.startswith(loghead) or kw['islog']:
2087 if first.startswith(loghead) or kw['islog']:
2086 print 'Loading log file <%s> one line at a time...' % fname
2088 print 'Loading log file <%s> one line at a time...' % fname
2087 if kw['quiet']:
2089 if kw['quiet']:
2088 stdout_save = sys.stdout
2090 stdout_save = sys.stdout
2089 sys.stdout = StringIO.StringIO()
2091 sys.stdout = StringIO.StringIO()
2090 try:
2092 try:
2091 globs,locs = where[0:2]
2093 globs,locs = where[0:2]
2092 except:
2094 except:
2093 try:
2095 try:
2094 globs = locs = where[0]
2096 globs = locs = where[0]
2095 except:
2097 except:
2096 globs = locs = globals()
2098 globs = locs = globals()
2097 badblocks = []
2099 badblocks = []
2098
2100
2099 # we also need to identify indented blocks of code when replaying
2101 # we also need to identify indented blocks of code when replaying
2100 # logs and put them together before passing them to an exec
2102 # logs and put them together before passing them to an exec
2101 # statement. This takes a bit of regexp and look-ahead work in the
2103 # statement. This takes a bit of regexp and look-ahead work in the
2102 # file. It's easiest if we swallow the whole thing in memory
2104 # file. It's easiest if we swallow the whole thing in memory
2103 # first, and manually walk through the lines list moving the
2105 # first, and manually walk through the lines list moving the
2104 # counter ourselves.
2106 # counter ourselves.
2105 indent_re = re.compile('\s+\S')
2107 indent_re = re.compile('\s+\S')
2106 xfile = open(fname)
2108 xfile = open(fname)
2107 filelines = xfile.readlines()
2109 filelines = xfile.readlines()
2108 xfile.close()
2110 xfile.close()
2109 nlines = len(filelines)
2111 nlines = len(filelines)
2110 lnum = 0
2112 lnum = 0
2111 while lnum < nlines:
2113 while lnum < nlines:
2112 line = filelines[lnum]
2114 line = filelines[lnum]
2113 lnum += 1
2115 lnum += 1
2114 # don't re-insert logger status info into cache
2116 # don't re-insert logger status info into cache
2115 if line.startswith('#log#'):
2117 if line.startswith('#log#'):
2116 continue
2118 continue
2117 else:
2119 else:
2118 # build a block of code (maybe a single line) for execution
2120 # build a block of code (maybe a single line) for execution
2119 block = line
2121 block = line
2120 try:
2122 try:
2121 next = filelines[lnum] # lnum has already incremented
2123 next = filelines[lnum] # lnum has already incremented
2122 except:
2124 except:
2123 next = None
2125 next = None
2124 while next and indent_re.match(next):
2126 while next and indent_re.match(next):
2125 block += next
2127 block += next
2126 lnum += 1
2128 lnum += 1
2127 try:
2129 try:
2128 next = filelines[lnum]
2130 next = filelines[lnum]
2129 except:
2131 except:
2130 next = None
2132 next = None
2131 # now execute the block of one or more lines
2133 # now execute the block of one or more lines
2132 try:
2134 try:
2133 exec block in globs,locs
2135 exec block in globs,locs
2134 except SystemExit:
2136 except SystemExit:
2135 pass
2137 pass
2136 except:
2138 except:
2137 badblocks.append(block.rstrip())
2139 badblocks.append(block.rstrip())
2138 if kw['quiet']: # restore stdout
2140 if kw['quiet']: # restore stdout
2139 sys.stdout.close()
2141 sys.stdout.close()
2140 sys.stdout = stdout_save
2142 sys.stdout = stdout_save
2141 print 'Finished replaying log file <%s>' % fname
2143 print 'Finished replaying log file <%s>' % fname
2142 if badblocks:
2144 if badblocks:
2143 print >> sys.stderr, ('\nThe following lines/blocks in file '
2145 print >> sys.stderr, ('\nThe following lines/blocks in file '
2144 '<%s> reported errors:' % fname)
2146 '<%s> reported errors:' % fname)
2145
2147
2146 for badline in badblocks:
2148 for badline in badblocks:
2147 print >> sys.stderr, badline
2149 print >> sys.stderr, badline
2148 else: # regular file execution
2150 else: # regular file execution
2149 try:
2151 try:
2150 execfile(fname,*where)
2152 execfile(fname,*where)
2151 except SyntaxError:
2153 except SyntaxError:
2152 etype,evalue = sys.exc_info()[:2]
2154 etype,evalue = sys.exc_info()[:2]
2153 self.SyntaxTB(etype,evalue,[])
2155 self.SyntaxTB(etype,evalue,[])
2154 warn('Failure executing file: <%s>' % fname)
2156 warn('Failure executing file: <%s>' % fname)
2155 except SystemExit,status:
2157 except SystemExit,status:
2156 if not kw['exit_ignore']:
2158 if not kw['exit_ignore']:
2157 self.InteractiveTB()
2159 self.InteractiveTB()
2158 warn('Failure executing file: <%s>' % fname)
2160 warn('Failure executing file: <%s>' % fname)
2159 except:
2161 except:
2160 self.InteractiveTB()
2162 self.InteractiveTB()
2161 warn('Failure executing file: <%s>' % fname)
2163 warn('Failure executing file: <%s>' % fname)
2162
2164
2163 #************************* end of file <iplib.py> *****************************
2165 #************************* end of file <iplib.py> *****************************
@@ -1,4790 +1,4794 b''
1 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
2
2
3 * IPython/iplib.py (embed_mainloop): fix tab-completion in
4 embedded instances, for variables defined at the interactive
5 prompt of the embedded ipython. Reported by Arnd.
6
3 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
7 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
4 it can be used as a (stateful) toggle, or with a direct parameter.
8 it can be used as a (stateful) toggle, or with a direct parameter.
5
9
6 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
10 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
7 could be triggered in certain cases and cause the traceback
11 could be triggered in certain cases and cause the traceback
8 printer not to work.
12 printer not to work.
9
13
10 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
14 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
11
15
12 * IPython/iplib.py (_should_recompile): Small fix, closes
16 * IPython/iplib.py (_should_recompile): Small fix, closes
13 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
17 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
14
18
15 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
19 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
16
20
17 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
21 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
18 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
22 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
19 Moad for help with tracking it down.
23 Moad for help with tracking it down.
20
24
21 * IPython/iplib.py (handle_auto): fix autocall handling for
25 * IPython/iplib.py (handle_auto): fix autocall handling for
22 objects which support BOTH __getitem__ and __call__ (so that f [x]
26 objects which support BOTH __getitem__ and __call__ (so that f [x]
23 is left alone, instead of becoming f([x]) automatically).
27 is left alone, instead of becoming f([x]) automatically).
24
28
25 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
29 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
26 Ville's patch.
30 Ville's patch.
27
31
28 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
32 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
29
33
30 * IPython/iplib.py (handle_auto): changed autocall semantics to
34 * IPython/iplib.py (handle_auto): changed autocall semantics to
31 include 'smart' mode, where the autocall transformation is NOT
35 include 'smart' mode, where the autocall transformation is NOT
32 applied if there are no arguments on the line. This allows you to
36 applied if there are no arguments on the line. This allows you to
33 just type 'foo' if foo is a callable to see its internal form,
37 just type 'foo' if foo is a callable to see its internal form,
34 instead of having it called with no arguments (typically a
38 instead of having it called with no arguments (typically a
35 mistake). The old 'full' autocall still exists: for that, you
39 mistake). The old 'full' autocall still exists: for that, you
36 need to set the 'autocall' parameter to 2 in your ipythonrc file.
40 need to set the 'autocall' parameter to 2 in your ipythonrc file.
37
41
38 * IPython/completer.py (Completer.attr_matches): add
42 * IPython/completer.py (Completer.attr_matches): add
39 tab-completion support for Enthoughts' traits. After a report by
43 tab-completion support for Enthoughts' traits. After a report by
40 Arnd and a patch by Prabhu.
44 Arnd and a patch by Prabhu.
41
45
42 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
46 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
43
47
44 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
48 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
45 Schmolck's patch to fix inspect.getinnerframes().
49 Schmolck's patch to fix inspect.getinnerframes().
46
50
47 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
51 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
48 for embedded instances, regarding handling of namespaces and items
52 for embedded instances, regarding handling of namespaces and items
49 added to the __builtin__ one. Multiple embedded instances and
53 added to the __builtin__ one. Multiple embedded instances and
50 recursive embeddings should work better now (though I'm not sure
54 recursive embeddings should work better now (though I'm not sure
51 I've got all the corner cases fixed, that code is a bit of a brain
55 I've got all the corner cases fixed, that code is a bit of a brain
52 twister).
56 twister).
53
57
54 * IPython/Magic.py (magic_edit): added support to edit in-memory
58 * IPython/Magic.py (magic_edit): added support to edit in-memory
55 macros (automatically creates the necessary temp files). %edit
59 macros (automatically creates the necessary temp files). %edit
56 also doesn't return the file contents anymore, it's just noise.
60 also doesn't return the file contents anymore, it's just noise.
57
61
58 * IPython/completer.py (Completer.attr_matches): revert change to
62 * IPython/completer.py (Completer.attr_matches): revert change to
59 complete only on attributes listed in __all__. I realized it
63 complete only on attributes listed in __all__. I realized it
60 cripples the tab-completion system as a tool for exploring the
64 cripples the tab-completion system as a tool for exploring the
61 internals of unknown libraries (it renders any non-__all__
65 internals of unknown libraries (it renders any non-__all__
62 attribute off-limits). I got bit by this when trying to see
66 attribute off-limits). I got bit by this when trying to see
63 something inside the dis module.
67 something inside the dis module.
64
68
65 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
69 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
66
70
67 * IPython/iplib.py (InteractiveShell.__init__): add .meta
71 * IPython/iplib.py (InteractiveShell.__init__): add .meta
68 namespace for users and extension writers to hold data in. This
72 namespace for users and extension writers to hold data in. This
69 follows the discussion in
73 follows the discussion in
70 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
74 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
71
75
72 * IPython/completer.py (IPCompleter.complete): small patch to help
76 * IPython/completer.py (IPCompleter.complete): small patch to help
73 tab-completion under Emacs, after a suggestion by John Barnard
77 tab-completion under Emacs, after a suggestion by John Barnard
74 <barnarj-AT-ccf.org>.
78 <barnarj-AT-ccf.org>.
75
79
76 * IPython/Magic.py (Magic.extract_input_slices): added support for
80 * IPython/Magic.py (Magic.extract_input_slices): added support for
77 the slice notation in magics to use N-M to represent numbers N...M
81 the slice notation in magics to use N-M to represent numbers N...M
78 (closed endpoints). This is used by %macro and %save.
82 (closed endpoints). This is used by %macro and %save.
79
83
80 * IPython/completer.py (Completer.attr_matches): for modules which
84 * IPython/completer.py (Completer.attr_matches): for modules which
81 define __all__, complete only on those. After a patch by Jeffrey
85 define __all__, complete only on those. After a patch by Jeffrey
82 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
86 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
83 speed up this routine.
87 speed up this routine.
84
88
85 * IPython/Logger.py (Logger.log): fix a history handling bug. I
89 * IPython/Logger.py (Logger.log): fix a history handling bug. I
86 don't know if this is the end of it, but the behavior now is
90 don't know if this is the end of it, but the behavior now is
87 certainly much more correct. Note that coupled with macros,
91 certainly much more correct. Note that coupled with macros,
88 slightly surprising (at first) behavior may occur: a macro will in
92 slightly surprising (at first) behavior may occur: a macro will in
89 general expand to multiple lines of input, so upon exiting, the
93 general expand to multiple lines of input, so upon exiting, the
90 in/out counters will both be bumped by the corresponding amount
94 in/out counters will both be bumped by the corresponding amount
91 (as if the macro's contents had been typed interactively). Typing
95 (as if the macro's contents had been typed interactively). Typing
92 %hist will reveal the intermediate (silently processed) lines.
96 %hist will reveal the intermediate (silently processed) lines.
93
97
94 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
98 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
95 pickle to fail (%run was overwriting __main__ and not restoring
99 pickle to fail (%run was overwriting __main__ and not restoring
96 it, but pickle relies on __main__ to operate).
100 it, but pickle relies on __main__ to operate).
97
101
98 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
102 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
99 using properties, but forgot to make the main InteractiveShell
103 using properties, but forgot to make the main InteractiveShell
100 class a new-style class. Properties fail silently, and
104 class a new-style class. Properties fail silently, and
101 misteriously, with old-style class (getters work, but
105 misteriously, with old-style class (getters work, but
102 setters don't do anything).
106 setters don't do anything).
103
107
104 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
108 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
105
109
106 * IPython/Magic.py (magic_history): fix history reporting bug (I
110 * IPython/Magic.py (magic_history): fix history reporting bug (I
107 know some nasties are still there, I just can't seem to find a
111 know some nasties are still there, I just can't seem to find a
108 reproducible test case to track them down; the input history is
112 reproducible test case to track them down; the input history is
109 falling out of sync...)
113 falling out of sync...)
110
114
111 * IPython/iplib.py (handle_shell_escape): fix bug where both
115 * IPython/iplib.py (handle_shell_escape): fix bug where both
112 aliases and system accesses where broken for indented code (such
116 aliases and system accesses where broken for indented code (such
113 as loops).
117 as loops).
114
118
115 * IPython/genutils.py (shell): fix small but critical bug for
119 * IPython/genutils.py (shell): fix small but critical bug for
116 win32 system access.
120 win32 system access.
117
121
118 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
122 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
119
123
120 * IPython/iplib.py (showtraceback): remove use of the
124 * IPython/iplib.py (showtraceback): remove use of the
121 sys.last_{type/value/traceback} structures, which are non
125 sys.last_{type/value/traceback} structures, which are non
122 thread-safe.
126 thread-safe.
123 (_prefilter): change control flow to ensure that we NEVER
127 (_prefilter): change control flow to ensure that we NEVER
124 introspect objects when autocall is off. This will guarantee that
128 introspect objects when autocall is off. This will guarantee that
125 having an input line of the form 'x.y', where access to attribute
129 having an input line of the form 'x.y', where access to attribute
126 'y' has side effects, doesn't trigger the side effect TWICE. It
130 'y' has side effects, doesn't trigger the side effect TWICE. It
127 is important to note that, with autocall on, these side effects
131 is important to note that, with autocall on, these side effects
128 can still happen.
132 can still happen.
129 (ipsystem): new builtin, to complete the ip{magic/alias/system}
133 (ipsystem): new builtin, to complete the ip{magic/alias/system}
130 trio. IPython offers these three kinds of special calls which are
134 trio. IPython offers these three kinds of special calls which are
131 not python code, and it's a good thing to have their call method
135 not python code, and it's a good thing to have their call method
132 be accessible as pure python functions (not just special syntax at
136 be accessible as pure python functions (not just special syntax at
133 the command line). It gives us a better internal implementation
137 the command line). It gives us a better internal implementation
134 structure, as well as exposing these for user scripting more
138 structure, as well as exposing these for user scripting more
135 cleanly.
139 cleanly.
136
140
137 * IPython/macro.py (Macro.__init__): moved macros to a standalone
141 * IPython/macro.py (Macro.__init__): moved macros to a standalone
138 file. Now that they'll be more likely to be used with the
142 file. Now that they'll be more likely to be used with the
139 persistance system (%store), I want to make sure their module path
143 persistance system (%store), I want to make sure their module path
140 doesn't change in the future, so that we don't break things for
144 doesn't change in the future, so that we don't break things for
141 users' persisted data.
145 users' persisted data.
142
146
143 * IPython/iplib.py (autoindent_update): move indentation
147 * IPython/iplib.py (autoindent_update): move indentation
144 management into the _text_ processing loop, not the keyboard
148 management into the _text_ processing loop, not the keyboard
145 interactive one. This is necessary to correctly process non-typed
149 interactive one. This is necessary to correctly process non-typed
146 multiline input (such as macros).
150 multiline input (such as macros).
147
151
148 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
152 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
149 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
153 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
150 which was producing problems in the resulting manual.
154 which was producing problems in the resulting manual.
151 (magic_whos): improve reporting of instances (show their class,
155 (magic_whos): improve reporting of instances (show their class,
152 instead of simply printing 'instance' which isn't terribly
156 instead of simply printing 'instance' which isn't terribly
153 informative).
157 informative).
154
158
155 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
159 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
156 (minor mods) to support network shares under win32.
160 (minor mods) to support network shares under win32.
157
161
158 * IPython/winconsole.py (get_console_size): add new winconsole
162 * IPython/winconsole.py (get_console_size): add new winconsole
159 module and fixes to page_dumb() to improve its behavior under
163 module and fixes to page_dumb() to improve its behavior under
160 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
164 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
161
165
162 * IPython/Magic.py (Macro): simplified Macro class to just
166 * IPython/Magic.py (Macro): simplified Macro class to just
163 subclass list. We've had only 2.2 compatibility for a very long
167 subclass list. We've had only 2.2 compatibility for a very long
164 time, yet I was still avoiding subclassing the builtin types. No
168 time, yet I was still avoiding subclassing the builtin types. No
165 more (I'm also starting to use properties, though I won't shift to
169 more (I'm also starting to use properties, though I won't shift to
166 2.3-specific features quite yet).
170 2.3-specific features quite yet).
167 (magic_store): added Ville's patch for lightweight variable
171 (magic_store): added Ville's patch for lightweight variable
168 persistence, after a request on the user list by Matt Wilkie
172 persistence, after a request on the user list by Matt Wilkie
169 <maphew-AT-gmail.com>. The new %store magic's docstring has full
173 <maphew-AT-gmail.com>. The new %store magic's docstring has full
170 details.
174 details.
171
175
172 * IPython/iplib.py (InteractiveShell.post_config_initialization):
176 * IPython/iplib.py (InteractiveShell.post_config_initialization):
173 changed the default logfile name from 'ipython.log' to
177 changed the default logfile name from 'ipython.log' to
174 'ipython_log.py'. These logs are real python files, and now that
178 'ipython_log.py'. These logs are real python files, and now that
175 we have much better multiline support, people are more likely to
179 we have much better multiline support, people are more likely to
176 want to use them as such. Might as well name them correctly.
180 want to use them as such. Might as well name them correctly.
177
181
178 * IPython/Magic.py: substantial cleanup. While we can't stop
182 * IPython/Magic.py: substantial cleanup. While we can't stop
179 using magics as mixins, due to the existing customizations 'out
183 using magics as mixins, due to the existing customizations 'out
180 there' which rely on the mixin naming conventions, at least I
184 there' which rely on the mixin naming conventions, at least I
181 cleaned out all cross-class name usage. So once we are OK with
185 cleaned out all cross-class name usage. So once we are OK with
182 breaking compatibility, the two systems can be separated.
186 breaking compatibility, the two systems can be separated.
183
187
184 * IPython/Logger.py: major cleanup. This one is NOT a mixin
188 * IPython/Logger.py: major cleanup. This one is NOT a mixin
185 anymore, and the class is a fair bit less hideous as well. New
189 anymore, and the class is a fair bit less hideous as well. New
186 features were also introduced: timestamping of input, and logging
190 features were also introduced: timestamping of input, and logging
187 of output results. These are user-visible with the -t and -o
191 of output results. These are user-visible with the -t and -o
188 options to %logstart. Closes
192 options to %logstart. Closes
189 http://www.scipy.net/roundup/ipython/issue11 and a request by
193 http://www.scipy.net/roundup/ipython/issue11 and a request by
190 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
194 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
191
195
192 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
196 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
193
197
194 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
198 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
195 better hadnle backslashes in paths. See the thread 'More Windows
199 better hadnle backslashes in paths. See the thread 'More Windows
196 questions part 2 - \/ characters revisited' on the iypthon user
200 questions part 2 - \/ characters revisited' on the iypthon user
197 list:
201 list:
198 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
202 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
199
203
200 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
204 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
201
205
202 (InteractiveShell.__init__): change threaded shells to not use the
206 (InteractiveShell.__init__): change threaded shells to not use the
203 ipython crash handler. This was causing more problems than not,
207 ipython crash handler. This was causing more problems than not,
204 as exceptions in the main thread (GUI code, typically) would
208 as exceptions in the main thread (GUI code, typically) would
205 always show up as a 'crash', when they really weren't.
209 always show up as a 'crash', when they really weren't.
206
210
207 The colors and exception mode commands (%colors/%xmode) have been
211 The colors and exception mode commands (%colors/%xmode) have been
208 synchronized to also take this into account, so users can get
212 synchronized to also take this into account, so users can get
209 verbose exceptions for their threaded code as well. I also added
213 verbose exceptions for their threaded code as well. I also added
210 support for activating pdb inside this exception handler as well,
214 support for activating pdb inside this exception handler as well,
211 so now GUI authors can use IPython's enhanced pdb at runtime.
215 so now GUI authors can use IPython's enhanced pdb at runtime.
212
216
213 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
217 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
214 true by default, and add it to the shipped ipythonrc file. Since
218 true by default, and add it to the shipped ipythonrc file. Since
215 this asks the user before proceeding, I think it's OK to make it
219 this asks the user before proceeding, I think it's OK to make it
216 true by default.
220 true by default.
217
221
218 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
222 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
219 of the previous special-casing of input in the eval loop. I think
223 of the previous special-casing of input in the eval loop. I think
220 this is cleaner, as they really are commands and shouldn't have
224 this is cleaner, as they really are commands and shouldn't have
221 a special role in the middle of the core code.
225 a special role in the middle of the core code.
222
226
223 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
227 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
224
228
225 * IPython/iplib.py (edit_syntax_error): added support for
229 * IPython/iplib.py (edit_syntax_error): added support for
226 automatically reopening the editor if the file had a syntax error
230 automatically reopening the editor if the file had a syntax error
227 in it. Thanks to scottt who provided the patch at:
231 in it. Thanks to scottt who provided the patch at:
228 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
232 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
229 version committed).
233 version committed).
230
234
231 * IPython/iplib.py (handle_normal): add suport for multi-line
235 * IPython/iplib.py (handle_normal): add suport for multi-line
232 input with emtpy lines. This fixes
236 input with emtpy lines. This fixes
233 http://www.scipy.net/roundup/ipython/issue43 and a similar
237 http://www.scipy.net/roundup/ipython/issue43 and a similar
234 discussion on the user list.
238 discussion on the user list.
235
239
236 WARNING: a behavior change is necessarily introduced to support
240 WARNING: a behavior change is necessarily introduced to support
237 blank lines: now a single blank line with whitespace does NOT
241 blank lines: now a single blank line with whitespace does NOT
238 break the input loop, which means that when autoindent is on, by
242 break the input loop, which means that when autoindent is on, by
239 default hitting return on the next (indented) line does NOT exit.
243 default hitting return on the next (indented) line does NOT exit.
240
244
241 Instead, to exit a multiline input you can either have:
245 Instead, to exit a multiline input you can either have:
242
246
243 - TWO whitespace lines (just hit return again), or
247 - TWO whitespace lines (just hit return again), or
244 - a single whitespace line of a different length than provided
248 - a single whitespace line of a different length than provided
245 by the autoindent (add or remove a space).
249 by the autoindent (add or remove a space).
246
250
247 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
251 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
248 module to better organize all readline-related functionality.
252 module to better organize all readline-related functionality.
249 I've deleted FlexCompleter and put all completion clases here.
253 I've deleted FlexCompleter and put all completion clases here.
250
254
251 * IPython/iplib.py (raw_input): improve indentation management.
255 * IPython/iplib.py (raw_input): improve indentation management.
252 It is now possible to paste indented code with autoindent on, and
256 It is now possible to paste indented code with autoindent on, and
253 the code is interpreted correctly (though it still looks bad on
257 the code is interpreted correctly (though it still looks bad on
254 screen, due to the line-oriented nature of ipython).
258 screen, due to the line-oriented nature of ipython).
255 (MagicCompleter.complete): change behavior so that a TAB key on an
259 (MagicCompleter.complete): change behavior so that a TAB key on an
256 otherwise empty line actually inserts a tab, instead of completing
260 otherwise empty line actually inserts a tab, instead of completing
257 on the entire global namespace. This makes it easier to use the
261 on the entire global namespace. This makes it easier to use the
258 TAB key for indentation. After a request by Hans Meine
262 TAB key for indentation. After a request by Hans Meine
259 <hans_meine-AT-gmx.net>
263 <hans_meine-AT-gmx.net>
260 (_prefilter): add support so that typing plain 'exit' or 'quit'
264 (_prefilter): add support so that typing plain 'exit' or 'quit'
261 does a sensible thing. Originally I tried to deviate as little as
265 does a sensible thing. Originally I tried to deviate as little as
262 possible from the default python behavior, but even that one may
266 possible from the default python behavior, but even that one may
263 change in this direction (thread on python-dev to that effect).
267 change in this direction (thread on python-dev to that effect).
264 Regardless, ipython should do the right thing even if CPython's
268 Regardless, ipython should do the right thing even if CPython's
265 '>>>' prompt doesn't.
269 '>>>' prompt doesn't.
266 (InteractiveShell): removed subclassing code.InteractiveConsole
270 (InteractiveShell): removed subclassing code.InteractiveConsole
267 class. By now we'd overridden just about all of its methods: I've
271 class. By now we'd overridden just about all of its methods: I've
268 copied the remaining two over, and now ipython is a standalone
272 copied the remaining two over, and now ipython is a standalone
269 class. This will provide a clearer picture for the chainsaw
273 class. This will provide a clearer picture for the chainsaw
270 branch refactoring.
274 branch refactoring.
271
275
272 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
276 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
273
277
274 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
278 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
275 failures for objects which break when dir() is called on them.
279 failures for objects which break when dir() is called on them.
276
280
277 * IPython/FlexCompleter.py (Completer.__init__): Added support for
281 * IPython/FlexCompleter.py (Completer.__init__): Added support for
278 distinct local and global namespaces in the completer API. This
282 distinct local and global namespaces in the completer API. This
279 change allows us top properly handle completion with distinct
283 change allows us top properly handle completion with distinct
280 scopes, including in embedded instances (this had never really
284 scopes, including in embedded instances (this had never really
281 worked correctly).
285 worked correctly).
282
286
283 Note: this introduces a change in the constructor for
287 Note: this introduces a change in the constructor for
284 MagicCompleter, as a new global_namespace parameter is now the
288 MagicCompleter, as a new global_namespace parameter is now the
285 second argument (the others were bumped one position).
289 second argument (the others were bumped one position).
286
290
287 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
291 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
288
292
289 * IPython/iplib.py (embed_mainloop): fix tab-completion in
293 * IPython/iplib.py (embed_mainloop): fix tab-completion in
290 embedded instances (which can be done now thanks to Vivian's
294 embedded instances (which can be done now thanks to Vivian's
291 frame-handling fixes for pdb).
295 frame-handling fixes for pdb).
292 (InteractiveShell.__init__): Fix namespace handling problem in
296 (InteractiveShell.__init__): Fix namespace handling problem in
293 embedded instances. We were overwriting __main__ unconditionally,
297 embedded instances. We were overwriting __main__ unconditionally,
294 and this should only be done for 'full' (non-embedded) IPython;
298 and this should only be done for 'full' (non-embedded) IPython;
295 embedded instances must respect the caller's __main__. Thanks to
299 embedded instances must respect the caller's __main__. Thanks to
296 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
300 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
297
301
298 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
302 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
299
303
300 * setup.py: added download_url to setup(). This registers the
304 * setup.py: added download_url to setup(). This registers the
301 download address at PyPI, which is not only useful to humans
305 download address at PyPI, which is not only useful to humans
302 browsing the site, but is also picked up by setuptools (the Eggs
306 browsing the site, but is also picked up by setuptools (the Eggs
303 machinery). Thanks to Ville and R. Kern for the info/discussion
307 machinery). Thanks to Ville and R. Kern for the info/discussion
304 on this.
308 on this.
305
309
306 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
310 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
307
311
308 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
312 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
309 This brings a lot of nice functionality to the pdb mode, which now
313 This brings a lot of nice functionality to the pdb mode, which now
310 has tab-completion, syntax highlighting, and better stack handling
314 has tab-completion, syntax highlighting, and better stack handling
311 than before. Many thanks to Vivian De Smedt
315 than before. Many thanks to Vivian De Smedt
312 <vivian-AT-vdesmedt.com> for the original patches.
316 <vivian-AT-vdesmedt.com> for the original patches.
313
317
314 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
318 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
315
319
316 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
320 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
317 sequence to consistently accept the banner argument. The
321 sequence to consistently accept the banner argument. The
318 inconsistency was tripping SAGE, thanks to Gary Zablackis
322 inconsistency was tripping SAGE, thanks to Gary Zablackis
319 <gzabl-AT-yahoo.com> for the report.
323 <gzabl-AT-yahoo.com> for the report.
320
324
321 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
325 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
322
326
323 * IPython/iplib.py (InteractiveShell.post_config_initialization):
327 * IPython/iplib.py (InteractiveShell.post_config_initialization):
324 Fix bug where a naked 'alias' call in the ipythonrc file would
328 Fix bug where a naked 'alias' call in the ipythonrc file would
325 cause a crash. Bug reported by Jorgen Stenarson.
329 cause a crash. Bug reported by Jorgen Stenarson.
326
330
327 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
331 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
328
332
329 * IPython/ipmaker.py (make_IPython): cleanups which should improve
333 * IPython/ipmaker.py (make_IPython): cleanups which should improve
330 startup time.
334 startup time.
331
335
332 * IPython/iplib.py (runcode): my globals 'fix' for embedded
336 * IPython/iplib.py (runcode): my globals 'fix' for embedded
333 instances had introduced a bug with globals in normal code. Now
337 instances had introduced a bug with globals in normal code. Now
334 it's working in all cases.
338 it's working in all cases.
335
339
336 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
340 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
337 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
341 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
338 has been introduced to set the default case sensitivity of the
342 has been introduced to set the default case sensitivity of the
339 searches. Users can still select either mode at runtime on a
343 searches. Users can still select either mode at runtime on a
340 per-search basis.
344 per-search basis.
341
345
342 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
346 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
343
347
344 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
348 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
345 attributes in wildcard searches for subclasses. Modified version
349 attributes in wildcard searches for subclasses. Modified version
346 of a patch by Jorgen.
350 of a patch by Jorgen.
347
351
348 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
352 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
349
353
350 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
354 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
351 embedded instances. I added a user_global_ns attribute to the
355 embedded instances. I added a user_global_ns attribute to the
352 InteractiveShell class to handle this.
356 InteractiveShell class to handle this.
353
357
354 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
358 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
355
359
356 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
360 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
357 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
361 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
358 (reported under win32, but may happen also in other platforms).
362 (reported under win32, but may happen also in other platforms).
359 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
363 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
360
364
361 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
365 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
362
366
363 * IPython/Magic.py (magic_psearch): new support for wildcard
367 * IPython/Magic.py (magic_psearch): new support for wildcard
364 patterns. Now, typing ?a*b will list all names which begin with a
368 patterns. Now, typing ?a*b will list all names which begin with a
365 and end in b, for example. The %psearch magic has full
369 and end in b, for example. The %psearch magic has full
366 docstrings. Many thanks to JΓΆrgen Stenarson
370 docstrings. Many thanks to JΓΆrgen Stenarson
367 <jorgen.stenarson-AT-bostream.nu>, author of the patches
371 <jorgen.stenarson-AT-bostream.nu>, author of the patches
368 implementing this functionality.
372 implementing this functionality.
369
373
370 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
374 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
371
375
372 * Manual: fixed long-standing annoyance of double-dashes (as in
376 * Manual: fixed long-standing annoyance of double-dashes (as in
373 --prefix=~, for example) being stripped in the HTML version. This
377 --prefix=~, for example) being stripped in the HTML version. This
374 is a latex2html bug, but a workaround was provided. Many thanks
378 is a latex2html bug, but a workaround was provided. Many thanks
375 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
379 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
376 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
380 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
377 rolling. This seemingly small issue had tripped a number of users
381 rolling. This seemingly small issue had tripped a number of users
378 when first installing, so I'm glad to see it gone.
382 when first installing, so I'm glad to see it gone.
379
383
380 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
384 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
381
385
382 * IPython/Extensions/numeric_formats.py: fix missing import,
386 * IPython/Extensions/numeric_formats.py: fix missing import,
383 reported by Stephen Walton.
387 reported by Stephen Walton.
384
388
385 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
389 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
386
390
387 * IPython/demo.py: finish demo module, fully documented now.
391 * IPython/demo.py: finish demo module, fully documented now.
388
392
389 * IPython/genutils.py (file_read): simple little utility to read a
393 * IPython/genutils.py (file_read): simple little utility to read a
390 file and ensure it's closed afterwards.
394 file and ensure it's closed afterwards.
391
395
392 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
396 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
393
397
394 * IPython/demo.py (Demo.__init__): added support for individually
398 * IPython/demo.py (Demo.__init__): added support for individually
395 tagging blocks for automatic execution.
399 tagging blocks for automatic execution.
396
400
397 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
401 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
398 syntax-highlighted python sources, requested by John.
402 syntax-highlighted python sources, requested by John.
399
403
400 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
404 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
401
405
402 * IPython/demo.py (Demo.again): fix bug where again() blocks after
406 * IPython/demo.py (Demo.again): fix bug where again() blocks after
403 finishing.
407 finishing.
404
408
405 * IPython/genutils.py (shlex_split): moved from Magic to here,
409 * IPython/genutils.py (shlex_split): moved from Magic to here,
406 where all 2.2 compatibility stuff lives. I needed it for demo.py.
410 where all 2.2 compatibility stuff lives. I needed it for demo.py.
407
411
408 * IPython/demo.py (Demo.__init__): added support for silent
412 * IPython/demo.py (Demo.__init__): added support for silent
409 blocks, improved marks as regexps, docstrings written.
413 blocks, improved marks as regexps, docstrings written.
410 (Demo.__init__): better docstring, added support for sys.argv.
414 (Demo.__init__): better docstring, added support for sys.argv.
411
415
412 * IPython/genutils.py (marquee): little utility used by the demo
416 * IPython/genutils.py (marquee): little utility used by the demo
413 code, handy in general.
417 code, handy in general.
414
418
415 * IPython/demo.py (Demo.__init__): new class for interactive
419 * IPython/demo.py (Demo.__init__): new class for interactive
416 demos. Not documented yet, I just wrote it in a hurry for
420 demos. Not documented yet, I just wrote it in a hurry for
417 scipy'05. Will docstring later.
421 scipy'05. Will docstring later.
418
422
419 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
423 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
420
424
421 * IPython/Shell.py (sigint_handler): Drastic simplification which
425 * IPython/Shell.py (sigint_handler): Drastic simplification which
422 also seems to make Ctrl-C work correctly across threads! This is
426 also seems to make Ctrl-C work correctly across threads! This is
423 so simple, that I can't beleive I'd missed it before. Needs more
427 so simple, that I can't beleive I'd missed it before. Needs more
424 testing, though.
428 testing, though.
425 (KBINT): Never mind, revert changes. I'm sure I'd tried something
429 (KBINT): Never mind, revert changes. I'm sure I'd tried something
426 like this before...
430 like this before...
427
431
428 * IPython/genutils.py (get_home_dir): add protection against
432 * IPython/genutils.py (get_home_dir): add protection against
429 non-dirs in win32 registry.
433 non-dirs in win32 registry.
430
434
431 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
435 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
432 bug where dict was mutated while iterating (pysh crash).
436 bug where dict was mutated while iterating (pysh crash).
433
437
434 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
438 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
435
439
436 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
440 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
437 spurious newlines added by this routine. After a report by
441 spurious newlines added by this routine. After a report by
438 F. Mantegazza.
442 F. Mantegazza.
439
443
440 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
444 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
441
445
442 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
446 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
443 calls. These were a leftover from the GTK 1.x days, and can cause
447 calls. These were a leftover from the GTK 1.x days, and can cause
444 problems in certain cases (after a report by John Hunter).
448 problems in certain cases (after a report by John Hunter).
445
449
446 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
450 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
447 os.getcwd() fails at init time. Thanks to patch from David Remahl
451 os.getcwd() fails at init time. Thanks to patch from David Remahl
448 <chmod007-AT-mac.com>.
452 <chmod007-AT-mac.com>.
449 (InteractiveShell.__init__): prevent certain special magics from
453 (InteractiveShell.__init__): prevent certain special magics from
450 being shadowed by aliases. Closes
454 being shadowed by aliases. Closes
451 http://www.scipy.net/roundup/ipython/issue41.
455 http://www.scipy.net/roundup/ipython/issue41.
452
456
453 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
457 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
454
458
455 * IPython/iplib.py (InteractiveShell.complete): Added new
459 * IPython/iplib.py (InteractiveShell.complete): Added new
456 top-level completion method to expose the completion mechanism
460 top-level completion method to expose the completion mechanism
457 beyond readline-based environments.
461 beyond readline-based environments.
458
462
459 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
463 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
460
464
461 * tools/ipsvnc (svnversion): fix svnversion capture.
465 * tools/ipsvnc (svnversion): fix svnversion capture.
462
466
463 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
467 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
464 attribute to self, which was missing. Before, it was set by a
468 attribute to self, which was missing. Before, it was set by a
465 routine which in certain cases wasn't being called, so the
469 routine which in certain cases wasn't being called, so the
466 instance could end up missing the attribute. This caused a crash.
470 instance could end up missing the attribute. This caused a crash.
467 Closes http://www.scipy.net/roundup/ipython/issue40.
471 Closes http://www.scipy.net/roundup/ipython/issue40.
468
472
469 2005-08-16 Fernando Perez <fperez@colorado.edu>
473 2005-08-16 Fernando Perez <fperez@colorado.edu>
470
474
471 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
475 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
472 contains non-string attribute. Closes
476 contains non-string attribute. Closes
473 http://www.scipy.net/roundup/ipython/issue38.
477 http://www.scipy.net/roundup/ipython/issue38.
474
478
475 2005-08-14 Fernando Perez <fperez@colorado.edu>
479 2005-08-14 Fernando Perez <fperez@colorado.edu>
476
480
477 * tools/ipsvnc: Minor improvements, to add changeset info.
481 * tools/ipsvnc: Minor improvements, to add changeset info.
478
482
479 2005-08-12 Fernando Perez <fperez@colorado.edu>
483 2005-08-12 Fernando Perez <fperez@colorado.edu>
480
484
481 * IPython/iplib.py (runsource): remove self.code_to_run_src
485 * IPython/iplib.py (runsource): remove self.code_to_run_src
482 attribute. I realized this is nothing more than
486 attribute. I realized this is nothing more than
483 '\n'.join(self.buffer), and having the same data in two different
487 '\n'.join(self.buffer), and having the same data in two different
484 places is just asking for synchronization bugs. This may impact
488 places is just asking for synchronization bugs. This may impact
485 people who have custom exception handlers, so I need to warn
489 people who have custom exception handlers, so I need to warn
486 ipython-dev about it (F. Mantegazza may use them).
490 ipython-dev about it (F. Mantegazza may use them).
487
491
488 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
492 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
489
493
490 * IPython/genutils.py: fix 2.2 compatibility (generators)
494 * IPython/genutils.py: fix 2.2 compatibility (generators)
491
495
492 2005-07-18 Fernando Perez <fperez@colorado.edu>
496 2005-07-18 Fernando Perez <fperez@colorado.edu>
493
497
494 * IPython/genutils.py (get_home_dir): fix to help users with
498 * IPython/genutils.py (get_home_dir): fix to help users with
495 invalid $HOME under win32.
499 invalid $HOME under win32.
496
500
497 2005-07-17 Fernando Perez <fperez@colorado.edu>
501 2005-07-17 Fernando Perez <fperez@colorado.edu>
498
502
499 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
503 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
500 some old hacks and clean up a bit other routines; code should be
504 some old hacks and clean up a bit other routines; code should be
501 simpler and a bit faster.
505 simpler and a bit faster.
502
506
503 * IPython/iplib.py (interact): removed some last-resort attempts
507 * IPython/iplib.py (interact): removed some last-resort attempts
504 to survive broken stdout/stderr. That code was only making it
508 to survive broken stdout/stderr. That code was only making it
505 harder to abstract out the i/o (necessary for gui integration),
509 harder to abstract out the i/o (necessary for gui integration),
506 and the crashes it could prevent were extremely rare in practice
510 and the crashes it could prevent were extremely rare in practice
507 (besides being fully user-induced in a pretty violent manner).
511 (besides being fully user-induced in a pretty violent manner).
508
512
509 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
513 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
510 Nothing major yet, but the code is simpler to read; this should
514 Nothing major yet, but the code is simpler to read; this should
511 make it easier to do more serious modifications in the future.
515 make it easier to do more serious modifications in the future.
512
516
513 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
517 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
514 which broke in .15 (thanks to a report by Ville).
518 which broke in .15 (thanks to a report by Ville).
515
519
516 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
520 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
517 be quite correct, I know next to nothing about unicode). This
521 be quite correct, I know next to nothing about unicode). This
518 will allow unicode strings to be used in prompts, amongst other
522 will allow unicode strings to be used in prompts, amongst other
519 cases. It also will prevent ipython from crashing when unicode
523 cases. It also will prevent ipython from crashing when unicode
520 shows up unexpectedly in many places. If ascii encoding fails, we
524 shows up unexpectedly in many places. If ascii encoding fails, we
521 assume utf_8. Currently the encoding is not a user-visible
525 assume utf_8. Currently the encoding is not a user-visible
522 setting, though it could be made so if there is demand for it.
526 setting, though it could be made so if there is demand for it.
523
527
524 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
528 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
525
529
526 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
530 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
527
531
528 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
532 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
529
533
530 * IPython/genutils.py: Add 2.2 compatibility here, so all other
534 * IPython/genutils.py: Add 2.2 compatibility here, so all other
531 code can work transparently for 2.2/2.3.
535 code can work transparently for 2.2/2.3.
532
536
533 2005-07-16 Fernando Perez <fperez@colorado.edu>
537 2005-07-16 Fernando Perez <fperez@colorado.edu>
534
538
535 * IPython/ultraTB.py (ExceptionColors): Make a global variable
539 * IPython/ultraTB.py (ExceptionColors): Make a global variable
536 out of the color scheme table used for coloring exception
540 out of the color scheme table used for coloring exception
537 tracebacks. This allows user code to add new schemes at runtime.
541 tracebacks. This allows user code to add new schemes at runtime.
538 This is a minimally modified version of the patch at
542 This is a minimally modified version of the patch at
539 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
543 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
540 for the contribution.
544 for the contribution.
541
545
542 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
546 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
543 slightly modified version of the patch in
547 slightly modified version of the patch in
544 http://www.scipy.net/roundup/ipython/issue34, which also allows me
548 http://www.scipy.net/roundup/ipython/issue34, which also allows me
545 to remove the previous try/except solution (which was costlier).
549 to remove the previous try/except solution (which was costlier).
546 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
550 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
547
551
548 2005-06-08 Fernando Perez <fperez@colorado.edu>
552 2005-06-08 Fernando Perez <fperez@colorado.edu>
549
553
550 * IPython/iplib.py (write/write_err): Add methods to abstract all
554 * IPython/iplib.py (write/write_err): Add methods to abstract all
551 I/O a bit more.
555 I/O a bit more.
552
556
553 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
557 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
554 warning, reported by Aric Hagberg, fix by JD Hunter.
558 warning, reported by Aric Hagberg, fix by JD Hunter.
555
559
556 2005-06-02 *** Released version 0.6.15
560 2005-06-02 *** Released version 0.6.15
557
561
558 2005-06-01 Fernando Perez <fperez@colorado.edu>
562 2005-06-01 Fernando Perez <fperez@colorado.edu>
559
563
560 * IPython/iplib.py (MagicCompleter.file_matches): Fix
564 * IPython/iplib.py (MagicCompleter.file_matches): Fix
561 tab-completion of filenames within open-quoted strings. Note that
565 tab-completion of filenames within open-quoted strings. Note that
562 this requires that in ~/.ipython/ipythonrc, users change the
566 this requires that in ~/.ipython/ipythonrc, users change the
563 readline delimiters configuration to read:
567 readline delimiters configuration to read:
564
568
565 readline_remove_delims -/~
569 readline_remove_delims -/~
566
570
567
571
568 2005-05-31 *** Released version 0.6.14
572 2005-05-31 *** Released version 0.6.14
569
573
570 2005-05-29 Fernando Perez <fperez@colorado.edu>
574 2005-05-29 Fernando Perez <fperez@colorado.edu>
571
575
572 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
576 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
573 with files not on the filesystem. Reported by Eliyahu Sandler
577 with files not on the filesystem. Reported by Eliyahu Sandler
574 <eli@gondolin.net>
578 <eli@gondolin.net>
575
579
576 2005-05-22 Fernando Perez <fperez@colorado.edu>
580 2005-05-22 Fernando Perez <fperez@colorado.edu>
577
581
578 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
582 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
579 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
583 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
580
584
581 2005-05-19 Fernando Perez <fperez@colorado.edu>
585 2005-05-19 Fernando Perez <fperez@colorado.edu>
582
586
583 * IPython/iplib.py (safe_execfile): close a file which could be
587 * IPython/iplib.py (safe_execfile): close a file which could be
584 left open (causing problems in win32, which locks open files).
588 left open (causing problems in win32, which locks open files).
585 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
589 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
586
590
587 2005-05-18 Fernando Perez <fperez@colorado.edu>
591 2005-05-18 Fernando Perez <fperez@colorado.edu>
588
592
589 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
593 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
590 keyword arguments correctly to safe_execfile().
594 keyword arguments correctly to safe_execfile().
591
595
592 2005-05-13 Fernando Perez <fperez@colorado.edu>
596 2005-05-13 Fernando Perez <fperez@colorado.edu>
593
597
594 * ipython.1: Added info about Qt to manpage, and threads warning
598 * ipython.1: Added info about Qt to manpage, and threads warning
595 to usage page (invoked with --help).
599 to usage page (invoked with --help).
596
600
597 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
601 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
598 new matcher (it goes at the end of the priority list) to do
602 new matcher (it goes at the end of the priority list) to do
599 tab-completion on named function arguments. Submitted by George
603 tab-completion on named function arguments. Submitted by George
600 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
604 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
601 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
605 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
602 for more details.
606 for more details.
603
607
604 * IPython/Magic.py (magic_run): Added new -e flag to ignore
608 * IPython/Magic.py (magic_run): Added new -e flag to ignore
605 SystemExit exceptions in the script being run. Thanks to a report
609 SystemExit exceptions in the script being run. Thanks to a report
606 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
610 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
607 producing very annoying behavior when running unit tests.
611 producing very annoying behavior when running unit tests.
608
612
609 2005-05-12 Fernando Perez <fperez@colorado.edu>
613 2005-05-12 Fernando Perez <fperez@colorado.edu>
610
614
611 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
615 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
612 which I'd broken (again) due to a changed regexp. In the process,
616 which I'd broken (again) due to a changed regexp. In the process,
613 added ';' as an escape to auto-quote the whole line without
617 added ';' as an escape to auto-quote the whole line without
614 splitting its arguments. Thanks to a report by Jerry McRae
618 splitting its arguments. Thanks to a report by Jerry McRae
615 <qrs0xyc02-AT-sneakemail.com>.
619 <qrs0xyc02-AT-sneakemail.com>.
616
620
617 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
621 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
618 possible crashes caused by a TokenError. Reported by Ed Schofield
622 possible crashes caused by a TokenError. Reported by Ed Schofield
619 <schofield-AT-ftw.at>.
623 <schofield-AT-ftw.at>.
620
624
621 2005-05-06 Fernando Perez <fperez@colorado.edu>
625 2005-05-06 Fernando Perez <fperez@colorado.edu>
622
626
623 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
627 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
624
628
625 2005-04-29 Fernando Perez <fperez@colorado.edu>
629 2005-04-29 Fernando Perez <fperez@colorado.edu>
626
630
627 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
631 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
628 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
632 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
629 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
633 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
630 which provides support for Qt interactive usage (similar to the
634 which provides support for Qt interactive usage (similar to the
631 existing one for WX and GTK). This had been often requested.
635 existing one for WX and GTK). This had been often requested.
632
636
633 2005-04-14 *** Released version 0.6.13
637 2005-04-14 *** Released version 0.6.13
634
638
635 2005-04-08 Fernando Perez <fperez@colorado.edu>
639 2005-04-08 Fernando Perez <fperez@colorado.edu>
636
640
637 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
641 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
638 from _ofind, which gets called on almost every input line. Now,
642 from _ofind, which gets called on almost every input line. Now,
639 we only try to get docstrings if they are actually going to be
643 we only try to get docstrings if they are actually going to be
640 used (the overhead of fetching unnecessary docstrings can be
644 used (the overhead of fetching unnecessary docstrings can be
641 noticeable for certain objects, such as Pyro proxies).
645 noticeable for certain objects, such as Pyro proxies).
642
646
643 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
647 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
644 for completers. For some reason I had been passing them the state
648 for completers. For some reason I had been passing them the state
645 variable, which completers never actually need, and was in
649 variable, which completers never actually need, and was in
646 conflict with the rlcompleter API. Custom completers ONLY need to
650 conflict with the rlcompleter API. Custom completers ONLY need to
647 take the text parameter.
651 take the text parameter.
648
652
649 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
653 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
650 work correctly in pysh. I've also moved all the logic which used
654 work correctly in pysh. I've also moved all the logic which used
651 to be in pysh.py here, which will prevent problems with future
655 to be in pysh.py here, which will prevent problems with future
652 upgrades. However, this time I must warn users to update their
656 upgrades. However, this time I must warn users to update their
653 pysh profile to include the line
657 pysh profile to include the line
654
658
655 import_all IPython.Extensions.InterpreterExec
659 import_all IPython.Extensions.InterpreterExec
656
660
657 because otherwise things won't work for them. They MUST also
661 because otherwise things won't work for them. They MUST also
658 delete pysh.py and the line
662 delete pysh.py and the line
659
663
660 execfile pysh.py
664 execfile pysh.py
661
665
662 from their ipythonrc-pysh.
666 from their ipythonrc-pysh.
663
667
664 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
668 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
665 robust in the face of objects whose dir() returns non-strings
669 robust in the face of objects whose dir() returns non-strings
666 (which it shouldn't, but some broken libs like ITK do). Thanks to
670 (which it shouldn't, but some broken libs like ITK do). Thanks to
667 a patch by John Hunter (implemented differently, though). Also
671 a patch by John Hunter (implemented differently, though). Also
668 minor improvements by using .extend instead of + on lists.
672 minor improvements by using .extend instead of + on lists.
669
673
670 * pysh.py:
674 * pysh.py:
671
675
672 2005-04-06 Fernando Perez <fperez@colorado.edu>
676 2005-04-06 Fernando Perez <fperez@colorado.edu>
673
677
674 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
678 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
675 by default, so that all users benefit from it. Those who don't
679 by default, so that all users benefit from it. Those who don't
676 want it can still turn it off.
680 want it can still turn it off.
677
681
678 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
682 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
679 config file, I'd forgotten about this, so users were getting it
683 config file, I'd forgotten about this, so users were getting it
680 off by default.
684 off by default.
681
685
682 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
686 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
683 consistency. Now magics can be called in multiline statements,
687 consistency. Now magics can be called in multiline statements,
684 and python variables can be expanded in magic calls via $var.
688 and python variables can be expanded in magic calls via $var.
685 This makes the magic system behave just like aliases or !system
689 This makes the magic system behave just like aliases or !system
686 calls.
690 calls.
687
691
688 2005-03-28 Fernando Perez <fperez@colorado.edu>
692 2005-03-28 Fernando Perez <fperez@colorado.edu>
689
693
690 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
694 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
691 expensive string additions for building command. Add support for
695 expensive string additions for building command. Add support for
692 trailing ';' when autocall is used.
696 trailing ';' when autocall is used.
693
697
694 2005-03-26 Fernando Perez <fperez@colorado.edu>
698 2005-03-26 Fernando Perez <fperez@colorado.edu>
695
699
696 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
700 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
697 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
701 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
698 ipython.el robust against prompts with any number of spaces
702 ipython.el robust against prompts with any number of spaces
699 (including 0) after the ':' character.
703 (including 0) after the ':' character.
700
704
701 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
705 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
702 continuation prompt, which misled users to think the line was
706 continuation prompt, which misled users to think the line was
703 already indented. Closes debian Bug#300847, reported to me by
707 already indented. Closes debian Bug#300847, reported to me by
704 Norbert Tretkowski <tretkowski-AT-inittab.de>.
708 Norbert Tretkowski <tretkowski-AT-inittab.de>.
705
709
706 2005-03-23 Fernando Perez <fperez@colorado.edu>
710 2005-03-23 Fernando Perez <fperez@colorado.edu>
707
711
708 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
712 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
709 properly aligned if they have embedded newlines.
713 properly aligned if they have embedded newlines.
710
714
711 * IPython/iplib.py (runlines): Add a public method to expose
715 * IPython/iplib.py (runlines): Add a public method to expose
712 IPython's code execution machinery, so that users can run strings
716 IPython's code execution machinery, so that users can run strings
713 as if they had been typed at the prompt interactively.
717 as if they had been typed at the prompt interactively.
714 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
718 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
715 methods which can call the system shell, but with python variable
719 methods which can call the system shell, but with python variable
716 expansion. The three such methods are: __IPYTHON__.system,
720 expansion. The three such methods are: __IPYTHON__.system,
717 .getoutput and .getoutputerror. These need to be documented in a
721 .getoutput and .getoutputerror. These need to be documented in a
718 'public API' section (to be written) of the manual.
722 'public API' section (to be written) of the manual.
719
723
720 2005-03-20 Fernando Perez <fperez@colorado.edu>
724 2005-03-20 Fernando Perez <fperez@colorado.edu>
721
725
722 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
726 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
723 for custom exception handling. This is quite powerful, and it
727 for custom exception handling. This is quite powerful, and it
724 allows for user-installable exception handlers which can trap
728 allows for user-installable exception handlers which can trap
725 custom exceptions at runtime and treat them separately from
729 custom exceptions at runtime and treat them separately from
726 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
730 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
727 Mantegazza <mantegazza-AT-ill.fr>.
731 Mantegazza <mantegazza-AT-ill.fr>.
728 (InteractiveShell.set_custom_completer): public API function to
732 (InteractiveShell.set_custom_completer): public API function to
729 add new completers at runtime.
733 add new completers at runtime.
730
734
731 2005-03-19 Fernando Perez <fperez@colorado.edu>
735 2005-03-19 Fernando Perez <fperez@colorado.edu>
732
736
733 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
737 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
734 allow objects which provide their docstrings via non-standard
738 allow objects which provide their docstrings via non-standard
735 mechanisms (like Pyro proxies) to still be inspected by ipython's
739 mechanisms (like Pyro proxies) to still be inspected by ipython's
736 ? system.
740 ? system.
737
741
738 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
742 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
739 automatic capture system. I tried quite hard to make it work
743 automatic capture system. I tried quite hard to make it work
740 reliably, and simply failed. I tried many combinations with the
744 reliably, and simply failed. I tried many combinations with the
741 subprocess module, but eventually nothing worked in all needed
745 subprocess module, but eventually nothing worked in all needed
742 cases (not blocking stdin for the child, duplicating stdout
746 cases (not blocking stdin for the child, duplicating stdout
743 without blocking, etc). The new %sc/%sx still do capture to these
747 without blocking, etc). The new %sc/%sx still do capture to these
744 magical list/string objects which make shell use much more
748 magical list/string objects which make shell use much more
745 conveninent, so not all is lost.
749 conveninent, so not all is lost.
746
750
747 XXX - FIX MANUAL for the change above!
751 XXX - FIX MANUAL for the change above!
748
752
749 (runsource): I copied code.py's runsource() into ipython to modify
753 (runsource): I copied code.py's runsource() into ipython to modify
750 it a bit. Now the code object and source to be executed are
754 it a bit. Now the code object and source to be executed are
751 stored in ipython. This makes this info accessible to third-party
755 stored in ipython. This makes this info accessible to third-party
752 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
756 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
753 Mantegazza <mantegazza-AT-ill.fr>.
757 Mantegazza <mantegazza-AT-ill.fr>.
754
758
755 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
759 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
756 history-search via readline (like C-p/C-n). I'd wanted this for a
760 history-search via readline (like C-p/C-n). I'd wanted this for a
757 long time, but only recently found out how to do it. For users
761 long time, but only recently found out how to do it. For users
758 who already have their ipythonrc files made and want this, just
762 who already have their ipythonrc files made and want this, just
759 add:
763 add:
760
764
761 readline_parse_and_bind "\e[A": history-search-backward
765 readline_parse_and_bind "\e[A": history-search-backward
762 readline_parse_and_bind "\e[B": history-search-forward
766 readline_parse_and_bind "\e[B": history-search-forward
763
767
764 2005-03-18 Fernando Perez <fperez@colorado.edu>
768 2005-03-18 Fernando Perez <fperez@colorado.edu>
765
769
766 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
770 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
767 LSString and SList classes which allow transparent conversions
771 LSString and SList classes which allow transparent conversions
768 between list mode and whitespace-separated string.
772 between list mode and whitespace-separated string.
769 (magic_r): Fix recursion problem in %r.
773 (magic_r): Fix recursion problem in %r.
770
774
771 * IPython/genutils.py (LSString): New class to be used for
775 * IPython/genutils.py (LSString): New class to be used for
772 automatic storage of the results of all alias/system calls in _o
776 automatic storage of the results of all alias/system calls in _o
773 and _e (stdout/err). These provide a .l/.list attribute which
777 and _e (stdout/err). These provide a .l/.list attribute which
774 does automatic splitting on newlines. This means that for most
778 does automatic splitting on newlines. This means that for most
775 uses, you'll never need to do capturing of output with %sc/%sx
779 uses, you'll never need to do capturing of output with %sc/%sx
776 anymore, since ipython keeps this always done for you. Note that
780 anymore, since ipython keeps this always done for you. Note that
777 only the LAST results are stored, the _o/e variables are
781 only the LAST results are stored, the _o/e variables are
778 overwritten on each call. If you need to save their contents
782 overwritten on each call. If you need to save their contents
779 further, simply bind them to any other name.
783 further, simply bind them to any other name.
780
784
781 2005-03-17 Fernando Perez <fperez@colorado.edu>
785 2005-03-17 Fernando Perez <fperez@colorado.edu>
782
786
783 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
787 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
784 prompt namespace handling.
788 prompt namespace handling.
785
789
786 2005-03-16 Fernando Perez <fperez@colorado.edu>
790 2005-03-16 Fernando Perez <fperez@colorado.edu>
787
791
788 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
792 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
789 classic prompts to be '>>> ' (final space was missing, and it
793 classic prompts to be '>>> ' (final space was missing, and it
790 trips the emacs python mode).
794 trips the emacs python mode).
791 (BasePrompt.__str__): Added safe support for dynamic prompt
795 (BasePrompt.__str__): Added safe support for dynamic prompt
792 strings. Now you can set your prompt string to be '$x', and the
796 strings. Now you can set your prompt string to be '$x', and the
793 value of x will be printed from your interactive namespace. The
797 value of x will be printed from your interactive namespace. The
794 interpolation syntax includes the full Itpl support, so
798 interpolation syntax includes the full Itpl support, so
795 ${foo()+x+bar()} is a valid prompt string now, and the function
799 ${foo()+x+bar()} is a valid prompt string now, and the function
796 calls will be made at runtime.
800 calls will be made at runtime.
797
801
798 2005-03-15 Fernando Perez <fperez@colorado.edu>
802 2005-03-15 Fernando Perez <fperez@colorado.edu>
799
803
800 * IPython/Magic.py (magic_history): renamed %hist to %history, to
804 * IPython/Magic.py (magic_history): renamed %hist to %history, to
801 avoid name clashes in pylab. %hist still works, it just forwards
805 avoid name clashes in pylab. %hist still works, it just forwards
802 the call to %history.
806 the call to %history.
803
807
804 2005-03-02 *** Released version 0.6.12
808 2005-03-02 *** Released version 0.6.12
805
809
806 2005-03-02 Fernando Perez <fperez@colorado.edu>
810 2005-03-02 Fernando Perez <fperez@colorado.edu>
807
811
808 * IPython/iplib.py (handle_magic): log magic calls properly as
812 * IPython/iplib.py (handle_magic): log magic calls properly as
809 ipmagic() function calls.
813 ipmagic() function calls.
810
814
811 * IPython/Magic.py (magic_time): Improved %time to support
815 * IPython/Magic.py (magic_time): Improved %time to support
812 statements and provide wall-clock as well as CPU time.
816 statements and provide wall-clock as well as CPU time.
813
817
814 2005-02-27 Fernando Perez <fperez@colorado.edu>
818 2005-02-27 Fernando Perez <fperez@colorado.edu>
815
819
816 * IPython/hooks.py: New hooks module, to expose user-modifiable
820 * IPython/hooks.py: New hooks module, to expose user-modifiable
817 IPython functionality in a clean manner. For now only the editor
821 IPython functionality in a clean manner. For now only the editor
818 hook is actually written, and other thigns which I intend to turn
822 hook is actually written, and other thigns which I intend to turn
819 into proper hooks aren't yet there. The display and prefilter
823 into proper hooks aren't yet there. The display and prefilter
820 stuff, for example, should be hooks. But at least now the
824 stuff, for example, should be hooks. But at least now the
821 framework is in place, and the rest can be moved here with more
825 framework is in place, and the rest can be moved here with more
822 time later. IPython had had a .hooks variable for a long time for
826 time later. IPython had had a .hooks variable for a long time for
823 this purpose, but I'd never actually used it for anything.
827 this purpose, but I'd never actually used it for anything.
824
828
825 2005-02-26 Fernando Perez <fperez@colorado.edu>
829 2005-02-26 Fernando Perez <fperez@colorado.edu>
826
830
827 * IPython/ipmaker.py (make_IPython): make the default ipython
831 * IPython/ipmaker.py (make_IPython): make the default ipython
828 directory be called _ipython under win32, to follow more the
832 directory be called _ipython under win32, to follow more the
829 naming peculiarities of that platform (where buggy software like
833 naming peculiarities of that platform (where buggy software like
830 Visual Sourcesafe breaks with .named directories). Reported by
834 Visual Sourcesafe breaks with .named directories). Reported by
831 Ville Vainio.
835 Ville Vainio.
832
836
833 2005-02-23 Fernando Perez <fperez@colorado.edu>
837 2005-02-23 Fernando Perez <fperez@colorado.edu>
834
838
835 * IPython/iplib.py (InteractiveShell.__init__): removed a few
839 * IPython/iplib.py (InteractiveShell.__init__): removed a few
836 auto_aliases for win32 which were causing problems. Users can
840 auto_aliases for win32 which were causing problems. Users can
837 define the ones they personally like.
841 define the ones they personally like.
838
842
839 2005-02-21 Fernando Perez <fperez@colorado.edu>
843 2005-02-21 Fernando Perez <fperez@colorado.edu>
840
844
841 * IPython/Magic.py (magic_time): new magic to time execution of
845 * IPython/Magic.py (magic_time): new magic to time execution of
842 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
846 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
843
847
844 2005-02-19 Fernando Perez <fperez@colorado.edu>
848 2005-02-19 Fernando Perez <fperez@colorado.edu>
845
849
846 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
850 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
847 into keys (for prompts, for example).
851 into keys (for prompts, for example).
848
852
849 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
853 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
850 prompts in case users want them. This introduces a small behavior
854 prompts in case users want them. This introduces a small behavior
851 change: ipython does not automatically add a space to all prompts
855 change: ipython does not automatically add a space to all prompts
852 anymore. To get the old prompts with a space, users should add it
856 anymore. To get the old prompts with a space, users should add it
853 manually to their ipythonrc file, so for example prompt_in1 should
857 manually to their ipythonrc file, so for example prompt_in1 should
854 now read 'In [\#]: ' instead of 'In [\#]:'.
858 now read 'In [\#]: ' instead of 'In [\#]:'.
855 (BasePrompt.__init__): New option prompts_pad_left (only in rc
859 (BasePrompt.__init__): New option prompts_pad_left (only in rc
856 file) to control left-padding of secondary prompts.
860 file) to control left-padding of secondary prompts.
857
861
858 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
862 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
859 the profiler can't be imported. Fix for Debian, which removed
863 the profiler can't be imported. Fix for Debian, which removed
860 profile.py because of License issues. I applied a slightly
864 profile.py because of License issues. I applied a slightly
861 modified version of the original Debian patch at
865 modified version of the original Debian patch at
862 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
866 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
863
867
864 2005-02-17 Fernando Perez <fperez@colorado.edu>
868 2005-02-17 Fernando Perez <fperez@colorado.edu>
865
869
866 * IPython/genutils.py (native_line_ends): Fix bug which would
870 * IPython/genutils.py (native_line_ends): Fix bug which would
867 cause improper line-ends under win32 b/c I was not opening files
871 cause improper line-ends under win32 b/c I was not opening files
868 in binary mode. Bug report and fix thanks to Ville.
872 in binary mode. Bug report and fix thanks to Ville.
869
873
870 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
874 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
871 trying to catch spurious foo[1] autocalls. My fix actually broke
875 trying to catch spurious foo[1] autocalls. My fix actually broke
872 ',/' autoquote/call with explicit escape (bad regexp).
876 ',/' autoquote/call with explicit escape (bad regexp).
873
877
874 2005-02-15 *** Released version 0.6.11
878 2005-02-15 *** Released version 0.6.11
875
879
876 2005-02-14 Fernando Perez <fperez@colorado.edu>
880 2005-02-14 Fernando Perez <fperez@colorado.edu>
877
881
878 * IPython/background_jobs.py: New background job management
882 * IPython/background_jobs.py: New background job management
879 subsystem. This is implemented via a new set of classes, and
883 subsystem. This is implemented via a new set of classes, and
880 IPython now provides a builtin 'jobs' object for background job
884 IPython now provides a builtin 'jobs' object for background job
881 execution. A convenience %bg magic serves as a lightweight
885 execution. A convenience %bg magic serves as a lightweight
882 frontend for starting the more common type of calls. This was
886 frontend for starting the more common type of calls. This was
883 inspired by discussions with B. Granger and the BackgroundCommand
887 inspired by discussions with B. Granger and the BackgroundCommand
884 class described in the book Python Scripting for Computational
888 class described in the book Python Scripting for Computational
885 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
889 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
886 (although ultimately no code from this text was used, as IPython's
890 (although ultimately no code from this text was used, as IPython's
887 system is a separate implementation).
891 system is a separate implementation).
888
892
889 * IPython/iplib.py (MagicCompleter.python_matches): add new option
893 * IPython/iplib.py (MagicCompleter.python_matches): add new option
890 to control the completion of single/double underscore names
894 to control the completion of single/double underscore names
891 separately. As documented in the example ipytonrc file, the
895 separately. As documented in the example ipytonrc file, the
892 readline_omit__names variable can now be set to 2, to omit even
896 readline_omit__names variable can now be set to 2, to omit even
893 single underscore names. Thanks to a patch by Brian Wong
897 single underscore names. Thanks to a patch by Brian Wong
894 <BrianWong-AT-AirgoNetworks.Com>.
898 <BrianWong-AT-AirgoNetworks.Com>.
895 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
899 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
896 be autocalled as foo([1]) if foo were callable. A problem for
900 be autocalled as foo([1]) if foo were callable. A problem for
897 things which are both callable and implement __getitem__.
901 things which are both callable and implement __getitem__.
898 (init_readline): Fix autoindentation for win32. Thanks to a patch
902 (init_readline): Fix autoindentation for win32. Thanks to a patch
899 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
903 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
900
904
901 2005-02-12 Fernando Perez <fperez@colorado.edu>
905 2005-02-12 Fernando Perez <fperez@colorado.edu>
902
906
903 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
907 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
904 which I had written long ago to sort out user error messages which
908 which I had written long ago to sort out user error messages which
905 may occur during startup. This seemed like a good idea initially,
909 may occur during startup. This seemed like a good idea initially,
906 but it has proven a disaster in retrospect. I don't want to
910 but it has proven a disaster in retrospect. I don't want to
907 change much code for now, so my fix is to set the internal 'debug'
911 change much code for now, so my fix is to set the internal 'debug'
908 flag to true everywhere, whose only job was precisely to control
912 flag to true everywhere, whose only job was precisely to control
909 this subsystem. This closes issue 28 (as well as avoiding all
913 this subsystem. This closes issue 28 (as well as avoiding all
910 sorts of strange hangups which occur from time to time).
914 sorts of strange hangups which occur from time to time).
911
915
912 2005-02-07 Fernando Perez <fperez@colorado.edu>
916 2005-02-07 Fernando Perez <fperez@colorado.edu>
913
917
914 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
918 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
915 previous call produced a syntax error.
919 previous call produced a syntax error.
916
920
917 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
921 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
918 classes without constructor.
922 classes without constructor.
919
923
920 2005-02-06 Fernando Perez <fperez@colorado.edu>
924 2005-02-06 Fernando Perez <fperez@colorado.edu>
921
925
922 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
926 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
923 completions with the results of each matcher, so we return results
927 completions with the results of each matcher, so we return results
924 to the user from all namespaces. This breaks with ipython
928 to the user from all namespaces. This breaks with ipython
925 tradition, but I think it's a nicer behavior. Now you get all
929 tradition, but I think it's a nicer behavior. Now you get all
926 possible completions listed, from all possible namespaces (python,
930 possible completions listed, from all possible namespaces (python,
927 filesystem, magics...) After a request by John Hunter
931 filesystem, magics...) After a request by John Hunter
928 <jdhunter-AT-nitace.bsd.uchicago.edu>.
932 <jdhunter-AT-nitace.bsd.uchicago.edu>.
929
933
930 2005-02-05 Fernando Perez <fperez@colorado.edu>
934 2005-02-05 Fernando Perez <fperez@colorado.edu>
931
935
932 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
936 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
933 the call had quote characters in it (the quotes were stripped).
937 the call had quote characters in it (the quotes were stripped).
934
938
935 2005-01-31 Fernando Perez <fperez@colorado.edu>
939 2005-01-31 Fernando Perez <fperez@colorado.edu>
936
940
937 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
941 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
938 Itpl.itpl() to make the code more robust against psyco
942 Itpl.itpl() to make the code more robust against psyco
939 optimizations.
943 optimizations.
940
944
941 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
945 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
942 of causing an exception. Quicker, cleaner.
946 of causing an exception. Quicker, cleaner.
943
947
944 2005-01-28 Fernando Perez <fperez@colorado.edu>
948 2005-01-28 Fernando Perez <fperez@colorado.edu>
945
949
946 * scripts/ipython_win_post_install.py (install): hardcode
950 * scripts/ipython_win_post_install.py (install): hardcode
947 sys.prefix+'python.exe' as the executable path. It turns out that
951 sys.prefix+'python.exe' as the executable path. It turns out that
948 during the post-installation run, sys.executable resolves to the
952 during the post-installation run, sys.executable resolves to the
949 name of the binary installer! I should report this as a distutils
953 name of the binary installer! I should report this as a distutils
950 bug, I think. I updated the .10 release with this tiny fix, to
954 bug, I think. I updated the .10 release with this tiny fix, to
951 avoid annoying the lists further.
955 avoid annoying the lists further.
952
956
953 2005-01-27 *** Released version 0.6.10
957 2005-01-27 *** Released version 0.6.10
954
958
955 2005-01-27 Fernando Perez <fperez@colorado.edu>
959 2005-01-27 Fernando Perez <fperez@colorado.edu>
956
960
957 * IPython/numutils.py (norm): Added 'inf' as optional name for
961 * IPython/numutils.py (norm): Added 'inf' as optional name for
958 L-infinity norm, included references to mathworld.com for vector
962 L-infinity norm, included references to mathworld.com for vector
959 norm definitions.
963 norm definitions.
960 (amin/amax): added amin/amax for array min/max. Similar to what
964 (amin/amax): added amin/amax for array min/max. Similar to what
961 pylab ships with after the recent reorganization of names.
965 pylab ships with after the recent reorganization of names.
962 (spike/spike_odd): removed deprecated spike/spike_odd functions.
966 (spike/spike_odd): removed deprecated spike/spike_odd functions.
963
967
964 * ipython.el: committed Alex's recent fixes and improvements.
968 * ipython.el: committed Alex's recent fixes and improvements.
965 Tested with python-mode from CVS, and it looks excellent. Since
969 Tested with python-mode from CVS, and it looks excellent. Since
966 python-mode hasn't released anything in a while, I'm temporarily
970 python-mode hasn't released anything in a while, I'm temporarily
967 putting a copy of today's CVS (v 4.70) of python-mode in:
971 putting a copy of today's CVS (v 4.70) of python-mode in:
968 http://ipython.scipy.org/tmp/python-mode.el
972 http://ipython.scipy.org/tmp/python-mode.el
969
973
970 * scripts/ipython_win_post_install.py (install): Win32 fix to use
974 * scripts/ipython_win_post_install.py (install): Win32 fix to use
971 sys.executable for the executable name, instead of assuming it's
975 sys.executable for the executable name, instead of assuming it's
972 called 'python.exe' (the post-installer would have produced broken
976 called 'python.exe' (the post-installer would have produced broken
973 setups on systems with a differently named python binary).
977 setups on systems with a differently named python binary).
974
978
975 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
979 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
976 references to os.linesep, to make the code more
980 references to os.linesep, to make the code more
977 platform-independent. This is also part of the win32 coloring
981 platform-independent. This is also part of the win32 coloring
978 fixes.
982 fixes.
979
983
980 * IPython/genutils.py (page_dumb): Remove attempts to chop long
984 * IPython/genutils.py (page_dumb): Remove attempts to chop long
981 lines, which actually cause coloring bugs because the length of
985 lines, which actually cause coloring bugs because the length of
982 the line is very difficult to correctly compute with embedded
986 the line is very difficult to correctly compute with embedded
983 escapes. This was the source of all the coloring problems under
987 escapes. This was the source of all the coloring problems under
984 Win32. I think that _finally_, Win32 users have a properly
988 Win32. I think that _finally_, Win32 users have a properly
985 working ipython in all respects. This would never have happened
989 working ipython in all respects. This would never have happened
986 if not for Gary Bishop and Viktor Ransmayr's great help and work.
990 if not for Gary Bishop and Viktor Ransmayr's great help and work.
987
991
988 2005-01-26 *** Released version 0.6.9
992 2005-01-26 *** Released version 0.6.9
989
993
990 2005-01-25 Fernando Perez <fperez@colorado.edu>
994 2005-01-25 Fernando Perez <fperez@colorado.edu>
991
995
992 * setup.py: finally, we have a true Windows installer, thanks to
996 * setup.py: finally, we have a true Windows installer, thanks to
993 the excellent work of Viktor Ransmayr
997 the excellent work of Viktor Ransmayr
994 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
998 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
995 Windows users. The setup routine is quite a bit cleaner thanks to
999 Windows users. The setup routine is quite a bit cleaner thanks to
996 this, and the post-install script uses the proper functions to
1000 this, and the post-install script uses the proper functions to
997 allow a clean de-installation using the standard Windows Control
1001 allow a clean de-installation using the standard Windows Control
998 Panel.
1002 Panel.
999
1003
1000 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1004 * IPython/genutils.py (get_home_dir): changed to use the $HOME
1001 environment variable under all OSes (including win32) if
1005 environment variable under all OSes (including win32) if
1002 available. This will give consistency to win32 users who have set
1006 available. This will give consistency to win32 users who have set
1003 this variable for any reason. If os.environ['HOME'] fails, the
1007 this variable for any reason. If os.environ['HOME'] fails, the
1004 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1008 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
1005
1009
1006 2005-01-24 Fernando Perez <fperez@colorado.edu>
1010 2005-01-24 Fernando Perez <fperez@colorado.edu>
1007
1011
1008 * IPython/numutils.py (empty_like): add empty_like(), similar to
1012 * IPython/numutils.py (empty_like): add empty_like(), similar to
1009 zeros_like() but taking advantage of the new empty() Numeric routine.
1013 zeros_like() but taking advantage of the new empty() Numeric routine.
1010
1014
1011 2005-01-23 *** Released version 0.6.8
1015 2005-01-23 *** Released version 0.6.8
1012
1016
1013 2005-01-22 Fernando Perez <fperez@colorado.edu>
1017 2005-01-22 Fernando Perez <fperez@colorado.edu>
1014
1018
1015 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1019 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
1016 automatic show() calls. After discussing things with JDH, it
1020 automatic show() calls. After discussing things with JDH, it
1017 turns out there are too many corner cases where this can go wrong.
1021 turns out there are too many corner cases where this can go wrong.
1018 It's best not to try to be 'too smart', and simply have ipython
1022 It's best not to try to be 'too smart', and simply have ipython
1019 reproduce as much as possible the default behavior of a normal
1023 reproduce as much as possible the default behavior of a normal
1020 python shell.
1024 python shell.
1021
1025
1022 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1026 * IPython/iplib.py (InteractiveShell.__init__): Modified the
1023 line-splitting regexp and _prefilter() to avoid calling getattr()
1027 line-splitting regexp and _prefilter() to avoid calling getattr()
1024 on assignments. This closes
1028 on assignments. This closes
1025 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1029 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
1026 readline uses getattr(), so a simple <TAB> keypress is still
1030 readline uses getattr(), so a simple <TAB> keypress is still
1027 enough to trigger getattr() calls on an object.
1031 enough to trigger getattr() calls on an object.
1028
1032
1029 2005-01-21 Fernando Perez <fperez@colorado.edu>
1033 2005-01-21 Fernando Perez <fperez@colorado.edu>
1030
1034
1031 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1035 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
1032 docstring under pylab so it doesn't mask the original.
1036 docstring under pylab so it doesn't mask the original.
1033
1037
1034 2005-01-21 *** Released version 0.6.7
1038 2005-01-21 *** Released version 0.6.7
1035
1039
1036 2005-01-21 Fernando Perez <fperez@colorado.edu>
1040 2005-01-21 Fernando Perez <fperez@colorado.edu>
1037
1041
1038 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1042 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
1039 signal handling for win32 users in multithreaded mode.
1043 signal handling for win32 users in multithreaded mode.
1040
1044
1041 2005-01-17 Fernando Perez <fperez@colorado.edu>
1045 2005-01-17 Fernando Perez <fperez@colorado.edu>
1042
1046
1043 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1047 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1044 instances with no __init__. After a crash report by Norbert Nemec
1048 instances with no __init__. After a crash report by Norbert Nemec
1045 <Norbert-AT-nemec-online.de>.
1049 <Norbert-AT-nemec-online.de>.
1046
1050
1047 2005-01-14 Fernando Perez <fperez@colorado.edu>
1051 2005-01-14 Fernando Perez <fperez@colorado.edu>
1048
1052
1049 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1053 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
1050 names for verbose exceptions, when multiple dotted names and the
1054 names for verbose exceptions, when multiple dotted names and the
1051 'parent' object were present on the same line.
1055 'parent' object were present on the same line.
1052
1056
1053 2005-01-11 Fernando Perez <fperez@colorado.edu>
1057 2005-01-11 Fernando Perez <fperez@colorado.edu>
1054
1058
1055 * IPython/genutils.py (flag_calls): new utility to trap and flag
1059 * IPython/genutils.py (flag_calls): new utility to trap and flag
1056 calls in functions. I need it to clean up matplotlib support.
1060 calls in functions. I need it to clean up matplotlib support.
1057 Also removed some deprecated code in genutils.
1061 Also removed some deprecated code in genutils.
1058
1062
1059 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1063 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
1060 that matplotlib scripts called with %run, which don't call show()
1064 that matplotlib scripts called with %run, which don't call show()
1061 themselves, still have their plotting windows open.
1065 themselves, still have their plotting windows open.
1062
1066
1063 2005-01-05 Fernando Perez <fperez@colorado.edu>
1067 2005-01-05 Fernando Perez <fperez@colorado.edu>
1064
1068
1065 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1069 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
1066 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1070 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
1067
1071
1068 2004-12-19 Fernando Perez <fperez@colorado.edu>
1072 2004-12-19 Fernando Perez <fperez@colorado.edu>
1069
1073
1070 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1074 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
1071 parent_runcode, which was an eyesore. The same result can be
1075 parent_runcode, which was an eyesore. The same result can be
1072 obtained with Python's regular superclass mechanisms.
1076 obtained with Python's regular superclass mechanisms.
1073
1077
1074 2004-12-17 Fernando Perez <fperez@colorado.edu>
1078 2004-12-17 Fernando Perez <fperez@colorado.edu>
1075
1079
1076 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1080 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
1077 reported by Prabhu.
1081 reported by Prabhu.
1078 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1082 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
1079 sys.stderr) instead of explicitly calling sys.stderr. This helps
1083 sys.stderr) instead of explicitly calling sys.stderr. This helps
1080 maintain our I/O abstractions clean, for future GUI embeddings.
1084 maintain our I/O abstractions clean, for future GUI embeddings.
1081
1085
1082 * IPython/genutils.py (info): added new utility for sys.stderr
1086 * IPython/genutils.py (info): added new utility for sys.stderr
1083 unified info message handling (thin wrapper around warn()).
1087 unified info message handling (thin wrapper around warn()).
1084
1088
1085 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1089 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
1086 composite (dotted) names on verbose exceptions.
1090 composite (dotted) names on verbose exceptions.
1087 (VerboseTB.nullrepr): harden against another kind of errors which
1091 (VerboseTB.nullrepr): harden against another kind of errors which
1088 Python's inspect module can trigger, and which were crashing
1092 Python's inspect module can trigger, and which were crashing
1089 IPython. Thanks to a report by Marco Lombardi
1093 IPython. Thanks to a report by Marco Lombardi
1090 <mlombard-AT-ma010192.hq.eso.org>.
1094 <mlombard-AT-ma010192.hq.eso.org>.
1091
1095
1092 2004-12-13 *** Released version 0.6.6
1096 2004-12-13 *** Released version 0.6.6
1093
1097
1094 2004-12-12 Fernando Perez <fperez@colorado.edu>
1098 2004-12-12 Fernando Perez <fperez@colorado.edu>
1095
1099
1096 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1100 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
1097 generated by pygtk upon initialization if it was built without
1101 generated by pygtk upon initialization if it was built without
1098 threads (for matplotlib users). After a crash reported by
1102 threads (for matplotlib users). After a crash reported by
1099 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1103 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
1100
1104
1101 * IPython/ipmaker.py (make_IPython): fix small bug in the
1105 * IPython/ipmaker.py (make_IPython): fix small bug in the
1102 import_some parameter for multiple imports.
1106 import_some parameter for multiple imports.
1103
1107
1104 * IPython/iplib.py (ipmagic): simplified the interface of
1108 * IPython/iplib.py (ipmagic): simplified the interface of
1105 ipmagic() to take a single string argument, just as it would be
1109 ipmagic() to take a single string argument, just as it would be
1106 typed at the IPython cmd line.
1110 typed at the IPython cmd line.
1107 (ipalias): Added new ipalias() with an interface identical to
1111 (ipalias): Added new ipalias() with an interface identical to
1108 ipmagic(). This completes exposing a pure python interface to the
1112 ipmagic(). This completes exposing a pure python interface to the
1109 alias and magic system, which can be used in loops or more complex
1113 alias and magic system, which can be used in loops or more complex
1110 code where IPython's automatic line mangling is not active.
1114 code where IPython's automatic line mangling is not active.
1111
1115
1112 * IPython/genutils.py (timing): changed interface of timing to
1116 * IPython/genutils.py (timing): changed interface of timing to
1113 simply run code once, which is the most common case. timings()
1117 simply run code once, which is the most common case. timings()
1114 remains unchanged, for the cases where you want multiple runs.
1118 remains unchanged, for the cases where you want multiple runs.
1115
1119
1116 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1120 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
1117 bug where Python2.2 crashes with exec'ing code which does not end
1121 bug where Python2.2 crashes with exec'ing code which does not end
1118 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1122 in a single newline. Python 2.3 is OK, so I hadn't noticed this
1119 before.
1123 before.
1120
1124
1121 2004-12-10 Fernando Perez <fperez@colorado.edu>
1125 2004-12-10 Fernando Perez <fperez@colorado.edu>
1122
1126
1123 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1127 * IPython/Magic.py (Magic.magic_prun): changed name of option from
1124 -t to -T, to accomodate the new -t flag in %run (the %run and
1128 -t to -T, to accomodate the new -t flag in %run (the %run and
1125 %prun options are kind of intermixed, and it's not easy to change
1129 %prun options are kind of intermixed, and it's not easy to change
1126 this with the limitations of python's getopt).
1130 this with the limitations of python's getopt).
1127
1131
1128 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1132 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
1129 the execution of scripts. It's not as fine-tuned as timeit.py,
1133 the execution of scripts. It's not as fine-tuned as timeit.py,
1130 but it works from inside ipython (and under 2.2, which lacks
1134 but it works from inside ipython (and under 2.2, which lacks
1131 timeit.py). Optionally a number of runs > 1 can be given for
1135 timeit.py). Optionally a number of runs > 1 can be given for
1132 timing very short-running code.
1136 timing very short-running code.
1133
1137
1134 * IPython/genutils.py (uniq_stable): new routine which returns a
1138 * IPython/genutils.py (uniq_stable): new routine which returns a
1135 list of unique elements in any iterable, but in stable order of
1139 list of unique elements in any iterable, but in stable order of
1136 appearance. I needed this for the ultraTB fixes, and it's a handy
1140 appearance. I needed this for the ultraTB fixes, and it's a handy
1137 utility.
1141 utility.
1138
1142
1139 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1143 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
1140 dotted names in Verbose exceptions. This had been broken since
1144 dotted names in Verbose exceptions. This had been broken since
1141 the very start, now x.y will properly be printed in a Verbose
1145 the very start, now x.y will properly be printed in a Verbose
1142 traceback, instead of x being shown and y appearing always as an
1146 traceback, instead of x being shown and y appearing always as an
1143 'undefined global'. Getting this to work was a bit tricky,
1147 'undefined global'. Getting this to work was a bit tricky,
1144 because by default python tokenizers are stateless. Saved by
1148 because by default python tokenizers are stateless. Saved by
1145 python's ability to easily add a bit of state to an arbitrary
1149 python's ability to easily add a bit of state to an arbitrary
1146 function (without needing to build a full-blown callable object).
1150 function (without needing to build a full-blown callable object).
1147
1151
1148 Also big cleanup of this code, which had horrendous runtime
1152 Also big cleanup of this code, which had horrendous runtime
1149 lookups of zillions of attributes for colorization. Moved all
1153 lookups of zillions of attributes for colorization. Moved all
1150 this code into a few templates, which make it cleaner and quicker.
1154 this code into a few templates, which make it cleaner and quicker.
1151
1155
1152 Printout quality was also improved for Verbose exceptions: one
1156 Printout quality was also improved for Verbose exceptions: one
1153 variable per line, and memory addresses are printed (this can be
1157 variable per line, and memory addresses are printed (this can be
1154 quite handy in nasty debugging situations, which is what Verbose
1158 quite handy in nasty debugging situations, which is what Verbose
1155 is for).
1159 is for).
1156
1160
1157 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1161 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
1158 the command line as scripts to be loaded by embedded instances.
1162 the command line as scripts to be loaded by embedded instances.
1159 Doing so has the potential for an infinite recursion if there are
1163 Doing so has the potential for an infinite recursion if there are
1160 exceptions thrown in the process. This fixes a strange crash
1164 exceptions thrown in the process. This fixes a strange crash
1161 reported by Philippe MULLER <muller-AT-irit.fr>.
1165 reported by Philippe MULLER <muller-AT-irit.fr>.
1162
1166
1163 2004-12-09 Fernando Perez <fperez@colorado.edu>
1167 2004-12-09 Fernando Perez <fperez@colorado.edu>
1164
1168
1165 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1169 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
1166 to reflect new names in matplotlib, which now expose the
1170 to reflect new names in matplotlib, which now expose the
1167 matlab-compatible interface via a pylab module instead of the
1171 matlab-compatible interface via a pylab module instead of the
1168 'matlab' name. The new code is backwards compatible, so users of
1172 'matlab' name. The new code is backwards compatible, so users of
1169 all matplotlib versions are OK. Patch by J. Hunter.
1173 all matplotlib versions are OK. Patch by J. Hunter.
1170
1174
1171 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1175 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
1172 of __init__ docstrings for instances (class docstrings are already
1176 of __init__ docstrings for instances (class docstrings are already
1173 automatically printed). Instances with customized docstrings
1177 automatically printed). Instances with customized docstrings
1174 (indep. of the class) are also recognized and all 3 separate
1178 (indep. of the class) are also recognized and all 3 separate
1175 docstrings are printed (instance, class, constructor). After some
1179 docstrings are printed (instance, class, constructor). After some
1176 comments/suggestions by J. Hunter.
1180 comments/suggestions by J. Hunter.
1177
1181
1178 2004-12-05 Fernando Perez <fperez@colorado.edu>
1182 2004-12-05 Fernando Perez <fperez@colorado.edu>
1179
1183
1180 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1184 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
1181 warnings when tab-completion fails and triggers an exception.
1185 warnings when tab-completion fails and triggers an exception.
1182
1186
1183 2004-12-03 Fernando Perez <fperez@colorado.edu>
1187 2004-12-03 Fernando Perez <fperez@colorado.edu>
1184
1188
1185 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1189 * IPython/Magic.py (magic_prun): Fix bug where an exception would
1186 be triggered when using 'run -p'. An incorrect option flag was
1190 be triggered when using 'run -p'. An incorrect option flag was
1187 being set ('d' instead of 'D').
1191 being set ('d' instead of 'D').
1188 (manpage): fix missing escaped \- sign.
1192 (manpage): fix missing escaped \- sign.
1189
1193
1190 2004-11-30 *** Released version 0.6.5
1194 2004-11-30 *** Released version 0.6.5
1191
1195
1192 2004-11-30 Fernando Perez <fperez@colorado.edu>
1196 2004-11-30 Fernando Perez <fperez@colorado.edu>
1193
1197
1194 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1198 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
1195 setting with -d option.
1199 setting with -d option.
1196
1200
1197 * setup.py (docfiles): Fix problem where the doc glob I was using
1201 * setup.py (docfiles): Fix problem where the doc glob I was using
1198 was COMPLETELY BROKEN. It was giving the right files by pure
1202 was COMPLETELY BROKEN. It was giving the right files by pure
1199 accident, but failed once I tried to include ipython.el. Note:
1203 accident, but failed once I tried to include ipython.el. Note:
1200 glob() does NOT allow you to do exclusion on multiple endings!
1204 glob() does NOT allow you to do exclusion on multiple endings!
1201
1205
1202 2004-11-29 Fernando Perez <fperez@colorado.edu>
1206 2004-11-29 Fernando Perez <fperez@colorado.edu>
1203
1207
1204 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1208 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
1205 the manpage as the source. Better formatting & consistency.
1209 the manpage as the source. Better formatting & consistency.
1206
1210
1207 * IPython/Magic.py (magic_run): Added new -d option, to run
1211 * IPython/Magic.py (magic_run): Added new -d option, to run
1208 scripts under the control of the python pdb debugger. Note that
1212 scripts under the control of the python pdb debugger. Note that
1209 this required changing the %prun option -d to -D, to avoid a clash
1213 this required changing the %prun option -d to -D, to avoid a clash
1210 (since %run must pass options to %prun, and getopt is too dumb to
1214 (since %run must pass options to %prun, and getopt is too dumb to
1211 handle options with string values with embedded spaces). Thanks
1215 handle options with string values with embedded spaces). Thanks
1212 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1216 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
1213 (magic_who_ls): added type matching to %who and %whos, so that one
1217 (magic_who_ls): added type matching to %who and %whos, so that one
1214 can filter their output to only include variables of certain
1218 can filter their output to only include variables of certain
1215 types. Another suggestion by Matthew.
1219 types. Another suggestion by Matthew.
1216 (magic_whos): Added memory summaries in kb and Mb for arrays.
1220 (magic_whos): Added memory summaries in kb and Mb for arrays.
1217 (magic_who): Improve formatting (break lines every 9 vars).
1221 (magic_who): Improve formatting (break lines every 9 vars).
1218
1222
1219 2004-11-28 Fernando Perez <fperez@colorado.edu>
1223 2004-11-28 Fernando Perez <fperez@colorado.edu>
1220
1224
1221 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1225 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
1222 cache when empty lines were present.
1226 cache when empty lines were present.
1223
1227
1224 2004-11-24 Fernando Perez <fperez@colorado.edu>
1228 2004-11-24 Fernando Perez <fperez@colorado.edu>
1225
1229
1226 * IPython/usage.py (__doc__): document the re-activated threading
1230 * IPython/usage.py (__doc__): document the re-activated threading
1227 options for WX and GTK.
1231 options for WX and GTK.
1228
1232
1229 2004-11-23 Fernando Perez <fperez@colorado.edu>
1233 2004-11-23 Fernando Perez <fperez@colorado.edu>
1230
1234
1231 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1235 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
1232 the -wthread and -gthread options, along with a new -tk one to try
1236 the -wthread and -gthread options, along with a new -tk one to try
1233 and coordinate Tk threading with wx/gtk. The tk support is very
1237 and coordinate Tk threading with wx/gtk. The tk support is very
1234 platform dependent, since it seems to require Tcl and Tk to be
1238 platform dependent, since it seems to require Tcl and Tk to be
1235 built with threads (Fedora1/2 appears NOT to have it, but in
1239 built with threads (Fedora1/2 appears NOT to have it, but in
1236 Prabhu's Debian boxes it works OK). But even with some Tk
1240 Prabhu's Debian boxes it works OK). But even with some Tk
1237 limitations, this is a great improvement.
1241 limitations, this is a great improvement.
1238
1242
1239 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1243 * IPython/Prompts.py (prompt_specials_color): Added \t for time
1240 info in user prompts. Patch by Prabhu.
1244 info in user prompts. Patch by Prabhu.
1241
1245
1242 2004-11-18 Fernando Perez <fperez@colorado.edu>
1246 2004-11-18 Fernando Perez <fperez@colorado.edu>
1243
1247
1244 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1248 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
1245 EOFErrors and bail, to avoid infinite loops if a non-terminating
1249 EOFErrors and bail, to avoid infinite loops if a non-terminating
1246 file is fed into ipython. Patch submitted in issue 19 by user,
1250 file is fed into ipython. Patch submitted in issue 19 by user,
1247 many thanks.
1251 many thanks.
1248
1252
1249 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1253 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
1250 autoquote/parens in continuation prompts, which can cause lots of
1254 autoquote/parens in continuation prompts, which can cause lots of
1251 problems. Closes roundup issue 20.
1255 problems. Closes roundup issue 20.
1252
1256
1253 2004-11-17 Fernando Perez <fperez@colorado.edu>
1257 2004-11-17 Fernando Perez <fperez@colorado.edu>
1254
1258
1255 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1259 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
1256 reported as debian bug #280505. I'm not sure my local changelog
1260 reported as debian bug #280505. I'm not sure my local changelog
1257 entry has the proper debian format (Jack?).
1261 entry has the proper debian format (Jack?).
1258
1262
1259 2004-11-08 *** Released version 0.6.4
1263 2004-11-08 *** Released version 0.6.4
1260
1264
1261 2004-11-08 Fernando Perez <fperez@colorado.edu>
1265 2004-11-08 Fernando Perez <fperez@colorado.edu>
1262
1266
1263 * IPython/iplib.py (init_readline): Fix exit message for Windows
1267 * IPython/iplib.py (init_readline): Fix exit message for Windows
1264 when readline is active. Thanks to a report by Eric Jones
1268 when readline is active. Thanks to a report by Eric Jones
1265 <eric-AT-enthought.com>.
1269 <eric-AT-enthought.com>.
1266
1270
1267 2004-11-07 Fernando Perez <fperez@colorado.edu>
1271 2004-11-07 Fernando Perez <fperez@colorado.edu>
1268
1272
1269 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1273 * IPython/genutils.py (page): Add a trap for OSError exceptions,
1270 sometimes seen by win2k/cygwin users.
1274 sometimes seen by win2k/cygwin users.
1271
1275
1272 2004-11-06 Fernando Perez <fperez@colorado.edu>
1276 2004-11-06 Fernando Perez <fperez@colorado.edu>
1273
1277
1274 * IPython/iplib.py (interact): Change the handling of %Exit from
1278 * IPython/iplib.py (interact): Change the handling of %Exit from
1275 trying to propagate a SystemExit to an internal ipython flag.
1279 trying to propagate a SystemExit to an internal ipython flag.
1276 This is less elegant than using Python's exception mechanism, but
1280 This is less elegant than using Python's exception mechanism, but
1277 I can't get that to work reliably with threads, so under -pylab
1281 I can't get that to work reliably with threads, so under -pylab
1278 %Exit was hanging IPython. Cross-thread exception handling is
1282 %Exit was hanging IPython. Cross-thread exception handling is
1279 really a bitch. Thaks to a bug report by Stephen Walton
1283 really a bitch. Thaks to a bug report by Stephen Walton
1280 <stephen.walton-AT-csun.edu>.
1284 <stephen.walton-AT-csun.edu>.
1281
1285
1282 2004-11-04 Fernando Perez <fperez@colorado.edu>
1286 2004-11-04 Fernando Perez <fperez@colorado.edu>
1283
1287
1284 * IPython/iplib.py (raw_input_original): store a pointer to the
1288 * IPython/iplib.py (raw_input_original): store a pointer to the
1285 true raw_input to harden against code which can modify it
1289 true raw_input to harden against code which can modify it
1286 (wx.py.PyShell does this and would otherwise crash ipython).
1290 (wx.py.PyShell does this and would otherwise crash ipython).
1287 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1291 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
1288
1292
1289 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1293 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
1290 Ctrl-C problem, which does not mess up the input line.
1294 Ctrl-C problem, which does not mess up the input line.
1291
1295
1292 2004-11-03 Fernando Perez <fperez@colorado.edu>
1296 2004-11-03 Fernando Perez <fperez@colorado.edu>
1293
1297
1294 * IPython/Release.py: Changed licensing to BSD, in all files.
1298 * IPython/Release.py: Changed licensing to BSD, in all files.
1295 (name): lowercase name for tarball/RPM release.
1299 (name): lowercase name for tarball/RPM release.
1296
1300
1297 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1301 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
1298 use throughout ipython.
1302 use throughout ipython.
1299
1303
1300 * IPython/Magic.py (Magic._ofind): Switch to using the new
1304 * IPython/Magic.py (Magic._ofind): Switch to using the new
1301 OInspect.getdoc() function.
1305 OInspect.getdoc() function.
1302
1306
1303 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1307 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
1304 of the line currently being canceled via Ctrl-C. It's extremely
1308 of the line currently being canceled via Ctrl-C. It's extremely
1305 ugly, but I don't know how to do it better (the problem is one of
1309 ugly, but I don't know how to do it better (the problem is one of
1306 handling cross-thread exceptions).
1310 handling cross-thread exceptions).
1307
1311
1308 2004-10-28 Fernando Perez <fperez@colorado.edu>
1312 2004-10-28 Fernando Perez <fperez@colorado.edu>
1309
1313
1310 * IPython/Shell.py (signal_handler): add signal handlers to trap
1314 * IPython/Shell.py (signal_handler): add signal handlers to trap
1311 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1315 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
1312 report by Francesc Alted.
1316 report by Francesc Alted.
1313
1317
1314 2004-10-21 Fernando Perez <fperez@colorado.edu>
1318 2004-10-21 Fernando Perez <fperez@colorado.edu>
1315
1319
1316 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1320 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
1317 to % for pysh syntax extensions.
1321 to % for pysh syntax extensions.
1318
1322
1319 2004-10-09 Fernando Perez <fperez@colorado.edu>
1323 2004-10-09 Fernando Perez <fperez@colorado.edu>
1320
1324
1321 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1325 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
1322 arrays to print a more useful summary, without calling str(arr).
1326 arrays to print a more useful summary, without calling str(arr).
1323 This avoids the problem of extremely lengthy computations which
1327 This avoids the problem of extremely lengthy computations which
1324 occur if arr is large, and appear to the user as a system lockup
1328 occur if arr is large, and appear to the user as a system lockup
1325 with 100% cpu activity. After a suggestion by Kristian Sandberg
1329 with 100% cpu activity. After a suggestion by Kristian Sandberg
1326 <Kristian.Sandberg@colorado.edu>.
1330 <Kristian.Sandberg@colorado.edu>.
1327 (Magic.__init__): fix bug in global magic escapes not being
1331 (Magic.__init__): fix bug in global magic escapes not being
1328 correctly set.
1332 correctly set.
1329
1333
1330 2004-10-08 Fernando Perez <fperez@colorado.edu>
1334 2004-10-08 Fernando Perez <fperez@colorado.edu>
1331
1335
1332 * IPython/Magic.py (__license__): change to absolute imports of
1336 * IPython/Magic.py (__license__): change to absolute imports of
1333 ipython's own internal packages, to start adapting to the absolute
1337 ipython's own internal packages, to start adapting to the absolute
1334 import requirement of PEP-328.
1338 import requirement of PEP-328.
1335
1339
1336 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1340 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
1337 files, and standardize author/license marks through the Release
1341 files, and standardize author/license marks through the Release
1338 module instead of having per/file stuff (except for files with
1342 module instead of having per/file stuff (except for files with
1339 particular licenses, like the MIT/PSF-licensed codes).
1343 particular licenses, like the MIT/PSF-licensed codes).
1340
1344
1341 * IPython/Debugger.py: remove dead code for python 2.1
1345 * IPython/Debugger.py: remove dead code for python 2.1
1342
1346
1343 2004-10-04 Fernando Perez <fperez@colorado.edu>
1347 2004-10-04 Fernando Perez <fperez@colorado.edu>
1344
1348
1345 * IPython/iplib.py (ipmagic): New function for accessing magics
1349 * IPython/iplib.py (ipmagic): New function for accessing magics
1346 via a normal python function call.
1350 via a normal python function call.
1347
1351
1348 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1352 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
1349 from '@' to '%', to accomodate the new @decorator syntax of python
1353 from '@' to '%', to accomodate the new @decorator syntax of python
1350 2.4.
1354 2.4.
1351
1355
1352 2004-09-29 Fernando Perez <fperez@colorado.edu>
1356 2004-09-29 Fernando Perez <fperez@colorado.edu>
1353
1357
1354 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1358 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
1355 matplotlib.use to prevent running scripts which try to switch
1359 matplotlib.use to prevent running scripts which try to switch
1356 interactive backends from within ipython. This will just crash
1360 interactive backends from within ipython. This will just crash
1357 the python interpreter, so we can't allow it (but a detailed error
1361 the python interpreter, so we can't allow it (but a detailed error
1358 is given to the user).
1362 is given to the user).
1359
1363
1360 2004-09-28 Fernando Perez <fperez@colorado.edu>
1364 2004-09-28 Fernando Perez <fperez@colorado.edu>
1361
1365
1362 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1366 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
1363 matplotlib-related fixes so that using @run with non-matplotlib
1367 matplotlib-related fixes so that using @run with non-matplotlib
1364 scripts doesn't pop up spurious plot windows. This requires
1368 scripts doesn't pop up spurious plot windows. This requires
1365 matplotlib >= 0.63, where I had to make some changes as well.
1369 matplotlib >= 0.63, where I had to make some changes as well.
1366
1370
1367 * IPython/ipmaker.py (make_IPython): update version requirement to
1371 * IPython/ipmaker.py (make_IPython): update version requirement to
1368 python 2.2.
1372 python 2.2.
1369
1373
1370 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1374 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
1371 banner arg for embedded customization.
1375 banner arg for embedded customization.
1372
1376
1373 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1377 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
1374 explicit uses of __IP as the IPython's instance name. Now things
1378 explicit uses of __IP as the IPython's instance name. Now things
1375 are properly handled via the shell.name value. The actual code
1379 are properly handled via the shell.name value. The actual code
1376 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1380 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
1377 is much better than before. I'll clean things completely when the
1381 is much better than before. I'll clean things completely when the
1378 magic stuff gets a real overhaul.
1382 magic stuff gets a real overhaul.
1379
1383
1380 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1384 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
1381 minor changes to debian dir.
1385 minor changes to debian dir.
1382
1386
1383 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1387 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
1384 pointer to the shell itself in the interactive namespace even when
1388 pointer to the shell itself in the interactive namespace even when
1385 a user-supplied dict is provided. This is needed for embedding
1389 a user-supplied dict is provided. This is needed for embedding
1386 purposes (found by tests with Michel Sanner).
1390 purposes (found by tests with Michel Sanner).
1387
1391
1388 2004-09-27 Fernando Perez <fperez@colorado.edu>
1392 2004-09-27 Fernando Perez <fperez@colorado.edu>
1389
1393
1390 * IPython/UserConfig/ipythonrc: remove []{} from
1394 * IPython/UserConfig/ipythonrc: remove []{} from
1391 readline_remove_delims, so that things like [modname.<TAB> do
1395 readline_remove_delims, so that things like [modname.<TAB> do
1392 proper completion. This disables [].TAB, but that's a less common
1396 proper completion. This disables [].TAB, but that's a less common
1393 case than module names in list comprehensions, for example.
1397 case than module names in list comprehensions, for example.
1394 Thanks to a report by Andrea Riciputi.
1398 Thanks to a report by Andrea Riciputi.
1395
1399
1396 2004-09-09 Fernando Perez <fperez@colorado.edu>
1400 2004-09-09 Fernando Perez <fperez@colorado.edu>
1397
1401
1398 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1402 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
1399 blocking problems in win32 and osx. Fix by John.
1403 blocking problems in win32 and osx. Fix by John.
1400
1404
1401 2004-09-08 Fernando Perez <fperez@colorado.edu>
1405 2004-09-08 Fernando Perez <fperez@colorado.edu>
1402
1406
1403 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1407 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
1404 for Win32 and OSX. Fix by John Hunter.
1408 for Win32 and OSX. Fix by John Hunter.
1405
1409
1406 2004-08-30 *** Released version 0.6.3
1410 2004-08-30 *** Released version 0.6.3
1407
1411
1408 2004-08-30 Fernando Perez <fperez@colorado.edu>
1412 2004-08-30 Fernando Perez <fperez@colorado.edu>
1409
1413
1410 * setup.py (isfile): Add manpages to list of dependent files to be
1414 * setup.py (isfile): Add manpages to list of dependent files to be
1411 updated.
1415 updated.
1412
1416
1413 2004-08-27 Fernando Perez <fperez@colorado.edu>
1417 2004-08-27 Fernando Perez <fperez@colorado.edu>
1414
1418
1415 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1419 * IPython/Shell.py (start): I've disabled -wthread and -gthread
1416 for now. They don't really work with standalone WX/GTK code
1420 for now. They don't really work with standalone WX/GTK code
1417 (though matplotlib IS working fine with both of those backends).
1421 (though matplotlib IS working fine with both of those backends).
1418 This will neeed much more testing. I disabled most things with
1422 This will neeed much more testing. I disabled most things with
1419 comments, so turning it back on later should be pretty easy.
1423 comments, so turning it back on later should be pretty easy.
1420
1424
1421 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1425 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
1422 autocalling of expressions like r'foo', by modifying the line
1426 autocalling of expressions like r'foo', by modifying the line
1423 split regexp. Closes
1427 split regexp. Closes
1424 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1428 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
1425 Riley <ipythonbugs-AT-sabi.net>.
1429 Riley <ipythonbugs-AT-sabi.net>.
1426 (InteractiveShell.mainloop): honor --nobanner with banner
1430 (InteractiveShell.mainloop): honor --nobanner with banner
1427 extensions.
1431 extensions.
1428
1432
1429 * IPython/Shell.py: Significant refactoring of all classes, so
1433 * IPython/Shell.py: Significant refactoring of all classes, so
1430 that we can really support ALL matplotlib backends and threading
1434 that we can really support ALL matplotlib backends and threading
1431 models (John spotted a bug with Tk which required this). Now we
1435 models (John spotted a bug with Tk which required this). Now we
1432 should support single-threaded, WX-threads and GTK-threads, both
1436 should support single-threaded, WX-threads and GTK-threads, both
1433 for generic code and for matplotlib.
1437 for generic code and for matplotlib.
1434
1438
1435 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1439 * IPython/ipmaker.py (__call__): Changed -mpthread option to
1436 -pylab, to simplify things for users. Will also remove the pylab
1440 -pylab, to simplify things for users. Will also remove the pylab
1437 profile, since now all of matplotlib configuration is directly
1441 profile, since now all of matplotlib configuration is directly
1438 handled here. This also reduces startup time.
1442 handled here. This also reduces startup time.
1439
1443
1440 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1444 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
1441 shell wasn't being correctly called. Also in IPShellWX.
1445 shell wasn't being correctly called. Also in IPShellWX.
1442
1446
1443 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1447 * IPython/iplib.py (InteractiveShell.__init__): Added option to
1444 fine-tune banner.
1448 fine-tune banner.
1445
1449
1446 * IPython/numutils.py (spike): Deprecate these spike functions,
1450 * IPython/numutils.py (spike): Deprecate these spike functions,
1447 delete (long deprecated) gnuplot_exec handler.
1451 delete (long deprecated) gnuplot_exec handler.
1448
1452
1449 2004-08-26 Fernando Perez <fperez@colorado.edu>
1453 2004-08-26 Fernando Perez <fperez@colorado.edu>
1450
1454
1451 * ipython.1: Update for threading options, plus some others which
1455 * ipython.1: Update for threading options, plus some others which
1452 were missing.
1456 were missing.
1453
1457
1454 * IPython/ipmaker.py (__call__): Added -wthread option for
1458 * IPython/ipmaker.py (__call__): Added -wthread option for
1455 wxpython thread handling. Make sure threading options are only
1459 wxpython thread handling. Make sure threading options are only
1456 valid at the command line.
1460 valid at the command line.
1457
1461
1458 * scripts/ipython: moved shell selection into a factory function
1462 * scripts/ipython: moved shell selection into a factory function
1459 in Shell.py, to keep the starter script to a minimum.
1463 in Shell.py, to keep the starter script to a minimum.
1460
1464
1461 2004-08-25 Fernando Perez <fperez@colorado.edu>
1465 2004-08-25 Fernando Perez <fperez@colorado.edu>
1462
1466
1463 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1467 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
1464 John. Along with some recent changes he made to matplotlib, the
1468 John. Along with some recent changes he made to matplotlib, the
1465 next versions of both systems should work very well together.
1469 next versions of both systems should work very well together.
1466
1470
1467 2004-08-24 Fernando Perez <fperez@colorado.edu>
1471 2004-08-24 Fernando Perez <fperez@colorado.edu>
1468
1472
1469 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1473 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
1470 tried to switch the profiling to using hotshot, but I'm getting
1474 tried to switch the profiling to using hotshot, but I'm getting
1471 strange errors from prof.runctx() there. I may be misreading the
1475 strange errors from prof.runctx() there. I may be misreading the
1472 docs, but it looks weird. For now the profiling code will
1476 docs, but it looks weird. For now the profiling code will
1473 continue to use the standard profiler.
1477 continue to use the standard profiler.
1474
1478
1475 2004-08-23 Fernando Perez <fperez@colorado.edu>
1479 2004-08-23 Fernando Perez <fperez@colorado.edu>
1476
1480
1477 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1481 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
1478 threaded shell, by John Hunter. It's not quite ready yet, but
1482 threaded shell, by John Hunter. It's not quite ready yet, but
1479 close.
1483 close.
1480
1484
1481 2004-08-22 Fernando Perez <fperez@colorado.edu>
1485 2004-08-22 Fernando Perez <fperez@colorado.edu>
1482
1486
1483 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1487 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
1484 in Magic and ultraTB.
1488 in Magic and ultraTB.
1485
1489
1486 * ipython.1: document threading options in manpage.
1490 * ipython.1: document threading options in manpage.
1487
1491
1488 * scripts/ipython: Changed name of -thread option to -gthread,
1492 * scripts/ipython: Changed name of -thread option to -gthread,
1489 since this is GTK specific. I want to leave the door open for a
1493 since this is GTK specific. I want to leave the door open for a
1490 -wthread option for WX, which will most likely be necessary. This
1494 -wthread option for WX, which will most likely be necessary. This
1491 change affects usage and ipmaker as well.
1495 change affects usage and ipmaker as well.
1492
1496
1493 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1497 * IPython/Shell.py (matplotlib_shell): Add a factory function to
1494 handle the matplotlib shell issues. Code by John Hunter
1498 handle the matplotlib shell issues. Code by John Hunter
1495 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1499 <jdhunter-AT-nitace.bsd.uchicago.edu>.
1496 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1500 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
1497 broken (and disabled for end users) for now, but it puts the
1501 broken (and disabled for end users) for now, but it puts the
1498 infrastructure in place.
1502 infrastructure in place.
1499
1503
1500 2004-08-21 Fernando Perez <fperez@colorado.edu>
1504 2004-08-21 Fernando Perez <fperez@colorado.edu>
1501
1505
1502 * ipythonrc-pylab: Add matplotlib support.
1506 * ipythonrc-pylab: Add matplotlib support.
1503
1507
1504 * matplotlib_config.py: new files for matplotlib support, part of
1508 * matplotlib_config.py: new files for matplotlib support, part of
1505 the pylab profile.
1509 the pylab profile.
1506
1510
1507 * IPython/usage.py (__doc__): documented the threading options.
1511 * IPython/usage.py (__doc__): documented the threading options.
1508
1512
1509 2004-08-20 Fernando Perez <fperez@colorado.edu>
1513 2004-08-20 Fernando Perez <fperez@colorado.edu>
1510
1514
1511 * ipython: Modified the main calling routine to handle the -thread
1515 * ipython: Modified the main calling routine to handle the -thread
1512 and -mpthread options. This needs to be done as a top-level hack,
1516 and -mpthread options. This needs to be done as a top-level hack,
1513 because it determines which class to instantiate for IPython
1517 because it determines which class to instantiate for IPython
1514 itself.
1518 itself.
1515
1519
1516 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1520 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
1517 classes to support multithreaded GTK operation without blocking,
1521 classes to support multithreaded GTK operation without blocking,
1518 and matplotlib with all backends. This is a lot of still very
1522 and matplotlib with all backends. This is a lot of still very
1519 experimental code, and threads are tricky. So it may still have a
1523 experimental code, and threads are tricky. So it may still have a
1520 few rough edges... This code owes a lot to
1524 few rough edges... This code owes a lot to
1521 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1525 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
1522 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1526 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
1523 to John Hunter for all the matplotlib work.
1527 to John Hunter for all the matplotlib work.
1524
1528
1525 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1529 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
1526 options for gtk thread and matplotlib support.
1530 options for gtk thread and matplotlib support.
1527
1531
1528 2004-08-16 Fernando Perez <fperez@colorado.edu>
1532 2004-08-16 Fernando Perez <fperez@colorado.edu>
1529
1533
1530 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1534 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
1531 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1535 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
1532 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1536 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
1533
1537
1534 2004-08-11 Fernando Perez <fperez@colorado.edu>
1538 2004-08-11 Fernando Perez <fperez@colorado.edu>
1535
1539
1536 * setup.py (isfile): Fix build so documentation gets updated for
1540 * setup.py (isfile): Fix build so documentation gets updated for
1537 rpms (it was only done for .tgz builds).
1541 rpms (it was only done for .tgz builds).
1538
1542
1539 2004-08-10 Fernando Perez <fperez@colorado.edu>
1543 2004-08-10 Fernando Perez <fperez@colorado.edu>
1540
1544
1541 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1545 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
1542
1546
1543 * iplib.py : Silence syntax error exceptions in tab-completion.
1547 * iplib.py : Silence syntax error exceptions in tab-completion.
1544
1548
1545 2004-08-05 Fernando Perez <fperez@colorado.edu>
1549 2004-08-05 Fernando Perez <fperez@colorado.edu>
1546
1550
1547 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1551 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
1548 'color off' mark for continuation prompts. This was causing long
1552 'color off' mark for continuation prompts. This was causing long
1549 continuation lines to mis-wrap.
1553 continuation lines to mis-wrap.
1550
1554
1551 2004-08-01 Fernando Perez <fperez@colorado.edu>
1555 2004-08-01 Fernando Perez <fperez@colorado.edu>
1552
1556
1553 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1557 * IPython/ipmaker.py (make_IPython): Allow the shell class used
1554 for building ipython to be a parameter. All this is necessary
1558 for building ipython to be a parameter. All this is necessary
1555 right now to have a multithreaded version, but this insane
1559 right now to have a multithreaded version, but this insane
1556 non-design will be cleaned up soon. For now, it's a hack that
1560 non-design will be cleaned up soon. For now, it's a hack that
1557 works.
1561 works.
1558
1562
1559 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1563 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
1560 args in various places. No bugs so far, but it's a dangerous
1564 args in various places. No bugs so far, but it's a dangerous
1561 practice.
1565 practice.
1562
1566
1563 2004-07-31 Fernando Perez <fperez@colorado.edu>
1567 2004-07-31 Fernando Perez <fperez@colorado.edu>
1564
1568
1565 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1569 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
1566 fix completion of files with dots in their names under most
1570 fix completion of files with dots in their names under most
1567 profiles (pysh was OK because the completion order is different).
1571 profiles (pysh was OK because the completion order is different).
1568
1572
1569 2004-07-27 Fernando Perez <fperez@colorado.edu>
1573 2004-07-27 Fernando Perez <fperez@colorado.edu>
1570
1574
1571 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1575 * IPython/iplib.py (InteractiveShell.__init__): build dict of
1572 keywords manually, b/c the one in keyword.py was removed in python
1576 keywords manually, b/c the one in keyword.py was removed in python
1573 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1577 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
1574 This is NOT a bug under python 2.3 and earlier.
1578 This is NOT a bug under python 2.3 and earlier.
1575
1579
1576 2004-07-26 Fernando Perez <fperez@colorado.edu>
1580 2004-07-26 Fernando Perez <fperez@colorado.edu>
1577
1581
1578 * IPython/ultraTB.py (VerboseTB.text): Add another
1582 * IPython/ultraTB.py (VerboseTB.text): Add another
1579 linecache.checkcache() call to try to prevent inspect.py from
1583 linecache.checkcache() call to try to prevent inspect.py from
1580 crashing under python 2.3. I think this fixes
1584 crashing under python 2.3. I think this fixes
1581 http://www.scipy.net/roundup/ipython/issue17.
1585 http://www.scipy.net/roundup/ipython/issue17.
1582
1586
1583 2004-07-26 *** Released version 0.6.2
1587 2004-07-26 *** Released version 0.6.2
1584
1588
1585 2004-07-26 Fernando Perez <fperez@colorado.edu>
1589 2004-07-26 Fernando Perez <fperez@colorado.edu>
1586
1590
1587 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1591 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
1588 fail for any number.
1592 fail for any number.
1589 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1593 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
1590 empty bookmarks.
1594 empty bookmarks.
1591
1595
1592 2004-07-26 *** Released version 0.6.1
1596 2004-07-26 *** Released version 0.6.1
1593
1597
1594 2004-07-26 Fernando Perez <fperez@colorado.edu>
1598 2004-07-26 Fernando Perez <fperez@colorado.edu>
1595
1599
1596 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1600 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
1597
1601
1598 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1602 * IPython/iplib.py (protect_filename): Applied Ville's patch for
1599 escaping '()[]{}' in filenames.
1603 escaping '()[]{}' in filenames.
1600
1604
1601 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1605 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
1602 Python 2.2 users who lack a proper shlex.split.
1606 Python 2.2 users who lack a proper shlex.split.
1603
1607
1604 2004-07-19 Fernando Perez <fperez@colorado.edu>
1608 2004-07-19 Fernando Perez <fperez@colorado.edu>
1605
1609
1606 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1610 * IPython/iplib.py (InteractiveShell.init_readline): Add support
1607 for reading readline's init file. I follow the normal chain:
1611 for reading readline's init file. I follow the normal chain:
1608 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1612 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
1609 report by Mike Heeter. This closes
1613 report by Mike Heeter. This closes
1610 http://www.scipy.net/roundup/ipython/issue16.
1614 http://www.scipy.net/roundup/ipython/issue16.
1611
1615
1612 2004-07-18 Fernando Perez <fperez@colorado.edu>
1616 2004-07-18 Fernando Perez <fperez@colorado.edu>
1613
1617
1614 * IPython/iplib.py (__init__): Add better handling of '\' under
1618 * IPython/iplib.py (__init__): Add better handling of '\' under
1615 Win32 for filenames. After a patch by Ville.
1619 Win32 for filenames. After a patch by Ville.
1616
1620
1617 2004-07-17 Fernando Perez <fperez@colorado.edu>
1621 2004-07-17 Fernando Perez <fperez@colorado.edu>
1618
1622
1619 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1623 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
1620 autocalling would be triggered for 'foo is bar' if foo is
1624 autocalling would be triggered for 'foo is bar' if foo is
1621 callable. I also cleaned up the autocall detection code to use a
1625 callable. I also cleaned up the autocall detection code to use a
1622 regexp, which is faster. Bug reported by Alexander Schmolck.
1626 regexp, which is faster. Bug reported by Alexander Schmolck.
1623
1627
1624 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1628 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
1625 '?' in them would confuse the help system. Reported by Alex
1629 '?' in them would confuse the help system. Reported by Alex
1626 Schmolck.
1630 Schmolck.
1627
1631
1628 2004-07-16 Fernando Perez <fperez@colorado.edu>
1632 2004-07-16 Fernando Perez <fperez@colorado.edu>
1629
1633
1630 * IPython/GnuplotInteractive.py (__all__): added plot2.
1634 * IPython/GnuplotInteractive.py (__all__): added plot2.
1631
1635
1632 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1636 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
1633 plotting dictionaries, lists or tuples of 1d arrays.
1637 plotting dictionaries, lists or tuples of 1d arrays.
1634
1638
1635 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1639 * IPython/Magic.py (Magic.magic_hist): small clenaups and
1636 optimizations.
1640 optimizations.
1637
1641
1638 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1642 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
1639 the information which was there from Janko's original IPP code:
1643 the information which was there from Janko's original IPP code:
1640
1644
1641 03.05.99 20:53 porto.ifm.uni-kiel.de
1645 03.05.99 20:53 porto.ifm.uni-kiel.de
1642 --Started changelog.
1646 --Started changelog.
1643 --make clear do what it say it does
1647 --make clear do what it say it does
1644 --added pretty output of lines from inputcache
1648 --added pretty output of lines from inputcache
1645 --Made Logger a mixin class, simplifies handling of switches
1649 --Made Logger a mixin class, simplifies handling of switches
1646 --Added own completer class. .string<TAB> expands to last history
1650 --Added own completer class. .string<TAB> expands to last history
1647 line which starts with string. The new expansion is also present
1651 line which starts with string. The new expansion is also present
1648 with Ctrl-r from the readline library. But this shows, who this
1652 with Ctrl-r from the readline library. But this shows, who this
1649 can be done for other cases.
1653 can be done for other cases.
1650 --Added convention that all shell functions should accept a
1654 --Added convention that all shell functions should accept a
1651 parameter_string This opens the door for different behaviour for
1655 parameter_string This opens the door for different behaviour for
1652 each function. @cd is a good example of this.
1656 each function. @cd is a good example of this.
1653
1657
1654 04.05.99 12:12 porto.ifm.uni-kiel.de
1658 04.05.99 12:12 porto.ifm.uni-kiel.de
1655 --added logfile rotation
1659 --added logfile rotation
1656 --added new mainloop method which freezes first the namespace
1660 --added new mainloop method which freezes first the namespace
1657
1661
1658 07.05.99 21:24 porto.ifm.uni-kiel.de
1662 07.05.99 21:24 porto.ifm.uni-kiel.de
1659 --added the docreader classes. Now there is a help system.
1663 --added the docreader classes. Now there is a help system.
1660 -This is only a first try. Currently it's not easy to put new
1664 -This is only a first try. Currently it's not easy to put new
1661 stuff in the indices. But this is the way to go. Info would be
1665 stuff in the indices. But this is the way to go. Info would be
1662 better, but HTML is every where and not everybody has an info
1666 better, but HTML is every where and not everybody has an info
1663 system installed and it's not so easy to change html-docs to info.
1667 system installed and it's not so easy to change html-docs to info.
1664 --added global logfile option
1668 --added global logfile option
1665 --there is now a hook for object inspection method pinfo needs to
1669 --there is now a hook for object inspection method pinfo needs to
1666 be provided for this. Can be reached by two '??'.
1670 be provided for this. Can be reached by two '??'.
1667
1671
1668 08.05.99 20:51 porto.ifm.uni-kiel.de
1672 08.05.99 20:51 porto.ifm.uni-kiel.de
1669 --added a README
1673 --added a README
1670 --bug in rc file. Something has changed so functions in the rc
1674 --bug in rc file. Something has changed so functions in the rc
1671 file need to reference the shell and not self. Not clear if it's a
1675 file need to reference the shell and not self. Not clear if it's a
1672 bug or feature.
1676 bug or feature.
1673 --changed rc file for new behavior
1677 --changed rc file for new behavior
1674
1678
1675 2004-07-15 Fernando Perez <fperez@colorado.edu>
1679 2004-07-15 Fernando Perez <fperez@colorado.edu>
1676
1680
1677 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1681 * IPython/Logger.py (Logger.log): fixed recent bug where the input
1678 cache was falling out of sync in bizarre manners when multi-line
1682 cache was falling out of sync in bizarre manners when multi-line
1679 input was present. Minor optimizations and cleanup.
1683 input was present. Minor optimizations and cleanup.
1680
1684
1681 (Logger): Remove old Changelog info for cleanup. This is the
1685 (Logger): Remove old Changelog info for cleanup. This is the
1682 information which was there from Janko's original code:
1686 information which was there from Janko's original code:
1683
1687
1684 Changes to Logger: - made the default log filename a parameter
1688 Changes to Logger: - made the default log filename a parameter
1685
1689
1686 - put a check for lines beginning with !@? in log(). Needed
1690 - put a check for lines beginning with !@? in log(). Needed
1687 (even if the handlers properly log their lines) for mid-session
1691 (even if the handlers properly log their lines) for mid-session
1688 logging activation to work properly. Without this, lines logged
1692 logging activation to work properly. Without this, lines logged
1689 in mid session, which get read from the cache, would end up
1693 in mid session, which get read from the cache, would end up
1690 'bare' (with !@? in the open) in the log. Now they are caught
1694 'bare' (with !@? in the open) in the log. Now they are caught
1691 and prepended with a #.
1695 and prepended with a #.
1692
1696
1693 * IPython/iplib.py (InteractiveShell.init_readline): added check
1697 * IPython/iplib.py (InteractiveShell.init_readline): added check
1694 in case MagicCompleter fails to be defined, so we don't crash.
1698 in case MagicCompleter fails to be defined, so we don't crash.
1695
1699
1696 2004-07-13 Fernando Perez <fperez@colorado.edu>
1700 2004-07-13 Fernando Perez <fperez@colorado.edu>
1697
1701
1698 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1702 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
1699 of EPS if the requested filename ends in '.eps'.
1703 of EPS if the requested filename ends in '.eps'.
1700
1704
1701 2004-07-04 Fernando Perez <fperez@colorado.edu>
1705 2004-07-04 Fernando Perez <fperez@colorado.edu>
1702
1706
1703 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1707 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
1704 escaping of quotes when calling the shell.
1708 escaping of quotes when calling the shell.
1705
1709
1706 2004-07-02 Fernando Perez <fperez@colorado.edu>
1710 2004-07-02 Fernando Perez <fperez@colorado.edu>
1707
1711
1708 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1712 * IPython/Prompts.py (CachedOutput.update): Fix problem with
1709 gettext not working because we were clobbering '_'. Fixes
1713 gettext not working because we were clobbering '_'. Fixes
1710 http://www.scipy.net/roundup/ipython/issue6.
1714 http://www.scipy.net/roundup/ipython/issue6.
1711
1715
1712 2004-07-01 Fernando Perez <fperez@colorado.edu>
1716 2004-07-01 Fernando Perez <fperez@colorado.edu>
1713
1717
1714 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1718 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
1715 into @cd. Patch by Ville.
1719 into @cd. Patch by Ville.
1716
1720
1717 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1721 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1718 new function to store things after ipmaker runs. Patch by Ville.
1722 new function to store things after ipmaker runs. Patch by Ville.
1719 Eventually this will go away once ipmaker is removed and the class
1723 Eventually this will go away once ipmaker is removed and the class
1720 gets cleaned up, but for now it's ok. Key functionality here is
1724 gets cleaned up, but for now it's ok. Key functionality here is
1721 the addition of the persistent storage mechanism, a dict for
1725 the addition of the persistent storage mechanism, a dict for
1722 keeping data across sessions (for now just bookmarks, but more can
1726 keeping data across sessions (for now just bookmarks, but more can
1723 be implemented later).
1727 be implemented later).
1724
1728
1725 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1729 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
1726 persistent across sections. Patch by Ville, I modified it
1730 persistent across sections. Patch by Ville, I modified it
1727 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1731 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
1728 added a '-l' option to list all bookmarks.
1732 added a '-l' option to list all bookmarks.
1729
1733
1730 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1734 * IPython/iplib.py (InteractiveShell.atexit_operations): new
1731 center for cleanup. Registered with atexit.register(). I moved
1735 center for cleanup. Registered with atexit.register(). I moved
1732 here the old exit_cleanup(). After a patch by Ville.
1736 here the old exit_cleanup(). After a patch by Ville.
1733
1737
1734 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1738 * IPython/Magic.py (get_py_filename): added '~' to the accepted
1735 characters in the hacked shlex_split for python 2.2.
1739 characters in the hacked shlex_split for python 2.2.
1736
1740
1737 * IPython/iplib.py (file_matches): more fixes to filenames with
1741 * IPython/iplib.py (file_matches): more fixes to filenames with
1738 whitespace in them. It's not perfect, but limitations in python's
1742 whitespace in them. It's not perfect, but limitations in python's
1739 readline make it impossible to go further.
1743 readline make it impossible to go further.
1740
1744
1741 2004-06-29 Fernando Perez <fperez@colorado.edu>
1745 2004-06-29 Fernando Perez <fperez@colorado.edu>
1742
1746
1743 * IPython/iplib.py (file_matches): escape whitespace correctly in
1747 * IPython/iplib.py (file_matches): escape whitespace correctly in
1744 filename completions. Bug reported by Ville.
1748 filename completions. Bug reported by Ville.
1745
1749
1746 2004-06-28 Fernando Perez <fperez@colorado.edu>
1750 2004-06-28 Fernando Perez <fperez@colorado.edu>
1747
1751
1748 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1752 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
1749 the history file will be called 'history-PROFNAME' (or just
1753 the history file will be called 'history-PROFNAME' (or just
1750 'history' if no profile is loaded). I was getting annoyed at
1754 'history' if no profile is loaded). I was getting annoyed at
1751 getting my Numerical work history clobbered by pysh sessions.
1755 getting my Numerical work history clobbered by pysh sessions.
1752
1756
1753 * IPython/iplib.py (InteractiveShell.__init__): Internal
1757 * IPython/iplib.py (InteractiveShell.__init__): Internal
1754 getoutputerror() function so that we can honor the system_verbose
1758 getoutputerror() function so that we can honor the system_verbose
1755 flag for _all_ system calls. I also added escaping of #
1759 flag for _all_ system calls. I also added escaping of #
1756 characters here to avoid confusing Itpl.
1760 characters here to avoid confusing Itpl.
1757
1761
1758 * IPython/Magic.py (shlex_split): removed call to shell in
1762 * IPython/Magic.py (shlex_split): removed call to shell in
1759 parse_options and replaced it with shlex.split(). The annoying
1763 parse_options and replaced it with shlex.split(). The annoying
1760 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1764 part was that in Python 2.2, shlex.split() doesn't exist, so I had
1761 to backport it from 2.3, with several frail hacks (the shlex
1765 to backport it from 2.3, with several frail hacks (the shlex
1762 module is rather limited in 2.2). Thanks to a suggestion by Ville
1766 module is rather limited in 2.2). Thanks to a suggestion by Ville
1763 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1767 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
1764 problem.
1768 problem.
1765
1769
1766 (Magic.magic_system_verbose): new toggle to print the actual
1770 (Magic.magic_system_verbose): new toggle to print the actual
1767 system calls made by ipython. Mainly for debugging purposes.
1771 system calls made by ipython. Mainly for debugging purposes.
1768
1772
1769 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1773 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
1770 doesn't support persistence. Reported (and fix suggested) by
1774 doesn't support persistence. Reported (and fix suggested) by
1771 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1775 Travis Caldwell <travis_caldwell2000@yahoo.com>.
1772
1776
1773 2004-06-26 Fernando Perez <fperez@colorado.edu>
1777 2004-06-26 Fernando Perez <fperez@colorado.edu>
1774
1778
1775 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1779 * IPython/Logger.py (Logger.log): fix to handle correctly empty
1776 continue prompts.
1780 continue prompts.
1777
1781
1778 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1782 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
1779 function (basically a big docstring) and a few more things here to
1783 function (basically a big docstring) and a few more things here to
1780 speedup startup. pysh.py is now very lightweight. We want because
1784 speedup startup. pysh.py is now very lightweight. We want because
1781 it gets execfile'd, while InterpreterExec gets imported, so
1785 it gets execfile'd, while InterpreterExec gets imported, so
1782 byte-compilation saves time.
1786 byte-compilation saves time.
1783
1787
1784 2004-06-25 Fernando Perez <fperez@colorado.edu>
1788 2004-06-25 Fernando Perez <fperez@colorado.edu>
1785
1789
1786 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1790 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
1787 -NUM', which was recently broken.
1791 -NUM', which was recently broken.
1788
1792
1789 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1793 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
1790 in multi-line input (but not !!, which doesn't make sense there).
1794 in multi-line input (but not !!, which doesn't make sense there).
1791
1795
1792 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1796 * IPython/UserConfig/ipythonrc: made autoindent on by default.
1793 It's just too useful, and people can turn it off in the less
1797 It's just too useful, and people can turn it off in the less
1794 common cases where it's a problem.
1798 common cases where it's a problem.
1795
1799
1796 2004-06-24 Fernando Perez <fperez@colorado.edu>
1800 2004-06-24 Fernando Perez <fperez@colorado.edu>
1797
1801
1798 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1802 * IPython/iplib.py (InteractiveShell._prefilter): big change -
1799 special syntaxes (like alias calling) is now allied in multi-line
1803 special syntaxes (like alias calling) is now allied in multi-line
1800 input. This is still _very_ experimental, but it's necessary for
1804 input. This is still _very_ experimental, but it's necessary for
1801 efficient shell usage combining python looping syntax with system
1805 efficient shell usage combining python looping syntax with system
1802 calls. For now it's restricted to aliases, I don't think it
1806 calls. For now it's restricted to aliases, I don't think it
1803 really even makes sense to have this for magics.
1807 really even makes sense to have this for magics.
1804
1808
1805 2004-06-23 Fernando Perez <fperez@colorado.edu>
1809 2004-06-23 Fernando Perez <fperez@colorado.edu>
1806
1810
1807 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1811 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
1808 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1812 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
1809
1813
1810 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1814 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
1811 extensions under Windows (after code sent by Gary Bishop). The
1815 extensions under Windows (after code sent by Gary Bishop). The
1812 extensions considered 'executable' are stored in IPython's rc
1816 extensions considered 'executable' are stored in IPython's rc
1813 structure as win_exec_ext.
1817 structure as win_exec_ext.
1814
1818
1815 * IPython/genutils.py (shell): new function, like system() but
1819 * IPython/genutils.py (shell): new function, like system() but
1816 without return value. Very useful for interactive shell work.
1820 without return value. Very useful for interactive shell work.
1817
1821
1818 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1822 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
1819 delete aliases.
1823 delete aliases.
1820
1824
1821 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1825 * IPython/iplib.py (InteractiveShell.alias_table_update): make
1822 sure that the alias table doesn't contain python keywords.
1826 sure that the alias table doesn't contain python keywords.
1823
1827
1824 2004-06-21 Fernando Perez <fperez@colorado.edu>
1828 2004-06-21 Fernando Perez <fperez@colorado.edu>
1825
1829
1826 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1830 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
1827 non-existent items are found in $PATH. Reported by Thorsten.
1831 non-existent items are found in $PATH. Reported by Thorsten.
1828
1832
1829 2004-06-20 Fernando Perez <fperez@colorado.edu>
1833 2004-06-20 Fernando Perez <fperez@colorado.edu>
1830
1834
1831 * IPython/iplib.py (complete): modified the completer so that the
1835 * IPython/iplib.py (complete): modified the completer so that the
1832 order of priorities can be easily changed at runtime.
1836 order of priorities can be easily changed at runtime.
1833
1837
1834 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1838 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
1835 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1839 Modified to auto-execute all lines beginning with '~', '/' or '.'.
1836
1840
1837 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1841 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
1838 expand Python variables prepended with $ in all system calls. The
1842 expand Python variables prepended with $ in all system calls. The
1839 same was done to InteractiveShell.handle_shell_escape. Now all
1843 same was done to InteractiveShell.handle_shell_escape. Now all
1840 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1844 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
1841 expansion of python variables and expressions according to the
1845 expansion of python variables and expressions according to the
1842 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1846 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
1843
1847
1844 Though PEP-215 has been rejected, a similar (but simpler) one
1848 Though PEP-215 has been rejected, a similar (but simpler) one
1845 seems like it will go into Python 2.4, PEP-292 -
1849 seems like it will go into Python 2.4, PEP-292 -
1846 http://www.python.org/peps/pep-0292.html.
1850 http://www.python.org/peps/pep-0292.html.
1847
1851
1848 I'll keep the full syntax of PEP-215, since IPython has since the
1852 I'll keep the full syntax of PEP-215, since IPython has since the
1849 start used Ka-Ping Yee's reference implementation discussed there
1853 start used Ka-Ping Yee's reference implementation discussed there
1850 (Itpl), and I actually like the powerful semantics it offers.
1854 (Itpl), and I actually like the powerful semantics it offers.
1851
1855
1852 In order to access normal shell variables, the $ has to be escaped
1856 In order to access normal shell variables, the $ has to be escaped
1853 via an extra $. For example:
1857 via an extra $. For example:
1854
1858
1855 In [7]: PATH='a python variable'
1859 In [7]: PATH='a python variable'
1856
1860
1857 In [8]: !echo $PATH
1861 In [8]: !echo $PATH
1858 a python variable
1862 a python variable
1859
1863
1860 In [9]: !echo $$PATH
1864 In [9]: !echo $$PATH
1861 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1865 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
1862
1866
1863 (Magic.parse_options): escape $ so the shell doesn't evaluate
1867 (Magic.parse_options): escape $ so the shell doesn't evaluate
1864 things prematurely.
1868 things prematurely.
1865
1869
1866 * IPython/iplib.py (InteractiveShell.call_alias): added the
1870 * IPython/iplib.py (InteractiveShell.call_alias): added the
1867 ability for aliases to expand python variables via $.
1871 ability for aliases to expand python variables via $.
1868
1872
1869 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1873 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
1870 system, now there's a @rehash/@rehashx pair of magics. These work
1874 system, now there's a @rehash/@rehashx pair of magics. These work
1871 like the csh rehash command, and can be invoked at any time. They
1875 like the csh rehash command, and can be invoked at any time. They
1872 build a table of aliases to everything in the user's $PATH
1876 build a table of aliases to everything in the user's $PATH
1873 (@rehash uses everything, @rehashx is slower but only adds
1877 (@rehash uses everything, @rehashx is slower but only adds
1874 executable files). With this, the pysh.py-based shell profile can
1878 executable files). With this, the pysh.py-based shell profile can
1875 now simply call rehash upon startup, and full access to all
1879 now simply call rehash upon startup, and full access to all
1876 programs in the user's path is obtained.
1880 programs in the user's path is obtained.
1877
1881
1878 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1882 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
1879 functionality is now fully in place. I removed the old dynamic
1883 functionality is now fully in place. I removed the old dynamic
1880 code generation based approach, in favor of a much lighter one
1884 code generation based approach, in favor of a much lighter one
1881 based on a simple dict. The advantage is that this allows me to
1885 based on a simple dict. The advantage is that this allows me to
1882 now have thousands of aliases with negligible cost (unthinkable
1886 now have thousands of aliases with negligible cost (unthinkable
1883 with the old system).
1887 with the old system).
1884
1888
1885 2004-06-19 Fernando Perez <fperez@colorado.edu>
1889 2004-06-19 Fernando Perez <fperez@colorado.edu>
1886
1890
1887 * IPython/iplib.py (__init__): extended MagicCompleter class to
1891 * IPython/iplib.py (__init__): extended MagicCompleter class to
1888 also complete (last in priority) on user aliases.
1892 also complete (last in priority) on user aliases.
1889
1893
1890 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1894 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
1891 call to eval.
1895 call to eval.
1892 (ItplNS.__init__): Added a new class which functions like Itpl,
1896 (ItplNS.__init__): Added a new class which functions like Itpl,
1893 but allows configuring the namespace for the evaluation to occur
1897 but allows configuring the namespace for the evaluation to occur
1894 in.
1898 in.
1895
1899
1896 2004-06-18 Fernando Perez <fperez@colorado.edu>
1900 2004-06-18 Fernando Perez <fperez@colorado.edu>
1897
1901
1898 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1902 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
1899 better message when 'exit' or 'quit' are typed (a common newbie
1903 better message when 'exit' or 'quit' are typed (a common newbie
1900 confusion).
1904 confusion).
1901
1905
1902 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
1906 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
1903 check for Windows users.
1907 check for Windows users.
1904
1908
1905 * IPython/iplib.py (InteractiveShell.user_setup): removed
1909 * IPython/iplib.py (InteractiveShell.user_setup): removed
1906 disabling of colors for Windows. I'll test at runtime and issue a
1910 disabling of colors for Windows. I'll test at runtime and issue a
1907 warning if Gary's readline isn't found, as to nudge users to
1911 warning if Gary's readline isn't found, as to nudge users to
1908 download it.
1912 download it.
1909
1913
1910 2004-06-16 Fernando Perez <fperez@colorado.edu>
1914 2004-06-16 Fernando Perez <fperez@colorado.edu>
1911
1915
1912 * IPython/genutils.py (Stream.__init__): changed to print errors
1916 * IPython/genutils.py (Stream.__init__): changed to print errors
1913 to sys.stderr. I had a circular dependency here. Now it's
1917 to sys.stderr. I had a circular dependency here. Now it's
1914 possible to run ipython as IDLE's shell (consider this pre-alpha,
1918 possible to run ipython as IDLE's shell (consider this pre-alpha,
1915 since true stdout things end up in the starting terminal instead
1919 since true stdout things end up in the starting terminal instead
1916 of IDLE's out).
1920 of IDLE's out).
1917
1921
1918 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
1922 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
1919 users who haven't # updated their prompt_in2 definitions. Remove
1923 users who haven't # updated their prompt_in2 definitions. Remove
1920 eventually.
1924 eventually.
1921 (multiple_replace): added credit to original ASPN recipe.
1925 (multiple_replace): added credit to original ASPN recipe.
1922
1926
1923 2004-06-15 Fernando Perez <fperez@colorado.edu>
1927 2004-06-15 Fernando Perez <fperez@colorado.edu>
1924
1928
1925 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
1929 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
1926 list of auto-defined aliases.
1930 list of auto-defined aliases.
1927
1931
1928 2004-06-13 Fernando Perez <fperez@colorado.edu>
1932 2004-06-13 Fernando Perez <fperez@colorado.edu>
1929
1933
1930 * setup.py (scriptfiles): Don't trigger win_post_install unless an
1934 * setup.py (scriptfiles): Don't trigger win_post_install unless an
1931 install was really requested (so setup.py can be used for other
1935 install was really requested (so setup.py can be used for other
1932 things under Windows).
1936 things under Windows).
1933
1937
1934 2004-06-10 Fernando Perez <fperez@colorado.edu>
1938 2004-06-10 Fernando Perez <fperez@colorado.edu>
1935
1939
1936 * IPython/Logger.py (Logger.create_log): Manually remove any old
1940 * IPython/Logger.py (Logger.create_log): Manually remove any old
1937 backup, since os.remove may fail under Windows. Fixes bug
1941 backup, since os.remove may fail under Windows. Fixes bug
1938 reported by Thorsten.
1942 reported by Thorsten.
1939
1943
1940 2004-06-09 Fernando Perez <fperez@colorado.edu>
1944 2004-06-09 Fernando Perez <fperez@colorado.edu>
1941
1945
1942 * examples/example-embed.py: fixed all references to %n (replaced
1946 * examples/example-embed.py: fixed all references to %n (replaced
1943 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
1947 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
1944 for all examples and the manual as well.
1948 for all examples and the manual as well.
1945
1949
1946 2004-06-08 Fernando Perez <fperez@colorado.edu>
1950 2004-06-08 Fernando Perez <fperez@colorado.edu>
1947
1951
1948 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
1952 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
1949 alignment and color management. All 3 prompt subsystems now
1953 alignment and color management. All 3 prompt subsystems now
1950 inherit from BasePrompt.
1954 inherit from BasePrompt.
1951
1955
1952 * tools/release: updates for windows installer build and tag rpms
1956 * tools/release: updates for windows installer build and tag rpms
1953 with python version (since paths are fixed).
1957 with python version (since paths are fixed).
1954
1958
1955 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
1959 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
1956 which will become eventually obsolete. Also fixed the default
1960 which will become eventually obsolete. Also fixed the default
1957 prompt_in2 to use \D, so at least new users start with the correct
1961 prompt_in2 to use \D, so at least new users start with the correct
1958 defaults.
1962 defaults.
1959 WARNING: Users with existing ipythonrc files will need to apply
1963 WARNING: Users with existing ipythonrc files will need to apply
1960 this fix manually!
1964 this fix manually!
1961
1965
1962 * setup.py: make windows installer (.exe). This is finally the
1966 * setup.py: make windows installer (.exe). This is finally the
1963 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
1967 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
1964 which I hadn't included because it required Python 2.3 (or recent
1968 which I hadn't included because it required Python 2.3 (or recent
1965 distutils).
1969 distutils).
1966
1970
1967 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
1971 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
1968 usage of new '\D' escape.
1972 usage of new '\D' escape.
1969
1973
1970 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
1974 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
1971 lacks os.getuid())
1975 lacks os.getuid())
1972 (CachedOutput.set_colors): Added the ability to turn coloring
1976 (CachedOutput.set_colors): Added the ability to turn coloring
1973 on/off with @colors even for manually defined prompt colors. It
1977 on/off with @colors even for manually defined prompt colors. It
1974 uses a nasty global, but it works safely and via the generic color
1978 uses a nasty global, but it works safely and via the generic color
1975 handling mechanism.
1979 handling mechanism.
1976 (Prompt2.__init__): Introduced new escape '\D' for continuation
1980 (Prompt2.__init__): Introduced new escape '\D' for continuation
1977 prompts. It represents the counter ('\#') as dots.
1981 prompts. It represents the counter ('\#') as dots.
1978 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
1982 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
1979 need to update their ipythonrc files and replace '%n' with '\D' in
1983 need to update their ipythonrc files and replace '%n' with '\D' in
1980 their prompt_in2 settings everywhere. Sorry, but there's
1984 their prompt_in2 settings everywhere. Sorry, but there's
1981 otherwise no clean way to get all prompts to properly align. The
1985 otherwise no clean way to get all prompts to properly align. The
1982 ipythonrc shipped with IPython has been updated.
1986 ipythonrc shipped with IPython has been updated.
1983
1987
1984 2004-06-07 Fernando Perez <fperez@colorado.edu>
1988 2004-06-07 Fernando Perez <fperez@colorado.edu>
1985
1989
1986 * setup.py (isfile): Pass local_icons option to latex2html, so the
1990 * setup.py (isfile): Pass local_icons option to latex2html, so the
1987 resulting HTML file is self-contained. Thanks to
1991 resulting HTML file is self-contained. Thanks to
1988 dryice-AT-liu.com.cn for the tip.
1992 dryice-AT-liu.com.cn for the tip.
1989
1993
1990 * pysh.py: I created a new profile 'shell', which implements a
1994 * pysh.py: I created a new profile 'shell', which implements a
1991 _rudimentary_ IPython-based shell. This is in NO WAY a realy
1995 _rudimentary_ IPython-based shell. This is in NO WAY a realy
1992 system shell, nor will it become one anytime soon. It's mainly
1996 system shell, nor will it become one anytime soon. It's mainly
1993 meant to illustrate the use of the new flexible bash-like prompts.
1997 meant to illustrate the use of the new flexible bash-like prompts.
1994 I guess it could be used by hardy souls for true shell management,
1998 I guess it could be used by hardy souls for true shell management,
1995 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
1999 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
1996 profile. This uses the InterpreterExec extension provided by
2000 profile. This uses the InterpreterExec extension provided by
1997 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
2001 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
1998
2002
1999 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2003 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
2000 auto-align itself with the length of the previous input prompt
2004 auto-align itself with the length of the previous input prompt
2001 (taking into account the invisible color escapes).
2005 (taking into account the invisible color escapes).
2002 (CachedOutput.__init__): Large restructuring of this class. Now
2006 (CachedOutput.__init__): Large restructuring of this class. Now
2003 all three prompts (primary1, primary2, output) are proper objects,
2007 all three prompts (primary1, primary2, output) are proper objects,
2004 managed by the 'parent' CachedOutput class. The code is still a
2008 managed by the 'parent' CachedOutput class. The code is still a
2005 bit hackish (all prompts share state via a pointer to the cache),
2009 bit hackish (all prompts share state via a pointer to the cache),
2006 but it's overall far cleaner than before.
2010 but it's overall far cleaner than before.
2007
2011
2008 * IPython/genutils.py (getoutputerror): modified to add verbose,
2012 * IPython/genutils.py (getoutputerror): modified to add verbose,
2009 debug and header options. This makes the interface of all getout*
2013 debug and header options. This makes the interface of all getout*
2010 functions uniform.
2014 functions uniform.
2011 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2015 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
2012
2016
2013 * IPython/Magic.py (Magic.default_option): added a function to
2017 * IPython/Magic.py (Magic.default_option): added a function to
2014 allow registering default options for any magic command. This
2018 allow registering default options for any magic command. This
2015 makes it easy to have profiles which customize the magics globally
2019 makes it easy to have profiles which customize the magics globally
2016 for a certain use. The values set through this function are
2020 for a certain use. The values set through this function are
2017 picked up by the parse_options() method, which all magics should
2021 picked up by the parse_options() method, which all magics should
2018 use to parse their options.
2022 use to parse their options.
2019
2023
2020 * IPython/genutils.py (warn): modified the warnings framework to
2024 * IPython/genutils.py (warn): modified the warnings framework to
2021 use the Term I/O class. I'm trying to slowly unify all of
2025 use the Term I/O class. I'm trying to slowly unify all of
2022 IPython's I/O operations to pass through Term.
2026 IPython's I/O operations to pass through Term.
2023
2027
2024 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2028 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
2025 the secondary prompt to correctly match the length of the primary
2029 the secondary prompt to correctly match the length of the primary
2026 one for any prompt. Now multi-line code will properly line up
2030 one for any prompt. Now multi-line code will properly line up
2027 even for path dependent prompts, such as the new ones available
2031 even for path dependent prompts, such as the new ones available
2028 via the prompt_specials.
2032 via the prompt_specials.
2029
2033
2030 2004-06-06 Fernando Perez <fperez@colorado.edu>
2034 2004-06-06 Fernando Perez <fperez@colorado.edu>
2031
2035
2032 * IPython/Prompts.py (prompt_specials): Added the ability to have
2036 * IPython/Prompts.py (prompt_specials): Added the ability to have
2033 bash-like special sequences in the prompts, which get
2037 bash-like special sequences in the prompts, which get
2034 automatically expanded. Things like hostname, current working
2038 automatically expanded. Things like hostname, current working
2035 directory and username are implemented already, but it's easy to
2039 directory and username are implemented already, but it's easy to
2036 add more in the future. Thanks to a patch by W.J. van der Laan
2040 add more in the future. Thanks to a patch by W.J. van der Laan
2037 <gnufnork-AT-hetdigitalegat.nl>
2041 <gnufnork-AT-hetdigitalegat.nl>
2038 (prompt_specials): Added color support for prompt strings, so
2042 (prompt_specials): Added color support for prompt strings, so
2039 users can define arbitrary color setups for their prompts.
2043 users can define arbitrary color setups for their prompts.
2040
2044
2041 2004-06-05 Fernando Perez <fperez@colorado.edu>
2045 2004-06-05 Fernando Perez <fperez@colorado.edu>
2042
2046
2043 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2047 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
2044 code to load Gary Bishop's readline and configure it
2048 code to load Gary Bishop's readline and configure it
2045 automatically. Thanks to Gary for help on this.
2049 automatically. Thanks to Gary for help on this.
2046
2050
2047 2004-06-01 Fernando Perez <fperez@colorado.edu>
2051 2004-06-01 Fernando Perez <fperez@colorado.edu>
2048
2052
2049 * IPython/Logger.py (Logger.create_log): fix bug for logging
2053 * IPython/Logger.py (Logger.create_log): fix bug for logging
2050 with no filename (previous fix was incomplete).
2054 with no filename (previous fix was incomplete).
2051
2055
2052 2004-05-25 Fernando Perez <fperez@colorado.edu>
2056 2004-05-25 Fernando Perez <fperez@colorado.edu>
2053
2057
2054 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2058 * IPython/Magic.py (Magic.parse_options): fix bug where naked
2055 parens would get passed to the shell.
2059 parens would get passed to the shell.
2056
2060
2057 2004-05-20 Fernando Perez <fperez@colorado.edu>
2061 2004-05-20 Fernando Perez <fperez@colorado.edu>
2058
2062
2059 * IPython/Magic.py (Magic.magic_prun): changed default profile
2063 * IPython/Magic.py (Magic.magic_prun): changed default profile
2060 sort order to 'time' (the more common profiling need).
2064 sort order to 'time' (the more common profiling need).
2061
2065
2062 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2066 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
2063 so that source code shown is guaranteed in sync with the file on
2067 so that source code shown is guaranteed in sync with the file on
2064 disk (also changed in psource). Similar fix to the one for
2068 disk (also changed in psource). Similar fix to the one for
2065 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2069 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
2066 <yann.ledu-AT-noos.fr>.
2070 <yann.ledu-AT-noos.fr>.
2067
2071
2068 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2072 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
2069 with a single option would not be correctly parsed. Closes
2073 with a single option would not be correctly parsed. Closes
2070 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2074 http://www.scipy.net/roundup/ipython/issue14. This bug had been
2071 introduced in 0.6.0 (on 2004-05-06).
2075 introduced in 0.6.0 (on 2004-05-06).
2072
2076
2073 2004-05-13 *** Released version 0.6.0
2077 2004-05-13 *** Released version 0.6.0
2074
2078
2075 2004-05-13 Fernando Perez <fperez@colorado.edu>
2079 2004-05-13 Fernando Perez <fperez@colorado.edu>
2076
2080
2077 * debian/: Added debian/ directory to CVS, so that debian support
2081 * debian/: Added debian/ directory to CVS, so that debian support
2078 is publicly accessible. The debian package is maintained by Jack
2082 is publicly accessible. The debian package is maintained by Jack
2079 Moffit <jack-AT-xiph.org>.
2083 Moffit <jack-AT-xiph.org>.
2080
2084
2081 * Documentation: included the notes about an ipython-based system
2085 * Documentation: included the notes about an ipython-based system
2082 shell (the hypothetical 'pysh') into the new_design.pdf document,
2086 shell (the hypothetical 'pysh') into the new_design.pdf document,
2083 so that these ideas get distributed to users along with the
2087 so that these ideas get distributed to users along with the
2084 official documentation.
2088 official documentation.
2085
2089
2086 2004-05-10 Fernando Perez <fperez@colorado.edu>
2090 2004-05-10 Fernando Perez <fperez@colorado.edu>
2087
2091
2088 * IPython/Logger.py (Logger.create_log): fix recently introduced
2092 * IPython/Logger.py (Logger.create_log): fix recently introduced
2089 bug (misindented line) where logstart would fail when not given an
2093 bug (misindented line) where logstart would fail when not given an
2090 explicit filename.
2094 explicit filename.
2091
2095
2092 2004-05-09 Fernando Perez <fperez@colorado.edu>
2096 2004-05-09 Fernando Perez <fperez@colorado.edu>
2093
2097
2094 * IPython/Magic.py (Magic.parse_options): skip system call when
2098 * IPython/Magic.py (Magic.parse_options): skip system call when
2095 there are no options to look for. Faster, cleaner for the common
2099 there are no options to look for. Faster, cleaner for the common
2096 case.
2100 case.
2097
2101
2098 * Documentation: many updates to the manual: describing Windows
2102 * Documentation: many updates to the manual: describing Windows
2099 support better, Gnuplot updates, credits, misc small stuff. Also
2103 support better, Gnuplot updates, credits, misc small stuff. Also
2100 updated the new_design doc a bit.
2104 updated the new_design doc a bit.
2101
2105
2102 2004-05-06 *** Released version 0.6.0.rc1
2106 2004-05-06 *** Released version 0.6.0.rc1
2103
2107
2104 2004-05-06 Fernando Perez <fperez@colorado.edu>
2108 2004-05-06 Fernando Perez <fperez@colorado.edu>
2105
2109
2106 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2110 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
2107 operations to use the vastly more efficient list/''.join() method.
2111 operations to use the vastly more efficient list/''.join() method.
2108 (FormattedTB.text): Fix
2112 (FormattedTB.text): Fix
2109 http://www.scipy.net/roundup/ipython/issue12 - exception source
2113 http://www.scipy.net/roundup/ipython/issue12 - exception source
2110 extract not updated after reload. Thanks to Mike Salib
2114 extract not updated after reload. Thanks to Mike Salib
2111 <msalib-AT-mit.edu> for pinning the source of the problem.
2115 <msalib-AT-mit.edu> for pinning the source of the problem.
2112 Fortunately, the solution works inside ipython and doesn't require
2116 Fortunately, the solution works inside ipython and doesn't require
2113 any changes to python proper.
2117 any changes to python proper.
2114
2118
2115 * IPython/Magic.py (Magic.parse_options): Improved to process the
2119 * IPython/Magic.py (Magic.parse_options): Improved to process the
2116 argument list as a true shell would (by actually using the
2120 argument list as a true shell would (by actually using the
2117 underlying system shell). This way, all @magics automatically get
2121 underlying system shell). This way, all @magics automatically get
2118 shell expansion for variables. Thanks to a comment by Alex
2122 shell expansion for variables. Thanks to a comment by Alex
2119 Schmolck.
2123 Schmolck.
2120
2124
2121 2004-04-04 Fernando Perez <fperez@colorado.edu>
2125 2004-04-04 Fernando Perez <fperez@colorado.edu>
2122
2126
2123 * IPython/iplib.py (InteractiveShell.interact): Added a special
2127 * IPython/iplib.py (InteractiveShell.interact): Added a special
2124 trap for a debugger quit exception, which is basically impossible
2128 trap for a debugger quit exception, which is basically impossible
2125 to handle by normal mechanisms, given what pdb does to the stack.
2129 to handle by normal mechanisms, given what pdb does to the stack.
2126 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2130 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
2127
2131
2128 2004-04-03 Fernando Perez <fperez@colorado.edu>
2132 2004-04-03 Fernando Perez <fperez@colorado.edu>
2129
2133
2130 * IPython/genutils.py (Term): Standardized the names of the Term
2134 * IPython/genutils.py (Term): Standardized the names of the Term
2131 class streams to cin/cout/cerr, following C++ naming conventions
2135 class streams to cin/cout/cerr, following C++ naming conventions
2132 (I can't use in/out/err because 'in' is not a valid attribute
2136 (I can't use in/out/err because 'in' is not a valid attribute
2133 name).
2137 name).
2134
2138
2135 * IPython/iplib.py (InteractiveShell.interact): don't increment
2139 * IPython/iplib.py (InteractiveShell.interact): don't increment
2136 the prompt if there's no user input. By Daniel 'Dang' Griffith
2140 the prompt if there's no user input. By Daniel 'Dang' Griffith
2137 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2141 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
2138 Francois Pinard.
2142 Francois Pinard.
2139
2143
2140 2004-04-02 Fernando Perez <fperez@colorado.edu>
2144 2004-04-02 Fernando Perez <fperez@colorado.edu>
2141
2145
2142 * IPython/genutils.py (Stream.__init__): Modified to survive at
2146 * IPython/genutils.py (Stream.__init__): Modified to survive at
2143 least importing in contexts where stdin/out/err aren't true file
2147 least importing in contexts where stdin/out/err aren't true file
2144 objects, such as PyCrust (they lack fileno() and mode). However,
2148 objects, such as PyCrust (they lack fileno() and mode). However,
2145 the recovery facilities which rely on these things existing will
2149 the recovery facilities which rely on these things existing will
2146 not work.
2150 not work.
2147
2151
2148 2004-04-01 Fernando Perez <fperez@colorado.edu>
2152 2004-04-01 Fernando Perez <fperez@colorado.edu>
2149
2153
2150 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2154 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
2151 use the new getoutputerror() function, so it properly
2155 use the new getoutputerror() function, so it properly
2152 distinguishes stdout/err.
2156 distinguishes stdout/err.
2153
2157
2154 * IPython/genutils.py (getoutputerror): added a function to
2158 * IPython/genutils.py (getoutputerror): added a function to
2155 capture separately the standard output and error of a command.
2159 capture separately the standard output and error of a command.
2156 After a comment from dang on the mailing lists. This code is
2160 After a comment from dang on the mailing lists. This code is
2157 basically a modified version of commands.getstatusoutput(), from
2161 basically a modified version of commands.getstatusoutput(), from
2158 the standard library.
2162 the standard library.
2159
2163
2160 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2164 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
2161 '!!' as a special syntax (shorthand) to access @sx.
2165 '!!' as a special syntax (shorthand) to access @sx.
2162
2166
2163 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2167 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
2164 command and return its output as a list split on '\n'.
2168 command and return its output as a list split on '\n'.
2165
2169
2166 2004-03-31 Fernando Perez <fperez@colorado.edu>
2170 2004-03-31 Fernando Perez <fperez@colorado.edu>
2167
2171
2168 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2172 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
2169 method to dictionaries used as FakeModule instances if they lack
2173 method to dictionaries used as FakeModule instances if they lack
2170 it. At least pydoc in python2.3 breaks for runtime-defined
2174 it. At least pydoc in python2.3 breaks for runtime-defined
2171 functions without this hack. At some point I need to _really_
2175 functions without this hack. At some point I need to _really_
2172 understand what FakeModule is doing, because it's a gross hack.
2176 understand what FakeModule is doing, because it's a gross hack.
2173 But it solves Arnd's problem for now...
2177 But it solves Arnd's problem for now...
2174
2178
2175 2004-02-27 Fernando Perez <fperez@colorado.edu>
2179 2004-02-27 Fernando Perez <fperez@colorado.edu>
2176
2180
2177 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2181 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
2178 mode would behave erratically. Also increased the number of
2182 mode would behave erratically. Also increased the number of
2179 possible logs in rotate mod to 999. Thanks to Rod Holland
2183 possible logs in rotate mod to 999. Thanks to Rod Holland
2180 <rhh@StructureLABS.com> for the report and fixes.
2184 <rhh@StructureLABS.com> for the report and fixes.
2181
2185
2182 2004-02-26 Fernando Perez <fperez@colorado.edu>
2186 2004-02-26 Fernando Perez <fperez@colorado.edu>
2183
2187
2184 * IPython/genutils.py (page): Check that the curses module really
2188 * IPython/genutils.py (page): Check that the curses module really
2185 has the initscr attribute before trying to use it. For some
2189 has the initscr attribute before trying to use it. For some
2186 reason, the Solaris curses module is missing this. I think this
2190 reason, the Solaris curses module is missing this. I think this
2187 should be considered a Solaris python bug, but I'm not sure.
2191 should be considered a Solaris python bug, but I'm not sure.
2188
2192
2189 2004-01-17 Fernando Perez <fperez@colorado.edu>
2193 2004-01-17 Fernando Perez <fperez@colorado.edu>
2190
2194
2191 * IPython/genutils.py (Stream.__init__): Changes to try to make
2195 * IPython/genutils.py (Stream.__init__): Changes to try to make
2192 ipython robust against stdin/out/err being closed by the user.
2196 ipython robust against stdin/out/err being closed by the user.
2193 This is 'user error' (and blocks a normal python session, at least
2197 This is 'user error' (and blocks a normal python session, at least
2194 the stdout case). However, Ipython should be able to survive such
2198 the stdout case). However, Ipython should be able to survive such
2195 instances of abuse as gracefully as possible. To simplify the
2199 instances of abuse as gracefully as possible. To simplify the
2196 coding and maintain compatibility with Gary Bishop's Term
2200 coding and maintain compatibility with Gary Bishop's Term
2197 contributions, I've made use of classmethods for this. I think
2201 contributions, I've made use of classmethods for this. I think
2198 this introduces a dependency on python 2.2.
2202 this introduces a dependency on python 2.2.
2199
2203
2200 2004-01-13 Fernando Perez <fperez@colorado.edu>
2204 2004-01-13 Fernando Perez <fperez@colorado.edu>
2201
2205
2202 * IPython/numutils.py (exp_safe): simplified the code a bit and
2206 * IPython/numutils.py (exp_safe): simplified the code a bit and
2203 removed the need for importing the kinds module altogether.
2207 removed the need for importing the kinds module altogether.
2204
2208
2205 2004-01-06 Fernando Perez <fperez@colorado.edu>
2209 2004-01-06 Fernando Perez <fperez@colorado.edu>
2206
2210
2207 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2211 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
2208 a magic function instead, after some community feedback. No
2212 a magic function instead, after some community feedback. No
2209 special syntax will exist for it, but its name is deliberately
2213 special syntax will exist for it, but its name is deliberately
2210 very short.
2214 very short.
2211
2215
2212 2003-12-20 Fernando Perez <fperez@colorado.edu>
2216 2003-12-20 Fernando Perez <fperez@colorado.edu>
2213
2217
2214 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2218 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
2215 new functionality, to automagically assign the result of a shell
2219 new functionality, to automagically assign the result of a shell
2216 command to a variable. I'll solicit some community feedback on
2220 command to a variable. I'll solicit some community feedback on
2217 this before making it permanent.
2221 this before making it permanent.
2218
2222
2219 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2223 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
2220 requested about callables for which inspect couldn't obtain a
2224 requested about callables for which inspect couldn't obtain a
2221 proper argspec. Thanks to a crash report sent by Etienne
2225 proper argspec. Thanks to a crash report sent by Etienne
2222 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2226 Posthumus <etienne-AT-apple01.cs.vu.nl>.
2223
2227
2224 2003-12-09 Fernando Perez <fperez@colorado.edu>
2228 2003-12-09 Fernando Perez <fperez@colorado.edu>
2225
2229
2226 * IPython/genutils.py (page): patch for the pager to work across
2230 * IPython/genutils.py (page): patch for the pager to work across
2227 various versions of Windows. By Gary Bishop.
2231 various versions of Windows. By Gary Bishop.
2228
2232
2229 2003-12-04 Fernando Perez <fperez@colorado.edu>
2233 2003-12-04 Fernando Perez <fperez@colorado.edu>
2230
2234
2231 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2235 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
2232 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2236 Gnuplot.py version 1.7, whose internal names changed quite a bit.
2233 While I tested this and it looks ok, there may still be corner
2237 While I tested this and it looks ok, there may still be corner
2234 cases I've missed.
2238 cases I've missed.
2235
2239
2236 2003-12-01 Fernando Perez <fperez@colorado.edu>
2240 2003-12-01 Fernando Perez <fperez@colorado.edu>
2237
2241
2238 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2242 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
2239 where a line like 'p,q=1,2' would fail because the automagic
2243 where a line like 'p,q=1,2' would fail because the automagic
2240 system would be triggered for @p.
2244 system would be triggered for @p.
2241
2245
2242 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2246 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
2243 cleanups, code unmodified.
2247 cleanups, code unmodified.
2244
2248
2245 * IPython/genutils.py (Term): added a class for IPython to handle
2249 * IPython/genutils.py (Term): added a class for IPython to handle
2246 output. In most cases it will just be a proxy for stdout/err, but
2250 output. In most cases it will just be a proxy for stdout/err, but
2247 having this allows modifications to be made for some platforms,
2251 having this allows modifications to be made for some platforms,
2248 such as handling color escapes under Windows. All of this code
2252 such as handling color escapes under Windows. All of this code
2249 was contributed by Gary Bishop, with minor modifications by me.
2253 was contributed by Gary Bishop, with minor modifications by me.
2250 The actual changes affect many files.
2254 The actual changes affect many files.
2251
2255
2252 2003-11-30 Fernando Perez <fperez@colorado.edu>
2256 2003-11-30 Fernando Perez <fperez@colorado.edu>
2253
2257
2254 * IPython/iplib.py (file_matches): new completion code, courtesy
2258 * IPython/iplib.py (file_matches): new completion code, courtesy
2255 of Jeff Collins. This enables filename completion again under
2259 of Jeff Collins. This enables filename completion again under
2256 python 2.3, which disabled it at the C level.
2260 python 2.3, which disabled it at the C level.
2257
2261
2258 2003-11-11 Fernando Perez <fperez@colorado.edu>
2262 2003-11-11 Fernando Perez <fperez@colorado.edu>
2259
2263
2260 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2264 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
2261 for Numeric.array(map(...)), but often convenient.
2265 for Numeric.array(map(...)), but often convenient.
2262
2266
2263 2003-11-05 Fernando Perez <fperez@colorado.edu>
2267 2003-11-05 Fernando Perez <fperez@colorado.edu>
2264
2268
2265 * IPython/numutils.py (frange): Changed a call from int() to
2269 * IPython/numutils.py (frange): Changed a call from int() to
2266 int(round()) to prevent a problem reported with arange() in the
2270 int(round()) to prevent a problem reported with arange() in the
2267 numpy list.
2271 numpy list.
2268
2272
2269 2003-10-06 Fernando Perez <fperez@colorado.edu>
2273 2003-10-06 Fernando Perez <fperez@colorado.edu>
2270
2274
2271 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2275 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
2272 prevent crashes if sys lacks an argv attribute (it happens with
2276 prevent crashes if sys lacks an argv attribute (it happens with
2273 embedded interpreters which build a bare-bones sys module).
2277 embedded interpreters which build a bare-bones sys module).
2274 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2278 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
2275
2279
2276 2003-09-24 Fernando Perez <fperez@colorado.edu>
2280 2003-09-24 Fernando Perez <fperez@colorado.edu>
2277
2281
2278 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2282 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
2279 to protect against poorly written user objects where __getattr__
2283 to protect against poorly written user objects where __getattr__
2280 raises exceptions other than AttributeError. Thanks to a bug
2284 raises exceptions other than AttributeError. Thanks to a bug
2281 report by Oliver Sander <osander-AT-gmx.de>.
2285 report by Oliver Sander <osander-AT-gmx.de>.
2282
2286
2283 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2287 * IPython/FakeModule.py (FakeModule.__repr__): this method was
2284 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2288 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
2285
2289
2286 2003-09-09 Fernando Perez <fperez@colorado.edu>
2290 2003-09-09 Fernando Perez <fperez@colorado.edu>
2287
2291
2288 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2292 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2289 unpacking a list whith a callable as first element would
2293 unpacking a list whith a callable as first element would
2290 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2294 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
2291 Collins.
2295 Collins.
2292
2296
2293 2003-08-25 *** Released version 0.5.0
2297 2003-08-25 *** Released version 0.5.0
2294
2298
2295 2003-08-22 Fernando Perez <fperez@colorado.edu>
2299 2003-08-22 Fernando Perez <fperez@colorado.edu>
2296
2300
2297 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2301 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
2298 improperly defined user exceptions. Thanks to feedback from Mark
2302 improperly defined user exceptions. Thanks to feedback from Mark
2299 Russell <mrussell-AT-verio.net>.
2303 Russell <mrussell-AT-verio.net>.
2300
2304
2301 2003-08-20 Fernando Perez <fperez@colorado.edu>
2305 2003-08-20 Fernando Perez <fperez@colorado.edu>
2302
2306
2303 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2307 * IPython/OInspect.py (Inspector.pinfo): changed String Form
2304 printing so that it would print multi-line string forms starting
2308 printing so that it would print multi-line string forms starting
2305 with a new line. This way the formatting is better respected for
2309 with a new line. This way the formatting is better respected for
2306 objects which work hard to make nice string forms.
2310 objects which work hard to make nice string forms.
2307
2311
2308 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2312 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
2309 autocall would overtake data access for objects with both
2313 autocall would overtake data access for objects with both
2310 __getitem__ and __call__.
2314 __getitem__ and __call__.
2311
2315
2312 2003-08-19 *** Released version 0.5.0-rc1
2316 2003-08-19 *** Released version 0.5.0-rc1
2313
2317
2314 2003-08-19 Fernando Perez <fperez@colorado.edu>
2318 2003-08-19 Fernando Perez <fperez@colorado.edu>
2315
2319
2316 * IPython/deep_reload.py (load_tail): single tiny change here
2320 * IPython/deep_reload.py (load_tail): single tiny change here
2317 seems to fix the long-standing bug of dreload() failing to work
2321 seems to fix the long-standing bug of dreload() failing to work
2318 for dotted names. But this module is pretty tricky, so I may have
2322 for dotted names. But this module is pretty tricky, so I may have
2319 missed some subtlety. Needs more testing!.
2323 missed some subtlety. Needs more testing!.
2320
2324
2321 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2325 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
2322 exceptions which have badly implemented __str__ methods.
2326 exceptions which have badly implemented __str__ methods.
2323 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2327 (VerboseTB.text): harden against inspect.getinnerframes crashing,
2324 which I've been getting reports about from Python 2.3 users. I
2328 which I've been getting reports about from Python 2.3 users. I
2325 wish I had a simple test case to reproduce the problem, so I could
2329 wish I had a simple test case to reproduce the problem, so I could
2326 either write a cleaner workaround or file a bug report if
2330 either write a cleaner workaround or file a bug report if
2327 necessary.
2331 necessary.
2328
2332
2329 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2333 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
2330 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2334 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
2331 a bug report by Tjabo Kloppenburg.
2335 a bug report by Tjabo Kloppenburg.
2332
2336
2333 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2337 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
2334 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2338 crashes. Wrapped the pdb call in a blanket try/except, since pdb
2335 seems rather unstable. Thanks to a bug report by Tjabo
2339 seems rather unstable. Thanks to a bug report by Tjabo
2336 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2340 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
2337
2341
2338 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2342 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
2339 this out soon because of the critical fixes in the inner loop for
2343 this out soon because of the critical fixes in the inner loop for
2340 generators.
2344 generators.
2341
2345
2342 * IPython/Magic.py (Magic.getargspec): removed. This (and
2346 * IPython/Magic.py (Magic.getargspec): removed. This (and
2343 _get_def) have been obsoleted by OInspect for a long time, I
2347 _get_def) have been obsoleted by OInspect for a long time, I
2344 hadn't noticed that they were dead code.
2348 hadn't noticed that they were dead code.
2345 (Magic._ofind): restored _ofind functionality for a few literals
2349 (Magic._ofind): restored _ofind functionality for a few literals
2346 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2350 (those in ["''",'""','[]','{}','()']). But it won't work anymore
2347 for things like "hello".capitalize?, since that would require a
2351 for things like "hello".capitalize?, since that would require a
2348 potentially dangerous eval() again.
2352 potentially dangerous eval() again.
2349
2353
2350 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2354 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
2351 logic a bit more to clean up the escapes handling and minimize the
2355 logic a bit more to clean up the escapes handling and minimize the
2352 use of _ofind to only necessary cases. The interactive 'feel' of
2356 use of _ofind to only necessary cases. The interactive 'feel' of
2353 IPython should have improved quite a bit with the changes in
2357 IPython should have improved quite a bit with the changes in
2354 _prefilter and _ofind (besides being far safer than before).
2358 _prefilter and _ofind (besides being far safer than before).
2355
2359
2356 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2360 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
2357 obscure, never reported). Edit would fail to find the object to
2361 obscure, never reported). Edit would fail to find the object to
2358 edit under some circumstances.
2362 edit under some circumstances.
2359 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2363 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
2360 which were causing double-calling of generators. Those eval calls
2364 which were causing double-calling of generators. Those eval calls
2361 were _very_ dangerous, since code with side effects could be
2365 were _very_ dangerous, since code with side effects could be
2362 triggered. As they say, 'eval is evil'... These were the
2366 triggered. As they say, 'eval is evil'... These were the
2363 nastiest evals in IPython. Besides, _ofind is now far simpler,
2367 nastiest evals in IPython. Besides, _ofind is now far simpler,
2364 and it should also be quite a bit faster. Its use of inspect is
2368 and it should also be quite a bit faster. Its use of inspect is
2365 also safer, so perhaps some of the inspect-related crashes I've
2369 also safer, so perhaps some of the inspect-related crashes I've
2366 seen lately with Python 2.3 might be taken care of. That will
2370 seen lately with Python 2.3 might be taken care of. That will
2367 need more testing.
2371 need more testing.
2368
2372
2369 2003-08-17 Fernando Perez <fperez@colorado.edu>
2373 2003-08-17 Fernando Perez <fperez@colorado.edu>
2370
2374
2371 * IPython/iplib.py (InteractiveShell._prefilter): significant
2375 * IPython/iplib.py (InteractiveShell._prefilter): significant
2372 simplifications to the logic for handling user escapes. Faster
2376 simplifications to the logic for handling user escapes. Faster
2373 and simpler code.
2377 and simpler code.
2374
2378
2375 2003-08-14 Fernando Perez <fperez@colorado.edu>
2379 2003-08-14 Fernando Perez <fperez@colorado.edu>
2376
2380
2377 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2381 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
2378 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2382 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
2379 but it should be quite a bit faster. And the recursive version
2383 but it should be quite a bit faster. And the recursive version
2380 generated O(log N) intermediate storage for all rank>1 arrays,
2384 generated O(log N) intermediate storage for all rank>1 arrays,
2381 even if they were contiguous.
2385 even if they were contiguous.
2382 (l1norm): Added this function.
2386 (l1norm): Added this function.
2383 (norm): Added this function for arbitrary norms (including
2387 (norm): Added this function for arbitrary norms (including
2384 l-infinity). l1 and l2 are still special cases for convenience
2388 l-infinity). l1 and l2 are still special cases for convenience
2385 and speed.
2389 and speed.
2386
2390
2387 2003-08-03 Fernando Perez <fperez@colorado.edu>
2391 2003-08-03 Fernando Perez <fperez@colorado.edu>
2388
2392
2389 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2393 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
2390 exceptions, which now raise PendingDeprecationWarnings in Python
2394 exceptions, which now raise PendingDeprecationWarnings in Python
2391 2.3. There were some in Magic and some in Gnuplot2.
2395 2.3. There were some in Magic and some in Gnuplot2.
2392
2396
2393 2003-06-30 Fernando Perez <fperez@colorado.edu>
2397 2003-06-30 Fernando Perez <fperez@colorado.edu>
2394
2398
2395 * IPython/genutils.py (page): modified to call curses only for
2399 * IPython/genutils.py (page): modified to call curses only for
2396 terminals where TERM=='xterm'. After problems under many other
2400 terminals where TERM=='xterm'. After problems under many other
2397 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2401 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
2398
2402
2399 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2403 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
2400 would be triggered when readline was absent. This was just an old
2404 would be triggered when readline was absent. This was just an old
2401 debugging statement I'd forgotten to take out.
2405 debugging statement I'd forgotten to take out.
2402
2406
2403 2003-06-20 Fernando Perez <fperez@colorado.edu>
2407 2003-06-20 Fernando Perez <fperez@colorado.edu>
2404
2408
2405 * IPython/genutils.py (clock): modified to return only user time
2409 * IPython/genutils.py (clock): modified to return only user time
2406 (not counting system time), after a discussion on scipy. While
2410 (not counting system time), after a discussion on scipy. While
2407 system time may be a useful quantity occasionally, it may much
2411 system time may be a useful quantity occasionally, it may much
2408 more easily be skewed by occasional swapping or other similar
2412 more easily be skewed by occasional swapping or other similar
2409 activity.
2413 activity.
2410
2414
2411 2003-06-05 Fernando Perez <fperez@colorado.edu>
2415 2003-06-05 Fernando Perez <fperez@colorado.edu>
2412
2416
2413 * IPython/numutils.py (identity): new function, for building
2417 * IPython/numutils.py (identity): new function, for building
2414 arbitrary rank Kronecker deltas (mostly backwards compatible with
2418 arbitrary rank Kronecker deltas (mostly backwards compatible with
2415 Numeric.identity)
2419 Numeric.identity)
2416
2420
2417 2003-06-03 Fernando Perez <fperez@colorado.edu>
2421 2003-06-03 Fernando Perez <fperez@colorado.edu>
2418
2422
2419 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2423 * IPython/iplib.py (InteractiveShell.handle_magic): protect
2420 arguments passed to magics with spaces, to allow trailing '\' to
2424 arguments passed to magics with spaces, to allow trailing '\' to
2421 work normally (mainly for Windows users).
2425 work normally (mainly for Windows users).
2422
2426
2423 2003-05-29 Fernando Perez <fperez@colorado.edu>
2427 2003-05-29 Fernando Perez <fperez@colorado.edu>
2424
2428
2425 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2429 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
2426 instead of pydoc.help. This fixes a bizarre behavior where
2430 instead of pydoc.help. This fixes a bizarre behavior where
2427 printing '%s' % locals() would trigger the help system. Now
2431 printing '%s' % locals() would trigger the help system. Now
2428 ipython behaves like normal python does.
2432 ipython behaves like normal python does.
2429
2433
2430 Note that if one does 'from pydoc import help', the bizarre
2434 Note that if one does 'from pydoc import help', the bizarre
2431 behavior returns, but this will also happen in normal python, so
2435 behavior returns, but this will also happen in normal python, so
2432 it's not an ipython bug anymore (it has to do with how pydoc.help
2436 it's not an ipython bug anymore (it has to do with how pydoc.help
2433 is implemented).
2437 is implemented).
2434
2438
2435 2003-05-22 Fernando Perez <fperez@colorado.edu>
2439 2003-05-22 Fernando Perez <fperez@colorado.edu>
2436
2440
2437 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2441 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
2438 return [] instead of None when nothing matches, also match to end
2442 return [] instead of None when nothing matches, also match to end
2439 of line. Patch by Gary Bishop.
2443 of line. Patch by Gary Bishop.
2440
2444
2441 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2445 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
2442 protection as before, for files passed on the command line. This
2446 protection as before, for files passed on the command line. This
2443 prevents the CrashHandler from kicking in if user files call into
2447 prevents the CrashHandler from kicking in if user files call into
2444 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2448 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
2445 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2449 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
2446
2450
2447 2003-05-20 *** Released version 0.4.0
2451 2003-05-20 *** Released version 0.4.0
2448
2452
2449 2003-05-20 Fernando Perez <fperez@colorado.edu>
2453 2003-05-20 Fernando Perez <fperez@colorado.edu>
2450
2454
2451 * setup.py: added support for manpages. It's a bit hackish b/c of
2455 * setup.py: added support for manpages. It's a bit hackish b/c of
2452 a bug in the way the bdist_rpm distutils target handles gzipped
2456 a bug in the way the bdist_rpm distutils target handles gzipped
2453 manpages, but it works. After a patch by Jack.
2457 manpages, but it works. After a patch by Jack.
2454
2458
2455 2003-05-19 Fernando Perez <fperez@colorado.edu>
2459 2003-05-19 Fernando Perez <fperez@colorado.edu>
2456
2460
2457 * IPython/numutils.py: added a mockup of the kinds module, since
2461 * IPython/numutils.py: added a mockup of the kinds module, since
2458 it was recently removed from Numeric. This way, numutils will
2462 it was recently removed from Numeric. This way, numutils will
2459 work for all users even if they are missing kinds.
2463 work for all users even if they are missing kinds.
2460
2464
2461 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2465 * IPython/Magic.py (Magic._ofind): Harden against an inspect
2462 failure, which can occur with SWIG-wrapped extensions. After a
2466 failure, which can occur with SWIG-wrapped extensions. After a
2463 crash report from Prabhu.
2467 crash report from Prabhu.
2464
2468
2465 2003-05-16 Fernando Perez <fperez@colorado.edu>
2469 2003-05-16 Fernando Perez <fperez@colorado.edu>
2466
2470
2467 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2471 * IPython/iplib.py (InteractiveShell.excepthook): New method to
2468 protect ipython from user code which may call directly
2472 protect ipython from user code which may call directly
2469 sys.excepthook (this looks like an ipython crash to the user, even
2473 sys.excepthook (this looks like an ipython crash to the user, even
2470 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2474 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2471 This is especially important to help users of WxWindows, but may
2475 This is especially important to help users of WxWindows, but may
2472 also be useful in other cases.
2476 also be useful in other cases.
2473
2477
2474 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2478 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
2475 an optional tb_offset to be specified, and to preserve exception
2479 an optional tb_offset to be specified, and to preserve exception
2476 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2480 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
2477
2481
2478 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2482 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
2479
2483
2480 2003-05-15 Fernando Perez <fperez@colorado.edu>
2484 2003-05-15 Fernando Perez <fperez@colorado.edu>
2481
2485
2482 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2486 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
2483 installing for a new user under Windows.
2487 installing for a new user under Windows.
2484
2488
2485 2003-05-12 Fernando Perez <fperez@colorado.edu>
2489 2003-05-12 Fernando Perez <fperez@colorado.edu>
2486
2490
2487 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2491 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
2488 handler for Emacs comint-based lines. Currently it doesn't do
2492 handler for Emacs comint-based lines. Currently it doesn't do
2489 much (but importantly, it doesn't update the history cache). In
2493 much (but importantly, it doesn't update the history cache). In
2490 the future it may be expanded if Alex needs more functionality
2494 the future it may be expanded if Alex needs more functionality
2491 there.
2495 there.
2492
2496
2493 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2497 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
2494 info to crash reports.
2498 info to crash reports.
2495
2499
2496 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2500 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
2497 just like Python's -c. Also fixed crash with invalid -color
2501 just like Python's -c. Also fixed crash with invalid -color
2498 option value at startup. Thanks to Will French
2502 option value at startup. Thanks to Will French
2499 <wfrench-AT-bestweb.net> for the bug report.
2503 <wfrench-AT-bestweb.net> for the bug report.
2500
2504
2501 2003-05-09 Fernando Perez <fperez@colorado.edu>
2505 2003-05-09 Fernando Perez <fperez@colorado.edu>
2502
2506
2503 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2507 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
2504 to EvalDict (it's a mapping, after all) and simplified its code
2508 to EvalDict (it's a mapping, after all) and simplified its code
2505 quite a bit, after a nice discussion on c.l.py where Gustavo
2509 quite a bit, after a nice discussion on c.l.py where Gustavo
2506 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2510 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
2507
2511
2508 2003-04-30 Fernando Perez <fperez@colorado.edu>
2512 2003-04-30 Fernando Perez <fperez@colorado.edu>
2509
2513
2510 * IPython/genutils.py (timings_out): modified it to reduce its
2514 * IPython/genutils.py (timings_out): modified it to reduce its
2511 overhead in the common reps==1 case.
2515 overhead in the common reps==1 case.
2512
2516
2513 2003-04-29 Fernando Perez <fperez@colorado.edu>
2517 2003-04-29 Fernando Perez <fperez@colorado.edu>
2514
2518
2515 * IPython/genutils.py (timings_out): Modified to use the resource
2519 * IPython/genutils.py (timings_out): Modified to use the resource
2516 module, which avoids the wraparound problems of time.clock().
2520 module, which avoids the wraparound problems of time.clock().
2517
2521
2518 2003-04-17 *** Released version 0.2.15pre4
2522 2003-04-17 *** Released version 0.2.15pre4
2519
2523
2520 2003-04-17 Fernando Perez <fperez@colorado.edu>
2524 2003-04-17 Fernando Perez <fperez@colorado.edu>
2521
2525
2522 * setup.py (scriptfiles): Split windows-specific stuff over to a
2526 * setup.py (scriptfiles): Split windows-specific stuff over to a
2523 separate file, in an attempt to have a Windows GUI installer.
2527 separate file, in an attempt to have a Windows GUI installer.
2524 That didn't work, but part of the groundwork is done.
2528 That didn't work, but part of the groundwork is done.
2525
2529
2526 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2530 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
2527 indent/unindent with 4 spaces. Particularly useful in combination
2531 indent/unindent with 4 spaces. Particularly useful in combination
2528 with the new auto-indent option.
2532 with the new auto-indent option.
2529
2533
2530 2003-04-16 Fernando Perez <fperez@colorado.edu>
2534 2003-04-16 Fernando Perez <fperez@colorado.edu>
2531
2535
2532 * IPython/Magic.py: various replacements of self.rc for
2536 * IPython/Magic.py: various replacements of self.rc for
2533 self.shell.rc. A lot more remains to be done to fully disentangle
2537 self.shell.rc. A lot more remains to be done to fully disentangle
2534 this class from the main Shell class.
2538 this class from the main Shell class.
2535
2539
2536 * IPython/GnuplotRuntime.py: added checks for mouse support so
2540 * IPython/GnuplotRuntime.py: added checks for mouse support so
2537 that we don't try to enable it if the current gnuplot doesn't
2541 that we don't try to enable it if the current gnuplot doesn't
2538 really support it. Also added checks so that we don't try to
2542 really support it. Also added checks so that we don't try to
2539 enable persist under Windows (where Gnuplot doesn't recognize the
2543 enable persist under Windows (where Gnuplot doesn't recognize the
2540 option).
2544 option).
2541
2545
2542 * IPython/iplib.py (InteractiveShell.interact): Added optional
2546 * IPython/iplib.py (InteractiveShell.interact): Added optional
2543 auto-indenting code, after a patch by King C. Shu
2547 auto-indenting code, after a patch by King C. Shu
2544 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2548 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
2545 get along well with pasting indented code. If I ever figure out
2549 get along well with pasting indented code. If I ever figure out
2546 how to make that part go well, it will become on by default.
2550 how to make that part go well, it will become on by default.
2547
2551
2548 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2552 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
2549 crash ipython if there was an unmatched '%' in the user's prompt
2553 crash ipython if there was an unmatched '%' in the user's prompt
2550 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2554 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2551
2555
2552 * IPython/iplib.py (InteractiveShell.interact): removed the
2556 * IPython/iplib.py (InteractiveShell.interact): removed the
2553 ability to ask the user whether he wants to crash or not at the
2557 ability to ask the user whether he wants to crash or not at the
2554 'last line' exception handler. Calling functions at that point
2558 'last line' exception handler. Calling functions at that point
2555 changes the stack, and the error reports would have incorrect
2559 changes the stack, and the error reports would have incorrect
2556 tracebacks.
2560 tracebacks.
2557
2561
2558 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2562 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
2559 pass through a peger a pretty-printed form of any object. After a
2563 pass through a peger a pretty-printed form of any object. After a
2560 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2564 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
2561
2565
2562 2003-04-14 Fernando Perez <fperez@colorado.edu>
2566 2003-04-14 Fernando Perez <fperez@colorado.edu>
2563
2567
2564 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2568 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
2565 all files in ~ would be modified at first install (instead of
2569 all files in ~ would be modified at first install (instead of
2566 ~/.ipython). This could be potentially disastrous, as the
2570 ~/.ipython). This could be potentially disastrous, as the
2567 modification (make line-endings native) could damage binary files.
2571 modification (make line-endings native) could damage binary files.
2568
2572
2569 2003-04-10 Fernando Perez <fperez@colorado.edu>
2573 2003-04-10 Fernando Perez <fperez@colorado.edu>
2570
2574
2571 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2575 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
2572 handle only lines which are invalid python. This now means that
2576 handle only lines which are invalid python. This now means that
2573 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2577 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
2574 for the bug report.
2578 for the bug report.
2575
2579
2576 2003-04-01 Fernando Perez <fperez@colorado.edu>
2580 2003-04-01 Fernando Perez <fperez@colorado.edu>
2577
2581
2578 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2582 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
2579 where failing to set sys.last_traceback would crash pdb.pm().
2583 where failing to set sys.last_traceback would crash pdb.pm().
2580 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2584 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
2581 report.
2585 report.
2582
2586
2583 2003-03-25 Fernando Perez <fperez@colorado.edu>
2587 2003-03-25 Fernando Perez <fperez@colorado.edu>
2584
2588
2585 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2589 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
2586 before printing it (it had a lot of spurious blank lines at the
2590 before printing it (it had a lot of spurious blank lines at the
2587 end).
2591 end).
2588
2592
2589 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2593 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
2590 output would be sent 21 times! Obviously people don't use this
2594 output would be sent 21 times! Obviously people don't use this
2591 too often, or I would have heard about it.
2595 too often, or I would have heard about it.
2592
2596
2593 2003-03-24 Fernando Perez <fperez@colorado.edu>
2597 2003-03-24 Fernando Perez <fperez@colorado.edu>
2594
2598
2595 * setup.py (scriptfiles): renamed the data_files parameter from
2599 * setup.py (scriptfiles): renamed the data_files parameter from
2596 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2600 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
2597 for the patch.
2601 for the patch.
2598
2602
2599 2003-03-20 Fernando Perez <fperez@colorado.edu>
2603 2003-03-20 Fernando Perez <fperez@colorado.edu>
2600
2604
2601 * IPython/genutils.py (error): added error() and fatal()
2605 * IPython/genutils.py (error): added error() and fatal()
2602 functions.
2606 functions.
2603
2607
2604 2003-03-18 *** Released version 0.2.15pre3
2608 2003-03-18 *** Released version 0.2.15pre3
2605
2609
2606 2003-03-18 Fernando Perez <fperez@colorado.edu>
2610 2003-03-18 Fernando Perez <fperez@colorado.edu>
2607
2611
2608 * setupext/install_data_ext.py
2612 * setupext/install_data_ext.py
2609 (install_data_ext.initialize_options): Class contributed by Jack
2613 (install_data_ext.initialize_options): Class contributed by Jack
2610 Moffit for fixing the old distutils hack. He is sending this to
2614 Moffit for fixing the old distutils hack. He is sending this to
2611 the distutils folks so in the future we may not need it as a
2615 the distutils folks so in the future we may not need it as a
2612 private fix.
2616 private fix.
2613
2617
2614 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2618 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
2615 changes for Debian packaging. See his patch for full details.
2619 changes for Debian packaging. See his patch for full details.
2616 The old distutils hack of making the ipythonrc* files carry a
2620 The old distutils hack of making the ipythonrc* files carry a
2617 bogus .py extension is gone, at last. Examples were moved to a
2621 bogus .py extension is gone, at last. Examples were moved to a
2618 separate subdir under doc/, and the separate executable scripts
2622 separate subdir under doc/, and the separate executable scripts
2619 now live in their own directory. Overall a great cleanup. The
2623 now live in their own directory. Overall a great cleanup. The
2620 manual was updated to use the new files, and setup.py has been
2624 manual was updated to use the new files, and setup.py has been
2621 fixed for this setup.
2625 fixed for this setup.
2622
2626
2623 * IPython/PyColorize.py (Parser.usage): made non-executable and
2627 * IPython/PyColorize.py (Parser.usage): made non-executable and
2624 created a pycolor wrapper around it to be included as a script.
2628 created a pycolor wrapper around it to be included as a script.
2625
2629
2626 2003-03-12 *** Released version 0.2.15pre2
2630 2003-03-12 *** Released version 0.2.15pre2
2627
2631
2628 2003-03-12 Fernando Perez <fperez@colorado.edu>
2632 2003-03-12 Fernando Perez <fperez@colorado.edu>
2629
2633
2630 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2634 * IPython/ColorANSI.py (make_color_table): Finally fixed the
2631 long-standing problem with garbage characters in some terminals.
2635 long-standing problem with garbage characters in some terminals.
2632 The issue was really that the \001 and \002 escapes must _only_ be
2636 The issue was really that the \001 and \002 escapes must _only_ be
2633 passed to input prompts (which call readline), but _never_ to
2637 passed to input prompts (which call readline), but _never_ to
2634 normal text to be printed on screen. I changed ColorANSI to have
2638 normal text to be printed on screen. I changed ColorANSI to have
2635 two classes: TermColors and InputTermColors, each with the
2639 two classes: TermColors and InputTermColors, each with the
2636 appropriate escapes for input prompts or normal text. The code in
2640 appropriate escapes for input prompts or normal text. The code in
2637 Prompts.py got slightly more complicated, but this very old and
2641 Prompts.py got slightly more complicated, but this very old and
2638 annoying bug is finally fixed.
2642 annoying bug is finally fixed.
2639
2643
2640 All the credit for nailing down the real origin of this problem
2644 All the credit for nailing down the real origin of this problem
2641 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2645 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
2642 *Many* thanks to him for spending quite a bit of effort on this.
2646 *Many* thanks to him for spending quite a bit of effort on this.
2643
2647
2644 2003-03-05 *** Released version 0.2.15pre1
2648 2003-03-05 *** Released version 0.2.15pre1
2645
2649
2646 2003-03-03 Fernando Perez <fperez@colorado.edu>
2650 2003-03-03 Fernando Perez <fperez@colorado.edu>
2647
2651
2648 * IPython/FakeModule.py: Moved the former _FakeModule to a
2652 * IPython/FakeModule.py: Moved the former _FakeModule to a
2649 separate file, because it's also needed by Magic (to fix a similar
2653 separate file, because it's also needed by Magic (to fix a similar
2650 pickle-related issue in @run).
2654 pickle-related issue in @run).
2651
2655
2652 2003-03-02 Fernando Perez <fperez@colorado.edu>
2656 2003-03-02 Fernando Perez <fperez@colorado.edu>
2653
2657
2654 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2658 * IPython/Magic.py (Magic.magic_autocall): new magic to control
2655 the autocall option at runtime.
2659 the autocall option at runtime.
2656 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2660 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
2657 across Magic.py to start separating Magic from InteractiveShell.
2661 across Magic.py to start separating Magic from InteractiveShell.
2658 (Magic._ofind): Fixed to return proper namespace for dotted
2662 (Magic._ofind): Fixed to return proper namespace for dotted
2659 names. Before, a dotted name would always return 'not currently
2663 names. Before, a dotted name would always return 'not currently
2660 defined', because it would find the 'parent'. s.x would be found,
2664 defined', because it would find the 'parent'. s.x would be found,
2661 but since 'x' isn't defined by itself, it would get confused.
2665 but since 'x' isn't defined by itself, it would get confused.
2662 (Magic.magic_run): Fixed pickling problems reported by Ralf
2666 (Magic.magic_run): Fixed pickling problems reported by Ralf
2663 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2667 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
2664 that I'd used when Mike Heeter reported similar issues at the
2668 that I'd used when Mike Heeter reported similar issues at the
2665 top-level, but now for @run. It boils down to injecting the
2669 top-level, but now for @run. It boils down to injecting the
2666 namespace where code is being executed with something that looks
2670 namespace where code is being executed with something that looks
2667 enough like a module to fool pickle.dump(). Since a pickle stores
2671 enough like a module to fool pickle.dump(). Since a pickle stores
2668 a named reference to the importing module, we need this for
2672 a named reference to the importing module, we need this for
2669 pickles to save something sensible.
2673 pickles to save something sensible.
2670
2674
2671 * IPython/ipmaker.py (make_IPython): added an autocall option.
2675 * IPython/ipmaker.py (make_IPython): added an autocall option.
2672
2676
2673 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2677 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
2674 the auto-eval code. Now autocalling is an option, and the code is
2678 the auto-eval code. Now autocalling is an option, and the code is
2675 also vastly safer. There is no more eval() involved at all.
2679 also vastly safer. There is no more eval() involved at all.
2676
2680
2677 2003-03-01 Fernando Perez <fperez@colorado.edu>
2681 2003-03-01 Fernando Perez <fperez@colorado.edu>
2678
2682
2679 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2683 * IPython/Magic.py (Magic._ofind): Changed interface to return a
2680 dict with named keys instead of a tuple.
2684 dict with named keys instead of a tuple.
2681
2685
2682 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2686 * IPython: Started using CVS for IPython as of 0.2.15pre1.
2683
2687
2684 * setup.py (make_shortcut): Fixed message about directories
2688 * setup.py (make_shortcut): Fixed message about directories
2685 created during Windows installation (the directories were ok, just
2689 created during Windows installation (the directories were ok, just
2686 the printed message was misleading). Thanks to Chris Liechti
2690 the printed message was misleading). Thanks to Chris Liechti
2687 <cliechti-AT-gmx.net> for the heads up.
2691 <cliechti-AT-gmx.net> for the heads up.
2688
2692
2689 2003-02-21 Fernando Perez <fperez@colorado.edu>
2693 2003-02-21 Fernando Perez <fperez@colorado.edu>
2690
2694
2691 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2695 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
2692 of ValueError exception when checking for auto-execution. This
2696 of ValueError exception when checking for auto-execution. This
2693 one is raised by things like Numeric arrays arr.flat when the
2697 one is raised by things like Numeric arrays arr.flat when the
2694 array is non-contiguous.
2698 array is non-contiguous.
2695
2699
2696 2003-01-31 Fernando Perez <fperez@colorado.edu>
2700 2003-01-31 Fernando Perez <fperez@colorado.edu>
2697
2701
2698 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2702 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
2699 not return any value at all (even though the command would get
2703 not return any value at all (even though the command would get
2700 executed).
2704 executed).
2701 (xsys): Flush stdout right after printing the command to ensure
2705 (xsys): Flush stdout right after printing the command to ensure
2702 proper ordering of commands and command output in the total
2706 proper ordering of commands and command output in the total
2703 output.
2707 output.
2704 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2708 (SystemExec/xsys/bq): Switched the names of xsys/bq and
2705 system/getoutput as defaults. The old ones are kept for
2709 system/getoutput as defaults. The old ones are kept for
2706 compatibility reasons, so no code which uses this library needs
2710 compatibility reasons, so no code which uses this library needs
2707 changing.
2711 changing.
2708
2712
2709 2003-01-27 *** Released version 0.2.14
2713 2003-01-27 *** Released version 0.2.14
2710
2714
2711 2003-01-25 Fernando Perez <fperez@colorado.edu>
2715 2003-01-25 Fernando Perez <fperez@colorado.edu>
2712
2716
2713 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2717 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
2714 functions defined in previous edit sessions could not be re-edited
2718 functions defined in previous edit sessions could not be re-edited
2715 (because the temp files were immediately removed). Now temp files
2719 (because the temp files were immediately removed). Now temp files
2716 are removed only at IPython's exit.
2720 are removed only at IPython's exit.
2717 (Magic.magic_run): Improved @run to perform shell-like expansions
2721 (Magic.magic_run): Improved @run to perform shell-like expansions
2718 on its arguments (~users and $VARS). With this, @run becomes more
2722 on its arguments (~users and $VARS). With this, @run becomes more
2719 like a normal command-line.
2723 like a normal command-line.
2720
2724
2721 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2725 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
2722 bugs related to embedding and cleaned up that code. A fairly
2726 bugs related to embedding and cleaned up that code. A fairly
2723 important one was the impossibility to access the global namespace
2727 important one was the impossibility to access the global namespace
2724 through the embedded IPython (only local variables were visible).
2728 through the embedded IPython (only local variables were visible).
2725
2729
2726 2003-01-14 Fernando Perez <fperez@colorado.edu>
2730 2003-01-14 Fernando Perez <fperez@colorado.edu>
2727
2731
2728 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2732 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
2729 auto-calling to be a bit more conservative. Now it doesn't get
2733 auto-calling to be a bit more conservative. Now it doesn't get
2730 triggered if any of '!=()<>' are in the rest of the input line, to
2734 triggered if any of '!=()<>' are in the rest of the input line, to
2731 allow comparing callables. Thanks to Alex for the heads up.
2735 allow comparing callables. Thanks to Alex for the heads up.
2732
2736
2733 2003-01-07 Fernando Perez <fperez@colorado.edu>
2737 2003-01-07 Fernando Perez <fperez@colorado.edu>
2734
2738
2735 * IPython/genutils.py (page): fixed estimation of the number of
2739 * IPython/genutils.py (page): fixed estimation of the number of
2736 lines in a string to be paged to simply count newlines. This
2740 lines in a string to be paged to simply count newlines. This
2737 prevents over-guessing due to embedded escape sequences. A better
2741 prevents over-guessing due to embedded escape sequences. A better
2738 long-term solution would involve stripping out the control chars
2742 long-term solution would involve stripping out the control chars
2739 for the count, but it's potentially so expensive I just don't
2743 for the count, but it's potentially so expensive I just don't
2740 think it's worth doing.
2744 think it's worth doing.
2741
2745
2742 2002-12-19 *** Released version 0.2.14pre50
2746 2002-12-19 *** Released version 0.2.14pre50
2743
2747
2744 2002-12-19 Fernando Perez <fperez@colorado.edu>
2748 2002-12-19 Fernando Perez <fperez@colorado.edu>
2745
2749
2746 * tools/release (version): Changed release scripts to inform
2750 * tools/release (version): Changed release scripts to inform
2747 Andrea and build a NEWS file with a list of recent changes.
2751 Andrea and build a NEWS file with a list of recent changes.
2748
2752
2749 * IPython/ColorANSI.py (__all__): changed terminal detection
2753 * IPython/ColorANSI.py (__all__): changed terminal detection
2750 code. Seems to work better for xterms without breaking
2754 code. Seems to work better for xterms without breaking
2751 konsole. Will need more testing to determine if WinXP and Mac OSX
2755 konsole. Will need more testing to determine if WinXP and Mac OSX
2752 also work ok.
2756 also work ok.
2753
2757
2754 2002-12-18 *** Released version 0.2.14pre49
2758 2002-12-18 *** Released version 0.2.14pre49
2755
2759
2756 2002-12-18 Fernando Perez <fperez@colorado.edu>
2760 2002-12-18 Fernando Perez <fperez@colorado.edu>
2757
2761
2758 * Docs: added new info about Mac OSX, from Andrea.
2762 * Docs: added new info about Mac OSX, from Andrea.
2759
2763
2760 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2764 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
2761 allow direct plotting of python strings whose format is the same
2765 allow direct plotting of python strings whose format is the same
2762 of gnuplot data files.
2766 of gnuplot data files.
2763
2767
2764 2002-12-16 Fernando Perez <fperez@colorado.edu>
2768 2002-12-16 Fernando Perez <fperez@colorado.edu>
2765
2769
2766 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2770 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
2767 value of exit question to be acknowledged.
2771 value of exit question to be acknowledged.
2768
2772
2769 2002-12-03 Fernando Perez <fperez@colorado.edu>
2773 2002-12-03 Fernando Perez <fperez@colorado.edu>
2770
2774
2771 * IPython/ipmaker.py: removed generators, which had been added
2775 * IPython/ipmaker.py: removed generators, which had been added
2772 by mistake in an earlier debugging run. This was causing trouble
2776 by mistake in an earlier debugging run. This was causing trouble
2773 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2777 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
2774 for pointing this out.
2778 for pointing this out.
2775
2779
2776 2002-11-17 Fernando Perez <fperez@colorado.edu>
2780 2002-11-17 Fernando Perez <fperez@colorado.edu>
2777
2781
2778 * Manual: updated the Gnuplot section.
2782 * Manual: updated the Gnuplot section.
2779
2783
2780 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2784 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
2781 a much better split of what goes in Runtime and what goes in
2785 a much better split of what goes in Runtime and what goes in
2782 Interactive.
2786 Interactive.
2783
2787
2784 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2788 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
2785 being imported from iplib.
2789 being imported from iplib.
2786
2790
2787 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2791 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
2788 for command-passing. Now the global Gnuplot instance is called
2792 for command-passing. Now the global Gnuplot instance is called
2789 'gp' instead of 'g', which was really a far too fragile and
2793 'gp' instead of 'g', which was really a far too fragile and
2790 common name.
2794 common name.
2791
2795
2792 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2796 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
2793 bounding boxes generated by Gnuplot for square plots.
2797 bounding boxes generated by Gnuplot for square plots.
2794
2798
2795 * IPython/genutils.py (popkey): new function added. I should
2799 * IPython/genutils.py (popkey): new function added. I should
2796 suggest this on c.l.py as a dict method, it seems useful.
2800 suggest this on c.l.py as a dict method, it seems useful.
2797
2801
2798 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2802 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
2799 to transparently handle PostScript generation. MUCH better than
2803 to transparently handle PostScript generation. MUCH better than
2800 the previous plot_eps/replot_eps (which I removed now). The code
2804 the previous plot_eps/replot_eps (which I removed now). The code
2801 is also fairly clean and well documented now (including
2805 is also fairly clean and well documented now (including
2802 docstrings).
2806 docstrings).
2803
2807
2804 2002-11-13 Fernando Perez <fperez@colorado.edu>
2808 2002-11-13 Fernando Perez <fperez@colorado.edu>
2805
2809
2806 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2810 * IPython/Magic.py (Magic.magic_edit): fixed docstring
2807 (inconsistent with options).
2811 (inconsistent with options).
2808
2812
2809 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2813 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
2810 manually disabled, I don't know why. Fixed it.
2814 manually disabled, I don't know why. Fixed it.
2811 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2815 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
2812 eps output.
2816 eps output.
2813
2817
2814 2002-11-12 Fernando Perez <fperez@colorado.edu>
2818 2002-11-12 Fernando Perez <fperez@colorado.edu>
2815
2819
2816 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2820 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
2817 don't propagate up to caller. Fixes crash reported by François
2821 don't propagate up to caller. Fixes crash reported by François
2818 Pinard.
2822 Pinard.
2819
2823
2820 2002-11-09 Fernando Perez <fperez@colorado.edu>
2824 2002-11-09 Fernando Perez <fperez@colorado.edu>
2821
2825
2822 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2826 * IPython/ipmaker.py (make_IPython): fixed problem with writing
2823 history file for new users.
2827 history file for new users.
2824 (make_IPython): fixed bug where initial install would leave the
2828 (make_IPython): fixed bug where initial install would leave the
2825 user running in the .ipython dir.
2829 user running in the .ipython dir.
2826 (make_IPython): fixed bug where config dir .ipython would be
2830 (make_IPython): fixed bug where config dir .ipython would be
2827 created regardless of the given -ipythondir option. Thanks to Cory
2831 created regardless of the given -ipythondir option. Thanks to Cory
2828 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2832 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
2829
2833
2830 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2834 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
2831 type confirmations. Will need to use it in all of IPython's code
2835 type confirmations. Will need to use it in all of IPython's code
2832 consistently.
2836 consistently.
2833
2837
2834 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2838 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
2835 context to print 31 lines instead of the default 5. This will make
2839 context to print 31 lines instead of the default 5. This will make
2836 the crash reports extremely detailed in case the problem is in
2840 the crash reports extremely detailed in case the problem is in
2837 libraries I don't have access to.
2841 libraries I don't have access to.
2838
2842
2839 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2843 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
2840 line of defense' code to still crash, but giving users fair
2844 line of defense' code to still crash, but giving users fair
2841 warning. I don't want internal errors to go unreported: if there's
2845 warning. I don't want internal errors to go unreported: if there's
2842 an internal problem, IPython should crash and generate a full
2846 an internal problem, IPython should crash and generate a full
2843 report.
2847 report.
2844
2848
2845 2002-11-08 Fernando Perez <fperez@colorado.edu>
2849 2002-11-08 Fernando Perez <fperez@colorado.edu>
2846
2850
2847 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2851 * IPython/iplib.py (InteractiveShell.interact): added code to trap
2848 otherwise uncaught exceptions which can appear if people set
2852 otherwise uncaught exceptions which can appear if people set
2849 sys.stdout to something badly broken. Thanks to a crash report
2853 sys.stdout to something badly broken. Thanks to a crash report
2850 from henni-AT-mail.brainbot.com.
2854 from henni-AT-mail.brainbot.com.
2851
2855
2852 2002-11-04 Fernando Perez <fperez@colorado.edu>
2856 2002-11-04 Fernando Perez <fperez@colorado.edu>
2853
2857
2854 * IPython/iplib.py (InteractiveShell.interact): added
2858 * IPython/iplib.py (InteractiveShell.interact): added
2855 __IPYTHON__active to the builtins. It's a flag which goes on when
2859 __IPYTHON__active to the builtins. It's a flag which goes on when
2856 the interaction starts and goes off again when it stops. This
2860 the interaction starts and goes off again when it stops. This
2857 allows embedding code to detect being inside IPython. Before this
2861 allows embedding code to detect being inside IPython. Before this
2858 was done via __IPYTHON__, but that only shows that an IPython
2862 was done via __IPYTHON__, but that only shows that an IPython
2859 instance has been created.
2863 instance has been created.
2860
2864
2861 * IPython/Magic.py (Magic.magic_env): I realized that in a
2865 * IPython/Magic.py (Magic.magic_env): I realized that in a
2862 UserDict, instance.data holds the data as a normal dict. So I
2866 UserDict, instance.data holds the data as a normal dict. So I
2863 modified @env to return os.environ.data instead of rebuilding a
2867 modified @env to return os.environ.data instead of rebuilding a
2864 dict by hand.
2868 dict by hand.
2865
2869
2866 2002-11-02 Fernando Perez <fperez@colorado.edu>
2870 2002-11-02 Fernando Perez <fperez@colorado.edu>
2867
2871
2868 * IPython/genutils.py (warn): changed so that level 1 prints no
2872 * IPython/genutils.py (warn): changed so that level 1 prints no
2869 header. Level 2 is now the default (with 'WARNING' header, as
2873 header. Level 2 is now the default (with 'WARNING' header, as
2870 before). I think I tracked all places where changes were needed in
2874 before). I think I tracked all places where changes were needed in
2871 IPython, but outside code using the old level numbering may have
2875 IPython, but outside code using the old level numbering may have
2872 broken.
2876 broken.
2873
2877
2874 * IPython/iplib.py (InteractiveShell.runcode): added this to
2878 * IPython/iplib.py (InteractiveShell.runcode): added this to
2875 handle the tracebacks in SystemExit traps correctly. The previous
2879 handle the tracebacks in SystemExit traps correctly. The previous
2876 code (through interact) was printing more of the stack than
2880 code (through interact) was printing more of the stack than
2877 necessary, showing IPython internal code to the user.
2881 necessary, showing IPython internal code to the user.
2878
2882
2879 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2883 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
2880 default. Now that the default at the confirmation prompt is yes,
2884 default. Now that the default at the confirmation prompt is yes,
2881 it's not so intrusive. François' argument that ipython sessions
2885 it's not so intrusive. François' argument that ipython sessions
2882 tend to be complex enough not to lose them from an accidental C-d,
2886 tend to be complex enough not to lose them from an accidental C-d,
2883 is a valid one.
2887 is a valid one.
2884
2888
2885 * IPython/iplib.py (InteractiveShell.interact): added a
2889 * IPython/iplib.py (InteractiveShell.interact): added a
2886 showtraceback() call to the SystemExit trap, and modified the exit
2890 showtraceback() call to the SystemExit trap, and modified the exit
2887 confirmation to have yes as the default.
2891 confirmation to have yes as the default.
2888
2892
2889 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2893 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
2890 this file. It's been gone from the code for a long time, this was
2894 this file. It's been gone from the code for a long time, this was
2891 simply leftover junk.
2895 simply leftover junk.
2892
2896
2893 2002-11-01 Fernando Perez <fperez@colorado.edu>
2897 2002-11-01 Fernando Perez <fperez@colorado.edu>
2894
2898
2895 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2899 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
2896 added. If set, IPython now traps EOF and asks for
2900 added. If set, IPython now traps EOF and asks for
2897 confirmation. After a request by François Pinard.
2901 confirmation. After a request by François Pinard.
2898
2902
2899 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
2903 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
2900 of @abort, and with a new (better) mechanism for handling the
2904 of @abort, and with a new (better) mechanism for handling the
2901 exceptions.
2905 exceptions.
2902
2906
2903 2002-10-27 Fernando Perez <fperez@colorado.edu>
2907 2002-10-27 Fernando Perez <fperez@colorado.edu>
2904
2908
2905 * IPython/usage.py (__doc__): updated the --help information and
2909 * IPython/usage.py (__doc__): updated the --help information and
2906 the ipythonrc file to indicate that -log generates
2910 the ipythonrc file to indicate that -log generates
2907 ./ipython.log. Also fixed the corresponding info in @logstart.
2911 ./ipython.log. Also fixed the corresponding info in @logstart.
2908 This and several other fixes in the manuals thanks to reports by
2912 This and several other fixes in the manuals thanks to reports by
2909 François Pinard <pinard-AT-iro.umontreal.ca>.
2913 François Pinard <pinard-AT-iro.umontreal.ca>.
2910
2914
2911 * IPython/Logger.py (Logger.switch_log): Fixed error message to
2915 * IPython/Logger.py (Logger.switch_log): Fixed error message to
2912 refer to @logstart (instead of @log, which doesn't exist).
2916 refer to @logstart (instead of @log, which doesn't exist).
2913
2917
2914 * IPython/iplib.py (InteractiveShell._prefilter): fixed
2918 * IPython/iplib.py (InteractiveShell._prefilter): fixed
2915 AttributeError crash. Thanks to Christopher Armstrong
2919 AttributeError crash. Thanks to Christopher Armstrong
2916 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
2920 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
2917 introduced recently (in 0.2.14pre37) with the fix to the eval
2921 introduced recently (in 0.2.14pre37) with the fix to the eval
2918 problem mentioned below.
2922 problem mentioned below.
2919
2923
2920 2002-10-17 Fernando Perez <fperez@colorado.edu>
2924 2002-10-17 Fernando Perez <fperez@colorado.edu>
2921
2925
2922 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
2926 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
2923 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
2927 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
2924
2928
2925 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
2929 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
2926 this function to fix a problem reported by Alex Schmolck. He saw
2930 this function to fix a problem reported by Alex Schmolck. He saw
2927 it with list comprehensions and generators, which were getting
2931 it with list comprehensions and generators, which were getting
2928 called twice. The real problem was an 'eval' call in testing for
2932 called twice. The real problem was an 'eval' call in testing for
2929 automagic which was evaluating the input line silently.
2933 automagic which was evaluating the input line silently.
2930
2934
2931 This is a potentially very nasty bug, if the input has side
2935 This is a potentially very nasty bug, if the input has side
2932 effects which must not be repeated. The code is much cleaner now,
2936 effects which must not be repeated. The code is much cleaner now,
2933 without any blanket 'except' left and with a regexp test for
2937 without any blanket 'except' left and with a regexp test for
2934 actual function names.
2938 actual function names.
2935
2939
2936 But an eval remains, which I'm not fully comfortable with. I just
2940 But an eval remains, which I'm not fully comfortable with. I just
2937 don't know how to find out if an expression could be a callable in
2941 don't know how to find out if an expression could be a callable in
2938 the user's namespace without doing an eval on the string. However
2942 the user's namespace without doing an eval on the string. However
2939 that string is now much more strictly checked so that no code
2943 that string is now much more strictly checked so that no code
2940 slips by, so the eval should only happen for things that can
2944 slips by, so the eval should only happen for things that can
2941 really be only function/method names.
2945 really be only function/method names.
2942
2946
2943 2002-10-15 Fernando Perez <fperez@colorado.edu>
2947 2002-10-15 Fernando Perez <fperez@colorado.edu>
2944
2948
2945 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
2949 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
2946 OSX information to main manual, removed README_Mac_OSX file from
2950 OSX information to main manual, removed README_Mac_OSX file from
2947 distribution. Also updated credits for recent additions.
2951 distribution. Also updated credits for recent additions.
2948
2952
2949 2002-10-10 Fernando Perez <fperez@colorado.edu>
2953 2002-10-10 Fernando Perez <fperez@colorado.edu>
2950
2954
2951 * README_Mac_OSX: Added a README for Mac OSX users for fixing
2955 * README_Mac_OSX: Added a README for Mac OSX users for fixing
2952 terminal-related issues. Many thanks to Andrea Riciputi
2956 terminal-related issues. Many thanks to Andrea Riciputi
2953 <andrea.riciputi-AT-libero.it> for writing it.
2957 <andrea.riciputi-AT-libero.it> for writing it.
2954
2958
2955 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
2959 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
2956 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2960 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
2957
2961
2958 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
2962 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
2959 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
2963 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
2960 <syver-en-AT-online.no> who both submitted patches for this problem.
2964 <syver-en-AT-online.no> who both submitted patches for this problem.
2961
2965
2962 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
2966 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
2963 global embedding to make sure that things don't overwrite user
2967 global embedding to make sure that things don't overwrite user
2964 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
2968 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
2965
2969
2966 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
2970 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
2967 compatibility. Thanks to Hayden Callow
2971 compatibility. Thanks to Hayden Callow
2968 <h.callow-AT-elec.canterbury.ac.nz>
2972 <h.callow-AT-elec.canterbury.ac.nz>
2969
2973
2970 2002-10-04 Fernando Perez <fperez@colorado.edu>
2974 2002-10-04 Fernando Perez <fperez@colorado.edu>
2971
2975
2972 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
2976 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
2973 Gnuplot.File objects.
2977 Gnuplot.File objects.
2974
2978
2975 2002-07-23 Fernando Perez <fperez@colorado.edu>
2979 2002-07-23 Fernando Perez <fperez@colorado.edu>
2976
2980
2977 * IPython/genutils.py (timing): Added timings() and timing() for
2981 * IPython/genutils.py (timing): Added timings() and timing() for
2978 quick access to the most commonly needed data, the execution
2982 quick access to the most commonly needed data, the execution
2979 times. Old timing() renamed to timings_out().
2983 times. Old timing() renamed to timings_out().
2980
2984
2981 2002-07-18 Fernando Perez <fperez@colorado.edu>
2985 2002-07-18 Fernando Perez <fperez@colorado.edu>
2982
2986
2983 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
2987 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
2984 bug with nested instances disrupting the parent's tab completion.
2988 bug with nested instances disrupting the parent's tab completion.
2985
2989
2986 * IPython/iplib.py (all_completions): Added Alex Schmolck's
2990 * IPython/iplib.py (all_completions): Added Alex Schmolck's
2987 all_completions code to begin the emacs integration.
2991 all_completions code to begin the emacs integration.
2988
2992
2989 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
2993 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
2990 argument to allow titling individual arrays when plotting.
2994 argument to allow titling individual arrays when plotting.
2991
2995
2992 2002-07-15 Fernando Perez <fperez@colorado.edu>
2996 2002-07-15 Fernando Perez <fperez@colorado.edu>
2993
2997
2994 * setup.py (make_shortcut): changed to retrieve the value of
2998 * setup.py (make_shortcut): changed to retrieve the value of
2995 'Program Files' directory from the registry (this value changes in
2999 'Program Files' directory from the registry (this value changes in
2996 non-english versions of Windows). Thanks to Thomas Fanslau
3000 non-english versions of Windows). Thanks to Thomas Fanslau
2997 <tfanslau-AT-gmx.de> for the report.
3001 <tfanslau-AT-gmx.de> for the report.
2998
3002
2999 2002-07-10 Fernando Perez <fperez@colorado.edu>
3003 2002-07-10 Fernando Perez <fperez@colorado.edu>
3000
3004
3001 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3005 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
3002 a bug in pdb, which crashes if a line with only whitespace is
3006 a bug in pdb, which crashes if a line with only whitespace is
3003 entered. Bug report submitted to sourceforge.
3007 entered. Bug report submitted to sourceforge.
3004
3008
3005 2002-07-09 Fernando Perez <fperez@colorado.edu>
3009 2002-07-09 Fernando Perez <fperez@colorado.edu>
3006
3010
3007 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3011 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
3008 reporting exceptions (it's a bug in inspect.py, I just set a
3012 reporting exceptions (it's a bug in inspect.py, I just set a
3009 workaround).
3013 workaround).
3010
3014
3011 2002-07-08 Fernando Perez <fperez@colorado.edu>
3015 2002-07-08 Fernando Perez <fperez@colorado.edu>
3012
3016
3013 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3017 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
3014 __IPYTHON__ in __builtins__ to show up in user_ns.
3018 __IPYTHON__ in __builtins__ to show up in user_ns.
3015
3019
3016 2002-07-03 Fernando Perez <fperez@colorado.edu>
3020 2002-07-03 Fernando Perez <fperez@colorado.edu>
3017
3021
3018 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3022 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
3019 name from @gp_set_instance to @gp_set_default.
3023 name from @gp_set_instance to @gp_set_default.
3020
3024
3021 * IPython/ipmaker.py (make_IPython): default editor value set to
3025 * IPython/ipmaker.py (make_IPython): default editor value set to
3022 '0' (a string), to match the rc file. Otherwise will crash when
3026 '0' (a string), to match the rc file. Otherwise will crash when
3023 .strip() is called on it.
3027 .strip() is called on it.
3024
3028
3025
3029
3026 2002-06-28 Fernando Perez <fperez@colorado.edu>
3030 2002-06-28 Fernando Perez <fperez@colorado.edu>
3027
3031
3028 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3032 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
3029 of files in current directory when a file is executed via
3033 of files in current directory when a file is executed via
3030 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3034 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
3031
3035
3032 * setup.py (manfiles): fix for rpm builds, submitted by RA
3036 * setup.py (manfiles): fix for rpm builds, submitted by RA
3033 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3037 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
3034
3038
3035 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3039 * IPython/ipmaker.py (make_IPython): fixed lookup of default
3036 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3040 editor when set to '0'. Problem was, '0' evaluates to True (it's a
3037 string!). A. Schmolck caught this one.
3041 string!). A. Schmolck caught this one.
3038
3042
3039 2002-06-27 Fernando Perez <fperez@colorado.edu>
3043 2002-06-27 Fernando Perez <fperez@colorado.edu>
3040
3044
3041 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3045 * IPython/ipmaker.py (make_IPython): fixed bug when running user
3042 defined files at the cmd line. __name__ wasn't being set to
3046 defined files at the cmd line. __name__ wasn't being set to
3043 __main__.
3047 __main__.
3044
3048
3045 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3049 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
3046 regular lists and tuples besides Numeric arrays.
3050 regular lists and tuples besides Numeric arrays.
3047
3051
3048 * IPython/Prompts.py (CachedOutput.__call__): Added output
3052 * IPython/Prompts.py (CachedOutput.__call__): Added output
3049 supression for input ending with ';'. Similar to Mathematica and
3053 supression for input ending with ';'. Similar to Mathematica and
3050 Matlab. The _* vars and Out[] list are still updated, just like
3054 Matlab. The _* vars and Out[] list are still updated, just like
3051 Mathematica behaves.
3055 Mathematica behaves.
3052
3056
3053 2002-06-25 Fernando Perez <fperez@colorado.edu>
3057 2002-06-25 Fernando Perez <fperez@colorado.edu>
3054
3058
3055 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3059 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
3056 .ini extensions for profiels under Windows.
3060 .ini extensions for profiels under Windows.
3057
3061
3058 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3062 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
3059 string form. Fix contributed by Alexander Schmolck
3063 string form. Fix contributed by Alexander Schmolck
3060 <a.schmolck-AT-gmx.net>
3064 <a.schmolck-AT-gmx.net>
3061
3065
3062 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3066 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
3063 pre-configured Gnuplot instance.
3067 pre-configured Gnuplot instance.
3064
3068
3065 2002-06-21 Fernando Perez <fperez@colorado.edu>
3069 2002-06-21 Fernando Perez <fperez@colorado.edu>
3066
3070
3067 * IPython/numutils.py (exp_safe): new function, works around the
3071 * IPython/numutils.py (exp_safe): new function, works around the
3068 underflow problems in Numeric.
3072 underflow problems in Numeric.
3069 (log2): New fn. Safe log in base 2: returns exact integer answer
3073 (log2): New fn. Safe log in base 2: returns exact integer answer
3070 for exact integer powers of 2.
3074 for exact integer powers of 2.
3071
3075
3072 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3076 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
3073 properly.
3077 properly.
3074
3078
3075 2002-06-20 Fernando Perez <fperez@colorado.edu>
3079 2002-06-20 Fernando Perez <fperez@colorado.edu>
3076
3080
3077 * IPython/genutils.py (timing): new function like
3081 * IPython/genutils.py (timing): new function like
3078 Mathematica's. Similar to time_test, but returns more info.
3082 Mathematica's. Similar to time_test, but returns more info.
3079
3083
3080 2002-06-18 Fernando Perez <fperez@colorado.edu>
3084 2002-06-18 Fernando Perez <fperez@colorado.edu>
3081
3085
3082 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3086 * IPython/Magic.py (Magic.magic_save): modified @save and @r
3083 according to Mike Heeter's suggestions.
3087 according to Mike Heeter's suggestions.
3084
3088
3085 2002-06-16 Fernando Perez <fperez@colorado.edu>
3089 2002-06-16 Fernando Perez <fperez@colorado.edu>
3086
3090
3087 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3091 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
3088 system. GnuplotMagic is gone as a user-directory option. New files
3092 system. GnuplotMagic is gone as a user-directory option. New files
3089 make it easier to use all the gnuplot stuff both from external
3093 make it easier to use all the gnuplot stuff both from external
3090 programs as well as from IPython. Had to rewrite part of
3094 programs as well as from IPython. Had to rewrite part of
3091 hardcopy() b/c of a strange bug: often the ps files simply don't
3095 hardcopy() b/c of a strange bug: often the ps files simply don't
3092 get created, and require a repeat of the command (often several
3096 get created, and require a repeat of the command (often several
3093 times).
3097 times).
3094
3098
3095 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3099 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
3096 resolve output channel at call time, so that if sys.stderr has
3100 resolve output channel at call time, so that if sys.stderr has
3097 been redirected by user this gets honored.
3101 been redirected by user this gets honored.
3098
3102
3099 2002-06-13 Fernando Perez <fperez@colorado.edu>
3103 2002-06-13 Fernando Perez <fperez@colorado.edu>
3100
3104
3101 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3105 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
3102 IPShell. Kept a copy with the old names to avoid breaking people's
3106 IPShell. Kept a copy with the old names to avoid breaking people's
3103 embedded code.
3107 embedded code.
3104
3108
3105 * IPython/ipython: simplified it to the bare minimum after
3109 * IPython/ipython: simplified it to the bare minimum after
3106 Holger's suggestions. Added info about how to use it in
3110 Holger's suggestions. Added info about how to use it in
3107 PYTHONSTARTUP.
3111 PYTHONSTARTUP.
3108
3112
3109 * IPython/Shell.py (IPythonShell): changed the options passing
3113 * IPython/Shell.py (IPythonShell): changed the options passing
3110 from a string with funky %s replacements to a straight list. Maybe
3114 from a string with funky %s replacements to a straight list. Maybe
3111 a bit more typing, but it follows sys.argv conventions, so there's
3115 a bit more typing, but it follows sys.argv conventions, so there's
3112 less special-casing to remember.
3116 less special-casing to remember.
3113
3117
3114 2002-06-12 Fernando Perez <fperez@colorado.edu>
3118 2002-06-12 Fernando Perez <fperez@colorado.edu>
3115
3119
3116 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3120 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
3117 command. Thanks to a suggestion by Mike Heeter.
3121 command. Thanks to a suggestion by Mike Heeter.
3118 (Magic.magic_pfile): added behavior to look at filenames if given
3122 (Magic.magic_pfile): added behavior to look at filenames if given
3119 arg is not a defined object.
3123 arg is not a defined object.
3120 (Magic.magic_save): New @save function to save code snippets. Also
3124 (Magic.magic_save): New @save function to save code snippets. Also
3121 a Mike Heeter idea.
3125 a Mike Heeter idea.
3122
3126
3123 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3127 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
3124 plot() and replot(). Much more convenient now, especially for
3128 plot() and replot(). Much more convenient now, especially for
3125 interactive use.
3129 interactive use.
3126
3130
3127 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3131 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
3128 filenames.
3132 filenames.
3129
3133
3130 2002-06-02 Fernando Perez <fperez@colorado.edu>
3134 2002-06-02 Fernando Perez <fperez@colorado.edu>
3131
3135
3132 * IPython/Struct.py (Struct.__init__): modified to admit
3136 * IPython/Struct.py (Struct.__init__): modified to admit
3133 initialization via another struct.
3137 initialization via another struct.
3134
3138
3135 * IPython/genutils.py (SystemExec.__init__): New stateful
3139 * IPython/genutils.py (SystemExec.__init__): New stateful
3136 interface to xsys and bq. Useful for writing system scripts.
3140 interface to xsys and bq. Useful for writing system scripts.
3137
3141
3138 2002-05-30 Fernando Perez <fperez@colorado.edu>
3142 2002-05-30 Fernando Perez <fperez@colorado.edu>
3139
3143
3140 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3144 * MANIFEST.in: Changed docfile selection to exclude all the lyx
3141 documents. This will make the user download smaller (it's getting
3145 documents. This will make the user download smaller (it's getting
3142 too big).
3146 too big).
3143
3147
3144 2002-05-29 Fernando Perez <fperez@colorado.edu>
3148 2002-05-29 Fernando Perez <fperez@colorado.edu>
3145
3149
3146 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3150 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
3147 fix problems with shelve and pickle. Seems to work, but I don't
3151 fix problems with shelve and pickle. Seems to work, but I don't
3148 know if corner cases break it. Thanks to Mike Heeter
3152 know if corner cases break it. Thanks to Mike Heeter
3149 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3153 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
3150
3154
3151 2002-05-24 Fernando Perez <fperez@colorado.edu>
3155 2002-05-24 Fernando Perez <fperez@colorado.edu>
3152
3156
3153 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3157 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
3154 macros having broken.
3158 macros having broken.
3155
3159
3156 2002-05-21 Fernando Perez <fperez@colorado.edu>
3160 2002-05-21 Fernando Perez <fperez@colorado.edu>
3157
3161
3158 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3162 * IPython/Magic.py (Magic.magic_logstart): fixed recently
3159 introduced logging bug: all history before logging started was
3163 introduced logging bug: all history before logging started was
3160 being written one character per line! This came from the redesign
3164 being written one character per line! This came from the redesign
3161 of the input history as a special list which slices to strings,
3165 of the input history as a special list which slices to strings,
3162 not to lists.
3166 not to lists.
3163
3167
3164 2002-05-20 Fernando Perez <fperez@colorado.edu>
3168 2002-05-20 Fernando Perez <fperez@colorado.edu>
3165
3169
3166 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3170 * IPython/Prompts.py (CachedOutput.__init__): made the color table
3167 be an attribute of all classes in this module. The design of these
3171 be an attribute of all classes in this module. The design of these
3168 classes needs some serious overhauling.
3172 classes needs some serious overhauling.
3169
3173
3170 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3174 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
3171 which was ignoring '_' in option names.
3175 which was ignoring '_' in option names.
3172
3176
3173 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3177 * IPython/ultraTB.py (FormattedTB.__init__): Changed
3174 'Verbose_novars' to 'Context' and made it the new default. It's a
3178 'Verbose_novars' to 'Context' and made it the new default. It's a
3175 bit more readable and also safer than verbose.
3179 bit more readable and also safer than verbose.
3176
3180
3177 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3181 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
3178 triple-quoted strings.
3182 triple-quoted strings.
3179
3183
3180 * IPython/OInspect.py (__all__): new module exposing the object
3184 * IPython/OInspect.py (__all__): new module exposing the object
3181 introspection facilities. Now the corresponding magics are dummy
3185 introspection facilities. Now the corresponding magics are dummy
3182 wrappers around this. Having this module will make it much easier
3186 wrappers around this. Having this module will make it much easier
3183 to put these functions into our modified pdb.
3187 to put these functions into our modified pdb.
3184 This new object inspector system uses the new colorizing module,
3188 This new object inspector system uses the new colorizing module,
3185 so source code and other things are nicely syntax highlighted.
3189 so source code and other things are nicely syntax highlighted.
3186
3190
3187 2002-05-18 Fernando Perez <fperez@colorado.edu>
3191 2002-05-18 Fernando Perez <fperez@colorado.edu>
3188
3192
3189 * IPython/ColorANSI.py: Split the coloring tools into a separate
3193 * IPython/ColorANSI.py: Split the coloring tools into a separate
3190 module so I can use them in other code easier (they were part of
3194 module so I can use them in other code easier (they were part of
3191 ultraTB).
3195 ultraTB).
3192
3196
3193 2002-05-17 Fernando Perez <fperez@colorado.edu>
3197 2002-05-17 Fernando Perez <fperez@colorado.edu>
3194
3198
3195 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3199 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3196 fixed it to set the global 'g' also to the called instance, as
3200 fixed it to set the global 'g' also to the called instance, as
3197 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3201 long as 'g' was still a gnuplot instance (so it doesn't overwrite
3198 user's 'g' variables).
3202 user's 'g' variables).
3199
3203
3200 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3204 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
3201 global variables (aliases to _ih,_oh) so that users which expect
3205 global variables (aliases to _ih,_oh) so that users which expect
3202 In[5] or Out[7] to work aren't unpleasantly surprised.
3206 In[5] or Out[7] to work aren't unpleasantly surprised.
3203 (InputList.__getslice__): new class to allow executing slices of
3207 (InputList.__getslice__): new class to allow executing slices of
3204 input history directly. Very simple class, complements the use of
3208 input history directly. Very simple class, complements the use of
3205 macros.
3209 macros.
3206
3210
3207 2002-05-16 Fernando Perez <fperez@colorado.edu>
3211 2002-05-16 Fernando Perez <fperez@colorado.edu>
3208
3212
3209 * setup.py (docdirbase): make doc directory be just doc/IPython
3213 * setup.py (docdirbase): make doc directory be just doc/IPython
3210 without version numbers, it will reduce clutter for users.
3214 without version numbers, it will reduce clutter for users.
3211
3215
3212 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3216 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
3213 execfile call to prevent possible memory leak. See for details:
3217 execfile call to prevent possible memory leak. See for details:
3214 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3218 http://mail.python.org/pipermail/python-list/2002-February/088476.html
3215
3219
3216 2002-05-15 Fernando Perez <fperez@colorado.edu>
3220 2002-05-15 Fernando Perez <fperez@colorado.edu>
3217
3221
3218 * IPython/Magic.py (Magic.magic_psource): made the object
3222 * IPython/Magic.py (Magic.magic_psource): made the object
3219 introspection names be more standard: pdoc, pdef, pfile and
3223 introspection names be more standard: pdoc, pdef, pfile and
3220 psource. They all print/page their output, and it makes
3224 psource. They all print/page their output, and it makes
3221 remembering them easier. Kept old names for compatibility as
3225 remembering them easier. Kept old names for compatibility as
3222 aliases.
3226 aliases.
3223
3227
3224 2002-05-14 Fernando Perez <fperez@colorado.edu>
3228 2002-05-14 Fernando Perez <fperez@colorado.edu>
3225
3229
3226 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3230 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
3227 what the mouse problem was. The trick is to use gnuplot with temp
3231 what the mouse problem was. The trick is to use gnuplot with temp
3228 files and NOT with pipes (for data communication), because having
3232 files and NOT with pipes (for data communication), because having
3229 both pipes and the mouse on is bad news.
3233 both pipes and the mouse on is bad news.
3230
3234
3231 2002-05-13 Fernando Perez <fperez@colorado.edu>
3235 2002-05-13 Fernando Perez <fperez@colorado.edu>
3232
3236
3233 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3237 * IPython/Magic.py (Magic._ofind): fixed namespace order search
3234 bug. Information would be reported about builtins even when
3238 bug. Information would be reported about builtins even when
3235 user-defined functions overrode them.
3239 user-defined functions overrode them.
3236
3240
3237 2002-05-11 Fernando Perez <fperez@colorado.edu>
3241 2002-05-11 Fernando Perez <fperez@colorado.edu>
3238
3242
3239 * IPython/__init__.py (__all__): removed FlexCompleter from
3243 * IPython/__init__.py (__all__): removed FlexCompleter from
3240 __all__ so that things don't fail in platforms without readline.
3244 __all__ so that things don't fail in platforms without readline.
3241
3245
3242 2002-05-10 Fernando Perez <fperez@colorado.edu>
3246 2002-05-10 Fernando Perez <fperez@colorado.edu>
3243
3247
3244 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3248 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
3245 it requires Numeric, effectively making Numeric a dependency for
3249 it requires Numeric, effectively making Numeric a dependency for
3246 IPython.
3250 IPython.
3247
3251
3248 * Released 0.2.13
3252 * Released 0.2.13
3249
3253
3250 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3254 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
3251 profiler interface. Now all the major options from the profiler
3255 profiler interface. Now all the major options from the profiler
3252 module are directly supported in IPython, both for single
3256 module are directly supported in IPython, both for single
3253 expressions (@prun) and for full programs (@run -p).
3257 expressions (@prun) and for full programs (@run -p).
3254
3258
3255 2002-05-09 Fernando Perez <fperez@colorado.edu>
3259 2002-05-09 Fernando Perez <fperez@colorado.edu>
3256
3260
3257 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3261 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
3258 magic properly formatted for screen.
3262 magic properly formatted for screen.
3259
3263
3260 * setup.py (make_shortcut): Changed things to put pdf version in
3264 * setup.py (make_shortcut): Changed things to put pdf version in
3261 doc/ instead of doc/manual (had to change lyxport a bit).
3265 doc/ instead of doc/manual (had to change lyxport a bit).
3262
3266
3263 * IPython/Magic.py (Profile.string_stats): made profile runs go
3267 * IPython/Magic.py (Profile.string_stats): made profile runs go
3264 through pager (they are long and a pager allows searching, saving,
3268 through pager (they are long and a pager allows searching, saving,
3265 etc.)
3269 etc.)
3266
3270
3267 2002-05-08 Fernando Perez <fperez@colorado.edu>
3271 2002-05-08 Fernando Perez <fperez@colorado.edu>
3268
3272
3269 * Released 0.2.12
3273 * Released 0.2.12
3270
3274
3271 2002-05-06 Fernando Perez <fperez@colorado.edu>
3275 2002-05-06 Fernando Perez <fperez@colorado.edu>
3272
3276
3273 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3277 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
3274 introduced); 'hist n1 n2' was broken.
3278 introduced); 'hist n1 n2' was broken.
3275 (Magic.magic_pdb): added optional on/off arguments to @pdb
3279 (Magic.magic_pdb): added optional on/off arguments to @pdb
3276 (Magic.magic_run): added option -i to @run, which executes code in
3280 (Magic.magic_run): added option -i to @run, which executes code in
3277 the IPython namespace instead of a clean one. Also added @irun as
3281 the IPython namespace instead of a clean one. Also added @irun as
3278 an alias to @run -i.
3282 an alias to @run -i.
3279
3283
3280 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3284 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
3281 fixed (it didn't really do anything, the namespaces were wrong).
3285 fixed (it didn't really do anything, the namespaces were wrong).
3282
3286
3283 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3287 * IPython/Debugger.py (__init__): Added workaround for python 2.1
3284
3288
3285 * IPython/__init__.py (__all__): Fixed package namespace, now
3289 * IPython/__init__.py (__all__): Fixed package namespace, now
3286 'import IPython' does give access to IPython.<all> as
3290 'import IPython' does give access to IPython.<all> as
3287 expected. Also renamed __release__ to Release.
3291 expected. Also renamed __release__ to Release.
3288
3292
3289 * IPython/Debugger.py (__license__): created new Pdb class which
3293 * IPython/Debugger.py (__license__): created new Pdb class which
3290 functions like a drop-in for the normal pdb.Pdb but does NOT
3294 functions like a drop-in for the normal pdb.Pdb but does NOT
3291 import readline by default. This way it doesn't muck up IPython's
3295 import readline by default. This way it doesn't muck up IPython's
3292 readline handling, and now tab-completion finally works in the
3296 readline handling, and now tab-completion finally works in the
3293 debugger -- sort of. It completes things globally visible, but the
3297 debugger -- sort of. It completes things globally visible, but the
3294 completer doesn't track the stack as pdb walks it. That's a bit
3298 completer doesn't track the stack as pdb walks it. That's a bit
3295 tricky, and I'll have to implement it later.
3299 tricky, and I'll have to implement it later.
3296
3300
3297 2002-05-05 Fernando Perez <fperez@colorado.edu>
3301 2002-05-05 Fernando Perez <fperez@colorado.edu>
3298
3302
3299 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3303 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
3300 magic docstrings when printed via ? (explicit \'s were being
3304 magic docstrings when printed via ? (explicit \'s were being
3301 printed).
3305 printed).
3302
3306
3303 * IPython/ipmaker.py (make_IPython): fixed namespace
3307 * IPython/ipmaker.py (make_IPython): fixed namespace
3304 identification bug. Now variables loaded via logs or command-line
3308 identification bug. Now variables loaded via logs or command-line
3305 files are recognized in the interactive namespace by @who.
3309 files are recognized in the interactive namespace by @who.
3306
3310
3307 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3311 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
3308 log replay system stemming from the string form of Structs.
3312 log replay system stemming from the string form of Structs.
3309
3313
3310 * IPython/Magic.py (Macro.__init__): improved macros to properly
3314 * IPython/Magic.py (Macro.__init__): improved macros to properly
3311 handle magic commands in them.
3315 handle magic commands in them.
3312 (Magic.magic_logstart): usernames are now expanded so 'logstart
3316 (Magic.magic_logstart): usernames are now expanded so 'logstart
3313 ~/mylog' now works.
3317 ~/mylog' now works.
3314
3318
3315 * IPython/iplib.py (complete): fixed bug where paths starting with
3319 * IPython/iplib.py (complete): fixed bug where paths starting with
3316 '/' would be completed as magic names.
3320 '/' would be completed as magic names.
3317
3321
3318 2002-05-04 Fernando Perez <fperez@colorado.edu>
3322 2002-05-04 Fernando Perez <fperez@colorado.edu>
3319
3323
3320 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3324 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
3321 allow running full programs under the profiler's control.
3325 allow running full programs under the profiler's control.
3322
3326
3323 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3327 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
3324 mode to report exceptions verbosely but without formatting
3328 mode to report exceptions verbosely but without formatting
3325 variables. This addresses the issue of ipython 'freezing' (it's
3329 variables. This addresses the issue of ipython 'freezing' (it's
3326 not frozen, but caught in an expensive formatting loop) when huge
3330 not frozen, but caught in an expensive formatting loop) when huge
3327 variables are in the context of an exception.
3331 variables are in the context of an exception.
3328 (VerboseTB.text): Added '--->' markers at line where exception was
3332 (VerboseTB.text): Added '--->' markers at line where exception was
3329 triggered. Much clearer to read, especially in NoColor modes.
3333 triggered. Much clearer to read, especially in NoColor modes.
3330
3334
3331 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3335 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
3332 implemented in reverse when changing to the new parse_options().
3336 implemented in reverse when changing to the new parse_options().
3333
3337
3334 2002-05-03 Fernando Perez <fperez@colorado.edu>
3338 2002-05-03 Fernando Perez <fperez@colorado.edu>
3335
3339
3336 * IPython/Magic.py (Magic.parse_options): new function so that
3340 * IPython/Magic.py (Magic.parse_options): new function so that
3337 magics can parse options easier.
3341 magics can parse options easier.
3338 (Magic.magic_prun): new function similar to profile.run(),
3342 (Magic.magic_prun): new function similar to profile.run(),
3339 suggested by Chris Hart.
3343 suggested by Chris Hart.
3340 (Magic.magic_cd): fixed behavior so that it only changes if
3344 (Magic.magic_cd): fixed behavior so that it only changes if
3341 directory actually is in history.
3345 directory actually is in history.
3342
3346
3343 * IPython/usage.py (__doc__): added information about potential
3347 * IPython/usage.py (__doc__): added information about potential
3344 slowness of Verbose exception mode when there are huge data
3348 slowness of Verbose exception mode when there are huge data
3345 structures to be formatted (thanks to Archie Paulson).
3349 structures to be formatted (thanks to Archie Paulson).
3346
3350
3347 * IPython/ipmaker.py (make_IPython): Changed default logging
3351 * IPython/ipmaker.py (make_IPython): Changed default logging
3348 (when simply called with -log) to use curr_dir/ipython.log in
3352 (when simply called with -log) to use curr_dir/ipython.log in
3349 rotate mode. Fixed crash which was occuring with -log before
3353 rotate mode. Fixed crash which was occuring with -log before
3350 (thanks to Jim Boyle).
3354 (thanks to Jim Boyle).
3351
3355
3352 2002-05-01 Fernando Perez <fperez@colorado.edu>
3356 2002-05-01 Fernando Perez <fperez@colorado.edu>
3353
3357
3354 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3358 * Released 0.2.11 for these fixes (mainly the ultraTB one which
3355 was nasty -- though somewhat of a corner case).
3359 was nasty -- though somewhat of a corner case).
3356
3360
3357 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3361 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
3358 text (was a bug).
3362 text (was a bug).
3359
3363
3360 2002-04-30 Fernando Perez <fperez@colorado.edu>
3364 2002-04-30 Fernando Perez <fperez@colorado.edu>
3361
3365
3362 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3366 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
3363 a print after ^D or ^C from the user so that the In[] prompt
3367 a print after ^D or ^C from the user so that the In[] prompt
3364 doesn't over-run the gnuplot one.
3368 doesn't over-run the gnuplot one.
3365
3369
3366 2002-04-29 Fernando Perez <fperez@colorado.edu>
3370 2002-04-29 Fernando Perez <fperez@colorado.edu>
3367
3371
3368 * Released 0.2.10
3372 * Released 0.2.10
3369
3373
3370 * IPython/__release__.py (version): get date dynamically.
3374 * IPython/__release__.py (version): get date dynamically.
3371
3375
3372 * Misc. documentation updates thanks to Arnd's comments. Also ran
3376 * Misc. documentation updates thanks to Arnd's comments. Also ran
3373 a full spellcheck on the manual (hadn't been done in a while).
3377 a full spellcheck on the manual (hadn't been done in a while).
3374
3378
3375 2002-04-27 Fernando Perez <fperez@colorado.edu>
3379 2002-04-27 Fernando Perez <fperez@colorado.edu>
3376
3380
3377 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3381 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
3378 starting a log in mid-session would reset the input history list.
3382 starting a log in mid-session would reset the input history list.
3379
3383
3380 2002-04-26 Fernando Perez <fperez@colorado.edu>
3384 2002-04-26 Fernando Perez <fperez@colorado.edu>
3381
3385
3382 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3386 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
3383 all files were being included in an update. Now anything in
3387 all files were being included in an update. Now anything in
3384 UserConfig that matches [A-Za-z]*.py will go (this excludes
3388 UserConfig that matches [A-Za-z]*.py will go (this excludes
3385 __init__.py)
3389 __init__.py)
3386
3390
3387 2002-04-25 Fernando Perez <fperez@colorado.edu>
3391 2002-04-25 Fernando Perez <fperez@colorado.edu>
3388
3392
3389 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3393 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
3390 to __builtins__ so that any form of embedded or imported code can
3394 to __builtins__ so that any form of embedded or imported code can
3391 test for being inside IPython.
3395 test for being inside IPython.
3392
3396
3393 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3397 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
3394 changed to GnuplotMagic because it's now an importable module,
3398 changed to GnuplotMagic because it's now an importable module,
3395 this makes the name follow that of the standard Gnuplot module.
3399 this makes the name follow that of the standard Gnuplot module.
3396 GnuplotMagic can now be loaded at any time in mid-session.
3400 GnuplotMagic can now be loaded at any time in mid-session.
3397
3401
3398 2002-04-24 Fernando Perez <fperez@colorado.edu>
3402 2002-04-24 Fernando Perez <fperez@colorado.edu>
3399
3403
3400 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3404 * IPython/numutils.py: removed SIUnits. It doesn't properly set
3401 the globals (IPython has its own namespace) and the
3405 the globals (IPython has its own namespace) and the
3402 PhysicalQuantity stuff is much better anyway.
3406 PhysicalQuantity stuff is much better anyway.
3403
3407
3404 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3408 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
3405 embedding example to standard user directory for
3409 embedding example to standard user directory for
3406 distribution. Also put it in the manual.
3410 distribution. Also put it in the manual.
3407
3411
3408 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3412 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
3409 instance as first argument (so it doesn't rely on some obscure
3413 instance as first argument (so it doesn't rely on some obscure
3410 hidden global).
3414 hidden global).
3411
3415
3412 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3416 * IPython/UserConfig/ipythonrc.py: put () back in accepted
3413 delimiters. While it prevents ().TAB from working, it allows
3417 delimiters. While it prevents ().TAB from working, it allows
3414 completions in open (... expressions. This is by far a more common
3418 completions in open (... expressions. This is by far a more common
3415 case.
3419 case.
3416
3420
3417 2002-04-23 Fernando Perez <fperez@colorado.edu>
3421 2002-04-23 Fernando Perez <fperez@colorado.edu>
3418
3422
3419 * IPython/Extensions/InterpreterPasteInput.py: new
3423 * IPython/Extensions/InterpreterPasteInput.py: new
3420 syntax-processing module for pasting lines with >>> or ... at the
3424 syntax-processing module for pasting lines with >>> or ... at the
3421 start.
3425 start.
3422
3426
3423 * IPython/Extensions/PhysicalQ_Interactive.py
3427 * IPython/Extensions/PhysicalQ_Interactive.py
3424 (PhysicalQuantityInteractive.__int__): fixed to work with either
3428 (PhysicalQuantityInteractive.__int__): fixed to work with either
3425 Numeric or math.
3429 Numeric or math.
3426
3430
3427 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3431 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
3428 provided profiles. Now we have:
3432 provided profiles. Now we have:
3429 -math -> math module as * and cmath with its own namespace.
3433 -math -> math module as * and cmath with its own namespace.
3430 -numeric -> Numeric as *, plus gnuplot & grace
3434 -numeric -> Numeric as *, plus gnuplot & grace
3431 -physics -> same as before
3435 -physics -> same as before
3432
3436
3433 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3437 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
3434 user-defined magics wouldn't be found by @magic if they were
3438 user-defined magics wouldn't be found by @magic if they were
3435 defined as class methods. Also cleaned up the namespace search
3439 defined as class methods. Also cleaned up the namespace search
3436 logic and the string building (to use %s instead of many repeated
3440 logic and the string building (to use %s instead of many repeated
3437 string adds).
3441 string adds).
3438
3442
3439 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3443 * IPython/UserConfig/example-magic.py (magic_foo): updated example
3440 of user-defined magics to operate with class methods (cleaner, in
3444 of user-defined magics to operate with class methods (cleaner, in
3441 line with the gnuplot code).
3445 line with the gnuplot code).
3442
3446
3443 2002-04-22 Fernando Perez <fperez@colorado.edu>
3447 2002-04-22 Fernando Perez <fperez@colorado.edu>
3444
3448
3445 * setup.py: updated dependency list so that manual is updated when
3449 * setup.py: updated dependency list so that manual is updated when
3446 all included files change.
3450 all included files change.
3447
3451
3448 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3452 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
3449 the delimiter removal option (the fix is ugly right now).
3453 the delimiter removal option (the fix is ugly right now).
3450
3454
3451 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3455 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
3452 all of the math profile (quicker loading, no conflict between
3456 all of the math profile (quicker loading, no conflict between
3453 g-9.8 and g-gnuplot).
3457 g-9.8 and g-gnuplot).
3454
3458
3455 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3459 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
3456 name of post-mortem files to IPython_crash_report.txt.
3460 name of post-mortem files to IPython_crash_report.txt.
3457
3461
3458 * Cleanup/update of the docs. Added all the new readline info and
3462 * Cleanup/update of the docs. Added all the new readline info and
3459 formatted all lists as 'real lists'.
3463 formatted all lists as 'real lists'.
3460
3464
3461 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3465 * IPython/ipmaker.py (make_IPython): removed now-obsolete
3462 tab-completion options, since the full readline parse_and_bind is
3466 tab-completion options, since the full readline parse_and_bind is
3463 now accessible.
3467 now accessible.
3464
3468
3465 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3469 * IPython/iplib.py (InteractiveShell.init_readline): Changed
3466 handling of readline options. Now users can specify any string to
3470 handling of readline options. Now users can specify any string to
3467 be passed to parse_and_bind(), as well as the delimiters to be
3471 be passed to parse_and_bind(), as well as the delimiters to be
3468 removed.
3472 removed.
3469 (InteractiveShell.__init__): Added __name__ to the global
3473 (InteractiveShell.__init__): Added __name__ to the global
3470 namespace so that things like Itpl which rely on its existence
3474 namespace so that things like Itpl which rely on its existence
3471 don't crash.
3475 don't crash.
3472 (InteractiveShell._prefilter): Defined the default with a _ so
3476 (InteractiveShell._prefilter): Defined the default with a _ so
3473 that prefilter() is easier to override, while the default one
3477 that prefilter() is easier to override, while the default one
3474 remains available.
3478 remains available.
3475
3479
3476 2002-04-18 Fernando Perez <fperez@colorado.edu>
3480 2002-04-18 Fernando Perez <fperez@colorado.edu>
3477
3481
3478 * Added information about pdb in the docs.
3482 * Added information about pdb in the docs.
3479
3483
3480 2002-04-17 Fernando Perez <fperez@colorado.edu>
3484 2002-04-17 Fernando Perez <fperez@colorado.edu>
3481
3485
3482 * IPython/ipmaker.py (make_IPython): added rc_override option to
3486 * IPython/ipmaker.py (make_IPython): added rc_override option to
3483 allow passing config options at creation time which may override
3487 allow passing config options at creation time which may override
3484 anything set in the config files or command line. This is
3488 anything set in the config files or command line. This is
3485 particularly useful for configuring embedded instances.
3489 particularly useful for configuring embedded instances.
3486
3490
3487 2002-04-15 Fernando Perez <fperez@colorado.edu>
3491 2002-04-15 Fernando Perez <fperez@colorado.edu>
3488
3492
3489 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3493 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
3490 crash embedded instances because of the input cache falling out of
3494 crash embedded instances because of the input cache falling out of
3491 sync with the output counter.
3495 sync with the output counter.
3492
3496
3493 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3497 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
3494 mode which calls pdb after an uncaught exception in IPython itself.
3498 mode which calls pdb after an uncaught exception in IPython itself.
3495
3499
3496 2002-04-14 Fernando Perez <fperez@colorado.edu>
3500 2002-04-14 Fernando Perez <fperez@colorado.edu>
3497
3501
3498 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3502 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
3499 readline, fix it back after each call.
3503 readline, fix it back after each call.
3500
3504
3501 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3505 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
3502 method to force all access via __call__(), which guarantees that
3506 method to force all access via __call__(), which guarantees that
3503 traceback references are properly deleted.
3507 traceback references are properly deleted.
3504
3508
3505 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3509 * IPython/Prompts.py (CachedOutput._display): minor fixes to
3506 improve printing when pprint is in use.
3510 improve printing when pprint is in use.
3507
3511
3508 2002-04-13 Fernando Perez <fperez@colorado.edu>
3512 2002-04-13 Fernando Perez <fperez@colorado.edu>
3509
3513
3510 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3514 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
3511 exceptions aren't caught anymore. If the user triggers one, he
3515 exceptions aren't caught anymore. If the user triggers one, he
3512 should know why he's doing it and it should go all the way up,
3516 should know why he's doing it and it should go all the way up,
3513 just like any other exception. So now @abort will fully kill the
3517 just like any other exception. So now @abort will fully kill the
3514 embedded interpreter and the embedding code (unless that happens
3518 embedded interpreter and the embedding code (unless that happens
3515 to catch SystemExit).
3519 to catch SystemExit).
3516
3520
3517 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3521 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
3518 and a debugger() method to invoke the interactive pdb debugger
3522 and a debugger() method to invoke the interactive pdb debugger
3519 after printing exception information. Also added the corresponding
3523 after printing exception information. Also added the corresponding
3520 -pdb option and @pdb magic to control this feature, and updated
3524 -pdb option and @pdb magic to control this feature, and updated
3521 the docs. After a suggestion from Christopher Hart
3525 the docs. After a suggestion from Christopher Hart
3522 (hart-AT-caltech.edu).
3526 (hart-AT-caltech.edu).
3523
3527
3524 2002-04-12 Fernando Perez <fperez@colorado.edu>
3528 2002-04-12 Fernando Perez <fperez@colorado.edu>
3525
3529
3526 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3530 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
3527 the exception handlers defined by the user (not the CrashHandler)
3531 the exception handlers defined by the user (not the CrashHandler)
3528 so that user exceptions don't trigger an ipython bug report.
3532 so that user exceptions don't trigger an ipython bug report.
3529
3533
3530 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3534 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
3531 configurable (it should have always been so).
3535 configurable (it should have always been so).
3532
3536
3533 2002-03-26 Fernando Perez <fperez@colorado.edu>
3537 2002-03-26 Fernando Perez <fperez@colorado.edu>
3534
3538
3535 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3539 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
3536 and there to fix embedding namespace issues. This should all be
3540 and there to fix embedding namespace issues. This should all be
3537 done in a more elegant way.
3541 done in a more elegant way.
3538
3542
3539 2002-03-25 Fernando Perez <fperez@colorado.edu>
3543 2002-03-25 Fernando Perez <fperez@colorado.edu>
3540
3544
3541 * IPython/genutils.py (get_home_dir): Try to make it work under
3545 * IPython/genutils.py (get_home_dir): Try to make it work under
3542 win9x also.
3546 win9x also.
3543
3547
3544 2002-03-20 Fernando Perez <fperez@colorado.edu>
3548 2002-03-20 Fernando Perez <fperez@colorado.edu>
3545
3549
3546 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3550 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
3547 sys.displayhook untouched upon __init__.
3551 sys.displayhook untouched upon __init__.
3548
3552
3549 2002-03-19 Fernando Perez <fperez@colorado.edu>
3553 2002-03-19 Fernando Perez <fperez@colorado.edu>
3550
3554
3551 * Released 0.2.9 (for embedding bug, basically).
3555 * Released 0.2.9 (for embedding bug, basically).
3552
3556
3553 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3557 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
3554 exceptions so that enclosing shell's state can be restored.
3558 exceptions so that enclosing shell's state can be restored.
3555
3559
3556 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3560 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
3557 naming conventions in the .ipython/ dir.
3561 naming conventions in the .ipython/ dir.
3558
3562
3559 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3563 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
3560 from delimiters list so filenames with - in them get expanded.
3564 from delimiters list so filenames with - in them get expanded.
3561
3565
3562 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3566 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
3563 sys.displayhook not being properly restored after an embedded call.
3567 sys.displayhook not being properly restored after an embedded call.
3564
3568
3565 2002-03-18 Fernando Perez <fperez@colorado.edu>
3569 2002-03-18 Fernando Perez <fperez@colorado.edu>
3566
3570
3567 * Released 0.2.8
3571 * Released 0.2.8
3568
3572
3569 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3573 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
3570 some files weren't being included in a -upgrade.
3574 some files weren't being included in a -upgrade.
3571 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3575 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
3572 on' so that the first tab completes.
3576 on' so that the first tab completes.
3573 (InteractiveShell.handle_magic): fixed bug with spaces around
3577 (InteractiveShell.handle_magic): fixed bug with spaces around
3574 quotes breaking many magic commands.
3578 quotes breaking many magic commands.
3575
3579
3576 * setup.py: added note about ignoring the syntax error messages at
3580 * setup.py: added note about ignoring the syntax error messages at
3577 installation.
3581 installation.
3578
3582
3579 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3583 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
3580 streamlining the gnuplot interface, now there's only one magic @gp.
3584 streamlining the gnuplot interface, now there's only one magic @gp.
3581
3585
3582 2002-03-17 Fernando Perez <fperez@colorado.edu>
3586 2002-03-17 Fernando Perez <fperez@colorado.edu>
3583
3587
3584 * IPython/UserConfig/magic_gnuplot.py: new name for the
3588 * IPython/UserConfig/magic_gnuplot.py: new name for the
3585 example-magic_pm.py file. Much enhanced system, now with a shell
3589 example-magic_pm.py file. Much enhanced system, now with a shell
3586 for communicating directly with gnuplot, one command at a time.
3590 for communicating directly with gnuplot, one command at a time.
3587
3591
3588 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3592 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
3589 setting __name__=='__main__'.
3593 setting __name__=='__main__'.
3590
3594
3591 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3595 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
3592 mini-shell for accessing gnuplot from inside ipython. Should
3596 mini-shell for accessing gnuplot from inside ipython. Should
3593 extend it later for grace access too. Inspired by Arnd's
3597 extend it later for grace access too. Inspired by Arnd's
3594 suggestion.
3598 suggestion.
3595
3599
3596 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3600 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
3597 calling magic functions with () in their arguments. Thanks to Arnd
3601 calling magic functions with () in their arguments. Thanks to Arnd
3598 Baecker for pointing this to me.
3602 Baecker for pointing this to me.
3599
3603
3600 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3604 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
3601 infinitely for integer or complex arrays (only worked with floats).
3605 infinitely for integer or complex arrays (only worked with floats).
3602
3606
3603 2002-03-16 Fernando Perez <fperez@colorado.edu>
3607 2002-03-16 Fernando Perez <fperez@colorado.edu>
3604
3608
3605 * setup.py: Merged setup and setup_windows into a single script
3609 * setup.py: Merged setup and setup_windows into a single script
3606 which properly handles things for windows users.
3610 which properly handles things for windows users.
3607
3611
3608 2002-03-15 Fernando Perez <fperez@colorado.edu>
3612 2002-03-15 Fernando Perez <fperez@colorado.edu>
3609
3613
3610 * Big change to the manual: now the magics are all automatically
3614 * Big change to the manual: now the magics are all automatically
3611 documented. This information is generated from their docstrings
3615 documented. This information is generated from their docstrings
3612 and put in a latex file included by the manual lyx file. This way
3616 and put in a latex file included by the manual lyx file. This way
3613 we get always up to date information for the magics. The manual
3617 we get always up to date information for the magics. The manual
3614 now also has proper version information, also auto-synced.
3618 now also has proper version information, also auto-synced.
3615
3619
3616 For this to work, an undocumented --magic_docstrings option was added.
3620 For this to work, an undocumented --magic_docstrings option was added.
3617
3621
3618 2002-03-13 Fernando Perez <fperez@colorado.edu>
3622 2002-03-13 Fernando Perez <fperez@colorado.edu>
3619
3623
3620 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3624 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
3621 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3625 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
3622
3626
3623 2002-03-12 Fernando Perez <fperez@colorado.edu>
3627 2002-03-12 Fernando Perez <fperez@colorado.edu>
3624
3628
3625 * IPython/ultraTB.py (TermColors): changed color escapes again to
3629 * IPython/ultraTB.py (TermColors): changed color escapes again to
3626 fix the (old, reintroduced) line-wrapping bug. Basically, if
3630 fix the (old, reintroduced) line-wrapping bug. Basically, if
3627 \001..\002 aren't given in the color escapes, lines get wrapped
3631 \001..\002 aren't given in the color escapes, lines get wrapped
3628 weirdly. But giving those screws up old xterms and emacs terms. So
3632 weirdly. But giving those screws up old xterms and emacs terms. So
3629 I added some logic for emacs terms to be ok, but I can't identify old
3633 I added some logic for emacs terms to be ok, but I can't identify old
3630 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3634 xterms separately ($TERM=='xterm' for many terminals, like konsole).
3631
3635
3632 2002-03-10 Fernando Perez <fperez@colorado.edu>
3636 2002-03-10 Fernando Perez <fperez@colorado.edu>
3633
3637
3634 * IPython/usage.py (__doc__): Various documentation cleanups and
3638 * IPython/usage.py (__doc__): Various documentation cleanups and
3635 updates, both in usage docstrings and in the manual.
3639 updates, both in usage docstrings and in the manual.
3636
3640
3637 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3641 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
3638 handling of caching. Set minimum acceptabe value for having a
3642 handling of caching. Set minimum acceptabe value for having a
3639 cache at 20 values.
3643 cache at 20 values.
3640
3644
3641 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3645 * IPython/iplib.py (InteractiveShell.user_setup): moved the
3642 install_first_time function to a method, renamed it and added an
3646 install_first_time function to a method, renamed it and added an
3643 'upgrade' mode. Now people can update their config directory with
3647 'upgrade' mode. Now people can update their config directory with
3644 a simple command line switch (-upgrade, also new).
3648 a simple command line switch (-upgrade, also new).
3645
3649
3646 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3650 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
3647 @file (convenient for automagic users under Python >= 2.2).
3651 @file (convenient for automagic users under Python >= 2.2).
3648 Removed @files (it seemed more like a plural than an abbrev. of
3652 Removed @files (it seemed more like a plural than an abbrev. of
3649 'file show').
3653 'file show').
3650
3654
3651 * IPython/iplib.py (install_first_time): Fixed crash if there were
3655 * IPython/iplib.py (install_first_time): Fixed crash if there were
3652 backup files ('~') in .ipython/ install directory.
3656 backup files ('~') in .ipython/ install directory.
3653
3657
3654 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3658 * IPython/ipmaker.py (make_IPython): fixes for new prompt
3655 system. Things look fine, but these changes are fairly
3659 system. Things look fine, but these changes are fairly
3656 intrusive. Test them for a few days.
3660 intrusive. Test them for a few days.
3657
3661
3658 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3662 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
3659 the prompts system. Now all in/out prompt strings are user
3663 the prompts system. Now all in/out prompt strings are user
3660 controllable. This is particularly useful for embedding, as one
3664 controllable. This is particularly useful for embedding, as one
3661 can tag embedded instances with particular prompts.
3665 can tag embedded instances with particular prompts.
3662
3666
3663 Also removed global use of sys.ps1/2, which now allows nested
3667 Also removed global use of sys.ps1/2, which now allows nested
3664 embeddings without any problems. Added command-line options for
3668 embeddings without any problems. Added command-line options for
3665 the prompt strings.
3669 the prompt strings.
3666
3670
3667 2002-03-08 Fernando Perez <fperez@colorado.edu>
3671 2002-03-08 Fernando Perez <fperez@colorado.edu>
3668
3672
3669 * IPython/UserConfig/example-embed-short.py (ipshell): added
3673 * IPython/UserConfig/example-embed-short.py (ipshell): added
3670 example file with the bare minimum code for embedding.
3674 example file with the bare minimum code for embedding.
3671
3675
3672 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3676 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
3673 functionality for the embeddable shell to be activated/deactivated
3677 functionality for the embeddable shell to be activated/deactivated
3674 either globally or at each call.
3678 either globally or at each call.
3675
3679
3676 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3680 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
3677 rewriting the prompt with '--->' for auto-inputs with proper
3681 rewriting the prompt with '--->' for auto-inputs with proper
3678 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3682 coloring. Now the previous UGLY hack in handle_auto() is gone, and
3679 this is handled by the prompts class itself, as it should.
3683 this is handled by the prompts class itself, as it should.
3680
3684
3681 2002-03-05 Fernando Perez <fperez@colorado.edu>
3685 2002-03-05 Fernando Perez <fperez@colorado.edu>
3682
3686
3683 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3687 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
3684 @logstart to avoid name clashes with the math log function.
3688 @logstart to avoid name clashes with the math log function.
3685
3689
3686 * Big updates to X/Emacs section of the manual.
3690 * Big updates to X/Emacs section of the manual.
3687
3691
3688 * Removed ipython_emacs. Milan explained to me how to pass
3692 * Removed ipython_emacs. Milan explained to me how to pass
3689 arguments to ipython through Emacs. Some day I'm going to end up
3693 arguments to ipython through Emacs. Some day I'm going to end up
3690 learning some lisp...
3694 learning some lisp...
3691
3695
3692 2002-03-04 Fernando Perez <fperez@colorado.edu>
3696 2002-03-04 Fernando Perez <fperez@colorado.edu>
3693
3697
3694 * IPython/ipython_emacs: Created script to be used as the
3698 * IPython/ipython_emacs: Created script to be used as the
3695 py-python-command Emacs variable so we can pass IPython
3699 py-python-command Emacs variable so we can pass IPython
3696 parameters. I can't figure out how to tell Emacs directly to pass
3700 parameters. I can't figure out how to tell Emacs directly to pass
3697 parameters to IPython, so a dummy shell script will do it.
3701 parameters to IPython, so a dummy shell script will do it.
3698
3702
3699 Other enhancements made for things to work better under Emacs'
3703 Other enhancements made for things to work better under Emacs'
3700 various types of terminals. Many thanks to Milan Zamazal
3704 various types of terminals. Many thanks to Milan Zamazal
3701 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3705 <pdm-AT-zamazal.org> for all the suggestions and pointers.
3702
3706
3703 2002-03-01 Fernando Perez <fperez@colorado.edu>
3707 2002-03-01 Fernando Perez <fperez@colorado.edu>
3704
3708
3705 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3709 * IPython/ipmaker.py (make_IPython): added a --readline! option so
3706 that loading of readline is now optional. This gives better
3710 that loading of readline is now optional. This gives better
3707 control to emacs users.
3711 control to emacs users.
3708
3712
3709 * IPython/ultraTB.py (__date__): Modified color escape sequences
3713 * IPython/ultraTB.py (__date__): Modified color escape sequences
3710 and now things work fine under xterm and in Emacs' term buffers
3714 and now things work fine under xterm and in Emacs' term buffers
3711 (though not shell ones). Well, in emacs you get colors, but all
3715 (though not shell ones). Well, in emacs you get colors, but all
3712 seem to be 'light' colors (no difference between dark and light
3716 seem to be 'light' colors (no difference between dark and light
3713 ones). But the garbage chars are gone, and also in xterms. It
3717 ones). But the garbage chars are gone, and also in xterms. It
3714 seems that now I'm using 'cleaner' ansi sequences.
3718 seems that now I'm using 'cleaner' ansi sequences.
3715
3719
3716 2002-02-21 Fernando Perez <fperez@colorado.edu>
3720 2002-02-21 Fernando Perez <fperez@colorado.edu>
3717
3721
3718 * Released 0.2.7 (mainly to publish the scoping fix).
3722 * Released 0.2.7 (mainly to publish the scoping fix).
3719
3723
3720 * IPython/Logger.py (Logger.logstate): added. A corresponding
3724 * IPython/Logger.py (Logger.logstate): added. A corresponding
3721 @logstate magic was created.
3725 @logstate magic was created.
3722
3726
3723 * IPython/Magic.py: fixed nested scoping problem under Python
3727 * IPython/Magic.py: fixed nested scoping problem under Python
3724 2.1.x (automagic wasn't working).
3728 2.1.x (automagic wasn't working).
3725
3729
3726 2002-02-20 Fernando Perez <fperez@colorado.edu>
3730 2002-02-20 Fernando Perez <fperez@colorado.edu>
3727
3731
3728 * Released 0.2.6.
3732 * Released 0.2.6.
3729
3733
3730 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3734 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
3731 option so that logs can come out without any headers at all.
3735 option so that logs can come out without any headers at all.
3732
3736
3733 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3737 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
3734 SciPy.
3738 SciPy.
3735
3739
3736 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3740 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
3737 that embedded IPython calls don't require vars() to be explicitly
3741 that embedded IPython calls don't require vars() to be explicitly
3738 passed. Now they are extracted from the caller's frame (code
3742 passed. Now they are extracted from the caller's frame (code
3739 snatched from Eric Jones' weave). Added better documentation to
3743 snatched from Eric Jones' weave). Added better documentation to
3740 the section on embedding and the example file.
3744 the section on embedding and the example file.
3741
3745
3742 * IPython/genutils.py (page): Changed so that under emacs, it just
3746 * IPython/genutils.py (page): Changed so that under emacs, it just
3743 prints the string. You can then page up and down in the emacs
3747 prints the string. You can then page up and down in the emacs
3744 buffer itself. This is how the builtin help() works.
3748 buffer itself. This is how the builtin help() works.
3745
3749
3746 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3750 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
3747 macro scoping: macros need to be executed in the user's namespace
3751 macro scoping: macros need to be executed in the user's namespace
3748 to work as if they had been typed by the user.
3752 to work as if they had been typed by the user.
3749
3753
3750 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3754 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
3751 execute automatically (no need to type 'exec...'). They then
3755 execute automatically (no need to type 'exec...'). They then
3752 behave like 'true macros'. The printing system was also modified
3756 behave like 'true macros'. The printing system was also modified
3753 for this to work.
3757 for this to work.
3754
3758
3755 2002-02-19 Fernando Perez <fperez@colorado.edu>
3759 2002-02-19 Fernando Perez <fperez@colorado.edu>
3756
3760
3757 * IPython/genutils.py (page_file): new function for paging files
3761 * IPython/genutils.py (page_file): new function for paging files
3758 in an OS-independent way. Also necessary for file viewing to work
3762 in an OS-independent way. Also necessary for file viewing to work
3759 well inside Emacs buffers.
3763 well inside Emacs buffers.
3760 (page): Added checks for being in an emacs buffer.
3764 (page): Added checks for being in an emacs buffer.
3761 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3765 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
3762 same bug in iplib.
3766 same bug in iplib.
3763
3767
3764 2002-02-18 Fernando Perez <fperez@colorado.edu>
3768 2002-02-18 Fernando Perez <fperez@colorado.edu>
3765
3769
3766 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3770 * IPython/iplib.py (InteractiveShell.init_readline): modified use
3767 of readline so that IPython can work inside an Emacs buffer.
3771 of readline so that IPython can work inside an Emacs buffer.
3768
3772
3769 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3773 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
3770 method signatures (they weren't really bugs, but it looks cleaner
3774 method signatures (they weren't really bugs, but it looks cleaner
3771 and keeps PyChecker happy).
3775 and keeps PyChecker happy).
3772
3776
3773 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3777 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
3774 for implementing various user-defined hooks. Currently only
3778 for implementing various user-defined hooks. Currently only
3775 display is done.
3779 display is done.
3776
3780
3777 * IPython/Prompts.py (CachedOutput._display): changed display
3781 * IPython/Prompts.py (CachedOutput._display): changed display
3778 functions so that they can be dynamically changed by users easily.
3782 functions so that they can be dynamically changed by users easily.
3779
3783
3780 * IPython/Extensions/numeric_formats.py (num_display): added an
3784 * IPython/Extensions/numeric_formats.py (num_display): added an
3781 extension for printing NumPy arrays in flexible manners. It
3785 extension for printing NumPy arrays in flexible manners. It
3782 doesn't do anything yet, but all the structure is in
3786 doesn't do anything yet, but all the structure is in
3783 place. Ultimately the plan is to implement output format control
3787 place. Ultimately the plan is to implement output format control
3784 like in Octave.
3788 like in Octave.
3785
3789
3786 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3790 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
3787 methods are found at run-time by all the automatic machinery.
3791 methods are found at run-time by all the automatic machinery.
3788
3792
3789 2002-02-17 Fernando Perez <fperez@colorado.edu>
3793 2002-02-17 Fernando Perez <fperez@colorado.edu>
3790
3794
3791 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3795 * setup_Windows.py (make_shortcut): documented. Cleaned up the
3792 whole file a little.
3796 whole file a little.
3793
3797
3794 * ToDo: closed this document. Now there's a new_design.lyx
3798 * ToDo: closed this document. Now there's a new_design.lyx
3795 document for all new ideas. Added making a pdf of it for the
3799 document for all new ideas. Added making a pdf of it for the
3796 end-user distro.
3800 end-user distro.
3797
3801
3798 * IPython/Logger.py (Logger.switch_log): Created this to replace
3802 * IPython/Logger.py (Logger.switch_log): Created this to replace
3799 logon() and logoff(). It also fixes a nasty crash reported by
3803 logon() and logoff(). It also fixes a nasty crash reported by
3800 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3804 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
3801
3805
3802 * IPython/iplib.py (complete): got auto-completion to work with
3806 * IPython/iplib.py (complete): got auto-completion to work with
3803 automagic (I had wanted this for a long time).
3807 automagic (I had wanted this for a long time).
3804
3808
3805 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3809 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
3806 to @file, since file() is now a builtin and clashes with automagic
3810 to @file, since file() is now a builtin and clashes with automagic
3807 for @file.
3811 for @file.
3808
3812
3809 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3813 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
3810 of this was previously in iplib, which had grown to more than 2000
3814 of this was previously in iplib, which had grown to more than 2000
3811 lines, way too long. No new functionality, but it makes managing
3815 lines, way too long. No new functionality, but it makes managing
3812 the code a bit easier.
3816 the code a bit easier.
3813
3817
3814 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3818 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
3815 information to crash reports.
3819 information to crash reports.
3816
3820
3817 2002-02-12 Fernando Perez <fperez@colorado.edu>
3821 2002-02-12 Fernando Perez <fperez@colorado.edu>
3818
3822
3819 * Released 0.2.5.
3823 * Released 0.2.5.
3820
3824
3821 2002-02-11 Fernando Perez <fperez@colorado.edu>
3825 2002-02-11 Fernando Perez <fperez@colorado.edu>
3822
3826
3823 * Wrote a relatively complete Windows installer. It puts
3827 * Wrote a relatively complete Windows installer. It puts
3824 everything in place, creates Start Menu entries and fixes the
3828 everything in place, creates Start Menu entries and fixes the
3825 color issues. Nothing fancy, but it works.
3829 color issues. Nothing fancy, but it works.
3826
3830
3827 2002-02-10 Fernando Perez <fperez@colorado.edu>
3831 2002-02-10 Fernando Perez <fperez@colorado.edu>
3828
3832
3829 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3833 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
3830 os.path.expanduser() call so that we can type @run ~/myfile.py and
3834 os.path.expanduser() call so that we can type @run ~/myfile.py and
3831 have thigs work as expected.
3835 have thigs work as expected.
3832
3836
3833 * IPython/genutils.py (page): fixed exception handling so things
3837 * IPython/genutils.py (page): fixed exception handling so things
3834 work both in Unix and Windows correctly. Quitting a pager triggers
3838 work both in Unix and Windows correctly. Quitting a pager triggers
3835 an IOError/broken pipe in Unix, and in windows not finding a pager
3839 an IOError/broken pipe in Unix, and in windows not finding a pager
3836 is also an IOError, so I had to actually look at the return value
3840 is also an IOError, so I had to actually look at the return value
3837 of the exception, not just the exception itself. Should be ok now.
3841 of the exception, not just the exception itself. Should be ok now.
3838
3842
3839 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3843 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
3840 modified to allow case-insensitive color scheme changes.
3844 modified to allow case-insensitive color scheme changes.
3841
3845
3842 2002-02-09 Fernando Perez <fperez@colorado.edu>
3846 2002-02-09 Fernando Perez <fperez@colorado.edu>
3843
3847
3844 * IPython/genutils.py (native_line_ends): new function to leave
3848 * IPython/genutils.py (native_line_ends): new function to leave
3845 user config files with os-native line-endings.
3849 user config files with os-native line-endings.
3846
3850
3847 * README and manual updates.
3851 * README and manual updates.
3848
3852
3849 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3853 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
3850 instead of StringType to catch Unicode strings.
3854 instead of StringType to catch Unicode strings.
3851
3855
3852 * IPython/genutils.py (filefind): fixed bug for paths with
3856 * IPython/genutils.py (filefind): fixed bug for paths with
3853 embedded spaces (very common in Windows).
3857 embedded spaces (very common in Windows).
3854
3858
3855 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3859 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
3856 files under Windows, so that they get automatically associated
3860 files under Windows, so that they get automatically associated
3857 with a text editor. Windows makes it a pain to handle
3861 with a text editor. Windows makes it a pain to handle
3858 extension-less files.
3862 extension-less files.
3859
3863
3860 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3864 * IPython/iplib.py (InteractiveShell.init_readline): Made the
3861 warning about readline only occur for Posix. In Windows there's no
3865 warning about readline only occur for Posix. In Windows there's no
3862 way to get readline, so why bother with the warning.
3866 way to get readline, so why bother with the warning.
3863
3867
3864 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3868 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
3865 for __str__ instead of dir(self), since dir() changed in 2.2.
3869 for __str__ instead of dir(self), since dir() changed in 2.2.
3866
3870
3867 * Ported to Windows! Tested on XP, I suspect it should work fine
3871 * Ported to Windows! Tested on XP, I suspect it should work fine
3868 on NT/2000, but I don't think it will work on 98 et al. That
3872 on NT/2000, but I don't think it will work on 98 et al. That
3869 series of Windows is such a piece of junk anyway that I won't try
3873 series of Windows is such a piece of junk anyway that I won't try
3870 porting it there. The XP port was straightforward, showed a few
3874 porting it there. The XP port was straightforward, showed a few
3871 bugs here and there (fixed all), in particular some string
3875 bugs here and there (fixed all), in particular some string
3872 handling stuff which required considering Unicode strings (which
3876 handling stuff which required considering Unicode strings (which
3873 Windows uses). This is good, but hasn't been too tested :) No
3877 Windows uses). This is good, but hasn't been too tested :) No
3874 fancy installer yet, I'll put a note in the manual so people at
3878 fancy installer yet, I'll put a note in the manual so people at
3875 least make manually a shortcut.
3879 least make manually a shortcut.
3876
3880
3877 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3881 * IPython/iplib.py (Magic.magic_colors): Unified the color options
3878 into a single one, "colors". This now controls both prompt and
3882 into a single one, "colors". This now controls both prompt and
3879 exception color schemes, and can be changed both at startup
3883 exception color schemes, and can be changed both at startup
3880 (either via command-line switches or via ipythonrc files) and at
3884 (either via command-line switches or via ipythonrc files) and at
3881 runtime, with @colors.
3885 runtime, with @colors.
3882 (Magic.magic_run): renamed @prun to @run and removed the old
3886 (Magic.magic_run): renamed @prun to @run and removed the old
3883 @run. The two were too similar to warrant keeping both.
3887 @run. The two were too similar to warrant keeping both.
3884
3888
3885 2002-02-03 Fernando Perez <fperez@colorado.edu>
3889 2002-02-03 Fernando Perez <fperez@colorado.edu>
3886
3890
3887 * IPython/iplib.py (install_first_time): Added comment on how to
3891 * IPython/iplib.py (install_first_time): Added comment on how to
3888 configure the color options for first-time users. Put a <return>
3892 configure the color options for first-time users. Put a <return>
3889 request at the end so that small-terminal users get a chance to
3893 request at the end so that small-terminal users get a chance to
3890 read the startup info.
3894 read the startup info.
3891
3895
3892 2002-01-23 Fernando Perez <fperez@colorado.edu>
3896 2002-01-23 Fernando Perez <fperez@colorado.edu>
3893
3897
3894 * IPython/iplib.py (CachedOutput.update): Changed output memory
3898 * IPython/iplib.py (CachedOutput.update): Changed output memory
3895 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3899 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
3896 input history we still use _i. Did this b/c these variable are
3900 input history we still use _i. Did this b/c these variable are
3897 very commonly used in interactive work, so the less we need to
3901 very commonly used in interactive work, so the less we need to
3898 type the better off we are.
3902 type the better off we are.
3899 (Magic.magic_prun): updated @prun to better handle the namespaces
3903 (Magic.magic_prun): updated @prun to better handle the namespaces
3900 the file will run in, including a fix for __name__ not being set
3904 the file will run in, including a fix for __name__ not being set
3901 before.
3905 before.
3902
3906
3903 2002-01-20 Fernando Perez <fperez@colorado.edu>
3907 2002-01-20 Fernando Perez <fperez@colorado.edu>
3904
3908
3905 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
3909 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
3906 extra garbage for Python 2.2. Need to look more carefully into
3910 extra garbage for Python 2.2. Need to look more carefully into
3907 this later.
3911 this later.
3908
3912
3909 2002-01-19 Fernando Perez <fperez@colorado.edu>
3913 2002-01-19 Fernando Perez <fperez@colorado.edu>
3910
3914
3911 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
3915 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
3912 display SyntaxError exceptions properly formatted when they occur
3916 display SyntaxError exceptions properly formatted when they occur
3913 (they can be triggered by imported code).
3917 (they can be triggered by imported code).
3914
3918
3915 2002-01-18 Fernando Perez <fperez@colorado.edu>
3919 2002-01-18 Fernando Perez <fperez@colorado.edu>
3916
3920
3917 * IPython/iplib.py (InteractiveShell.safe_execfile): now
3921 * IPython/iplib.py (InteractiveShell.safe_execfile): now
3918 SyntaxError exceptions are reported nicely formatted, instead of
3922 SyntaxError exceptions are reported nicely formatted, instead of
3919 spitting out only offset information as before.
3923 spitting out only offset information as before.
3920 (Magic.magic_prun): Added the @prun function for executing
3924 (Magic.magic_prun): Added the @prun function for executing
3921 programs with command line args inside IPython.
3925 programs with command line args inside IPython.
3922
3926
3923 2002-01-16 Fernando Perez <fperez@colorado.edu>
3927 2002-01-16 Fernando Perez <fperez@colorado.edu>
3924
3928
3925 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
3929 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
3926 to *not* include the last item given in a range. This brings their
3930 to *not* include the last item given in a range. This brings their
3927 behavior in line with Python's slicing:
3931 behavior in line with Python's slicing:
3928 a[n1:n2] -> a[n1]...a[n2-1]
3932 a[n1:n2] -> a[n1]...a[n2-1]
3929 It may be a bit less convenient, but I prefer to stick to Python's
3933 It may be a bit less convenient, but I prefer to stick to Python's
3930 conventions *everywhere*, so users never have to wonder.
3934 conventions *everywhere*, so users never have to wonder.
3931 (Magic.magic_macro): Added @macro function to ease the creation of
3935 (Magic.magic_macro): Added @macro function to ease the creation of
3932 macros.
3936 macros.
3933
3937
3934 2002-01-05 Fernando Perez <fperez@colorado.edu>
3938 2002-01-05 Fernando Perez <fperez@colorado.edu>
3935
3939
3936 * Released 0.2.4.
3940 * Released 0.2.4.
3937
3941
3938 * IPython/iplib.py (Magic.magic_pdef):
3942 * IPython/iplib.py (Magic.magic_pdef):
3939 (InteractiveShell.safe_execfile): report magic lines and error
3943 (InteractiveShell.safe_execfile): report magic lines and error
3940 lines without line numbers so one can easily copy/paste them for
3944 lines without line numbers so one can easily copy/paste them for
3941 re-execution.
3945 re-execution.
3942
3946
3943 * Updated manual with recent changes.
3947 * Updated manual with recent changes.
3944
3948
3945 * IPython/iplib.py (Magic.magic_oinfo): added constructor
3949 * IPython/iplib.py (Magic.magic_oinfo): added constructor
3946 docstring printing when class? is called. Very handy for knowing
3950 docstring printing when class? is called. Very handy for knowing
3947 how to create class instances (as long as __init__ is well
3951 how to create class instances (as long as __init__ is well
3948 documented, of course :)
3952 documented, of course :)
3949 (Magic.magic_doc): print both class and constructor docstrings.
3953 (Magic.magic_doc): print both class and constructor docstrings.
3950 (Magic.magic_pdef): give constructor info if passed a class and
3954 (Magic.magic_pdef): give constructor info if passed a class and
3951 __call__ info for callable object instances.
3955 __call__ info for callable object instances.
3952
3956
3953 2002-01-04 Fernando Perez <fperez@colorado.edu>
3957 2002-01-04 Fernando Perez <fperez@colorado.edu>
3954
3958
3955 * Made deep_reload() off by default. It doesn't always work
3959 * Made deep_reload() off by default. It doesn't always work
3956 exactly as intended, so it's probably safer to have it off. It's
3960 exactly as intended, so it's probably safer to have it off. It's
3957 still available as dreload() anyway, so nothing is lost.
3961 still available as dreload() anyway, so nothing is lost.
3958
3962
3959 2002-01-02 Fernando Perez <fperez@colorado.edu>
3963 2002-01-02 Fernando Perez <fperez@colorado.edu>
3960
3964
3961 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
3965 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
3962 so I wanted an updated release).
3966 so I wanted an updated release).
3963
3967
3964 2001-12-27 Fernando Perez <fperez@colorado.edu>
3968 2001-12-27 Fernando Perez <fperez@colorado.edu>
3965
3969
3966 * IPython/iplib.py (InteractiveShell.interact): Added the original
3970 * IPython/iplib.py (InteractiveShell.interact): Added the original
3967 code from 'code.py' for this module in order to change the
3971 code from 'code.py' for this module in order to change the
3968 handling of a KeyboardInterrupt. This was necessary b/c otherwise
3972 handling of a KeyboardInterrupt. This was necessary b/c otherwise
3969 the history cache would break when the user hit Ctrl-C, and
3973 the history cache would break when the user hit Ctrl-C, and
3970 interact() offers no way to add any hooks to it.
3974 interact() offers no way to add any hooks to it.
3971
3975
3972 2001-12-23 Fernando Perez <fperez@colorado.edu>
3976 2001-12-23 Fernando Perez <fperez@colorado.edu>
3973
3977
3974 * setup.py: added check for 'MANIFEST' before trying to remove
3978 * setup.py: added check for 'MANIFEST' before trying to remove
3975 it. Thanks to Sean Reifschneider.
3979 it. Thanks to Sean Reifschneider.
3976
3980
3977 2001-12-22 Fernando Perez <fperez@colorado.edu>
3981 2001-12-22 Fernando Perez <fperez@colorado.edu>
3978
3982
3979 * Released 0.2.2.
3983 * Released 0.2.2.
3980
3984
3981 * Finished (reasonably) writing the manual. Later will add the
3985 * Finished (reasonably) writing the manual. Later will add the
3982 python-standard navigation stylesheets, but for the time being
3986 python-standard navigation stylesheets, but for the time being
3983 it's fairly complete. Distribution will include html and pdf
3987 it's fairly complete. Distribution will include html and pdf
3984 versions.
3988 versions.
3985
3989
3986 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
3990 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
3987 (MayaVi author).
3991 (MayaVi author).
3988
3992
3989 2001-12-21 Fernando Perez <fperez@colorado.edu>
3993 2001-12-21 Fernando Perez <fperez@colorado.edu>
3990
3994
3991 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
3995 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
3992 good public release, I think (with the manual and the distutils
3996 good public release, I think (with the manual and the distutils
3993 installer). The manual can use some work, but that can go
3997 installer). The manual can use some work, but that can go
3994 slowly. Otherwise I think it's quite nice for end users. Next
3998 slowly. Otherwise I think it's quite nice for end users. Next
3995 summer, rewrite the guts of it...
3999 summer, rewrite the guts of it...
3996
4000
3997 * Changed format of ipythonrc files to use whitespace as the
4001 * Changed format of ipythonrc files to use whitespace as the
3998 separator instead of an explicit '='. Cleaner.
4002 separator instead of an explicit '='. Cleaner.
3999
4003
4000 2001-12-20 Fernando Perez <fperez@colorado.edu>
4004 2001-12-20 Fernando Perez <fperez@colorado.edu>
4001
4005
4002 * Started a manual in LyX. For now it's just a quick merge of the
4006 * Started a manual in LyX. For now it's just a quick merge of the
4003 various internal docstrings and READMEs. Later it may grow into a
4007 various internal docstrings and READMEs. Later it may grow into a
4004 nice, full-blown manual.
4008 nice, full-blown manual.
4005
4009
4006 * Set up a distutils based installer. Installation should now be
4010 * Set up a distutils based installer. Installation should now be
4007 trivially simple for end-users.
4011 trivially simple for end-users.
4008
4012
4009 2001-12-11 Fernando Perez <fperez@colorado.edu>
4013 2001-12-11 Fernando Perez <fperez@colorado.edu>
4010
4014
4011 * Released 0.2.0. First public release, announced it at
4015 * Released 0.2.0. First public release, announced it at
4012 comp.lang.python. From now on, just bugfixes...
4016 comp.lang.python. From now on, just bugfixes...
4013
4017
4014 * Went through all the files, set copyright/license notices and
4018 * Went through all the files, set copyright/license notices and
4015 cleaned up things. Ready for release.
4019 cleaned up things. Ready for release.
4016
4020
4017 2001-12-10 Fernando Perez <fperez@colorado.edu>
4021 2001-12-10 Fernando Perez <fperez@colorado.edu>
4018
4022
4019 * Changed the first-time installer not to use tarfiles. It's more
4023 * Changed the first-time installer not to use tarfiles. It's more
4020 robust now and less unix-dependent. Also makes it easier for
4024 robust now and less unix-dependent. Also makes it easier for
4021 people to later upgrade versions.
4025 people to later upgrade versions.
4022
4026
4023 * Changed @exit to @abort to reflect the fact that it's pretty
4027 * Changed @exit to @abort to reflect the fact that it's pretty
4024 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4028 brutal (a sys.exit()). The difference between @abort and Ctrl-D
4025 becomes significant only when IPyhton is embedded: in that case,
4029 becomes significant only when IPyhton is embedded: in that case,
4026 C-D closes IPython only, but @abort kills the enclosing program
4030 C-D closes IPython only, but @abort kills the enclosing program
4027 too (unless it had called IPython inside a try catching
4031 too (unless it had called IPython inside a try catching
4028 SystemExit).
4032 SystemExit).
4029
4033
4030 * Created Shell module which exposes the actuall IPython Shell
4034 * Created Shell module which exposes the actuall IPython Shell
4031 classes, currently the normal and the embeddable one. This at
4035 classes, currently the normal and the embeddable one. This at
4032 least offers a stable interface we won't need to change when
4036 least offers a stable interface we won't need to change when
4033 (later) the internals are rewritten. That rewrite will be confined
4037 (later) the internals are rewritten. That rewrite will be confined
4034 to iplib and ipmaker, but the Shell interface should remain as is.
4038 to iplib and ipmaker, but the Shell interface should remain as is.
4035
4039
4036 * Added embed module which offers an embeddable IPShell object,
4040 * Added embed module which offers an embeddable IPShell object,
4037 useful to fire up IPython *inside* a running program. Great for
4041 useful to fire up IPython *inside* a running program. Great for
4038 debugging or dynamical data analysis.
4042 debugging or dynamical data analysis.
4039
4043
4040 2001-12-08 Fernando Perez <fperez@colorado.edu>
4044 2001-12-08 Fernando Perez <fperez@colorado.edu>
4041
4045
4042 * Fixed small bug preventing seeing info from methods of defined
4046 * Fixed small bug preventing seeing info from methods of defined
4043 objects (incorrect namespace in _ofind()).
4047 objects (incorrect namespace in _ofind()).
4044
4048
4045 * Documentation cleanup. Moved the main usage docstrings to a
4049 * Documentation cleanup. Moved the main usage docstrings to a
4046 separate file, usage.py (cleaner to maintain, and hopefully in the
4050 separate file, usage.py (cleaner to maintain, and hopefully in the
4047 future some perlpod-like way of producing interactive, man and
4051 future some perlpod-like way of producing interactive, man and
4048 html docs out of it will be found).
4052 html docs out of it will be found).
4049
4053
4050 * Added @profile to see your profile at any time.
4054 * Added @profile to see your profile at any time.
4051
4055
4052 * Added @p as an alias for 'print'. It's especially convenient if
4056 * Added @p as an alias for 'print'. It's especially convenient if
4053 using automagic ('p x' prints x).
4057 using automagic ('p x' prints x).
4054
4058
4055 * Small cleanups and fixes after a pychecker run.
4059 * Small cleanups and fixes after a pychecker run.
4056
4060
4057 * Changed the @cd command to handle @cd - and @cd -<n> for
4061 * Changed the @cd command to handle @cd - and @cd -<n> for
4058 visiting any directory in _dh.
4062 visiting any directory in _dh.
4059
4063
4060 * Introduced _dh, a history of visited directories. @dhist prints
4064 * Introduced _dh, a history of visited directories. @dhist prints
4061 it out with numbers.
4065 it out with numbers.
4062
4066
4063 2001-12-07 Fernando Perez <fperez@colorado.edu>
4067 2001-12-07 Fernando Perez <fperez@colorado.edu>
4064
4068
4065 * Released 0.1.22
4069 * Released 0.1.22
4066
4070
4067 * Made initialization a bit more robust against invalid color
4071 * Made initialization a bit more robust against invalid color
4068 options in user input (exit, not traceback-crash).
4072 options in user input (exit, not traceback-crash).
4069
4073
4070 * Changed the bug crash reporter to write the report only in the
4074 * Changed the bug crash reporter to write the report only in the
4071 user's .ipython directory. That way IPython won't litter people's
4075 user's .ipython directory. That way IPython won't litter people's
4072 hard disks with crash files all over the place. Also print on
4076 hard disks with crash files all over the place. Also print on
4073 screen the necessary mail command.
4077 screen the necessary mail command.
4074
4078
4075 * With the new ultraTB, implemented LightBG color scheme for light
4079 * With the new ultraTB, implemented LightBG color scheme for light
4076 background terminals. A lot of people like white backgrounds, so I
4080 background terminals. A lot of people like white backgrounds, so I
4077 guess we should at least give them something readable.
4081 guess we should at least give them something readable.
4078
4082
4079 2001-12-06 Fernando Perez <fperez@colorado.edu>
4083 2001-12-06 Fernando Perez <fperez@colorado.edu>
4080
4084
4081 * Modified the structure of ultraTB. Now there's a proper class
4085 * Modified the structure of ultraTB. Now there's a proper class
4082 for tables of color schemes which allow adding schemes easily and
4086 for tables of color schemes which allow adding schemes easily and
4083 switching the active scheme without creating a new instance every
4087 switching the active scheme without creating a new instance every
4084 time (which was ridiculous). The syntax for creating new schemes
4088 time (which was ridiculous). The syntax for creating new schemes
4085 is also cleaner. I think ultraTB is finally done, with a clean
4089 is also cleaner. I think ultraTB is finally done, with a clean
4086 class structure. Names are also much cleaner (now there's proper
4090 class structure. Names are also much cleaner (now there's proper
4087 color tables, no need for every variable to also have 'color' in
4091 color tables, no need for every variable to also have 'color' in
4088 its name).
4092 its name).
4089
4093
4090 * Broke down genutils into separate files. Now genutils only
4094 * Broke down genutils into separate files. Now genutils only
4091 contains utility functions, and classes have been moved to their
4095 contains utility functions, and classes have been moved to their
4092 own files (they had enough independent functionality to warrant
4096 own files (they had enough independent functionality to warrant
4093 it): ConfigLoader, OutputTrap, Struct.
4097 it): ConfigLoader, OutputTrap, Struct.
4094
4098
4095 2001-12-05 Fernando Perez <fperez@colorado.edu>
4099 2001-12-05 Fernando Perez <fperez@colorado.edu>
4096
4100
4097 * IPython turns 21! Released version 0.1.21, as a candidate for
4101 * IPython turns 21! Released version 0.1.21, as a candidate for
4098 public consumption. If all goes well, release in a few days.
4102 public consumption. If all goes well, release in a few days.
4099
4103
4100 * Fixed path bug (files in Extensions/ directory wouldn't be found
4104 * Fixed path bug (files in Extensions/ directory wouldn't be found
4101 unless IPython/ was explicitly in sys.path).
4105 unless IPython/ was explicitly in sys.path).
4102
4106
4103 * Extended the FlexCompleter class as MagicCompleter to allow
4107 * Extended the FlexCompleter class as MagicCompleter to allow
4104 completion of @-starting lines.
4108 completion of @-starting lines.
4105
4109
4106 * Created __release__.py file as a central repository for release
4110 * Created __release__.py file as a central repository for release
4107 info that other files can read from.
4111 info that other files can read from.
4108
4112
4109 * Fixed small bug in logging: when logging was turned on in
4113 * Fixed small bug in logging: when logging was turned on in
4110 mid-session, old lines with special meanings (!@?) were being
4114 mid-session, old lines with special meanings (!@?) were being
4111 logged without the prepended comment, which is necessary since
4115 logged without the prepended comment, which is necessary since
4112 they are not truly valid python syntax. This should make session
4116 they are not truly valid python syntax. This should make session
4113 restores produce less errors.
4117 restores produce less errors.
4114
4118
4115 * The namespace cleanup forced me to make a FlexCompleter class
4119 * The namespace cleanup forced me to make a FlexCompleter class
4116 which is nothing but a ripoff of rlcompleter, but with selectable
4120 which is nothing but a ripoff of rlcompleter, but with selectable
4117 namespace (rlcompleter only works in __main__.__dict__). I'll try
4121 namespace (rlcompleter only works in __main__.__dict__). I'll try
4118 to submit a note to the authors to see if this change can be
4122 to submit a note to the authors to see if this change can be
4119 incorporated in future rlcompleter releases (Dec.6: done)
4123 incorporated in future rlcompleter releases (Dec.6: done)
4120
4124
4121 * More fixes to namespace handling. It was a mess! Now all
4125 * More fixes to namespace handling. It was a mess! Now all
4122 explicit references to __main__.__dict__ are gone (except when
4126 explicit references to __main__.__dict__ are gone (except when
4123 really needed) and everything is handled through the namespace
4127 really needed) and everything is handled through the namespace
4124 dicts in the IPython instance. We seem to be getting somewhere
4128 dicts in the IPython instance. We seem to be getting somewhere
4125 with this, finally...
4129 with this, finally...
4126
4130
4127 * Small documentation updates.
4131 * Small documentation updates.
4128
4132
4129 * Created the Extensions directory under IPython (with an
4133 * Created the Extensions directory under IPython (with an
4130 __init__.py). Put the PhysicalQ stuff there. This directory should
4134 __init__.py). Put the PhysicalQ stuff there. This directory should
4131 be used for all special-purpose extensions.
4135 be used for all special-purpose extensions.
4132
4136
4133 * File renaming:
4137 * File renaming:
4134 ipythonlib --> ipmaker
4138 ipythonlib --> ipmaker
4135 ipplib --> iplib
4139 ipplib --> iplib
4136 This makes a bit more sense in terms of what these files actually do.
4140 This makes a bit more sense in terms of what these files actually do.
4137
4141
4138 * Moved all the classes and functions in ipythonlib to ipplib, so
4142 * Moved all the classes and functions in ipythonlib to ipplib, so
4139 now ipythonlib only has make_IPython(). This will ease up its
4143 now ipythonlib only has make_IPython(). This will ease up its
4140 splitting in smaller functional chunks later.
4144 splitting in smaller functional chunks later.
4141
4145
4142 * Cleaned up (done, I think) output of @whos. Better column
4146 * Cleaned up (done, I think) output of @whos. Better column
4143 formatting, and now shows str(var) for as much as it can, which is
4147 formatting, and now shows str(var) for as much as it can, which is
4144 typically what one gets with a 'print var'.
4148 typically what one gets with a 'print var'.
4145
4149
4146 2001-12-04 Fernando Perez <fperez@colorado.edu>
4150 2001-12-04 Fernando Perez <fperez@colorado.edu>
4147
4151
4148 * Fixed namespace problems. Now builtin/IPyhton/user names get
4152 * Fixed namespace problems. Now builtin/IPyhton/user names get
4149 properly reported in their namespace. Internal namespace handling
4153 properly reported in their namespace. Internal namespace handling
4150 is finally getting decent (not perfect yet, but much better than
4154 is finally getting decent (not perfect yet, but much better than
4151 the ad-hoc mess we had).
4155 the ad-hoc mess we had).
4152
4156
4153 * Removed -exit option. If people just want to run a python
4157 * Removed -exit option. If people just want to run a python
4154 script, that's what the normal interpreter is for. Less
4158 script, that's what the normal interpreter is for. Less
4155 unnecessary options, less chances for bugs.
4159 unnecessary options, less chances for bugs.
4156
4160
4157 * Added a crash handler which generates a complete post-mortem if
4161 * Added a crash handler which generates a complete post-mortem if
4158 IPython crashes. This will help a lot in tracking bugs down the
4162 IPython crashes. This will help a lot in tracking bugs down the
4159 road.
4163 road.
4160
4164
4161 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4165 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
4162 which were boud to functions being reassigned would bypass the
4166 which were boud to functions being reassigned would bypass the
4163 logger, breaking the sync of _il with the prompt counter. This
4167 logger, breaking the sync of _il with the prompt counter. This
4164 would then crash IPython later when a new line was logged.
4168 would then crash IPython later when a new line was logged.
4165
4169
4166 2001-12-02 Fernando Perez <fperez@colorado.edu>
4170 2001-12-02 Fernando Perez <fperez@colorado.edu>
4167
4171
4168 * Made IPython a package. This means people don't have to clutter
4172 * Made IPython a package. This means people don't have to clutter
4169 their sys.path with yet another directory. Changed the INSTALL
4173 their sys.path with yet another directory. Changed the INSTALL
4170 file accordingly.
4174 file accordingly.
4171
4175
4172 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4176 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
4173 sorts its output (so @who shows it sorted) and @whos formats the
4177 sorts its output (so @who shows it sorted) and @whos formats the
4174 table according to the width of the first column. Nicer, easier to
4178 table according to the width of the first column. Nicer, easier to
4175 read. Todo: write a generic table_format() which takes a list of
4179 read. Todo: write a generic table_format() which takes a list of
4176 lists and prints it nicely formatted, with optional row/column
4180 lists and prints it nicely formatted, with optional row/column
4177 separators and proper padding and justification.
4181 separators and proper padding and justification.
4178
4182
4179 * Released 0.1.20
4183 * Released 0.1.20
4180
4184
4181 * Fixed bug in @log which would reverse the inputcache list (a
4185 * Fixed bug in @log which would reverse the inputcache list (a
4182 copy operation was missing).
4186 copy operation was missing).
4183
4187
4184 * Code cleanup. @config was changed to use page(). Better, since
4188 * Code cleanup. @config was changed to use page(). Better, since
4185 its output is always quite long.
4189 its output is always quite long.
4186
4190
4187 * Itpl is back as a dependency. I was having too many problems
4191 * Itpl is back as a dependency. I was having too many problems
4188 getting the parametric aliases to work reliably, and it's just
4192 getting the parametric aliases to work reliably, and it's just
4189 easier to code weird string operations with it than playing %()s
4193 easier to code weird string operations with it than playing %()s
4190 games. It's only ~6k, so I don't think it's too big a deal.
4194 games. It's only ~6k, so I don't think it's too big a deal.
4191
4195
4192 * Found (and fixed) a very nasty bug with history. !lines weren't
4196 * Found (and fixed) a very nasty bug with history. !lines weren't
4193 getting cached, and the out of sync caches would crash
4197 getting cached, and the out of sync caches would crash
4194 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4198 IPython. Fixed it by reorganizing the prefilter/handlers/logger
4195 division of labor a bit better. Bug fixed, cleaner structure.
4199 division of labor a bit better. Bug fixed, cleaner structure.
4196
4200
4197 2001-12-01 Fernando Perez <fperez@colorado.edu>
4201 2001-12-01 Fernando Perez <fperez@colorado.edu>
4198
4202
4199 * Released 0.1.19
4203 * Released 0.1.19
4200
4204
4201 * Added option -n to @hist to prevent line number printing. Much
4205 * Added option -n to @hist to prevent line number printing. Much
4202 easier to copy/paste code this way.
4206 easier to copy/paste code this way.
4203
4207
4204 * Created global _il to hold the input list. Allows easy
4208 * Created global _il to hold the input list. Allows easy
4205 re-execution of blocks of code by slicing it (inspired by Janko's
4209 re-execution of blocks of code by slicing it (inspired by Janko's
4206 comment on 'macros').
4210 comment on 'macros').
4207
4211
4208 * Small fixes and doc updates.
4212 * Small fixes and doc updates.
4209
4213
4210 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4214 * Rewrote @history function (was @h). Renamed it to @hist, @h is
4211 much too fragile with automagic. Handles properly multi-line
4215 much too fragile with automagic. Handles properly multi-line
4212 statements and takes parameters.
4216 statements and takes parameters.
4213
4217
4214 2001-11-30 Fernando Perez <fperez@colorado.edu>
4218 2001-11-30 Fernando Perez <fperez@colorado.edu>
4215
4219
4216 * Version 0.1.18 released.
4220 * Version 0.1.18 released.
4217
4221
4218 * Fixed nasty namespace bug in initial module imports.
4222 * Fixed nasty namespace bug in initial module imports.
4219
4223
4220 * Added copyright/license notes to all code files (except
4224 * Added copyright/license notes to all code files (except
4221 DPyGetOpt). For the time being, LGPL. That could change.
4225 DPyGetOpt). For the time being, LGPL. That could change.
4222
4226
4223 * Rewrote a much nicer README, updated INSTALL, cleaned up
4227 * Rewrote a much nicer README, updated INSTALL, cleaned up
4224 ipythonrc-* samples.
4228 ipythonrc-* samples.
4225
4229
4226 * Overall code/documentation cleanup. Basically ready for
4230 * Overall code/documentation cleanup. Basically ready for
4227 release. Only remaining thing: licence decision (LGPL?).
4231 release. Only remaining thing: licence decision (LGPL?).
4228
4232
4229 * Converted load_config to a class, ConfigLoader. Now recursion
4233 * Converted load_config to a class, ConfigLoader. Now recursion
4230 control is better organized. Doesn't include the same file twice.
4234 control is better organized. Doesn't include the same file twice.
4231
4235
4232 2001-11-29 Fernando Perez <fperez@colorado.edu>
4236 2001-11-29 Fernando Perez <fperez@colorado.edu>
4233
4237
4234 * Got input history working. Changed output history variables from
4238 * Got input history working. Changed output history variables from
4235 _p to _o so that _i is for input and _o for output. Just cleaner
4239 _p to _o so that _i is for input and _o for output. Just cleaner
4236 convention.
4240 convention.
4237
4241
4238 * Implemented parametric aliases. This pretty much allows the
4242 * Implemented parametric aliases. This pretty much allows the
4239 alias system to offer full-blown shell convenience, I think.
4243 alias system to offer full-blown shell convenience, I think.
4240
4244
4241 * Version 0.1.17 released, 0.1.18 opened.
4245 * Version 0.1.17 released, 0.1.18 opened.
4242
4246
4243 * dot_ipython/ipythonrc (alias): added documentation.
4247 * dot_ipython/ipythonrc (alias): added documentation.
4244 (xcolor): Fixed small bug (xcolors -> xcolor)
4248 (xcolor): Fixed small bug (xcolors -> xcolor)
4245
4249
4246 * Changed the alias system. Now alias is a magic command to define
4250 * Changed the alias system. Now alias is a magic command to define
4247 aliases just like the shell. Rationale: the builtin magics should
4251 aliases just like the shell. Rationale: the builtin magics should
4248 be there for things deeply connected to IPython's
4252 be there for things deeply connected to IPython's
4249 architecture. And this is a much lighter system for what I think
4253 architecture. And this is a much lighter system for what I think
4250 is the really important feature: allowing users to define quickly
4254 is the really important feature: allowing users to define quickly
4251 magics that will do shell things for them, so they can customize
4255 magics that will do shell things for them, so they can customize
4252 IPython easily to match their work habits. If someone is really
4256 IPython easily to match their work habits. If someone is really
4253 desperate to have another name for a builtin alias, they can
4257 desperate to have another name for a builtin alias, they can
4254 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4258 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
4255 works.
4259 works.
4256
4260
4257 2001-11-28 Fernando Perez <fperez@colorado.edu>
4261 2001-11-28 Fernando Perez <fperez@colorado.edu>
4258
4262
4259 * Changed @file so that it opens the source file at the proper
4263 * Changed @file so that it opens the source file at the proper
4260 line. Since it uses less, if your EDITOR environment is
4264 line. Since it uses less, if your EDITOR environment is
4261 configured, typing v will immediately open your editor of choice
4265 configured, typing v will immediately open your editor of choice
4262 right at the line where the object is defined. Not as quick as
4266 right at the line where the object is defined. Not as quick as
4263 having a direct @edit command, but for all intents and purposes it
4267 having a direct @edit command, but for all intents and purposes it
4264 works. And I don't have to worry about writing @edit to deal with
4268 works. And I don't have to worry about writing @edit to deal with
4265 all the editors, less does that.
4269 all the editors, less does that.
4266
4270
4267 * Version 0.1.16 released, 0.1.17 opened.
4271 * Version 0.1.16 released, 0.1.17 opened.
4268
4272
4269 * Fixed some nasty bugs in the page/page_dumb combo that could
4273 * Fixed some nasty bugs in the page/page_dumb combo that could
4270 crash IPython.
4274 crash IPython.
4271
4275
4272 2001-11-27 Fernando Perez <fperez@colorado.edu>
4276 2001-11-27 Fernando Perez <fperez@colorado.edu>
4273
4277
4274 * Version 0.1.15 released, 0.1.16 opened.
4278 * Version 0.1.15 released, 0.1.16 opened.
4275
4279
4276 * Finally got ? and ?? to work for undefined things: now it's
4280 * Finally got ? and ?? to work for undefined things: now it's
4277 possible to type {}.get? and get information about the get method
4281 possible to type {}.get? and get information about the get method
4278 of dicts, or os.path? even if only os is defined (so technically
4282 of dicts, or os.path? even if only os is defined (so technically
4279 os.path isn't). Works at any level. For example, after import os,
4283 os.path isn't). Works at any level. For example, after import os,
4280 os?, os.path?, os.path.abspath? all work. This is great, took some
4284 os?, os.path?, os.path.abspath? all work. This is great, took some
4281 work in _ofind.
4285 work in _ofind.
4282
4286
4283 * Fixed more bugs with logging. The sanest way to do it was to add
4287 * Fixed more bugs with logging. The sanest way to do it was to add
4284 to @log a 'mode' parameter. Killed two in one shot (this mode
4288 to @log a 'mode' parameter. Killed two in one shot (this mode
4285 option was a request of Janko's). I think it's finally clean
4289 option was a request of Janko's). I think it's finally clean
4286 (famous last words).
4290 (famous last words).
4287
4291
4288 * Added a page_dumb() pager which does a decent job of paging on
4292 * Added a page_dumb() pager which does a decent job of paging on
4289 screen, if better things (like less) aren't available. One less
4293 screen, if better things (like less) aren't available. One less
4290 unix dependency (someday maybe somebody will port this to
4294 unix dependency (someday maybe somebody will port this to
4291 windows).
4295 windows).
4292
4296
4293 * Fixed problem in magic_log: would lock of logging out if log
4297 * Fixed problem in magic_log: would lock of logging out if log
4294 creation failed (because it would still think it had succeeded).
4298 creation failed (because it would still think it had succeeded).
4295
4299
4296 * Improved the page() function using curses to auto-detect screen
4300 * Improved the page() function using curses to auto-detect screen
4297 size. Now it can make a much better decision on whether to print
4301 size. Now it can make a much better decision on whether to print
4298 or page a string. Option screen_length was modified: a value 0
4302 or page a string. Option screen_length was modified: a value 0
4299 means auto-detect, and that's the default now.
4303 means auto-detect, and that's the default now.
4300
4304
4301 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4305 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
4302 go out. I'll test it for a few days, then talk to Janko about
4306 go out. I'll test it for a few days, then talk to Janko about
4303 licences and announce it.
4307 licences and announce it.
4304
4308
4305 * Fixed the length of the auto-generated ---> prompt which appears
4309 * Fixed the length of the auto-generated ---> prompt which appears
4306 for auto-parens and auto-quotes. Getting this right isn't trivial,
4310 for auto-parens and auto-quotes. Getting this right isn't trivial,
4307 with all the color escapes, different prompt types and optional
4311 with all the color escapes, different prompt types and optional
4308 separators. But it seems to be working in all the combinations.
4312 separators. But it seems to be working in all the combinations.
4309
4313
4310 2001-11-26 Fernando Perez <fperez@colorado.edu>
4314 2001-11-26 Fernando Perez <fperez@colorado.edu>
4311
4315
4312 * Wrote a regexp filter to get option types from the option names
4316 * Wrote a regexp filter to get option types from the option names
4313 string. This eliminates the need to manually keep two duplicate
4317 string. This eliminates the need to manually keep two duplicate
4314 lists.
4318 lists.
4315
4319
4316 * Removed the unneeded check_option_names. Now options are handled
4320 * Removed the unneeded check_option_names. Now options are handled
4317 in a much saner manner and it's easy to visually check that things
4321 in a much saner manner and it's easy to visually check that things
4318 are ok.
4322 are ok.
4319
4323
4320 * Updated version numbers on all files I modified to carry a
4324 * Updated version numbers on all files I modified to carry a
4321 notice so Janko and Nathan have clear version markers.
4325 notice so Janko and Nathan have clear version markers.
4322
4326
4323 * Updated docstring for ultraTB with my changes. I should send
4327 * Updated docstring for ultraTB with my changes. I should send
4324 this to Nathan.
4328 this to Nathan.
4325
4329
4326 * Lots of small fixes. Ran everything through pychecker again.
4330 * Lots of small fixes. Ran everything through pychecker again.
4327
4331
4328 * Made loading of deep_reload an cmd line option. If it's not too
4332 * Made loading of deep_reload an cmd line option. If it's not too
4329 kosher, now people can just disable it. With -nodeep_reload it's
4333 kosher, now people can just disable it. With -nodeep_reload it's
4330 still available as dreload(), it just won't overwrite reload().
4334 still available as dreload(), it just won't overwrite reload().
4331
4335
4332 * Moved many options to the no| form (-opt and -noopt
4336 * Moved many options to the no| form (-opt and -noopt
4333 accepted). Cleaner.
4337 accepted). Cleaner.
4334
4338
4335 * Changed magic_log so that if called with no parameters, it uses
4339 * Changed magic_log so that if called with no parameters, it uses
4336 'rotate' mode. That way auto-generated logs aren't automatically
4340 'rotate' mode. That way auto-generated logs aren't automatically
4337 over-written. For normal logs, now a backup is made if it exists
4341 over-written. For normal logs, now a backup is made if it exists
4338 (only 1 level of backups). A new 'backup' mode was added to the
4342 (only 1 level of backups). A new 'backup' mode was added to the
4339 Logger class to support this. This was a request by Janko.
4343 Logger class to support this. This was a request by Janko.
4340
4344
4341 * Added @logoff/@logon to stop/restart an active log.
4345 * Added @logoff/@logon to stop/restart an active log.
4342
4346
4343 * Fixed a lot of bugs in log saving/replay. It was pretty
4347 * Fixed a lot of bugs in log saving/replay. It was pretty
4344 broken. Now special lines (!@,/) appear properly in the command
4348 broken. Now special lines (!@,/) appear properly in the command
4345 history after a log replay.
4349 history after a log replay.
4346
4350
4347 * Tried and failed to implement full session saving via pickle. My
4351 * Tried and failed to implement full session saving via pickle. My
4348 idea was to pickle __main__.__dict__, but modules can't be
4352 idea was to pickle __main__.__dict__, but modules can't be
4349 pickled. This would be a better alternative to replaying logs, but
4353 pickled. This would be a better alternative to replaying logs, but
4350 seems quite tricky to get to work. Changed -session to be called
4354 seems quite tricky to get to work. Changed -session to be called
4351 -logplay, which more accurately reflects what it does. And if we
4355 -logplay, which more accurately reflects what it does. And if we
4352 ever get real session saving working, -session is now available.
4356 ever get real session saving working, -session is now available.
4353
4357
4354 * Implemented color schemes for prompts also. As for tracebacks,
4358 * Implemented color schemes for prompts also. As for tracebacks,
4355 currently only NoColor and Linux are supported. But now the
4359 currently only NoColor and Linux are supported. But now the
4356 infrastructure is in place, based on a generic ColorScheme
4360 infrastructure is in place, based on a generic ColorScheme
4357 class. So writing and activating new schemes both for the prompts
4361 class. So writing and activating new schemes both for the prompts
4358 and the tracebacks should be straightforward.
4362 and the tracebacks should be straightforward.
4359
4363
4360 * Version 0.1.13 released, 0.1.14 opened.
4364 * Version 0.1.13 released, 0.1.14 opened.
4361
4365
4362 * Changed handling of options for output cache. Now counter is
4366 * Changed handling of options for output cache. Now counter is
4363 hardwired starting at 1 and one specifies the maximum number of
4367 hardwired starting at 1 and one specifies the maximum number of
4364 entries *in the outcache* (not the max prompt counter). This is
4368 entries *in the outcache* (not the max prompt counter). This is
4365 much better, since many statements won't increase the cache
4369 much better, since many statements won't increase the cache
4366 count. It also eliminated some confusing options, now there's only
4370 count. It also eliminated some confusing options, now there's only
4367 one: cache_size.
4371 one: cache_size.
4368
4372
4369 * Added 'alias' magic function and magic_alias option in the
4373 * Added 'alias' magic function and magic_alias option in the
4370 ipythonrc file. Now the user can easily define whatever names he
4374 ipythonrc file. Now the user can easily define whatever names he
4371 wants for the magic functions without having to play weird
4375 wants for the magic functions without having to play weird
4372 namespace games. This gives IPython a real shell-like feel.
4376 namespace games. This gives IPython a real shell-like feel.
4373
4377
4374 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4378 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
4375 @ or not).
4379 @ or not).
4376
4380
4377 This was one of the last remaining 'visible' bugs (that I know
4381 This was one of the last remaining 'visible' bugs (that I know
4378 of). I think if I can clean up the session loading so it works
4382 of). I think if I can clean up the session loading so it works
4379 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4383 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
4380 about licensing).
4384 about licensing).
4381
4385
4382 2001-11-25 Fernando Perez <fperez@colorado.edu>
4386 2001-11-25 Fernando Perez <fperez@colorado.edu>
4383
4387
4384 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4388 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
4385 there's a cleaner distinction between what ? and ?? show.
4389 there's a cleaner distinction between what ? and ?? show.
4386
4390
4387 * Added screen_length option. Now the user can define his own
4391 * Added screen_length option. Now the user can define his own
4388 screen size for page() operations.
4392 screen size for page() operations.
4389
4393
4390 * Implemented magic shell-like functions with automatic code
4394 * Implemented magic shell-like functions with automatic code
4391 generation. Now adding another function is just a matter of adding
4395 generation. Now adding another function is just a matter of adding
4392 an entry to a dict, and the function is dynamically generated at
4396 an entry to a dict, and the function is dynamically generated at
4393 run-time. Python has some really cool features!
4397 run-time. Python has some really cool features!
4394
4398
4395 * Renamed many options to cleanup conventions a little. Now all
4399 * Renamed many options to cleanup conventions a little. Now all
4396 are lowercase, and only underscores where needed. Also in the code
4400 are lowercase, and only underscores where needed. Also in the code
4397 option name tables are clearer.
4401 option name tables are clearer.
4398
4402
4399 * Changed prompts a little. Now input is 'In [n]:' instead of
4403 * Changed prompts a little. Now input is 'In [n]:' instead of
4400 'In[n]:='. This allows it the numbers to be aligned with the
4404 'In[n]:='. This allows it the numbers to be aligned with the
4401 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4405 Out[n] numbers, and removes usage of ':=' which doesn't exist in
4402 Python (it was a Mathematica thing). The '...' continuation prompt
4406 Python (it was a Mathematica thing). The '...' continuation prompt
4403 was also changed a little to align better.
4407 was also changed a little to align better.
4404
4408
4405 * Fixed bug when flushing output cache. Not all _p<n> variables
4409 * Fixed bug when flushing output cache. Not all _p<n> variables
4406 exist, so their deletion needs to be wrapped in a try:
4410 exist, so their deletion needs to be wrapped in a try:
4407
4411
4408 * Figured out how to properly use inspect.formatargspec() (it
4412 * Figured out how to properly use inspect.formatargspec() (it
4409 requires the args preceded by *). So I removed all the code from
4413 requires the args preceded by *). So I removed all the code from
4410 _get_pdef in Magic, which was just replicating that.
4414 _get_pdef in Magic, which was just replicating that.
4411
4415
4412 * Added test to prefilter to allow redefining magic function names
4416 * Added test to prefilter to allow redefining magic function names
4413 as variables. This is ok, since the @ form is always available,
4417 as variables. This is ok, since the @ form is always available,
4414 but whe should allow the user to define a variable called 'ls' if
4418 but whe should allow the user to define a variable called 'ls' if
4415 he needs it.
4419 he needs it.
4416
4420
4417 * Moved the ToDo information from README into a separate ToDo.
4421 * Moved the ToDo information from README into a separate ToDo.
4418
4422
4419 * General code cleanup and small bugfixes. I think it's close to a
4423 * General code cleanup and small bugfixes. I think it's close to a
4420 state where it can be released, obviously with a big 'beta'
4424 state where it can be released, obviously with a big 'beta'
4421 warning on it.
4425 warning on it.
4422
4426
4423 * Got the magic function split to work. Now all magics are defined
4427 * Got the magic function split to work. Now all magics are defined
4424 in a separate class. It just organizes things a bit, and now
4428 in a separate class. It just organizes things a bit, and now
4425 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4429 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
4426 was too long).
4430 was too long).
4427
4431
4428 * Changed @clear to @reset to avoid potential confusions with
4432 * Changed @clear to @reset to avoid potential confusions with
4429 the shell command clear. Also renamed @cl to @clear, which does
4433 the shell command clear. Also renamed @cl to @clear, which does
4430 exactly what people expect it to from their shell experience.
4434 exactly what people expect it to from their shell experience.
4431
4435
4432 Added a check to the @reset command (since it's so
4436 Added a check to the @reset command (since it's so
4433 destructive, it's probably a good idea to ask for confirmation).
4437 destructive, it's probably a good idea to ask for confirmation).
4434 But now reset only works for full namespace resetting. Since the
4438 But now reset only works for full namespace resetting. Since the
4435 del keyword is already there for deleting a few specific
4439 del keyword is already there for deleting a few specific
4436 variables, I don't see the point of having a redundant magic
4440 variables, I don't see the point of having a redundant magic
4437 function for the same task.
4441 function for the same task.
4438
4442
4439 2001-11-24 Fernando Perez <fperez@colorado.edu>
4443 2001-11-24 Fernando Perez <fperez@colorado.edu>
4440
4444
4441 * Updated the builtin docs (esp. the ? ones).
4445 * Updated the builtin docs (esp. the ? ones).
4442
4446
4443 * Ran all the code through pychecker. Not terribly impressed with
4447 * Ran all the code through pychecker. Not terribly impressed with
4444 it: lots of spurious warnings and didn't really find anything of
4448 it: lots of spurious warnings and didn't really find anything of
4445 substance (just a few modules being imported and not used).
4449 substance (just a few modules being imported and not used).
4446
4450
4447 * Implemented the new ultraTB functionality into IPython. New
4451 * Implemented the new ultraTB functionality into IPython. New
4448 option: xcolors. This chooses color scheme. xmode now only selects
4452 option: xcolors. This chooses color scheme. xmode now only selects
4449 between Plain and Verbose. Better orthogonality.
4453 between Plain and Verbose. Better orthogonality.
4450
4454
4451 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4455 * Large rewrite of ultraTB. Much cleaner now, with a separation of
4452 mode and color scheme for the exception handlers. Now it's
4456 mode and color scheme for the exception handlers. Now it's
4453 possible to have the verbose traceback with no coloring.
4457 possible to have the verbose traceback with no coloring.
4454
4458
4455 2001-11-23 Fernando Perez <fperez@colorado.edu>
4459 2001-11-23 Fernando Perez <fperez@colorado.edu>
4456
4460
4457 * Version 0.1.12 released, 0.1.13 opened.
4461 * Version 0.1.12 released, 0.1.13 opened.
4458
4462
4459 * Removed option to set auto-quote and auto-paren escapes by
4463 * Removed option to set auto-quote and auto-paren escapes by
4460 user. The chances of breaking valid syntax are just too high. If
4464 user. The chances of breaking valid syntax are just too high. If
4461 someone *really* wants, they can always dig into the code.
4465 someone *really* wants, they can always dig into the code.
4462
4466
4463 * Made prompt separators configurable.
4467 * Made prompt separators configurable.
4464
4468
4465 2001-11-22 Fernando Perez <fperez@colorado.edu>
4469 2001-11-22 Fernando Perez <fperez@colorado.edu>
4466
4470
4467 * Small bugfixes in many places.
4471 * Small bugfixes in many places.
4468
4472
4469 * Removed the MyCompleter class from ipplib. It seemed redundant
4473 * Removed the MyCompleter class from ipplib. It seemed redundant
4470 with the C-p,C-n history search functionality. Less code to
4474 with the C-p,C-n history search functionality. Less code to
4471 maintain.
4475 maintain.
4472
4476
4473 * Moved all the original ipython.py code into ipythonlib.py. Right
4477 * Moved all the original ipython.py code into ipythonlib.py. Right
4474 now it's just one big dump into a function called make_IPython, so
4478 now it's just one big dump into a function called make_IPython, so
4475 no real modularity has been gained. But at least it makes the
4479 no real modularity has been gained. But at least it makes the
4476 wrapper script tiny, and since ipythonlib is a module, it gets
4480 wrapper script tiny, and since ipythonlib is a module, it gets
4477 compiled and startup is much faster.
4481 compiled and startup is much faster.
4478
4482
4479 This is a reasobably 'deep' change, so we should test it for a
4483 This is a reasobably 'deep' change, so we should test it for a
4480 while without messing too much more with the code.
4484 while without messing too much more with the code.
4481
4485
4482 2001-11-21 Fernando Perez <fperez@colorado.edu>
4486 2001-11-21 Fernando Perez <fperez@colorado.edu>
4483
4487
4484 * Version 0.1.11 released, 0.1.12 opened for further work.
4488 * Version 0.1.11 released, 0.1.12 opened for further work.
4485
4489
4486 * Removed dependency on Itpl. It was only needed in one place. It
4490 * Removed dependency on Itpl. It was only needed in one place. It
4487 would be nice if this became part of python, though. It makes life
4491 would be nice if this became part of python, though. It makes life
4488 *a lot* easier in some cases.
4492 *a lot* easier in some cases.
4489
4493
4490 * Simplified the prefilter code a bit. Now all handlers are
4494 * Simplified the prefilter code a bit. Now all handlers are
4491 expected to explicitly return a value (at least a blank string).
4495 expected to explicitly return a value (at least a blank string).
4492
4496
4493 * Heavy edits in ipplib. Removed the help system altogether. Now
4497 * Heavy edits in ipplib. Removed the help system altogether. Now
4494 obj?/?? is used for inspecting objects, a magic @doc prints
4498 obj?/?? is used for inspecting objects, a magic @doc prints
4495 docstrings, and full-blown Python help is accessed via the 'help'
4499 docstrings, and full-blown Python help is accessed via the 'help'
4496 keyword. This cleans up a lot of code (less to maintain) and does
4500 keyword. This cleans up a lot of code (less to maintain) and does
4497 the job. Since 'help' is now a standard Python component, might as
4501 the job. Since 'help' is now a standard Python component, might as
4498 well use it and remove duplicate functionality.
4502 well use it and remove duplicate functionality.
4499
4503
4500 Also removed the option to use ipplib as a standalone program. By
4504 Also removed the option to use ipplib as a standalone program. By
4501 now it's too dependent on other parts of IPython to function alone.
4505 now it's too dependent on other parts of IPython to function alone.
4502
4506
4503 * Fixed bug in genutils.pager. It would crash if the pager was
4507 * Fixed bug in genutils.pager. It would crash if the pager was
4504 exited immediately after opening (broken pipe).
4508 exited immediately after opening (broken pipe).
4505
4509
4506 * Trimmed down the VerboseTB reporting a little. The header is
4510 * Trimmed down the VerboseTB reporting a little. The header is
4507 much shorter now and the repeated exception arguments at the end
4511 much shorter now and the repeated exception arguments at the end
4508 have been removed. For interactive use the old header seemed a bit
4512 have been removed. For interactive use the old header seemed a bit
4509 excessive.
4513 excessive.
4510
4514
4511 * Fixed small bug in output of @whos for variables with multi-word
4515 * Fixed small bug in output of @whos for variables with multi-word
4512 types (only first word was displayed).
4516 types (only first word was displayed).
4513
4517
4514 2001-11-17 Fernando Perez <fperez@colorado.edu>
4518 2001-11-17 Fernando Perez <fperez@colorado.edu>
4515
4519
4516 * Version 0.1.10 released, 0.1.11 opened for further work.
4520 * Version 0.1.10 released, 0.1.11 opened for further work.
4517
4521
4518 * Modified dirs and friends. dirs now *returns* the stack (not
4522 * Modified dirs and friends. dirs now *returns* the stack (not
4519 prints), so one can manipulate it as a variable. Convenient to
4523 prints), so one can manipulate it as a variable. Convenient to
4520 travel along many directories.
4524 travel along many directories.
4521
4525
4522 * Fixed bug in magic_pdef: would only work with functions with
4526 * Fixed bug in magic_pdef: would only work with functions with
4523 arguments with default values.
4527 arguments with default values.
4524
4528
4525 2001-11-14 Fernando Perez <fperez@colorado.edu>
4529 2001-11-14 Fernando Perez <fperez@colorado.edu>
4526
4530
4527 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4531 * Added the PhysicsInput stuff to dot_ipython so it ships as an
4528 example with IPython. Various other minor fixes and cleanups.
4532 example with IPython. Various other minor fixes and cleanups.
4529
4533
4530 * Version 0.1.9 released, 0.1.10 opened for further work.
4534 * Version 0.1.9 released, 0.1.10 opened for further work.
4531
4535
4532 * Added sys.path to the list of directories searched in the
4536 * Added sys.path to the list of directories searched in the
4533 execfile= option. It used to be the current directory and the
4537 execfile= option. It used to be the current directory and the
4534 user's IPYTHONDIR only.
4538 user's IPYTHONDIR only.
4535
4539
4536 2001-11-13 Fernando Perez <fperez@colorado.edu>
4540 2001-11-13 Fernando Perez <fperez@colorado.edu>
4537
4541
4538 * Reinstated the raw_input/prefilter separation that Janko had
4542 * Reinstated the raw_input/prefilter separation that Janko had
4539 initially. This gives a more convenient setup for extending the
4543 initially. This gives a more convenient setup for extending the
4540 pre-processor from the outside: raw_input always gets a string,
4544 pre-processor from the outside: raw_input always gets a string,
4541 and prefilter has to process it. We can then redefine prefilter
4545 and prefilter has to process it. We can then redefine prefilter
4542 from the outside and implement extensions for special
4546 from the outside and implement extensions for special
4543 purposes.
4547 purposes.
4544
4548
4545 Today I got one for inputting PhysicalQuantity objects
4549 Today I got one for inputting PhysicalQuantity objects
4546 (from Scientific) without needing any function calls at
4550 (from Scientific) without needing any function calls at
4547 all. Extremely convenient, and it's all done as a user-level
4551 all. Extremely convenient, and it's all done as a user-level
4548 extension (no IPython code was touched). Now instead of:
4552 extension (no IPython code was touched). Now instead of:
4549 a = PhysicalQuantity(4.2,'m/s**2')
4553 a = PhysicalQuantity(4.2,'m/s**2')
4550 one can simply say
4554 one can simply say
4551 a = 4.2 m/s**2
4555 a = 4.2 m/s**2
4552 or even
4556 or even
4553 a = 4.2 m/s^2
4557 a = 4.2 m/s^2
4554
4558
4555 I use this, but it's also a proof of concept: IPython really is
4559 I use this, but it's also a proof of concept: IPython really is
4556 fully user-extensible, even at the level of the parsing of the
4560 fully user-extensible, even at the level of the parsing of the
4557 command line. It's not trivial, but it's perfectly doable.
4561 command line. It's not trivial, but it's perfectly doable.
4558
4562
4559 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4563 * Added 'add_flip' method to inclusion conflict resolver. Fixes
4560 the problem of modules being loaded in the inverse order in which
4564 the problem of modules being loaded in the inverse order in which
4561 they were defined in
4565 they were defined in
4562
4566
4563 * Version 0.1.8 released, 0.1.9 opened for further work.
4567 * Version 0.1.8 released, 0.1.9 opened for further work.
4564
4568
4565 * Added magics pdef, source and file. They respectively show the
4569 * Added magics pdef, source and file. They respectively show the
4566 definition line ('prototype' in C), source code and full python
4570 definition line ('prototype' in C), source code and full python
4567 file for any callable object. The object inspector oinfo uses
4571 file for any callable object. The object inspector oinfo uses
4568 these to show the same information.
4572 these to show the same information.
4569
4573
4570 * Version 0.1.7 released, 0.1.8 opened for further work.
4574 * Version 0.1.7 released, 0.1.8 opened for further work.
4571
4575
4572 * Separated all the magic functions into a class called Magic. The
4576 * Separated all the magic functions into a class called Magic. The
4573 InteractiveShell class was becoming too big for Xemacs to handle
4577 InteractiveShell class was becoming too big for Xemacs to handle
4574 (de-indenting a line would lock it up for 10 seconds while it
4578 (de-indenting a line would lock it up for 10 seconds while it
4575 backtracked on the whole class!)
4579 backtracked on the whole class!)
4576
4580
4577 FIXME: didn't work. It can be done, but right now namespaces are
4581 FIXME: didn't work. It can be done, but right now namespaces are
4578 all messed up. Do it later (reverted it for now, so at least
4582 all messed up. Do it later (reverted it for now, so at least
4579 everything works as before).
4583 everything works as before).
4580
4584
4581 * Got the object introspection system (magic_oinfo) working! I
4585 * Got the object introspection system (magic_oinfo) working! I
4582 think this is pretty much ready for release to Janko, so he can
4586 think this is pretty much ready for release to Janko, so he can
4583 test it for a while and then announce it. Pretty much 100% of what
4587 test it for a while and then announce it. Pretty much 100% of what
4584 I wanted for the 'phase 1' release is ready. Happy, tired.
4588 I wanted for the 'phase 1' release is ready. Happy, tired.
4585
4589
4586 2001-11-12 Fernando Perez <fperez@colorado.edu>
4590 2001-11-12 Fernando Perez <fperez@colorado.edu>
4587
4591
4588 * Version 0.1.6 released, 0.1.7 opened for further work.
4592 * Version 0.1.6 released, 0.1.7 opened for further work.
4589
4593
4590 * Fixed bug in printing: it used to test for truth before
4594 * Fixed bug in printing: it used to test for truth before
4591 printing, so 0 wouldn't print. Now checks for None.
4595 printing, so 0 wouldn't print. Now checks for None.
4592
4596
4593 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4597 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
4594 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4598 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
4595 reaches by hand into the outputcache. Think of a better way to do
4599 reaches by hand into the outputcache. Think of a better way to do
4596 this later.
4600 this later.
4597
4601
4598 * Various small fixes thanks to Nathan's comments.
4602 * Various small fixes thanks to Nathan's comments.
4599
4603
4600 * Changed magic_pprint to magic_Pprint. This way it doesn't
4604 * Changed magic_pprint to magic_Pprint. This way it doesn't
4601 collide with pprint() and the name is consistent with the command
4605 collide with pprint() and the name is consistent with the command
4602 line option.
4606 line option.
4603
4607
4604 * Changed prompt counter behavior to be fully like
4608 * Changed prompt counter behavior to be fully like
4605 Mathematica's. That is, even input that doesn't return a result
4609 Mathematica's. That is, even input that doesn't return a result
4606 raises the prompt counter. The old behavior was kind of confusing
4610 raises the prompt counter. The old behavior was kind of confusing
4607 (getting the same prompt number several times if the operation
4611 (getting the same prompt number several times if the operation
4608 didn't return a result).
4612 didn't return a result).
4609
4613
4610 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4614 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
4611
4615
4612 * Fixed -Classic mode (wasn't working anymore).
4616 * Fixed -Classic mode (wasn't working anymore).
4613
4617
4614 * Added colored prompts using Nathan's new code. Colors are
4618 * Added colored prompts using Nathan's new code. Colors are
4615 currently hardwired, they can be user-configurable. For
4619 currently hardwired, they can be user-configurable. For
4616 developers, they can be chosen in file ipythonlib.py, at the
4620 developers, they can be chosen in file ipythonlib.py, at the
4617 beginning of the CachedOutput class def.
4621 beginning of the CachedOutput class def.
4618
4622
4619 2001-11-11 Fernando Perez <fperez@colorado.edu>
4623 2001-11-11 Fernando Perez <fperez@colorado.edu>
4620
4624
4621 * Version 0.1.5 released, 0.1.6 opened for further work.
4625 * Version 0.1.5 released, 0.1.6 opened for further work.
4622
4626
4623 * Changed magic_env to *return* the environment as a dict (not to
4627 * Changed magic_env to *return* the environment as a dict (not to
4624 print it). This way it prints, but it can also be processed.
4628 print it). This way it prints, but it can also be processed.
4625
4629
4626 * Added Verbose exception reporting to interactive
4630 * Added Verbose exception reporting to interactive
4627 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4631 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
4628 traceback. Had to make some changes to the ultraTB file. This is
4632 traceback. Had to make some changes to the ultraTB file. This is
4629 probably the last 'big' thing in my mental todo list. This ties
4633 probably the last 'big' thing in my mental todo list. This ties
4630 in with the next entry:
4634 in with the next entry:
4631
4635
4632 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4636 * Changed -Xi and -Xf to a single -xmode option. Now all the user
4633 has to specify is Plain, Color or Verbose for all exception
4637 has to specify is Plain, Color or Verbose for all exception
4634 handling.
4638 handling.
4635
4639
4636 * Removed ShellServices option. All this can really be done via
4640 * Removed ShellServices option. All this can really be done via
4637 the magic system. It's easier to extend, cleaner and has automatic
4641 the magic system. It's easier to extend, cleaner and has automatic
4638 namespace protection and documentation.
4642 namespace protection and documentation.
4639
4643
4640 2001-11-09 Fernando Perez <fperez@colorado.edu>
4644 2001-11-09 Fernando Perez <fperez@colorado.edu>
4641
4645
4642 * Fixed bug in output cache flushing (missing parameter to
4646 * Fixed bug in output cache flushing (missing parameter to
4643 __init__). Other small bugs fixed (found using pychecker).
4647 __init__). Other small bugs fixed (found using pychecker).
4644
4648
4645 * Version 0.1.4 opened for bugfixing.
4649 * Version 0.1.4 opened for bugfixing.
4646
4650
4647 2001-11-07 Fernando Perez <fperez@colorado.edu>
4651 2001-11-07 Fernando Perez <fperez@colorado.edu>
4648
4652
4649 * Version 0.1.3 released, mainly because of the raw_input bug.
4653 * Version 0.1.3 released, mainly because of the raw_input bug.
4650
4654
4651 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4655 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
4652 and when testing for whether things were callable, a call could
4656 and when testing for whether things were callable, a call could
4653 actually be made to certain functions. They would get called again
4657 actually be made to certain functions. They would get called again
4654 once 'really' executed, with a resulting double call. A disaster
4658 once 'really' executed, with a resulting double call. A disaster
4655 in many cases (list.reverse() would never work!).
4659 in many cases (list.reverse() would never work!).
4656
4660
4657 * Removed prefilter() function, moved its code to raw_input (which
4661 * Removed prefilter() function, moved its code to raw_input (which
4658 after all was just a near-empty caller for prefilter). This saves
4662 after all was just a near-empty caller for prefilter). This saves
4659 a function call on every prompt, and simplifies the class a tiny bit.
4663 a function call on every prompt, and simplifies the class a tiny bit.
4660
4664
4661 * Fix _ip to __ip name in magic example file.
4665 * Fix _ip to __ip name in magic example file.
4662
4666
4663 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4667 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
4664 work with non-gnu versions of tar.
4668 work with non-gnu versions of tar.
4665
4669
4666 2001-11-06 Fernando Perez <fperez@colorado.edu>
4670 2001-11-06 Fernando Perez <fperez@colorado.edu>
4667
4671
4668 * Version 0.1.2. Just to keep track of the recent changes.
4672 * Version 0.1.2. Just to keep track of the recent changes.
4669
4673
4670 * Fixed nasty bug in output prompt routine. It used to check 'if
4674 * Fixed nasty bug in output prompt routine. It used to check 'if
4671 arg != None...'. Problem is, this fails if arg implements a
4675 arg != None...'. Problem is, this fails if arg implements a
4672 special comparison (__cmp__) which disallows comparing to
4676 special comparison (__cmp__) which disallows comparing to
4673 None. Found it when trying to use the PhysicalQuantity module from
4677 None. Found it when trying to use the PhysicalQuantity module from
4674 ScientificPython.
4678 ScientificPython.
4675
4679
4676 2001-11-05 Fernando Perez <fperez@colorado.edu>
4680 2001-11-05 Fernando Perez <fperez@colorado.edu>
4677
4681
4678 * Also added dirs. Now the pushd/popd/dirs family functions
4682 * Also added dirs. Now the pushd/popd/dirs family functions
4679 basically like the shell, with the added convenience of going home
4683 basically like the shell, with the added convenience of going home
4680 when called with no args.
4684 when called with no args.
4681
4685
4682 * pushd/popd slightly modified to mimic shell behavior more
4686 * pushd/popd slightly modified to mimic shell behavior more
4683 closely.
4687 closely.
4684
4688
4685 * Added env,pushd,popd from ShellServices as magic functions. I
4689 * Added env,pushd,popd from ShellServices as magic functions. I
4686 think the cleanest will be to port all desired functions from
4690 think the cleanest will be to port all desired functions from
4687 ShellServices as magics and remove ShellServices altogether. This
4691 ShellServices as magics and remove ShellServices altogether. This
4688 will provide a single, clean way of adding functionality
4692 will provide a single, clean way of adding functionality
4689 (shell-type or otherwise) to IP.
4693 (shell-type or otherwise) to IP.
4690
4694
4691 2001-11-04 Fernando Perez <fperez@colorado.edu>
4695 2001-11-04 Fernando Perez <fperez@colorado.edu>
4692
4696
4693 * Added .ipython/ directory to sys.path. This way users can keep
4697 * Added .ipython/ directory to sys.path. This way users can keep
4694 customizations there and access them via import.
4698 customizations there and access them via import.
4695
4699
4696 2001-11-03 Fernando Perez <fperez@colorado.edu>
4700 2001-11-03 Fernando Perez <fperez@colorado.edu>
4697
4701
4698 * Opened version 0.1.1 for new changes.
4702 * Opened version 0.1.1 for new changes.
4699
4703
4700 * Changed version number to 0.1.0: first 'public' release, sent to
4704 * Changed version number to 0.1.0: first 'public' release, sent to
4701 Nathan and Janko.
4705 Nathan and Janko.
4702
4706
4703 * Lots of small fixes and tweaks.
4707 * Lots of small fixes and tweaks.
4704
4708
4705 * Minor changes to whos format. Now strings are shown, snipped if
4709 * Minor changes to whos format. Now strings are shown, snipped if
4706 too long.
4710 too long.
4707
4711
4708 * Changed ShellServices to work on __main__ so they show up in @who
4712 * Changed ShellServices to work on __main__ so they show up in @who
4709
4713
4710 * Help also works with ? at the end of a line:
4714 * Help also works with ? at the end of a line:
4711 ?sin and sin?
4715 ?sin and sin?
4712 both produce the same effect. This is nice, as often I use the
4716 both produce the same effect. This is nice, as often I use the
4713 tab-complete to find the name of a method, but I used to then have
4717 tab-complete to find the name of a method, but I used to then have
4714 to go to the beginning of the line to put a ? if I wanted more
4718 to go to the beginning of the line to put a ? if I wanted more
4715 info. Now I can just add the ? and hit return. Convenient.
4719 info. Now I can just add the ? and hit return. Convenient.
4716
4720
4717 2001-11-02 Fernando Perez <fperez@colorado.edu>
4721 2001-11-02 Fernando Perez <fperez@colorado.edu>
4718
4722
4719 * Python version check (>=2.1) added.
4723 * Python version check (>=2.1) added.
4720
4724
4721 * Added LazyPython documentation. At this point the docs are quite
4725 * Added LazyPython documentation. At this point the docs are quite
4722 a mess. A cleanup is in order.
4726 a mess. A cleanup is in order.
4723
4727
4724 * Auto-installer created. For some bizarre reason, the zipfiles
4728 * Auto-installer created. For some bizarre reason, the zipfiles
4725 module isn't working on my system. So I made a tar version
4729 module isn't working on my system. So I made a tar version
4726 (hopefully the command line options in various systems won't kill
4730 (hopefully the command line options in various systems won't kill
4727 me).
4731 me).
4728
4732
4729 * Fixes to Struct in genutils. Now all dictionary-like methods are
4733 * Fixes to Struct in genutils. Now all dictionary-like methods are
4730 protected (reasonably).
4734 protected (reasonably).
4731
4735
4732 * Added pager function to genutils and changed ? to print usage
4736 * Added pager function to genutils and changed ? to print usage
4733 note through it (it was too long).
4737 note through it (it was too long).
4734
4738
4735 * Added the LazyPython functionality. Works great! I changed the
4739 * Added the LazyPython functionality. Works great! I changed the
4736 auto-quote escape to ';', it's on home row and next to '. But
4740 auto-quote escape to ';', it's on home row and next to '. But
4737 both auto-quote and auto-paren (still /) escapes are command-line
4741 both auto-quote and auto-paren (still /) escapes are command-line
4738 parameters.
4742 parameters.
4739
4743
4740
4744
4741 2001-11-01 Fernando Perez <fperez@colorado.edu>
4745 2001-11-01 Fernando Perez <fperez@colorado.edu>
4742
4746
4743 * Version changed to 0.0.7. Fairly large change: configuration now
4747 * Version changed to 0.0.7. Fairly large change: configuration now
4744 is all stored in a directory, by default .ipython. There, all
4748 is all stored in a directory, by default .ipython. There, all
4745 config files have normal looking names (not .names)
4749 config files have normal looking names (not .names)
4746
4750
4747 * Version 0.0.6 Released first to Lucas and Archie as a test
4751 * Version 0.0.6 Released first to Lucas and Archie as a test
4748 run. Since it's the first 'semi-public' release, change version to
4752 run. Since it's the first 'semi-public' release, change version to
4749 > 0.0.6 for any changes now.
4753 > 0.0.6 for any changes now.
4750
4754
4751 * Stuff I had put in the ipplib.py changelog:
4755 * Stuff I had put in the ipplib.py changelog:
4752
4756
4753 Changes to InteractiveShell:
4757 Changes to InteractiveShell:
4754
4758
4755 - Made the usage message a parameter.
4759 - Made the usage message a parameter.
4756
4760
4757 - Require the name of the shell variable to be given. It's a bit
4761 - Require the name of the shell variable to be given. It's a bit
4758 of a hack, but allows the name 'shell' not to be hardwire in the
4762 of a hack, but allows the name 'shell' not to be hardwire in the
4759 magic (@) handler, which is problematic b/c it requires
4763 magic (@) handler, which is problematic b/c it requires
4760 polluting the global namespace with 'shell'. This in turn is
4764 polluting the global namespace with 'shell'. This in turn is
4761 fragile: if a user redefines a variable called shell, things
4765 fragile: if a user redefines a variable called shell, things
4762 break.
4766 break.
4763
4767
4764 - magic @: all functions available through @ need to be defined
4768 - magic @: all functions available through @ need to be defined
4765 as magic_<name>, even though they can be called simply as
4769 as magic_<name>, even though they can be called simply as
4766 @<name>. This allows the special command @magic to gather
4770 @<name>. This allows the special command @magic to gather
4767 information automatically about all existing magic functions,
4771 information automatically about all existing magic functions,
4768 even if they are run-time user extensions, by parsing the shell
4772 even if they are run-time user extensions, by parsing the shell
4769 instance __dict__ looking for special magic_ names.
4773 instance __dict__ looking for special magic_ names.
4770
4774
4771 - mainloop: added *two* local namespace parameters. This allows
4775 - mainloop: added *two* local namespace parameters. This allows
4772 the class to differentiate between parameters which were there
4776 the class to differentiate between parameters which were there
4773 before and after command line initialization was processed. This
4777 before and after command line initialization was processed. This
4774 way, later @who can show things loaded at startup by the
4778 way, later @who can show things loaded at startup by the
4775 user. This trick was necessary to make session saving/reloading
4779 user. This trick was necessary to make session saving/reloading
4776 really work: ideally after saving/exiting/reloading a session,
4780 really work: ideally after saving/exiting/reloading a session,
4777 *everythin* should look the same, including the output of @who. I
4781 *everythin* should look the same, including the output of @who. I
4778 was only able to make this work with this double namespace
4782 was only able to make this work with this double namespace
4779 trick.
4783 trick.
4780
4784
4781 - added a header to the logfile which allows (almost) full
4785 - added a header to the logfile which allows (almost) full
4782 session restoring.
4786 session restoring.
4783
4787
4784 - prepend lines beginning with @ or !, with a and log
4788 - prepend lines beginning with @ or !, with a and log
4785 them. Why? !lines: may be useful to know what you did @lines:
4789 them. Why? !lines: may be useful to know what you did @lines:
4786 they may affect session state. So when restoring a session, at
4790 they may affect session state. So when restoring a session, at
4787 least inform the user of their presence. I couldn't quite get
4791 least inform the user of their presence. I couldn't quite get
4788 them to properly re-execute, but at least the user is warned.
4792 them to properly re-execute, but at least the user is warned.
4789
4793
4790 * Started ChangeLog.
4794 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now