##// END OF EJS Templates
- Added patches for better pydb and Emacs support....
fperez -
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -1,497 +1,505 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 Pdb debugger class.
4 4
5 5 Modified from the standard pdb.Pdb class to avoid including readline, so that
6 6 the command line completion of other programs which include this isn't
7 7 damaged.
8 8
9 9 In the future, this class will be expanded with improvements over the standard
10 10 pdb.
11 11
12 12 The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor
13 13 changes. Licensing should therefore be under the standard Python terms. For
14 14 details on the PSF (Python Software Foundation) standard license, see:
15 15
16 16 http://www.python.org/2.2.3/license.html
17 17
18 $Id: Debugger.py 2014 2007-01-05 10:36:58Z fperez $"""
18 $Id: Debugger.py 2154 2007-03-19 00:10:07Z fperez $"""
19 19
20 20 #*****************************************************************************
21 21 #
22 22 # Since this file is essentially a modified copy of the pdb module which is
23 23 # part of the standard Python distribution, I assume that the proper procedure
24 24 # is to maintain its copyright as belonging to the Python Software Foundation
25 25 # (in addition to my own, for all new code).
26 26 #
27 27 # Copyright (C) 2001 Python Software Foundation, www.python.org
28 28 # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu>
29 29 #
30 30 # Distributed under the terms of the BSD License. The full license is in
31 31 # the file COPYING, distributed as part of this software.
32 32 #
33 33 #*****************************************************************************
34 34
35 35 from IPython import Release
36 36 __author__ = '%s <%s>' % Release.authors['Fernando']
37 37 __license__ = 'Python'
38 38
39 39 import bdb
40 40 import cmd
41 41 import linecache
42 42 import os
43 43 import sys
44 44
45 45 from IPython import PyColorize, ColorANSI, ipapi
46 46 from IPython.genutils import Term
47 47 from IPython.excolors import ExceptionColors
48 48
49 49 # See if we can use pydb.
50 50 has_pydb = False
51 prompt = 'ipdb>'
51 prompt = 'ipdb> '
52 52 try:
53 53 import pydb
54 54 if hasattr(pydb.pydb, "runl"):
55 55 has_pydb = True
56 56 from pydb import Pdb as OldPdb
57 prompt = 'ipydb>'
58 57 except ImportError:
59 58 pass
60 59
61 60 if has_pydb:
62 61 from pydb import Pdb as OldPdb
62 prompt = 'ipydb> '
63 63 else:
64 64 from pdb import Pdb as OldPdb
65 65
66 66 # Allow the set_trace code to operate outside of an ipython instance, even if
67 67 # it does so with some limitations. The rest of this support is implemented in
68 68 # the Tracer constructor.
69 69 def BdbQuit_excepthook(et,ev,tb):
70 70 if et==bdb.BdbQuit:
71 71 print 'Exiting Debugger.'
72 72 else:
73 73 ehook.excepthook_ori(et,ev,tb)
74 74
75 75 def BdbQuit_IPython_excepthook(self,et,ev,tb):
76 76 print 'Exiting Debugger.'
77 77
78 78 class Tracer(object):
79 79 """Class for local debugging, similar to pdb.set_trace.
80 80
81 81 Instances of this class, when called, behave like pdb.set_trace, but
82 82 providing IPython's enhanced capabilities.
83 83
84 84 This is implemented as a class which must be initialized in your own code
85 85 and not as a standalone function because we need to detect at runtime
86 86 whether IPython is already active or not. That detection is done in the
87 87 constructor, ensuring that this code plays nicely with a running IPython,
88 88 while functioning acceptably (though with limitations) if outside of it.
89 89 """
90 90
91 91 def __init__(self,colors=None):
92 92 """Create a local debugger instance.
93 93
94 94 :Parameters:
95 95
96 96 - `colors` (None): a string containing the name of the color scheme to
97 97 use, it must be one of IPython's valid color schemes. If not given, the
98 98 function will default to the current IPython scheme when running inside
99 99 IPython, and to 'NoColor' otherwise.
100 100
101 101 Usage example:
102 102
103 103 from IPython.Debugger import Tracer; debug_here = Tracer()
104 104
105 105 ... later in your code
106 106 debug_here() # -> will open up the debugger at that point.
107 107
108 108 Once the debugger activates, you can use all of its regular commands to
109 109 step through code, set breakpoints, etc. See the pdb documentation
110 110 from the Python standard library for usage details.
111 111 """
112 112
113 113 global __IPYTHON__
114 114 try:
115 115 __IPYTHON__
116 116 except NameError:
117 117 # Outside of ipython, we set our own exception hook manually
118 118 __IPYTHON__ = ipapi.get(True,False)
119 119 BdbQuit_excepthook.excepthook_ori = sys.excepthook
120 120 sys.excepthook = BdbQuit_excepthook
121 121 def_colors = 'NoColor'
122 122 try:
123 123 # Limited tab completion support
124 124 import rlcompleter,readline
125 125 readline.parse_and_bind('tab: complete')
126 126 except ImportError:
127 127 pass
128 128 else:
129 129 # In ipython, we use its custom exception handler mechanism
130 130 ip = ipapi.get()
131 131 def_colors = ip.options.colors
132 132 ip.set_custom_exc((bdb.BdbQuit,),BdbQuit_IPython_excepthook)
133 133
134 134 if colors is None:
135 135 colors = def_colors
136 136 self.debugger = Pdb(colors)
137 137
138 138 def __call__(self):
139 139 """Starts an interactive debugger at the point where called.
140 140
141 141 This is similar to the pdb.set_trace() function from the std lib, but
142 142 using IPython's enhanced debugger."""
143 143
144 144 self.debugger.set_trace(sys._getframe().f_back)
145 145
146 146 def decorate_fn_with_doc(new_fn, old_fn, additional_text=""):
147 147 """Make new_fn have old_fn's doc string. This is particularly useful
148 148 for the do_... commands that hook into the help system.
149 149 Adapted from from a comp.lang.python posting
150 150 by Duncan Booth."""
151 151 def wrapper(*args, **kw):
152 152 return new_fn(*args, **kw)
153 153 if old_fn.__doc__:
154 154 wrapper.__doc__ = old_fn.__doc__ + additional_text
155 155 return wrapper
156 156
157 157 def _file_lines(fname):
158 158 """Return the contents of a named file as a list of lines.
159 159
160 160 This function never raises an IOError exception: if the file can't be
161 161 read, it simply returns an empty list."""
162 162
163 163 try:
164 164 outfile = open(fname)
165 165 except IOError:
166 166 return []
167 167 else:
168 168 out = outfile.readlines()
169 169 outfile.close()
170 170 return out
171 171
172 172 class Pdb(OldPdb):
173 173 """Modified Pdb class, does not load readline."""
174 174
175 175 if sys.version[:3] >= '2.5' or has_pydb:
176 176 def __init__(self,color_scheme='NoColor',completekey=None,
177 177 stdin=None, stdout=None):
178 178
179 179 # Parent constructor:
180 180 if has_pydb and completekey is None:
181 OldPdb.__init__(self,stdin=stdin,stdout=stdout)
181 OldPdb.__init__(self,stdin=stdin,stdout=Term.cout) #stdout)
182 182 else:
183 183 OldPdb.__init__(self,completekey,stdin,stdout)
184 self.prompt = prompt # The default prompt is '(Pdb)'
184
185 self.prompt = prompt # The default prompt is '(Pdb)'
185 186
186 187 # IPython changes...
187 188 self.is_pydb = has_pydb
188 189
189 190 if self.is_pydb:
190 191
191 192 # iplib.py's ipalias seems to want pdb's checkline
192 193 # which located in pydb.fn
193 194 import pydb.fns
194 195 self.checkline = lambda filename, lineno: \
195 196 pydb.fns.checkline(self, filename, lineno)
196 197
197 198 self.curframe = None
198 199 self.do_restart = self.new_do_restart
199 200
200 201 self.old_all_completions = __IPYTHON__.Completer.all_completions
201 202 __IPYTHON__.Completer.all_completions=self.all_completions
202 203
203 204 self.do_list = decorate_fn_with_doc(self.list_command_pydb,
204 205 OldPdb.do_list)
205 206 self.do_l = self.do_list
206 207 self.do_frame = decorate_fn_with_doc(self.new_do_frame,
207 208 OldPdb.do_frame)
208 209
209 210 self.aliases = {}
210 211
211 212 # Create color table: we copy the default one from the traceback
212 213 # module and add a few attributes needed for debugging
213 214 self.color_scheme_table = ExceptionColors.copy()
214 215
215 216 # shorthands
216 217 C = ColorANSI.TermColors
217 218 cst = self.color_scheme_table
218 219
219 220 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
220 221 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
221 222
222 223 cst['Linux'].colors.breakpoint_enabled = C.LightRed
223 224 cst['Linux'].colors.breakpoint_disabled = C.Red
224 225
225 226 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
226 227 cst['LightBG'].colors.breakpoint_disabled = C.Red
227 228
228 229 self.set_colors(color_scheme)
229 230
230 231 else:
231 232 # Ugly hack: for Python 2.3-2.4, we can't call the parent constructor,
232 233 # because it binds readline and breaks tab-completion. This means we
233 234 # have to COPY the constructor here.
234 235 def __init__(self,color_scheme='NoColor'):
235 236 bdb.Bdb.__init__(self)
236 237 cmd.Cmd.__init__(self,completekey=None) # don't load readline
237 238 self.prompt = 'ipdb> ' # The default prompt is '(Pdb)'
238 239 self.aliases = {}
239 240
240 241 # These two lines are part of the py2.4 constructor, let's put them
241 242 # unconditionally here as they won't cause any problems in 2.3.
242 243 self.mainpyfile = ''
243 244 self._wait_for_mainpyfile = 0
244 245
245 246 # Read $HOME/.pdbrc and ./.pdbrc
246 247 try:
247 248 self.rcLines = _file_lines(os.path.join(os.environ['HOME'],
248 249 ".pdbrc"))
249 250 except KeyError:
250 251 self.rcLines = []
251 252 self.rcLines.extend(_file_lines(".pdbrc"))
252 253
253 254 # Create color table: we copy the default one from the traceback
254 255 # module and add a few attributes needed for debugging
255 256 ExceptionColors.set_active_scheme(color_scheme)
256 257 self.color_scheme_table = ExceptionColors.copy()
257 258
258 259 # shorthands
259 260 C = ColorANSI.TermColors
260 261 cst = self.color_scheme_table
261 262
262 263 cst['NoColor'].colors.breakpoint_enabled = C.NoColor
263 264 cst['NoColor'].colors.breakpoint_disabled = C.NoColor
264 265
265 266 cst['Linux'].colors.breakpoint_enabled = C.LightRed
266 267 cst['Linux'].colors.breakpoint_disabled = C.Red
267 268
268 269 cst['LightBG'].colors.breakpoint_enabled = C.LightRed
269 270 cst['LightBG'].colors.breakpoint_disabled = C.Red
270 271
271 272 self.set_colors(color_scheme)
272 273
273 274 def set_colors(self, scheme):
274 275 """Shorthand access to the color table scheme selector method."""
275 276 self.color_scheme_table.set_active_scheme(scheme)
276 277
277 278 def interaction(self, frame, traceback):
278 279 __IPYTHON__.set_completer_frame(frame)
279 280 OldPdb.interaction(self, frame, traceback)
280 281
281 282 def new_do_up(self, arg):
282 283 OldPdb.do_up(self, arg)
283 284 __IPYTHON__.set_completer_frame(self.curframe)
284 285 do_u = do_up = decorate_fn_with_doc(new_do_up, OldPdb.do_up)
285 286
286 287 def new_do_down(self, arg):
287 288 OldPdb.do_down(self, arg)
288 289 __IPYTHON__.set_completer_frame(self.curframe)
289 290
290 291 do_d = do_down = decorate_fn_with_doc(new_do_down, OldPdb.do_down)
291 292
292 293 def new_do_frame(self, arg):
293 294 OldPdb.do_frame(self, arg)
294 295 __IPYTHON__.set_completer_frame(self.curframe)
295 296
296 297 def new_do_quit(self, arg):
297 298
298 299 if hasattr(self, 'old_all_completions'):
299 300 __IPYTHON__.Completer.all_completions=self.old_all_completions
300 301
301 302
302 303 return OldPdb.do_quit(self, arg)
303 304
304 305 do_q = do_quit = decorate_fn_with_doc(new_do_quit, OldPdb.do_quit)
305 306
306 307 def new_do_restart(self, arg):
307 308 """Restart command. In the context of ipython this is exactly the same
308 309 thing as 'quit'."""
309 310 self.msg("Restart doesn't make sense here. Using 'quit' instead.")
310 311 return self.do_quit(arg)
311 312
312 313 def postloop(self):
313 314 __IPYTHON__.set_completer_frame(None)
314 315
315 316 def print_stack_trace(self):
316 317 try:
317 318 for frame_lineno in self.stack:
318 319 self.print_stack_entry(frame_lineno, context = 5)
319 320 except KeyboardInterrupt:
320 321 pass
321 322
322 323 def print_stack_entry(self,frame_lineno,prompt_prefix='\n-> ',
323 324 context = 3):
324 frame, lineno = frame_lineno
325 #frame, lineno = frame_lineno
325 326 print >>Term.cout, self.format_stack_entry(frame_lineno, '', context)
326 327
327 328 def format_stack_entry(self, frame_lineno, lprefix=': ', context = 3):
328 329 import linecache, repr
329 330
330 331 ret = []
331 332
332 333 Colors = self.color_scheme_table.active_colors
333 334 ColorsNormal = Colors.Normal
334 335 tpl_link = '%s%%s%s' % (Colors.filenameEm, ColorsNormal)
335 336 tpl_call = '%s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal)
336 337 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
337 338 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line,
338 339 ColorsNormal)
339 340
340 341 frame, lineno = frame_lineno
341 342
342 343 return_value = ''
343 344 if '__return__' in frame.f_locals:
344 345 rv = frame.f_locals['__return__']
345 346 #return_value += '->'
346 347 return_value += repr.repr(rv) + '\n'
347 348 ret.append(return_value)
348 349
349 350 #s = filename + '(' + `lineno` + ')'
350 351 filename = self.canonic(frame.f_code.co_filename)
351 352 link = tpl_link % filename
352 353
353 354 if frame.f_code.co_name:
354 355 func = frame.f_code.co_name
355 356 else:
356 357 func = "<lambda>"
357 358
358 359 call = ''
359 360 if func != '?':
360 361 if '__args__' in frame.f_locals:
361 362 args = repr.repr(frame.f_locals['__args__'])
362 363 else:
363 364 args = '()'
364 365 call = tpl_call % (func, args)
365 366
366 367 # The level info should be generated in the same format pdb uses, to
367 368 # avoid breaking the pdbtrack functionality of python-mode in *emacs.
368 ret.append('> %s(%s)%s\n' % (link,lineno,call))
369 if frame is self.curframe:
370 ret.append('> ')
371 else:
372 ret.append(' ')
373 ret.append('%s(%s)%s\n' % (link,lineno,call))
369 374
370 375 start = lineno - 1 - context//2
371 376 lines = linecache.getlines(filename)
372 377 start = max(start, 0)
373 378 start = min(start, len(lines) - context)
374 379 lines = lines[start : start + context]
375 380
376 381 for i,line in enumerate(lines):
377 382 show_arrow = (start + 1 + i == lineno)
378 ret.append(self.__format_line(tpl_line_em, filename,
383 linetpl = (frame is self.curframe or show_arrow) \
384 and tpl_line_em \
385 or tpl_line
386 ret.append(self.__format_line(linetpl, filename,
379 387 start + 1 + i, line,
380 388 arrow = show_arrow) )
381 389
382 390 return ''.join(ret)
383 391
384 392 def __format_line(self, tpl_line, filename, lineno, line, arrow = False):
385 393 bp_mark = ""
386 394 bp_mark_color = ""
387 395
388 396 bp = None
389 397 if lineno in self.get_file_breaks(filename):
390 398 bps = self.get_breaks(filename, lineno)
391 399 bp = bps[-1]
392 400
393 401 if bp:
394 402 Colors = self.color_scheme_table.active_colors
395 403 bp_mark = str(bp.number)
396 404 bp_mark_color = Colors.breakpoint_enabled
397 405 if not bp.enabled:
398 406 bp_mark_color = Colors.breakpoint_disabled
399 407
400 408 numbers_width = 7
401 409 if arrow:
402 410 # This is the line with the error
403 411 pad = numbers_width - len(str(lineno)) - len(bp_mark)
404 412 if pad >= 3:
405 413 marker = '-'*(pad-3) + '-> '
406 414 elif pad == 2:
407 415 marker = '> '
408 416 elif pad == 1:
409 417 marker = '>'
410 418 else:
411 419 marker = ''
412 420 num = '%s%s' % (marker, str(lineno))
413 421 line = tpl_line % (bp_mark_color + bp_mark, num, line)
414 422 else:
415 423 num = '%*s' % (numbers_width - len(bp_mark), str(lineno))
416 424 line = tpl_line % (bp_mark_color + bp_mark, num, line)
417 425
418 426 return line
419 427
420 428 def list_command_pydb(self, arg):
421 429 """List command to use if we have a newer pydb installed"""
422 430 filename, first, last = OldPdb.parse_list_cmd(self, arg)
423 431 if filename is not None:
424 432 self.print_list_lines(filename, first, last)
425 433
426 434 def print_list_lines(self, filename, first, last):
427 435 """The printing (as opposed to the parsing part of a 'list'
428 436 command."""
429 437 try:
430 438 Colors = self.color_scheme_table.active_colors
431 439 ColorsNormal = Colors.Normal
432 440 tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal)
433 441 tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal)
434 442 src = []
435 443 for lineno in range(first, last+1):
436 444 line = linecache.getline(filename, lineno)
437 445 if not line:
438 446 break
439 447
440 448 if lineno == self.curframe.f_lineno:
441 449 line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True)
442 450 else:
443 451 line = self.__format_line(tpl_line, filename, lineno, line, arrow = False)
444 452
445 453 src.append(line)
446 454 self.lineno = lineno
447 455
448 456 print >>Term.cout, ''.join(src)
449 457
450 458 except KeyboardInterrupt:
451 459 pass
452 460
453 461 def do_list(self, arg):
454 462 self.lastcmd = 'list'
455 463 last = None
456 464 if arg:
457 465 try:
458 466 x = eval(arg, {}, {})
459 467 if type(x) == type(()):
460 468 first, last = x
461 469 first = int(first)
462 470 last = int(last)
463 471 if last < first:
464 472 # Assume it's a count
465 473 last = first + last
466 474 else:
467 475 first = max(1, int(x) - 5)
468 476 except:
469 477 print '*** Error in argument:', `arg`
470 478 return
471 479 elif self.lineno is None:
472 480 first = max(1, self.curframe.f_lineno - 5)
473 481 else:
474 482 first = self.lineno + 1
475 483 if last is None:
476 484 last = first + 10
477 485 self.print_list_lines(self.curframe.f_code.co_filename, first, last)
478 486
479 487 do_l = do_list
480 488
481 489 def do_pdef(self, arg):
482 490 """The debugger interface to magic_pdef"""
483 491 namespaces = [('Locals', self.curframe.f_locals),
484 492 ('Globals', self.curframe.f_globals)]
485 493 __IPYTHON__.magic_pdef(arg, namespaces=namespaces)
486 494
487 495 def do_pdoc(self, arg):
488 496 """The debugger interface to magic_pdoc"""
489 497 namespaces = [('Locals', self.curframe.f_locals),
490 498 ('Globals', self.curframe.f_globals)]
491 499 __IPYTHON__.magic_pdoc(arg, namespaces=namespaces)
492 500
493 501 def do_pinfo(self, arg):
494 502 """The debugger equivalant of ?obj"""
495 503 namespaces = [('Locals', self.curframe.f_locals),
496 504 ('Globals', self.curframe.f_globals)]
497 505 __IPYTHON__.magic_pinfo("pinfo %s" % arg, namespaces=namespaces)
@@ -1,31 +1,31 b''
1 1 import inspect
2 2 import IPython.ipapi
3 3 from IPython.genutils import arg_split
4 4 ip = IPython.ipapi.get()
5 5
6 6 from IPython import Debugger
7 7
8 8 def call_pydb(self, args):
9 9 """Invoke pydb with the supplied parameters."""
10 10 try:
11 11 import pydb
12 12 except ImportError:
13 13 raise ImportError("pydb doesn't seem to be installed.")
14 14
15 15 if not hasattr(pydb.pydb, "runv"):
16 16 raise ImportError("You need pydb version 1.19 or later installed.")
17 17
18 18 argl = arg_split(args)
19 19 # print argl # dbg
20 20 if len(inspect.getargspec(pydb.runv)[0]) == 2:
21 pdb = Debugger.Pdb()
21 pdb = Debugger.Pdb(color_scheme=self.rc.colors)
22 22 ip.IP.history_saving_wrapper( lambda : pydb.runv(argl, pdb) )()
23 23 else:
24 24 ip.IP.history_saving_wrapper( lambda : pydb.runv(argl) )()
25 25
26 26
27 27 ip.expose_magic("pydb",call_pydb)
28 28
29 29
30 30
31 31
@@ -1,1752 +1,1756 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 General purpose utilities.
4 4
5 5 This is a grab-bag of stuff I find useful in most programs I write. Some of
6 6 these things are also convenient when working at the command line.
7 7
8 $Id: genutils.py 2152 2007-03-18 20:13:35Z fperez $"""
8 $Id: genutils.py 2154 2007-03-19 00:10:07Z fperez $"""
9 9
10 10 #*****************************************************************************
11 11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
12 12 #
13 13 # Distributed under the terms of the BSD License. The full license is in
14 14 # the file COPYING, distributed as part of this software.
15 15 #*****************************************************************************
16 16
17 17 from IPython import Release
18 18 __author__ = '%s <%s>' % Release.authors['Fernando']
19 19 __license__ = Release.license
20 20
21 21 #****************************************************************************
22 22 # required modules from the Python standard library
23 23 import __main__
24 24 import commands
25 25 import os
26 26 import re
27 27 import shlex
28 28 import shutil
29 29 import sys
30 30 import tempfile
31 31 import time
32 32 import types
33 33 import warnings
34 34
35 35 # Other IPython utilities
36 36 from IPython.Itpl import Itpl,itpl,printpl
37 37 from IPython import DPyGetOpt
38 38 from path import path
39 39 if os.name == "nt":
40 40 from IPython.winconsole import get_console_size
41 41
42 42 #****************************************************************************
43 43 # Exceptions
44 44 class Error(Exception):
45 45 """Base class for exceptions in this module."""
46 46 pass
47 47
48 48 #----------------------------------------------------------------------------
49 49 class IOStream:
50 50 def __init__(self,stream,fallback):
51 51 if not hasattr(stream,'write') or not hasattr(stream,'flush'):
52 52 stream = fallback
53 53 self.stream = stream
54 54 self._swrite = stream.write
55 55 self.flush = stream.flush
56 56
57 57 def write(self,data):
58 58 try:
59 59 self._swrite(data)
60 60 except:
61 61 try:
62 62 # print handles some unicode issues which may trip a plain
63 63 # write() call. Attempt to emulate write() by using a
64 64 # trailing comma
65 65 print >> self.stream, data,
66 66 except:
67 67 # if we get here, something is seriously broken.
68 68 print >> sys.stderr, \
69 69 'ERROR - failed to write data to stream:', self.stream
70
71 def close(self):
72 pass
73
70 74
71 75 class IOTerm:
72 76 """ Term holds the file or file-like objects for handling I/O operations.
73 77
74 78 These are normally just sys.stdin, sys.stdout and sys.stderr but for
75 79 Windows they can can replaced to allow editing the strings before they are
76 80 displayed."""
77 81
78 82 # In the future, having IPython channel all its I/O operations through
79 83 # this class will make it easier to embed it into other environments which
80 84 # are not a normal terminal (such as a GUI-based shell)
81 85 def __init__(self,cin=None,cout=None,cerr=None):
82 86 self.cin = IOStream(cin,sys.stdin)
83 87 self.cout = IOStream(cout,sys.stdout)
84 88 self.cerr = IOStream(cerr,sys.stderr)
85 89
86 90 # Global variable to be used for all I/O
87 91 Term = IOTerm()
88 92
89 93 import IPython.rlineimpl as readline
90 94 # Remake Term to use the readline i/o facilities
91 95 if sys.platform == 'win32' and readline.have_readline:
92 96
93 97 Term = IOTerm(cout=readline._outputfile,cerr=readline._outputfile)
94 98
95 99
96 100 #****************************************************************************
97 101 # Generic warning/error printer, used by everything else
98 102 def warn(msg,level=2,exit_val=1):
99 103 """Standard warning printer. Gives formatting consistency.
100 104
101 105 Output is sent to Term.cerr (sys.stderr by default).
102 106
103 107 Options:
104 108
105 109 -level(2): allows finer control:
106 110 0 -> Do nothing, dummy function.
107 111 1 -> Print message.
108 112 2 -> Print 'WARNING:' + message. (Default level).
109 113 3 -> Print 'ERROR:' + message.
110 114 4 -> Print 'FATAL ERROR:' + message and trigger a sys.exit(exit_val).
111 115
112 116 -exit_val (1): exit value returned by sys.exit() for a level 4
113 117 warning. Ignored for all other levels."""
114 118
115 119 if level>0:
116 120 header = ['','','WARNING: ','ERROR: ','FATAL ERROR: ']
117 121 print >> Term.cerr, '%s%s' % (header[level],msg)
118 122 if level == 4:
119 123 print >> Term.cerr,'Exiting.\n'
120 124 sys.exit(exit_val)
121 125
122 126 def info(msg):
123 127 """Equivalent to warn(msg,level=1)."""
124 128
125 129 warn(msg,level=1)
126 130
127 131 def error(msg):
128 132 """Equivalent to warn(msg,level=3)."""
129 133
130 134 warn(msg,level=3)
131 135
132 136 def fatal(msg,exit_val=1):
133 137 """Equivalent to warn(msg,exit_val=exit_val,level=4)."""
134 138
135 139 warn(msg,exit_val=exit_val,level=4)
136 140
137 141 #---------------------------------------------------------------------------
138 142 # Debugging routines
139 143 #
140 144 def debugx(expr,pre_msg=''):
141 145 """Print the value of an expression from the caller's frame.
142 146
143 147 Takes an expression, evaluates it in the caller's frame and prints both
144 148 the given expression and the resulting value (as well as a debug mark
145 149 indicating the name of the calling function. The input must be of a form
146 150 suitable for eval().
147 151
148 152 An optional message can be passed, which will be prepended to the printed
149 153 expr->value pair."""
150 154
151 155 cf = sys._getframe(1)
152 156 print '[DBG:%s] %s%s -> %r' % (cf.f_code.co_name,pre_msg,expr,
153 157 eval(expr,cf.f_globals,cf.f_locals))
154 158
155 159 # deactivate it by uncommenting the following line, which makes it a no-op
156 160 #def debugx(expr,pre_msg=''): pass
157 161
158 162 #----------------------------------------------------------------------------
159 163 StringTypes = types.StringTypes
160 164
161 165 # Basic timing functionality
162 166
163 167 # If possible (Unix), use the resource module instead of time.clock()
164 168 try:
165 169 import resource
166 170 def clocku():
167 171 """clocku() -> floating point number
168 172
169 173 Return the *USER* CPU time in seconds since the start of the process.
170 174 This is done via a call to resource.getrusage, so it avoids the
171 175 wraparound problems in time.clock()."""
172 176
173 177 return resource.getrusage(resource.RUSAGE_SELF)[0]
174 178
175 179 def clocks():
176 180 """clocks() -> floating point number
177 181
178 182 Return the *SYSTEM* CPU time in seconds since the start of the process.
179 183 This is done via a call to resource.getrusage, so it avoids the
180 184 wraparound problems in time.clock()."""
181 185
182 186 return resource.getrusage(resource.RUSAGE_SELF)[1]
183 187
184 188 def clock():
185 189 """clock() -> floating point number
186 190
187 191 Return the *TOTAL USER+SYSTEM* CPU time in seconds since the start of
188 192 the process. This is done via a call to resource.getrusage, so it
189 193 avoids the wraparound problems in time.clock()."""
190 194
191 195 u,s = resource.getrusage(resource.RUSAGE_SELF)[:2]
192 196 return u+s
193 197
194 198 def clock2():
195 199 """clock2() -> (t_user,t_system)
196 200
197 201 Similar to clock(), but return a tuple of user/system times."""
198 202 return resource.getrusage(resource.RUSAGE_SELF)[:2]
199 203
200 204 except ImportError:
201 205 # There is no distinction of user/system time under windows, so we just use
202 206 # time.clock() for everything...
203 207 clocku = clocks = clock = time.clock
204 208 def clock2():
205 209 """Under windows, system CPU time can't be measured.
206 210
207 211 This just returns clock() and zero."""
208 212 return time.clock(),0.0
209 213
210 214 def timings_out(reps,func,*args,**kw):
211 215 """timings_out(reps,func,*args,**kw) -> (t_total,t_per_call,output)
212 216
213 217 Execute a function reps times, return a tuple with the elapsed total
214 218 CPU time in seconds, the time per call and the function's output.
215 219
216 220 Under Unix, the return value is the sum of user+system time consumed by
217 221 the process, computed via the resource module. This prevents problems
218 222 related to the wraparound effect which the time.clock() function has.
219 223
220 224 Under Windows the return value is in wall clock seconds. See the
221 225 documentation for the time module for more details."""
222 226
223 227 reps = int(reps)
224 228 assert reps >=1, 'reps must be >= 1'
225 229 if reps==1:
226 230 start = clock()
227 231 out = func(*args,**kw)
228 232 tot_time = clock()-start
229 233 else:
230 234 rng = xrange(reps-1) # the last time is executed separately to store output
231 235 start = clock()
232 236 for dummy in rng: func(*args,**kw)
233 237 out = func(*args,**kw) # one last time
234 238 tot_time = clock()-start
235 239 av_time = tot_time / reps
236 240 return tot_time,av_time,out
237 241
238 242 def timings(reps,func,*args,**kw):
239 243 """timings(reps,func,*args,**kw) -> (t_total,t_per_call)
240 244
241 245 Execute a function reps times, return a tuple with the elapsed total CPU
242 246 time in seconds and the time per call. These are just the first two values
243 247 in timings_out()."""
244 248
245 249 return timings_out(reps,func,*args,**kw)[0:2]
246 250
247 251 def timing(func,*args,**kw):
248 252 """timing(func,*args,**kw) -> t_total
249 253
250 254 Execute a function once, return the elapsed total CPU time in
251 255 seconds. This is just the first value in timings_out()."""
252 256
253 257 return timings_out(1,func,*args,**kw)[0]
254 258
255 259 #****************************************************************************
256 260 # file and system
257 261
258 262 def arg_split(s,posix=False):
259 263 """Split a command line's arguments in a shell-like manner.
260 264
261 265 This is a modified version of the standard library's shlex.split()
262 266 function, but with a default of posix=False for splitting, so that quotes
263 267 in inputs are respected."""
264 268
265 269 lex = shlex.shlex(s, posix=posix)
266 270 lex.whitespace_split = True
267 271 return list(lex)
268 272
269 273 def system(cmd,verbose=0,debug=0,header=''):
270 274 """Execute a system command, return its exit status.
271 275
272 276 Options:
273 277
274 278 - verbose (0): print the command to be executed.
275 279
276 280 - debug (0): only print, do not actually execute.
277 281
278 282 - header (''): Header to print on screen prior to the executed command (it
279 283 is only prepended to the command, no newlines are added).
280 284
281 285 Note: a stateful version of this function is available through the
282 286 SystemExec class."""
283 287
284 288 stat = 0
285 289 if verbose or debug: print header+cmd
286 290 sys.stdout.flush()
287 291 if not debug: stat = os.system(cmd)
288 292 return stat
289 293
290 294 # This function is used by ipython in a lot of places to make system calls.
291 295 # We need it to be slightly different under win32, due to the vagaries of
292 296 # 'network shares'. A win32 override is below.
293 297
294 298 def shell(cmd,verbose=0,debug=0,header=''):
295 299 """Execute a command in the system shell, always return None.
296 300
297 301 Options:
298 302
299 303 - verbose (0): print the command to be executed.
300 304
301 305 - debug (0): only print, do not actually execute.
302 306
303 307 - header (''): Header to print on screen prior to the executed command (it
304 308 is only prepended to the command, no newlines are added).
305 309
306 310 Note: this is similar to genutils.system(), but it returns None so it can
307 311 be conveniently used in interactive loops without getting the return value
308 312 (typically 0) printed many times."""
309 313
310 314 stat = 0
311 315 if verbose or debug: print header+cmd
312 316 # flush stdout so we don't mangle python's buffering
313 317 sys.stdout.flush()
314 318 if not debug:
315 319 os.system(cmd)
316 320
317 321 # override shell() for win32 to deal with network shares
318 322 if os.name in ('nt','dos'):
319 323
320 324 shell_ori = shell
321 325
322 326 def shell(cmd,verbose=0,debug=0,header=''):
323 327 if os.getcwd().startswith(r"\\"):
324 328 path = os.getcwd()
325 329 # change to c drive (cannot be on UNC-share when issuing os.system,
326 330 # as cmd.exe cannot handle UNC addresses)
327 331 os.chdir("c:")
328 332 # issue pushd to the UNC-share and then run the command
329 333 try:
330 334 shell_ori('"pushd %s&&"'%path+cmd,verbose,debug,header)
331 335 finally:
332 336 os.chdir(path)
333 337 else:
334 338 shell_ori(cmd,verbose,debug,header)
335 339
336 340 shell.__doc__ = shell_ori.__doc__
337 341
338 342 def getoutput(cmd,verbose=0,debug=0,header='',split=0):
339 343 """Dummy substitute for perl's backquotes.
340 344
341 345 Executes a command and returns the output.
342 346
343 347 Accepts the same arguments as system(), plus:
344 348
345 349 - split(0): if true, the output is returned as a list split on newlines.
346 350
347 351 Note: a stateful version of this function is available through the
348 352 SystemExec class.
349 353
350 354 This is pretty much deprecated and rarely used,
351 355 genutils.getoutputerror may be what you need.
352 356
353 357 """
354 358
355 359 if verbose or debug: print header+cmd
356 360 if not debug:
357 361 output = os.popen(cmd).read()
358 362 # stipping last \n is here for backwards compat.
359 363 if output.endswith('\n'):
360 364 output = output[:-1]
361 365 if split:
362 366 return output.split('\n')
363 367 else:
364 368 return output
365 369
366 370 def getoutputerror(cmd,verbose=0,debug=0,header='',split=0):
367 371 """Return (standard output,standard error) of executing cmd in a shell.
368 372
369 373 Accepts the same arguments as system(), plus:
370 374
371 375 - split(0): if true, each of stdout/err is returned as a list split on
372 376 newlines.
373 377
374 378 Note: a stateful version of this function is available through the
375 379 SystemExec class."""
376 380
377 381 if verbose or debug: print header+cmd
378 382 if not cmd:
379 383 if split:
380 384 return [],[]
381 385 else:
382 386 return '',''
383 387 if not debug:
384 388 pin,pout,perr = os.popen3(cmd)
385 389 tout = pout.read().rstrip()
386 390 terr = perr.read().rstrip()
387 391 pin.close()
388 392 pout.close()
389 393 perr.close()
390 394 if split:
391 395 return tout.split('\n'),terr.split('\n')
392 396 else:
393 397 return tout,terr
394 398
395 399 # for compatibility with older naming conventions
396 400 xsys = system
397 401 bq = getoutput
398 402
399 403 class SystemExec:
400 404 """Access the system and getoutput functions through a stateful interface.
401 405
402 406 Note: here we refer to the system and getoutput functions from this
403 407 library, not the ones from the standard python library.
404 408
405 409 This class offers the system and getoutput functions as methods, but the
406 410 verbose, debug and header parameters can be set for the instance (at
407 411 creation time or later) so that they don't need to be specified on each
408 412 call.
409 413
410 414 For efficiency reasons, there's no way to override the parameters on a
411 415 per-call basis other than by setting instance attributes. If you need
412 416 local overrides, it's best to directly call system() or getoutput().
413 417
414 418 The following names are provided as alternate options:
415 419 - xsys: alias to system
416 420 - bq: alias to getoutput
417 421
418 422 An instance can then be created as:
419 423 >>> sysexec = SystemExec(verbose=1,debug=0,header='Calling: ')
420 424
421 425 And used as:
422 426 >>> sysexec.xsys('pwd')
423 427 >>> dirlist = sysexec.bq('ls -l')
424 428 """
425 429
426 430 def __init__(self,verbose=0,debug=0,header='',split=0):
427 431 """Specify the instance's values for verbose, debug and header."""
428 432 setattr_list(self,'verbose debug header split')
429 433
430 434 def system(self,cmd):
431 435 """Stateful interface to system(), with the same keyword parameters."""
432 436
433 437 system(cmd,self.verbose,self.debug,self.header)
434 438
435 439 def shell(self,cmd):
436 440 """Stateful interface to shell(), with the same keyword parameters."""
437 441
438 442 shell(cmd,self.verbose,self.debug,self.header)
439 443
440 444 xsys = system # alias
441 445
442 446 def getoutput(self,cmd):
443 447 """Stateful interface to getoutput()."""
444 448
445 449 return getoutput(cmd,self.verbose,self.debug,self.header,self.split)
446 450
447 451 def getoutputerror(self,cmd):
448 452 """Stateful interface to getoutputerror()."""
449 453
450 454 return getoutputerror(cmd,self.verbose,self.debug,self.header,self.split)
451 455
452 456 bq = getoutput # alias
453 457
454 458 #-----------------------------------------------------------------------------
455 459 def mutex_opts(dict,ex_op):
456 460 """Check for presence of mutually exclusive keys in a dict.
457 461
458 462 Call: mutex_opts(dict,[[op1a,op1b],[op2a,op2b]...]"""
459 463 for op1,op2 in ex_op:
460 464 if op1 in dict and op2 in dict:
461 465 raise ValueError,'\n*** ERROR in Arguments *** '\
462 466 'Options '+op1+' and '+op2+' are mutually exclusive.'
463 467
464 468 #-----------------------------------------------------------------------------
465 469 def get_py_filename(name):
466 470 """Return a valid python filename in the current directory.
467 471
468 472 If the given name is not a file, it adds '.py' and searches again.
469 473 Raises IOError with an informative message if the file isn't found."""
470 474
471 475 name = os.path.expanduser(name)
472 476 if not os.path.isfile(name) and not name.endswith('.py'):
473 477 name += '.py'
474 478 if os.path.isfile(name):
475 479 return name
476 480 else:
477 481 raise IOError,'File `%s` not found.' % name
478 482
479 483 #-----------------------------------------------------------------------------
480 484 def filefind(fname,alt_dirs = None):
481 485 """Return the given filename either in the current directory, if it
482 486 exists, or in a specified list of directories.
483 487
484 488 ~ expansion is done on all file and directory names.
485 489
486 490 Upon an unsuccessful search, raise an IOError exception."""
487 491
488 492 if alt_dirs is None:
489 493 try:
490 494 alt_dirs = get_home_dir()
491 495 except HomeDirError:
492 496 alt_dirs = os.getcwd()
493 497 search = [fname] + list_strings(alt_dirs)
494 498 search = map(os.path.expanduser,search)
495 499 #print 'search list for',fname,'list:',search # dbg
496 500 fname = search[0]
497 501 if os.path.isfile(fname):
498 502 return fname
499 503 for direc in search[1:]:
500 504 testname = os.path.join(direc,fname)
501 505 #print 'testname',testname # dbg
502 506 if os.path.isfile(testname):
503 507 return testname
504 508 raise IOError,'File' + `fname` + \
505 509 ' not found in current or supplied directories:' + `alt_dirs`
506 510
507 511 #----------------------------------------------------------------------------
508 512 def file_read(filename):
509 513 """Read a file and close it. Returns the file source."""
510 514 fobj = open(filename,'r');
511 515 source = fobj.read();
512 516 fobj.close()
513 517 return source
514 518
515 519 def file_readlines(filename):
516 520 """Read a file and close it. Returns the file source using readlines()."""
517 521 fobj = open(filename,'r');
518 522 lines = fobj.readlines();
519 523 fobj.close()
520 524 return lines
521 525
522 526 #----------------------------------------------------------------------------
523 527 def target_outdated(target,deps):
524 528 """Determine whether a target is out of date.
525 529
526 530 target_outdated(target,deps) -> 1/0
527 531
528 532 deps: list of filenames which MUST exist.
529 533 target: single filename which may or may not exist.
530 534
531 535 If target doesn't exist or is older than any file listed in deps, return
532 536 true, otherwise return false.
533 537 """
534 538 try:
535 539 target_time = os.path.getmtime(target)
536 540 except os.error:
537 541 return 1
538 542 for dep in deps:
539 543 dep_time = os.path.getmtime(dep)
540 544 if dep_time > target_time:
541 545 #print "For target",target,"Dep failed:",dep # dbg
542 546 #print "times (dep,tar):",dep_time,target_time # dbg
543 547 return 1
544 548 return 0
545 549
546 550 #-----------------------------------------------------------------------------
547 551 def target_update(target,deps,cmd):
548 552 """Update a target with a given command given a list of dependencies.
549 553
550 554 target_update(target,deps,cmd) -> runs cmd if target is outdated.
551 555
552 556 This is just a wrapper around target_outdated() which calls the given
553 557 command if target is outdated."""
554 558
555 559 if target_outdated(target,deps):
556 560 xsys(cmd)
557 561
558 562 #----------------------------------------------------------------------------
559 563 def unquote_ends(istr):
560 564 """Remove a single pair of quotes from the endpoints of a string."""
561 565
562 566 if not istr:
563 567 return istr
564 568 if (istr[0]=="'" and istr[-1]=="'") or \
565 569 (istr[0]=='"' and istr[-1]=='"'):
566 570 return istr[1:-1]
567 571 else:
568 572 return istr
569 573
570 574 #----------------------------------------------------------------------------
571 575 def process_cmdline(argv,names=[],defaults={},usage=''):
572 576 """ Process command-line options and arguments.
573 577
574 578 Arguments:
575 579
576 580 - argv: list of arguments, typically sys.argv.
577 581
578 582 - names: list of option names. See DPyGetOpt docs for details on options
579 583 syntax.
580 584
581 585 - defaults: dict of default values.
582 586
583 587 - usage: optional usage notice to print if a wrong argument is passed.
584 588
585 589 Return a dict of options and a list of free arguments."""
586 590
587 591 getopt = DPyGetOpt.DPyGetOpt()
588 592 getopt.setIgnoreCase(0)
589 593 getopt.parseConfiguration(names)
590 594
591 595 try:
592 596 getopt.processArguments(argv)
593 597 except:
594 598 print usage
595 599 warn(`sys.exc_value`,level=4)
596 600
597 601 defaults.update(getopt.optionValues)
598 602 args = getopt.freeValues
599 603
600 604 return defaults,args
601 605
602 606 #----------------------------------------------------------------------------
603 607 def optstr2types(ostr):
604 608 """Convert a string of option names to a dict of type mappings.
605 609
606 610 optstr2types(str) -> {None:'string_opts',int:'int_opts',float:'float_opts'}
607 611
608 612 This is used to get the types of all the options in a string formatted
609 613 with the conventions of DPyGetOpt. The 'type' None is used for options
610 614 which are strings (they need no further conversion). This function's main
611 615 use is to get a typemap for use with read_dict().
612 616 """
613 617
614 618 typeconv = {None:'',int:'',float:''}
615 619 typemap = {'s':None,'i':int,'f':float}
616 620 opt_re = re.compile(r'([\w]*)([^:=]*:?=?)([sif]?)')
617 621
618 622 for w in ostr.split():
619 623 oname,alias,otype = opt_re.match(w).groups()
620 624 if otype == '' or alias == '!': # simple switches are integers too
621 625 otype = 'i'
622 626 typeconv[typemap[otype]] += oname + ' '
623 627 return typeconv
624 628
625 629 #----------------------------------------------------------------------------
626 630 def read_dict(filename,type_conv=None,**opt):
627 631
628 632 """Read a dictionary of key=value pairs from an input file, optionally
629 633 performing conversions on the resulting values.
630 634
631 635 read_dict(filename,type_conv,**opt) -> dict
632 636
633 637 Only one value per line is accepted, the format should be
634 638 # optional comments are ignored
635 639 key value\n
636 640
637 641 Args:
638 642
639 643 - type_conv: A dictionary specifying which keys need to be converted to
640 644 which types. By default all keys are read as strings. This dictionary
641 645 should have as its keys valid conversion functions for strings
642 646 (int,long,float,complex, or your own). The value for each key
643 647 (converter) should be a whitespace separated string containing the names
644 648 of all the entries in the file to be converted using that function. For
645 649 keys to be left alone, use None as the conversion function (only needed
646 650 with purge=1, see below).
647 651
648 652 - opt: dictionary with extra options as below (default in parens)
649 653
650 654 purge(0): if set to 1, all keys *not* listed in type_conv are purged out
651 655 of the dictionary to be returned. If purge is going to be used, the
652 656 set of keys to be left as strings also has to be explicitly specified
653 657 using the (non-existent) conversion function None.
654 658
655 659 fs(None): field separator. This is the key/value separator to be used
656 660 when parsing the file. The None default means any whitespace [behavior
657 661 of string.split()].
658 662
659 663 strip(0): if 1, strip string values of leading/trailinig whitespace.
660 664
661 665 warn(1): warning level if requested keys are not found in file.
662 666 - 0: silently ignore.
663 667 - 1: inform but proceed.
664 668 - 2: raise KeyError exception.
665 669
666 670 no_empty(0): if 1, remove keys with whitespace strings as a value.
667 671
668 672 unique([]): list of keys (or space separated string) which can't be
669 673 repeated. If one such key is found in the file, each new instance
670 674 overwrites the previous one. For keys not listed here, the behavior is
671 675 to make a list of all appearances.
672 676
673 677 Example:
674 678 If the input file test.ini has:
675 679 i 3
676 680 x 4.5
677 681 y 5.5
678 682 s hi ho
679 683 Then:
680 684
681 685 >>> type_conv={int:'i',float:'x',None:'s'}
682 686 >>> read_dict('test.ini')
683 687 {'i': '3', 's': 'hi ho', 'x': '4.5', 'y': '5.5'}
684 688 >>> read_dict('test.ini',type_conv)
685 689 {'i': 3, 's': 'hi ho', 'x': 4.5, 'y': '5.5'}
686 690 >>> read_dict('test.ini',type_conv,purge=1)
687 691 {'i': 3, 's': 'hi ho', 'x': 4.5}
688 692 """
689 693
690 694 # starting config
691 695 opt.setdefault('purge',0)
692 696 opt.setdefault('fs',None) # field sep defaults to any whitespace
693 697 opt.setdefault('strip',0)
694 698 opt.setdefault('warn',1)
695 699 opt.setdefault('no_empty',0)
696 700 opt.setdefault('unique','')
697 701 if type(opt['unique']) in StringTypes:
698 702 unique_keys = qw(opt['unique'])
699 703 elif type(opt['unique']) in (types.TupleType,types.ListType):
700 704 unique_keys = opt['unique']
701 705 else:
702 706 raise ValueError, 'Unique keys must be given as a string, List or Tuple'
703 707
704 708 dict = {}
705 709 # first read in table of values as strings
706 710 file = open(filename,'r')
707 711 for line in file.readlines():
708 712 line = line.strip()
709 713 if len(line) and line[0]=='#': continue
710 714 if len(line)>0:
711 715 lsplit = line.split(opt['fs'],1)
712 716 try:
713 717 key,val = lsplit
714 718 except ValueError:
715 719 key,val = lsplit[0],''
716 720 key = key.strip()
717 721 if opt['strip']: val = val.strip()
718 722 if val == "''" or val == '""': val = ''
719 723 if opt['no_empty'] and (val=='' or val.isspace()):
720 724 continue
721 725 # if a key is found more than once in the file, build a list
722 726 # unless it's in the 'unique' list. In that case, last found in file
723 727 # takes precedence. User beware.
724 728 try:
725 729 if dict[key] and key in unique_keys:
726 730 dict[key] = val
727 731 elif type(dict[key]) is types.ListType:
728 732 dict[key].append(val)
729 733 else:
730 734 dict[key] = [dict[key],val]
731 735 except KeyError:
732 736 dict[key] = val
733 737 # purge if requested
734 738 if opt['purge']:
735 739 accepted_keys = qwflat(type_conv.values())
736 740 for key in dict.keys():
737 741 if key in accepted_keys: continue
738 742 del(dict[key])
739 743 # now convert if requested
740 744 if type_conv==None: return dict
741 745 conversions = type_conv.keys()
742 746 try: conversions.remove(None)
743 747 except: pass
744 748 for convert in conversions:
745 749 for val in qw(type_conv[convert]):
746 750 try:
747 751 dict[val] = convert(dict[val])
748 752 except KeyError,e:
749 753 if opt['warn'] == 0:
750 754 pass
751 755 elif opt['warn'] == 1:
752 756 print >>sys.stderr, 'Warning: key',val,\
753 757 'not found in file',filename
754 758 elif opt['warn'] == 2:
755 759 raise KeyError,e
756 760 else:
757 761 raise ValueError,'Warning level must be 0,1 or 2'
758 762
759 763 return dict
760 764
761 765 #----------------------------------------------------------------------------
762 766 def flag_calls(func):
763 767 """Wrap a function to detect and flag when it gets called.
764 768
765 769 This is a decorator which takes a function and wraps it in a function with
766 770 a 'called' attribute. wrapper.called is initialized to False.
767 771
768 772 The wrapper.called attribute is set to False right before each call to the
769 773 wrapped function, so if the call fails it remains False. After the call
770 774 completes, wrapper.called is set to True and the output is returned.
771 775
772 776 Testing for truth in wrapper.called allows you to determine if a call to
773 777 func() was attempted and succeeded."""
774 778
775 779 def wrapper(*args,**kw):
776 780 wrapper.called = False
777 781 out = func(*args,**kw)
778 782 wrapper.called = True
779 783 return out
780 784
781 785 wrapper.called = False
782 786 wrapper.__doc__ = func.__doc__
783 787 return wrapper
784 788
785 789 #----------------------------------------------------------------------------
786 790 class HomeDirError(Error):
787 791 pass
788 792
789 793 def get_home_dir():
790 794 """Return the closest possible equivalent to a 'home' directory.
791 795
792 796 We first try $HOME. Absent that, on NT it's $HOMEDRIVE\$HOMEPATH.
793 797
794 798 Currently only Posix and NT are implemented, a HomeDirError exception is
795 799 raised for all other OSes. """
796 800
797 801 isdir = os.path.isdir
798 802 env = os.environ
799 803 try:
800 804 homedir = env['HOME']
801 805 if not isdir(homedir):
802 806 # in case a user stuck some string which does NOT resolve to a
803 807 # valid path, it's as good as if we hadn't foud it
804 808 raise KeyError
805 809 return homedir
806 810 except KeyError:
807 811 if os.name == 'posix':
808 812 raise HomeDirError,'undefined $HOME, IPython can not proceed.'
809 813 elif os.name == 'nt':
810 814 # For some strange reason, win9x returns 'nt' for os.name.
811 815 try:
812 816 homedir = os.path.join(env['HOMEDRIVE'],env['HOMEPATH'])
813 817 if not isdir(homedir):
814 818 homedir = os.path.join(env['USERPROFILE'])
815 819 if not isdir(homedir):
816 820 raise HomeDirError
817 821 return homedir
818 822 except:
819 823 try:
820 824 # Use the registry to get the 'My Documents' folder.
821 825 import _winreg as wreg
822 826 key = wreg.OpenKey(wreg.HKEY_CURRENT_USER,
823 827 "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
824 828 homedir = wreg.QueryValueEx(key,'Personal')[0]
825 829 key.Close()
826 830 if not isdir(homedir):
827 831 e = ('Invalid "Personal" folder registry key '
828 832 'typically "My Documents".\n'
829 833 'Value: %s\n'
830 834 'This is not a valid directory on your system.' %
831 835 homedir)
832 836 raise HomeDirError(e)
833 837 return homedir
834 838 except HomeDirError:
835 839 raise
836 840 except:
837 841 return 'C:\\'
838 842 elif os.name == 'dos':
839 843 # Desperate, may do absurd things in classic MacOS. May work under DOS.
840 844 return 'C:\\'
841 845 else:
842 846 raise HomeDirError,'support for your operating system not implemented.'
843 847
844 848 #****************************************************************************
845 849 # strings and text
846 850
847 851 class LSString(str):
848 852 """String derivative with a special access attributes.
849 853
850 854 These are normal strings, but with the special attributes:
851 855
852 856 .l (or .list) : value as list (split on newlines).
853 857 .n (or .nlstr): original value (the string itself).
854 858 .s (or .spstr): value as whitespace-separated string.
855 859
856 860 Any values which require transformations are computed only once and
857 861 cached.
858 862
859 863 Such strings are very useful to efficiently interact with the shell, which
860 864 typically only understands whitespace-separated options for commands."""
861 865
862 866 def get_list(self):
863 867 try:
864 868 return self.__list
865 869 except AttributeError:
866 870 self.__list = self.split('\n')
867 871 return self.__list
868 872
869 873 l = list = property(get_list)
870 874
871 875 def get_spstr(self):
872 876 try:
873 877 return self.__spstr
874 878 except AttributeError:
875 879 self.__spstr = self.replace('\n',' ')
876 880 return self.__spstr
877 881
878 882 s = spstr = property(get_spstr)
879 883
880 884 def get_nlstr(self):
881 885 return self
882 886
883 887 n = nlstr = property(get_nlstr)
884 888
885 889 def get_paths(self):
886 890 try:
887 891 return self.__paths
888 892 except AttributeError:
889 893 self.__paths = [path(p) for p in self.split('\n') if os.path.exists(p)]
890 894 return self.__paths
891 895
892 896 p = paths = property(get_paths)
893 897
894 898
895 899 #----------------------------------------------------------------------------
896 900 class SList(list):
897 901 """List derivative with a special access attributes.
898 902
899 903 These are normal lists, but with the special attributes:
900 904
901 905 .l (or .list) : value as list (the list itself).
902 906 .n (or .nlstr): value as a string, joined on newlines.
903 907 .s (or .spstr): value as a string, joined on spaces.
904 908
905 909 Any values which require transformations are computed only once and
906 910 cached."""
907 911
908 912 def get_list(self):
909 913 return self
910 914
911 915 l = list = property(get_list)
912 916
913 917 def get_spstr(self):
914 918 try:
915 919 return self.__spstr
916 920 except AttributeError:
917 921 self.__spstr = ' '.join(self)
918 922 return self.__spstr
919 923
920 924 s = spstr = property(get_spstr)
921 925
922 926 def get_nlstr(self):
923 927 try:
924 928 return self.__nlstr
925 929 except AttributeError:
926 930 self.__nlstr = '\n'.join(self)
927 931 return self.__nlstr
928 932
929 933 n = nlstr = property(get_nlstr)
930 934
931 935 def get_paths(self):
932 936 try:
933 937 return self.__paths
934 938 except AttributeError:
935 939 self.__paths = [path(p) for p in self if os.path.exists(p)]
936 940 return self.__paths
937 941
938 942 p = paths = property(get_paths)
939 943
940 944 #----------------------------------------------------------------------------
941 945 def esc_quotes(strng):
942 946 """Return the input string with single and double quotes escaped out"""
943 947
944 948 return strng.replace('"','\\"').replace("'","\\'")
945 949
946 950 #----------------------------------------------------------------------------
947 951 def make_quoted_expr(s):
948 952 """Return string s in appropriate quotes, using raw string if possible.
949 953
950 954 Effectively this turns string: cd \ao\ao\
951 955 to: r"cd \ao\ao\_"[:-1]
952 956
953 957 Note the use of raw string and padding at the end to allow trailing backslash.
954 958
955 959 """
956 960
957 961 tail = ''
958 962 tailpadding = ''
959 963 raw = ''
960 964 if "\\" in s:
961 965 raw = 'r'
962 966 if s.endswith('\\'):
963 967 tail = '[:-1]'
964 968 tailpadding = '_'
965 969 if '"' not in s:
966 970 quote = '"'
967 971 elif "'" not in s:
968 972 quote = "'"
969 973 elif '"""' not in s and not s.endswith('"'):
970 974 quote = '"""'
971 975 elif "'''" not in s and not s.endswith("'"):
972 976 quote = "'''"
973 977 else:
974 978 # give up, backslash-escaped string will do
975 979 return '"%s"' % esc_quotes(s)
976 980 res = itpl("$raw$quote$s$tailpadding$quote$tail")
977 981 return res
978 982
979 983
980 984 #----------------------------------------------------------------------------
981 985 def raw_input_multi(header='', ps1='==> ', ps2='..> ',terminate_str = '.'):
982 986 """Take multiple lines of input.
983 987
984 988 A list with each line of input as a separate element is returned when a
985 989 termination string is entered (defaults to a single '.'). Input can also
986 990 terminate via EOF (^D in Unix, ^Z-RET in Windows).
987 991
988 992 Lines of input which end in \\ are joined into single entries (and a
989 993 secondary continuation prompt is issued as long as the user terminates
990 994 lines with \\). This allows entering very long strings which are still
991 995 meant to be treated as single entities.
992 996 """
993 997
994 998 try:
995 999 if header:
996 1000 header += '\n'
997 1001 lines = [raw_input(header + ps1)]
998 1002 except EOFError:
999 1003 return []
1000 1004 terminate = [terminate_str]
1001 1005 try:
1002 1006 while lines[-1:] != terminate:
1003 1007 new_line = raw_input(ps1)
1004 1008 while new_line.endswith('\\'):
1005 1009 new_line = new_line[:-1] + raw_input(ps2)
1006 1010 lines.append(new_line)
1007 1011
1008 1012 return lines[:-1] # don't return the termination command
1009 1013 except EOFError:
1010 1014 print
1011 1015 return lines
1012 1016
1013 1017 #----------------------------------------------------------------------------
1014 1018 def raw_input_ext(prompt='', ps2='... '):
1015 1019 """Similar to raw_input(), but accepts extended lines if input ends with \\."""
1016 1020
1017 1021 line = raw_input(prompt)
1018 1022 while line.endswith('\\'):
1019 1023 line = line[:-1] + raw_input(ps2)
1020 1024 return line
1021 1025
1022 1026 #----------------------------------------------------------------------------
1023 1027 def ask_yes_no(prompt,default=None):
1024 1028 """Asks a question and returns an integer 1/0 (y/n) answer.
1025 1029
1026 1030 If default is given (one of 'y','n'), it is used if the user input is
1027 1031 empty. Otherwise the question is repeated until an answer is given.
1028 1032
1029 1033 An EOF is treated as the default answer. If there is no default, an
1030 1034 exception is raised to prevent infinite loops.
1031 1035
1032 1036 Valid answers are: y/yes/n/no (match is not case sensitive)."""
1033 1037
1034 1038 answers = {'y':True,'n':False,'yes':True,'no':False}
1035 1039 ans = None
1036 1040 while ans not in answers.keys():
1037 1041 try:
1038 1042 ans = raw_input(prompt+' ').lower()
1039 1043 if not ans: # response was an empty string
1040 1044 ans = default
1041 1045 except KeyboardInterrupt:
1042 1046 pass
1043 1047 except EOFError:
1044 1048 if default in answers.keys():
1045 1049 ans = default
1046 1050 print
1047 1051 else:
1048 1052 raise
1049 1053
1050 1054 return answers[ans]
1051 1055
1052 1056 #----------------------------------------------------------------------------
1053 1057 def marquee(txt='',width=78,mark='*'):
1054 1058 """Return the input string centered in a 'marquee'."""
1055 1059 if not txt:
1056 1060 return (mark*width)[:width]
1057 1061 nmark = (width-len(txt)-2)/len(mark)/2
1058 1062 if nmark < 0: nmark =0
1059 1063 marks = mark*nmark
1060 1064 return '%s %s %s' % (marks,txt,marks)
1061 1065
1062 1066 #----------------------------------------------------------------------------
1063 1067 class EvalDict:
1064 1068 """
1065 1069 Emulate a dict which evaluates its contents in the caller's frame.
1066 1070
1067 1071 Usage:
1068 1072 >>>number = 19
1069 1073 >>>text = "python"
1070 1074 >>>print "%(text.capitalize())s %(number/9.0).1f rules!" % EvalDict()
1071 1075 """
1072 1076
1073 1077 # This version is due to sismex01@hebmex.com on c.l.py, and is basically a
1074 1078 # modified (shorter) version of:
1075 1079 # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66018 by
1076 1080 # Skip Montanaro (skip@pobox.com).
1077 1081
1078 1082 def __getitem__(self, name):
1079 1083 frame = sys._getframe(1)
1080 1084 return eval(name, frame.f_globals, frame.f_locals)
1081 1085
1082 1086 EvalString = EvalDict # for backwards compatibility
1083 1087 #----------------------------------------------------------------------------
1084 1088 def qw(words,flat=0,sep=None,maxsplit=-1):
1085 1089 """Similar to Perl's qw() operator, but with some more options.
1086 1090
1087 1091 qw(words,flat=0,sep=' ',maxsplit=-1) -> words.split(sep,maxsplit)
1088 1092
1089 1093 words can also be a list itself, and with flat=1, the output will be
1090 1094 recursively flattened. Examples:
1091 1095
1092 1096 >>> qw('1 2')
1093 1097 ['1', '2']
1094 1098 >>> qw(['a b','1 2',['m n','p q']])
1095 1099 [['a', 'b'], ['1', '2'], [['m', 'n'], ['p', 'q']]]
1096 1100 >>> qw(['a b','1 2',['m n','p q']],flat=1)
1097 1101 ['a', 'b', '1', '2', 'm', 'n', 'p', 'q'] """
1098 1102
1099 1103 if type(words) in StringTypes:
1100 1104 return [word.strip() for word in words.split(sep,maxsplit)
1101 1105 if word and not word.isspace() ]
1102 1106 if flat:
1103 1107 return flatten(map(qw,words,[1]*len(words)))
1104 1108 return map(qw,words)
1105 1109
1106 1110 #----------------------------------------------------------------------------
1107 1111 def qwflat(words,sep=None,maxsplit=-1):
1108 1112 """Calls qw(words) in flat mode. It's just a convenient shorthand."""
1109 1113 return qw(words,1,sep,maxsplit)
1110 1114
1111 1115 #----------------------------------------------------------------------------
1112 1116 def qw_lol(indata):
1113 1117 """qw_lol('a b') -> [['a','b']],
1114 1118 otherwise it's just a call to qw().
1115 1119
1116 1120 We need this to make sure the modules_some keys *always* end up as a
1117 1121 list of lists."""
1118 1122
1119 1123 if type(indata) in StringTypes:
1120 1124 return [qw(indata)]
1121 1125 else:
1122 1126 return qw(indata)
1123 1127
1124 1128 #-----------------------------------------------------------------------------
1125 1129 def list_strings(arg):
1126 1130 """Always return a list of strings, given a string or list of strings
1127 1131 as input."""
1128 1132
1129 1133 if type(arg) in StringTypes: return [arg]
1130 1134 else: return arg
1131 1135
1132 1136 #----------------------------------------------------------------------------
1133 1137 def grep(pat,list,case=1):
1134 1138 """Simple minded grep-like function.
1135 1139 grep(pat,list) returns occurrences of pat in list, None on failure.
1136 1140
1137 1141 It only does simple string matching, with no support for regexps. Use the
1138 1142 option case=0 for case-insensitive matching."""
1139 1143
1140 1144 # This is pretty crude. At least it should implement copying only references
1141 1145 # to the original data in case it's big. Now it copies the data for output.
1142 1146 out=[]
1143 1147 if case:
1144 1148 for term in list:
1145 1149 if term.find(pat)>-1: out.append(term)
1146 1150 else:
1147 1151 lpat=pat.lower()
1148 1152 for term in list:
1149 1153 if term.lower().find(lpat)>-1: out.append(term)
1150 1154
1151 1155 if len(out): return out
1152 1156 else: return None
1153 1157
1154 1158 #----------------------------------------------------------------------------
1155 1159 def dgrep(pat,*opts):
1156 1160 """Return grep() on dir()+dir(__builtins__).
1157 1161
1158 1162 A very common use of grep() when working interactively."""
1159 1163
1160 1164 return grep(pat,dir(__main__)+dir(__main__.__builtins__),*opts)
1161 1165
1162 1166 #----------------------------------------------------------------------------
1163 1167 def idgrep(pat):
1164 1168 """Case-insensitive dgrep()"""
1165 1169
1166 1170 return dgrep(pat,0)
1167 1171
1168 1172 #----------------------------------------------------------------------------
1169 1173 def igrep(pat,list):
1170 1174 """Synonym for case-insensitive grep."""
1171 1175
1172 1176 return grep(pat,list,case=0)
1173 1177
1174 1178 #----------------------------------------------------------------------------
1175 1179 def indent(str,nspaces=4,ntabs=0):
1176 1180 """Indent a string a given number of spaces or tabstops.
1177 1181
1178 1182 indent(str,nspaces=4,ntabs=0) -> indent str by ntabs+nspaces.
1179 1183 """
1180 1184 if str is None:
1181 1185 return
1182 1186 ind = '\t'*ntabs+' '*nspaces
1183 1187 outstr = '%s%s' % (ind,str.replace(os.linesep,os.linesep+ind))
1184 1188 if outstr.endswith(os.linesep+ind):
1185 1189 return outstr[:-len(ind)]
1186 1190 else:
1187 1191 return outstr
1188 1192
1189 1193 #-----------------------------------------------------------------------------
1190 1194 def native_line_ends(filename,backup=1):
1191 1195 """Convert (in-place) a file to line-ends native to the current OS.
1192 1196
1193 1197 If the optional backup argument is given as false, no backup of the
1194 1198 original file is left. """
1195 1199
1196 1200 backup_suffixes = {'posix':'~','dos':'.bak','nt':'.bak','mac':'.bak'}
1197 1201
1198 1202 bak_filename = filename + backup_suffixes[os.name]
1199 1203
1200 1204 original = open(filename).read()
1201 1205 shutil.copy2(filename,bak_filename)
1202 1206 try:
1203 1207 new = open(filename,'wb')
1204 1208 new.write(os.linesep.join(original.splitlines()))
1205 1209 new.write(os.linesep) # ALWAYS put an eol at the end of the file
1206 1210 new.close()
1207 1211 except:
1208 1212 os.rename(bak_filename,filename)
1209 1213 if not backup:
1210 1214 try:
1211 1215 os.remove(bak_filename)
1212 1216 except:
1213 1217 pass
1214 1218
1215 1219 #----------------------------------------------------------------------------
1216 1220 def get_pager_cmd(pager_cmd = None):
1217 1221 """Return a pager command.
1218 1222
1219 1223 Makes some attempts at finding an OS-correct one."""
1220 1224
1221 1225 if os.name == 'posix':
1222 1226 default_pager_cmd = 'less -r' # -r for color control sequences
1223 1227 elif os.name in ['nt','dos']:
1224 1228 default_pager_cmd = 'type'
1225 1229
1226 1230 if pager_cmd is None:
1227 1231 try:
1228 1232 pager_cmd = os.environ['PAGER']
1229 1233 except:
1230 1234 pager_cmd = default_pager_cmd
1231 1235 return pager_cmd
1232 1236
1233 1237 #-----------------------------------------------------------------------------
1234 1238 def get_pager_start(pager,start):
1235 1239 """Return the string for paging files with an offset.
1236 1240
1237 1241 This is the '+N' argument which less and more (under Unix) accept.
1238 1242 """
1239 1243
1240 1244 if pager in ['less','more']:
1241 1245 if start:
1242 1246 start_string = '+' + str(start)
1243 1247 else:
1244 1248 start_string = ''
1245 1249 else:
1246 1250 start_string = ''
1247 1251 return start_string
1248 1252
1249 1253 #----------------------------------------------------------------------------
1250 1254 # (X)emacs on W32 doesn't like to be bypassed with msvcrt.getch()
1251 1255 if os.name == 'nt' and os.environ.get('TERM','dumb') != 'emacs':
1252 1256 import msvcrt
1253 1257 def page_more():
1254 1258 """ Smart pausing between pages
1255 1259
1256 1260 @return: True if need print more lines, False if quit
1257 1261 """
1258 1262 Term.cout.write('---Return to continue, q to quit--- ')
1259 1263 ans = msvcrt.getch()
1260 1264 if ans in ("q", "Q"):
1261 1265 result = False
1262 1266 else:
1263 1267 result = True
1264 1268 Term.cout.write("\b"*37 + " "*37 + "\b"*37)
1265 1269 return result
1266 1270 else:
1267 1271 def page_more():
1268 1272 ans = raw_input('---Return to continue, q to quit--- ')
1269 1273 if ans.lower().startswith('q'):
1270 1274 return False
1271 1275 else:
1272 1276 return True
1273 1277
1274 1278 esc_re = re.compile(r"(\x1b[^m]+m)")
1275 1279
1276 1280 def page_dumb(strng,start=0,screen_lines=25):
1277 1281 """Very dumb 'pager' in Python, for when nothing else works.
1278 1282
1279 1283 Only moves forward, same interface as page(), except for pager_cmd and
1280 1284 mode."""
1281 1285
1282 1286 out_ln = strng.splitlines()[start:]
1283 1287 screens = chop(out_ln,screen_lines-1)
1284 1288 if len(screens) == 1:
1285 1289 print >>Term.cout, os.linesep.join(screens[0])
1286 1290 else:
1287 1291 last_escape = ""
1288 1292 for scr in screens[0:-1]:
1289 1293 hunk = os.linesep.join(scr)
1290 1294 print >>Term.cout, last_escape + hunk
1291 1295 if not page_more():
1292 1296 return
1293 1297 esc_list = esc_re.findall(hunk)
1294 1298 if len(esc_list) > 0:
1295 1299 last_escape = esc_list[-1]
1296 1300 print >>Term.cout, last_escape + os.linesep.join(screens[-1])
1297 1301
1298 1302 #----------------------------------------------------------------------------
1299 1303 def page(strng,start=0,screen_lines=0,pager_cmd = None):
1300 1304 """Print a string, piping through a pager after a certain length.
1301 1305
1302 1306 The screen_lines parameter specifies the number of *usable* lines of your
1303 1307 terminal screen (total lines minus lines you need to reserve to show other
1304 1308 information).
1305 1309
1306 1310 If you set screen_lines to a number <=0, page() will try to auto-determine
1307 1311 your screen size and will only use up to (screen_size+screen_lines) for
1308 1312 printing, paging after that. That is, if you want auto-detection but need
1309 1313 to reserve the bottom 3 lines of the screen, use screen_lines = -3, and for
1310 1314 auto-detection without any lines reserved simply use screen_lines = 0.
1311 1315
1312 1316 If a string won't fit in the allowed lines, it is sent through the
1313 1317 specified pager command. If none given, look for PAGER in the environment,
1314 1318 and ultimately default to less.
1315 1319
1316 1320 If no system pager works, the string is sent through a 'dumb pager'
1317 1321 written in python, very simplistic.
1318 1322 """
1319 1323
1320 1324 # Ugly kludge, but calling curses.initscr() flat out crashes in emacs
1321 1325 TERM = os.environ.get('TERM','dumb')
1322 1326 if TERM in ['dumb','emacs'] and os.name != 'nt':
1323 1327 print strng
1324 1328 return
1325 1329 # chop off the topmost part of the string we don't want to see
1326 1330 str_lines = strng.split(os.linesep)[start:]
1327 1331 str_toprint = os.linesep.join(str_lines)
1328 1332 num_newlines = len(str_lines)
1329 1333 len_str = len(str_toprint)
1330 1334
1331 1335 # Dumb heuristics to guesstimate number of on-screen lines the string
1332 1336 # takes. Very basic, but good enough for docstrings in reasonable
1333 1337 # terminals. If someone later feels like refining it, it's not hard.
1334 1338 numlines = max(num_newlines,int(len_str/80)+1)
1335 1339
1336 1340 if os.name == "nt":
1337 1341 screen_lines_def = get_console_size(defaulty=25)[1]
1338 1342 else:
1339 1343 screen_lines_def = 25 # default value if we can't auto-determine
1340 1344
1341 1345 # auto-determine screen size
1342 1346 if screen_lines <= 0:
1343 1347 if TERM=='xterm':
1344 1348 try:
1345 1349 import curses
1346 1350 if hasattr(curses,'initscr'):
1347 1351 use_curses = 1
1348 1352 else:
1349 1353 use_curses = 0
1350 1354 except ImportError:
1351 1355 use_curses = 0
1352 1356 else:
1353 1357 # curses causes problems on many terminals other than xterm.
1354 1358 use_curses = 0
1355 1359 if use_curses:
1356 1360 scr = curses.initscr()
1357 1361 screen_lines_real,screen_cols = scr.getmaxyx()
1358 1362 curses.endwin()
1359 1363 screen_lines += screen_lines_real
1360 1364 #print '***Screen size:',screen_lines_real,'lines x',\
1361 1365 #screen_cols,'columns.' # dbg
1362 1366 else:
1363 1367 screen_lines += screen_lines_def
1364 1368
1365 1369 #print 'numlines',numlines,'screenlines',screen_lines # dbg
1366 1370 if numlines <= screen_lines :
1367 1371 #print '*** normal print' # dbg
1368 1372 print >>Term.cout, str_toprint
1369 1373 else:
1370 1374 # Try to open pager and default to internal one if that fails.
1371 1375 # All failure modes are tagged as 'retval=1', to match the return
1372 1376 # value of a failed system command. If any intermediate attempt
1373 1377 # sets retval to 1, at the end we resort to our own page_dumb() pager.
1374 1378 pager_cmd = get_pager_cmd(pager_cmd)
1375 1379 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1376 1380 if os.name == 'nt':
1377 1381 if pager_cmd.startswith('type'):
1378 1382 # The default WinXP 'type' command is failing on complex strings.
1379 1383 retval = 1
1380 1384 else:
1381 1385 tmpname = tempfile.mktemp('.txt')
1382 1386 tmpfile = file(tmpname,'wt')
1383 1387 tmpfile.write(strng)
1384 1388 tmpfile.close()
1385 1389 cmd = "%s < %s" % (pager_cmd,tmpname)
1386 1390 if os.system(cmd):
1387 1391 retval = 1
1388 1392 else:
1389 1393 retval = None
1390 1394 os.remove(tmpname)
1391 1395 else:
1392 1396 try:
1393 1397 retval = None
1394 1398 # if I use popen4, things hang. No idea why.
1395 1399 #pager,shell_out = os.popen4(pager_cmd)
1396 1400 pager = os.popen(pager_cmd,'w')
1397 1401 pager.write(strng)
1398 1402 pager.close()
1399 1403 retval = pager.close() # success returns None
1400 1404 except IOError,msg: # broken pipe when user quits
1401 1405 if msg.args == (32,'Broken pipe'):
1402 1406 retval = None
1403 1407 else:
1404 1408 retval = 1
1405 1409 except OSError:
1406 1410 # Other strange problems, sometimes seen in Win2k/cygwin
1407 1411 retval = 1
1408 1412 if retval is not None:
1409 1413 page_dumb(strng,screen_lines=screen_lines)
1410 1414
1411 1415 #----------------------------------------------------------------------------
1412 1416 def page_file(fname,start = 0, pager_cmd = None):
1413 1417 """Page a file, using an optional pager command and starting line.
1414 1418 """
1415 1419
1416 1420 pager_cmd = get_pager_cmd(pager_cmd)
1417 1421 pager_cmd += ' ' + get_pager_start(pager_cmd,start)
1418 1422
1419 1423 try:
1420 1424 if os.environ['TERM'] in ['emacs','dumb']:
1421 1425 raise EnvironmentError
1422 1426 xsys(pager_cmd + ' ' + fname)
1423 1427 except:
1424 1428 try:
1425 1429 if start > 0:
1426 1430 start -= 1
1427 1431 page(open(fname).read(),start)
1428 1432 except:
1429 1433 print 'Unable to show file',`fname`
1430 1434
1431 1435 #----------------------------------------------------------------------------
1432 1436 def snip_print(str,width = 75,print_full = 0,header = ''):
1433 1437 """Print a string snipping the midsection to fit in width.
1434 1438
1435 1439 print_full: mode control:
1436 1440 - 0: only snip long strings
1437 1441 - 1: send to page() directly.
1438 1442 - 2: snip long strings and ask for full length viewing with page()
1439 1443 Return 1 if snipping was necessary, 0 otherwise."""
1440 1444
1441 1445 if print_full == 1:
1442 1446 page(header+str)
1443 1447 return 0
1444 1448
1445 1449 print header,
1446 1450 if len(str) < width:
1447 1451 print str
1448 1452 snip = 0
1449 1453 else:
1450 1454 whalf = int((width -5)/2)
1451 1455 print str[:whalf] + ' <...> ' + str[-whalf:]
1452 1456 snip = 1
1453 1457 if snip and print_full == 2:
1454 1458 if raw_input(header+' Snipped. View (y/n)? [N]').lower() == 'y':
1455 1459 page(str)
1456 1460 return snip
1457 1461
1458 1462 #****************************************************************************
1459 1463 # lists, dicts and structures
1460 1464
1461 1465 def belong(candidates,checklist):
1462 1466 """Check whether a list of items appear in a given list of options.
1463 1467
1464 1468 Returns a list of 1 and 0, one for each candidate given."""
1465 1469
1466 1470 return [x in checklist for x in candidates]
1467 1471
1468 1472 #----------------------------------------------------------------------------
1469 1473 def uniq_stable(elems):
1470 1474 """uniq_stable(elems) -> list
1471 1475
1472 1476 Return from an iterable, a list of all the unique elements in the input,
1473 1477 but maintaining the order in which they first appear.
1474 1478
1475 1479 A naive solution to this problem which just makes a dictionary with the
1476 1480 elements as keys fails to respect the stability condition, since
1477 1481 dictionaries are unsorted by nature.
1478 1482
1479 1483 Note: All elements in the input must be valid dictionary keys for this
1480 1484 routine to work, as it internally uses a dictionary for efficiency
1481 1485 reasons."""
1482 1486
1483 1487 unique = []
1484 1488 unique_dict = {}
1485 1489 for nn in elems:
1486 1490 if nn not in unique_dict:
1487 1491 unique.append(nn)
1488 1492 unique_dict[nn] = None
1489 1493 return unique
1490 1494
1491 1495 #----------------------------------------------------------------------------
1492 1496 class NLprinter:
1493 1497 """Print an arbitrarily nested list, indicating index numbers.
1494 1498
1495 1499 An instance of this class called nlprint is available and callable as a
1496 1500 function.
1497 1501
1498 1502 nlprint(list,indent=' ',sep=': ') -> prints indenting each level by 'indent'
1499 1503 and using 'sep' to separate the index from the value. """
1500 1504
1501 1505 def __init__(self):
1502 1506 self.depth = 0
1503 1507
1504 1508 def __call__(self,lst,pos='',**kw):
1505 1509 """Prints the nested list numbering levels."""
1506 1510 kw.setdefault('indent',' ')
1507 1511 kw.setdefault('sep',': ')
1508 1512 kw.setdefault('start',0)
1509 1513 kw.setdefault('stop',len(lst))
1510 1514 # we need to remove start and stop from kw so they don't propagate
1511 1515 # into a recursive call for a nested list.
1512 1516 start = kw['start']; del kw['start']
1513 1517 stop = kw['stop']; del kw['stop']
1514 1518 if self.depth == 0 and 'header' in kw.keys():
1515 1519 print kw['header']
1516 1520
1517 1521 for idx in range(start,stop):
1518 1522 elem = lst[idx]
1519 1523 if type(elem)==type([]):
1520 1524 self.depth += 1
1521 1525 self.__call__(elem,itpl('$pos$idx,'),**kw)
1522 1526 self.depth -= 1
1523 1527 else:
1524 1528 printpl(kw['indent']*self.depth+'$pos$idx$kw["sep"]$elem')
1525 1529
1526 1530 nlprint = NLprinter()
1527 1531 #----------------------------------------------------------------------------
1528 1532 def all_belong(candidates,checklist):
1529 1533 """Check whether a list of items ALL appear in a given list of options.
1530 1534
1531 1535 Returns a single 1 or 0 value."""
1532 1536
1533 1537 return 1-(0 in [x in checklist for x in candidates])
1534 1538
1535 1539 #----------------------------------------------------------------------------
1536 1540 def sort_compare(lst1,lst2,inplace = 1):
1537 1541 """Sort and compare two lists.
1538 1542
1539 1543 By default it does it in place, thus modifying the lists. Use inplace = 0
1540 1544 to avoid that (at the cost of temporary copy creation)."""
1541 1545 if not inplace:
1542 1546 lst1 = lst1[:]
1543 1547 lst2 = lst2[:]
1544 1548 lst1.sort(); lst2.sort()
1545 1549 return lst1 == lst2
1546 1550
1547 1551 #----------------------------------------------------------------------------
1548 1552 def mkdict(**kwargs):
1549 1553 """Return a dict from a keyword list.
1550 1554
1551 1555 It's just syntactic sugar for making ditcionary creation more convenient:
1552 1556 # the standard way
1553 1557 >>>data = { 'red' : 1, 'green' : 2, 'blue' : 3 }
1554 1558 # a cleaner way
1555 1559 >>>data = dict(red=1, green=2, blue=3)
1556 1560
1557 1561 If you need more than this, look at the Struct() class."""
1558 1562
1559 1563 return kwargs
1560 1564
1561 1565 #----------------------------------------------------------------------------
1562 1566 def list2dict(lst):
1563 1567 """Takes a list of (key,value) pairs and turns it into a dict."""
1564 1568
1565 1569 dic = {}
1566 1570 for k,v in lst: dic[k] = v
1567 1571 return dic
1568 1572
1569 1573 #----------------------------------------------------------------------------
1570 1574 def list2dict2(lst,default=''):
1571 1575 """Takes a list and turns it into a dict.
1572 1576 Much slower than list2dict, but more versatile. This version can take
1573 1577 lists with sublists of arbitrary length (including sclars)."""
1574 1578
1575 1579 dic = {}
1576 1580 for elem in lst:
1577 1581 if type(elem) in (types.ListType,types.TupleType):
1578 1582 size = len(elem)
1579 1583 if size == 0:
1580 1584 pass
1581 1585 elif size == 1:
1582 1586 dic[elem] = default
1583 1587 else:
1584 1588 k,v = elem[0], elem[1:]
1585 1589 if len(v) == 1: v = v[0]
1586 1590 dic[k] = v
1587 1591 else:
1588 1592 dic[elem] = default
1589 1593 return dic
1590 1594
1591 1595 #----------------------------------------------------------------------------
1592 1596 def flatten(seq):
1593 1597 """Flatten a list of lists (NOT recursive, only works for 2d lists)."""
1594 1598
1595 1599 return [x for subseq in seq for x in subseq]
1596 1600
1597 1601 #----------------------------------------------------------------------------
1598 1602 def get_slice(seq,start=0,stop=None,step=1):
1599 1603 """Get a slice of a sequence with variable step. Specify start,stop,step."""
1600 1604 if stop == None:
1601 1605 stop = len(seq)
1602 1606 item = lambda i: seq[i]
1603 1607 return map(item,xrange(start,stop,step))
1604 1608
1605 1609 #----------------------------------------------------------------------------
1606 1610 def chop(seq,size):
1607 1611 """Chop a sequence into chunks of the given size."""
1608 1612 chunk = lambda i: seq[i:i+size]
1609 1613 return map(chunk,xrange(0,len(seq),size))
1610 1614
1611 1615 #----------------------------------------------------------------------------
1612 1616 # with is a keyword as of python 2.5, so this function is renamed to withobj
1613 1617 # from its old 'with' name.
1614 1618 def with_obj(object, **args):
1615 1619 """Set multiple attributes for an object, similar to Pascal's with.
1616 1620
1617 1621 Example:
1618 1622 with_obj(jim,
1619 1623 born = 1960,
1620 1624 haircolour = 'Brown',
1621 1625 eyecolour = 'Green')
1622 1626
1623 1627 Credit: Greg Ewing, in
1624 1628 http://mail.python.org/pipermail/python-list/2001-May/040703.html.
1625 1629
1626 1630 NOTE: up until IPython 0.7.2, this was called simply 'with', but 'with'
1627 1631 has become a keyword for Python 2.5, so we had to rename it."""
1628 1632
1629 1633 object.__dict__.update(args)
1630 1634
1631 1635 #----------------------------------------------------------------------------
1632 1636 def setattr_list(obj,alist,nspace = None):
1633 1637 """Set a list of attributes for an object taken from a namespace.
1634 1638
1635 1639 setattr_list(obj,alist,nspace) -> sets in obj all the attributes listed in
1636 1640 alist with their values taken from nspace, which must be a dict (something
1637 1641 like locals() will often do) If nspace isn't given, locals() of the
1638 1642 *caller* is used, so in most cases you can omit it.
1639 1643
1640 1644 Note that alist can be given as a string, which will be automatically
1641 1645 split into a list on whitespace. If given as a list, it must be a list of
1642 1646 *strings* (the variable names themselves), not of variables."""
1643 1647
1644 1648 # this grabs the local variables from the *previous* call frame -- that is
1645 1649 # the locals from the function that called setattr_list().
1646 1650 # - snipped from weave.inline()
1647 1651 if nspace is None:
1648 1652 call_frame = sys._getframe().f_back
1649 1653 nspace = call_frame.f_locals
1650 1654
1651 1655 if type(alist) in StringTypes:
1652 1656 alist = alist.split()
1653 1657 for attr in alist:
1654 1658 val = eval(attr,nspace)
1655 1659 setattr(obj,attr,val)
1656 1660
1657 1661 #----------------------------------------------------------------------------
1658 1662 def getattr_list(obj,alist,*args):
1659 1663 """getattr_list(obj,alist[, default]) -> attribute list.
1660 1664
1661 1665 Get a list of named attributes for an object. When a default argument is
1662 1666 given, it is returned when the attribute doesn't exist; without it, an
1663 1667 exception is raised in that case.
1664 1668
1665 1669 Note that alist can be given as a string, which will be automatically
1666 1670 split into a list on whitespace. If given as a list, it must be a list of
1667 1671 *strings* (the variable names themselves), not of variables."""
1668 1672
1669 1673 if type(alist) in StringTypes:
1670 1674 alist = alist.split()
1671 1675 if args:
1672 1676 if len(args)==1:
1673 1677 default = args[0]
1674 1678 return map(lambda attr: getattr(obj,attr,default),alist)
1675 1679 else:
1676 1680 raise ValueError,'getattr_list() takes only one optional argument'
1677 1681 else:
1678 1682 return map(lambda attr: getattr(obj,attr),alist)
1679 1683
1680 1684 #----------------------------------------------------------------------------
1681 1685 def map_method(method,object_list,*argseq,**kw):
1682 1686 """map_method(method,object_list,*args,**kw) -> list
1683 1687
1684 1688 Return a list of the results of applying the methods to the items of the
1685 1689 argument sequence(s). If more than one sequence is given, the method is
1686 1690 called with an argument list consisting of the corresponding item of each
1687 1691 sequence. All sequences must be of the same length.
1688 1692
1689 1693 Keyword arguments are passed verbatim to all objects called.
1690 1694
1691 1695 This is Python code, so it's not nearly as fast as the builtin map()."""
1692 1696
1693 1697 out_list = []
1694 1698 idx = 0
1695 1699 for object in object_list:
1696 1700 try:
1697 1701 handler = getattr(object, method)
1698 1702 except AttributeError:
1699 1703 out_list.append(None)
1700 1704 else:
1701 1705 if argseq:
1702 1706 args = map(lambda lst:lst[idx],argseq)
1703 1707 #print 'ob',object,'hand',handler,'ar',args # dbg
1704 1708 out_list.append(handler(args,**kw))
1705 1709 else:
1706 1710 out_list.append(handler(**kw))
1707 1711 idx += 1
1708 1712 return out_list
1709 1713
1710 1714 #----------------------------------------------------------------------------
1711 1715 def import_fail_info(mod_name,fns=None):
1712 1716 """Inform load failure for a module."""
1713 1717
1714 1718 if fns == None:
1715 1719 warn("Loading of %s failed.\n" % (mod_name,))
1716 1720 else:
1717 1721 warn("Loading of %s from %s failed.\n" % (fns,mod_name))
1718 1722
1719 1723 #----------------------------------------------------------------------------
1720 1724 # Proposed popitem() extension, written as a method
1721 1725
1722 1726
1723 1727 class NotGiven: pass
1724 1728
1725 1729 def popkey(dct,key,default=NotGiven):
1726 1730 """Return dct[key] and delete dct[key].
1727 1731
1728 1732 If default is given, return it if dct[key] doesn't exist, otherwise raise
1729 1733 KeyError. """
1730 1734
1731 1735 try:
1732 1736 val = dct[key]
1733 1737 except KeyError:
1734 1738 if default is NotGiven:
1735 1739 raise
1736 1740 else:
1737 1741 return default
1738 1742 else:
1739 1743 del dct[key]
1740 1744 return val
1741 1745
1742 1746 def wrap_deprecated(func, suggest = '<nothing>'):
1743 1747 def newFunc(*args, **kwargs):
1744 1748 warnings.warn("Call to deprecated function %s, use %s instead" %
1745 1749 ( func.__name__, suggest),
1746 1750 category=DeprecationWarning,
1747 1751 stacklevel = 2)
1748 1752 return func(*args, **kwargs)
1749 1753 return newFunc
1750 1754
1751 1755 #*************************** end of file <genutils.py> **********************
1752 1756
@@ -1,6336 +1,6343 b''
1 1 2007-03-18 Fernando Perez <Fernando.Perez@colorado.edu>
2 2
3 * IPython/genutils.py (IOStream.close): small patch by
4 R. Bernstein for improved pydb support.
5
6 * IPython/Debugger.py (Pdb.format_stack_entry): Added patch by
7 DaveS <davls@telus.net> to improve support of debugging under
8 NTEmacs, including improved pydb behavior.
9
3 10 * IPython/Magic.py (magic_prun): Fix saving of profile info for
4 11 Python 2.5, where the stats object API changed a little. Thanks
5 12 to a bug report by Paul Smith <paul.smith-AT-catugmt.com>.
6 13
7 14 * IPython/ColorANSI.py (InputTermColors.Normal): applied Nicolas
8 15 Pernetty's patch to improve support for (X)Emacs under Win32.
9 16
10 17 2007-03-17 Fernando Perez <Fernando.Perez@colorado.edu>
11 18
12 19 * IPython/Shell.py (hijack_wx): ipmort WX with current semantics
13 20 to quiet a deprecation warning that fires with Wx 2.8. Thanks to
14 21 a report by Nik Tautenhahn.
15 22
16 23 2007-03-16 Walter Doerwald <walter@livinglogic.de>
17 24
18 25 * setup.py: Add the igrid help files to the list of data files
19 26 to be installed alongside igrid.
20 27 * IPython/Extensions/igrid.py: (Patch by Nik Tautenhahn)
21 28 Show the input object of the igrid browser as the window tile.
22 29 Show the object the cursor is on in the statusbar.
23 30
24 31 2007-03-15 Ville Vainio <vivainio@gmail.com>
25 32
26 33 * Extensions/ipy_stock_completers.py: Fixed exception
27 34 on mismatching quotes in %run completer. Patch by
28 35 J�rgen Stenarson. Closes #127.
29 36
30 37 2007-03-14 Ville Vainio <vivainio@gmail.com>
31 38
32 39 * Extensions/ext_rehashdir.py: Do not do auto_alias
33 40 in %rehashdir, it clobbers %store'd aliases.
34 41
35 42 * UserConfig/ipy_profile_sh.py: envpersist.py extension
36 43 (beefed up %env) imported for sh profile.
37 44
38 45 2007-03-10 Walter Doerwald <walter@livinglogic.de>
39 46
40 47 * IPython/Extensions/ipipe.py: Prefer ibrowse over igrid
41 48 as the default browser.
42 49 * IPython/Extensions/igrid.py: Make a few igrid attributes private.
43 50 As igrid displays all attributes it ever encounters, fetch() (which has
44 51 been renamed to _fetch()) doesn't have to recalculate the display attributes
45 52 every time a new item is fetched. This should speed up scrolling.
46 53
47 54 2007-03-10 Fernando Perez <Fernando.Perez@colorado.edu>
48 55
49 56 * IPython/iplib.py (InteractiveShell.__init__): fix for Alex
50 57 Schmolck's recently reported tab-completion bug (my previous one
51 58 had a problem). Patch by Dan Milstein <danmil-AT-comcast.net>.
52 59
53 60 2007-03-09 Walter Doerwald <walter@livinglogic.de>
54 61
55 62 * IPython/Extensions/igrid.py: Patch by Nik Tautenhahn:
56 63 Close help window if exiting igrid.
57 64
58 65 2007-03-02 J�rgen Stenarson <jorgen.stenarson@bostream.nu>
59 66
60 67 * IPython/Extensions/ipy_defaults.py: Check if readline is available
61 68 before calling functions from readline.
62 69
63 70 2007-03-02 Walter Doerwald <walter@livinglogic.de>
64 71
65 72 * IPython/Extensions/igrid.py: Add Nik Tautenhahns igrid extension.
66 73 igrid is a wxPython-based display object for ipipe. If your system has
67 74 wx installed igrid will be the default display. Without wx ipipe falls
68 75 back to ibrowse (which needs curses). If no curses is installed ipipe
69 76 falls back to idump.
70 77
71 78 2007-03-01 Fernando Perez <Fernando.Perez@colorado.edu>
72 79
73 80 * IPython/iplib.py (split_user_inputBROKEN): temporarily disable
74 81 my changes from yesterday, they introduced bugs. Will reactivate
75 82 once I get a correct solution, which will be much easier thanks to
76 83 Dan Milstein's new prefilter test suite.
77 84
78 85 2007-02-28 Fernando Perez <Fernando.Perez@colorado.edu>
79 86
80 87 * IPython/iplib.py (split_user_input): fix input splitting so we
81 88 don't attempt attribute accesses on things that can't possibly be
82 89 valid Python attributes. After a bug report by Alex Schmolck.
83 90 (InteractiveShell.__init__): brown-paper bag fix; regexp broke
84 91 %magic with explicit % prefix.
85 92
86 93 2007-02-27 Fernando Perez <Fernando.Perez@colorado.edu>
87 94
88 95 * IPython/Shell.py (IPShellGTK.mainloop): update threads calls to
89 96 avoid a DeprecationWarning from GTK.
90 97
91 98 2007-02-22 Fernando Perez <Fernando.Perez@colorado.edu>
92 99
93 100 * IPython/genutils.py (clock): I modified clock() to return total
94 101 time, user+system. This is a more commonly needed metric. I also
95 102 introduced the new clocku/clocks to get only user/system time if
96 103 one wants those instead.
97 104
98 105 ***WARNING: API CHANGE*** clock() used to return only user time,
99 106 so if you want exactly the same results as before, use clocku
100 107 instead.
101 108
102 109 2007-02-22 Ville Vainio <vivainio@gmail.com>
103 110
104 111 * IPython/Extensions/ipy_p4.py: Extension for improved
105 112 p4 (perforce version control system) experience.
106 113 Adds %p4 magic with p4 command completion and
107 114 automatic -G argument (marshall output as python dict)
108 115
109 116 2007-02-19 Fernando Perez <Fernando.Perez@colorado.edu>
110 117
111 118 * IPython/demo.py (Demo.re_stop): make dashes optional in demo
112 119 stop marks.
113 120 (ClearingMixin): a simple mixin to easily make a Demo class clear
114 121 the screen in between blocks and have empty marquees. The
115 122 ClearDemo and ClearIPDemo classes that use it are included.
116 123
117 124 2007-02-18 Fernando Perez <Fernando.Perez@colorado.edu>
118 125
119 126 * IPython/irunner.py (pexpect_monkeypatch): patch pexpect to
120 127 protect against exceptions at Python shutdown time. Patch
121 128 sumbmitted to upstream.
122 129
123 130 2007-02-14 Walter Doerwald <walter@livinglogic.de>
124 131
125 132 * IPython/Extensions/ibrowse.py: If entering the first object level
126 133 (i.e. the object for which the browser has been started) fails,
127 134 now the error is raised directly (aborting the browser) instead of
128 135 running into an empty levels list later.
129 136
130 137 2007-02-03 Walter Doerwald <walter@livinglogic.de>
131 138
132 139 * IPython/Extensions/ipipe.py: Add an xrepr implementation
133 140 for the noitem object.
134 141
135 142 2007-01-31 Fernando Perez <Fernando.Perez@colorado.edu>
136 143
137 144 * IPython/completer.py (Completer.attr_matches): Fix small
138 145 tab-completion bug with Enthought Traits objects with units.
139 146 Thanks to a bug report by Tom Denniston
140 147 <tom.denniston-AT-alum.dartmouth.org>.
141 148
142 149 2007-01-27 Fernando Perez <Fernando.Perez@colorado.edu>
143 150
144 151 * IPython/Extensions/ipy_stock_completers.py (runlistpy): fix a
145 152 bug where only .ipy or .py would be completed. Once the first
146 153 argument to %run has been given, all completions are valid because
147 154 they are the arguments to the script, which may well be non-python
148 155 filenames.
149 156
150 157 * IPython/irunner.py (InteractiveRunner.run_source): major updates
151 158 to irunner to allow it to correctly support real doctesting of
152 159 out-of-process ipython code.
153 160
154 161 * IPython/Magic.py (magic_cd): Make the setting of the terminal
155 162 title an option (-noterm_title) because it completely breaks
156 163 doctesting.
157 164
158 165 * IPython/demo.py: fix IPythonDemo class that was not actually working.
159 166
160 167 2007-01-24 Fernando Perez <Fernando.Perez@colorado.edu>
161 168
162 169 * IPython/irunner.py (main): fix small bug where extensions were
163 170 not being correctly recognized.
164 171
165 172 2007-01-23 Walter Doerwald <walter@livinglogic.de>
166 173
167 174 * IPython/Extensions/ipipe.py (xiter): Make sure that iterating
168 175 a string containing a single line yields the string itself as the
169 176 only item.
170 177
171 178 * IPython/Extensions/ibrowse.py (ibrowse): Avoid entering an
172 179 object if it's the same as the one on the last level (This avoids
173 180 infinite recursion for one line strings).
174 181
175 182 2007-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
176 183
177 184 * IPython/ultraTB.py (AutoFormattedTB.__call__): properly flush
178 185 all output streams before printing tracebacks. This ensures that
179 186 user output doesn't end up interleaved with traceback output.
180 187
181 188 2007-01-10 Ville Vainio <vivainio@gmail.com>
182 189
183 190 * Extensions/envpersist.py: Turbocharged %env that remembers
184 191 env vars across sessions; e.g. "%env PATH+=;/opt/scripts" or
185 192 "%env VISUAL=jed".
186 193
187 194 2007-01-05 Fernando Perez <Fernando.Perez@colorado.edu>
188 195
189 196 * IPython/iplib.py (showtraceback): ensure that we correctly call
190 197 custom handlers in all cases (some with pdb were slipping through,
191 198 but I'm not exactly sure why).
192 199
193 200 * IPython/Debugger.py (Tracer.__init__): added new class to
194 201 support set_trace-like usage of IPython's enhanced debugger.
195 202
196 203 2006-12-24 Ville Vainio <vivainio@gmail.com>
197 204
198 205 * ipmaker.py: more informative message when ipy_user_conf
199 206 import fails (suggest running %upgrade).
200 207
201 208 * tools/run_ipy_in_profiler.py: Utility to see where
202 209 the time during IPython startup is spent.
203 210
204 211 2006-12-20 Ville Vainio <vivainio@gmail.com>
205 212
206 213 * 0.7.3 is out - merge all from 0.7.3 branch to trunk
207 214
208 215 * ipapi.py: Add new ipapi method, expand_alias.
209 216
210 217 * Release.py: Bump up version to 0.7.4.svn
211 218
212 219 2006-12-17 Ville Vainio <vivainio@gmail.com>
213 220
214 221 * Extensions/jobctrl.py: Fixed &cmd arg arg...
215 222 to work properly on posix too
216 223
217 224 * Release.py: Update revnum (version is still just 0.7.3).
218 225
219 226 2006-12-15 Ville Vainio <vivainio@gmail.com>
220 227
221 228 * scripts/ipython_win_post_install: create ipython.py in
222 229 prefix + "/scripts".
223 230
224 231 * Release.py: Update version to 0.7.3.
225 232
226 233 2006-12-14 Ville Vainio <vivainio@gmail.com>
227 234
228 235 * scripts/ipython_win_post_install: Overwrite old shortcuts
229 236 if they already exist
230 237
231 238 * Release.py: release 0.7.3rc2
232 239
233 240 2006-12-13 Ville Vainio <vivainio@gmail.com>
234 241
235 242 * Branch and update Release.py for 0.7.3rc1
236 243
237 244 2006-12-13 Fernando Perez <Fernando.Perez@colorado.edu>
238 245
239 246 * IPython/Shell.py (IPShellWX): update for current WX naming
240 247 conventions, to avoid a deprecation warning with current WX
241 248 versions. Thanks to a report by Danny Shevitz.
242 249
243 250 2006-12-12 Ville Vainio <vivainio@gmail.com>
244 251
245 252 * ipmaker.py: apply david cournapeau's patch to make
246 253 import_some work properly even when ipythonrc does
247 254 import_some on empty list (it was an old bug!).
248 255
249 256 * UserConfig/ipy_user_conf.py, UserConfig/ipythonrc:
250 257 Add deprecation note to ipythonrc and a url to wiki
251 258 in ipy_user_conf.py
252 259
253 260
254 261 * Magic.py (%run): %run myscript.ipy now runs myscript.ipy
255 262 as if it was typed on IPython command prompt, i.e.
256 263 as IPython script.
257 264
258 265 * example-magic.py, magic_grepl.py: remove outdated examples
259 266
260 267 2006-12-11 Fernando Perez <Fernando.Perez@colorado.edu>
261 268
262 269 * IPython/iplib.py (debugger): prevent a nasty traceback if %debug
263 270 is called before any exception has occurred.
264 271
265 272 2006-12-08 Ville Vainio <vivainio@gmail.com>
266 273
267 274 * Extensions/ipy_stock_completers.py: fix cd completer
268 275 to translate /'s to \'s again.
269 276
270 277 * completer.py: prevent traceback on file completions w/
271 278 backslash.
272 279
273 280 * Release.py: Update release number to 0.7.3b3 for release
274 281
275 282 2006-12-07 Ville Vainio <vivainio@gmail.com>
276 283
277 284 * Extensions/ipy_signals.py: Ignore ctrl+C in IPython process
278 285 while executing external code. Provides more shell-like behaviour
279 286 and overall better response to ctrl + C / ctrl + break.
280 287
281 288 * tools/make_tarball.py: new script to create tarball straight from svn
282 289 (setup.py sdist doesn't work on win32).
283 290
284 291 * Extensions/ipy_stock_completers.py: fix cd completer to give up
285 292 on dirnames with spaces and use the default completer instead.
286 293
287 294 * Revision.py: Change version to 0.7.3b2 for release.
288 295
289 296 2006-12-05 Ville Vainio <vivainio@gmail.com>
290 297
291 298 * Magic.py, iplib.py, completer.py: Apply R. Bernstein's
292 299 pydb patch 4 (rm debug printing, py 2.5 checking)
293 300
294 301 2006-11-30 Walter Doerwald <walter@livinglogic.de>
295 302 * IPython/Extensions/ibrowse.py: Add two new commands to ibrowse:
296 303 "refresh" (mapped to "r") refreshes the screen by restarting the iterator.
297 304 "refreshfind" (mapped to "R") does the same but tries to go back to the same
298 305 object the cursor was on before the refresh. The command "markrange" is
299 306 mapped to "%" now.
300 307 * IPython/Extensions/ibrowse.py: Make igrpentry and ipwdentry comparable.
301 308
302 309 2006-11-29 Fernando Perez <Fernando.Perez@colorado.edu>
303 310
304 311 * IPython/Magic.py (magic_debug): new %debug magic to activate the
305 312 interactive debugger on the last traceback, without having to call
306 313 %pdb and rerun your code. Made minor changes in various modules,
307 314 should automatically recognize pydb if available.
308 315
309 316 2006-11-28 Ville Vainio <vivainio@gmail.com>
310 317
311 318 * completer.py: If the text start with !, show file completions
312 319 properly. This helps when trying to complete command name
313 320 for shell escapes.
314 321
315 322 2006-11-27 Ville Vainio <vivainio@gmail.com>
316 323
317 324 * ipy_stock_completers.py: bzr completer submitted by Stefan van
318 325 der Walt. Clean up svn and hg completers by using a common
319 326 vcs_completer.
320 327
321 328 2006-11-26 Ville Vainio <vivainio@gmail.com>
322 329
323 330 * Remove ipconfig and %config; you should use _ip.options structure
324 331 directly instead!
325 332
326 333 * genutils.py: add wrap_deprecated function for deprecating callables
327 334
328 335 * iplib.py: deprecate ipmagic, ipsystem, ipalias. Use _ip.magic and
329 336 _ip.system instead. ipalias is redundant.
330 337
331 338 * Magic.py: %rehashdir no longer aliases 'cmdname' to 'cmdname.exe' on
332 339 win32, but just 'cmdname'. Other extensions (non-'exe') are still made
333 340 explicit.
334 341
335 342 * ipy_stock_completers.py: 'hg' (mercurial VCS) now has a custom
336 343 completer. Try it by entering 'hg ' and pressing tab.
337 344
338 345 * macro.py: Give Macro a useful __repr__ method
339 346
340 347 * Magic.py: %whos abbreviates the typename of Macro for brevity.
341 348
342 349 2006-11-24 Walter Doerwald <walter@livinglogic.de>
343 350 * IPython/Extensions/astyle.py: Do a relative import of ipipe, so that
344 351 we don't get a duplicate ipipe module, where registration of the xrepr
345 352 implementation for Text is useless.
346 353
347 354 * IPython/Extensions/ipipe.py: Fix __xrepr__() implementation for ils.
348 355
349 356 * IPython/Extensions/ibrowse.py: Fix keymapping for the enter command.
350 357
351 358 2006-11-24 Ville Vainio <vivainio@gmail.com>
352 359
353 360 * Magic.py, manual_base.lyx: Kirill Smelkov patch:
354 361 try to use "cProfile" instead of the slower pure python
355 362 "profile"
356 363
357 364 2006-11-23 Ville Vainio <vivainio@gmail.com>
358 365
359 366 * manual_base.lyx: Kirill Smelkov patch: Fix wrong
360 367 Qt+IPython+Designer link in documentation.
361 368
362 369 * Extensions/ipy_pydb.py: R. Bernstein's patch for passing
363 370 correct Pdb object to %pydb.
364 371
365 372
366 373 2006-11-22 Walter Doerwald <walter@livinglogic.de>
367 374 * IPython/Extensions/astyle.py: Text needs it's own implemenation of the
368 375 generic xrepr(), otherwise the list implementation would kick in.
369 376
370 377 2006-11-21 Ville Vainio <vivainio@gmail.com>
371 378
372 379 * upgrade_dir.py: Now actually overwrites a nonmodified user file
373 380 with one from UserConfig.
374 381
375 382 * ipy_profile_sh.py: Add dummy "depth" to var_expand lambda,
376 383 it was missing which broke the sh profile.
377 384
378 385 * completer.py: file completer now uses explicit '/' instead
379 386 of os.path.join, expansion of 'foo' was broken on win32
380 387 if there was one directory with name 'foobar'.
381 388
382 389 * A bunch of patches from Kirill Smelkov:
383 390
384 391 * [patch 9/9] doc: point bug-tracker URL to IPythons trac-tickets.
385 392
386 393 * [patch 7/9] Implement %page -r (page in raw mode) -
387 394
388 395 * [patch 5/9] ScientificPython webpage has moved
389 396
390 397 * [patch 4/9] The manual mentions %ds, should be %dhist
391 398
392 399 * [patch 3/9] Kill old bits from %prun doc.
393 400
394 401 * [patch 1/9] Fix typos here and there.
395 402
396 403 2006-11-08 Ville Vainio <vivainio@gmail.com>
397 404
398 405 * completer.py (attr_matches): catch all exceptions raised
399 406 by eval of expr with dots.
400 407
401 408 2006-11-07 Fernando Perez <Fernando.Perez@colorado.edu>
402 409
403 410 * IPython/iplib.py (runsource): Prepend an 'if 1:' to the user
404 411 input if it starts with whitespace. This allows you to paste
405 412 indented input from any editor without manually having to type in
406 413 the 'if 1:', which is convenient when working interactively.
407 414 Slightly modifed version of a patch by Bo Peng
408 415 <bpeng-AT-rice.edu>.
409 416
410 417 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
411 418
412 419 * IPython/irunner.py (main): modified irunner so it automatically
413 420 recognizes the right runner to use based on the extension (.py for
414 421 python, .ipy for ipython and .sage for sage).
415 422
416 423 * IPython/iplib.py (InteractiveShell.ipconfig): new builtin, also
417 424 visible in ipapi as ip.config(), to programatically control the
418 425 internal rc object. There's an accompanying %config magic for
419 426 interactive use, which has been enhanced to match the
420 427 funtionality in ipconfig.
421 428
422 429 * IPython/Magic.py (magic_system_verbose): Change %system_verbose
423 430 so it's not just a toggle, it now takes an argument. Add support
424 431 for a customizable header when making system calls, as the new
425 432 system_header variable in the ipythonrc file.
426 433
427 434 2006-11-03 Walter Doerwald <walter@livinglogic.de>
428 435
429 436 * IPython/Extensions/ipipe.py: xrepr(), xiter() and xattrs() are now
430 437 generic functions (using Philip J. Eby's simplegeneric package).
431 438 This makes it possible to customize the display of third-party classes
432 439 without having to monkeypatch them. xiter() no longer supports a mode
433 440 argument and the XMode class has been removed. The same functionality can
434 441 be implemented via IterAttributeDescriptor and IterMethodDescriptor.
435 442 One consequence of the switch to generic functions is that xrepr() and
436 443 xattrs() implementation must define the default value for the mode
437 444 argument themselves and xattrs() implementations must return real
438 445 descriptors.
439 446
440 447 * IPython/external: This new subpackage will contain all third-party
441 448 packages that are bundled with IPython. (The first one is simplegeneric).
442 449
443 450 * IPython/Extensions/ipipe.py (ifile/ils): Readd output of the parent
444 451 directory which as been dropped in r1703.
445 452
446 453 * IPython/Extensions/ipipe.py (iless): Fixed.
447 454
448 455 * IPython/Extensions/ibrowse: Fixed sorting under Python 2.3.
449 456
450 457 2006-11-03 Fernando Perez <Fernando.Perez@colorado.edu>
451 458
452 459 * IPython/iplib.py (InteractiveShell.var_expand): fix stack
453 460 handling in variable expansion so that shells and magics recognize
454 461 function local scopes correctly. Bug reported by Brian.
455 462
456 463 * scripts/ipython: remove the very first entry in sys.path which
457 464 Python auto-inserts for scripts, so that sys.path under IPython is
458 465 as similar as possible to that under plain Python.
459 466
460 467 * IPython/completer.py (IPCompleter.file_matches): Fix
461 468 tab-completion so that quotes are not closed unless the completion
462 469 is unambiguous. After a request by Stefan. Minor cleanups in
463 470 ipy_stock_completers.
464 471
465 472 2006-11-02 Ville Vainio <vivainio@gmail.com>
466 473
467 474 * ipy_stock_completers.py: Add %run and %cd completers.
468 475
469 476 * completer.py: Try running custom completer for both
470 477 "foo" and "%foo" if the command is just "foo". Ignore case
471 478 when filtering possible completions.
472 479
473 480 * UserConfig/ipy_user_conf.py: install stock completers as default
474 481
475 482 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
476 483 simplified readline history save / restore through a wrapper
477 484 function
478 485
479 486
480 487 2006-10-31 Ville Vainio <vivainio@gmail.com>
481 488
482 489 * strdispatch.py, completer.py, ipy_stock_completers.py:
483 490 Allow str_key ("command") in completer hooks. Implement
484 491 trivial completer for 'import' (stdlib modules only). Rename
485 492 ipy_linux_package_managers.py to ipy_stock_completers.py.
486 493 SVN completer.
487 494
488 495 * Extensions/ledit.py: %magic line editor for easily and
489 496 incrementally manipulating lists of strings. The magic command
490 497 name is %led.
491 498
492 499 2006-10-30 Ville Vainio <vivainio@gmail.com>
493 500
494 501 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
495 502 Bernsteins's patches for pydb integration.
496 503 http://bashdb.sourceforge.net/pydb/
497 504
498 505 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
499 506 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
500 507 custom completer hook to allow the users to implement their own
501 508 completers. See ipy_linux_package_managers.py for example. The
502 509 hook name is 'complete_command'.
503 510
504 511 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
505 512
506 513 * IPython/UserConfig/ipythonrc-scipy: minor cleanups to remove old
507 514 Numeric leftovers.
508 515
509 516 * ipython.el (py-execute-region): apply Stefan's patch to fix
510 517 garbled results if the python shell hasn't been previously started.
511 518
512 519 * IPython/genutils.py (arg_split): moved to genutils, since it's a
513 520 pretty generic function and useful for other things.
514 521
515 522 * IPython/OInspect.py (getsource): Add customizable source
516 523 extractor. After a request/patch form W. Stein (SAGE).
517 524
518 525 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
519 526 window size to a more reasonable value from what pexpect does,
520 527 since their choice causes wrapping bugs with long input lines.
521 528
522 529 2006-10-28 Ville Vainio <vivainio@gmail.com>
523 530
524 531 * Magic.py (%run): Save and restore the readline history from
525 532 file around %run commands to prevent side effects from
526 533 %runned programs that might use readline (e.g. pydb).
527 534
528 535 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
529 536 invoking the pydb enhanced debugger.
530 537
531 538 2006-10-23 Walter Doerwald <walter@livinglogic.de>
532 539
533 540 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
534 541 call the base class method and propagate the return value to
535 542 ifile. This is now done by path itself.
536 543
537 544 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
538 545
539 546 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
540 547 api: set_crash_handler(), to expose the ability to change the
541 548 internal crash handler.
542 549
543 550 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
544 551 the various parameters of the crash handler so that apps using
545 552 IPython as their engine can customize crash handling. Ipmlemented
546 553 at the request of SAGE.
547 554
548 555 2006-10-14 Ville Vainio <vivainio@gmail.com>
549 556
550 557 * Magic.py, ipython.el: applied first "safe" part of Rocky
551 558 Bernstein's patch set for pydb integration.
552 559
553 560 * Magic.py (%unalias, %alias): %store'd aliases can now be
554 561 removed with '%unalias'. %alias w/o args now shows most
555 562 interesting (stored / manually defined) aliases last
556 563 where they catch the eye w/o scrolling.
557 564
558 565 * Magic.py (%rehashx), ext_rehashdir.py: files with
559 566 'py' extension are always considered executable, even
560 567 when not in PATHEXT environment variable.
561 568
562 569 2006-10-12 Ville Vainio <vivainio@gmail.com>
563 570
564 571 * jobctrl.py: Add new "jobctrl" extension for spawning background
565 572 processes with "&find /". 'import jobctrl' to try it out. Requires
566 573 'subprocess' module, standard in python 2.4+.
567 574
568 575 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
569 576 so if foo -> bar and bar -> baz, then foo -> baz.
570 577
571 578 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
572 579
573 580 * IPython/Magic.py (Magic.parse_options): add a new posix option
574 581 to allow parsing of input args in magics that doesn't strip quotes
575 582 (if posix=False). This also closes %timeit bug reported by
576 583 Stefan.
577 584
578 585 2006-10-03 Ville Vainio <vivainio@gmail.com>
579 586
580 587 * iplib.py (raw_input, interact): Return ValueError catching for
581 588 raw_input. Fixes infinite loop for sys.stdin.close() or
582 589 sys.stdout.close().
583 590
584 591 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
585 592
586 593 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
587 594 to help in handling doctests. irunner is now pretty useful for
588 595 running standalone scripts and simulate a full interactive session
589 596 in a format that can be then pasted as a doctest.
590 597
591 598 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
592 599 on top of the default (useless) ones. This also fixes the nasty
593 600 way in which 2.5's Quitter() exits (reverted [1785]).
594 601
595 602 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
596 603 2.5.
597 604
598 605 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
599 606 color scheme is updated as well when color scheme is changed
600 607 interactively.
601 608
602 609 2006-09-27 Ville Vainio <vivainio@gmail.com>
603 610
604 611 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
605 612 infinite loop and just exit. It's a hack, but will do for a while.
606 613
607 614 2006-08-25 Walter Doerwald <walter@livinglogic.de>
608 615
609 616 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
610 617 the constructor, this makes it possible to get a list of only directories
611 618 or only files.
612 619
613 620 2006-08-12 Ville Vainio <vivainio@gmail.com>
614 621
615 622 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
616 623 they broke unittest
617 624
618 625 2006-08-11 Ville Vainio <vivainio@gmail.com>
619 626
620 627 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
621 628 by resolving issue properly, i.e. by inheriting FakeModule
622 629 from types.ModuleType. Pickling ipython interactive data
623 630 should still work as usual (testing appreciated).
624 631
625 632 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
626 633
627 634 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
628 635 running under python 2.3 with code from 2.4 to fix a bug with
629 636 help(). Reported by the Debian maintainers, Norbert Tretkowski
630 637 <norbert-AT-tretkowski.de> and Alexandre Fayolle
631 638 <afayolle-AT-debian.org>.
632 639
633 640 2006-08-04 Walter Doerwald <walter@livinglogic.de>
634 641
635 642 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
636 643 (which was displaying "quit" twice).
637 644
638 645 2006-07-28 Walter Doerwald <walter@livinglogic.de>
639 646
640 647 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
641 648 the mode argument).
642 649
643 650 2006-07-27 Walter Doerwald <walter@livinglogic.de>
644 651
645 652 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
646 653 not running under IPython.
647 654
648 655 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
649 656 and make it iterable (iterating over the attribute itself). Add two new
650 657 magic strings for __xattrs__(): If the string starts with "-", the attribute
651 658 will not be displayed in ibrowse's detail view (but it can still be
652 659 iterated over). This makes it possible to add attributes that are large
653 660 lists or generator methods to the detail view. Replace magic attribute names
654 661 and _attrname() and _getattr() with "descriptors": For each type of magic
655 662 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
656 663 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
657 664 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
658 665 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
659 666 are still supported.
660 667
661 668 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
662 669 fails in ibrowse.fetch(), the exception object is added as the last item
663 670 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
664 671 a generator throws an exception midway through execution.
665 672
666 673 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
667 674 encoding into methods.
668 675
669 676 2006-07-26 Ville Vainio <vivainio@gmail.com>
670 677
671 678 * iplib.py: history now stores multiline input as single
672 679 history entries. Patch by Jorgen Cederlof.
673 680
674 681 2006-07-18 Walter Doerwald <walter@livinglogic.de>
675 682
676 683 * IPython/Extensions/ibrowse.py: Make cursor visible over
677 684 non existing attributes.
678 685
679 686 2006-07-14 Walter Doerwald <walter@livinglogic.de>
680 687
681 688 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
682 689 error output of the running command doesn't mess up the screen.
683 690
684 691 2006-07-13 Walter Doerwald <walter@livinglogic.de>
685 692
686 693 * IPython/Extensions/ipipe.py (isort): Make isort usable without
687 694 argument. This sorts the items themselves.
688 695
689 696 2006-07-12 Walter Doerwald <walter@livinglogic.de>
690 697
691 698 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
692 699 Compile expression strings into code objects. This should speed
693 700 up ifilter and friends somewhat.
694 701
695 702 2006-07-08 Ville Vainio <vivainio@gmail.com>
696 703
697 704 * Magic.py: %cpaste now strips > from the beginning of lines
698 705 to ease pasting quoted code from emails. Contributed by
699 706 Stefan van der Walt.
700 707
701 708 2006-06-29 Ville Vainio <vivainio@gmail.com>
702 709
703 710 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
704 711 mode, patch contributed by Darren Dale. NEEDS TESTING!
705 712
706 713 2006-06-28 Walter Doerwald <walter@livinglogic.de>
707 714
708 715 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
709 716 a blue background. Fix fetching new display rows when the browser
710 717 scrolls more than a screenful (e.g. by using the goto command).
711 718
712 719 2006-06-27 Ville Vainio <vivainio@gmail.com>
713 720
714 721 * Magic.py (_inspect, _ofind) Apply David Huard's
715 722 patch for displaying the correct docstring for 'property'
716 723 attributes.
717 724
718 725 2006-06-23 Walter Doerwald <walter@livinglogic.de>
719 726
720 727 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
721 728 commands into the methods implementing them.
722 729
723 730 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
724 731
725 732 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
726 733 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
727 734 autoindent support was authored by Jin Liu.
728 735
729 736 2006-06-22 Walter Doerwald <walter@livinglogic.de>
730 737
731 738 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
732 739 for keymaps with a custom class that simplifies handling.
733 740
734 741 2006-06-19 Walter Doerwald <walter@livinglogic.de>
735 742
736 743 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
737 744 resizing. This requires Python 2.5 to work.
738 745
739 746 2006-06-16 Walter Doerwald <walter@livinglogic.de>
740 747
741 748 * IPython/Extensions/ibrowse.py: Add two new commands to
742 749 ibrowse: "hideattr" (mapped to "h") hides the attribute under
743 750 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
744 751 attributes again. Remapped the help command to "?". Display
745 752 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
746 753 as keys for the "home" and "end" commands. Add three new commands
747 754 to the input mode for "find" and friends: "delend" (CTRL-K)
748 755 deletes to the end of line. "incsearchup" searches upwards in the
749 756 command history for an input that starts with the text before the cursor.
750 757 "incsearchdown" does the same downwards. Removed a bogus mapping of
751 758 the x key to "delete".
752 759
753 760 2006-06-15 Ville Vainio <vivainio@gmail.com>
754 761
755 762 * iplib.py, hooks.py: Added new generate_prompt hook that can be
756 763 used to create prompts dynamically, instead of the "old" way of
757 764 assigning "magic" strings to prompt_in1 and prompt_in2. The old
758 765 way still works (it's invoked by the default hook), of course.
759 766
760 767 * Prompts.py: added generate_output_prompt hook for altering output
761 768 prompt
762 769
763 770 * Release.py: Changed version string to 0.7.3.svn.
764 771
765 772 2006-06-15 Walter Doerwald <walter@livinglogic.de>
766 773
767 774 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
768 775 the call to fetch() always tries to fetch enough data for at least one
769 776 full screen. This makes it possible to simply call moveto(0,0,True) in
770 777 the constructor. Fix typos and removed the obsolete goto attribute.
771 778
772 779 2006-06-12 Ville Vainio <vivainio@gmail.com>
773 780
774 781 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
775 782 allowing $variable interpolation within multiline statements,
776 783 though so far only with "sh" profile for a testing period.
777 784 The patch also enables splitting long commands with \ but it
778 785 doesn't work properly yet.
779 786
780 787 2006-06-12 Walter Doerwald <walter@livinglogic.de>
781 788
782 789 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
783 790 input history and the position of the cursor in the input history for
784 791 the find, findbackwards and goto command.
785 792
786 793 2006-06-10 Walter Doerwald <walter@livinglogic.de>
787 794
788 795 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
789 796 implements the basic functionality of browser commands that require
790 797 input. Reimplement the goto, find and findbackwards commands as
791 798 subclasses of _CommandInput. Add an input history and keymaps to those
792 799 commands. Add "\r" as a keyboard shortcut for the enterdefault and
793 800 execute commands.
794 801
795 802 2006-06-07 Ville Vainio <vivainio@gmail.com>
796 803
797 804 * iplib.py: ipython mybatch.ipy exits ipython immediately after
798 805 running the batch files instead of leaving the session open.
799 806
800 807 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
801 808
802 809 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
803 810 the original fix was incomplete. Patch submitted by W. Maier.
804 811
805 812 2006-06-07 Ville Vainio <vivainio@gmail.com>
806 813
807 814 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
808 815 Confirmation prompts can be supressed by 'quiet' option.
809 816 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
810 817
811 818 2006-06-06 *** Released version 0.7.2
812 819
813 820 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
814 821
815 822 * IPython/Release.py (version): Made 0.7.2 final for release.
816 823 Repo tagged and release cut.
817 824
818 825 2006-06-05 Ville Vainio <vivainio@gmail.com>
819 826
820 827 * Magic.py (magic_rehashx): Honor no_alias list earlier in
821 828 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
822 829
823 830 * upgrade_dir.py: try import 'path' module a bit harder
824 831 (for %upgrade)
825 832
826 833 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
827 834
828 835 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
829 836 instead of looping 20 times.
830 837
831 838 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
832 839 correctly at initialization time. Bug reported by Krishna Mohan
833 840 Gundu <gkmohan-AT-gmail.com> on the user list.
834 841
835 842 * IPython/Release.py (version): Mark 0.7.2 version to start
836 843 testing for release on 06/06.
837 844
838 845 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
839 846
840 847 * scripts/irunner: thin script interface so users don't have to
841 848 find the module and call it as an executable, since modules rarely
842 849 live in people's PATH.
843 850
844 851 * IPython/irunner.py (InteractiveRunner.__init__): added
845 852 delaybeforesend attribute to control delays with newer versions of
846 853 pexpect. Thanks to detailed help from pexpect's author, Noah
847 854 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
848 855 correctly (it works in NoColor mode).
849 856
850 857 * IPython/iplib.py (handle_normal): fix nasty crash reported on
851 858 SAGE list, from improper log() calls.
852 859
853 860 2006-05-31 Ville Vainio <vivainio@gmail.com>
854 861
855 862 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
856 863 with args in parens to work correctly with dirs that have spaces.
857 864
858 865 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
859 866
860 867 * IPython/Logger.py (Logger.logstart): add option to log raw input
861 868 instead of the processed one. A -r flag was added to the
862 869 %logstart magic used for controlling logging.
863 870
864 871 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
865 872
866 873 * IPython/iplib.py (InteractiveShell.__init__): add check for the
867 874 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
868 875 recognize the option. After a bug report by Will Maier. This
869 876 closes #64 (will do it after confirmation from W. Maier).
870 877
871 878 * IPython/irunner.py: New module to run scripts as if manually
872 879 typed into an interactive environment, based on pexpect. After a
873 880 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
874 881 ipython-user list. Simple unittests in the tests/ directory.
875 882
876 883 * tools/release: add Will Maier, OpenBSD port maintainer, to
877 884 recepients list. We are now officially part of the OpenBSD ports:
878 885 http://www.openbsd.org/ports.html ! Many thanks to Will for the
879 886 work.
880 887
881 888 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
882 889
883 890 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
884 891 so that it doesn't break tkinter apps.
885 892
886 893 * IPython/iplib.py (_prefilter): fix bug where aliases would
887 894 shadow variables when autocall was fully off. Reported by SAGE
888 895 author William Stein.
889 896
890 897 * IPython/OInspect.py (Inspector.__init__): add a flag to control
891 898 at what detail level strings are computed when foo? is requested.
892 899 This allows users to ask for example that the string form of an
893 900 object is only computed when foo?? is called, or even never, by
894 901 setting the object_info_string_level >= 2 in the configuration
895 902 file. This new option has been added and documented. After a
896 903 request by SAGE to be able to control the printing of very large
897 904 objects more easily.
898 905
899 906 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
900 907
901 908 * IPython/ipmaker.py (make_IPython): remove the ipython call path
902 909 from sys.argv, to be 100% consistent with how Python itself works
903 910 (as seen for example with python -i file.py). After a bug report
904 911 by Jeffrey Collins.
905 912
906 913 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
907 914 nasty bug which was preventing custom namespaces with -pylab,
908 915 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
909 916 compatibility (long gone from mpl).
910 917
911 918 * IPython/ipapi.py (make_session): name change: create->make. We
912 919 use make in other places (ipmaker,...), it's shorter and easier to
913 920 type and say, etc. I'm trying to clean things before 0.7.2 so
914 921 that I can keep things stable wrt to ipapi in the chainsaw branch.
915 922
916 923 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
917 924 python-mode recognizes our debugger mode. Add support for
918 925 autoindent inside (X)emacs. After a patch sent in by Jin Liu
919 926 <m.liu.jin-AT-gmail.com> originally written by
920 927 doxgen-AT-newsmth.net (with minor modifications for xemacs
921 928 compatibility)
922 929
923 930 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
924 931 tracebacks when walking the stack so that the stack tracking system
925 932 in emacs' python-mode can identify the frames correctly.
926 933
927 934 * IPython/ipmaker.py (make_IPython): make the internal (and
928 935 default config) autoedit_syntax value false by default. Too many
929 936 users have complained to me (both on and off-list) about problems
930 937 with this option being on by default, so I'm making it default to
931 938 off. It can still be enabled by anyone via the usual mechanisms.
932 939
933 940 * IPython/completer.py (Completer.attr_matches): add support for
934 941 PyCrust-style _getAttributeNames magic method. Patch contributed
935 942 by <mscott-AT-goldenspud.com>. Closes #50.
936 943
937 944 * IPython/iplib.py (InteractiveShell.__init__): remove the
938 945 deletion of exit/quit from __builtin__, which can break
939 946 third-party tools like the Zope debugging console. The
940 947 %exit/%quit magics remain. In general, it's probably a good idea
941 948 not to delete anything from __builtin__, since we never know what
942 949 that will break. In any case, python now (for 2.5) will support
943 950 'real' exit/quit, so this issue is moot. Closes #55.
944 951
945 952 * IPython/genutils.py (with_obj): rename the 'with' function to
946 953 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
947 954 becomes a language keyword. Closes #53.
948 955
949 956 * IPython/FakeModule.py (FakeModule.__init__): add a proper
950 957 __file__ attribute to this so it fools more things into thinking
951 958 it is a real module. Closes #59.
952 959
953 960 * IPython/Magic.py (magic_edit): add -n option to open the editor
954 961 at a specific line number. After a patch by Stefan van der Walt.
955 962
956 963 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
957 964
958 965 * IPython/iplib.py (edit_syntax_error): fix crash when for some
959 966 reason the file could not be opened. After automatic crash
960 967 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
961 968 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
962 969 (_should_recompile): Don't fire editor if using %bg, since there
963 970 is no file in the first place. From the same report as above.
964 971 (raw_input): protect against faulty third-party prefilters. After
965 972 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
966 973 while running under SAGE.
967 974
968 975 2006-05-23 Ville Vainio <vivainio@gmail.com>
969 976
970 977 * ipapi.py: Stripped down ip.to_user_ns() to work only as
971 978 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
972 979 now returns None (again), unless dummy is specifically allowed by
973 980 ipapi.get(allow_dummy=True).
974 981
975 982 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
976 983
977 984 * IPython: remove all 2.2-compatibility objects and hacks from
978 985 everywhere, since we only support 2.3 at this point. Docs
979 986 updated.
980 987
981 988 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
982 989 Anything requiring extra validation can be turned into a Python
983 990 property in the future. I used a property for the db one b/c
984 991 there was a nasty circularity problem with the initialization
985 992 order, which right now I don't have time to clean up.
986 993
987 994 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
988 995 another locking bug reported by Jorgen. I'm not 100% sure though,
989 996 so more testing is needed...
990 997
991 998 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
992 999
993 1000 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
994 1001 local variables from any routine in user code (typically executed
995 1002 with %run) directly into the interactive namespace. Very useful
996 1003 when doing complex debugging.
997 1004 (IPythonNotRunning): Changed the default None object to a dummy
998 1005 whose attributes can be queried as well as called without
999 1006 exploding, to ease writing code which works transparently both in
1000 1007 and out of ipython and uses some of this API.
1001 1008
1002 1009 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
1003 1010
1004 1011 * IPython/hooks.py (result_display): Fix the fact that our display
1005 1012 hook was using str() instead of repr(), as the default python
1006 1013 console does. This had gone unnoticed b/c it only happened if
1007 1014 %Pprint was off, but the inconsistency was there.
1008 1015
1009 1016 2006-05-15 Ville Vainio <vivainio@gmail.com>
1010 1017
1011 1018 * Oinspect.py: Only show docstring for nonexisting/binary files
1012 1019 when doing object??, closing ticket #62
1013 1020
1014 1021 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
1015 1022
1016 1023 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
1017 1024 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
1018 1025 was being released in a routine which hadn't checked if it had
1019 1026 been the one to acquire it.
1020 1027
1021 1028 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
1022 1029
1023 1030 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
1024 1031
1025 1032 2006-04-11 Ville Vainio <vivainio@gmail.com>
1026 1033
1027 1034 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
1028 1035 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
1029 1036 prefilters, allowing stuff like magics and aliases in the file.
1030 1037
1031 1038 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
1032 1039 added. Supported now are "%clear in" and "%clear out" (clear input and
1033 1040 output history, respectively). Also fixed CachedOutput.flush to
1034 1041 properly flush the output cache.
1035 1042
1036 1043 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
1037 1044 half-success (and fail explicitly).
1038 1045
1039 1046 2006-03-28 Ville Vainio <vivainio@gmail.com>
1040 1047
1041 1048 * iplib.py: Fix quoting of aliases so that only argless ones
1042 1049 are quoted
1043 1050
1044 1051 2006-03-28 Ville Vainio <vivainio@gmail.com>
1045 1052
1046 1053 * iplib.py: Quote aliases with spaces in the name.
1047 1054 "c:\program files\blah\bin" is now legal alias target.
1048 1055
1049 1056 * ext_rehashdir.py: Space no longer allowed as arg
1050 1057 separator, since space is legal in path names.
1051 1058
1052 1059 2006-03-16 Ville Vainio <vivainio@gmail.com>
1053 1060
1054 1061 * upgrade_dir.py: Take path.py from Extensions, correcting
1055 1062 %upgrade magic
1056 1063
1057 1064 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
1058 1065
1059 1066 * hooks.py: Only enclose editor binary in quotes if legal and
1060 1067 necessary (space in the name, and is an existing file). Fixes a bug
1061 1068 reported by Zachary Pincus.
1062 1069
1063 1070 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
1064 1071
1065 1072 * Manual: thanks to a tip on proper color handling for Emacs, by
1066 1073 Eric J Haywiser <ejh1-AT-MIT.EDU>.
1067 1074
1068 1075 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
1069 1076 by applying the provided patch. Thanks to Liu Jin
1070 1077 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
1071 1078 XEmacs/Linux, I'm trusting the submitter that it actually helps
1072 1079 under win32/GNU Emacs. Will revisit if any problems are reported.
1073 1080
1074 1081 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1075 1082
1076 1083 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
1077 1084 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
1078 1085
1079 1086 2006-03-12 Ville Vainio <vivainio@gmail.com>
1080 1087
1081 1088 * Magic.py (magic_timeit): Added %timeit magic, contributed by
1082 1089 Torsten Marek.
1083 1090
1084 1091 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
1085 1092
1086 1093 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
1087 1094 line ranges works again.
1088 1095
1089 1096 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
1090 1097
1091 1098 * IPython/iplib.py (showtraceback): add back sys.last_traceback
1092 1099 and friends, after a discussion with Zach Pincus on ipython-user.
1093 1100 I'm not 100% sure, but after thinking about it quite a bit, it may
1094 1101 be OK. Testing with the multithreaded shells didn't reveal any
1095 1102 problems, but let's keep an eye out.
1096 1103
1097 1104 In the process, I fixed a few things which were calling
1098 1105 self.InteractiveTB() directly (like safe_execfile), which is a
1099 1106 mistake: ALL exception reporting should be done by calling
1100 1107 self.showtraceback(), which handles state and tab-completion and
1101 1108 more.
1102 1109
1103 1110 2006-03-01 Ville Vainio <vivainio@gmail.com>
1104 1111
1105 1112 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
1106 1113 To use, do "from ipipe import *".
1107 1114
1108 1115 2006-02-24 Ville Vainio <vivainio@gmail.com>
1109 1116
1110 1117 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
1111 1118 "cleanly" and safely than the older upgrade mechanism.
1112 1119
1113 1120 2006-02-21 Ville Vainio <vivainio@gmail.com>
1114 1121
1115 1122 * Magic.py: %save works again.
1116 1123
1117 1124 2006-02-15 Ville Vainio <vivainio@gmail.com>
1118 1125
1119 1126 * Magic.py: %Pprint works again
1120 1127
1121 1128 * Extensions/ipy_sane_defaults.py: Provide everything provided
1122 1129 in default ipythonrc, to make it possible to have a completely empty
1123 1130 ipythonrc (and thus completely rc-file free configuration)
1124 1131
1125 1132 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
1126 1133
1127 1134 * IPython/hooks.py (editor): quote the call to the editor command,
1128 1135 to allow commands with spaces in them. Problem noted by watching
1129 1136 Ian Oswald's video about textpad under win32 at
1130 1137 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
1131 1138
1132 1139 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
1133 1140 describing magics (we haven't used @ for a loong time).
1134 1141
1135 1142 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
1136 1143 contributed by marienz to close
1137 1144 http://www.scipy.net/roundup/ipython/issue53.
1138 1145
1139 1146 2006-02-10 Ville Vainio <vivainio@gmail.com>
1140 1147
1141 1148 * genutils.py: getoutput now works in win32 too
1142 1149
1143 1150 * completer.py: alias and magic completion only invoked
1144 1151 at the first "item" in the line, to avoid "cd %store"
1145 1152 nonsense.
1146 1153
1147 1154 2006-02-09 Ville Vainio <vivainio@gmail.com>
1148 1155
1149 1156 * test/*: Added a unit testing framework (finally).
1150 1157 '%run runtests.py' to run test_*.
1151 1158
1152 1159 * ipapi.py: Exposed runlines and set_custom_exc
1153 1160
1154 1161 2006-02-07 Ville Vainio <vivainio@gmail.com>
1155 1162
1156 1163 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
1157 1164 instead use "f(1 2)" as before.
1158 1165
1159 1166 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
1160 1167
1161 1168 * IPython/demo.py (IPythonDemo): Add new classes to the demo
1162 1169 facilities, for demos processed by the IPython input filter
1163 1170 (IPythonDemo), and for running a script one-line-at-a-time as a
1164 1171 demo, both for pure Python (LineDemo) and for IPython-processed
1165 1172 input (IPythonLineDemo). After a request by Dave Kohel, from the
1166 1173 SAGE team.
1167 1174 (Demo.edit): added an edit() method to the demo objects, to edit
1168 1175 the in-memory copy of the last executed block.
1169 1176
1170 1177 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
1171 1178 processing to %edit, %macro and %save. These commands can now be
1172 1179 invoked on the unprocessed input as it was typed by the user
1173 1180 (without any prefilters applied). After requests by the SAGE team
1174 1181 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
1175 1182
1176 1183 2006-02-01 Ville Vainio <vivainio@gmail.com>
1177 1184
1178 1185 * setup.py, eggsetup.py: easy_install ipython==dev works
1179 1186 correctly now (on Linux)
1180 1187
1181 1188 * ipy_user_conf,ipmaker: user config changes, removed spurious
1182 1189 warnings
1183 1190
1184 1191 * iplib: if rc.banner is string, use it as is.
1185 1192
1186 1193 * Magic: %pycat accepts a string argument and pages it's contents.
1187 1194
1188 1195
1189 1196 2006-01-30 Ville Vainio <vivainio@gmail.com>
1190 1197
1191 1198 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
1192 1199 Now %store and bookmarks work through PickleShare, meaning that
1193 1200 concurrent access is possible and all ipython sessions see the
1194 1201 same database situation all the time, instead of snapshot of
1195 1202 the situation when the session was started. Hence, %bookmark
1196 1203 results are immediately accessible from othes sessions. The database
1197 1204 is also available for use by user extensions. See:
1198 1205 http://www.python.org/pypi/pickleshare
1199 1206
1200 1207 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
1201 1208
1202 1209 * aliases can now be %store'd
1203 1210
1204 1211 * path.py moved to Extensions so that pickleshare does not need
1205 1212 IPython-specific import. Extensions added to pythonpath right
1206 1213 at __init__.
1207 1214
1208 1215 * iplib.py: ipalias deprecated/redundant; aliases are converted and
1209 1216 called with _ip.system and the pre-transformed command string.
1210 1217
1211 1218 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
1212 1219
1213 1220 * IPython/iplib.py (interact): Fix that we were not catching
1214 1221 KeyboardInterrupt exceptions properly. I'm not quite sure why the
1215 1222 logic here had to change, but it's fixed now.
1216 1223
1217 1224 2006-01-29 Ville Vainio <vivainio@gmail.com>
1218 1225
1219 1226 * iplib.py: Try to import pyreadline on Windows.
1220 1227
1221 1228 2006-01-27 Ville Vainio <vivainio@gmail.com>
1222 1229
1223 1230 * iplib.py: Expose ipapi as _ip in builtin namespace.
1224 1231 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
1225 1232 and ip_set_hook (-> _ip.set_hook) redundant. % and !
1226 1233 syntax now produce _ip.* variant of the commands.
1227 1234
1228 1235 * "_ip.options().autoedit_syntax = 2" automatically throws
1229 1236 user to editor for syntax error correction without prompting.
1230 1237
1231 1238 2006-01-27 Ville Vainio <vivainio@gmail.com>
1232 1239
1233 1240 * ipmaker.py: Give "realistic" sys.argv for scripts (without
1234 1241 'ipython' at argv[0]) executed through command line.
1235 1242 NOTE: this DEPRECATES calling ipython with multiple scripts
1236 1243 ("ipython a.py b.py c.py")
1237 1244
1238 1245 * iplib.py, hooks.py: Added configurable input prefilter,
1239 1246 named 'input_prefilter'. See ext_rescapture.py for example
1240 1247 usage.
1241 1248
1242 1249 * ext_rescapture.py, Magic.py: Better system command output capture
1243 1250 through 'var = !ls' (deprecates user-visible %sc). Same notation
1244 1251 applies for magics, 'var = %alias' assigns alias list to var.
1245 1252
1246 1253 * ipapi.py: added meta() for accessing extension-usable data store.
1247 1254
1248 1255 * iplib.py: added InteractiveShell.getapi(). New magics should be
1249 1256 written doing self.getapi() instead of using the shell directly.
1250 1257
1251 1258 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
1252 1259 %store foo >> ~/myfoo.txt to store variables to files (in clean
1253 1260 textual form, not a restorable pickle).
1254 1261
1255 1262 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
1256 1263
1257 1264 * usage.py, Magic.py: added %quickref
1258 1265
1259 1266 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
1260 1267
1261 1268 * GetoptErrors when invoking magics etc. with wrong args
1262 1269 are now more helpful:
1263 1270 GetoptError: option -l not recognized (allowed: "qb" )
1264 1271
1265 1272 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
1266 1273
1267 1274 * IPython/demo.py (Demo.show): Flush stdout after each block, so
1268 1275 computationally intensive blocks don't appear to stall the demo.
1269 1276
1270 1277 2006-01-24 Ville Vainio <vivainio@gmail.com>
1271 1278
1272 1279 * iplib.py, hooks.py: 'result_display' hook can return a non-None
1273 1280 value to manipulate resulting history entry.
1274 1281
1275 1282 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
1276 1283 to instance methods of IPApi class, to make extending an embedded
1277 1284 IPython feasible. See ext_rehashdir.py for example usage.
1278 1285
1279 1286 * Merged 1071-1076 from branches/0.7.1
1280 1287
1281 1288
1282 1289 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
1283 1290
1284 1291 * tools/release (daystamp): Fix build tools to use the new
1285 1292 eggsetup.py script to build lightweight eggs.
1286 1293
1287 1294 * Applied changesets 1062 and 1064 before 0.7.1 release.
1288 1295
1289 1296 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
1290 1297 see the raw input history (without conversions like %ls ->
1291 1298 ipmagic("ls")). After a request from W. Stein, SAGE
1292 1299 (http://modular.ucsd.edu/sage) developer. This information is
1293 1300 stored in the input_hist_raw attribute of the IPython instance, so
1294 1301 developers can access it if needed (it's an InputList instance).
1295 1302
1296 1303 * Versionstring = 0.7.2.svn
1297 1304
1298 1305 * eggsetup.py: A separate script for constructing eggs, creates
1299 1306 proper launch scripts even on Windows (an .exe file in
1300 1307 \python24\scripts).
1301 1308
1302 1309 * ipapi.py: launch_new_instance, launch entry point needed for the
1303 1310 egg.
1304 1311
1305 1312 2006-01-23 Ville Vainio <vivainio@gmail.com>
1306 1313
1307 1314 * Added %cpaste magic for pasting python code
1308 1315
1309 1316 2006-01-22 Ville Vainio <vivainio@gmail.com>
1310 1317
1311 1318 * Merge from branches/0.7.1 into trunk, revs 1052-1057
1312 1319
1313 1320 * Versionstring = 0.7.2.svn
1314 1321
1315 1322 * eggsetup.py: A separate script for constructing eggs, creates
1316 1323 proper launch scripts even on Windows (an .exe file in
1317 1324 \python24\scripts).
1318 1325
1319 1326 * ipapi.py: launch_new_instance, launch entry point needed for the
1320 1327 egg.
1321 1328
1322 1329 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
1323 1330
1324 1331 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
1325 1332 %pfile foo would print the file for foo even if it was a binary.
1326 1333 Now, extensions '.so' and '.dll' are skipped.
1327 1334
1328 1335 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
1329 1336 bug, where macros would fail in all threaded modes. I'm not 100%
1330 1337 sure, so I'm going to put out an rc instead of making a release
1331 1338 today, and wait for feedback for at least a few days.
1332 1339
1333 1340 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
1334 1341 it...) the handling of pasting external code with autoindent on.
1335 1342 To get out of a multiline input, the rule will appear for most
1336 1343 users unchanged: two blank lines or change the indent level
1337 1344 proposed by IPython. But there is a twist now: you can
1338 1345 add/subtract only *one or two spaces*. If you add/subtract three
1339 1346 or more (unless you completely delete the line), IPython will
1340 1347 accept that line, and you'll need to enter a second one of pure
1341 1348 whitespace. I know it sounds complicated, but I can't find a
1342 1349 different solution that covers all the cases, with the right
1343 1350 heuristics. Hopefully in actual use, nobody will really notice
1344 1351 all these strange rules and things will 'just work'.
1345 1352
1346 1353 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
1347 1354
1348 1355 * IPython/iplib.py (interact): catch exceptions which can be
1349 1356 triggered asynchronously by signal handlers. Thanks to an
1350 1357 automatic crash report, submitted by Colin Kingsley
1351 1358 <tercel-AT-gentoo.org>.
1352 1359
1353 1360 2006-01-20 Ville Vainio <vivainio@gmail.com>
1354 1361
1355 1362 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
1356 1363 (%rehashdir, very useful, try it out) of how to extend ipython
1357 1364 with new magics. Also added Extensions dir to pythonpath to make
1358 1365 importing extensions easy.
1359 1366
1360 1367 * %store now complains when trying to store interactively declared
1361 1368 classes / instances of those classes.
1362 1369
1363 1370 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
1364 1371 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
1365 1372 if they exist, and ipy_user_conf.py with some defaults is created for
1366 1373 the user.
1367 1374
1368 1375 * Startup rehashing done by the config file, not InterpreterExec.
1369 1376 This means system commands are available even without selecting the
1370 1377 pysh profile. It's the sensible default after all.
1371 1378
1372 1379 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
1373 1380
1374 1381 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
1375 1382 multiline code with autoindent on working. But I am really not
1376 1383 sure, so this needs more testing. Will commit a debug-enabled
1377 1384 version for now, while I test it some more, so that Ville and
1378 1385 others may also catch any problems. Also made
1379 1386 self.indent_current_str() a method, to ensure that there's no
1380 1387 chance of the indent space count and the corresponding string
1381 1388 falling out of sync. All code needing the string should just call
1382 1389 the method.
1383 1390
1384 1391 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
1385 1392
1386 1393 * IPython/Magic.py (magic_edit): fix check for when users don't
1387 1394 save their output files, the try/except was in the wrong section.
1388 1395
1389 1396 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
1390 1397
1391 1398 * IPython/Magic.py (magic_run): fix __file__ global missing from
1392 1399 script's namespace when executed via %run. After a report by
1393 1400 Vivian.
1394 1401
1395 1402 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
1396 1403 when using python 2.4. The parent constructor changed in 2.4, and
1397 1404 we need to track it directly (we can't call it, as it messes up
1398 1405 readline and tab-completion inside our pdb would stop working).
1399 1406 After a bug report by R. Bernstein <rocky-AT-panix.com>.
1400 1407
1401 1408 2006-01-16 Ville Vainio <vivainio@gmail.com>
1402 1409
1403 1410 * Ipython/magic.py: Reverted back to old %edit functionality
1404 1411 that returns file contents on exit.
1405 1412
1406 1413 * IPython/path.py: Added Jason Orendorff's "path" module to
1407 1414 IPython tree, http://www.jorendorff.com/articles/python/path/.
1408 1415 You can get path objects conveniently through %sc, and !!, e.g.:
1409 1416 sc files=ls
1410 1417 for p in files.paths: # or files.p
1411 1418 print p,p.mtime
1412 1419
1413 1420 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
1414 1421 now work again without considering the exclusion regexp -
1415 1422 hence, things like ',foo my/path' turn to 'foo("my/path")'
1416 1423 instead of syntax error.
1417 1424
1418 1425
1419 1426 2006-01-14 Ville Vainio <vivainio@gmail.com>
1420 1427
1421 1428 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
1422 1429 ipapi decorators for python 2.4 users, options() provides access to rc
1423 1430 data.
1424 1431
1425 1432 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
1426 1433 as path separators (even on Linux ;-). Space character after
1427 1434 backslash (as yielded by tab completer) is still space;
1428 1435 "%cd long\ name" works as expected.
1429 1436
1430 1437 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
1431 1438 as "chain of command", with priority. API stays the same,
1432 1439 TryNext exception raised by a hook function signals that
1433 1440 current hook failed and next hook should try handling it, as
1434 1441 suggested by Walter Dörwald <walter@livinglogic.de>. Walter also
1435 1442 requested configurable display hook, which is now implemented.
1436 1443
1437 1444 2006-01-13 Ville Vainio <vivainio@gmail.com>
1438 1445
1439 1446 * IPython/platutils*.py: platform specific utility functions,
1440 1447 so far only set_term_title is implemented (change terminal
1441 1448 label in windowing systems). %cd now changes the title to
1442 1449 current dir.
1443 1450
1444 1451 * IPython/Release.py: Added myself to "authors" list,
1445 1452 had to create new files.
1446 1453
1447 1454 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
1448 1455 shell escape; not a known bug but had potential to be one in the
1449 1456 future.
1450 1457
1451 1458 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
1452 1459 extension API for IPython! See the module for usage example. Fix
1453 1460 OInspect for docstring-less magic functions.
1454 1461
1455 1462
1456 1463 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
1457 1464
1458 1465 * IPython/iplib.py (raw_input): temporarily deactivate all
1459 1466 attempts at allowing pasting of code with autoindent on. It
1460 1467 introduced bugs (reported by Prabhu) and I can't seem to find a
1461 1468 robust combination which works in all cases. Will have to revisit
1462 1469 later.
1463 1470
1464 1471 * IPython/genutils.py: remove isspace() function. We've dropped
1465 1472 2.2 compatibility, so it's OK to use the string method.
1466 1473
1467 1474 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1468 1475
1469 1476 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1470 1477 matching what NOT to autocall on, to include all python binary
1471 1478 operators (including things like 'and', 'or', 'is' and 'in').
1472 1479 Prompted by a bug report on 'foo & bar', but I realized we had
1473 1480 many more potential bug cases with other operators. The regexp is
1474 1481 self.re_exclude_auto, it's fairly commented.
1475 1482
1476 1483 2006-01-12 Ville Vainio <vivainio@gmail.com>
1477 1484
1478 1485 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1479 1486 Prettified and hardened string/backslash quoting with ipsystem(),
1480 1487 ipalias() and ipmagic(). Now even \ characters are passed to
1481 1488 %magics, !shell escapes and aliases exactly as they are in the
1482 1489 ipython command line. Should improve backslash experience,
1483 1490 particularly in Windows (path delimiter for some commands that
1484 1491 won't understand '/'), but Unix benefits as well (regexps). %cd
1485 1492 magic still doesn't support backslash path delimiters, though. Also
1486 1493 deleted all pretense of supporting multiline command strings in
1487 1494 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1488 1495
1489 1496 * doc/build_doc_instructions.txt added. Documentation on how to
1490 1497 use doc/update_manual.py, added yesterday. Both files contributed
1491 1498 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1492 1499 doc/*.sh for deprecation at a later date.
1493 1500
1494 1501 * /ipython.py Added ipython.py to root directory for
1495 1502 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1496 1503 ipython.py) and development convenience (no need to keep doing
1497 1504 "setup.py install" between changes).
1498 1505
1499 1506 * Made ! and !! shell escapes work (again) in multiline expressions:
1500 1507 if 1:
1501 1508 !ls
1502 1509 !!ls
1503 1510
1504 1511 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1505 1512
1506 1513 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1507 1514 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1508 1515 module in case-insensitive installation. Was causing crashes
1509 1516 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1510 1517
1511 1518 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1512 1519 <marienz-AT-gentoo.org>, closes
1513 1520 http://www.scipy.net/roundup/ipython/issue51.
1514 1521
1515 1522 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1516 1523
1517 1524 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1518 1525 problem of excessive CPU usage under *nix and keyboard lag under
1519 1526 win32.
1520 1527
1521 1528 2006-01-10 *** Released version 0.7.0
1522 1529
1523 1530 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1524 1531
1525 1532 * IPython/Release.py (revision): tag version number to 0.7.0,
1526 1533 ready for release.
1527 1534
1528 1535 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1529 1536 it informs the user of the name of the temp. file used. This can
1530 1537 help if you decide later to reuse that same file, so you know
1531 1538 where to copy the info from.
1532 1539
1533 1540 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1534 1541
1535 1542 * setup_bdist_egg.py: little script to build an egg. Added
1536 1543 support in the release tools as well.
1537 1544
1538 1545 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1539 1546
1540 1547 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1541 1548 version selection (new -wxversion command line and ipythonrc
1542 1549 parameter). Patch contributed by Arnd Baecker
1543 1550 <arnd.baecker-AT-web.de>.
1544 1551
1545 1552 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1546 1553 embedded instances, for variables defined at the interactive
1547 1554 prompt of the embedded ipython. Reported by Arnd.
1548 1555
1549 1556 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1550 1557 it can be used as a (stateful) toggle, or with a direct parameter.
1551 1558
1552 1559 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1553 1560 could be triggered in certain cases and cause the traceback
1554 1561 printer not to work.
1555 1562
1556 1563 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1557 1564
1558 1565 * IPython/iplib.py (_should_recompile): Small fix, closes
1559 1566 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1560 1567
1561 1568 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1562 1569
1563 1570 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1564 1571 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1565 1572 Moad for help with tracking it down.
1566 1573
1567 1574 * IPython/iplib.py (handle_auto): fix autocall handling for
1568 1575 objects which support BOTH __getitem__ and __call__ (so that f [x]
1569 1576 is left alone, instead of becoming f([x]) automatically).
1570 1577
1571 1578 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1572 1579 Ville's patch.
1573 1580
1574 1581 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1575 1582
1576 1583 * IPython/iplib.py (handle_auto): changed autocall semantics to
1577 1584 include 'smart' mode, where the autocall transformation is NOT
1578 1585 applied if there are no arguments on the line. This allows you to
1579 1586 just type 'foo' if foo is a callable to see its internal form,
1580 1587 instead of having it called with no arguments (typically a
1581 1588 mistake). The old 'full' autocall still exists: for that, you
1582 1589 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1583 1590
1584 1591 * IPython/completer.py (Completer.attr_matches): add
1585 1592 tab-completion support for Enthoughts' traits. After a report by
1586 1593 Arnd and a patch by Prabhu.
1587 1594
1588 1595 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1589 1596
1590 1597 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1591 1598 Schmolck's patch to fix inspect.getinnerframes().
1592 1599
1593 1600 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1594 1601 for embedded instances, regarding handling of namespaces and items
1595 1602 added to the __builtin__ one. Multiple embedded instances and
1596 1603 recursive embeddings should work better now (though I'm not sure
1597 1604 I've got all the corner cases fixed, that code is a bit of a brain
1598 1605 twister).
1599 1606
1600 1607 * IPython/Magic.py (magic_edit): added support to edit in-memory
1601 1608 macros (automatically creates the necessary temp files). %edit
1602 1609 also doesn't return the file contents anymore, it's just noise.
1603 1610
1604 1611 * IPython/completer.py (Completer.attr_matches): revert change to
1605 1612 complete only on attributes listed in __all__. I realized it
1606 1613 cripples the tab-completion system as a tool for exploring the
1607 1614 internals of unknown libraries (it renders any non-__all__
1608 1615 attribute off-limits). I got bit by this when trying to see
1609 1616 something inside the dis module.
1610 1617
1611 1618 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1612 1619
1613 1620 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1614 1621 namespace for users and extension writers to hold data in. This
1615 1622 follows the discussion in
1616 1623 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1617 1624
1618 1625 * IPython/completer.py (IPCompleter.complete): small patch to help
1619 1626 tab-completion under Emacs, after a suggestion by John Barnard
1620 1627 <barnarj-AT-ccf.org>.
1621 1628
1622 1629 * IPython/Magic.py (Magic.extract_input_slices): added support for
1623 1630 the slice notation in magics to use N-M to represent numbers N...M
1624 1631 (closed endpoints). This is used by %macro and %save.
1625 1632
1626 1633 * IPython/completer.py (Completer.attr_matches): for modules which
1627 1634 define __all__, complete only on those. After a patch by Jeffrey
1628 1635 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1629 1636 speed up this routine.
1630 1637
1631 1638 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1632 1639 don't know if this is the end of it, but the behavior now is
1633 1640 certainly much more correct. Note that coupled with macros,
1634 1641 slightly surprising (at first) behavior may occur: a macro will in
1635 1642 general expand to multiple lines of input, so upon exiting, the
1636 1643 in/out counters will both be bumped by the corresponding amount
1637 1644 (as if the macro's contents had been typed interactively). Typing
1638 1645 %hist will reveal the intermediate (silently processed) lines.
1639 1646
1640 1647 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1641 1648 pickle to fail (%run was overwriting __main__ and not restoring
1642 1649 it, but pickle relies on __main__ to operate).
1643 1650
1644 1651 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1645 1652 using properties, but forgot to make the main InteractiveShell
1646 1653 class a new-style class. Properties fail silently, and
1647 1654 mysteriously, with old-style class (getters work, but
1648 1655 setters don't do anything).
1649 1656
1650 1657 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1651 1658
1652 1659 * IPython/Magic.py (magic_history): fix history reporting bug (I
1653 1660 know some nasties are still there, I just can't seem to find a
1654 1661 reproducible test case to track them down; the input history is
1655 1662 falling out of sync...)
1656 1663
1657 1664 * IPython/iplib.py (handle_shell_escape): fix bug where both
1658 1665 aliases and system accesses where broken for indented code (such
1659 1666 as loops).
1660 1667
1661 1668 * IPython/genutils.py (shell): fix small but critical bug for
1662 1669 win32 system access.
1663 1670
1664 1671 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1665 1672
1666 1673 * IPython/iplib.py (showtraceback): remove use of the
1667 1674 sys.last_{type/value/traceback} structures, which are non
1668 1675 thread-safe.
1669 1676 (_prefilter): change control flow to ensure that we NEVER
1670 1677 introspect objects when autocall is off. This will guarantee that
1671 1678 having an input line of the form 'x.y', where access to attribute
1672 1679 'y' has side effects, doesn't trigger the side effect TWICE. It
1673 1680 is important to note that, with autocall on, these side effects
1674 1681 can still happen.
1675 1682 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1676 1683 trio. IPython offers these three kinds of special calls which are
1677 1684 not python code, and it's a good thing to have their call method
1678 1685 be accessible as pure python functions (not just special syntax at
1679 1686 the command line). It gives us a better internal implementation
1680 1687 structure, as well as exposing these for user scripting more
1681 1688 cleanly.
1682 1689
1683 1690 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1684 1691 file. Now that they'll be more likely to be used with the
1685 1692 persistance system (%store), I want to make sure their module path
1686 1693 doesn't change in the future, so that we don't break things for
1687 1694 users' persisted data.
1688 1695
1689 1696 * IPython/iplib.py (autoindent_update): move indentation
1690 1697 management into the _text_ processing loop, not the keyboard
1691 1698 interactive one. This is necessary to correctly process non-typed
1692 1699 multiline input (such as macros).
1693 1700
1694 1701 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1695 1702 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1696 1703 which was producing problems in the resulting manual.
1697 1704 (magic_whos): improve reporting of instances (show their class,
1698 1705 instead of simply printing 'instance' which isn't terribly
1699 1706 informative).
1700 1707
1701 1708 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1702 1709 (minor mods) to support network shares under win32.
1703 1710
1704 1711 * IPython/winconsole.py (get_console_size): add new winconsole
1705 1712 module and fixes to page_dumb() to improve its behavior under
1706 1713 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1707 1714
1708 1715 * IPython/Magic.py (Macro): simplified Macro class to just
1709 1716 subclass list. We've had only 2.2 compatibility for a very long
1710 1717 time, yet I was still avoiding subclassing the builtin types. No
1711 1718 more (I'm also starting to use properties, though I won't shift to
1712 1719 2.3-specific features quite yet).
1713 1720 (magic_store): added Ville's patch for lightweight variable
1714 1721 persistence, after a request on the user list by Matt Wilkie
1715 1722 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1716 1723 details.
1717 1724
1718 1725 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1719 1726 changed the default logfile name from 'ipython.log' to
1720 1727 'ipython_log.py'. These logs are real python files, and now that
1721 1728 we have much better multiline support, people are more likely to
1722 1729 want to use them as such. Might as well name them correctly.
1723 1730
1724 1731 * IPython/Magic.py: substantial cleanup. While we can't stop
1725 1732 using magics as mixins, due to the existing customizations 'out
1726 1733 there' which rely on the mixin naming conventions, at least I
1727 1734 cleaned out all cross-class name usage. So once we are OK with
1728 1735 breaking compatibility, the two systems can be separated.
1729 1736
1730 1737 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1731 1738 anymore, and the class is a fair bit less hideous as well. New
1732 1739 features were also introduced: timestamping of input, and logging
1733 1740 of output results. These are user-visible with the -t and -o
1734 1741 options to %logstart. Closes
1735 1742 http://www.scipy.net/roundup/ipython/issue11 and a request by
1736 1743 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1737 1744
1738 1745 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1739 1746
1740 1747 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1741 1748 better handle backslashes in paths. See the thread 'More Windows
1742 1749 questions part 2 - \/ characters revisited' on the iypthon user
1743 1750 list:
1744 1751 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1745 1752
1746 1753 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1747 1754
1748 1755 (InteractiveShell.__init__): change threaded shells to not use the
1749 1756 ipython crash handler. This was causing more problems than not,
1750 1757 as exceptions in the main thread (GUI code, typically) would
1751 1758 always show up as a 'crash', when they really weren't.
1752 1759
1753 1760 The colors and exception mode commands (%colors/%xmode) have been
1754 1761 synchronized to also take this into account, so users can get
1755 1762 verbose exceptions for their threaded code as well. I also added
1756 1763 support for activating pdb inside this exception handler as well,
1757 1764 so now GUI authors can use IPython's enhanced pdb at runtime.
1758 1765
1759 1766 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1760 1767 true by default, and add it to the shipped ipythonrc file. Since
1761 1768 this asks the user before proceeding, I think it's OK to make it
1762 1769 true by default.
1763 1770
1764 1771 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1765 1772 of the previous special-casing of input in the eval loop. I think
1766 1773 this is cleaner, as they really are commands and shouldn't have
1767 1774 a special role in the middle of the core code.
1768 1775
1769 1776 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1770 1777
1771 1778 * IPython/iplib.py (edit_syntax_error): added support for
1772 1779 automatically reopening the editor if the file had a syntax error
1773 1780 in it. Thanks to scottt who provided the patch at:
1774 1781 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1775 1782 version committed).
1776 1783
1777 1784 * IPython/iplib.py (handle_normal): add suport for multi-line
1778 1785 input with emtpy lines. This fixes
1779 1786 http://www.scipy.net/roundup/ipython/issue43 and a similar
1780 1787 discussion on the user list.
1781 1788
1782 1789 WARNING: a behavior change is necessarily introduced to support
1783 1790 blank lines: now a single blank line with whitespace does NOT
1784 1791 break the input loop, which means that when autoindent is on, by
1785 1792 default hitting return on the next (indented) line does NOT exit.
1786 1793
1787 1794 Instead, to exit a multiline input you can either have:
1788 1795
1789 1796 - TWO whitespace lines (just hit return again), or
1790 1797 - a single whitespace line of a different length than provided
1791 1798 by the autoindent (add or remove a space).
1792 1799
1793 1800 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1794 1801 module to better organize all readline-related functionality.
1795 1802 I've deleted FlexCompleter and put all completion clases here.
1796 1803
1797 1804 * IPython/iplib.py (raw_input): improve indentation management.
1798 1805 It is now possible to paste indented code with autoindent on, and
1799 1806 the code is interpreted correctly (though it still looks bad on
1800 1807 screen, due to the line-oriented nature of ipython).
1801 1808 (MagicCompleter.complete): change behavior so that a TAB key on an
1802 1809 otherwise empty line actually inserts a tab, instead of completing
1803 1810 on the entire global namespace. This makes it easier to use the
1804 1811 TAB key for indentation. After a request by Hans Meine
1805 1812 <hans_meine-AT-gmx.net>
1806 1813 (_prefilter): add support so that typing plain 'exit' or 'quit'
1807 1814 does a sensible thing. Originally I tried to deviate as little as
1808 1815 possible from the default python behavior, but even that one may
1809 1816 change in this direction (thread on python-dev to that effect).
1810 1817 Regardless, ipython should do the right thing even if CPython's
1811 1818 '>>>' prompt doesn't.
1812 1819 (InteractiveShell): removed subclassing code.InteractiveConsole
1813 1820 class. By now we'd overridden just about all of its methods: I've
1814 1821 copied the remaining two over, and now ipython is a standalone
1815 1822 class. This will provide a clearer picture for the chainsaw
1816 1823 branch refactoring.
1817 1824
1818 1825 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1819 1826
1820 1827 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1821 1828 failures for objects which break when dir() is called on them.
1822 1829
1823 1830 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1824 1831 distinct local and global namespaces in the completer API. This
1825 1832 change allows us to properly handle completion with distinct
1826 1833 scopes, including in embedded instances (this had never really
1827 1834 worked correctly).
1828 1835
1829 1836 Note: this introduces a change in the constructor for
1830 1837 MagicCompleter, as a new global_namespace parameter is now the
1831 1838 second argument (the others were bumped one position).
1832 1839
1833 1840 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1834 1841
1835 1842 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1836 1843 embedded instances (which can be done now thanks to Vivian's
1837 1844 frame-handling fixes for pdb).
1838 1845 (InteractiveShell.__init__): Fix namespace handling problem in
1839 1846 embedded instances. We were overwriting __main__ unconditionally,
1840 1847 and this should only be done for 'full' (non-embedded) IPython;
1841 1848 embedded instances must respect the caller's __main__. Thanks to
1842 1849 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1843 1850
1844 1851 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1845 1852
1846 1853 * setup.py: added download_url to setup(). This registers the
1847 1854 download address at PyPI, which is not only useful to humans
1848 1855 browsing the site, but is also picked up by setuptools (the Eggs
1849 1856 machinery). Thanks to Ville and R. Kern for the info/discussion
1850 1857 on this.
1851 1858
1852 1859 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1853 1860
1854 1861 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1855 1862 This brings a lot of nice functionality to the pdb mode, which now
1856 1863 has tab-completion, syntax highlighting, and better stack handling
1857 1864 than before. Many thanks to Vivian De Smedt
1858 1865 <vivian-AT-vdesmedt.com> for the original patches.
1859 1866
1860 1867 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1861 1868
1862 1869 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1863 1870 sequence to consistently accept the banner argument. The
1864 1871 inconsistency was tripping SAGE, thanks to Gary Zablackis
1865 1872 <gzabl-AT-yahoo.com> for the report.
1866 1873
1867 1874 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1868 1875
1869 1876 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1870 1877 Fix bug where a naked 'alias' call in the ipythonrc file would
1871 1878 cause a crash. Bug reported by Jorgen Stenarson.
1872 1879
1873 1880 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1874 1881
1875 1882 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1876 1883 startup time.
1877 1884
1878 1885 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1879 1886 instances had introduced a bug with globals in normal code. Now
1880 1887 it's working in all cases.
1881 1888
1882 1889 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1883 1890 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1884 1891 has been introduced to set the default case sensitivity of the
1885 1892 searches. Users can still select either mode at runtime on a
1886 1893 per-search basis.
1887 1894
1888 1895 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1889 1896
1890 1897 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1891 1898 attributes in wildcard searches for subclasses. Modified version
1892 1899 of a patch by Jorgen.
1893 1900
1894 1901 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1895 1902
1896 1903 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1897 1904 embedded instances. I added a user_global_ns attribute to the
1898 1905 InteractiveShell class to handle this.
1899 1906
1900 1907 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1901 1908
1902 1909 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1903 1910 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1904 1911 (reported under win32, but may happen also in other platforms).
1905 1912 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1906 1913
1907 1914 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1908 1915
1909 1916 * IPython/Magic.py (magic_psearch): new support for wildcard
1910 1917 patterns. Now, typing ?a*b will list all names which begin with a
1911 1918 and end in b, for example. The %psearch magic has full
1912 1919 docstrings. Many thanks to Jörgen Stenarson
1913 1920 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1914 1921 implementing this functionality.
1915 1922
1916 1923 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1917 1924
1918 1925 * Manual: fixed long-standing annoyance of double-dashes (as in
1919 1926 --prefix=~, for example) being stripped in the HTML version. This
1920 1927 is a latex2html bug, but a workaround was provided. Many thanks
1921 1928 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1922 1929 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1923 1930 rolling. This seemingly small issue had tripped a number of users
1924 1931 when first installing, so I'm glad to see it gone.
1925 1932
1926 1933 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1927 1934
1928 1935 * IPython/Extensions/numeric_formats.py: fix missing import,
1929 1936 reported by Stephen Walton.
1930 1937
1931 1938 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1932 1939
1933 1940 * IPython/demo.py: finish demo module, fully documented now.
1934 1941
1935 1942 * IPython/genutils.py (file_read): simple little utility to read a
1936 1943 file and ensure it's closed afterwards.
1937 1944
1938 1945 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1939 1946
1940 1947 * IPython/demo.py (Demo.__init__): added support for individually
1941 1948 tagging blocks for automatic execution.
1942 1949
1943 1950 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1944 1951 syntax-highlighted python sources, requested by John.
1945 1952
1946 1953 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1947 1954
1948 1955 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1949 1956 finishing.
1950 1957
1951 1958 * IPython/genutils.py (shlex_split): moved from Magic to here,
1952 1959 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1953 1960
1954 1961 * IPython/demo.py (Demo.__init__): added support for silent
1955 1962 blocks, improved marks as regexps, docstrings written.
1956 1963 (Demo.__init__): better docstring, added support for sys.argv.
1957 1964
1958 1965 * IPython/genutils.py (marquee): little utility used by the demo
1959 1966 code, handy in general.
1960 1967
1961 1968 * IPython/demo.py (Demo.__init__): new class for interactive
1962 1969 demos. Not documented yet, I just wrote it in a hurry for
1963 1970 scipy'05. Will docstring later.
1964 1971
1965 1972 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1966 1973
1967 1974 * IPython/Shell.py (sigint_handler): Drastic simplification which
1968 1975 also seems to make Ctrl-C work correctly across threads! This is
1969 1976 so simple, that I can't beleive I'd missed it before. Needs more
1970 1977 testing, though.
1971 1978 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1972 1979 like this before...
1973 1980
1974 1981 * IPython/genutils.py (get_home_dir): add protection against
1975 1982 non-dirs in win32 registry.
1976 1983
1977 1984 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1978 1985 bug where dict was mutated while iterating (pysh crash).
1979 1986
1980 1987 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1981 1988
1982 1989 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1983 1990 spurious newlines added by this routine. After a report by
1984 1991 F. Mantegazza.
1985 1992
1986 1993 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1987 1994
1988 1995 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1989 1996 calls. These were a leftover from the GTK 1.x days, and can cause
1990 1997 problems in certain cases (after a report by John Hunter).
1991 1998
1992 1999 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1993 2000 os.getcwd() fails at init time. Thanks to patch from David Remahl
1994 2001 <chmod007-AT-mac.com>.
1995 2002 (InteractiveShell.__init__): prevent certain special magics from
1996 2003 being shadowed by aliases. Closes
1997 2004 http://www.scipy.net/roundup/ipython/issue41.
1998 2005
1999 2006 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
2000 2007
2001 2008 * IPython/iplib.py (InteractiveShell.complete): Added new
2002 2009 top-level completion method to expose the completion mechanism
2003 2010 beyond readline-based environments.
2004 2011
2005 2012 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
2006 2013
2007 2014 * tools/ipsvnc (svnversion): fix svnversion capture.
2008 2015
2009 2016 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
2010 2017 attribute to self, which was missing. Before, it was set by a
2011 2018 routine which in certain cases wasn't being called, so the
2012 2019 instance could end up missing the attribute. This caused a crash.
2013 2020 Closes http://www.scipy.net/roundup/ipython/issue40.
2014 2021
2015 2022 2005-08-16 Fernando Perez <fperez@colorado.edu>
2016 2023
2017 2024 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
2018 2025 contains non-string attribute. Closes
2019 2026 http://www.scipy.net/roundup/ipython/issue38.
2020 2027
2021 2028 2005-08-14 Fernando Perez <fperez@colorado.edu>
2022 2029
2023 2030 * tools/ipsvnc: Minor improvements, to add changeset info.
2024 2031
2025 2032 2005-08-12 Fernando Perez <fperez@colorado.edu>
2026 2033
2027 2034 * IPython/iplib.py (runsource): remove self.code_to_run_src
2028 2035 attribute. I realized this is nothing more than
2029 2036 '\n'.join(self.buffer), and having the same data in two different
2030 2037 places is just asking for synchronization bugs. This may impact
2031 2038 people who have custom exception handlers, so I need to warn
2032 2039 ipython-dev about it (F. Mantegazza may use them).
2033 2040
2034 2041 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
2035 2042
2036 2043 * IPython/genutils.py: fix 2.2 compatibility (generators)
2037 2044
2038 2045 2005-07-18 Fernando Perez <fperez@colorado.edu>
2039 2046
2040 2047 * IPython/genutils.py (get_home_dir): fix to help users with
2041 2048 invalid $HOME under win32.
2042 2049
2043 2050 2005-07-17 Fernando Perez <fperez@colorado.edu>
2044 2051
2045 2052 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
2046 2053 some old hacks and clean up a bit other routines; code should be
2047 2054 simpler and a bit faster.
2048 2055
2049 2056 * IPython/iplib.py (interact): removed some last-resort attempts
2050 2057 to survive broken stdout/stderr. That code was only making it
2051 2058 harder to abstract out the i/o (necessary for gui integration),
2052 2059 and the crashes it could prevent were extremely rare in practice
2053 2060 (besides being fully user-induced in a pretty violent manner).
2054 2061
2055 2062 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
2056 2063 Nothing major yet, but the code is simpler to read; this should
2057 2064 make it easier to do more serious modifications in the future.
2058 2065
2059 2066 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
2060 2067 which broke in .15 (thanks to a report by Ville).
2061 2068
2062 2069 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
2063 2070 be quite correct, I know next to nothing about unicode). This
2064 2071 will allow unicode strings to be used in prompts, amongst other
2065 2072 cases. It also will prevent ipython from crashing when unicode
2066 2073 shows up unexpectedly in many places. If ascii encoding fails, we
2067 2074 assume utf_8. Currently the encoding is not a user-visible
2068 2075 setting, though it could be made so if there is demand for it.
2069 2076
2070 2077 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
2071 2078
2072 2079 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
2073 2080
2074 2081 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
2075 2082
2076 2083 * IPython/genutils.py: Add 2.2 compatibility here, so all other
2077 2084 code can work transparently for 2.2/2.3.
2078 2085
2079 2086 2005-07-16 Fernando Perez <fperez@colorado.edu>
2080 2087
2081 2088 * IPython/ultraTB.py (ExceptionColors): Make a global variable
2082 2089 out of the color scheme table used for coloring exception
2083 2090 tracebacks. This allows user code to add new schemes at runtime.
2084 2091 This is a minimally modified version of the patch at
2085 2092 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
2086 2093 for the contribution.
2087 2094
2088 2095 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
2089 2096 slightly modified version of the patch in
2090 2097 http://www.scipy.net/roundup/ipython/issue34, which also allows me
2091 2098 to remove the previous try/except solution (which was costlier).
2092 2099 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
2093 2100
2094 2101 2005-06-08 Fernando Perez <fperez@colorado.edu>
2095 2102
2096 2103 * IPython/iplib.py (write/write_err): Add methods to abstract all
2097 2104 I/O a bit more.
2098 2105
2099 2106 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
2100 2107 warning, reported by Aric Hagberg, fix by JD Hunter.
2101 2108
2102 2109 2005-06-02 *** Released version 0.6.15
2103 2110
2104 2111 2005-06-01 Fernando Perez <fperez@colorado.edu>
2105 2112
2106 2113 * IPython/iplib.py (MagicCompleter.file_matches): Fix
2107 2114 tab-completion of filenames within open-quoted strings. Note that
2108 2115 this requires that in ~/.ipython/ipythonrc, users change the
2109 2116 readline delimiters configuration to read:
2110 2117
2111 2118 readline_remove_delims -/~
2112 2119
2113 2120
2114 2121 2005-05-31 *** Released version 0.6.14
2115 2122
2116 2123 2005-05-29 Fernando Perez <fperez@colorado.edu>
2117 2124
2118 2125 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
2119 2126 with files not on the filesystem. Reported by Eliyahu Sandler
2120 2127 <eli@gondolin.net>
2121 2128
2122 2129 2005-05-22 Fernando Perez <fperez@colorado.edu>
2123 2130
2124 2131 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
2125 2132 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
2126 2133
2127 2134 2005-05-19 Fernando Perez <fperez@colorado.edu>
2128 2135
2129 2136 * IPython/iplib.py (safe_execfile): close a file which could be
2130 2137 left open (causing problems in win32, which locks open files).
2131 2138 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
2132 2139
2133 2140 2005-05-18 Fernando Perez <fperez@colorado.edu>
2134 2141
2135 2142 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
2136 2143 keyword arguments correctly to safe_execfile().
2137 2144
2138 2145 2005-05-13 Fernando Perez <fperez@colorado.edu>
2139 2146
2140 2147 * ipython.1: Added info about Qt to manpage, and threads warning
2141 2148 to usage page (invoked with --help).
2142 2149
2143 2150 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
2144 2151 new matcher (it goes at the end of the priority list) to do
2145 2152 tab-completion on named function arguments. Submitted by George
2146 2153 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
2147 2154 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
2148 2155 for more details.
2149 2156
2150 2157 * IPython/Magic.py (magic_run): Added new -e flag to ignore
2151 2158 SystemExit exceptions in the script being run. Thanks to a report
2152 2159 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
2153 2160 producing very annoying behavior when running unit tests.
2154 2161
2155 2162 2005-05-12 Fernando Perez <fperez@colorado.edu>
2156 2163
2157 2164 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
2158 2165 which I'd broken (again) due to a changed regexp. In the process,
2159 2166 added ';' as an escape to auto-quote the whole line without
2160 2167 splitting its arguments. Thanks to a report by Jerry McRae
2161 2168 <qrs0xyc02-AT-sneakemail.com>.
2162 2169
2163 2170 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
2164 2171 possible crashes caused by a TokenError. Reported by Ed Schofield
2165 2172 <schofield-AT-ftw.at>.
2166 2173
2167 2174 2005-05-06 Fernando Perez <fperez@colorado.edu>
2168 2175
2169 2176 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
2170 2177
2171 2178 2005-04-29 Fernando Perez <fperez@colorado.edu>
2172 2179
2173 2180 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
2174 2181 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
2175 2182 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
2176 2183 which provides support for Qt interactive usage (similar to the
2177 2184 existing one for WX and GTK). This had been often requested.
2178 2185
2179 2186 2005-04-14 *** Released version 0.6.13
2180 2187
2181 2188 2005-04-08 Fernando Perez <fperez@colorado.edu>
2182 2189
2183 2190 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
2184 2191 from _ofind, which gets called on almost every input line. Now,
2185 2192 we only try to get docstrings if they are actually going to be
2186 2193 used (the overhead of fetching unnecessary docstrings can be
2187 2194 noticeable for certain objects, such as Pyro proxies).
2188 2195
2189 2196 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
2190 2197 for completers. For some reason I had been passing them the state
2191 2198 variable, which completers never actually need, and was in
2192 2199 conflict with the rlcompleter API. Custom completers ONLY need to
2193 2200 take the text parameter.
2194 2201
2195 2202 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
2196 2203 work correctly in pysh. I've also moved all the logic which used
2197 2204 to be in pysh.py here, which will prevent problems with future
2198 2205 upgrades. However, this time I must warn users to update their
2199 2206 pysh profile to include the line
2200 2207
2201 2208 import_all IPython.Extensions.InterpreterExec
2202 2209
2203 2210 because otherwise things won't work for them. They MUST also
2204 2211 delete pysh.py and the line
2205 2212
2206 2213 execfile pysh.py
2207 2214
2208 2215 from their ipythonrc-pysh.
2209 2216
2210 2217 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
2211 2218 robust in the face of objects whose dir() returns non-strings
2212 2219 (which it shouldn't, but some broken libs like ITK do). Thanks to
2213 2220 a patch by John Hunter (implemented differently, though). Also
2214 2221 minor improvements by using .extend instead of + on lists.
2215 2222
2216 2223 * pysh.py:
2217 2224
2218 2225 2005-04-06 Fernando Perez <fperez@colorado.edu>
2219 2226
2220 2227 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
2221 2228 by default, so that all users benefit from it. Those who don't
2222 2229 want it can still turn it off.
2223 2230
2224 2231 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
2225 2232 config file, I'd forgotten about this, so users were getting it
2226 2233 off by default.
2227 2234
2228 2235 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
2229 2236 consistency. Now magics can be called in multiline statements,
2230 2237 and python variables can be expanded in magic calls via $var.
2231 2238 This makes the magic system behave just like aliases or !system
2232 2239 calls.
2233 2240
2234 2241 2005-03-28 Fernando Perez <fperez@colorado.edu>
2235 2242
2236 2243 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
2237 2244 expensive string additions for building command. Add support for
2238 2245 trailing ';' when autocall is used.
2239 2246
2240 2247 2005-03-26 Fernando Perez <fperez@colorado.edu>
2241 2248
2242 2249 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
2243 2250 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
2244 2251 ipython.el robust against prompts with any number of spaces
2245 2252 (including 0) after the ':' character.
2246 2253
2247 2254 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
2248 2255 continuation prompt, which misled users to think the line was
2249 2256 already indented. Closes debian Bug#300847, reported to me by
2250 2257 Norbert Tretkowski <tretkowski-AT-inittab.de>.
2251 2258
2252 2259 2005-03-23 Fernando Perez <fperez@colorado.edu>
2253 2260
2254 2261 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
2255 2262 properly aligned if they have embedded newlines.
2256 2263
2257 2264 * IPython/iplib.py (runlines): Add a public method to expose
2258 2265 IPython's code execution machinery, so that users can run strings
2259 2266 as if they had been typed at the prompt interactively.
2260 2267 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
2261 2268 methods which can call the system shell, but with python variable
2262 2269 expansion. The three such methods are: __IPYTHON__.system,
2263 2270 .getoutput and .getoutputerror. These need to be documented in a
2264 2271 'public API' section (to be written) of the manual.
2265 2272
2266 2273 2005-03-20 Fernando Perez <fperez@colorado.edu>
2267 2274
2268 2275 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
2269 2276 for custom exception handling. This is quite powerful, and it
2270 2277 allows for user-installable exception handlers which can trap
2271 2278 custom exceptions at runtime and treat them separately from
2272 2279 IPython's default mechanisms. At the request of Frédéric
2273 2280 Mantegazza <mantegazza-AT-ill.fr>.
2274 2281 (InteractiveShell.set_custom_completer): public API function to
2275 2282 add new completers at runtime.
2276 2283
2277 2284 2005-03-19 Fernando Perez <fperez@colorado.edu>
2278 2285
2279 2286 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
2280 2287 allow objects which provide their docstrings via non-standard
2281 2288 mechanisms (like Pyro proxies) to still be inspected by ipython's
2282 2289 ? system.
2283 2290
2284 2291 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
2285 2292 automatic capture system. I tried quite hard to make it work
2286 2293 reliably, and simply failed. I tried many combinations with the
2287 2294 subprocess module, but eventually nothing worked in all needed
2288 2295 cases (not blocking stdin for the child, duplicating stdout
2289 2296 without blocking, etc). The new %sc/%sx still do capture to these
2290 2297 magical list/string objects which make shell use much more
2291 2298 conveninent, so not all is lost.
2292 2299
2293 2300 XXX - FIX MANUAL for the change above!
2294 2301
2295 2302 (runsource): I copied code.py's runsource() into ipython to modify
2296 2303 it a bit. Now the code object and source to be executed are
2297 2304 stored in ipython. This makes this info accessible to third-party
2298 2305 tools, like custom exception handlers. After a request by Frédéric
2299 2306 Mantegazza <mantegazza-AT-ill.fr>.
2300 2307
2301 2308 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
2302 2309 history-search via readline (like C-p/C-n). I'd wanted this for a
2303 2310 long time, but only recently found out how to do it. For users
2304 2311 who already have their ipythonrc files made and want this, just
2305 2312 add:
2306 2313
2307 2314 readline_parse_and_bind "\e[A": history-search-backward
2308 2315 readline_parse_and_bind "\e[B": history-search-forward
2309 2316
2310 2317 2005-03-18 Fernando Perez <fperez@colorado.edu>
2311 2318
2312 2319 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
2313 2320 LSString and SList classes which allow transparent conversions
2314 2321 between list mode and whitespace-separated string.
2315 2322 (magic_r): Fix recursion problem in %r.
2316 2323
2317 2324 * IPython/genutils.py (LSString): New class to be used for
2318 2325 automatic storage of the results of all alias/system calls in _o
2319 2326 and _e (stdout/err). These provide a .l/.list attribute which
2320 2327 does automatic splitting on newlines. This means that for most
2321 2328 uses, you'll never need to do capturing of output with %sc/%sx
2322 2329 anymore, since ipython keeps this always done for you. Note that
2323 2330 only the LAST results are stored, the _o/e variables are
2324 2331 overwritten on each call. If you need to save their contents
2325 2332 further, simply bind them to any other name.
2326 2333
2327 2334 2005-03-17 Fernando Perez <fperez@colorado.edu>
2328 2335
2329 2336 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
2330 2337 prompt namespace handling.
2331 2338
2332 2339 2005-03-16 Fernando Perez <fperez@colorado.edu>
2333 2340
2334 2341 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
2335 2342 classic prompts to be '>>> ' (final space was missing, and it
2336 2343 trips the emacs python mode).
2337 2344 (BasePrompt.__str__): Added safe support for dynamic prompt
2338 2345 strings. Now you can set your prompt string to be '$x', and the
2339 2346 value of x will be printed from your interactive namespace. The
2340 2347 interpolation syntax includes the full Itpl support, so
2341 2348 ${foo()+x+bar()} is a valid prompt string now, and the function
2342 2349 calls will be made at runtime.
2343 2350
2344 2351 2005-03-15 Fernando Perez <fperez@colorado.edu>
2345 2352
2346 2353 * IPython/Magic.py (magic_history): renamed %hist to %history, to
2347 2354 avoid name clashes in pylab. %hist still works, it just forwards
2348 2355 the call to %history.
2349 2356
2350 2357 2005-03-02 *** Released version 0.6.12
2351 2358
2352 2359 2005-03-02 Fernando Perez <fperez@colorado.edu>
2353 2360
2354 2361 * IPython/iplib.py (handle_magic): log magic calls properly as
2355 2362 ipmagic() function calls.
2356 2363
2357 2364 * IPython/Magic.py (magic_time): Improved %time to support
2358 2365 statements and provide wall-clock as well as CPU time.
2359 2366
2360 2367 2005-02-27 Fernando Perez <fperez@colorado.edu>
2361 2368
2362 2369 * IPython/hooks.py: New hooks module, to expose user-modifiable
2363 2370 IPython functionality in a clean manner. For now only the editor
2364 2371 hook is actually written, and other thigns which I intend to turn
2365 2372 into proper hooks aren't yet there. The display and prefilter
2366 2373 stuff, for example, should be hooks. But at least now the
2367 2374 framework is in place, and the rest can be moved here with more
2368 2375 time later. IPython had had a .hooks variable for a long time for
2369 2376 this purpose, but I'd never actually used it for anything.
2370 2377
2371 2378 2005-02-26 Fernando Perez <fperez@colorado.edu>
2372 2379
2373 2380 * IPython/ipmaker.py (make_IPython): make the default ipython
2374 2381 directory be called _ipython under win32, to follow more the
2375 2382 naming peculiarities of that platform (where buggy software like
2376 2383 Visual Sourcesafe breaks with .named directories). Reported by
2377 2384 Ville Vainio.
2378 2385
2379 2386 2005-02-23 Fernando Perez <fperez@colorado.edu>
2380 2387
2381 2388 * IPython/iplib.py (InteractiveShell.__init__): removed a few
2382 2389 auto_aliases for win32 which were causing problems. Users can
2383 2390 define the ones they personally like.
2384 2391
2385 2392 2005-02-21 Fernando Perez <fperez@colorado.edu>
2386 2393
2387 2394 * IPython/Magic.py (magic_time): new magic to time execution of
2388 2395 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
2389 2396
2390 2397 2005-02-19 Fernando Perez <fperez@colorado.edu>
2391 2398
2392 2399 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
2393 2400 into keys (for prompts, for example).
2394 2401
2395 2402 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
2396 2403 prompts in case users want them. This introduces a small behavior
2397 2404 change: ipython does not automatically add a space to all prompts
2398 2405 anymore. To get the old prompts with a space, users should add it
2399 2406 manually to their ipythonrc file, so for example prompt_in1 should
2400 2407 now read 'In [\#]: ' instead of 'In [\#]:'.
2401 2408 (BasePrompt.__init__): New option prompts_pad_left (only in rc
2402 2409 file) to control left-padding of secondary prompts.
2403 2410
2404 2411 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
2405 2412 the profiler can't be imported. Fix for Debian, which removed
2406 2413 profile.py because of License issues. I applied a slightly
2407 2414 modified version of the original Debian patch at
2408 2415 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
2409 2416
2410 2417 2005-02-17 Fernando Perez <fperez@colorado.edu>
2411 2418
2412 2419 * IPython/genutils.py (native_line_ends): Fix bug which would
2413 2420 cause improper line-ends under win32 b/c I was not opening files
2414 2421 in binary mode. Bug report and fix thanks to Ville.
2415 2422
2416 2423 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
2417 2424 trying to catch spurious foo[1] autocalls. My fix actually broke
2418 2425 ',/' autoquote/call with explicit escape (bad regexp).
2419 2426
2420 2427 2005-02-15 *** Released version 0.6.11
2421 2428
2422 2429 2005-02-14 Fernando Perez <fperez@colorado.edu>
2423 2430
2424 2431 * IPython/background_jobs.py: New background job management
2425 2432 subsystem. This is implemented via a new set of classes, and
2426 2433 IPython now provides a builtin 'jobs' object for background job
2427 2434 execution. A convenience %bg magic serves as a lightweight
2428 2435 frontend for starting the more common type of calls. This was
2429 2436 inspired by discussions with B. Granger and the BackgroundCommand
2430 2437 class described in the book Python Scripting for Computational
2431 2438 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
2432 2439 (although ultimately no code from this text was used, as IPython's
2433 2440 system is a separate implementation).
2434 2441
2435 2442 * IPython/iplib.py (MagicCompleter.python_matches): add new option
2436 2443 to control the completion of single/double underscore names
2437 2444 separately. As documented in the example ipytonrc file, the
2438 2445 readline_omit__names variable can now be set to 2, to omit even
2439 2446 single underscore names. Thanks to a patch by Brian Wong
2440 2447 <BrianWong-AT-AirgoNetworks.Com>.
2441 2448 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
2442 2449 be autocalled as foo([1]) if foo were callable. A problem for
2443 2450 things which are both callable and implement __getitem__.
2444 2451 (init_readline): Fix autoindentation for win32. Thanks to a patch
2445 2452 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
2446 2453
2447 2454 2005-02-12 Fernando Perez <fperez@colorado.edu>
2448 2455
2449 2456 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
2450 2457 which I had written long ago to sort out user error messages which
2451 2458 may occur during startup. This seemed like a good idea initially,
2452 2459 but it has proven a disaster in retrospect. I don't want to
2453 2460 change much code for now, so my fix is to set the internal 'debug'
2454 2461 flag to true everywhere, whose only job was precisely to control
2455 2462 this subsystem. This closes issue 28 (as well as avoiding all
2456 2463 sorts of strange hangups which occur from time to time).
2457 2464
2458 2465 2005-02-07 Fernando Perez <fperez@colorado.edu>
2459 2466
2460 2467 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
2461 2468 previous call produced a syntax error.
2462 2469
2463 2470 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2464 2471 classes without constructor.
2465 2472
2466 2473 2005-02-06 Fernando Perez <fperez@colorado.edu>
2467 2474
2468 2475 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2469 2476 completions with the results of each matcher, so we return results
2470 2477 to the user from all namespaces. This breaks with ipython
2471 2478 tradition, but I think it's a nicer behavior. Now you get all
2472 2479 possible completions listed, from all possible namespaces (python,
2473 2480 filesystem, magics...) After a request by John Hunter
2474 2481 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2475 2482
2476 2483 2005-02-05 Fernando Perez <fperez@colorado.edu>
2477 2484
2478 2485 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2479 2486 the call had quote characters in it (the quotes were stripped).
2480 2487
2481 2488 2005-01-31 Fernando Perez <fperez@colorado.edu>
2482 2489
2483 2490 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2484 2491 Itpl.itpl() to make the code more robust against psyco
2485 2492 optimizations.
2486 2493
2487 2494 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2488 2495 of causing an exception. Quicker, cleaner.
2489 2496
2490 2497 2005-01-28 Fernando Perez <fperez@colorado.edu>
2491 2498
2492 2499 * scripts/ipython_win_post_install.py (install): hardcode
2493 2500 sys.prefix+'python.exe' as the executable path. It turns out that
2494 2501 during the post-installation run, sys.executable resolves to the
2495 2502 name of the binary installer! I should report this as a distutils
2496 2503 bug, I think. I updated the .10 release with this tiny fix, to
2497 2504 avoid annoying the lists further.
2498 2505
2499 2506 2005-01-27 *** Released version 0.6.10
2500 2507
2501 2508 2005-01-27 Fernando Perez <fperez@colorado.edu>
2502 2509
2503 2510 * IPython/numutils.py (norm): Added 'inf' as optional name for
2504 2511 L-infinity norm, included references to mathworld.com for vector
2505 2512 norm definitions.
2506 2513 (amin/amax): added amin/amax for array min/max. Similar to what
2507 2514 pylab ships with after the recent reorganization of names.
2508 2515 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2509 2516
2510 2517 * ipython.el: committed Alex's recent fixes and improvements.
2511 2518 Tested with python-mode from CVS, and it looks excellent. Since
2512 2519 python-mode hasn't released anything in a while, I'm temporarily
2513 2520 putting a copy of today's CVS (v 4.70) of python-mode in:
2514 2521 http://ipython.scipy.org/tmp/python-mode.el
2515 2522
2516 2523 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2517 2524 sys.executable for the executable name, instead of assuming it's
2518 2525 called 'python.exe' (the post-installer would have produced broken
2519 2526 setups on systems with a differently named python binary).
2520 2527
2521 2528 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2522 2529 references to os.linesep, to make the code more
2523 2530 platform-independent. This is also part of the win32 coloring
2524 2531 fixes.
2525 2532
2526 2533 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2527 2534 lines, which actually cause coloring bugs because the length of
2528 2535 the line is very difficult to correctly compute with embedded
2529 2536 escapes. This was the source of all the coloring problems under
2530 2537 Win32. I think that _finally_, Win32 users have a properly
2531 2538 working ipython in all respects. This would never have happened
2532 2539 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2533 2540
2534 2541 2005-01-26 *** Released version 0.6.9
2535 2542
2536 2543 2005-01-25 Fernando Perez <fperez@colorado.edu>
2537 2544
2538 2545 * setup.py: finally, we have a true Windows installer, thanks to
2539 2546 the excellent work of Viktor Ransmayr
2540 2547 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2541 2548 Windows users. The setup routine is quite a bit cleaner thanks to
2542 2549 this, and the post-install script uses the proper functions to
2543 2550 allow a clean de-installation using the standard Windows Control
2544 2551 Panel.
2545 2552
2546 2553 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2547 2554 environment variable under all OSes (including win32) if
2548 2555 available. This will give consistency to win32 users who have set
2549 2556 this variable for any reason. If os.environ['HOME'] fails, the
2550 2557 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2551 2558
2552 2559 2005-01-24 Fernando Perez <fperez@colorado.edu>
2553 2560
2554 2561 * IPython/numutils.py (empty_like): add empty_like(), similar to
2555 2562 zeros_like() but taking advantage of the new empty() Numeric routine.
2556 2563
2557 2564 2005-01-23 *** Released version 0.6.8
2558 2565
2559 2566 2005-01-22 Fernando Perez <fperez@colorado.edu>
2560 2567
2561 2568 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2562 2569 automatic show() calls. After discussing things with JDH, it
2563 2570 turns out there are too many corner cases where this can go wrong.
2564 2571 It's best not to try to be 'too smart', and simply have ipython
2565 2572 reproduce as much as possible the default behavior of a normal
2566 2573 python shell.
2567 2574
2568 2575 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2569 2576 line-splitting regexp and _prefilter() to avoid calling getattr()
2570 2577 on assignments. This closes
2571 2578 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2572 2579 readline uses getattr(), so a simple <TAB> keypress is still
2573 2580 enough to trigger getattr() calls on an object.
2574 2581
2575 2582 2005-01-21 Fernando Perez <fperez@colorado.edu>
2576 2583
2577 2584 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2578 2585 docstring under pylab so it doesn't mask the original.
2579 2586
2580 2587 2005-01-21 *** Released version 0.6.7
2581 2588
2582 2589 2005-01-21 Fernando Perez <fperez@colorado.edu>
2583 2590
2584 2591 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2585 2592 signal handling for win32 users in multithreaded mode.
2586 2593
2587 2594 2005-01-17 Fernando Perez <fperez@colorado.edu>
2588 2595
2589 2596 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2590 2597 instances with no __init__. After a crash report by Norbert Nemec
2591 2598 <Norbert-AT-nemec-online.de>.
2592 2599
2593 2600 2005-01-14 Fernando Perez <fperez@colorado.edu>
2594 2601
2595 2602 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2596 2603 names for verbose exceptions, when multiple dotted names and the
2597 2604 'parent' object were present on the same line.
2598 2605
2599 2606 2005-01-11 Fernando Perez <fperez@colorado.edu>
2600 2607
2601 2608 * IPython/genutils.py (flag_calls): new utility to trap and flag
2602 2609 calls in functions. I need it to clean up matplotlib support.
2603 2610 Also removed some deprecated code in genutils.
2604 2611
2605 2612 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2606 2613 that matplotlib scripts called with %run, which don't call show()
2607 2614 themselves, still have their plotting windows open.
2608 2615
2609 2616 2005-01-05 Fernando Perez <fperez@colorado.edu>
2610 2617
2611 2618 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2612 2619 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2613 2620
2614 2621 2004-12-19 Fernando Perez <fperez@colorado.edu>
2615 2622
2616 2623 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2617 2624 parent_runcode, which was an eyesore. The same result can be
2618 2625 obtained with Python's regular superclass mechanisms.
2619 2626
2620 2627 2004-12-17 Fernando Perez <fperez@colorado.edu>
2621 2628
2622 2629 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2623 2630 reported by Prabhu.
2624 2631 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2625 2632 sys.stderr) instead of explicitly calling sys.stderr. This helps
2626 2633 maintain our I/O abstractions clean, for future GUI embeddings.
2627 2634
2628 2635 * IPython/genutils.py (info): added new utility for sys.stderr
2629 2636 unified info message handling (thin wrapper around warn()).
2630 2637
2631 2638 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2632 2639 composite (dotted) names on verbose exceptions.
2633 2640 (VerboseTB.nullrepr): harden against another kind of errors which
2634 2641 Python's inspect module can trigger, and which were crashing
2635 2642 IPython. Thanks to a report by Marco Lombardi
2636 2643 <mlombard-AT-ma010192.hq.eso.org>.
2637 2644
2638 2645 2004-12-13 *** Released version 0.6.6
2639 2646
2640 2647 2004-12-12 Fernando Perez <fperez@colorado.edu>
2641 2648
2642 2649 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2643 2650 generated by pygtk upon initialization if it was built without
2644 2651 threads (for matplotlib users). After a crash reported by
2645 2652 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2646 2653
2647 2654 * IPython/ipmaker.py (make_IPython): fix small bug in the
2648 2655 import_some parameter for multiple imports.
2649 2656
2650 2657 * IPython/iplib.py (ipmagic): simplified the interface of
2651 2658 ipmagic() to take a single string argument, just as it would be
2652 2659 typed at the IPython cmd line.
2653 2660 (ipalias): Added new ipalias() with an interface identical to
2654 2661 ipmagic(). This completes exposing a pure python interface to the
2655 2662 alias and magic system, which can be used in loops or more complex
2656 2663 code where IPython's automatic line mangling is not active.
2657 2664
2658 2665 * IPython/genutils.py (timing): changed interface of timing to
2659 2666 simply run code once, which is the most common case. timings()
2660 2667 remains unchanged, for the cases where you want multiple runs.
2661 2668
2662 2669 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2663 2670 bug where Python2.2 crashes with exec'ing code which does not end
2664 2671 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2665 2672 before.
2666 2673
2667 2674 2004-12-10 Fernando Perez <fperez@colorado.edu>
2668 2675
2669 2676 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2670 2677 -t to -T, to accomodate the new -t flag in %run (the %run and
2671 2678 %prun options are kind of intermixed, and it's not easy to change
2672 2679 this with the limitations of python's getopt).
2673 2680
2674 2681 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2675 2682 the execution of scripts. It's not as fine-tuned as timeit.py,
2676 2683 but it works from inside ipython (and under 2.2, which lacks
2677 2684 timeit.py). Optionally a number of runs > 1 can be given for
2678 2685 timing very short-running code.
2679 2686
2680 2687 * IPython/genutils.py (uniq_stable): new routine which returns a
2681 2688 list of unique elements in any iterable, but in stable order of
2682 2689 appearance. I needed this for the ultraTB fixes, and it's a handy
2683 2690 utility.
2684 2691
2685 2692 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2686 2693 dotted names in Verbose exceptions. This had been broken since
2687 2694 the very start, now x.y will properly be printed in a Verbose
2688 2695 traceback, instead of x being shown and y appearing always as an
2689 2696 'undefined global'. Getting this to work was a bit tricky,
2690 2697 because by default python tokenizers are stateless. Saved by
2691 2698 python's ability to easily add a bit of state to an arbitrary
2692 2699 function (without needing to build a full-blown callable object).
2693 2700
2694 2701 Also big cleanup of this code, which had horrendous runtime
2695 2702 lookups of zillions of attributes for colorization. Moved all
2696 2703 this code into a few templates, which make it cleaner and quicker.
2697 2704
2698 2705 Printout quality was also improved for Verbose exceptions: one
2699 2706 variable per line, and memory addresses are printed (this can be
2700 2707 quite handy in nasty debugging situations, which is what Verbose
2701 2708 is for).
2702 2709
2703 2710 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2704 2711 the command line as scripts to be loaded by embedded instances.
2705 2712 Doing so has the potential for an infinite recursion if there are
2706 2713 exceptions thrown in the process. This fixes a strange crash
2707 2714 reported by Philippe MULLER <muller-AT-irit.fr>.
2708 2715
2709 2716 2004-12-09 Fernando Perez <fperez@colorado.edu>
2710 2717
2711 2718 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2712 2719 to reflect new names in matplotlib, which now expose the
2713 2720 matlab-compatible interface via a pylab module instead of the
2714 2721 'matlab' name. The new code is backwards compatible, so users of
2715 2722 all matplotlib versions are OK. Patch by J. Hunter.
2716 2723
2717 2724 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2718 2725 of __init__ docstrings for instances (class docstrings are already
2719 2726 automatically printed). Instances with customized docstrings
2720 2727 (indep. of the class) are also recognized and all 3 separate
2721 2728 docstrings are printed (instance, class, constructor). After some
2722 2729 comments/suggestions by J. Hunter.
2723 2730
2724 2731 2004-12-05 Fernando Perez <fperez@colorado.edu>
2725 2732
2726 2733 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2727 2734 warnings when tab-completion fails and triggers an exception.
2728 2735
2729 2736 2004-12-03 Fernando Perez <fperez@colorado.edu>
2730 2737
2731 2738 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2732 2739 be triggered when using 'run -p'. An incorrect option flag was
2733 2740 being set ('d' instead of 'D').
2734 2741 (manpage): fix missing escaped \- sign.
2735 2742
2736 2743 2004-11-30 *** Released version 0.6.5
2737 2744
2738 2745 2004-11-30 Fernando Perez <fperez@colorado.edu>
2739 2746
2740 2747 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2741 2748 setting with -d option.
2742 2749
2743 2750 * setup.py (docfiles): Fix problem where the doc glob I was using
2744 2751 was COMPLETELY BROKEN. It was giving the right files by pure
2745 2752 accident, but failed once I tried to include ipython.el. Note:
2746 2753 glob() does NOT allow you to do exclusion on multiple endings!
2747 2754
2748 2755 2004-11-29 Fernando Perez <fperez@colorado.edu>
2749 2756
2750 2757 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2751 2758 the manpage as the source. Better formatting & consistency.
2752 2759
2753 2760 * IPython/Magic.py (magic_run): Added new -d option, to run
2754 2761 scripts under the control of the python pdb debugger. Note that
2755 2762 this required changing the %prun option -d to -D, to avoid a clash
2756 2763 (since %run must pass options to %prun, and getopt is too dumb to
2757 2764 handle options with string values with embedded spaces). Thanks
2758 2765 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2759 2766 (magic_who_ls): added type matching to %who and %whos, so that one
2760 2767 can filter their output to only include variables of certain
2761 2768 types. Another suggestion by Matthew.
2762 2769 (magic_whos): Added memory summaries in kb and Mb for arrays.
2763 2770 (magic_who): Improve formatting (break lines every 9 vars).
2764 2771
2765 2772 2004-11-28 Fernando Perez <fperez@colorado.edu>
2766 2773
2767 2774 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2768 2775 cache when empty lines were present.
2769 2776
2770 2777 2004-11-24 Fernando Perez <fperez@colorado.edu>
2771 2778
2772 2779 * IPython/usage.py (__doc__): document the re-activated threading
2773 2780 options for WX and GTK.
2774 2781
2775 2782 2004-11-23 Fernando Perez <fperez@colorado.edu>
2776 2783
2777 2784 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2778 2785 the -wthread and -gthread options, along with a new -tk one to try
2779 2786 and coordinate Tk threading with wx/gtk. The tk support is very
2780 2787 platform dependent, since it seems to require Tcl and Tk to be
2781 2788 built with threads (Fedora1/2 appears NOT to have it, but in
2782 2789 Prabhu's Debian boxes it works OK). But even with some Tk
2783 2790 limitations, this is a great improvement.
2784 2791
2785 2792 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2786 2793 info in user prompts. Patch by Prabhu.
2787 2794
2788 2795 2004-11-18 Fernando Perez <fperez@colorado.edu>
2789 2796
2790 2797 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2791 2798 EOFErrors and bail, to avoid infinite loops if a non-terminating
2792 2799 file is fed into ipython. Patch submitted in issue 19 by user,
2793 2800 many thanks.
2794 2801
2795 2802 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2796 2803 autoquote/parens in continuation prompts, which can cause lots of
2797 2804 problems. Closes roundup issue 20.
2798 2805
2799 2806 2004-11-17 Fernando Perez <fperez@colorado.edu>
2800 2807
2801 2808 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2802 2809 reported as debian bug #280505. I'm not sure my local changelog
2803 2810 entry has the proper debian format (Jack?).
2804 2811
2805 2812 2004-11-08 *** Released version 0.6.4
2806 2813
2807 2814 2004-11-08 Fernando Perez <fperez@colorado.edu>
2808 2815
2809 2816 * IPython/iplib.py (init_readline): Fix exit message for Windows
2810 2817 when readline is active. Thanks to a report by Eric Jones
2811 2818 <eric-AT-enthought.com>.
2812 2819
2813 2820 2004-11-07 Fernando Perez <fperez@colorado.edu>
2814 2821
2815 2822 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2816 2823 sometimes seen by win2k/cygwin users.
2817 2824
2818 2825 2004-11-06 Fernando Perez <fperez@colorado.edu>
2819 2826
2820 2827 * IPython/iplib.py (interact): Change the handling of %Exit from
2821 2828 trying to propagate a SystemExit to an internal ipython flag.
2822 2829 This is less elegant than using Python's exception mechanism, but
2823 2830 I can't get that to work reliably with threads, so under -pylab
2824 2831 %Exit was hanging IPython. Cross-thread exception handling is
2825 2832 really a bitch. Thaks to a bug report by Stephen Walton
2826 2833 <stephen.walton-AT-csun.edu>.
2827 2834
2828 2835 2004-11-04 Fernando Perez <fperez@colorado.edu>
2829 2836
2830 2837 * IPython/iplib.py (raw_input_original): store a pointer to the
2831 2838 true raw_input to harden against code which can modify it
2832 2839 (wx.py.PyShell does this and would otherwise crash ipython).
2833 2840 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2834 2841
2835 2842 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2836 2843 Ctrl-C problem, which does not mess up the input line.
2837 2844
2838 2845 2004-11-03 Fernando Perez <fperez@colorado.edu>
2839 2846
2840 2847 * IPython/Release.py: Changed licensing to BSD, in all files.
2841 2848 (name): lowercase name for tarball/RPM release.
2842 2849
2843 2850 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2844 2851 use throughout ipython.
2845 2852
2846 2853 * IPython/Magic.py (Magic._ofind): Switch to using the new
2847 2854 OInspect.getdoc() function.
2848 2855
2849 2856 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2850 2857 of the line currently being canceled via Ctrl-C. It's extremely
2851 2858 ugly, but I don't know how to do it better (the problem is one of
2852 2859 handling cross-thread exceptions).
2853 2860
2854 2861 2004-10-28 Fernando Perez <fperez@colorado.edu>
2855 2862
2856 2863 * IPython/Shell.py (signal_handler): add signal handlers to trap
2857 2864 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2858 2865 report by Francesc Alted.
2859 2866
2860 2867 2004-10-21 Fernando Perez <fperez@colorado.edu>
2861 2868
2862 2869 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2863 2870 to % for pysh syntax extensions.
2864 2871
2865 2872 2004-10-09 Fernando Perez <fperez@colorado.edu>
2866 2873
2867 2874 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2868 2875 arrays to print a more useful summary, without calling str(arr).
2869 2876 This avoids the problem of extremely lengthy computations which
2870 2877 occur if arr is large, and appear to the user as a system lockup
2871 2878 with 100% cpu activity. After a suggestion by Kristian Sandberg
2872 2879 <Kristian.Sandberg@colorado.edu>.
2873 2880 (Magic.__init__): fix bug in global magic escapes not being
2874 2881 correctly set.
2875 2882
2876 2883 2004-10-08 Fernando Perez <fperez@colorado.edu>
2877 2884
2878 2885 * IPython/Magic.py (__license__): change to absolute imports of
2879 2886 ipython's own internal packages, to start adapting to the absolute
2880 2887 import requirement of PEP-328.
2881 2888
2882 2889 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2883 2890 files, and standardize author/license marks through the Release
2884 2891 module instead of having per/file stuff (except for files with
2885 2892 particular licenses, like the MIT/PSF-licensed codes).
2886 2893
2887 2894 * IPython/Debugger.py: remove dead code for python 2.1
2888 2895
2889 2896 2004-10-04 Fernando Perez <fperez@colorado.edu>
2890 2897
2891 2898 * IPython/iplib.py (ipmagic): New function for accessing magics
2892 2899 via a normal python function call.
2893 2900
2894 2901 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2895 2902 from '@' to '%', to accomodate the new @decorator syntax of python
2896 2903 2.4.
2897 2904
2898 2905 2004-09-29 Fernando Perez <fperez@colorado.edu>
2899 2906
2900 2907 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2901 2908 matplotlib.use to prevent running scripts which try to switch
2902 2909 interactive backends from within ipython. This will just crash
2903 2910 the python interpreter, so we can't allow it (but a detailed error
2904 2911 is given to the user).
2905 2912
2906 2913 2004-09-28 Fernando Perez <fperez@colorado.edu>
2907 2914
2908 2915 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2909 2916 matplotlib-related fixes so that using @run with non-matplotlib
2910 2917 scripts doesn't pop up spurious plot windows. This requires
2911 2918 matplotlib >= 0.63, where I had to make some changes as well.
2912 2919
2913 2920 * IPython/ipmaker.py (make_IPython): update version requirement to
2914 2921 python 2.2.
2915 2922
2916 2923 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2917 2924 banner arg for embedded customization.
2918 2925
2919 2926 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2920 2927 explicit uses of __IP as the IPython's instance name. Now things
2921 2928 are properly handled via the shell.name value. The actual code
2922 2929 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2923 2930 is much better than before. I'll clean things completely when the
2924 2931 magic stuff gets a real overhaul.
2925 2932
2926 2933 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2927 2934 minor changes to debian dir.
2928 2935
2929 2936 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2930 2937 pointer to the shell itself in the interactive namespace even when
2931 2938 a user-supplied dict is provided. This is needed for embedding
2932 2939 purposes (found by tests with Michel Sanner).
2933 2940
2934 2941 2004-09-27 Fernando Perez <fperez@colorado.edu>
2935 2942
2936 2943 * IPython/UserConfig/ipythonrc: remove []{} from
2937 2944 readline_remove_delims, so that things like [modname.<TAB> do
2938 2945 proper completion. This disables [].TAB, but that's a less common
2939 2946 case than module names in list comprehensions, for example.
2940 2947 Thanks to a report by Andrea Riciputi.
2941 2948
2942 2949 2004-09-09 Fernando Perez <fperez@colorado.edu>
2943 2950
2944 2951 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2945 2952 blocking problems in win32 and osx. Fix by John.
2946 2953
2947 2954 2004-09-08 Fernando Perez <fperez@colorado.edu>
2948 2955
2949 2956 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2950 2957 for Win32 and OSX. Fix by John Hunter.
2951 2958
2952 2959 2004-08-30 *** Released version 0.6.3
2953 2960
2954 2961 2004-08-30 Fernando Perez <fperez@colorado.edu>
2955 2962
2956 2963 * setup.py (isfile): Add manpages to list of dependent files to be
2957 2964 updated.
2958 2965
2959 2966 2004-08-27 Fernando Perez <fperez@colorado.edu>
2960 2967
2961 2968 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2962 2969 for now. They don't really work with standalone WX/GTK code
2963 2970 (though matplotlib IS working fine with both of those backends).
2964 2971 This will neeed much more testing. I disabled most things with
2965 2972 comments, so turning it back on later should be pretty easy.
2966 2973
2967 2974 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2968 2975 autocalling of expressions like r'foo', by modifying the line
2969 2976 split regexp. Closes
2970 2977 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2971 2978 Riley <ipythonbugs-AT-sabi.net>.
2972 2979 (InteractiveShell.mainloop): honor --nobanner with banner
2973 2980 extensions.
2974 2981
2975 2982 * IPython/Shell.py: Significant refactoring of all classes, so
2976 2983 that we can really support ALL matplotlib backends and threading
2977 2984 models (John spotted a bug with Tk which required this). Now we
2978 2985 should support single-threaded, WX-threads and GTK-threads, both
2979 2986 for generic code and for matplotlib.
2980 2987
2981 2988 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2982 2989 -pylab, to simplify things for users. Will also remove the pylab
2983 2990 profile, since now all of matplotlib configuration is directly
2984 2991 handled here. This also reduces startup time.
2985 2992
2986 2993 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2987 2994 shell wasn't being correctly called. Also in IPShellWX.
2988 2995
2989 2996 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2990 2997 fine-tune banner.
2991 2998
2992 2999 * IPython/numutils.py (spike): Deprecate these spike functions,
2993 3000 delete (long deprecated) gnuplot_exec handler.
2994 3001
2995 3002 2004-08-26 Fernando Perez <fperez@colorado.edu>
2996 3003
2997 3004 * ipython.1: Update for threading options, plus some others which
2998 3005 were missing.
2999 3006
3000 3007 * IPython/ipmaker.py (__call__): Added -wthread option for
3001 3008 wxpython thread handling. Make sure threading options are only
3002 3009 valid at the command line.
3003 3010
3004 3011 * scripts/ipython: moved shell selection into a factory function
3005 3012 in Shell.py, to keep the starter script to a minimum.
3006 3013
3007 3014 2004-08-25 Fernando Perez <fperez@colorado.edu>
3008 3015
3009 3016 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
3010 3017 John. Along with some recent changes he made to matplotlib, the
3011 3018 next versions of both systems should work very well together.
3012 3019
3013 3020 2004-08-24 Fernando Perez <fperez@colorado.edu>
3014 3021
3015 3022 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
3016 3023 tried to switch the profiling to using hotshot, but I'm getting
3017 3024 strange errors from prof.runctx() there. I may be misreading the
3018 3025 docs, but it looks weird. For now the profiling code will
3019 3026 continue to use the standard profiler.
3020 3027
3021 3028 2004-08-23 Fernando Perez <fperez@colorado.edu>
3022 3029
3023 3030 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
3024 3031 threaded shell, by John Hunter. It's not quite ready yet, but
3025 3032 close.
3026 3033
3027 3034 2004-08-22 Fernando Perez <fperez@colorado.edu>
3028 3035
3029 3036 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
3030 3037 in Magic and ultraTB.
3031 3038
3032 3039 * ipython.1: document threading options in manpage.
3033 3040
3034 3041 * scripts/ipython: Changed name of -thread option to -gthread,
3035 3042 since this is GTK specific. I want to leave the door open for a
3036 3043 -wthread option for WX, which will most likely be necessary. This
3037 3044 change affects usage and ipmaker as well.
3038 3045
3039 3046 * IPython/Shell.py (matplotlib_shell): Add a factory function to
3040 3047 handle the matplotlib shell issues. Code by John Hunter
3041 3048 <jdhunter-AT-nitace.bsd.uchicago.edu>.
3042 3049 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
3043 3050 broken (and disabled for end users) for now, but it puts the
3044 3051 infrastructure in place.
3045 3052
3046 3053 2004-08-21 Fernando Perez <fperez@colorado.edu>
3047 3054
3048 3055 * ipythonrc-pylab: Add matplotlib support.
3049 3056
3050 3057 * matplotlib_config.py: new files for matplotlib support, part of
3051 3058 the pylab profile.
3052 3059
3053 3060 * IPython/usage.py (__doc__): documented the threading options.
3054 3061
3055 3062 2004-08-20 Fernando Perez <fperez@colorado.edu>
3056 3063
3057 3064 * ipython: Modified the main calling routine to handle the -thread
3058 3065 and -mpthread options. This needs to be done as a top-level hack,
3059 3066 because it determines which class to instantiate for IPython
3060 3067 itself.
3061 3068
3062 3069 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
3063 3070 classes to support multithreaded GTK operation without blocking,
3064 3071 and matplotlib with all backends. This is a lot of still very
3065 3072 experimental code, and threads are tricky. So it may still have a
3066 3073 few rough edges... This code owes a lot to
3067 3074 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
3068 3075 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
3069 3076 to John Hunter for all the matplotlib work.
3070 3077
3071 3078 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
3072 3079 options for gtk thread and matplotlib support.
3073 3080
3074 3081 2004-08-16 Fernando Perez <fperez@colorado.edu>
3075 3082
3076 3083 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
3077 3084 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
3078 3085 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
3079 3086
3080 3087 2004-08-11 Fernando Perez <fperez@colorado.edu>
3081 3088
3082 3089 * setup.py (isfile): Fix build so documentation gets updated for
3083 3090 rpms (it was only done for .tgz builds).
3084 3091
3085 3092 2004-08-10 Fernando Perez <fperez@colorado.edu>
3086 3093
3087 3094 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
3088 3095
3089 3096 * iplib.py : Silence syntax error exceptions in tab-completion.
3090 3097
3091 3098 2004-08-05 Fernando Perez <fperez@colorado.edu>
3092 3099
3093 3100 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
3094 3101 'color off' mark for continuation prompts. This was causing long
3095 3102 continuation lines to mis-wrap.
3096 3103
3097 3104 2004-08-01 Fernando Perez <fperez@colorado.edu>
3098 3105
3099 3106 * IPython/ipmaker.py (make_IPython): Allow the shell class used
3100 3107 for building ipython to be a parameter. All this is necessary
3101 3108 right now to have a multithreaded version, but this insane
3102 3109 non-design will be cleaned up soon. For now, it's a hack that
3103 3110 works.
3104 3111
3105 3112 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
3106 3113 args in various places. No bugs so far, but it's a dangerous
3107 3114 practice.
3108 3115
3109 3116 2004-07-31 Fernando Perez <fperez@colorado.edu>
3110 3117
3111 3118 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
3112 3119 fix completion of files with dots in their names under most
3113 3120 profiles (pysh was OK because the completion order is different).
3114 3121
3115 3122 2004-07-27 Fernando Perez <fperez@colorado.edu>
3116 3123
3117 3124 * IPython/iplib.py (InteractiveShell.__init__): build dict of
3118 3125 keywords manually, b/c the one in keyword.py was removed in python
3119 3126 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
3120 3127 This is NOT a bug under python 2.3 and earlier.
3121 3128
3122 3129 2004-07-26 Fernando Perez <fperez@colorado.edu>
3123 3130
3124 3131 * IPython/ultraTB.py (VerboseTB.text): Add another
3125 3132 linecache.checkcache() call to try to prevent inspect.py from
3126 3133 crashing under python 2.3. I think this fixes
3127 3134 http://www.scipy.net/roundup/ipython/issue17.
3128 3135
3129 3136 2004-07-26 *** Released version 0.6.2
3130 3137
3131 3138 2004-07-26 Fernando Perez <fperez@colorado.edu>
3132 3139
3133 3140 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
3134 3141 fail for any number.
3135 3142 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
3136 3143 empty bookmarks.
3137 3144
3138 3145 2004-07-26 *** Released version 0.6.1
3139 3146
3140 3147 2004-07-26 Fernando Perez <fperez@colorado.edu>
3141 3148
3142 3149 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
3143 3150
3144 3151 * IPython/iplib.py (protect_filename): Applied Ville's patch for
3145 3152 escaping '()[]{}' in filenames.
3146 3153
3147 3154 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
3148 3155 Python 2.2 users who lack a proper shlex.split.
3149 3156
3150 3157 2004-07-19 Fernando Perez <fperez@colorado.edu>
3151 3158
3152 3159 * IPython/iplib.py (InteractiveShell.init_readline): Add support
3153 3160 for reading readline's init file. I follow the normal chain:
3154 3161 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
3155 3162 report by Mike Heeter. This closes
3156 3163 http://www.scipy.net/roundup/ipython/issue16.
3157 3164
3158 3165 2004-07-18 Fernando Perez <fperez@colorado.edu>
3159 3166
3160 3167 * IPython/iplib.py (__init__): Add better handling of '\' under
3161 3168 Win32 for filenames. After a patch by Ville.
3162 3169
3163 3170 2004-07-17 Fernando Perez <fperez@colorado.edu>
3164 3171
3165 3172 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3166 3173 autocalling would be triggered for 'foo is bar' if foo is
3167 3174 callable. I also cleaned up the autocall detection code to use a
3168 3175 regexp, which is faster. Bug reported by Alexander Schmolck.
3169 3176
3170 3177 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
3171 3178 '?' in them would confuse the help system. Reported by Alex
3172 3179 Schmolck.
3173 3180
3174 3181 2004-07-16 Fernando Perez <fperez@colorado.edu>
3175 3182
3176 3183 * IPython/GnuplotInteractive.py (__all__): added plot2.
3177 3184
3178 3185 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
3179 3186 plotting dictionaries, lists or tuples of 1d arrays.
3180 3187
3181 3188 * IPython/Magic.py (Magic.magic_hist): small clenaups and
3182 3189 optimizations.
3183 3190
3184 3191 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
3185 3192 the information which was there from Janko's original IPP code:
3186 3193
3187 3194 03.05.99 20:53 porto.ifm.uni-kiel.de
3188 3195 --Started changelog.
3189 3196 --make clear do what it say it does
3190 3197 --added pretty output of lines from inputcache
3191 3198 --Made Logger a mixin class, simplifies handling of switches
3192 3199 --Added own completer class. .string<TAB> expands to last history
3193 3200 line which starts with string. The new expansion is also present
3194 3201 with Ctrl-r from the readline library. But this shows, who this
3195 3202 can be done for other cases.
3196 3203 --Added convention that all shell functions should accept a
3197 3204 parameter_string This opens the door for different behaviour for
3198 3205 each function. @cd is a good example of this.
3199 3206
3200 3207 04.05.99 12:12 porto.ifm.uni-kiel.de
3201 3208 --added logfile rotation
3202 3209 --added new mainloop method which freezes first the namespace
3203 3210
3204 3211 07.05.99 21:24 porto.ifm.uni-kiel.de
3205 3212 --added the docreader classes. Now there is a help system.
3206 3213 -This is only a first try. Currently it's not easy to put new
3207 3214 stuff in the indices. But this is the way to go. Info would be
3208 3215 better, but HTML is every where and not everybody has an info
3209 3216 system installed and it's not so easy to change html-docs to info.
3210 3217 --added global logfile option
3211 3218 --there is now a hook for object inspection method pinfo needs to
3212 3219 be provided for this. Can be reached by two '??'.
3213 3220
3214 3221 08.05.99 20:51 porto.ifm.uni-kiel.de
3215 3222 --added a README
3216 3223 --bug in rc file. Something has changed so functions in the rc
3217 3224 file need to reference the shell and not self. Not clear if it's a
3218 3225 bug or feature.
3219 3226 --changed rc file for new behavior
3220 3227
3221 3228 2004-07-15 Fernando Perez <fperez@colorado.edu>
3222 3229
3223 3230 * IPython/Logger.py (Logger.log): fixed recent bug where the input
3224 3231 cache was falling out of sync in bizarre manners when multi-line
3225 3232 input was present. Minor optimizations and cleanup.
3226 3233
3227 3234 (Logger): Remove old Changelog info for cleanup. This is the
3228 3235 information which was there from Janko's original code:
3229 3236
3230 3237 Changes to Logger: - made the default log filename a parameter
3231 3238
3232 3239 - put a check for lines beginning with !@? in log(). Needed
3233 3240 (even if the handlers properly log their lines) for mid-session
3234 3241 logging activation to work properly. Without this, lines logged
3235 3242 in mid session, which get read from the cache, would end up
3236 3243 'bare' (with !@? in the open) in the log. Now they are caught
3237 3244 and prepended with a #.
3238 3245
3239 3246 * IPython/iplib.py (InteractiveShell.init_readline): added check
3240 3247 in case MagicCompleter fails to be defined, so we don't crash.
3241 3248
3242 3249 2004-07-13 Fernando Perez <fperez@colorado.edu>
3243 3250
3244 3251 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
3245 3252 of EPS if the requested filename ends in '.eps'.
3246 3253
3247 3254 2004-07-04 Fernando Perez <fperez@colorado.edu>
3248 3255
3249 3256 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
3250 3257 escaping of quotes when calling the shell.
3251 3258
3252 3259 2004-07-02 Fernando Perez <fperez@colorado.edu>
3253 3260
3254 3261 * IPython/Prompts.py (CachedOutput.update): Fix problem with
3255 3262 gettext not working because we were clobbering '_'. Fixes
3256 3263 http://www.scipy.net/roundup/ipython/issue6.
3257 3264
3258 3265 2004-07-01 Fernando Perez <fperez@colorado.edu>
3259 3266
3260 3267 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
3261 3268 into @cd. Patch by Ville.
3262 3269
3263 3270 * IPython/iplib.py (InteractiveShell.post_config_initialization):
3264 3271 new function to store things after ipmaker runs. Patch by Ville.
3265 3272 Eventually this will go away once ipmaker is removed and the class
3266 3273 gets cleaned up, but for now it's ok. Key functionality here is
3267 3274 the addition of the persistent storage mechanism, a dict for
3268 3275 keeping data across sessions (for now just bookmarks, but more can
3269 3276 be implemented later).
3270 3277
3271 3278 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
3272 3279 persistent across sections. Patch by Ville, I modified it
3273 3280 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
3274 3281 added a '-l' option to list all bookmarks.
3275 3282
3276 3283 * IPython/iplib.py (InteractiveShell.atexit_operations): new
3277 3284 center for cleanup. Registered with atexit.register(). I moved
3278 3285 here the old exit_cleanup(). After a patch by Ville.
3279 3286
3280 3287 * IPython/Magic.py (get_py_filename): added '~' to the accepted
3281 3288 characters in the hacked shlex_split for python 2.2.
3282 3289
3283 3290 * IPython/iplib.py (file_matches): more fixes to filenames with
3284 3291 whitespace in them. It's not perfect, but limitations in python's
3285 3292 readline make it impossible to go further.
3286 3293
3287 3294 2004-06-29 Fernando Perez <fperez@colorado.edu>
3288 3295
3289 3296 * IPython/iplib.py (file_matches): escape whitespace correctly in
3290 3297 filename completions. Bug reported by Ville.
3291 3298
3292 3299 2004-06-28 Fernando Perez <fperez@colorado.edu>
3293 3300
3294 3301 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
3295 3302 the history file will be called 'history-PROFNAME' (or just
3296 3303 'history' if no profile is loaded). I was getting annoyed at
3297 3304 getting my Numerical work history clobbered by pysh sessions.
3298 3305
3299 3306 * IPython/iplib.py (InteractiveShell.__init__): Internal
3300 3307 getoutputerror() function so that we can honor the system_verbose
3301 3308 flag for _all_ system calls. I also added escaping of #
3302 3309 characters here to avoid confusing Itpl.
3303 3310
3304 3311 * IPython/Magic.py (shlex_split): removed call to shell in
3305 3312 parse_options and replaced it with shlex.split(). The annoying
3306 3313 part was that in Python 2.2, shlex.split() doesn't exist, so I had
3307 3314 to backport it from 2.3, with several frail hacks (the shlex
3308 3315 module is rather limited in 2.2). Thanks to a suggestion by Ville
3309 3316 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
3310 3317 problem.
3311 3318
3312 3319 (Magic.magic_system_verbose): new toggle to print the actual
3313 3320 system calls made by ipython. Mainly for debugging purposes.
3314 3321
3315 3322 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
3316 3323 doesn't support persistence. Reported (and fix suggested) by
3317 3324 Travis Caldwell <travis_caldwell2000@yahoo.com>.
3318 3325
3319 3326 2004-06-26 Fernando Perez <fperez@colorado.edu>
3320 3327
3321 3328 * IPython/Logger.py (Logger.log): fix to handle correctly empty
3322 3329 continue prompts.
3323 3330
3324 3331 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
3325 3332 function (basically a big docstring) and a few more things here to
3326 3333 speedup startup. pysh.py is now very lightweight. We want because
3327 3334 it gets execfile'd, while InterpreterExec gets imported, so
3328 3335 byte-compilation saves time.
3329 3336
3330 3337 2004-06-25 Fernando Perez <fperez@colorado.edu>
3331 3338
3332 3339 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
3333 3340 -NUM', which was recently broken.
3334 3341
3335 3342 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
3336 3343 in multi-line input (but not !!, which doesn't make sense there).
3337 3344
3338 3345 * IPython/UserConfig/ipythonrc: made autoindent on by default.
3339 3346 It's just too useful, and people can turn it off in the less
3340 3347 common cases where it's a problem.
3341 3348
3342 3349 2004-06-24 Fernando Perez <fperez@colorado.edu>
3343 3350
3344 3351 * IPython/iplib.py (InteractiveShell._prefilter): big change -
3345 3352 special syntaxes (like alias calling) is now allied in multi-line
3346 3353 input. This is still _very_ experimental, but it's necessary for
3347 3354 efficient shell usage combining python looping syntax with system
3348 3355 calls. For now it's restricted to aliases, I don't think it
3349 3356 really even makes sense to have this for magics.
3350 3357
3351 3358 2004-06-23 Fernando Perez <fperez@colorado.edu>
3352 3359
3353 3360 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
3354 3361 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
3355 3362
3356 3363 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
3357 3364 extensions under Windows (after code sent by Gary Bishop). The
3358 3365 extensions considered 'executable' are stored in IPython's rc
3359 3366 structure as win_exec_ext.
3360 3367
3361 3368 * IPython/genutils.py (shell): new function, like system() but
3362 3369 without return value. Very useful for interactive shell work.
3363 3370
3364 3371 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
3365 3372 delete aliases.
3366 3373
3367 3374 * IPython/iplib.py (InteractiveShell.alias_table_update): make
3368 3375 sure that the alias table doesn't contain python keywords.
3369 3376
3370 3377 2004-06-21 Fernando Perez <fperez@colorado.edu>
3371 3378
3372 3379 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
3373 3380 non-existent items are found in $PATH. Reported by Thorsten.
3374 3381
3375 3382 2004-06-20 Fernando Perez <fperez@colorado.edu>
3376 3383
3377 3384 * IPython/iplib.py (complete): modified the completer so that the
3378 3385 order of priorities can be easily changed at runtime.
3379 3386
3380 3387 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
3381 3388 Modified to auto-execute all lines beginning with '~', '/' or '.'.
3382 3389
3383 3390 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
3384 3391 expand Python variables prepended with $ in all system calls. The
3385 3392 same was done to InteractiveShell.handle_shell_escape. Now all
3386 3393 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
3387 3394 expansion of python variables and expressions according to the
3388 3395 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
3389 3396
3390 3397 Though PEP-215 has been rejected, a similar (but simpler) one
3391 3398 seems like it will go into Python 2.4, PEP-292 -
3392 3399 http://www.python.org/peps/pep-0292.html.
3393 3400
3394 3401 I'll keep the full syntax of PEP-215, since IPython has since the
3395 3402 start used Ka-Ping Yee's reference implementation discussed there
3396 3403 (Itpl), and I actually like the powerful semantics it offers.
3397 3404
3398 3405 In order to access normal shell variables, the $ has to be escaped
3399 3406 via an extra $. For example:
3400 3407
3401 3408 In [7]: PATH='a python variable'
3402 3409
3403 3410 In [8]: !echo $PATH
3404 3411 a python variable
3405 3412
3406 3413 In [9]: !echo $$PATH
3407 3414 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
3408 3415
3409 3416 (Magic.parse_options): escape $ so the shell doesn't evaluate
3410 3417 things prematurely.
3411 3418
3412 3419 * IPython/iplib.py (InteractiveShell.call_alias): added the
3413 3420 ability for aliases to expand python variables via $.
3414 3421
3415 3422 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
3416 3423 system, now there's a @rehash/@rehashx pair of magics. These work
3417 3424 like the csh rehash command, and can be invoked at any time. They
3418 3425 build a table of aliases to everything in the user's $PATH
3419 3426 (@rehash uses everything, @rehashx is slower but only adds
3420 3427 executable files). With this, the pysh.py-based shell profile can
3421 3428 now simply call rehash upon startup, and full access to all
3422 3429 programs in the user's path is obtained.
3423 3430
3424 3431 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
3425 3432 functionality is now fully in place. I removed the old dynamic
3426 3433 code generation based approach, in favor of a much lighter one
3427 3434 based on a simple dict. The advantage is that this allows me to
3428 3435 now have thousands of aliases with negligible cost (unthinkable
3429 3436 with the old system).
3430 3437
3431 3438 2004-06-19 Fernando Perez <fperez@colorado.edu>
3432 3439
3433 3440 * IPython/iplib.py (__init__): extended MagicCompleter class to
3434 3441 also complete (last in priority) on user aliases.
3435 3442
3436 3443 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
3437 3444 call to eval.
3438 3445 (ItplNS.__init__): Added a new class which functions like Itpl,
3439 3446 but allows configuring the namespace for the evaluation to occur
3440 3447 in.
3441 3448
3442 3449 2004-06-18 Fernando Perez <fperez@colorado.edu>
3443 3450
3444 3451 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
3445 3452 better message when 'exit' or 'quit' are typed (a common newbie
3446 3453 confusion).
3447 3454
3448 3455 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
3449 3456 check for Windows users.
3450 3457
3451 3458 * IPython/iplib.py (InteractiveShell.user_setup): removed
3452 3459 disabling of colors for Windows. I'll test at runtime and issue a
3453 3460 warning if Gary's readline isn't found, as to nudge users to
3454 3461 download it.
3455 3462
3456 3463 2004-06-16 Fernando Perez <fperez@colorado.edu>
3457 3464
3458 3465 * IPython/genutils.py (Stream.__init__): changed to print errors
3459 3466 to sys.stderr. I had a circular dependency here. Now it's
3460 3467 possible to run ipython as IDLE's shell (consider this pre-alpha,
3461 3468 since true stdout things end up in the starting terminal instead
3462 3469 of IDLE's out).
3463 3470
3464 3471 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
3465 3472 users who haven't # updated their prompt_in2 definitions. Remove
3466 3473 eventually.
3467 3474 (multiple_replace): added credit to original ASPN recipe.
3468 3475
3469 3476 2004-06-15 Fernando Perez <fperez@colorado.edu>
3470 3477
3471 3478 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3472 3479 list of auto-defined aliases.
3473 3480
3474 3481 2004-06-13 Fernando Perez <fperez@colorado.edu>
3475 3482
3476 3483 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3477 3484 install was really requested (so setup.py can be used for other
3478 3485 things under Windows).
3479 3486
3480 3487 2004-06-10 Fernando Perez <fperez@colorado.edu>
3481 3488
3482 3489 * IPython/Logger.py (Logger.create_log): Manually remove any old
3483 3490 backup, since os.remove may fail under Windows. Fixes bug
3484 3491 reported by Thorsten.
3485 3492
3486 3493 2004-06-09 Fernando Perez <fperez@colorado.edu>
3487 3494
3488 3495 * examples/example-embed.py: fixed all references to %n (replaced
3489 3496 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3490 3497 for all examples and the manual as well.
3491 3498
3492 3499 2004-06-08 Fernando Perez <fperez@colorado.edu>
3493 3500
3494 3501 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3495 3502 alignment and color management. All 3 prompt subsystems now
3496 3503 inherit from BasePrompt.
3497 3504
3498 3505 * tools/release: updates for windows installer build and tag rpms
3499 3506 with python version (since paths are fixed).
3500 3507
3501 3508 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3502 3509 which will become eventually obsolete. Also fixed the default
3503 3510 prompt_in2 to use \D, so at least new users start with the correct
3504 3511 defaults.
3505 3512 WARNING: Users with existing ipythonrc files will need to apply
3506 3513 this fix manually!
3507 3514
3508 3515 * setup.py: make windows installer (.exe). This is finally the
3509 3516 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3510 3517 which I hadn't included because it required Python 2.3 (or recent
3511 3518 distutils).
3512 3519
3513 3520 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3514 3521 usage of new '\D' escape.
3515 3522
3516 3523 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3517 3524 lacks os.getuid())
3518 3525 (CachedOutput.set_colors): Added the ability to turn coloring
3519 3526 on/off with @colors even for manually defined prompt colors. It
3520 3527 uses a nasty global, but it works safely and via the generic color
3521 3528 handling mechanism.
3522 3529 (Prompt2.__init__): Introduced new escape '\D' for continuation
3523 3530 prompts. It represents the counter ('\#') as dots.
3524 3531 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3525 3532 need to update their ipythonrc files and replace '%n' with '\D' in
3526 3533 their prompt_in2 settings everywhere. Sorry, but there's
3527 3534 otherwise no clean way to get all prompts to properly align. The
3528 3535 ipythonrc shipped with IPython has been updated.
3529 3536
3530 3537 2004-06-07 Fernando Perez <fperez@colorado.edu>
3531 3538
3532 3539 * setup.py (isfile): Pass local_icons option to latex2html, so the
3533 3540 resulting HTML file is self-contained. Thanks to
3534 3541 dryice-AT-liu.com.cn for the tip.
3535 3542
3536 3543 * pysh.py: I created a new profile 'shell', which implements a
3537 3544 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3538 3545 system shell, nor will it become one anytime soon. It's mainly
3539 3546 meant to illustrate the use of the new flexible bash-like prompts.
3540 3547 I guess it could be used by hardy souls for true shell management,
3541 3548 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3542 3549 profile. This uses the InterpreterExec extension provided by
3543 3550 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3544 3551
3545 3552 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3546 3553 auto-align itself with the length of the previous input prompt
3547 3554 (taking into account the invisible color escapes).
3548 3555 (CachedOutput.__init__): Large restructuring of this class. Now
3549 3556 all three prompts (primary1, primary2, output) are proper objects,
3550 3557 managed by the 'parent' CachedOutput class. The code is still a
3551 3558 bit hackish (all prompts share state via a pointer to the cache),
3552 3559 but it's overall far cleaner than before.
3553 3560
3554 3561 * IPython/genutils.py (getoutputerror): modified to add verbose,
3555 3562 debug and header options. This makes the interface of all getout*
3556 3563 functions uniform.
3557 3564 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3558 3565
3559 3566 * IPython/Magic.py (Magic.default_option): added a function to
3560 3567 allow registering default options for any magic command. This
3561 3568 makes it easy to have profiles which customize the magics globally
3562 3569 for a certain use. The values set through this function are
3563 3570 picked up by the parse_options() method, which all magics should
3564 3571 use to parse their options.
3565 3572
3566 3573 * IPython/genutils.py (warn): modified the warnings framework to
3567 3574 use the Term I/O class. I'm trying to slowly unify all of
3568 3575 IPython's I/O operations to pass through Term.
3569 3576
3570 3577 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3571 3578 the secondary prompt to correctly match the length of the primary
3572 3579 one for any prompt. Now multi-line code will properly line up
3573 3580 even for path dependent prompts, such as the new ones available
3574 3581 via the prompt_specials.
3575 3582
3576 3583 2004-06-06 Fernando Perez <fperez@colorado.edu>
3577 3584
3578 3585 * IPython/Prompts.py (prompt_specials): Added the ability to have
3579 3586 bash-like special sequences in the prompts, which get
3580 3587 automatically expanded. Things like hostname, current working
3581 3588 directory and username are implemented already, but it's easy to
3582 3589 add more in the future. Thanks to a patch by W.J. van der Laan
3583 3590 <gnufnork-AT-hetdigitalegat.nl>
3584 3591 (prompt_specials): Added color support for prompt strings, so
3585 3592 users can define arbitrary color setups for their prompts.
3586 3593
3587 3594 2004-06-05 Fernando Perez <fperez@colorado.edu>
3588 3595
3589 3596 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3590 3597 code to load Gary Bishop's readline and configure it
3591 3598 automatically. Thanks to Gary for help on this.
3592 3599
3593 3600 2004-06-01 Fernando Perez <fperez@colorado.edu>
3594 3601
3595 3602 * IPython/Logger.py (Logger.create_log): fix bug for logging
3596 3603 with no filename (previous fix was incomplete).
3597 3604
3598 3605 2004-05-25 Fernando Perez <fperez@colorado.edu>
3599 3606
3600 3607 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3601 3608 parens would get passed to the shell.
3602 3609
3603 3610 2004-05-20 Fernando Perez <fperez@colorado.edu>
3604 3611
3605 3612 * IPython/Magic.py (Magic.magic_prun): changed default profile
3606 3613 sort order to 'time' (the more common profiling need).
3607 3614
3608 3615 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3609 3616 so that source code shown is guaranteed in sync with the file on
3610 3617 disk (also changed in psource). Similar fix to the one for
3611 3618 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3612 3619 <yann.ledu-AT-noos.fr>.
3613 3620
3614 3621 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3615 3622 with a single option would not be correctly parsed. Closes
3616 3623 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3617 3624 introduced in 0.6.0 (on 2004-05-06).
3618 3625
3619 3626 2004-05-13 *** Released version 0.6.0
3620 3627
3621 3628 2004-05-13 Fernando Perez <fperez@colorado.edu>
3622 3629
3623 3630 * debian/: Added debian/ directory to CVS, so that debian support
3624 3631 is publicly accessible. The debian package is maintained by Jack
3625 3632 Moffit <jack-AT-xiph.org>.
3626 3633
3627 3634 * Documentation: included the notes about an ipython-based system
3628 3635 shell (the hypothetical 'pysh') into the new_design.pdf document,
3629 3636 so that these ideas get distributed to users along with the
3630 3637 official documentation.
3631 3638
3632 3639 2004-05-10 Fernando Perez <fperez@colorado.edu>
3633 3640
3634 3641 * IPython/Logger.py (Logger.create_log): fix recently introduced
3635 3642 bug (misindented line) where logstart would fail when not given an
3636 3643 explicit filename.
3637 3644
3638 3645 2004-05-09 Fernando Perez <fperez@colorado.edu>
3639 3646
3640 3647 * IPython/Magic.py (Magic.parse_options): skip system call when
3641 3648 there are no options to look for. Faster, cleaner for the common
3642 3649 case.
3643 3650
3644 3651 * Documentation: many updates to the manual: describing Windows
3645 3652 support better, Gnuplot updates, credits, misc small stuff. Also
3646 3653 updated the new_design doc a bit.
3647 3654
3648 3655 2004-05-06 *** Released version 0.6.0.rc1
3649 3656
3650 3657 2004-05-06 Fernando Perez <fperez@colorado.edu>
3651 3658
3652 3659 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3653 3660 operations to use the vastly more efficient list/''.join() method.
3654 3661 (FormattedTB.text): Fix
3655 3662 http://www.scipy.net/roundup/ipython/issue12 - exception source
3656 3663 extract not updated after reload. Thanks to Mike Salib
3657 3664 <msalib-AT-mit.edu> for pinning the source of the problem.
3658 3665 Fortunately, the solution works inside ipython and doesn't require
3659 3666 any changes to python proper.
3660 3667
3661 3668 * IPython/Magic.py (Magic.parse_options): Improved to process the
3662 3669 argument list as a true shell would (by actually using the
3663 3670 underlying system shell). This way, all @magics automatically get
3664 3671 shell expansion for variables. Thanks to a comment by Alex
3665 3672 Schmolck.
3666 3673
3667 3674 2004-04-04 Fernando Perez <fperez@colorado.edu>
3668 3675
3669 3676 * IPython/iplib.py (InteractiveShell.interact): Added a special
3670 3677 trap for a debugger quit exception, which is basically impossible
3671 3678 to handle by normal mechanisms, given what pdb does to the stack.
3672 3679 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3673 3680
3674 3681 2004-04-03 Fernando Perez <fperez@colorado.edu>
3675 3682
3676 3683 * IPython/genutils.py (Term): Standardized the names of the Term
3677 3684 class streams to cin/cout/cerr, following C++ naming conventions
3678 3685 (I can't use in/out/err because 'in' is not a valid attribute
3679 3686 name).
3680 3687
3681 3688 * IPython/iplib.py (InteractiveShell.interact): don't increment
3682 3689 the prompt if there's no user input. By Daniel 'Dang' Griffith
3683 3690 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3684 3691 Francois Pinard.
3685 3692
3686 3693 2004-04-02 Fernando Perez <fperez@colorado.edu>
3687 3694
3688 3695 * IPython/genutils.py (Stream.__init__): Modified to survive at
3689 3696 least importing in contexts where stdin/out/err aren't true file
3690 3697 objects, such as PyCrust (they lack fileno() and mode). However,
3691 3698 the recovery facilities which rely on these things existing will
3692 3699 not work.
3693 3700
3694 3701 2004-04-01 Fernando Perez <fperez@colorado.edu>
3695 3702
3696 3703 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3697 3704 use the new getoutputerror() function, so it properly
3698 3705 distinguishes stdout/err.
3699 3706
3700 3707 * IPython/genutils.py (getoutputerror): added a function to
3701 3708 capture separately the standard output and error of a command.
3702 3709 After a comment from dang on the mailing lists. This code is
3703 3710 basically a modified version of commands.getstatusoutput(), from
3704 3711 the standard library.
3705 3712
3706 3713 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3707 3714 '!!' as a special syntax (shorthand) to access @sx.
3708 3715
3709 3716 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3710 3717 command and return its output as a list split on '\n'.
3711 3718
3712 3719 2004-03-31 Fernando Perez <fperez@colorado.edu>
3713 3720
3714 3721 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3715 3722 method to dictionaries used as FakeModule instances if they lack
3716 3723 it. At least pydoc in python2.3 breaks for runtime-defined
3717 3724 functions without this hack. At some point I need to _really_
3718 3725 understand what FakeModule is doing, because it's a gross hack.
3719 3726 But it solves Arnd's problem for now...
3720 3727
3721 3728 2004-02-27 Fernando Perez <fperez@colorado.edu>
3722 3729
3723 3730 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3724 3731 mode would behave erratically. Also increased the number of
3725 3732 possible logs in rotate mod to 999. Thanks to Rod Holland
3726 3733 <rhh@StructureLABS.com> for the report and fixes.
3727 3734
3728 3735 2004-02-26 Fernando Perez <fperez@colorado.edu>
3729 3736
3730 3737 * IPython/genutils.py (page): Check that the curses module really
3731 3738 has the initscr attribute before trying to use it. For some
3732 3739 reason, the Solaris curses module is missing this. I think this
3733 3740 should be considered a Solaris python bug, but I'm not sure.
3734 3741
3735 3742 2004-01-17 Fernando Perez <fperez@colorado.edu>
3736 3743
3737 3744 * IPython/genutils.py (Stream.__init__): Changes to try to make
3738 3745 ipython robust against stdin/out/err being closed by the user.
3739 3746 This is 'user error' (and blocks a normal python session, at least
3740 3747 the stdout case). However, Ipython should be able to survive such
3741 3748 instances of abuse as gracefully as possible. To simplify the
3742 3749 coding and maintain compatibility with Gary Bishop's Term
3743 3750 contributions, I've made use of classmethods for this. I think
3744 3751 this introduces a dependency on python 2.2.
3745 3752
3746 3753 2004-01-13 Fernando Perez <fperez@colorado.edu>
3747 3754
3748 3755 * IPython/numutils.py (exp_safe): simplified the code a bit and
3749 3756 removed the need for importing the kinds module altogether.
3750 3757
3751 3758 2004-01-06 Fernando Perez <fperez@colorado.edu>
3752 3759
3753 3760 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3754 3761 a magic function instead, after some community feedback. No
3755 3762 special syntax will exist for it, but its name is deliberately
3756 3763 very short.
3757 3764
3758 3765 2003-12-20 Fernando Perez <fperez@colorado.edu>
3759 3766
3760 3767 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3761 3768 new functionality, to automagically assign the result of a shell
3762 3769 command to a variable. I'll solicit some community feedback on
3763 3770 this before making it permanent.
3764 3771
3765 3772 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3766 3773 requested about callables for which inspect couldn't obtain a
3767 3774 proper argspec. Thanks to a crash report sent by Etienne
3768 3775 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3769 3776
3770 3777 2003-12-09 Fernando Perez <fperez@colorado.edu>
3771 3778
3772 3779 * IPython/genutils.py (page): patch for the pager to work across
3773 3780 various versions of Windows. By Gary Bishop.
3774 3781
3775 3782 2003-12-04 Fernando Perez <fperez@colorado.edu>
3776 3783
3777 3784 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3778 3785 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3779 3786 While I tested this and it looks ok, there may still be corner
3780 3787 cases I've missed.
3781 3788
3782 3789 2003-12-01 Fernando Perez <fperez@colorado.edu>
3783 3790
3784 3791 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3785 3792 where a line like 'p,q=1,2' would fail because the automagic
3786 3793 system would be triggered for @p.
3787 3794
3788 3795 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3789 3796 cleanups, code unmodified.
3790 3797
3791 3798 * IPython/genutils.py (Term): added a class for IPython to handle
3792 3799 output. In most cases it will just be a proxy for stdout/err, but
3793 3800 having this allows modifications to be made for some platforms,
3794 3801 such as handling color escapes under Windows. All of this code
3795 3802 was contributed by Gary Bishop, with minor modifications by me.
3796 3803 The actual changes affect many files.
3797 3804
3798 3805 2003-11-30 Fernando Perez <fperez@colorado.edu>
3799 3806
3800 3807 * IPython/iplib.py (file_matches): new completion code, courtesy
3801 3808 of Jeff Collins. This enables filename completion again under
3802 3809 python 2.3, which disabled it at the C level.
3803 3810
3804 3811 2003-11-11 Fernando Perez <fperez@colorado.edu>
3805 3812
3806 3813 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3807 3814 for Numeric.array(map(...)), but often convenient.
3808 3815
3809 3816 2003-11-05 Fernando Perez <fperez@colorado.edu>
3810 3817
3811 3818 * IPython/numutils.py (frange): Changed a call from int() to
3812 3819 int(round()) to prevent a problem reported with arange() in the
3813 3820 numpy list.
3814 3821
3815 3822 2003-10-06 Fernando Perez <fperez@colorado.edu>
3816 3823
3817 3824 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3818 3825 prevent crashes if sys lacks an argv attribute (it happens with
3819 3826 embedded interpreters which build a bare-bones sys module).
3820 3827 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3821 3828
3822 3829 2003-09-24 Fernando Perez <fperez@colorado.edu>
3823 3830
3824 3831 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3825 3832 to protect against poorly written user objects where __getattr__
3826 3833 raises exceptions other than AttributeError. Thanks to a bug
3827 3834 report by Oliver Sander <osander-AT-gmx.de>.
3828 3835
3829 3836 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3830 3837 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3831 3838
3832 3839 2003-09-09 Fernando Perez <fperez@colorado.edu>
3833 3840
3834 3841 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3835 3842 unpacking a list whith a callable as first element would
3836 3843 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3837 3844 Collins.
3838 3845
3839 3846 2003-08-25 *** Released version 0.5.0
3840 3847
3841 3848 2003-08-22 Fernando Perez <fperez@colorado.edu>
3842 3849
3843 3850 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3844 3851 improperly defined user exceptions. Thanks to feedback from Mark
3845 3852 Russell <mrussell-AT-verio.net>.
3846 3853
3847 3854 2003-08-20 Fernando Perez <fperez@colorado.edu>
3848 3855
3849 3856 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3850 3857 printing so that it would print multi-line string forms starting
3851 3858 with a new line. This way the formatting is better respected for
3852 3859 objects which work hard to make nice string forms.
3853 3860
3854 3861 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3855 3862 autocall would overtake data access for objects with both
3856 3863 __getitem__ and __call__.
3857 3864
3858 3865 2003-08-19 *** Released version 0.5.0-rc1
3859 3866
3860 3867 2003-08-19 Fernando Perez <fperez@colorado.edu>
3861 3868
3862 3869 * IPython/deep_reload.py (load_tail): single tiny change here
3863 3870 seems to fix the long-standing bug of dreload() failing to work
3864 3871 for dotted names. But this module is pretty tricky, so I may have
3865 3872 missed some subtlety. Needs more testing!.
3866 3873
3867 3874 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3868 3875 exceptions which have badly implemented __str__ methods.
3869 3876 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3870 3877 which I've been getting reports about from Python 2.3 users. I
3871 3878 wish I had a simple test case to reproduce the problem, so I could
3872 3879 either write a cleaner workaround or file a bug report if
3873 3880 necessary.
3874 3881
3875 3882 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3876 3883 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3877 3884 a bug report by Tjabo Kloppenburg.
3878 3885
3879 3886 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3880 3887 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3881 3888 seems rather unstable. Thanks to a bug report by Tjabo
3882 3889 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3883 3890
3884 3891 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3885 3892 this out soon because of the critical fixes in the inner loop for
3886 3893 generators.
3887 3894
3888 3895 * IPython/Magic.py (Magic.getargspec): removed. This (and
3889 3896 _get_def) have been obsoleted by OInspect for a long time, I
3890 3897 hadn't noticed that they were dead code.
3891 3898 (Magic._ofind): restored _ofind functionality for a few literals
3892 3899 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3893 3900 for things like "hello".capitalize?, since that would require a
3894 3901 potentially dangerous eval() again.
3895 3902
3896 3903 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3897 3904 logic a bit more to clean up the escapes handling and minimize the
3898 3905 use of _ofind to only necessary cases. The interactive 'feel' of
3899 3906 IPython should have improved quite a bit with the changes in
3900 3907 _prefilter and _ofind (besides being far safer than before).
3901 3908
3902 3909 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3903 3910 obscure, never reported). Edit would fail to find the object to
3904 3911 edit under some circumstances.
3905 3912 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3906 3913 which were causing double-calling of generators. Those eval calls
3907 3914 were _very_ dangerous, since code with side effects could be
3908 3915 triggered. As they say, 'eval is evil'... These were the
3909 3916 nastiest evals in IPython. Besides, _ofind is now far simpler,
3910 3917 and it should also be quite a bit faster. Its use of inspect is
3911 3918 also safer, so perhaps some of the inspect-related crashes I've
3912 3919 seen lately with Python 2.3 might be taken care of. That will
3913 3920 need more testing.
3914 3921
3915 3922 2003-08-17 Fernando Perez <fperez@colorado.edu>
3916 3923
3917 3924 * IPython/iplib.py (InteractiveShell._prefilter): significant
3918 3925 simplifications to the logic for handling user escapes. Faster
3919 3926 and simpler code.
3920 3927
3921 3928 2003-08-14 Fernando Perez <fperez@colorado.edu>
3922 3929
3923 3930 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3924 3931 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3925 3932 but it should be quite a bit faster. And the recursive version
3926 3933 generated O(log N) intermediate storage for all rank>1 arrays,
3927 3934 even if they were contiguous.
3928 3935 (l1norm): Added this function.
3929 3936 (norm): Added this function for arbitrary norms (including
3930 3937 l-infinity). l1 and l2 are still special cases for convenience
3931 3938 and speed.
3932 3939
3933 3940 2003-08-03 Fernando Perez <fperez@colorado.edu>
3934 3941
3935 3942 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3936 3943 exceptions, which now raise PendingDeprecationWarnings in Python
3937 3944 2.3. There were some in Magic and some in Gnuplot2.
3938 3945
3939 3946 2003-06-30 Fernando Perez <fperez@colorado.edu>
3940 3947
3941 3948 * IPython/genutils.py (page): modified to call curses only for
3942 3949 terminals where TERM=='xterm'. After problems under many other
3943 3950 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3944 3951
3945 3952 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3946 3953 would be triggered when readline was absent. This was just an old
3947 3954 debugging statement I'd forgotten to take out.
3948 3955
3949 3956 2003-06-20 Fernando Perez <fperez@colorado.edu>
3950 3957
3951 3958 * IPython/genutils.py (clock): modified to return only user time
3952 3959 (not counting system time), after a discussion on scipy. While
3953 3960 system time may be a useful quantity occasionally, it may much
3954 3961 more easily be skewed by occasional swapping or other similar
3955 3962 activity.
3956 3963
3957 3964 2003-06-05 Fernando Perez <fperez@colorado.edu>
3958 3965
3959 3966 * IPython/numutils.py (identity): new function, for building
3960 3967 arbitrary rank Kronecker deltas (mostly backwards compatible with
3961 3968 Numeric.identity)
3962 3969
3963 3970 2003-06-03 Fernando Perez <fperez@colorado.edu>
3964 3971
3965 3972 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3966 3973 arguments passed to magics with spaces, to allow trailing '\' to
3967 3974 work normally (mainly for Windows users).
3968 3975
3969 3976 2003-05-29 Fernando Perez <fperez@colorado.edu>
3970 3977
3971 3978 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3972 3979 instead of pydoc.help. This fixes a bizarre behavior where
3973 3980 printing '%s' % locals() would trigger the help system. Now
3974 3981 ipython behaves like normal python does.
3975 3982
3976 3983 Note that if one does 'from pydoc import help', the bizarre
3977 3984 behavior returns, but this will also happen in normal python, so
3978 3985 it's not an ipython bug anymore (it has to do with how pydoc.help
3979 3986 is implemented).
3980 3987
3981 3988 2003-05-22 Fernando Perez <fperez@colorado.edu>
3982 3989
3983 3990 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3984 3991 return [] instead of None when nothing matches, also match to end
3985 3992 of line. Patch by Gary Bishop.
3986 3993
3987 3994 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3988 3995 protection as before, for files passed on the command line. This
3989 3996 prevents the CrashHandler from kicking in if user files call into
3990 3997 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3991 3998 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3992 3999
3993 4000 2003-05-20 *** Released version 0.4.0
3994 4001
3995 4002 2003-05-20 Fernando Perez <fperez@colorado.edu>
3996 4003
3997 4004 * setup.py: added support for manpages. It's a bit hackish b/c of
3998 4005 a bug in the way the bdist_rpm distutils target handles gzipped
3999 4006 manpages, but it works. After a patch by Jack.
4000 4007
4001 4008 2003-05-19 Fernando Perez <fperez@colorado.edu>
4002 4009
4003 4010 * IPython/numutils.py: added a mockup of the kinds module, since
4004 4011 it was recently removed from Numeric. This way, numutils will
4005 4012 work for all users even if they are missing kinds.
4006 4013
4007 4014 * IPython/Magic.py (Magic._ofind): Harden against an inspect
4008 4015 failure, which can occur with SWIG-wrapped extensions. After a
4009 4016 crash report from Prabhu.
4010 4017
4011 4018 2003-05-16 Fernando Perez <fperez@colorado.edu>
4012 4019
4013 4020 * IPython/iplib.py (InteractiveShell.excepthook): New method to
4014 4021 protect ipython from user code which may call directly
4015 4022 sys.excepthook (this looks like an ipython crash to the user, even
4016 4023 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4017 4024 This is especially important to help users of WxWindows, but may
4018 4025 also be useful in other cases.
4019 4026
4020 4027 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
4021 4028 an optional tb_offset to be specified, and to preserve exception
4022 4029 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
4023 4030
4024 4031 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
4025 4032
4026 4033 2003-05-15 Fernando Perez <fperez@colorado.edu>
4027 4034
4028 4035 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
4029 4036 installing for a new user under Windows.
4030 4037
4031 4038 2003-05-12 Fernando Perez <fperez@colorado.edu>
4032 4039
4033 4040 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
4034 4041 handler for Emacs comint-based lines. Currently it doesn't do
4035 4042 much (but importantly, it doesn't update the history cache). In
4036 4043 the future it may be expanded if Alex needs more functionality
4037 4044 there.
4038 4045
4039 4046 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
4040 4047 info to crash reports.
4041 4048
4042 4049 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
4043 4050 just like Python's -c. Also fixed crash with invalid -color
4044 4051 option value at startup. Thanks to Will French
4045 4052 <wfrench-AT-bestweb.net> for the bug report.
4046 4053
4047 4054 2003-05-09 Fernando Perez <fperez@colorado.edu>
4048 4055
4049 4056 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
4050 4057 to EvalDict (it's a mapping, after all) and simplified its code
4051 4058 quite a bit, after a nice discussion on c.l.py where Gustavo
4052 4059 Córdova <gcordova-AT-sismex.com> suggested the new version.
4053 4060
4054 4061 2003-04-30 Fernando Perez <fperez@colorado.edu>
4055 4062
4056 4063 * IPython/genutils.py (timings_out): modified it to reduce its
4057 4064 overhead in the common reps==1 case.
4058 4065
4059 4066 2003-04-29 Fernando Perez <fperez@colorado.edu>
4060 4067
4061 4068 * IPython/genutils.py (timings_out): Modified to use the resource
4062 4069 module, which avoids the wraparound problems of time.clock().
4063 4070
4064 4071 2003-04-17 *** Released version 0.2.15pre4
4065 4072
4066 4073 2003-04-17 Fernando Perez <fperez@colorado.edu>
4067 4074
4068 4075 * setup.py (scriptfiles): Split windows-specific stuff over to a
4069 4076 separate file, in an attempt to have a Windows GUI installer.
4070 4077 That didn't work, but part of the groundwork is done.
4071 4078
4072 4079 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
4073 4080 indent/unindent with 4 spaces. Particularly useful in combination
4074 4081 with the new auto-indent option.
4075 4082
4076 4083 2003-04-16 Fernando Perez <fperez@colorado.edu>
4077 4084
4078 4085 * IPython/Magic.py: various replacements of self.rc for
4079 4086 self.shell.rc. A lot more remains to be done to fully disentangle
4080 4087 this class from the main Shell class.
4081 4088
4082 4089 * IPython/GnuplotRuntime.py: added checks for mouse support so
4083 4090 that we don't try to enable it if the current gnuplot doesn't
4084 4091 really support it. Also added checks so that we don't try to
4085 4092 enable persist under Windows (where Gnuplot doesn't recognize the
4086 4093 option).
4087 4094
4088 4095 * IPython/iplib.py (InteractiveShell.interact): Added optional
4089 4096 auto-indenting code, after a patch by King C. Shu
4090 4097 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
4091 4098 get along well with pasting indented code. If I ever figure out
4092 4099 how to make that part go well, it will become on by default.
4093 4100
4094 4101 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
4095 4102 crash ipython if there was an unmatched '%' in the user's prompt
4096 4103 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4097 4104
4098 4105 * IPython/iplib.py (InteractiveShell.interact): removed the
4099 4106 ability to ask the user whether he wants to crash or not at the
4100 4107 'last line' exception handler. Calling functions at that point
4101 4108 changes the stack, and the error reports would have incorrect
4102 4109 tracebacks.
4103 4110
4104 4111 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
4105 4112 pass through a peger a pretty-printed form of any object. After a
4106 4113 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
4107 4114
4108 4115 2003-04-14 Fernando Perez <fperez@colorado.edu>
4109 4116
4110 4117 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
4111 4118 all files in ~ would be modified at first install (instead of
4112 4119 ~/.ipython). This could be potentially disastrous, as the
4113 4120 modification (make line-endings native) could damage binary files.
4114 4121
4115 4122 2003-04-10 Fernando Perez <fperez@colorado.edu>
4116 4123
4117 4124 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
4118 4125 handle only lines which are invalid python. This now means that
4119 4126 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
4120 4127 for the bug report.
4121 4128
4122 4129 2003-04-01 Fernando Perez <fperez@colorado.edu>
4123 4130
4124 4131 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
4125 4132 where failing to set sys.last_traceback would crash pdb.pm().
4126 4133 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
4127 4134 report.
4128 4135
4129 4136 2003-03-25 Fernando Perez <fperez@colorado.edu>
4130 4137
4131 4138 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
4132 4139 before printing it (it had a lot of spurious blank lines at the
4133 4140 end).
4134 4141
4135 4142 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
4136 4143 output would be sent 21 times! Obviously people don't use this
4137 4144 too often, or I would have heard about it.
4138 4145
4139 4146 2003-03-24 Fernando Perez <fperez@colorado.edu>
4140 4147
4141 4148 * setup.py (scriptfiles): renamed the data_files parameter from
4142 4149 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
4143 4150 for the patch.
4144 4151
4145 4152 2003-03-20 Fernando Perez <fperez@colorado.edu>
4146 4153
4147 4154 * IPython/genutils.py (error): added error() and fatal()
4148 4155 functions.
4149 4156
4150 4157 2003-03-18 *** Released version 0.2.15pre3
4151 4158
4152 4159 2003-03-18 Fernando Perez <fperez@colorado.edu>
4153 4160
4154 4161 * setupext/install_data_ext.py
4155 4162 (install_data_ext.initialize_options): Class contributed by Jack
4156 4163 Moffit for fixing the old distutils hack. He is sending this to
4157 4164 the distutils folks so in the future we may not need it as a
4158 4165 private fix.
4159 4166
4160 4167 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
4161 4168 changes for Debian packaging. See his patch for full details.
4162 4169 The old distutils hack of making the ipythonrc* files carry a
4163 4170 bogus .py extension is gone, at last. Examples were moved to a
4164 4171 separate subdir under doc/, and the separate executable scripts
4165 4172 now live in their own directory. Overall a great cleanup. The
4166 4173 manual was updated to use the new files, and setup.py has been
4167 4174 fixed for this setup.
4168 4175
4169 4176 * IPython/PyColorize.py (Parser.usage): made non-executable and
4170 4177 created a pycolor wrapper around it to be included as a script.
4171 4178
4172 4179 2003-03-12 *** Released version 0.2.15pre2
4173 4180
4174 4181 2003-03-12 Fernando Perez <fperez@colorado.edu>
4175 4182
4176 4183 * IPython/ColorANSI.py (make_color_table): Finally fixed the
4177 4184 long-standing problem with garbage characters in some terminals.
4178 4185 The issue was really that the \001 and \002 escapes must _only_ be
4179 4186 passed to input prompts (which call readline), but _never_ to
4180 4187 normal text to be printed on screen. I changed ColorANSI to have
4181 4188 two classes: TermColors and InputTermColors, each with the
4182 4189 appropriate escapes for input prompts or normal text. The code in
4183 4190 Prompts.py got slightly more complicated, but this very old and
4184 4191 annoying bug is finally fixed.
4185 4192
4186 4193 All the credit for nailing down the real origin of this problem
4187 4194 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
4188 4195 *Many* thanks to him for spending quite a bit of effort on this.
4189 4196
4190 4197 2003-03-05 *** Released version 0.2.15pre1
4191 4198
4192 4199 2003-03-03 Fernando Perez <fperez@colorado.edu>
4193 4200
4194 4201 * IPython/FakeModule.py: Moved the former _FakeModule to a
4195 4202 separate file, because it's also needed by Magic (to fix a similar
4196 4203 pickle-related issue in @run).
4197 4204
4198 4205 2003-03-02 Fernando Perez <fperez@colorado.edu>
4199 4206
4200 4207 * IPython/Magic.py (Magic.magic_autocall): new magic to control
4201 4208 the autocall option at runtime.
4202 4209 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
4203 4210 across Magic.py to start separating Magic from InteractiveShell.
4204 4211 (Magic._ofind): Fixed to return proper namespace for dotted
4205 4212 names. Before, a dotted name would always return 'not currently
4206 4213 defined', because it would find the 'parent'. s.x would be found,
4207 4214 but since 'x' isn't defined by itself, it would get confused.
4208 4215 (Magic.magic_run): Fixed pickling problems reported by Ralf
4209 4216 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
4210 4217 that I'd used when Mike Heeter reported similar issues at the
4211 4218 top-level, but now for @run. It boils down to injecting the
4212 4219 namespace where code is being executed with something that looks
4213 4220 enough like a module to fool pickle.dump(). Since a pickle stores
4214 4221 a named reference to the importing module, we need this for
4215 4222 pickles to save something sensible.
4216 4223
4217 4224 * IPython/ipmaker.py (make_IPython): added an autocall option.
4218 4225
4219 4226 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
4220 4227 the auto-eval code. Now autocalling is an option, and the code is
4221 4228 also vastly safer. There is no more eval() involved at all.
4222 4229
4223 4230 2003-03-01 Fernando Perez <fperez@colorado.edu>
4224 4231
4225 4232 * IPython/Magic.py (Magic._ofind): Changed interface to return a
4226 4233 dict with named keys instead of a tuple.
4227 4234
4228 4235 * IPython: Started using CVS for IPython as of 0.2.15pre1.
4229 4236
4230 4237 * setup.py (make_shortcut): Fixed message about directories
4231 4238 created during Windows installation (the directories were ok, just
4232 4239 the printed message was misleading). Thanks to Chris Liechti
4233 4240 <cliechti-AT-gmx.net> for the heads up.
4234 4241
4235 4242 2003-02-21 Fernando Perez <fperez@colorado.edu>
4236 4243
4237 4244 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
4238 4245 of ValueError exception when checking for auto-execution. This
4239 4246 one is raised by things like Numeric arrays arr.flat when the
4240 4247 array is non-contiguous.
4241 4248
4242 4249 2003-01-31 Fernando Perez <fperez@colorado.edu>
4243 4250
4244 4251 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
4245 4252 not return any value at all (even though the command would get
4246 4253 executed).
4247 4254 (xsys): Flush stdout right after printing the command to ensure
4248 4255 proper ordering of commands and command output in the total
4249 4256 output.
4250 4257 (SystemExec/xsys/bq): Switched the names of xsys/bq and
4251 4258 system/getoutput as defaults. The old ones are kept for
4252 4259 compatibility reasons, so no code which uses this library needs
4253 4260 changing.
4254 4261
4255 4262 2003-01-27 *** Released version 0.2.14
4256 4263
4257 4264 2003-01-25 Fernando Perez <fperez@colorado.edu>
4258 4265
4259 4266 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
4260 4267 functions defined in previous edit sessions could not be re-edited
4261 4268 (because the temp files were immediately removed). Now temp files
4262 4269 are removed only at IPython's exit.
4263 4270 (Magic.magic_run): Improved @run to perform shell-like expansions
4264 4271 on its arguments (~users and $VARS). With this, @run becomes more
4265 4272 like a normal command-line.
4266 4273
4267 4274 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
4268 4275 bugs related to embedding and cleaned up that code. A fairly
4269 4276 important one was the impossibility to access the global namespace
4270 4277 through the embedded IPython (only local variables were visible).
4271 4278
4272 4279 2003-01-14 Fernando Perez <fperez@colorado.edu>
4273 4280
4274 4281 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
4275 4282 auto-calling to be a bit more conservative. Now it doesn't get
4276 4283 triggered if any of '!=()<>' are in the rest of the input line, to
4277 4284 allow comparing callables. Thanks to Alex for the heads up.
4278 4285
4279 4286 2003-01-07 Fernando Perez <fperez@colorado.edu>
4280 4287
4281 4288 * IPython/genutils.py (page): fixed estimation of the number of
4282 4289 lines in a string to be paged to simply count newlines. This
4283 4290 prevents over-guessing due to embedded escape sequences. A better
4284 4291 long-term solution would involve stripping out the control chars
4285 4292 for the count, but it's potentially so expensive I just don't
4286 4293 think it's worth doing.
4287 4294
4288 4295 2002-12-19 *** Released version 0.2.14pre50
4289 4296
4290 4297 2002-12-19 Fernando Perez <fperez@colorado.edu>
4291 4298
4292 4299 * tools/release (version): Changed release scripts to inform
4293 4300 Andrea and build a NEWS file with a list of recent changes.
4294 4301
4295 4302 * IPython/ColorANSI.py (__all__): changed terminal detection
4296 4303 code. Seems to work better for xterms without breaking
4297 4304 konsole. Will need more testing to determine if WinXP and Mac OSX
4298 4305 also work ok.
4299 4306
4300 4307 2002-12-18 *** Released version 0.2.14pre49
4301 4308
4302 4309 2002-12-18 Fernando Perez <fperez@colorado.edu>
4303 4310
4304 4311 * Docs: added new info about Mac OSX, from Andrea.
4305 4312
4306 4313 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
4307 4314 allow direct plotting of python strings whose format is the same
4308 4315 of gnuplot data files.
4309 4316
4310 4317 2002-12-16 Fernando Perez <fperez@colorado.edu>
4311 4318
4312 4319 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
4313 4320 value of exit question to be acknowledged.
4314 4321
4315 4322 2002-12-03 Fernando Perez <fperez@colorado.edu>
4316 4323
4317 4324 * IPython/ipmaker.py: removed generators, which had been added
4318 4325 by mistake in an earlier debugging run. This was causing trouble
4319 4326 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
4320 4327 for pointing this out.
4321 4328
4322 4329 2002-11-17 Fernando Perez <fperez@colorado.edu>
4323 4330
4324 4331 * Manual: updated the Gnuplot section.
4325 4332
4326 4333 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
4327 4334 a much better split of what goes in Runtime and what goes in
4328 4335 Interactive.
4329 4336
4330 4337 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
4331 4338 being imported from iplib.
4332 4339
4333 4340 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
4334 4341 for command-passing. Now the global Gnuplot instance is called
4335 4342 'gp' instead of 'g', which was really a far too fragile and
4336 4343 common name.
4337 4344
4338 4345 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
4339 4346 bounding boxes generated by Gnuplot for square plots.
4340 4347
4341 4348 * IPython/genutils.py (popkey): new function added. I should
4342 4349 suggest this on c.l.py as a dict method, it seems useful.
4343 4350
4344 4351 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
4345 4352 to transparently handle PostScript generation. MUCH better than
4346 4353 the previous plot_eps/replot_eps (which I removed now). The code
4347 4354 is also fairly clean and well documented now (including
4348 4355 docstrings).
4349 4356
4350 4357 2002-11-13 Fernando Perez <fperez@colorado.edu>
4351 4358
4352 4359 * IPython/Magic.py (Magic.magic_edit): fixed docstring
4353 4360 (inconsistent with options).
4354 4361
4355 4362 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
4356 4363 manually disabled, I don't know why. Fixed it.
4357 4364 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
4358 4365 eps output.
4359 4366
4360 4367 2002-11-12 Fernando Perez <fperez@colorado.edu>
4361 4368
4362 4369 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
4363 4370 don't propagate up to caller. Fixes crash reported by François
4364 4371 Pinard.
4365 4372
4366 4373 2002-11-09 Fernando Perez <fperez@colorado.edu>
4367 4374
4368 4375 * IPython/ipmaker.py (make_IPython): fixed problem with writing
4369 4376 history file for new users.
4370 4377 (make_IPython): fixed bug where initial install would leave the
4371 4378 user running in the .ipython dir.
4372 4379 (make_IPython): fixed bug where config dir .ipython would be
4373 4380 created regardless of the given -ipythondir option. Thanks to Cory
4374 4381 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
4375 4382
4376 4383 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
4377 4384 type confirmations. Will need to use it in all of IPython's code
4378 4385 consistently.
4379 4386
4380 4387 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
4381 4388 context to print 31 lines instead of the default 5. This will make
4382 4389 the crash reports extremely detailed in case the problem is in
4383 4390 libraries I don't have access to.
4384 4391
4385 4392 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
4386 4393 line of defense' code to still crash, but giving users fair
4387 4394 warning. I don't want internal errors to go unreported: if there's
4388 4395 an internal problem, IPython should crash and generate a full
4389 4396 report.
4390 4397
4391 4398 2002-11-08 Fernando Perez <fperez@colorado.edu>
4392 4399
4393 4400 * IPython/iplib.py (InteractiveShell.interact): added code to trap
4394 4401 otherwise uncaught exceptions which can appear if people set
4395 4402 sys.stdout to something badly broken. Thanks to a crash report
4396 4403 from henni-AT-mail.brainbot.com.
4397 4404
4398 4405 2002-11-04 Fernando Perez <fperez@colorado.edu>
4399 4406
4400 4407 * IPython/iplib.py (InteractiveShell.interact): added
4401 4408 __IPYTHON__active to the builtins. It's a flag which goes on when
4402 4409 the interaction starts and goes off again when it stops. This
4403 4410 allows embedding code to detect being inside IPython. Before this
4404 4411 was done via __IPYTHON__, but that only shows that an IPython
4405 4412 instance has been created.
4406 4413
4407 4414 * IPython/Magic.py (Magic.magic_env): I realized that in a
4408 4415 UserDict, instance.data holds the data as a normal dict. So I
4409 4416 modified @env to return os.environ.data instead of rebuilding a
4410 4417 dict by hand.
4411 4418
4412 4419 2002-11-02 Fernando Perez <fperez@colorado.edu>
4413 4420
4414 4421 * IPython/genutils.py (warn): changed so that level 1 prints no
4415 4422 header. Level 2 is now the default (with 'WARNING' header, as
4416 4423 before). I think I tracked all places where changes were needed in
4417 4424 IPython, but outside code using the old level numbering may have
4418 4425 broken.
4419 4426
4420 4427 * IPython/iplib.py (InteractiveShell.runcode): added this to
4421 4428 handle the tracebacks in SystemExit traps correctly. The previous
4422 4429 code (through interact) was printing more of the stack than
4423 4430 necessary, showing IPython internal code to the user.
4424 4431
4425 4432 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
4426 4433 default. Now that the default at the confirmation prompt is yes,
4427 4434 it's not so intrusive. François' argument that ipython sessions
4428 4435 tend to be complex enough not to lose them from an accidental C-d,
4429 4436 is a valid one.
4430 4437
4431 4438 * IPython/iplib.py (InteractiveShell.interact): added a
4432 4439 showtraceback() call to the SystemExit trap, and modified the exit
4433 4440 confirmation to have yes as the default.
4434 4441
4435 4442 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
4436 4443 this file. It's been gone from the code for a long time, this was
4437 4444 simply leftover junk.
4438 4445
4439 4446 2002-11-01 Fernando Perez <fperez@colorado.edu>
4440 4447
4441 4448 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
4442 4449 added. If set, IPython now traps EOF and asks for
4443 4450 confirmation. After a request by François Pinard.
4444 4451
4445 4452 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
4446 4453 of @abort, and with a new (better) mechanism for handling the
4447 4454 exceptions.
4448 4455
4449 4456 2002-10-27 Fernando Perez <fperez@colorado.edu>
4450 4457
4451 4458 * IPython/usage.py (__doc__): updated the --help information and
4452 4459 the ipythonrc file to indicate that -log generates
4453 4460 ./ipython.log. Also fixed the corresponding info in @logstart.
4454 4461 This and several other fixes in the manuals thanks to reports by
4455 4462 François Pinard <pinard-AT-iro.umontreal.ca>.
4456 4463
4457 4464 * IPython/Logger.py (Logger.switch_log): Fixed error message to
4458 4465 refer to @logstart (instead of @log, which doesn't exist).
4459 4466
4460 4467 * IPython/iplib.py (InteractiveShell._prefilter): fixed
4461 4468 AttributeError crash. Thanks to Christopher Armstrong
4462 4469 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
4463 4470 introduced recently (in 0.2.14pre37) with the fix to the eval
4464 4471 problem mentioned below.
4465 4472
4466 4473 2002-10-17 Fernando Perez <fperez@colorado.edu>
4467 4474
4468 4475 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4469 4476 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4470 4477
4471 4478 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4472 4479 this function to fix a problem reported by Alex Schmolck. He saw
4473 4480 it with list comprehensions and generators, which were getting
4474 4481 called twice. The real problem was an 'eval' call in testing for
4475 4482 automagic which was evaluating the input line silently.
4476 4483
4477 4484 This is a potentially very nasty bug, if the input has side
4478 4485 effects which must not be repeated. The code is much cleaner now,
4479 4486 without any blanket 'except' left and with a regexp test for
4480 4487 actual function names.
4481 4488
4482 4489 But an eval remains, which I'm not fully comfortable with. I just
4483 4490 don't know how to find out if an expression could be a callable in
4484 4491 the user's namespace without doing an eval on the string. However
4485 4492 that string is now much more strictly checked so that no code
4486 4493 slips by, so the eval should only happen for things that can
4487 4494 really be only function/method names.
4488 4495
4489 4496 2002-10-15 Fernando Perez <fperez@colorado.edu>
4490 4497
4491 4498 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4492 4499 OSX information to main manual, removed README_Mac_OSX file from
4493 4500 distribution. Also updated credits for recent additions.
4494 4501
4495 4502 2002-10-10 Fernando Perez <fperez@colorado.edu>
4496 4503
4497 4504 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4498 4505 terminal-related issues. Many thanks to Andrea Riciputi
4499 4506 <andrea.riciputi-AT-libero.it> for writing it.
4500 4507
4501 4508 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4502 4509 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4503 4510
4504 4511 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4505 4512 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4506 4513 <syver-en-AT-online.no> who both submitted patches for this problem.
4507 4514
4508 4515 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4509 4516 global embedding to make sure that things don't overwrite user
4510 4517 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4511 4518
4512 4519 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4513 4520 compatibility. Thanks to Hayden Callow
4514 4521 <h.callow-AT-elec.canterbury.ac.nz>
4515 4522
4516 4523 2002-10-04 Fernando Perez <fperez@colorado.edu>
4517 4524
4518 4525 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4519 4526 Gnuplot.File objects.
4520 4527
4521 4528 2002-07-23 Fernando Perez <fperez@colorado.edu>
4522 4529
4523 4530 * IPython/genutils.py (timing): Added timings() and timing() for
4524 4531 quick access to the most commonly needed data, the execution
4525 4532 times. Old timing() renamed to timings_out().
4526 4533
4527 4534 2002-07-18 Fernando Perez <fperez@colorado.edu>
4528 4535
4529 4536 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4530 4537 bug with nested instances disrupting the parent's tab completion.
4531 4538
4532 4539 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4533 4540 all_completions code to begin the emacs integration.
4534 4541
4535 4542 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4536 4543 argument to allow titling individual arrays when plotting.
4537 4544
4538 4545 2002-07-15 Fernando Perez <fperez@colorado.edu>
4539 4546
4540 4547 * setup.py (make_shortcut): changed to retrieve the value of
4541 4548 'Program Files' directory from the registry (this value changes in
4542 4549 non-english versions of Windows). Thanks to Thomas Fanslau
4543 4550 <tfanslau-AT-gmx.de> for the report.
4544 4551
4545 4552 2002-07-10 Fernando Perez <fperez@colorado.edu>
4546 4553
4547 4554 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4548 4555 a bug in pdb, which crashes if a line with only whitespace is
4549 4556 entered. Bug report submitted to sourceforge.
4550 4557
4551 4558 2002-07-09 Fernando Perez <fperez@colorado.edu>
4552 4559
4553 4560 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4554 4561 reporting exceptions (it's a bug in inspect.py, I just set a
4555 4562 workaround).
4556 4563
4557 4564 2002-07-08 Fernando Perez <fperez@colorado.edu>
4558 4565
4559 4566 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4560 4567 __IPYTHON__ in __builtins__ to show up in user_ns.
4561 4568
4562 4569 2002-07-03 Fernando Perez <fperez@colorado.edu>
4563 4570
4564 4571 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4565 4572 name from @gp_set_instance to @gp_set_default.
4566 4573
4567 4574 * IPython/ipmaker.py (make_IPython): default editor value set to
4568 4575 '0' (a string), to match the rc file. Otherwise will crash when
4569 4576 .strip() is called on it.
4570 4577
4571 4578
4572 4579 2002-06-28 Fernando Perez <fperez@colorado.edu>
4573 4580
4574 4581 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4575 4582 of files in current directory when a file is executed via
4576 4583 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4577 4584
4578 4585 * setup.py (manfiles): fix for rpm builds, submitted by RA
4579 4586 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4580 4587
4581 4588 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4582 4589 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4583 4590 string!). A. Schmolck caught this one.
4584 4591
4585 4592 2002-06-27 Fernando Perez <fperez@colorado.edu>
4586 4593
4587 4594 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4588 4595 defined files at the cmd line. __name__ wasn't being set to
4589 4596 __main__.
4590 4597
4591 4598 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4592 4599 regular lists and tuples besides Numeric arrays.
4593 4600
4594 4601 * IPython/Prompts.py (CachedOutput.__call__): Added output
4595 4602 supression for input ending with ';'. Similar to Mathematica and
4596 4603 Matlab. The _* vars and Out[] list are still updated, just like
4597 4604 Mathematica behaves.
4598 4605
4599 4606 2002-06-25 Fernando Perez <fperez@colorado.edu>
4600 4607
4601 4608 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4602 4609 .ini extensions for profiels under Windows.
4603 4610
4604 4611 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4605 4612 string form. Fix contributed by Alexander Schmolck
4606 4613 <a.schmolck-AT-gmx.net>
4607 4614
4608 4615 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4609 4616 pre-configured Gnuplot instance.
4610 4617
4611 4618 2002-06-21 Fernando Perez <fperez@colorado.edu>
4612 4619
4613 4620 * IPython/numutils.py (exp_safe): new function, works around the
4614 4621 underflow problems in Numeric.
4615 4622 (log2): New fn. Safe log in base 2: returns exact integer answer
4616 4623 for exact integer powers of 2.
4617 4624
4618 4625 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4619 4626 properly.
4620 4627
4621 4628 2002-06-20 Fernando Perez <fperez@colorado.edu>
4622 4629
4623 4630 * IPython/genutils.py (timing): new function like
4624 4631 Mathematica's. Similar to time_test, but returns more info.
4625 4632
4626 4633 2002-06-18 Fernando Perez <fperez@colorado.edu>
4627 4634
4628 4635 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4629 4636 according to Mike Heeter's suggestions.
4630 4637
4631 4638 2002-06-16 Fernando Perez <fperez@colorado.edu>
4632 4639
4633 4640 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4634 4641 system. GnuplotMagic is gone as a user-directory option. New files
4635 4642 make it easier to use all the gnuplot stuff both from external
4636 4643 programs as well as from IPython. Had to rewrite part of
4637 4644 hardcopy() b/c of a strange bug: often the ps files simply don't
4638 4645 get created, and require a repeat of the command (often several
4639 4646 times).
4640 4647
4641 4648 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4642 4649 resolve output channel at call time, so that if sys.stderr has
4643 4650 been redirected by user this gets honored.
4644 4651
4645 4652 2002-06-13 Fernando Perez <fperez@colorado.edu>
4646 4653
4647 4654 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4648 4655 IPShell. Kept a copy with the old names to avoid breaking people's
4649 4656 embedded code.
4650 4657
4651 4658 * IPython/ipython: simplified it to the bare minimum after
4652 4659 Holger's suggestions. Added info about how to use it in
4653 4660 PYTHONSTARTUP.
4654 4661
4655 4662 * IPython/Shell.py (IPythonShell): changed the options passing
4656 4663 from a string with funky %s replacements to a straight list. Maybe
4657 4664 a bit more typing, but it follows sys.argv conventions, so there's
4658 4665 less special-casing to remember.
4659 4666
4660 4667 2002-06-12 Fernando Perez <fperez@colorado.edu>
4661 4668
4662 4669 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4663 4670 command. Thanks to a suggestion by Mike Heeter.
4664 4671 (Magic.magic_pfile): added behavior to look at filenames if given
4665 4672 arg is not a defined object.
4666 4673 (Magic.magic_save): New @save function to save code snippets. Also
4667 4674 a Mike Heeter idea.
4668 4675
4669 4676 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4670 4677 plot() and replot(). Much more convenient now, especially for
4671 4678 interactive use.
4672 4679
4673 4680 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4674 4681 filenames.
4675 4682
4676 4683 2002-06-02 Fernando Perez <fperez@colorado.edu>
4677 4684
4678 4685 * IPython/Struct.py (Struct.__init__): modified to admit
4679 4686 initialization via another struct.
4680 4687
4681 4688 * IPython/genutils.py (SystemExec.__init__): New stateful
4682 4689 interface to xsys and bq. Useful for writing system scripts.
4683 4690
4684 4691 2002-05-30 Fernando Perez <fperez@colorado.edu>
4685 4692
4686 4693 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4687 4694 documents. This will make the user download smaller (it's getting
4688 4695 too big).
4689 4696
4690 4697 2002-05-29 Fernando Perez <fperez@colorado.edu>
4691 4698
4692 4699 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4693 4700 fix problems with shelve and pickle. Seems to work, but I don't
4694 4701 know if corner cases break it. Thanks to Mike Heeter
4695 4702 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4696 4703
4697 4704 2002-05-24 Fernando Perez <fperez@colorado.edu>
4698 4705
4699 4706 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4700 4707 macros having broken.
4701 4708
4702 4709 2002-05-21 Fernando Perez <fperez@colorado.edu>
4703 4710
4704 4711 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4705 4712 introduced logging bug: all history before logging started was
4706 4713 being written one character per line! This came from the redesign
4707 4714 of the input history as a special list which slices to strings,
4708 4715 not to lists.
4709 4716
4710 4717 2002-05-20 Fernando Perez <fperez@colorado.edu>
4711 4718
4712 4719 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4713 4720 be an attribute of all classes in this module. The design of these
4714 4721 classes needs some serious overhauling.
4715 4722
4716 4723 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4717 4724 which was ignoring '_' in option names.
4718 4725
4719 4726 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4720 4727 'Verbose_novars' to 'Context' and made it the new default. It's a
4721 4728 bit more readable and also safer than verbose.
4722 4729
4723 4730 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4724 4731 triple-quoted strings.
4725 4732
4726 4733 * IPython/OInspect.py (__all__): new module exposing the object
4727 4734 introspection facilities. Now the corresponding magics are dummy
4728 4735 wrappers around this. Having this module will make it much easier
4729 4736 to put these functions into our modified pdb.
4730 4737 This new object inspector system uses the new colorizing module,
4731 4738 so source code and other things are nicely syntax highlighted.
4732 4739
4733 4740 2002-05-18 Fernando Perez <fperez@colorado.edu>
4734 4741
4735 4742 * IPython/ColorANSI.py: Split the coloring tools into a separate
4736 4743 module so I can use them in other code easier (they were part of
4737 4744 ultraTB).
4738 4745
4739 4746 2002-05-17 Fernando Perez <fperez@colorado.edu>
4740 4747
4741 4748 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4742 4749 fixed it to set the global 'g' also to the called instance, as
4743 4750 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4744 4751 user's 'g' variables).
4745 4752
4746 4753 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4747 4754 global variables (aliases to _ih,_oh) so that users which expect
4748 4755 In[5] or Out[7] to work aren't unpleasantly surprised.
4749 4756 (InputList.__getslice__): new class to allow executing slices of
4750 4757 input history directly. Very simple class, complements the use of
4751 4758 macros.
4752 4759
4753 4760 2002-05-16 Fernando Perez <fperez@colorado.edu>
4754 4761
4755 4762 * setup.py (docdirbase): make doc directory be just doc/IPython
4756 4763 without version numbers, it will reduce clutter for users.
4757 4764
4758 4765 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4759 4766 execfile call to prevent possible memory leak. See for details:
4760 4767 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4761 4768
4762 4769 2002-05-15 Fernando Perez <fperez@colorado.edu>
4763 4770
4764 4771 * IPython/Magic.py (Magic.magic_psource): made the object
4765 4772 introspection names be more standard: pdoc, pdef, pfile and
4766 4773 psource. They all print/page their output, and it makes
4767 4774 remembering them easier. Kept old names for compatibility as
4768 4775 aliases.
4769 4776
4770 4777 2002-05-14 Fernando Perez <fperez@colorado.edu>
4771 4778
4772 4779 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4773 4780 what the mouse problem was. The trick is to use gnuplot with temp
4774 4781 files and NOT with pipes (for data communication), because having
4775 4782 both pipes and the mouse on is bad news.
4776 4783
4777 4784 2002-05-13 Fernando Perez <fperez@colorado.edu>
4778 4785
4779 4786 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4780 4787 bug. Information would be reported about builtins even when
4781 4788 user-defined functions overrode them.
4782 4789
4783 4790 2002-05-11 Fernando Perez <fperez@colorado.edu>
4784 4791
4785 4792 * IPython/__init__.py (__all__): removed FlexCompleter from
4786 4793 __all__ so that things don't fail in platforms without readline.
4787 4794
4788 4795 2002-05-10 Fernando Perez <fperez@colorado.edu>
4789 4796
4790 4797 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4791 4798 it requires Numeric, effectively making Numeric a dependency for
4792 4799 IPython.
4793 4800
4794 4801 * Released 0.2.13
4795 4802
4796 4803 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4797 4804 profiler interface. Now all the major options from the profiler
4798 4805 module are directly supported in IPython, both for single
4799 4806 expressions (@prun) and for full programs (@run -p).
4800 4807
4801 4808 2002-05-09 Fernando Perez <fperez@colorado.edu>
4802 4809
4803 4810 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4804 4811 magic properly formatted for screen.
4805 4812
4806 4813 * setup.py (make_shortcut): Changed things to put pdf version in
4807 4814 doc/ instead of doc/manual (had to change lyxport a bit).
4808 4815
4809 4816 * IPython/Magic.py (Profile.string_stats): made profile runs go
4810 4817 through pager (they are long and a pager allows searching, saving,
4811 4818 etc.)
4812 4819
4813 4820 2002-05-08 Fernando Perez <fperez@colorado.edu>
4814 4821
4815 4822 * Released 0.2.12
4816 4823
4817 4824 2002-05-06 Fernando Perez <fperez@colorado.edu>
4818 4825
4819 4826 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4820 4827 introduced); 'hist n1 n2' was broken.
4821 4828 (Magic.magic_pdb): added optional on/off arguments to @pdb
4822 4829 (Magic.magic_run): added option -i to @run, which executes code in
4823 4830 the IPython namespace instead of a clean one. Also added @irun as
4824 4831 an alias to @run -i.
4825 4832
4826 4833 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4827 4834 fixed (it didn't really do anything, the namespaces were wrong).
4828 4835
4829 4836 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4830 4837
4831 4838 * IPython/__init__.py (__all__): Fixed package namespace, now
4832 4839 'import IPython' does give access to IPython.<all> as
4833 4840 expected. Also renamed __release__ to Release.
4834 4841
4835 4842 * IPython/Debugger.py (__license__): created new Pdb class which
4836 4843 functions like a drop-in for the normal pdb.Pdb but does NOT
4837 4844 import readline by default. This way it doesn't muck up IPython's
4838 4845 readline handling, and now tab-completion finally works in the
4839 4846 debugger -- sort of. It completes things globally visible, but the
4840 4847 completer doesn't track the stack as pdb walks it. That's a bit
4841 4848 tricky, and I'll have to implement it later.
4842 4849
4843 4850 2002-05-05 Fernando Perez <fperez@colorado.edu>
4844 4851
4845 4852 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4846 4853 magic docstrings when printed via ? (explicit \'s were being
4847 4854 printed).
4848 4855
4849 4856 * IPython/ipmaker.py (make_IPython): fixed namespace
4850 4857 identification bug. Now variables loaded via logs or command-line
4851 4858 files are recognized in the interactive namespace by @who.
4852 4859
4853 4860 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4854 4861 log replay system stemming from the string form of Structs.
4855 4862
4856 4863 * IPython/Magic.py (Macro.__init__): improved macros to properly
4857 4864 handle magic commands in them.
4858 4865 (Magic.magic_logstart): usernames are now expanded so 'logstart
4859 4866 ~/mylog' now works.
4860 4867
4861 4868 * IPython/iplib.py (complete): fixed bug where paths starting with
4862 4869 '/' would be completed as magic names.
4863 4870
4864 4871 2002-05-04 Fernando Perez <fperez@colorado.edu>
4865 4872
4866 4873 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4867 4874 allow running full programs under the profiler's control.
4868 4875
4869 4876 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4870 4877 mode to report exceptions verbosely but without formatting
4871 4878 variables. This addresses the issue of ipython 'freezing' (it's
4872 4879 not frozen, but caught in an expensive formatting loop) when huge
4873 4880 variables are in the context of an exception.
4874 4881 (VerboseTB.text): Added '--->' markers at line where exception was
4875 4882 triggered. Much clearer to read, especially in NoColor modes.
4876 4883
4877 4884 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4878 4885 implemented in reverse when changing to the new parse_options().
4879 4886
4880 4887 2002-05-03 Fernando Perez <fperez@colorado.edu>
4881 4888
4882 4889 * IPython/Magic.py (Magic.parse_options): new function so that
4883 4890 magics can parse options easier.
4884 4891 (Magic.magic_prun): new function similar to profile.run(),
4885 4892 suggested by Chris Hart.
4886 4893 (Magic.magic_cd): fixed behavior so that it only changes if
4887 4894 directory actually is in history.
4888 4895
4889 4896 * IPython/usage.py (__doc__): added information about potential
4890 4897 slowness of Verbose exception mode when there are huge data
4891 4898 structures to be formatted (thanks to Archie Paulson).
4892 4899
4893 4900 * IPython/ipmaker.py (make_IPython): Changed default logging
4894 4901 (when simply called with -log) to use curr_dir/ipython.log in
4895 4902 rotate mode. Fixed crash which was occuring with -log before
4896 4903 (thanks to Jim Boyle).
4897 4904
4898 4905 2002-05-01 Fernando Perez <fperez@colorado.edu>
4899 4906
4900 4907 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4901 4908 was nasty -- though somewhat of a corner case).
4902 4909
4903 4910 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4904 4911 text (was a bug).
4905 4912
4906 4913 2002-04-30 Fernando Perez <fperez@colorado.edu>
4907 4914
4908 4915 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4909 4916 a print after ^D or ^C from the user so that the In[] prompt
4910 4917 doesn't over-run the gnuplot one.
4911 4918
4912 4919 2002-04-29 Fernando Perez <fperez@colorado.edu>
4913 4920
4914 4921 * Released 0.2.10
4915 4922
4916 4923 * IPython/__release__.py (version): get date dynamically.
4917 4924
4918 4925 * Misc. documentation updates thanks to Arnd's comments. Also ran
4919 4926 a full spellcheck on the manual (hadn't been done in a while).
4920 4927
4921 4928 2002-04-27 Fernando Perez <fperez@colorado.edu>
4922 4929
4923 4930 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4924 4931 starting a log in mid-session would reset the input history list.
4925 4932
4926 4933 2002-04-26 Fernando Perez <fperez@colorado.edu>
4927 4934
4928 4935 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4929 4936 all files were being included in an update. Now anything in
4930 4937 UserConfig that matches [A-Za-z]*.py will go (this excludes
4931 4938 __init__.py)
4932 4939
4933 4940 2002-04-25 Fernando Perez <fperez@colorado.edu>
4934 4941
4935 4942 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4936 4943 to __builtins__ so that any form of embedded or imported code can
4937 4944 test for being inside IPython.
4938 4945
4939 4946 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4940 4947 changed to GnuplotMagic because it's now an importable module,
4941 4948 this makes the name follow that of the standard Gnuplot module.
4942 4949 GnuplotMagic can now be loaded at any time in mid-session.
4943 4950
4944 4951 2002-04-24 Fernando Perez <fperez@colorado.edu>
4945 4952
4946 4953 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4947 4954 the globals (IPython has its own namespace) and the
4948 4955 PhysicalQuantity stuff is much better anyway.
4949 4956
4950 4957 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4951 4958 embedding example to standard user directory for
4952 4959 distribution. Also put it in the manual.
4953 4960
4954 4961 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4955 4962 instance as first argument (so it doesn't rely on some obscure
4956 4963 hidden global).
4957 4964
4958 4965 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4959 4966 delimiters. While it prevents ().TAB from working, it allows
4960 4967 completions in open (... expressions. This is by far a more common
4961 4968 case.
4962 4969
4963 4970 2002-04-23 Fernando Perez <fperez@colorado.edu>
4964 4971
4965 4972 * IPython/Extensions/InterpreterPasteInput.py: new
4966 4973 syntax-processing module for pasting lines with >>> or ... at the
4967 4974 start.
4968 4975
4969 4976 * IPython/Extensions/PhysicalQ_Interactive.py
4970 4977 (PhysicalQuantityInteractive.__int__): fixed to work with either
4971 4978 Numeric or math.
4972 4979
4973 4980 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4974 4981 provided profiles. Now we have:
4975 4982 -math -> math module as * and cmath with its own namespace.
4976 4983 -numeric -> Numeric as *, plus gnuplot & grace
4977 4984 -physics -> same as before
4978 4985
4979 4986 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4980 4987 user-defined magics wouldn't be found by @magic if they were
4981 4988 defined as class methods. Also cleaned up the namespace search
4982 4989 logic and the string building (to use %s instead of many repeated
4983 4990 string adds).
4984 4991
4985 4992 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4986 4993 of user-defined magics to operate with class methods (cleaner, in
4987 4994 line with the gnuplot code).
4988 4995
4989 4996 2002-04-22 Fernando Perez <fperez@colorado.edu>
4990 4997
4991 4998 * setup.py: updated dependency list so that manual is updated when
4992 4999 all included files change.
4993 5000
4994 5001 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4995 5002 the delimiter removal option (the fix is ugly right now).
4996 5003
4997 5004 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4998 5005 all of the math profile (quicker loading, no conflict between
4999 5006 g-9.8 and g-gnuplot).
5000 5007
5001 5008 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
5002 5009 name of post-mortem files to IPython_crash_report.txt.
5003 5010
5004 5011 * Cleanup/update of the docs. Added all the new readline info and
5005 5012 formatted all lists as 'real lists'.
5006 5013
5007 5014 * IPython/ipmaker.py (make_IPython): removed now-obsolete
5008 5015 tab-completion options, since the full readline parse_and_bind is
5009 5016 now accessible.
5010 5017
5011 5018 * IPython/iplib.py (InteractiveShell.init_readline): Changed
5012 5019 handling of readline options. Now users can specify any string to
5013 5020 be passed to parse_and_bind(), as well as the delimiters to be
5014 5021 removed.
5015 5022 (InteractiveShell.__init__): Added __name__ to the global
5016 5023 namespace so that things like Itpl which rely on its existence
5017 5024 don't crash.
5018 5025 (InteractiveShell._prefilter): Defined the default with a _ so
5019 5026 that prefilter() is easier to override, while the default one
5020 5027 remains available.
5021 5028
5022 5029 2002-04-18 Fernando Perez <fperez@colorado.edu>
5023 5030
5024 5031 * Added information about pdb in the docs.
5025 5032
5026 5033 2002-04-17 Fernando Perez <fperez@colorado.edu>
5027 5034
5028 5035 * IPython/ipmaker.py (make_IPython): added rc_override option to
5029 5036 allow passing config options at creation time which may override
5030 5037 anything set in the config files or command line. This is
5031 5038 particularly useful for configuring embedded instances.
5032 5039
5033 5040 2002-04-15 Fernando Perez <fperez@colorado.edu>
5034 5041
5035 5042 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
5036 5043 crash embedded instances because of the input cache falling out of
5037 5044 sync with the output counter.
5038 5045
5039 5046 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
5040 5047 mode which calls pdb after an uncaught exception in IPython itself.
5041 5048
5042 5049 2002-04-14 Fernando Perez <fperez@colorado.edu>
5043 5050
5044 5051 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
5045 5052 readline, fix it back after each call.
5046 5053
5047 5054 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
5048 5055 method to force all access via __call__(), which guarantees that
5049 5056 traceback references are properly deleted.
5050 5057
5051 5058 * IPython/Prompts.py (CachedOutput._display): minor fixes to
5052 5059 improve printing when pprint is in use.
5053 5060
5054 5061 2002-04-13 Fernando Perez <fperez@colorado.edu>
5055 5062
5056 5063 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
5057 5064 exceptions aren't caught anymore. If the user triggers one, he
5058 5065 should know why he's doing it and it should go all the way up,
5059 5066 just like any other exception. So now @abort will fully kill the
5060 5067 embedded interpreter and the embedding code (unless that happens
5061 5068 to catch SystemExit).
5062 5069
5063 5070 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
5064 5071 and a debugger() method to invoke the interactive pdb debugger
5065 5072 after printing exception information. Also added the corresponding
5066 5073 -pdb option and @pdb magic to control this feature, and updated
5067 5074 the docs. After a suggestion from Christopher Hart
5068 5075 (hart-AT-caltech.edu).
5069 5076
5070 5077 2002-04-12 Fernando Perez <fperez@colorado.edu>
5071 5078
5072 5079 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
5073 5080 the exception handlers defined by the user (not the CrashHandler)
5074 5081 so that user exceptions don't trigger an ipython bug report.
5075 5082
5076 5083 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
5077 5084 configurable (it should have always been so).
5078 5085
5079 5086 2002-03-26 Fernando Perez <fperez@colorado.edu>
5080 5087
5081 5088 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
5082 5089 and there to fix embedding namespace issues. This should all be
5083 5090 done in a more elegant way.
5084 5091
5085 5092 2002-03-25 Fernando Perez <fperez@colorado.edu>
5086 5093
5087 5094 * IPython/genutils.py (get_home_dir): Try to make it work under
5088 5095 win9x also.
5089 5096
5090 5097 2002-03-20 Fernando Perez <fperez@colorado.edu>
5091 5098
5092 5099 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
5093 5100 sys.displayhook untouched upon __init__.
5094 5101
5095 5102 2002-03-19 Fernando Perez <fperez@colorado.edu>
5096 5103
5097 5104 * Released 0.2.9 (for embedding bug, basically).
5098 5105
5099 5106 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
5100 5107 exceptions so that enclosing shell's state can be restored.
5101 5108
5102 5109 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
5103 5110 naming conventions in the .ipython/ dir.
5104 5111
5105 5112 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
5106 5113 from delimiters list so filenames with - in them get expanded.
5107 5114
5108 5115 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
5109 5116 sys.displayhook not being properly restored after an embedded call.
5110 5117
5111 5118 2002-03-18 Fernando Perez <fperez@colorado.edu>
5112 5119
5113 5120 * Released 0.2.8
5114 5121
5115 5122 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
5116 5123 some files weren't being included in a -upgrade.
5117 5124 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
5118 5125 on' so that the first tab completes.
5119 5126 (InteractiveShell.handle_magic): fixed bug with spaces around
5120 5127 quotes breaking many magic commands.
5121 5128
5122 5129 * setup.py: added note about ignoring the syntax error messages at
5123 5130 installation.
5124 5131
5125 5132 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
5126 5133 streamlining the gnuplot interface, now there's only one magic @gp.
5127 5134
5128 5135 2002-03-17 Fernando Perez <fperez@colorado.edu>
5129 5136
5130 5137 * IPython/UserConfig/magic_gnuplot.py: new name for the
5131 5138 example-magic_pm.py file. Much enhanced system, now with a shell
5132 5139 for communicating directly with gnuplot, one command at a time.
5133 5140
5134 5141 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
5135 5142 setting __name__=='__main__'.
5136 5143
5137 5144 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
5138 5145 mini-shell for accessing gnuplot from inside ipython. Should
5139 5146 extend it later for grace access too. Inspired by Arnd's
5140 5147 suggestion.
5141 5148
5142 5149 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
5143 5150 calling magic functions with () in their arguments. Thanks to Arnd
5144 5151 Baecker for pointing this to me.
5145 5152
5146 5153 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
5147 5154 infinitely for integer or complex arrays (only worked with floats).
5148 5155
5149 5156 2002-03-16 Fernando Perez <fperez@colorado.edu>
5150 5157
5151 5158 * setup.py: Merged setup and setup_windows into a single script
5152 5159 which properly handles things for windows users.
5153 5160
5154 5161 2002-03-15 Fernando Perez <fperez@colorado.edu>
5155 5162
5156 5163 * Big change to the manual: now the magics are all automatically
5157 5164 documented. This information is generated from their docstrings
5158 5165 and put in a latex file included by the manual lyx file. This way
5159 5166 we get always up to date information for the magics. The manual
5160 5167 now also has proper version information, also auto-synced.
5161 5168
5162 5169 For this to work, an undocumented --magic_docstrings option was added.
5163 5170
5164 5171 2002-03-13 Fernando Perez <fperez@colorado.edu>
5165 5172
5166 5173 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
5167 5174 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
5168 5175
5169 5176 2002-03-12 Fernando Perez <fperez@colorado.edu>
5170 5177
5171 5178 * IPython/ultraTB.py (TermColors): changed color escapes again to
5172 5179 fix the (old, reintroduced) line-wrapping bug. Basically, if
5173 5180 \001..\002 aren't given in the color escapes, lines get wrapped
5174 5181 weirdly. But giving those screws up old xterms and emacs terms. So
5175 5182 I added some logic for emacs terms to be ok, but I can't identify old
5176 5183 xterms separately ($TERM=='xterm' for many terminals, like konsole).
5177 5184
5178 5185 2002-03-10 Fernando Perez <fperez@colorado.edu>
5179 5186
5180 5187 * IPython/usage.py (__doc__): Various documentation cleanups and
5181 5188 updates, both in usage docstrings and in the manual.
5182 5189
5183 5190 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
5184 5191 handling of caching. Set minimum acceptabe value for having a
5185 5192 cache at 20 values.
5186 5193
5187 5194 * IPython/iplib.py (InteractiveShell.user_setup): moved the
5188 5195 install_first_time function to a method, renamed it and added an
5189 5196 'upgrade' mode. Now people can update their config directory with
5190 5197 a simple command line switch (-upgrade, also new).
5191 5198
5192 5199 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
5193 5200 @file (convenient for automagic users under Python >= 2.2).
5194 5201 Removed @files (it seemed more like a plural than an abbrev. of
5195 5202 'file show').
5196 5203
5197 5204 * IPython/iplib.py (install_first_time): Fixed crash if there were
5198 5205 backup files ('~') in .ipython/ install directory.
5199 5206
5200 5207 * IPython/ipmaker.py (make_IPython): fixes for new prompt
5201 5208 system. Things look fine, but these changes are fairly
5202 5209 intrusive. Test them for a few days.
5203 5210
5204 5211 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
5205 5212 the prompts system. Now all in/out prompt strings are user
5206 5213 controllable. This is particularly useful for embedding, as one
5207 5214 can tag embedded instances with particular prompts.
5208 5215
5209 5216 Also removed global use of sys.ps1/2, which now allows nested
5210 5217 embeddings without any problems. Added command-line options for
5211 5218 the prompt strings.
5212 5219
5213 5220 2002-03-08 Fernando Perez <fperez@colorado.edu>
5214 5221
5215 5222 * IPython/UserConfig/example-embed-short.py (ipshell): added
5216 5223 example file with the bare minimum code for embedding.
5217 5224
5218 5225 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
5219 5226 functionality for the embeddable shell to be activated/deactivated
5220 5227 either globally or at each call.
5221 5228
5222 5229 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
5223 5230 rewriting the prompt with '--->' for auto-inputs with proper
5224 5231 coloring. Now the previous UGLY hack in handle_auto() is gone, and
5225 5232 this is handled by the prompts class itself, as it should.
5226 5233
5227 5234 2002-03-05 Fernando Perez <fperez@colorado.edu>
5228 5235
5229 5236 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
5230 5237 @logstart to avoid name clashes with the math log function.
5231 5238
5232 5239 * Big updates to X/Emacs section of the manual.
5233 5240
5234 5241 * Removed ipython_emacs. Milan explained to me how to pass
5235 5242 arguments to ipython through Emacs. Some day I'm going to end up
5236 5243 learning some lisp...
5237 5244
5238 5245 2002-03-04 Fernando Perez <fperez@colorado.edu>
5239 5246
5240 5247 * IPython/ipython_emacs: Created script to be used as the
5241 5248 py-python-command Emacs variable so we can pass IPython
5242 5249 parameters. I can't figure out how to tell Emacs directly to pass
5243 5250 parameters to IPython, so a dummy shell script will do it.
5244 5251
5245 5252 Other enhancements made for things to work better under Emacs'
5246 5253 various types of terminals. Many thanks to Milan Zamazal
5247 5254 <pdm-AT-zamazal.org> for all the suggestions and pointers.
5248 5255
5249 5256 2002-03-01 Fernando Perez <fperez@colorado.edu>
5250 5257
5251 5258 * IPython/ipmaker.py (make_IPython): added a --readline! option so
5252 5259 that loading of readline is now optional. This gives better
5253 5260 control to emacs users.
5254 5261
5255 5262 * IPython/ultraTB.py (__date__): Modified color escape sequences
5256 5263 and now things work fine under xterm and in Emacs' term buffers
5257 5264 (though not shell ones). Well, in emacs you get colors, but all
5258 5265 seem to be 'light' colors (no difference between dark and light
5259 5266 ones). But the garbage chars are gone, and also in xterms. It
5260 5267 seems that now I'm using 'cleaner' ansi sequences.
5261 5268
5262 5269 2002-02-21 Fernando Perez <fperez@colorado.edu>
5263 5270
5264 5271 * Released 0.2.7 (mainly to publish the scoping fix).
5265 5272
5266 5273 * IPython/Logger.py (Logger.logstate): added. A corresponding
5267 5274 @logstate magic was created.
5268 5275
5269 5276 * IPython/Magic.py: fixed nested scoping problem under Python
5270 5277 2.1.x (automagic wasn't working).
5271 5278
5272 5279 2002-02-20 Fernando Perez <fperez@colorado.edu>
5273 5280
5274 5281 * Released 0.2.6.
5275 5282
5276 5283 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
5277 5284 option so that logs can come out without any headers at all.
5278 5285
5279 5286 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
5280 5287 SciPy.
5281 5288
5282 5289 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
5283 5290 that embedded IPython calls don't require vars() to be explicitly
5284 5291 passed. Now they are extracted from the caller's frame (code
5285 5292 snatched from Eric Jones' weave). Added better documentation to
5286 5293 the section on embedding and the example file.
5287 5294
5288 5295 * IPython/genutils.py (page): Changed so that under emacs, it just
5289 5296 prints the string. You can then page up and down in the emacs
5290 5297 buffer itself. This is how the builtin help() works.
5291 5298
5292 5299 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
5293 5300 macro scoping: macros need to be executed in the user's namespace
5294 5301 to work as if they had been typed by the user.
5295 5302
5296 5303 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
5297 5304 execute automatically (no need to type 'exec...'). They then
5298 5305 behave like 'true macros'. The printing system was also modified
5299 5306 for this to work.
5300 5307
5301 5308 2002-02-19 Fernando Perez <fperez@colorado.edu>
5302 5309
5303 5310 * IPython/genutils.py (page_file): new function for paging files
5304 5311 in an OS-independent way. Also necessary for file viewing to work
5305 5312 well inside Emacs buffers.
5306 5313 (page): Added checks for being in an emacs buffer.
5307 5314 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
5308 5315 same bug in iplib.
5309 5316
5310 5317 2002-02-18 Fernando Perez <fperez@colorado.edu>
5311 5318
5312 5319 * IPython/iplib.py (InteractiveShell.init_readline): modified use
5313 5320 of readline so that IPython can work inside an Emacs buffer.
5314 5321
5315 5322 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
5316 5323 method signatures (they weren't really bugs, but it looks cleaner
5317 5324 and keeps PyChecker happy).
5318 5325
5319 5326 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
5320 5327 for implementing various user-defined hooks. Currently only
5321 5328 display is done.
5322 5329
5323 5330 * IPython/Prompts.py (CachedOutput._display): changed display
5324 5331 functions so that they can be dynamically changed by users easily.
5325 5332
5326 5333 * IPython/Extensions/numeric_formats.py (num_display): added an
5327 5334 extension for printing NumPy arrays in flexible manners. It
5328 5335 doesn't do anything yet, but all the structure is in
5329 5336 place. Ultimately the plan is to implement output format control
5330 5337 like in Octave.
5331 5338
5332 5339 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
5333 5340 methods are found at run-time by all the automatic machinery.
5334 5341
5335 5342 2002-02-17 Fernando Perez <fperez@colorado.edu>
5336 5343
5337 5344 * setup_Windows.py (make_shortcut): documented. Cleaned up the
5338 5345 whole file a little.
5339 5346
5340 5347 * ToDo: closed this document. Now there's a new_design.lyx
5341 5348 document for all new ideas. Added making a pdf of it for the
5342 5349 end-user distro.
5343 5350
5344 5351 * IPython/Logger.py (Logger.switch_log): Created this to replace
5345 5352 logon() and logoff(). It also fixes a nasty crash reported by
5346 5353 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
5347 5354
5348 5355 * IPython/iplib.py (complete): got auto-completion to work with
5349 5356 automagic (I had wanted this for a long time).
5350 5357
5351 5358 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
5352 5359 to @file, since file() is now a builtin and clashes with automagic
5353 5360 for @file.
5354 5361
5355 5362 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
5356 5363 of this was previously in iplib, which had grown to more than 2000
5357 5364 lines, way too long. No new functionality, but it makes managing
5358 5365 the code a bit easier.
5359 5366
5360 5367 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
5361 5368 information to crash reports.
5362 5369
5363 5370 2002-02-12 Fernando Perez <fperez@colorado.edu>
5364 5371
5365 5372 * Released 0.2.5.
5366 5373
5367 5374 2002-02-11 Fernando Perez <fperez@colorado.edu>
5368 5375
5369 5376 * Wrote a relatively complete Windows installer. It puts
5370 5377 everything in place, creates Start Menu entries and fixes the
5371 5378 color issues. Nothing fancy, but it works.
5372 5379
5373 5380 2002-02-10 Fernando Perez <fperez@colorado.edu>
5374 5381
5375 5382 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
5376 5383 os.path.expanduser() call so that we can type @run ~/myfile.py and
5377 5384 have thigs work as expected.
5378 5385
5379 5386 * IPython/genutils.py (page): fixed exception handling so things
5380 5387 work both in Unix and Windows correctly. Quitting a pager triggers
5381 5388 an IOError/broken pipe in Unix, and in windows not finding a pager
5382 5389 is also an IOError, so I had to actually look at the return value
5383 5390 of the exception, not just the exception itself. Should be ok now.
5384 5391
5385 5392 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
5386 5393 modified to allow case-insensitive color scheme changes.
5387 5394
5388 5395 2002-02-09 Fernando Perez <fperez@colorado.edu>
5389 5396
5390 5397 * IPython/genutils.py (native_line_ends): new function to leave
5391 5398 user config files with os-native line-endings.
5392 5399
5393 5400 * README and manual updates.
5394 5401
5395 5402 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
5396 5403 instead of StringType to catch Unicode strings.
5397 5404
5398 5405 * IPython/genutils.py (filefind): fixed bug for paths with
5399 5406 embedded spaces (very common in Windows).
5400 5407
5401 5408 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
5402 5409 files under Windows, so that they get automatically associated
5403 5410 with a text editor. Windows makes it a pain to handle
5404 5411 extension-less files.
5405 5412
5406 5413 * IPython/iplib.py (InteractiveShell.init_readline): Made the
5407 5414 warning about readline only occur for Posix. In Windows there's no
5408 5415 way to get readline, so why bother with the warning.
5409 5416
5410 5417 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
5411 5418 for __str__ instead of dir(self), since dir() changed in 2.2.
5412 5419
5413 5420 * Ported to Windows! Tested on XP, I suspect it should work fine
5414 5421 on NT/2000, but I don't think it will work on 98 et al. That
5415 5422 series of Windows is such a piece of junk anyway that I won't try
5416 5423 porting it there. The XP port was straightforward, showed a few
5417 5424 bugs here and there (fixed all), in particular some string
5418 5425 handling stuff which required considering Unicode strings (which
5419 5426 Windows uses). This is good, but hasn't been too tested :) No
5420 5427 fancy installer yet, I'll put a note in the manual so people at
5421 5428 least make manually a shortcut.
5422 5429
5423 5430 * IPython/iplib.py (Magic.magic_colors): Unified the color options
5424 5431 into a single one, "colors". This now controls both prompt and
5425 5432 exception color schemes, and can be changed both at startup
5426 5433 (either via command-line switches or via ipythonrc files) and at
5427 5434 runtime, with @colors.
5428 5435 (Magic.magic_run): renamed @prun to @run and removed the old
5429 5436 @run. The two were too similar to warrant keeping both.
5430 5437
5431 5438 2002-02-03 Fernando Perez <fperez@colorado.edu>
5432 5439
5433 5440 * IPython/iplib.py (install_first_time): Added comment on how to
5434 5441 configure the color options for first-time users. Put a <return>
5435 5442 request at the end so that small-terminal users get a chance to
5436 5443 read the startup info.
5437 5444
5438 5445 2002-01-23 Fernando Perez <fperez@colorado.edu>
5439 5446
5440 5447 * IPython/iplib.py (CachedOutput.update): Changed output memory
5441 5448 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
5442 5449 input history we still use _i. Did this b/c these variable are
5443 5450 very commonly used in interactive work, so the less we need to
5444 5451 type the better off we are.
5445 5452 (Magic.magic_prun): updated @prun to better handle the namespaces
5446 5453 the file will run in, including a fix for __name__ not being set
5447 5454 before.
5448 5455
5449 5456 2002-01-20 Fernando Perez <fperez@colorado.edu>
5450 5457
5451 5458 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
5452 5459 extra garbage for Python 2.2. Need to look more carefully into
5453 5460 this later.
5454 5461
5455 5462 2002-01-19 Fernando Perez <fperez@colorado.edu>
5456 5463
5457 5464 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
5458 5465 display SyntaxError exceptions properly formatted when they occur
5459 5466 (they can be triggered by imported code).
5460 5467
5461 5468 2002-01-18 Fernando Perez <fperez@colorado.edu>
5462 5469
5463 5470 * IPython/iplib.py (InteractiveShell.safe_execfile): now
5464 5471 SyntaxError exceptions are reported nicely formatted, instead of
5465 5472 spitting out only offset information as before.
5466 5473 (Magic.magic_prun): Added the @prun function for executing
5467 5474 programs with command line args inside IPython.
5468 5475
5469 5476 2002-01-16 Fernando Perez <fperez@colorado.edu>
5470 5477
5471 5478 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5472 5479 to *not* include the last item given in a range. This brings their
5473 5480 behavior in line with Python's slicing:
5474 5481 a[n1:n2] -> a[n1]...a[n2-1]
5475 5482 It may be a bit less convenient, but I prefer to stick to Python's
5476 5483 conventions *everywhere*, so users never have to wonder.
5477 5484 (Magic.magic_macro): Added @macro function to ease the creation of
5478 5485 macros.
5479 5486
5480 5487 2002-01-05 Fernando Perez <fperez@colorado.edu>
5481 5488
5482 5489 * Released 0.2.4.
5483 5490
5484 5491 * IPython/iplib.py (Magic.magic_pdef):
5485 5492 (InteractiveShell.safe_execfile): report magic lines and error
5486 5493 lines without line numbers so one can easily copy/paste them for
5487 5494 re-execution.
5488 5495
5489 5496 * Updated manual with recent changes.
5490 5497
5491 5498 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5492 5499 docstring printing when class? is called. Very handy for knowing
5493 5500 how to create class instances (as long as __init__ is well
5494 5501 documented, of course :)
5495 5502 (Magic.magic_doc): print both class and constructor docstrings.
5496 5503 (Magic.magic_pdef): give constructor info if passed a class and
5497 5504 __call__ info for callable object instances.
5498 5505
5499 5506 2002-01-04 Fernando Perez <fperez@colorado.edu>
5500 5507
5501 5508 * Made deep_reload() off by default. It doesn't always work
5502 5509 exactly as intended, so it's probably safer to have it off. It's
5503 5510 still available as dreload() anyway, so nothing is lost.
5504 5511
5505 5512 2002-01-02 Fernando Perez <fperez@colorado.edu>
5506 5513
5507 5514 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5508 5515 so I wanted an updated release).
5509 5516
5510 5517 2001-12-27 Fernando Perez <fperez@colorado.edu>
5511 5518
5512 5519 * IPython/iplib.py (InteractiveShell.interact): Added the original
5513 5520 code from 'code.py' for this module in order to change the
5514 5521 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5515 5522 the history cache would break when the user hit Ctrl-C, and
5516 5523 interact() offers no way to add any hooks to it.
5517 5524
5518 5525 2001-12-23 Fernando Perez <fperez@colorado.edu>
5519 5526
5520 5527 * setup.py: added check for 'MANIFEST' before trying to remove
5521 5528 it. Thanks to Sean Reifschneider.
5522 5529
5523 5530 2001-12-22 Fernando Perez <fperez@colorado.edu>
5524 5531
5525 5532 * Released 0.2.2.
5526 5533
5527 5534 * Finished (reasonably) writing the manual. Later will add the
5528 5535 python-standard navigation stylesheets, but for the time being
5529 5536 it's fairly complete. Distribution will include html and pdf
5530 5537 versions.
5531 5538
5532 5539 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5533 5540 (MayaVi author).
5534 5541
5535 5542 2001-12-21 Fernando Perez <fperez@colorado.edu>
5536 5543
5537 5544 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5538 5545 good public release, I think (with the manual and the distutils
5539 5546 installer). The manual can use some work, but that can go
5540 5547 slowly. Otherwise I think it's quite nice for end users. Next
5541 5548 summer, rewrite the guts of it...
5542 5549
5543 5550 * Changed format of ipythonrc files to use whitespace as the
5544 5551 separator instead of an explicit '='. Cleaner.
5545 5552
5546 5553 2001-12-20 Fernando Perez <fperez@colorado.edu>
5547 5554
5548 5555 * Started a manual in LyX. For now it's just a quick merge of the
5549 5556 various internal docstrings and READMEs. Later it may grow into a
5550 5557 nice, full-blown manual.
5551 5558
5552 5559 * Set up a distutils based installer. Installation should now be
5553 5560 trivially simple for end-users.
5554 5561
5555 5562 2001-12-11 Fernando Perez <fperez@colorado.edu>
5556 5563
5557 5564 * Released 0.2.0. First public release, announced it at
5558 5565 comp.lang.python. From now on, just bugfixes...
5559 5566
5560 5567 * Went through all the files, set copyright/license notices and
5561 5568 cleaned up things. Ready for release.
5562 5569
5563 5570 2001-12-10 Fernando Perez <fperez@colorado.edu>
5564 5571
5565 5572 * Changed the first-time installer not to use tarfiles. It's more
5566 5573 robust now and less unix-dependent. Also makes it easier for
5567 5574 people to later upgrade versions.
5568 5575
5569 5576 * Changed @exit to @abort to reflect the fact that it's pretty
5570 5577 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5571 5578 becomes significant only when IPyhton is embedded: in that case,
5572 5579 C-D closes IPython only, but @abort kills the enclosing program
5573 5580 too (unless it had called IPython inside a try catching
5574 5581 SystemExit).
5575 5582
5576 5583 * Created Shell module which exposes the actuall IPython Shell
5577 5584 classes, currently the normal and the embeddable one. This at
5578 5585 least offers a stable interface we won't need to change when
5579 5586 (later) the internals are rewritten. That rewrite will be confined
5580 5587 to iplib and ipmaker, but the Shell interface should remain as is.
5581 5588
5582 5589 * Added embed module which offers an embeddable IPShell object,
5583 5590 useful to fire up IPython *inside* a running program. Great for
5584 5591 debugging or dynamical data analysis.
5585 5592
5586 5593 2001-12-08 Fernando Perez <fperez@colorado.edu>
5587 5594
5588 5595 * Fixed small bug preventing seeing info from methods of defined
5589 5596 objects (incorrect namespace in _ofind()).
5590 5597
5591 5598 * Documentation cleanup. Moved the main usage docstrings to a
5592 5599 separate file, usage.py (cleaner to maintain, and hopefully in the
5593 5600 future some perlpod-like way of producing interactive, man and
5594 5601 html docs out of it will be found).
5595 5602
5596 5603 * Added @profile to see your profile at any time.
5597 5604
5598 5605 * Added @p as an alias for 'print'. It's especially convenient if
5599 5606 using automagic ('p x' prints x).
5600 5607
5601 5608 * Small cleanups and fixes after a pychecker run.
5602 5609
5603 5610 * Changed the @cd command to handle @cd - and @cd -<n> for
5604 5611 visiting any directory in _dh.
5605 5612
5606 5613 * Introduced _dh, a history of visited directories. @dhist prints
5607 5614 it out with numbers.
5608 5615
5609 5616 2001-12-07 Fernando Perez <fperez@colorado.edu>
5610 5617
5611 5618 * Released 0.1.22
5612 5619
5613 5620 * Made initialization a bit more robust against invalid color
5614 5621 options in user input (exit, not traceback-crash).
5615 5622
5616 5623 * Changed the bug crash reporter to write the report only in the
5617 5624 user's .ipython directory. That way IPython won't litter people's
5618 5625 hard disks with crash files all over the place. Also print on
5619 5626 screen the necessary mail command.
5620 5627
5621 5628 * With the new ultraTB, implemented LightBG color scheme for light
5622 5629 background terminals. A lot of people like white backgrounds, so I
5623 5630 guess we should at least give them something readable.
5624 5631
5625 5632 2001-12-06 Fernando Perez <fperez@colorado.edu>
5626 5633
5627 5634 * Modified the structure of ultraTB. Now there's a proper class
5628 5635 for tables of color schemes which allow adding schemes easily and
5629 5636 switching the active scheme without creating a new instance every
5630 5637 time (which was ridiculous). The syntax for creating new schemes
5631 5638 is also cleaner. I think ultraTB is finally done, with a clean
5632 5639 class structure. Names are also much cleaner (now there's proper
5633 5640 color tables, no need for every variable to also have 'color' in
5634 5641 its name).
5635 5642
5636 5643 * Broke down genutils into separate files. Now genutils only
5637 5644 contains utility functions, and classes have been moved to their
5638 5645 own files (they had enough independent functionality to warrant
5639 5646 it): ConfigLoader, OutputTrap, Struct.
5640 5647
5641 5648 2001-12-05 Fernando Perez <fperez@colorado.edu>
5642 5649
5643 5650 * IPython turns 21! Released version 0.1.21, as a candidate for
5644 5651 public consumption. If all goes well, release in a few days.
5645 5652
5646 5653 * Fixed path bug (files in Extensions/ directory wouldn't be found
5647 5654 unless IPython/ was explicitly in sys.path).
5648 5655
5649 5656 * Extended the FlexCompleter class as MagicCompleter to allow
5650 5657 completion of @-starting lines.
5651 5658
5652 5659 * Created __release__.py file as a central repository for release
5653 5660 info that other files can read from.
5654 5661
5655 5662 * Fixed small bug in logging: when logging was turned on in
5656 5663 mid-session, old lines with special meanings (!@?) were being
5657 5664 logged without the prepended comment, which is necessary since
5658 5665 they are not truly valid python syntax. This should make session
5659 5666 restores produce less errors.
5660 5667
5661 5668 * The namespace cleanup forced me to make a FlexCompleter class
5662 5669 which is nothing but a ripoff of rlcompleter, but with selectable
5663 5670 namespace (rlcompleter only works in __main__.__dict__). I'll try
5664 5671 to submit a note to the authors to see if this change can be
5665 5672 incorporated in future rlcompleter releases (Dec.6: done)
5666 5673
5667 5674 * More fixes to namespace handling. It was a mess! Now all
5668 5675 explicit references to __main__.__dict__ are gone (except when
5669 5676 really needed) and everything is handled through the namespace
5670 5677 dicts in the IPython instance. We seem to be getting somewhere
5671 5678 with this, finally...
5672 5679
5673 5680 * Small documentation updates.
5674 5681
5675 5682 * Created the Extensions directory under IPython (with an
5676 5683 __init__.py). Put the PhysicalQ stuff there. This directory should
5677 5684 be used for all special-purpose extensions.
5678 5685
5679 5686 * File renaming:
5680 5687 ipythonlib --> ipmaker
5681 5688 ipplib --> iplib
5682 5689 This makes a bit more sense in terms of what these files actually do.
5683 5690
5684 5691 * Moved all the classes and functions in ipythonlib to ipplib, so
5685 5692 now ipythonlib only has make_IPython(). This will ease up its
5686 5693 splitting in smaller functional chunks later.
5687 5694
5688 5695 * Cleaned up (done, I think) output of @whos. Better column
5689 5696 formatting, and now shows str(var) for as much as it can, which is
5690 5697 typically what one gets with a 'print var'.
5691 5698
5692 5699 2001-12-04 Fernando Perez <fperez@colorado.edu>
5693 5700
5694 5701 * Fixed namespace problems. Now builtin/IPyhton/user names get
5695 5702 properly reported in their namespace. Internal namespace handling
5696 5703 is finally getting decent (not perfect yet, but much better than
5697 5704 the ad-hoc mess we had).
5698 5705
5699 5706 * Removed -exit option. If people just want to run a python
5700 5707 script, that's what the normal interpreter is for. Less
5701 5708 unnecessary options, less chances for bugs.
5702 5709
5703 5710 * Added a crash handler which generates a complete post-mortem if
5704 5711 IPython crashes. This will help a lot in tracking bugs down the
5705 5712 road.
5706 5713
5707 5714 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5708 5715 which were boud to functions being reassigned would bypass the
5709 5716 logger, breaking the sync of _il with the prompt counter. This
5710 5717 would then crash IPython later when a new line was logged.
5711 5718
5712 5719 2001-12-02 Fernando Perez <fperez@colorado.edu>
5713 5720
5714 5721 * Made IPython a package. This means people don't have to clutter
5715 5722 their sys.path with yet another directory. Changed the INSTALL
5716 5723 file accordingly.
5717 5724
5718 5725 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5719 5726 sorts its output (so @who shows it sorted) and @whos formats the
5720 5727 table according to the width of the first column. Nicer, easier to
5721 5728 read. Todo: write a generic table_format() which takes a list of
5722 5729 lists and prints it nicely formatted, with optional row/column
5723 5730 separators and proper padding and justification.
5724 5731
5725 5732 * Released 0.1.20
5726 5733
5727 5734 * Fixed bug in @log which would reverse the inputcache list (a
5728 5735 copy operation was missing).
5729 5736
5730 5737 * Code cleanup. @config was changed to use page(). Better, since
5731 5738 its output is always quite long.
5732 5739
5733 5740 * Itpl is back as a dependency. I was having too many problems
5734 5741 getting the parametric aliases to work reliably, and it's just
5735 5742 easier to code weird string operations with it than playing %()s
5736 5743 games. It's only ~6k, so I don't think it's too big a deal.
5737 5744
5738 5745 * Found (and fixed) a very nasty bug with history. !lines weren't
5739 5746 getting cached, and the out of sync caches would crash
5740 5747 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5741 5748 division of labor a bit better. Bug fixed, cleaner structure.
5742 5749
5743 5750 2001-12-01 Fernando Perez <fperez@colorado.edu>
5744 5751
5745 5752 * Released 0.1.19
5746 5753
5747 5754 * Added option -n to @hist to prevent line number printing. Much
5748 5755 easier to copy/paste code this way.
5749 5756
5750 5757 * Created global _il to hold the input list. Allows easy
5751 5758 re-execution of blocks of code by slicing it (inspired by Janko's
5752 5759 comment on 'macros').
5753 5760
5754 5761 * Small fixes and doc updates.
5755 5762
5756 5763 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5757 5764 much too fragile with automagic. Handles properly multi-line
5758 5765 statements and takes parameters.
5759 5766
5760 5767 2001-11-30 Fernando Perez <fperez@colorado.edu>
5761 5768
5762 5769 * Version 0.1.18 released.
5763 5770
5764 5771 * Fixed nasty namespace bug in initial module imports.
5765 5772
5766 5773 * Added copyright/license notes to all code files (except
5767 5774 DPyGetOpt). For the time being, LGPL. That could change.
5768 5775
5769 5776 * Rewrote a much nicer README, updated INSTALL, cleaned up
5770 5777 ipythonrc-* samples.
5771 5778
5772 5779 * Overall code/documentation cleanup. Basically ready for
5773 5780 release. Only remaining thing: licence decision (LGPL?).
5774 5781
5775 5782 * Converted load_config to a class, ConfigLoader. Now recursion
5776 5783 control is better organized. Doesn't include the same file twice.
5777 5784
5778 5785 2001-11-29 Fernando Perez <fperez@colorado.edu>
5779 5786
5780 5787 * Got input history working. Changed output history variables from
5781 5788 _p to _o so that _i is for input and _o for output. Just cleaner
5782 5789 convention.
5783 5790
5784 5791 * Implemented parametric aliases. This pretty much allows the
5785 5792 alias system to offer full-blown shell convenience, I think.
5786 5793
5787 5794 * Version 0.1.17 released, 0.1.18 opened.
5788 5795
5789 5796 * dot_ipython/ipythonrc (alias): added documentation.
5790 5797 (xcolor): Fixed small bug (xcolors -> xcolor)
5791 5798
5792 5799 * Changed the alias system. Now alias is a magic command to define
5793 5800 aliases just like the shell. Rationale: the builtin magics should
5794 5801 be there for things deeply connected to IPython's
5795 5802 architecture. And this is a much lighter system for what I think
5796 5803 is the really important feature: allowing users to define quickly
5797 5804 magics that will do shell things for them, so they can customize
5798 5805 IPython easily to match their work habits. If someone is really
5799 5806 desperate to have another name for a builtin alias, they can
5800 5807 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5801 5808 works.
5802 5809
5803 5810 2001-11-28 Fernando Perez <fperez@colorado.edu>
5804 5811
5805 5812 * Changed @file so that it opens the source file at the proper
5806 5813 line. Since it uses less, if your EDITOR environment is
5807 5814 configured, typing v will immediately open your editor of choice
5808 5815 right at the line where the object is defined. Not as quick as
5809 5816 having a direct @edit command, but for all intents and purposes it
5810 5817 works. And I don't have to worry about writing @edit to deal with
5811 5818 all the editors, less does that.
5812 5819
5813 5820 * Version 0.1.16 released, 0.1.17 opened.
5814 5821
5815 5822 * Fixed some nasty bugs in the page/page_dumb combo that could
5816 5823 crash IPython.
5817 5824
5818 5825 2001-11-27 Fernando Perez <fperez@colorado.edu>
5819 5826
5820 5827 * Version 0.1.15 released, 0.1.16 opened.
5821 5828
5822 5829 * Finally got ? and ?? to work for undefined things: now it's
5823 5830 possible to type {}.get? and get information about the get method
5824 5831 of dicts, or os.path? even if only os is defined (so technically
5825 5832 os.path isn't). Works at any level. For example, after import os,
5826 5833 os?, os.path?, os.path.abspath? all work. This is great, took some
5827 5834 work in _ofind.
5828 5835
5829 5836 * Fixed more bugs with logging. The sanest way to do it was to add
5830 5837 to @log a 'mode' parameter. Killed two in one shot (this mode
5831 5838 option was a request of Janko's). I think it's finally clean
5832 5839 (famous last words).
5833 5840
5834 5841 * Added a page_dumb() pager which does a decent job of paging on
5835 5842 screen, if better things (like less) aren't available. One less
5836 5843 unix dependency (someday maybe somebody will port this to
5837 5844 windows).
5838 5845
5839 5846 * Fixed problem in magic_log: would lock of logging out if log
5840 5847 creation failed (because it would still think it had succeeded).
5841 5848
5842 5849 * Improved the page() function using curses to auto-detect screen
5843 5850 size. Now it can make a much better decision on whether to print
5844 5851 or page a string. Option screen_length was modified: a value 0
5845 5852 means auto-detect, and that's the default now.
5846 5853
5847 5854 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5848 5855 go out. I'll test it for a few days, then talk to Janko about
5849 5856 licences and announce it.
5850 5857
5851 5858 * Fixed the length of the auto-generated ---> prompt which appears
5852 5859 for auto-parens and auto-quotes. Getting this right isn't trivial,
5853 5860 with all the color escapes, different prompt types and optional
5854 5861 separators. But it seems to be working in all the combinations.
5855 5862
5856 5863 2001-11-26 Fernando Perez <fperez@colorado.edu>
5857 5864
5858 5865 * Wrote a regexp filter to get option types from the option names
5859 5866 string. This eliminates the need to manually keep two duplicate
5860 5867 lists.
5861 5868
5862 5869 * Removed the unneeded check_option_names. Now options are handled
5863 5870 in a much saner manner and it's easy to visually check that things
5864 5871 are ok.
5865 5872
5866 5873 * Updated version numbers on all files I modified to carry a
5867 5874 notice so Janko and Nathan have clear version markers.
5868 5875
5869 5876 * Updated docstring for ultraTB with my changes. I should send
5870 5877 this to Nathan.
5871 5878
5872 5879 * Lots of small fixes. Ran everything through pychecker again.
5873 5880
5874 5881 * Made loading of deep_reload an cmd line option. If it's not too
5875 5882 kosher, now people can just disable it. With -nodeep_reload it's
5876 5883 still available as dreload(), it just won't overwrite reload().
5877 5884
5878 5885 * Moved many options to the no| form (-opt and -noopt
5879 5886 accepted). Cleaner.
5880 5887
5881 5888 * Changed magic_log so that if called with no parameters, it uses
5882 5889 'rotate' mode. That way auto-generated logs aren't automatically
5883 5890 over-written. For normal logs, now a backup is made if it exists
5884 5891 (only 1 level of backups). A new 'backup' mode was added to the
5885 5892 Logger class to support this. This was a request by Janko.
5886 5893
5887 5894 * Added @logoff/@logon to stop/restart an active log.
5888 5895
5889 5896 * Fixed a lot of bugs in log saving/replay. It was pretty
5890 5897 broken. Now special lines (!@,/) appear properly in the command
5891 5898 history after a log replay.
5892 5899
5893 5900 * Tried and failed to implement full session saving via pickle. My
5894 5901 idea was to pickle __main__.__dict__, but modules can't be
5895 5902 pickled. This would be a better alternative to replaying logs, but
5896 5903 seems quite tricky to get to work. Changed -session to be called
5897 5904 -logplay, which more accurately reflects what it does. And if we
5898 5905 ever get real session saving working, -session is now available.
5899 5906
5900 5907 * Implemented color schemes for prompts also. As for tracebacks,
5901 5908 currently only NoColor and Linux are supported. But now the
5902 5909 infrastructure is in place, based on a generic ColorScheme
5903 5910 class. So writing and activating new schemes both for the prompts
5904 5911 and the tracebacks should be straightforward.
5905 5912
5906 5913 * Version 0.1.13 released, 0.1.14 opened.
5907 5914
5908 5915 * Changed handling of options for output cache. Now counter is
5909 5916 hardwired starting at 1 and one specifies the maximum number of
5910 5917 entries *in the outcache* (not the max prompt counter). This is
5911 5918 much better, since many statements won't increase the cache
5912 5919 count. It also eliminated some confusing options, now there's only
5913 5920 one: cache_size.
5914 5921
5915 5922 * Added 'alias' magic function and magic_alias option in the
5916 5923 ipythonrc file. Now the user can easily define whatever names he
5917 5924 wants for the magic functions without having to play weird
5918 5925 namespace games. This gives IPython a real shell-like feel.
5919 5926
5920 5927 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5921 5928 @ or not).
5922 5929
5923 5930 This was one of the last remaining 'visible' bugs (that I know
5924 5931 of). I think if I can clean up the session loading so it works
5925 5932 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5926 5933 about licensing).
5927 5934
5928 5935 2001-11-25 Fernando Perez <fperez@colorado.edu>
5929 5936
5930 5937 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5931 5938 there's a cleaner distinction between what ? and ?? show.
5932 5939
5933 5940 * Added screen_length option. Now the user can define his own
5934 5941 screen size for page() operations.
5935 5942
5936 5943 * Implemented magic shell-like functions with automatic code
5937 5944 generation. Now adding another function is just a matter of adding
5938 5945 an entry to a dict, and the function is dynamically generated at
5939 5946 run-time. Python has some really cool features!
5940 5947
5941 5948 * Renamed many options to cleanup conventions a little. Now all
5942 5949 are lowercase, and only underscores where needed. Also in the code
5943 5950 option name tables are clearer.
5944 5951
5945 5952 * Changed prompts a little. Now input is 'In [n]:' instead of
5946 5953 'In[n]:='. This allows it the numbers to be aligned with the
5947 5954 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5948 5955 Python (it was a Mathematica thing). The '...' continuation prompt
5949 5956 was also changed a little to align better.
5950 5957
5951 5958 * Fixed bug when flushing output cache. Not all _p<n> variables
5952 5959 exist, so their deletion needs to be wrapped in a try:
5953 5960
5954 5961 * Figured out how to properly use inspect.formatargspec() (it
5955 5962 requires the args preceded by *). So I removed all the code from
5956 5963 _get_pdef in Magic, which was just replicating that.
5957 5964
5958 5965 * Added test to prefilter to allow redefining magic function names
5959 5966 as variables. This is ok, since the @ form is always available,
5960 5967 but whe should allow the user to define a variable called 'ls' if
5961 5968 he needs it.
5962 5969
5963 5970 * Moved the ToDo information from README into a separate ToDo.
5964 5971
5965 5972 * General code cleanup and small bugfixes. I think it's close to a
5966 5973 state where it can be released, obviously with a big 'beta'
5967 5974 warning on it.
5968 5975
5969 5976 * Got the magic function split to work. Now all magics are defined
5970 5977 in a separate class. It just organizes things a bit, and now
5971 5978 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5972 5979 was too long).
5973 5980
5974 5981 * Changed @clear to @reset to avoid potential confusions with
5975 5982 the shell command clear. Also renamed @cl to @clear, which does
5976 5983 exactly what people expect it to from their shell experience.
5977 5984
5978 5985 Added a check to the @reset command (since it's so
5979 5986 destructive, it's probably a good idea to ask for confirmation).
5980 5987 But now reset only works for full namespace resetting. Since the
5981 5988 del keyword is already there for deleting a few specific
5982 5989 variables, I don't see the point of having a redundant magic
5983 5990 function for the same task.
5984 5991
5985 5992 2001-11-24 Fernando Perez <fperez@colorado.edu>
5986 5993
5987 5994 * Updated the builtin docs (esp. the ? ones).
5988 5995
5989 5996 * Ran all the code through pychecker. Not terribly impressed with
5990 5997 it: lots of spurious warnings and didn't really find anything of
5991 5998 substance (just a few modules being imported and not used).
5992 5999
5993 6000 * Implemented the new ultraTB functionality into IPython. New
5994 6001 option: xcolors. This chooses color scheme. xmode now only selects
5995 6002 between Plain and Verbose. Better orthogonality.
5996 6003
5997 6004 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5998 6005 mode and color scheme for the exception handlers. Now it's
5999 6006 possible to have the verbose traceback with no coloring.
6000 6007
6001 6008 2001-11-23 Fernando Perez <fperez@colorado.edu>
6002 6009
6003 6010 * Version 0.1.12 released, 0.1.13 opened.
6004 6011
6005 6012 * Removed option to set auto-quote and auto-paren escapes by
6006 6013 user. The chances of breaking valid syntax are just too high. If
6007 6014 someone *really* wants, they can always dig into the code.
6008 6015
6009 6016 * Made prompt separators configurable.
6010 6017
6011 6018 2001-11-22 Fernando Perez <fperez@colorado.edu>
6012 6019
6013 6020 * Small bugfixes in many places.
6014 6021
6015 6022 * Removed the MyCompleter class from ipplib. It seemed redundant
6016 6023 with the C-p,C-n history search functionality. Less code to
6017 6024 maintain.
6018 6025
6019 6026 * Moved all the original ipython.py code into ipythonlib.py. Right
6020 6027 now it's just one big dump into a function called make_IPython, so
6021 6028 no real modularity has been gained. But at least it makes the
6022 6029 wrapper script tiny, and since ipythonlib is a module, it gets
6023 6030 compiled and startup is much faster.
6024 6031
6025 6032 This is a reasobably 'deep' change, so we should test it for a
6026 6033 while without messing too much more with the code.
6027 6034
6028 6035 2001-11-21 Fernando Perez <fperez@colorado.edu>
6029 6036
6030 6037 * Version 0.1.11 released, 0.1.12 opened for further work.
6031 6038
6032 6039 * Removed dependency on Itpl. It was only needed in one place. It
6033 6040 would be nice if this became part of python, though. It makes life
6034 6041 *a lot* easier in some cases.
6035 6042
6036 6043 * Simplified the prefilter code a bit. Now all handlers are
6037 6044 expected to explicitly return a value (at least a blank string).
6038 6045
6039 6046 * Heavy edits in ipplib. Removed the help system altogether. Now
6040 6047 obj?/?? is used for inspecting objects, a magic @doc prints
6041 6048 docstrings, and full-blown Python help is accessed via the 'help'
6042 6049 keyword. This cleans up a lot of code (less to maintain) and does
6043 6050 the job. Since 'help' is now a standard Python component, might as
6044 6051 well use it and remove duplicate functionality.
6045 6052
6046 6053 Also removed the option to use ipplib as a standalone program. By
6047 6054 now it's too dependent on other parts of IPython to function alone.
6048 6055
6049 6056 * Fixed bug in genutils.pager. It would crash if the pager was
6050 6057 exited immediately after opening (broken pipe).
6051 6058
6052 6059 * Trimmed down the VerboseTB reporting a little. The header is
6053 6060 much shorter now and the repeated exception arguments at the end
6054 6061 have been removed. For interactive use the old header seemed a bit
6055 6062 excessive.
6056 6063
6057 6064 * Fixed small bug in output of @whos for variables with multi-word
6058 6065 types (only first word was displayed).
6059 6066
6060 6067 2001-11-17 Fernando Perez <fperez@colorado.edu>
6061 6068
6062 6069 * Version 0.1.10 released, 0.1.11 opened for further work.
6063 6070
6064 6071 * Modified dirs and friends. dirs now *returns* the stack (not
6065 6072 prints), so one can manipulate it as a variable. Convenient to
6066 6073 travel along many directories.
6067 6074
6068 6075 * Fixed bug in magic_pdef: would only work with functions with
6069 6076 arguments with default values.
6070 6077
6071 6078 2001-11-14 Fernando Perez <fperez@colorado.edu>
6072 6079
6073 6080 * Added the PhysicsInput stuff to dot_ipython so it ships as an
6074 6081 example with IPython. Various other minor fixes and cleanups.
6075 6082
6076 6083 * Version 0.1.9 released, 0.1.10 opened for further work.
6077 6084
6078 6085 * Added sys.path to the list of directories searched in the
6079 6086 execfile= option. It used to be the current directory and the
6080 6087 user's IPYTHONDIR only.
6081 6088
6082 6089 2001-11-13 Fernando Perez <fperez@colorado.edu>
6083 6090
6084 6091 * Reinstated the raw_input/prefilter separation that Janko had
6085 6092 initially. This gives a more convenient setup for extending the
6086 6093 pre-processor from the outside: raw_input always gets a string,
6087 6094 and prefilter has to process it. We can then redefine prefilter
6088 6095 from the outside and implement extensions for special
6089 6096 purposes.
6090 6097
6091 6098 Today I got one for inputting PhysicalQuantity objects
6092 6099 (from Scientific) without needing any function calls at
6093 6100 all. Extremely convenient, and it's all done as a user-level
6094 6101 extension (no IPython code was touched). Now instead of:
6095 6102 a = PhysicalQuantity(4.2,'m/s**2')
6096 6103 one can simply say
6097 6104 a = 4.2 m/s**2
6098 6105 or even
6099 6106 a = 4.2 m/s^2
6100 6107
6101 6108 I use this, but it's also a proof of concept: IPython really is
6102 6109 fully user-extensible, even at the level of the parsing of the
6103 6110 command line. It's not trivial, but it's perfectly doable.
6104 6111
6105 6112 * Added 'add_flip' method to inclusion conflict resolver. Fixes
6106 6113 the problem of modules being loaded in the inverse order in which
6107 6114 they were defined in
6108 6115
6109 6116 * Version 0.1.8 released, 0.1.9 opened for further work.
6110 6117
6111 6118 * Added magics pdef, source and file. They respectively show the
6112 6119 definition line ('prototype' in C), source code and full python
6113 6120 file for any callable object. The object inspector oinfo uses
6114 6121 these to show the same information.
6115 6122
6116 6123 * Version 0.1.7 released, 0.1.8 opened for further work.
6117 6124
6118 6125 * Separated all the magic functions into a class called Magic. The
6119 6126 InteractiveShell class was becoming too big for Xemacs to handle
6120 6127 (de-indenting a line would lock it up for 10 seconds while it
6121 6128 backtracked on the whole class!)
6122 6129
6123 6130 FIXME: didn't work. It can be done, but right now namespaces are
6124 6131 all messed up. Do it later (reverted it for now, so at least
6125 6132 everything works as before).
6126 6133
6127 6134 * Got the object introspection system (magic_oinfo) working! I
6128 6135 think this is pretty much ready for release to Janko, so he can
6129 6136 test it for a while and then announce it. Pretty much 100% of what
6130 6137 I wanted for the 'phase 1' release is ready. Happy, tired.
6131 6138
6132 6139 2001-11-12 Fernando Perez <fperez@colorado.edu>
6133 6140
6134 6141 * Version 0.1.6 released, 0.1.7 opened for further work.
6135 6142
6136 6143 * Fixed bug in printing: it used to test for truth before
6137 6144 printing, so 0 wouldn't print. Now checks for None.
6138 6145
6139 6146 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
6140 6147 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
6141 6148 reaches by hand into the outputcache. Think of a better way to do
6142 6149 this later.
6143 6150
6144 6151 * Various small fixes thanks to Nathan's comments.
6145 6152
6146 6153 * Changed magic_pprint to magic_Pprint. This way it doesn't
6147 6154 collide with pprint() and the name is consistent with the command
6148 6155 line option.
6149 6156
6150 6157 * Changed prompt counter behavior to be fully like
6151 6158 Mathematica's. That is, even input that doesn't return a result
6152 6159 raises the prompt counter. The old behavior was kind of confusing
6153 6160 (getting the same prompt number several times if the operation
6154 6161 didn't return a result).
6155 6162
6156 6163 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
6157 6164
6158 6165 * Fixed -Classic mode (wasn't working anymore).
6159 6166
6160 6167 * Added colored prompts using Nathan's new code. Colors are
6161 6168 currently hardwired, they can be user-configurable. For
6162 6169 developers, they can be chosen in file ipythonlib.py, at the
6163 6170 beginning of the CachedOutput class def.
6164 6171
6165 6172 2001-11-11 Fernando Perez <fperez@colorado.edu>
6166 6173
6167 6174 * Version 0.1.5 released, 0.1.6 opened for further work.
6168 6175
6169 6176 * Changed magic_env to *return* the environment as a dict (not to
6170 6177 print it). This way it prints, but it can also be processed.
6171 6178
6172 6179 * Added Verbose exception reporting to interactive
6173 6180 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
6174 6181 traceback. Had to make some changes to the ultraTB file. This is
6175 6182 probably the last 'big' thing in my mental todo list. This ties
6176 6183 in with the next entry:
6177 6184
6178 6185 * Changed -Xi and -Xf to a single -xmode option. Now all the user
6179 6186 has to specify is Plain, Color or Verbose for all exception
6180 6187 handling.
6181 6188
6182 6189 * Removed ShellServices option. All this can really be done via
6183 6190 the magic system. It's easier to extend, cleaner and has automatic
6184 6191 namespace protection and documentation.
6185 6192
6186 6193 2001-11-09 Fernando Perez <fperez@colorado.edu>
6187 6194
6188 6195 * Fixed bug in output cache flushing (missing parameter to
6189 6196 __init__). Other small bugs fixed (found using pychecker).
6190 6197
6191 6198 * Version 0.1.4 opened for bugfixing.
6192 6199
6193 6200 2001-11-07 Fernando Perez <fperez@colorado.edu>
6194 6201
6195 6202 * Version 0.1.3 released, mainly because of the raw_input bug.
6196 6203
6197 6204 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
6198 6205 and when testing for whether things were callable, a call could
6199 6206 actually be made to certain functions. They would get called again
6200 6207 once 'really' executed, with a resulting double call. A disaster
6201 6208 in many cases (list.reverse() would never work!).
6202 6209
6203 6210 * Removed prefilter() function, moved its code to raw_input (which
6204 6211 after all was just a near-empty caller for prefilter). This saves
6205 6212 a function call on every prompt, and simplifies the class a tiny bit.
6206 6213
6207 6214 * Fix _ip to __ip name in magic example file.
6208 6215
6209 6216 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
6210 6217 work with non-gnu versions of tar.
6211 6218
6212 6219 2001-11-06 Fernando Perez <fperez@colorado.edu>
6213 6220
6214 6221 * Version 0.1.2. Just to keep track of the recent changes.
6215 6222
6216 6223 * Fixed nasty bug in output prompt routine. It used to check 'if
6217 6224 arg != None...'. Problem is, this fails if arg implements a
6218 6225 special comparison (__cmp__) which disallows comparing to
6219 6226 None. Found it when trying to use the PhysicalQuantity module from
6220 6227 ScientificPython.
6221 6228
6222 6229 2001-11-05 Fernando Perez <fperez@colorado.edu>
6223 6230
6224 6231 * Also added dirs. Now the pushd/popd/dirs family functions
6225 6232 basically like the shell, with the added convenience of going home
6226 6233 when called with no args.
6227 6234
6228 6235 * pushd/popd slightly modified to mimic shell behavior more
6229 6236 closely.
6230 6237
6231 6238 * Added env,pushd,popd from ShellServices as magic functions. I
6232 6239 think the cleanest will be to port all desired functions from
6233 6240 ShellServices as magics and remove ShellServices altogether. This
6234 6241 will provide a single, clean way of adding functionality
6235 6242 (shell-type or otherwise) to IP.
6236 6243
6237 6244 2001-11-04 Fernando Perez <fperez@colorado.edu>
6238 6245
6239 6246 * Added .ipython/ directory to sys.path. This way users can keep
6240 6247 customizations there and access them via import.
6241 6248
6242 6249 2001-11-03 Fernando Perez <fperez@colorado.edu>
6243 6250
6244 6251 * Opened version 0.1.1 for new changes.
6245 6252
6246 6253 * Changed version number to 0.1.0: first 'public' release, sent to
6247 6254 Nathan and Janko.
6248 6255
6249 6256 * Lots of small fixes and tweaks.
6250 6257
6251 6258 * Minor changes to whos format. Now strings are shown, snipped if
6252 6259 too long.
6253 6260
6254 6261 * Changed ShellServices to work on __main__ so they show up in @who
6255 6262
6256 6263 * Help also works with ? at the end of a line:
6257 6264 ?sin and sin?
6258 6265 both produce the same effect. This is nice, as often I use the
6259 6266 tab-complete to find the name of a method, but I used to then have
6260 6267 to go to the beginning of the line to put a ? if I wanted more
6261 6268 info. Now I can just add the ? and hit return. Convenient.
6262 6269
6263 6270 2001-11-02 Fernando Perez <fperez@colorado.edu>
6264 6271
6265 6272 * Python version check (>=2.1) added.
6266 6273
6267 6274 * Added LazyPython documentation. At this point the docs are quite
6268 6275 a mess. A cleanup is in order.
6269 6276
6270 6277 * Auto-installer created. For some bizarre reason, the zipfiles
6271 6278 module isn't working on my system. So I made a tar version
6272 6279 (hopefully the command line options in various systems won't kill
6273 6280 me).
6274 6281
6275 6282 * Fixes to Struct in genutils. Now all dictionary-like methods are
6276 6283 protected (reasonably).
6277 6284
6278 6285 * Added pager function to genutils and changed ? to print usage
6279 6286 note through it (it was too long).
6280 6287
6281 6288 * Added the LazyPython functionality. Works great! I changed the
6282 6289 auto-quote escape to ';', it's on home row and next to '. But
6283 6290 both auto-quote and auto-paren (still /) escapes are command-line
6284 6291 parameters.
6285 6292
6286 6293
6287 6294 2001-11-01 Fernando Perez <fperez@colorado.edu>
6288 6295
6289 6296 * Version changed to 0.0.7. Fairly large change: configuration now
6290 6297 is all stored in a directory, by default .ipython. There, all
6291 6298 config files have normal looking names (not .names)
6292 6299
6293 6300 * Version 0.0.6 Released first to Lucas and Archie as a test
6294 6301 run. Since it's the first 'semi-public' release, change version to
6295 6302 > 0.0.6 for any changes now.
6296 6303
6297 6304 * Stuff I had put in the ipplib.py changelog:
6298 6305
6299 6306 Changes to InteractiveShell:
6300 6307
6301 6308 - Made the usage message a parameter.
6302 6309
6303 6310 - Require the name of the shell variable to be given. It's a bit
6304 6311 of a hack, but allows the name 'shell' not to be hardwired in the
6305 6312 magic (@) handler, which is problematic b/c it requires
6306 6313 polluting the global namespace with 'shell'. This in turn is
6307 6314 fragile: if a user redefines a variable called shell, things
6308 6315 break.
6309 6316
6310 6317 - magic @: all functions available through @ need to be defined
6311 6318 as magic_<name>, even though they can be called simply as
6312 6319 @<name>. This allows the special command @magic to gather
6313 6320 information automatically about all existing magic functions,
6314 6321 even if they are run-time user extensions, by parsing the shell
6315 6322 instance __dict__ looking for special magic_ names.
6316 6323
6317 6324 - mainloop: added *two* local namespace parameters. This allows
6318 6325 the class to differentiate between parameters which were there
6319 6326 before and after command line initialization was processed. This
6320 6327 way, later @who can show things loaded at startup by the
6321 6328 user. This trick was necessary to make session saving/reloading
6322 6329 really work: ideally after saving/exiting/reloading a session,
6323 6330 *everything* should look the same, including the output of @who. I
6324 6331 was only able to make this work with this double namespace
6325 6332 trick.
6326 6333
6327 6334 - added a header to the logfile which allows (almost) full
6328 6335 session restoring.
6329 6336
6330 6337 - prepend lines beginning with @ or !, with a and log
6331 6338 them. Why? !lines: may be useful to know what you did @lines:
6332 6339 they may affect session state. So when restoring a session, at
6333 6340 least inform the user of their presence. I couldn't quite get
6334 6341 them to properly re-execute, but at least the user is warned.
6335 6342
6336 6343 * Started ChangeLog.
@@ -1,479 +1,480 b''
1 1 ;;; ipython.el --- Adds support for IPython to python-mode.el
2 2
3 3 ;; Copyright (C) 2002, 2003, 2004, 2005 Alexander Schmolck
4 4 ;; Author: Alexander Schmolck
5 5 ;; Keywords: ipython python languages oop
6 6 ;; URL: http://ipython.scipy.org
7 7 ;; Compatibility: Emacs21, XEmacs21
8 8 ;; FIXME: #$@! INPUT RING
9 (defconst ipython-version "$Revision: 1851 $"
9 (defconst ipython-version "$Revision: 2154 $"
10 10 "VC version number.")
11 11
12 12 ;;; Commentary
13 13 ;; This library makes all the functionality python-mode has when running with
14 14 ;; the normal python-interpreter available for ipython, too. It also enables a
15 15 ;; persistent py-shell command history across sessions (if you exit python
16 16 ;; with C-d in py-shell) and defines the command `ipython-to-doctest', which
17 17 ;; can be used to convert bits of a ipython session into something that can be
18 18 ;; used for doctests. To install, put this file somewhere in your emacs
19 19 ;; `load-path' [1] and add the following line to your ~/.emacs file (the first
20 20 ;; line only needed if the default (``"ipython"``) is wrong)::
21 21 ;;
22 22 ;; (setq ipython-command "/SOME-PATH/ipython")
23 23 ;; (require 'ipython)
24 24 ;;
25 25 ;; Ipython will be set as the default python shell, but only if the ipython
26 26 ;; executable is in the path. For ipython sessions autocompletion with <tab>
27 27 ;; is also enabled (experimental feature!). Please also note that all the
28 28 ;; terminal functions in py-shell are handled by emacs's comint, **not** by
29 29 ;; (i)python, so importing readline etc. will have 0 effect.
30 30 ;;
31 31 ;; To start an interactive ipython session run `py-shell' with ``M-x py-shell``
32 32 ;; (or the default keybinding ``C-c C-!``).
33 33 ;;
34 34 ;; NOTE: This mode is currently somewhat alpha and although I hope that it
35 35 ;; will work fine for most cases, doing certain things (like the
36 36 ;; autocompletion and a decent scheme to switch between python interpreters)
37 37 ;; properly will also require changes to ipython that will likely have to wait
38 38 ;; for a larger rewrite scheduled some time in the future.
39 39 ;;
40 40 ;; Also note that you currently NEED THE CVS VERSION OF PYTHON.EL.
41 41 ;;
42 42 ;; Further note that I don't know whether this runs under windows or not and
43 43 ;; that if it doesn't I can't really help much, not being afflicted myself.
44 44 ;;
45 45 ;;
46 46 ;; Hints for effective usage
47 47 ;; -------------------------
48 48 ;;
49 49 ;; - IMO the best feature by far of the ipython/emacs combo is how much easier it
50 50 ;; makes it to find and fix bugs thanks to the ``%pdb on``/ pdbtrack combo. Try
51 51 ;; it: first in the ipython to shell do ``%pdb on`` then do something that will
52 52 ;; raise an exception (FIXME nice example) -- and be amazed how easy it is to
53 53 ;; inspect the live objects in each stack frames and to jump to the
54 54 ;; corresponding sourcecode locations as you walk up and down the stack trace
55 55 ;; (even without ``%pdb on`` you can always use ``C-c -`` (`py-up-exception')
56 56 ;; to jump to the corresponding source code locations).
57 57 ;;
58 58 ;; - emacs gives you much more powerful commandline editing and output searching
59 59 ;; capabilities than ipython-standalone -- isearch is your friend if you
60 60 ;; quickly want to print 'DEBUG ...' to stdout out etc.
61 61 ;;
62 62 ;; - This is not really specific to ipython, but for more convenient history
63 63 ;; access you might want to add something like the following to *the beggining*
64 64 ;; of your ``.emacs`` (if you want behavior that's more similar to stand-alone
65 65 ;; ipython, you can change ``meta p`` etc. for ``control p``)::
66 66 ;;
67 67 ;; (require 'comint)
68 68 ;; (define-key comint-mode-map [(meta p)]
69 69 ;; 'comint-previous-matching-input-from-input)
70 70 ;; (define-key comint-mode-map [(meta n)]
71 71 ;; 'comint-next-matching-input-from-input)
72 72 ;; (define-key comint-mode-map [(control meta n)]
73 73 ;; 'comint-next-input)
74 74 ;; (define-key comint-mode-map [(control meta p)]
75 75 ;; 'comint-previous-input)
76 76 ;;
77 77 ;; - Be aware that if you customize py-python-command previously, this value
78 78 ;; will override what ipython.el does (because loading the customization
79 79 ;; variables comes later).
80 80 ;;
81 81 ;; Please send comments and feedback to the ipython-list
82 82 ;; (<ipython-user@scipy.net>) where I (a.s.) or someone else will try to
83 83 ;; answer them (it helps if you specify your emacs version, OS etc;
84 84 ;; familiarity with <http://www.catb.org/~esr/faqs/smart-questions.html> might
85 85 ;; speed up things further).
86 86 ;;
87 87 ;; Footnotes:
88 88 ;;
89 89 ;; [1] If you don't know what `load-path' is, C-h v load-path will tell
90 90 ;; you; if required you can also add a new directory. So assuming that
91 91 ;; ipython.el resides in ~/el/, put this in your emacs:
92 92 ;;
93 93 ;;
94 94 ;; (add-to-list 'load-path "~/el")
95 95 ;; (setq ipython-command "/some-path/ipython")
96 96 ;; (require 'ipython)
97 97 ;;
98 98 ;;
99 99 ;;
100 100 ;;
101 101 ;; TODO:
102 102 ;; - do autocompletion properly
103 103 ;; - implement a proper switching between python interpreters
104 104 ;;
105 105 ;; BUGS:
106 106 ;; - neither::
107 107 ;;
108 108 ;; (py-shell "-c print 'FOOBAR'")
109 109 ;;
110 110 ;; nor::
111 111 ;;
112 112 ;; (let ((py-python-command-args (append py-python-command-args
113 113 ;; '("-c" "print 'FOOBAR'"))))
114 114 ;; (py-shell))
115 115 ;;
116 116 ;; seem to print anything as they should
117 117 ;;
118 118 ;; - look into init priority issues with `py-python-command' (if it's set
119 119 ;; via custom)
120 120
121 121
122 122 ;;; Code
123 123 (require 'cl)
124 124 (require 'shell)
125 125 (require 'executable)
126 126 (require 'ansi-color)
127 127
128 128 (defcustom ipython-command "ipython"
129 129 "*Shell command used to start ipython."
130 130 :type 'string
131 131 :group 'python)
132 132
133 133 ;; Users can set this to nil
134 134 (defvar py-shell-initial-switch-buffers t
135 135 "If nil, don't switch to the *Python* buffer on the first call to
136 136 `py-shell'.")
137 137
138 138 (defvar ipython-backup-of-py-python-command nil
139 139 "HACK")
140 140
141 141
142 142 (defvar ipython-de-input-prompt-regexp "\\(?:
143 143 In \\[[0-9]+\\]: *.*
144 144 ----+> \\(.*
145 145 \\)[\n]?\\)\\|\\(?:
146 146 In \\[[0-9]+\\]: *\\(.*
147 147 \\)\\)\\|^[ ]\\{3\\}[.]\\{3,\\}: *\\(.*
148 148 \\)"
149 149 "A regular expression to match the IPython input prompt and the python
150 150 command after it. The first match group is for a command that is rewritten,
151 151 the second for a 'normal' command, and the third for a multiline command.")
152 152 (defvar ipython-de-output-prompt-regexp "^Out\\[[0-9]+\\]: "
153 153 "A regular expression to match the output prompt of IPython.")
154 154
155 155
156 156 (if (not (executable-find ipython-command))
157 157 (message (format "Can't find executable %s - ipython.el *NOT* activated!!!"
158 158 ipython-command))
159 159 ;; XXX load python-mode, so that we can screw around with its variables
160 160 ;; this has the disadvantage that python-mode is loaded even if no
161 161 ;; python-file is ever edited etc. but it means that `py-shell' works
162 162 ;; without loading a python-file first. Obviously screwing around with
163 163 ;; python-mode's variables like this is a mess, but well.
164 164 (require 'python-mode)
165 165 ;; turn on ansi colors for ipython and activate completion
166 166 (defun ipython-shell-hook ()
167 167 ;; the following is to synchronize dir-changes
168 168 (make-local-variable 'shell-dirstack)
169 169 (setq shell-dirstack nil)
170 170 (make-local-variable 'shell-last-dir)
171 171 (setq shell-last-dir nil)
172 172 (make-local-variable 'shell-dirtrackp)
173 173 (setq shell-dirtrackp t)
174 174 (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t)
175 175
176 176 (ansi-color-for-comint-mode-on)
177 177 (define-key py-shell-map [tab] 'ipython-complete)
178 178 ;;XXX this is really just a cheap hack, it only completes symbols in the
179 179 ;;interactive session -- useful nonetheless.
180 180 (define-key py-mode-map [(meta tab)] 'ipython-complete)
181 181
182 182 )
183 183 (add-hook 'py-shell-hook 'ipython-shell-hook)
184 184 ;; Regular expression that describes tracebacks for IPython in context and
185 185 ;; verbose mode.
186 186
187 187 ;;Adapt python-mode settings for ipython.
188 188 ;; (this works for %xmode 'verbose' or 'context')
189 189
190 190 ;; XXX putative regexps for syntax errors; unfortunately the
191 191 ;; current python-mode traceback-line-re scheme is too primitive,
192 192 ;; so it's either matching syntax errors, *or* everything else
193 193 ;; (XXX: should ask Fernando for a change)
194 194 ;;"^ File \"\\(.*?\\)\", line \\([0-9]+\\).*\n.*\n.*\nSyntaxError:"
195 195 ;;^ File \"\\(.*?\\)\", line \\([0-9]+\\)"
196 196
197 197 (setq py-traceback-line-re
198 "\\(^[^\t ].+?\\.py\\).*\n +[0-9]+[^\00]*?\n-+> \\([0-9]+\\) +")
198 "\\(^[^\t >].+?\\.py\\).*\n +[0-9]+[^\00]*?\n-+> \\([0-9]+\\)+")
199
199 200
200 201 ;; Recognize the ipython pdb, whose prompt is 'ipdb>' or 'ipydb>'
201 202 ;;instead of '(Pdb)'
202 203 (setq py-pdbtrack-input-prompt "\n[(<]*[Ii]?[Pp]y?db[>)]+ ")
203 (setq py-pydbtrack-input-prompt "\n[(]*ipydb[>)]+ ")
204 (setq pydb-pydbtrack-input-prompt "\n[(]*ipydb[>)]+ ")
204 205
205 206 (setq py-shell-input-prompt-1-regexp "^In \\[[0-9]+\\]: *"
206 207 py-shell-input-prompt-2-regexp "^ [.][.][.]+: *" )
207 208 ;; select a suitable color-scheme
208 209 (unless (member "-colors" py-python-command-args)
209 210 (setq py-python-command-args
210 211 (nconc py-python-command-args
211 212 (list "-colors"
212 213 (cond
213 214 ((eq frame-background-mode 'dark)
214 215 "DarkBG")
215 216 ((eq frame-background-mode 'light)
216 217 "LightBG")
217 218 (t ; default (backg-mode isn't always set by XEmacs)
218 219 "LightBG"))))))
219 220 (unless (equal ipython-backup-of-py-python-command py-python-command)
220 221 (setq ipython-backup-of-py-python-command py-python-command))
221 222 (setq py-python-command ipython-command))
222 223
223 224
224 225 ;; MODIFY py-shell so that it loads the editing history
225 226 (defadvice py-shell (around py-shell-with-history)
226 227 "Add persistent command-history support (in
227 228 $PYTHONHISTORY (or \"~/.ipython/history\", if we use IPython)). Also, if
228 229 `py-shell-initial-switch-buffers' is nil, it only switches to *Python* if that
229 230 buffer already exists."
230 231 (if (comint-check-proc "*Python*")
231 232 ad-do-it
232 233 (setq comint-input-ring-file-name
233 234 (if (string-equal py-python-command ipython-command)
234 235 (concat (or (getenv "IPYTHONDIR") "~/.ipython") "/history")
235 236 (or (getenv "PYTHONHISTORY") "~/.python-history.py")))
236 237 (comint-read-input-ring t)
237 238 (let ((buf (current-buffer)))
238 239 ad-do-it
239 240 (unless py-shell-initial-switch-buffers
240 241 (switch-to-buffer-other-window buf)))))
241 242 (ad-activate 'py-shell)
242 243 ;; (defadvice py-execute-region (before py-execute-buffer-ensure-process)
243 244 ;; "HACK: test that ipython is already running before executing something.
244 245 ;; Doing this properly seems not worth the bother (unless people actually
245 246 ;; request it)."
246 247 ;; (unless (comint-check-proc "*Python*")
247 248 ;; (error "Sorry you have to first do M-x py-shell to send something to ipython.")))
248 249 ;; (ad-activate 'py-execute-region)
249 250
250 251 (defadvice py-execute-region (around py-execute-buffer-ensure-process)
251 252 "HACK: if `py-shell' is not active or ASYNC is explicitly desired, fall back
252 253 to python instead of ipython."
253 254 (let ((py-which-shell (if (and (comint-check-proc "*Python*") (not async))
254 255 py-python-command
255 256 ipython-backup-of-py-python-command)))
256 257 ad-do-it))
257 258 (ad-activate 'py-execute-region)
258 259
259 260 (defun ipython-to-doctest (start end)
260 261 "Transform a cut-and-pasted bit from an IPython session into something that
261 262 looks like it came from a normal interactive python session, so that it can
262 263 be used in doctests. Example:
263 264
264 265
265 266 In [1]: import sys
266 267
267 268 In [2]: sys.stdout.write 'Hi!\n'
268 269 ------> sys.stdout.write ('Hi!\n')
269 270 Hi!
270 271
271 272 In [3]: 3 + 4
272 273 Out[3]: 7
273 274
274 275 gets converted to:
275 276
276 277 >>> import sys
277 278 >>> sys.stdout.write ('Hi!\n')
278 279 Hi!
279 280 >>> 3 + 4
280 281 7
281 282
282 283 "
283 284 (interactive "*r\n")
284 285 ;(message (format "###DEBUG s:%de:%d" start end))
285 286 (save-excursion
286 287 (save-match-data
287 288 ;; replace ``In [3]: bla`` with ``>>> bla`` and
288 289 ;; ``... : bla`` with ``... bla``
289 290 (goto-char start)
290 291 (while (re-search-forward ipython-de-input-prompt-regexp end t)
291 292 ;(message "finding 1")
292 293 (cond ((match-string 3) ;continued
293 294 (replace-match "... \\3" t nil))
294 295 (t
295 296 (replace-match ">>> \\1\\2" t nil))))
296 297 ;; replace ``
297 298 (goto-char start)
298 299 (while (re-search-forward ipython-de-output-prompt-regexp end t)
299 300 (replace-match "" t nil)))))
300 301
301 302 (defvar ipython-completion-command-string
302 303 "print ';'.join(__IP.Completer.all_completions('%s')) #PYTHON-MODE SILENT\n"
303 304 "The string send to ipython to query for all possible completions")
304 305
305 306
306 307 ;; xemacs doesn't have `comint-preoutput-filter-functions' so we'll try the
307 308 ;; following wonderful hack to work around this case
308 309 (if (featurep 'xemacs)
309 310 ;;xemacs
310 311 (defun ipython-complete ()
311 312 "Try to complete the python symbol before point. Only knows about the stuff
312 313 in the current *Python* session."
313 314 (interactive)
314 315 (let* ((ugly-return nil)
315 316 (sep ";")
316 317 (python-process (or (get-buffer-process (current-buffer))
317 318 ;XXX hack for .py buffers
318 319 (get-process py-which-bufname)))
319 320 ;; XXX currently we go backwards to find the beginning of an
320 321 ;; expression part; a more powerful approach in the future might be
321 322 ;; to let ipython have the complete line, so that context can be used
322 323 ;; to do things like filename completion etc.
323 324 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
324 325 (point)))
325 326 (end (point))
326 327 (pattern (buffer-substring-no-properties beg end))
327 328 (completions nil)
328 329 (completion-table nil)
329 330 completion
330 331 (comint-output-filter-functions
331 332 (append comint-output-filter-functions
332 333 '(ansi-color-filter-apply
333 334 (lambda (string)
334 335 ;(message (format "DEBUG filtering: %s" string))
335 336 (setq ugly-return (concat ugly-return string))
336 337 (delete-region comint-last-output-start
337 338 (process-mark (get-buffer-process (current-buffer)))))))))
338 339 ;(message (format "#DEBUG pattern: '%s'" pattern))
339 340 (process-send-string python-process
340 341 (format ipython-completion-command-string pattern))
341 342 (accept-process-output python-process)
342 343 ;(message (format "DEBUG return: %s" ugly-return))
343 344 (setq completions
344 345 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
345 346 (setq completion-table (loop for str in completions
346 347 collect (list str nil)))
347 348 (setq completion (try-completion pattern completion-table))
348 349 (cond ((eq completion t))
349 350 ((null completion)
350 351 (message "Can't find completion for \"%s\"" pattern)
351 352 (ding))
352 353 ((not (string= pattern completion))
353 354 (delete-region beg end)
354 355 (insert completion))
355 356 (t
356 357 (message "Making completion list...")
357 358 (with-output-to-temp-buffer "*Python Completions*"
358 359 (display-completion-list (all-completions pattern completion-table)))
359 360 (message "Making completion list...%s" "done")))))
360 361 ;; emacs
361 362 (defun ipython-complete ()
362 363 "Try to complete the python symbol before point. Only knows about the stuff
363 364 in the current *Python* session."
364 365 (interactive)
365 366 (let* ((ugly-return nil)
366 367 (sep ";")
367 368 (python-process (or (get-buffer-process (current-buffer))
368 369 ;XXX hack for .py buffers
369 370 (get-process py-which-bufname)))
370 371 ;; XXX currently we go backwards to find the beginning of an
371 372 ;; expression part; a more powerful approach in the future might be
372 373 ;; to let ipython have the complete line, so that context can be used
373 374 ;; to do things like filename completion etc.
374 375 (beg (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
375 376 (point)))
376 377 (end (point))
377 378 (pattern (buffer-substring-no-properties beg end))
378 379 (completions nil)
379 380 (completion-table nil)
380 381 completion
381 382 (comint-preoutput-filter-functions
382 383 (append comint-preoutput-filter-functions
383 384 '(ansi-color-filter-apply
384 385 (lambda (string)
385 386 (setq ugly-return (concat ugly-return string))
386 387 "")))))
387 388 (process-send-string python-process
388 389 (format ipython-completion-command-string pattern))
389 390 (accept-process-output python-process)
390 391 (setq completions
391 392 (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
392 393 ;(message (format "DEBUG completions: %S" completions))
393 394 (setq completion-table (loop for str in completions
394 395 collect (list str nil)))
395 396 (setq completion (try-completion pattern completion-table))
396 397 (cond ((eq completion t))
397 398 ((null completion)
398 399 (message "Can't find completion for \"%s\"" pattern)
399 400 (ding))
400 401 ((not (string= pattern completion))
401 402 (delete-region beg end)
402 403 (insert completion))
403 404 (t
404 405 (message "Making completion list...")
405 406 (with-output-to-temp-buffer "*IPython Completions*"
406 407 (display-completion-list (all-completions pattern completion-table)))
407 408 (message "Making completion list...%s" "done")))))
408 409 )
409 410
410 411 ;;; autoindent support: patch sent in by Jin Liu <m.liu.jin@gmail.com>,
411 412 ;;; originally written by doxgen@newsmth.net
412 413 ;;; Minor modifications by fperez for xemacs compatibility.
413 414
414 415 (defvar ipython-autoindent t
415 416 "If non-nil, enable autoindent for IPython shell through python-mode.")
416 417
417 418 (defvar ipython-indenting-buffer-name "*IPython Indentation Calculation*"
418 419 "Temporary buffer for indenting multiline statement.")
419 420
420 421 (defun ipython-get-indenting-buffer ()
421 422 "Return a temporary buffer set in python-mode. Create one if necessary."
422 423 (let ((buf (get-buffer-create ipython-indenting-buffer-name)))
423 424 (set-buffer buf)
424 425 (unless (eq major-mode 'python-mode)
425 426 (python-mode))
426 427 buf))
427 428
428 429 (defvar ipython-indentation-string nil
429 430 "Indentation for the next line in a multiline statement.")
430 431
431 432 (defun ipython-send-and-indent ()
432 433 "Send the current line to IPython, and calculate the indentation for
433 434 the next line."
434 435 (interactive)
435 436 (if ipython-autoindent
436 437 (let ((line (buffer-substring (point-at-bol) (point)))
437 438 (after-prompt1)
438 439 (after-prompt2))
439 440 (save-excursion
440 441 (comint-bol t)
441 442 (if (looking-at py-shell-input-prompt-1-regexp)
442 443 (setq after-prompt1 t)
443 444 (setq after-prompt2 (looking-at py-shell-input-prompt-2-regexp)))
444 445 (with-current-buffer (ipython-get-indenting-buffer)
445 446 (when after-prompt1
446 447 (erase-buffer))
447 448 (when (or after-prompt1 after-prompt2)
448 449 (delete-region (point-at-bol) (point))
449 450 (insert line)
450 451 (newline-and-indent))))))
451 452 ;; send input line to ipython interpreter
452 453 (comint-send-input))
453 454
454 455 (defun ipython-indentation-hook (string)
455 456 "Insert indentation string if py-shell-input-prompt-2-regexp
456 457 matches last process output."
457 458 (let* ((start-marker (or comint-last-output-start
458 459 (point-min-marker)))
459 460 (end-marker (process-mark (get-buffer-process (current-buffer))))
460 461 (text (ansi-color-filter-apply (buffer-substring start-marker end-marker))))
461 462 ;; XXX if `text' matches both pattern, it MUST be the last prompt-2
462 463 (when (and (string-match py-shell-input-prompt-2-regexp text)
463 464 (not (string-match "\n$" text)))
464 465 (with-current-buffer (ipython-get-indenting-buffer)
465 466 (setq ipython-indentation-string
466 467 (buffer-substring (point-at-bol) (point))))
467 468 (goto-char end-marker)
468 469 (insert ipython-indentation-string)
469 470 (setq ipython-indentation-string nil))))
470 471
471 472 (add-hook 'py-shell-hook
472 473 (lambda ()
473 474 (add-hook 'comint-output-filter-functions
474 475 'ipython-indentation-hook)))
475 476
476 477 (define-key py-shell-map (kbd "RET") 'ipython-send-and-indent)
477 478 ;;; / end autoindent support
478 479
479 480 (provide 'ipython)
1 NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now