##// END OF EJS Templates
use history_saving_wrapper to store/restore readline history
vivainio -
Show More
@@ -1,22 +1,15 b''
1 1 import pydb
2 2 import IPython.ipapi
3 3 from IPython.genutils import arg_split
4 4 ip = IPython.ipapi.get()
5 5
6 6 def call_pydb(self, args):
7 7 argl = arg_split(args)
8 8 # print argl # dbg
9 if ip.IP.has_readline:
10 ip.IP.savehist()
11 try:
12 pydb.runl(*argl)
13 finally:
14
15 if ip.IP.has_readline:
16 ip.IP.readline.read_history_file(self.shell.histfile)
9 ip.IP.history_saving_wrapper( lambda : pydb.runl(*argl) )()
17 10
18 11 ip.expose_magic("pydb",call_pydb)
19 12
20 13
21 14
22 15 No newline at end of file
@@ -1,2462 +1,2480 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 IPython -- An enhanced Interactive Python
4 4
5 5 Requires Python 2.3 or newer.
6 6
7 7 This file contains all the classes and helper functions specific to IPython.
8 8
9 $Id: iplib.py 1859 2006-11-02 06:39:54Z vivainio $
9 $Id: iplib.py 1868 2006-11-02 15:29:10Z vivainio $
10 10 """
11 11
12 12 #*****************************************************************************
13 13 # Copyright (C) 2001 Janko Hauser <jhauser@zscout.de> and
14 14 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
15 15 #
16 16 # Distributed under the terms of the BSD License. The full license is in
17 17 # the file COPYING, distributed as part of this software.
18 18 #
19 19 # Note: this code originally subclassed code.InteractiveConsole from the
20 20 # Python standard library. Over time, all of that class has been copied
21 21 # verbatim here for modifications which could not be accomplished by
22 22 # subclassing. At this point, there are no dependencies at all on the code
23 23 # module anymore (it is not even imported). The Python License (sec. 2)
24 24 # allows for this, but it's always nice to acknowledge credit where credit is
25 25 # due.
26 26 #*****************************************************************************
27 27
28 28 #****************************************************************************
29 29 # Modules and globals
30 30
31 31 from IPython import Release
32 32 __author__ = '%s <%s>\n%s <%s>' % \
33 33 ( Release.authors['Janko'] + Release.authors['Fernando'] )
34 34 __license__ = Release.license
35 35 __version__ = Release.version
36 36
37 37 # Python standard modules
38 38 import __main__
39 39 import __builtin__
40 40 import StringIO
41 41 import bdb
42 42 import cPickle as pickle
43 43 import codeop
44 44 import exceptions
45 45 import glob
46 46 import inspect
47 47 import keyword
48 48 import new
49 49 import os
50 50 import pydoc
51 51 import re
52 52 import shutil
53 53 import string
54 54 import sys
55 55 import tempfile
56 56 import traceback
57 57 import types
58 58 import pickleshare
59 59 from sets import Set
60 60 from pprint import pprint, pformat
61 61
62 62 # IPython's own modules
63 63 import IPython
64 64 from IPython import OInspect,PyColorize,ultraTB
65 65 from IPython.ColorANSI import ColorScheme,ColorSchemeTable # too long names
66 66 from IPython.FakeModule import FakeModule
67 67 from IPython.Itpl import Itpl,itpl,printpl,ItplNS,itplns
68 68 from IPython.Logger import Logger
69 69 from IPython.Magic import Magic
70 70 from IPython.Prompts import CachedOutput
71 71 from IPython.ipstruct import Struct
72 72 from IPython.background_jobs import BackgroundJobManager
73 73 from IPython.usage import cmd_line_usage,interactive_usage
74 74 from IPython.genutils import *
75 75 from IPython.strdispatch import StrDispatch
76 76 import IPython.ipapi
77 77
78 78 # Globals
79 79
80 80 # store the builtin raw_input globally, and use this always, in case user code
81 81 # overwrites it (like wx.py.PyShell does)
82 82 raw_input_original = raw_input
83 83
84 84 # compiled regexps for autoindent management
85 85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
86 86
87 87
88 88 #****************************************************************************
89 89 # Some utility function definitions
90 90
91 91 ini_spaces_re = re.compile(r'^(\s+)')
92 92
93 93 def num_ini_spaces(strng):
94 94 """Return the number of initial spaces in a string"""
95 95
96 96 ini_spaces = ini_spaces_re.match(strng)
97 97 if ini_spaces:
98 98 return ini_spaces.end()
99 99 else:
100 100 return 0
101 101
102 102 def softspace(file, newvalue):
103 103 """Copied from code.py, to remove the dependency"""
104 104
105 105 oldvalue = 0
106 106 try:
107 107 oldvalue = file.softspace
108 108 except AttributeError:
109 109 pass
110 110 try:
111 111 file.softspace = newvalue
112 112 except (AttributeError, TypeError):
113 113 # "attribute-less object" or "read-only attributes"
114 114 pass
115 115 return oldvalue
116 116
117 117
118 118 #****************************************************************************
119 119 # Local use exceptions
120 120 class SpaceInInput(exceptions.Exception): pass
121 121
122 122
123 123 #****************************************************************************
124 124 # Local use classes
125 125 class Bunch: pass
126 126
127 127 class Undefined: pass
128 128
129 129 class Quitter(object):
130 130 """Simple class to handle exit, similar to Python 2.5's.
131 131
132 132 It handles exiting in an ipython-safe manner, which the one in Python 2.5
133 133 doesn't do (obviously, since it doesn't know about ipython)."""
134 134
135 135 def __init__(self,shell,name):
136 136 self.shell = shell
137 137 self.name = name
138 138
139 139 def __repr__(self):
140 140 return 'Type %s() to exit.' % self.name
141 141 __str__ = __repr__
142 142
143 143 def __call__(self):
144 144 self.shell.exit()
145 145
146 146 class InputList(list):
147 147 """Class to store user input.
148 148
149 149 It's basically a list, but slices return a string instead of a list, thus
150 150 allowing things like (assuming 'In' is an instance):
151 151
152 152 exec In[4:7]
153 153
154 154 or
155 155
156 156 exec In[5:9] + In[14] + In[21:25]"""
157 157
158 158 def __getslice__(self,i,j):
159 159 return ''.join(list.__getslice__(self,i,j))
160 160
161 161 class SyntaxTB(ultraTB.ListTB):
162 162 """Extension which holds some state: the last exception value"""
163 163
164 164 def __init__(self,color_scheme = 'NoColor'):
165 165 ultraTB.ListTB.__init__(self,color_scheme)
166 166 self.last_syntax_error = None
167 167
168 168 def __call__(self, etype, value, elist):
169 169 self.last_syntax_error = value
170 170 ultraTB.ListTB.__call__(self,etype,value,elist)
171 171
172 172 def clear_err_state(self):
173 173 """Return the current error state and clear it"""
174 174 e = self.last_syntax_error
175 175 self.last_syntax_error = None
176 176 return e
177 177
178 178 #****************************************************************************
179 179 # Main IPython class
180 180
181 181 # FIXME: the Magic class is a mixin for now, and will unfortunately remain so
182 182 # until a full rewrite is made. I've cleaned all cross-class uses of
183 183 # attributes and methods, but too much user code out there relies on the
184 184 # equlity %foo == __IP.magic_foo, so I can't actually remove the mixin usage.
185 185 #
186 186 # But at least now, all the pieces have been separated and we could, in
187 187 # principle, stop using the mixin. This will ease the transition to the
188 188 # chainsaw branch.
189 189
190 190 # For reference, the following is the list of 'self.foo' uses in the Magic
191 191 # class as of 2005-12-28. These are names we CAN'T use in the main ipython
192 192 # class, to prevent clashes.
193 193
194 194 # ['self.__class__', 'self.__dict__', 'self._inspect', 'self._ofind',
195 195 # 'self.arg_err', 'self.extract_input', 'self.format_', 'self.lsmagic',
196 196 # 'self.magic_', 'self.options_table', 'self.parse', 'self.shell',
197 197 # 'self.value']
198 198
199 199 class InteractiveShell(object,Magic):
200 200 """An enhanced console for Python."""
201 201
202 202 # class attribute to indicate whether the class supports threads or not.
203 203 # Subclasses with thread support should override this as needed.
204 204 isthreaded = False
205 205
206 206 def __init__(self,name,usage=None,rc=Struct(opts=None,args=None),
207 207 user_ns = None,user_global_ns=None,banner2='',
208 208 custom_exceptions=((),None),embedded=False):
209 209
210 210 # log system
211 211 self.logger = Logger(self,logfname='ipython_log.py',logmode='rotate')
212 212
213 213 # some minimal strict typechecks. For some core data structures, I
214 214 # want actual basic python types, not just anything that looks like
215 215 # one. This is especially true for namespaces.
216 216 for ns in (user_ns,user_global_ns):
217 217 if ns is not None and type(ns) != types.DictType:
218 218 raise TypeError,'namespace must be a dictionary'
219 219
220 220 # Job manager (for jobs run as background threads)
221 221 self.jobs = BackgroundJobManager()
222 222
223 223 # Store the actual shell's name
224 224 self.name = name
225 225
226 226 # We need to know whether the instance is meant for embedding, since
227 227 # global/local namespaces need to be handled differently in that case
228 228 self.embedded = embedded
229 229
230 230 # command compiler
231 231 self.compile = codeop.CommandCompiler()
232 232
233 233 # User input buffer
234 234 self.buffer = []
235 235
236 236 # Default name given in compilation of code
237 237 self.filename = '<ipython console>'
238 238
239 239 # Install our own quitter instead of the builtins. For python2.3-2.4,
240 240 # this brings in behavior like 2.5, and for 2.5 it's identical.
241 241 __builtin__.exit = Quitter(self,'exit')
242 242 __builtin__.quit = Quitter(self,'quit')
243 243
244 244 # Make an empty namespace, which extension writers can rely on both
245 245 # existing and NEVER being used by ipython itself. This gives them a
246 246 # convenient location for storing additional information and state
247 247 # their extensions may require, without fear of collisions with other
248 248 # ipython names that may develop later.
249 249 self.meta = Struct()
250 250
251 251 # Create the namespace where the user will operate. user_ns is
252 252 # normally the only one used, and it is passed to the exec calls as
253 253 # the locals argument. But we do carry a user_global_ns namespace
254 254 # given as the exec 'globals' argument, This is useful in embedding
255 255 # situations where the ipython shell opens in a context where the
256 256 # distinction between locals and globals is meaningful.
257 257
258 258 # FIXME. For some strange reason, __builtins__ is showing up at user
259 259 # level as a dict instead of a module. This is a manual fix, but I
260 260 # should really track down where the problem is coming from. Alex
261 261 # Schmolck reported this problem first.
262 262
263 263 # A useful post by Alex Martelli on this topic:
264 264 # Re: inconsistent value from __builtins__
265 265 # Von: Alex Martelli <aleaxit@yahoo.com>
266 266 # Datum: Freitag 01 Oktober 2004 04:45:34 nachmittags/abends
267 267 # Gruppen: comp.lang.python
268 268
269 269 # Michael Hohn <hohn@hooknose.lbl.gov> wrote:
270 270 # > >>> print type(builtin_check.get_global_binding('__builtins__'))
271 271 # > <type 'dict'>
272 272 # > >>> print type(__builtins__)
273 273 # > <type 'module'>
274 274 # > Is this difference in return value intentional?
275 275
276 276 # Well, it's documented that '__builtins__' can be either a dictionary
277 277 # or a module, and it's been that way for a long time. Whether it's
278 278 # intentional (or sensible), I don't know. In any case, the idea is
279 279 # that if you need to access the built-in namespace directly, you
280 280 # should start with "import __builtin__" (note, no 's') which will
281 281 # definitely give you a module. Yeah, it's somewhat confusing:-(.
282 282
283 283 # These routines return properly built dicts as needed by the rest of
284 284 # the code, and can also be used by extension writers to generate
285 285 # properly initialized namespaces.
286 286 user_ns = IPython.ipapi.make_user_ns(user_ns)
287 287 user_global_ns = IPython.ipapi.make_user_global_ns(user_global_ns)
288 288
289 289 # Assign namespaces
290 290 # This is the namespace where all normal user variables live
291 291 self.user_ns = user_ns
292 292 # Embedded instances require a separate namespace for globals.
293 293 # Normally this one is unused by non-embedded instances.
294 294 self.user_global_ns = user_global_ns
295 295 # A namespace to keep track of internal data structures to prevent
296 296 # them from cluttering user-visible stuff. Will be updated later
297 297 self.internal_ns = {}
298 298
299 299 # Namespace of system aliases. Each entry in the alias
300 300 # table must be a 2-tuple of the form (N,name), where N is the number
301 301 # of positional arguments of the alias.
302 302 self.alias_table = {}
303 303
304 304 # A table holding all the namespaces IPython deals with, so that
305 305 # introspection facilities can search easily.
306 306 self.ns_table = {'user':user_ns,
307 307 'user_global':user_global_ns,
308 308 'alias':self.alias_table,
309 309 'internal':self.internal_ns,
310 310 'builtin':__builtin__.__dict__
311 311 }
312 312
313 313 # The user namespace MUST have a pointer to the shell itself.
314 314 self.user_ns[name] = self
315 315
316 316 # We need to insert into sys.modules something that looks like a
317 317 # module but which accesses the IPython namespace, for shelve and
318 318 # pickle to work interactively. Normally they rely on getting
319 319 # everything out of __main__, but for embedding purposes each IPython
320 320 # instance has its own private namespace, so we can't go shoving
321 321 # everything into __main__.
322 322
323 323 # note, however, that we should only do this for non-embedded
324 324 # ipythons, which really mimic the __main__.__dict__ with their own
325 325 # namespace. Embedded instances, on the other hand, should not do
326 326 # this because they need to manage the user local/global namespaces
327 327 # only, but they live within a 'normal' __main__ (meaning, they
328 328 # shouldn't overtake the execution environment of the script they're
329 329 # embedded in).
330 330
331 331 if not embedded:
332 332 try:
333 333 main_name = self.user_ns['__name__']
334 334 except KeyError:
335 335 raise KeyError,'user_ns dictionary MUST have a "__name__" key'
336 336 else:
337 337 #print "pickle hack in place" # dbg
338 338 #print 'main_name:',main_name # dbg
339 339 sys.modules[main_name] = FakeModule(self.user_ns)
340 340
341 341 # List of input with multi-line handling.
342 342 # Fill its zero entry, user counter starts at 1
343 343 self.input_hist = InputList(['\n'])
344 344 # This one will hold the 'raw' input history, without any
345 345 # pre-processing. This will allow users to retrieve the input just as
346 346 # it was exactly typed in by the user, with %hist -r.
347 347 self.input_hist_raw = InputList(['\n'])
348 348
349 349 # list of visited directories
350 350 try:
351 351 self.dir_hist = [os.getcwd()]
352 352 except IOError, e:
353 353 self.dir_hist = []
354 354
355 355 # dict of output history
356 356 self.output_hist = {}
357 357
358 358 # dict of things NOT to alias (keywords, builtins and some magics)
359 359 no_alias = {}
360 360 no_alias_magics = ['cd','popd','pushd','dhist','alias','unalias']
361 361 for key in keyword.kwlist + no_alias_magics:
362 362 no_alias[key] = 1
363 363 no_alias.update(__builtin__.__dict__)
364 364 self.no_alias = no_alias
365 365
366 366 # make global variables for user access to these
367 367 self.user_ns['_ih'] = self.input_hist
368 368 self.user_ns['_oh'] = self.output_hist
369 369 self.user_ns['_dh'] = self.dir_hist
370 370
371 371 # user aliases to input and output histories
372 372 self.user_ns['In'] = self.input_hist
373 373 self.user_ns['Out'] = self.output_hist
374 374
375 375 # Object variable to store code object waiting execution. This is
376 376 # used mainly by the multithreaded shells, but it can come in handy in
377 377 # other situations. No need to use a Queue here, since it's a single
378 378 # item which gets cleared once run.
379 379 self.code_to_run = None
380 380
381 381 # escapes for automatic behavior on the command line
382 382 self.ESC_SHELL = '!'
383 383 self.ESC_HELP = '?'
384 384 self.ESC_MAGIC = '%'
385 385 self.ESC_QUOTE = ','
386 386 self.ESC_QUOTE2 = ';'
387 387 self.ESC_PAREN = '/'
388 388
389 389 # And their associated handlers
390 390 self.esc_handlers = {self.ESC_PAREN : self.handle_auto,
391 391 self.ESC_QUOTE : self.handle_auto,
392 392 self.ESC_QUOTE2 : self.handle_auto,
393 393 self.ESC_MAGIC : self.handle_magic,
394 394 self.ESC_HELP : self.handle_help,
395 395 self.ESC_SHELL : self.handle_shell_escape,
396 396 }
397 397
398 398 # class initializations
399 399 Magic.__init__(self,self)
400 400
401 401 # Python source parser/formatter for syntax highlighting
402 402 pyformat = PyColorize.Parser().format
403 403 self.pycolorize = lambda src: pyformat(src,'str',self.rc['colors'])
404 404
405 405 # hooks holds pointers used for user-side customizations
406 406 self.hooks = Struct()
407 407
408 408 self.strdispatchers = {}
409 409
410 410 # Set all default hooks, defined in the IPython.hooks module.
411 411 hooks = IPython.hooks
412 412 for hook_name in hooks.__all__:
413 413 # default hooks have priority 100, i.e. low; user hooks should have 0-100 priority
414 414 self.set_hook(hook_name,getattr(hooks,hook_name), 100)
415 415 #print "bound hook",hook_name
416 416
417 417 # Flag to mark unconditional exit
418 418 self.exit_now = False
419 419
420 420 self.usage_min = """\
421 421 An enhanced console for Python.
422 422 Some of its features are:
423 423 - Readline support if the readline library is present.
424 424 - Tab completion in the local namespace.
425 425 - Logging of input, see command-line options.
426 426 - System shell escape via ! , eg !ls.
427 427 - Magic commands, starting with a % (like %ls, %pwd, %cd, etc.)
428 428 - Keeps track of locally defined variables via %who, %whos.
429 429 - Show object information with a ? eg ?x or x? (use ?? for more info).
430 430 """
431 431 if usage: self.usage = usage
432 432 else: self.usage = self.usage_min
433 433
434 434 # Storage
435 435 self.rc = rc # This will hold all configuration information
436 436 self.pager = 'less'
437 437 # temporary files used for various purposes. Deleted at exit.
438 438 self.tempfiles = []
439 439
440 440 # Keep track of readline usage (later set by init_readline)
441 441 self.has_readline = False
442 442
443 443 # template for logfile headers. It gets resolved at runtime by the
444 444 # logstart method.
445 445 self.loghead_tpl = \
446 446 """#log# Automatic Logger file. *** THIS MUST BE THE FIRST LINE ***
447 447 #log# DO NOT CHANGE THIS LINE OR THE TWO BELOW
448 448 #log# opts = %s
449 449 #log# args = %s
450 450 #log# It is safe to make manual edits below here.
451 451 #log#-----------------------------------------------------------------------
452 452 """
453 453 # for pushd/popd management
454 454 try:
455 455 self.home_dir = get_home_dir()
456 456 except HomeDirError,msg:
457 457 fatal(msg)
458 458
459 459 self.dir_stack = [os.getcwd().replace(self.home_dir,'~')]
460 460
461 461 # Functions to call the underlying shell.
462 462
463 463 # utility to expand user variables via Itpl
464 464 self.var_expand = lambda cmd: str(ItplNS(cmd.replace('#','\#'),
465 465 self.user_ns))
466 466 # The first is similar to os.system, but it doesn't return a value,
467 467 # and it allows interpolation of variables in the user's namespace.
468 468 self.system = lambda cmd: shell(self.var_expand(cmd),
469 469 header='IPython system call: ',
470 470 verbose=self.rc.system_verbose)
471 471 # These are for getoutput and getoutputerror:
472 472 self.getoutput = lambda cmd: \
473 473 getoutput(self.var_expand(cmd),
474 474 header='IPython system call: ',
475 475 verbose=self.rc.system_verbose)
476 476 self.getoutputerror = lambda cmd: \
477 477 getoutputerror(self.var_expand(cmd),
478 478 header='IPython system call: ',
479 479 verbose=self.rc.system_verbose)
480 480
481 481 # RegExp for splitting line contents into pre-char//first
482 482 # word-method//rest. For clarity, each group in on one line.
483 483
484 484 # WARNING: update the regexp if the above escapes are changed, as they
485 485 # are hardwired in.
486 486
487 487 # Don't get carried away with trying to make the autocalling catch too
488 488 # much: it's better to be conservative rather than to trigger hidden
489 489 # evals() somewhere and end up causing side effects.
490 490
491 491 self.line_split = re.compile(r'^([\s*,;/])'
492 492 r'([\?\w\.]+\w*\s*)'
493 493 r'(\(?.*$)')
494 494
495 495 # Original re, keep around for a while in case changes break something
496 496 #self.line_split = re.compile(r'(^[\s*!\?%,/]?)'
497 497 # r'(\s*[\?\w\.]+\w*\s*)'
498 498 # r'(\(?.*$)')
499 499
500 500 # RegExp to identify potential function names
501 501 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
502 502
503 503 # RegExp to exclude strings with this start from autocalling. In
504 504 # particular, all binary operators should be excluded, so that if foo
505 505 # is callable, foo OP bar doesn't become foo(OP bar), which is
506 506 # invalid. The characters '!=()' don't need to be checked for, as the
507 507 # _prefilter routine explicitely does so, to catch direct calls and
508 508 # rebindings of existing names.
509 509
510 510 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
511 511 # it affects the rest of the group in square brackets.
512 512 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
513 513 '|^is |^not |^in |^and |^or ')
514 514
515 515 # try to catch also methods for stuff in lists/tuples/dicts: off
516 516 # (experimental). For this to work, the line_split regexp would need
517 517 # to be modified so it wouldn't break things at '['. That line is
518 518 # nasty enough that I shouldn't change it until I can test it _well_.
519 519 #self.re_fun_name = re.compile (r'[a-zA-Z_]([a-zA-Z0-9_.\[\]]*) ?$')
520 520
521 521 # keep track of where we started running (mainly for crash post-mortem)
522 522 self.starting_dir = os.getcwd()
523 523
524 524 # Various switches which can be set
525 525 self.CACHELENGTH = 5000 # this is cheap, it's just text
526 526 self.BANNER = "Python %(version)s on %(platform)s\n" % sys.__dict__
527 527 self.banner2 = banner2
528 528
529 529 # TraceBack handlers:
530 530
531 531 # Syntax error handler.
532 532 self.SyntaxTB = SyntaxTB(color_scheme='NoColor')
533 533
534 534 # The interactive one is initialized with an offset, meaning we always
535 535 # want to remove the topmost item in the traceback, which is our own
536 536 # internal code. Valid modes: ['Plain','Context','Verbose']
537 537 self.InteractiveTB = ultraTB.AutoFormattedTB(mode = 'Plain',
538 538 color_scheme='NoColor',
539 539 tb_offset = 1)
540 540
541 541 # IPython itself shouldn't crash. This will produce a detailed
542 542 # post-mortem if it does. But we only install the crash handler for
543 543 # non-threaded shells, the threaded ones use a normal verbose reporter
544 544 # and lose the crash handler. This is because exceptions in the main
545 545 # thread (such as in GUI code) propagate directly to sys.excepthook,
546 546 # and there's no point in printing crash dumps for every user exception.
547 547 if self.isthreaded:
548 548 ipCrashHandler = ultraTB.FormattedTB()
549 549 else:
550 550 from IPython import CrashHandler
551 551 ipCrashHandler = CrashHandler.IPythonCrashHandler(self)
552 552 self.set_crash_handler(ipCrashHandler)
553 553
554 554 # and add any custom exception handlers the user may have specified
555 555 self.set_custom_exc(*custom_exceptions)
556 556
557 557 # indentation management
558 558 self.autoindent = False
559 559 self.indent_current_nsp = 0
560 560
561 561 # Make some aliases automatically
562 562 # Prepare list of shell aliases to auto-define
563 563 if os.name == 'posix':
564 564 auto_alias = ('mkdir mkdir', 'rmdir rmdir',
565 565 'mv mv -i','rm rm -i','cp cp -i',
566 566 'cat cat','less less','clear clear',
567 567 # a better ls
568 568 'ls ls -F',
569 569 # long ls
570 570 'll ls -lF')
571 571 # Extra ls aliases with color, which need special treatment on BSD
572 572 # variants
573 573 ls_extra = ( # color ls
574 574 'lc ls -F -o --color',
575 575 # ls normal files only
576 576 'lf ls -F -o --color %l | grep ^-',
577 577 # ls symbolic links
578 578 'lk ls -F -o --color %l | grep ^l',
579 579 # directories or links to directories,
580 580 'ldir ls -F -o --color %l | grep /$',
581 581 # things which are executable
582 582 'lx ls -F -o --color %l | grep ^-..x',
583 583 )
584 584 # The BSDs don't ship GNU ls, so they don't understand the
585 585 # --color switch out of the box
586 586 if 'bsd' in sys.platform:
587 587 ls_extra = ( # ls normal files only
588 588 'lf ls -lF | grep ^-',
589 589 # ls symbolic links
590 590 'lk ls -lF | grep ^l',
591 591 # directories or links to directories,
592 592 'ldir ls -lF | grep /$',
593 593 # things which are executable
594 594 'lx ls -lF | grep ^-..x',
595 595 )
596 596 auto_alias = auto_alias + ls_extra
597 597 elif os.name in ['nt','dos']:
598 598 auto_alias = ('dir dir /on', 'ls dir /on',
599 599 'ddir dir /ad /on', 'ldir dir /ad /on',
600 600 'mkdir mkdir','rmdir rmdir','echo echo',
601 601 'ren ren','cls cls','copy copy')
602 602 else:
603 603 auto_alias = ()
604 604 self.auto_alias = [s.split(None,1) for s in auto_alias]
605 605 # Call the actual (public) initializer
606 606 self.init_auto_alias()
607 607
608 608 # Produce a public API instance
609 609 self.api = IPython.ipapi.IPApi(self)
610 610
611 611 # track which builtins we add, so we can clean up later
612 612 self.builtins_added = {}
613 613 # This method will add the necessary builtins for operation, but
614 614 # tracking what it did via the builtins_added dict.
615 615 self.add_builtins()
616 616
617 617 # end __init__
618 618
619 619 def pre_config_initialization(self):
620 620 """Pre-configuration init method
621 621
622 622 This is called before the configuration files are processed to
623 623 prepare the services the config files might need.
624 624
625 625 self.rc already has reasonable default values at this point.
626 626 """
627 627 rc = self.rc
628 628
629 629 self.db = pickleshare.PickleShareDB(rc.ipythondir + "/db")
630 630
631 631 def post_config_initialization(self):
632 632 """Post configuration init method
633 633
634 634 This is called after the configuration files have been processed to
635 635 'finalize' the initialization."""
636 636
637 637 rc = self.rc
638 638
639 639 # Object inspector
640 640 self.inspector = OInspect.Inspector(OInspect.InspectColors,
641 641 PyColorize.ANSICodeColors,
642 642 'NoColor',
643 643 rc.object_info_string_level)
644 644
645 645 # Load readline proper
646 646 if rc.readline:
647 647 self.init_readline()
648 648
649 649 # local shortcut, this is used a LOT
650 650 self.log = self.logger.log
651 651
652 652 # Initialize cache, set in/out prompts and printing system
653 653 self.outputcache = CachedOutput(self,
654 654 rc.cache_size,
655 655 rc.pprint,
656 656 input_sep = rc.separate_in,
657 657 output_sep = rc.separate_out,
658 658 output_sep2 = rc.separate_out2,
659 659 ps1 = rc.prompt_in1,
660 660 ps2 = rc.prompt_in2,
661 661 ps_out = rc.prompt_out,
662 662 pad_left = rc.prompts_pad_left)
663 663
664 664 # user may have over-ridden the default print hook:
665 665 try:
666 666 self.outputcache.__class__.display = self.hooks.display
667 667 except AttributeError:
668 668 pass
669 669
670 670 # I don't like assigning globally to sys, because it means when
671 671 # embedding instances, each embedded instance overrides the previous
672 672 # choice. But sys.displayhook seems to be called internally by exec,
673 673 # so I don't see a way around it. We first save the original and then
674 674 # overwrite it.
675 675 self.sys_displayhook = sys.displayhook
676 676 sys.displayhook = self.outputcache
677 677
678 678 # Set user colors (don't do it in the constructor above so that it
679 679 # doesn't crash if colors option is invalid)
680 680 self.magic_colors(rc.colors)
681 681
682 682 # Set calling of pdb on exceptions
683 683 self.call_pdb = rc.pdb
684 684
685 685 # Load user aliases
686 686 for alias in rc.alias:
687 687 self.magic_alias(alias)
688 688 self.hooks.late_startup_hook()
689 689
690 690 batchrun = False
691 691 for batchfile in [path(arg) for arg in self.rc.args
692 692 if arg.lower().endswith('.ipy')]:
693 693 if not batchfile.isfile():
694 694 print "No such batch file:", batchfile
695 695 continue
696 696 self.api.runlines(batchfile.text())
697 697 batchrun = True
698 698 if batchrun:
699 699 self.exit_now = True
700 700
701 701 def add_builtins(self):
702 702 """Store ipython references into the builtin namespace.
703 703
704 704 Some parts of ipython operate via builtins injected here, which hold a
705 705 reference to IPython itself."""
706 706
707 707 # TODO: deprecate all except _ip; 'jobs' should be installed
708 708 # by an extension and the rest are under _ip, ipalias is redundant
709 709 builtins_new = dict(__IPYTHON__ = self,
710 710 ip_set_hook = self.set_hook,
711 711 jobs = self.jobs,
712 712 ipmagic = self.ipmagic,
713 713 ipalias = self.ipalias,
714 714 ipsystem = self.ipsystem,
715 715 _ip = self.api
716 716 )
717 717 for biname,bival in builtins_new.items():
718 718 try:
719 719 # store the orignal value so we can restore it
720 720 self.builtins_added[biname] = __builtin__.__dict__[biname]
721 721 except KeyError:
722 722 # or mark that it wasn't defined, and we'll just delete it at
723 723 # cleanup
724 724 self.builtins_added[biname] = Undefined
725 725 __builtin__.__dict__[biname] = bival
726 726
727 727 # Keep in the builtins a flag for when IPython is active. We set it
728 728 # with setdefault so that multiple nested IPythons don't clobber one
729 729 # another. Each will increase its value by one upon being activated,
730 730 # which also gives us a way to determine the nesting level.
731 731 __builtin__.__dict__.setdefault('__IPYTHON__active',0)
732 732
733 733 def clean_builtins(self):
734 734 """Remove any builtins which might have been added by add_builtins, or
735 735 restore overwritten ones to their previous values."""
736 736 for biname,bival in self.builtins_added.items():
737 737 if bival is Undefined:
738 738 del __builtin__.__dict__[biname]
739 739 else:
740 740 __builtin__.__dict__[biname] = bival
741 741 self.builtins_added.clear()
742 742
743 743 def set_hook(self,name,hook, priority = 50, str_key = None, re_key = None):
744 744 """set_hook(name,hook) -> sets an internal IPython hook.
745 745
746 746 IPython exposes some of its internal API as user-modifiable hooks. By
747 747 adding your function to one of these hooks, you can modify IPython's
748 748 behavior to call at runtime your own routines."""
749 749
750 750 # At some point in the future, this should validate the hook before it
751 751 # accepts it. Probably at least check that the hook takes the number
752 752 # of args it's supposed to.
753 753
754 754 f = new.instancemethod(hook,self,self.__class__)
755 755
756 756 # check if the hook is for strdispatcher first
757 757 if str_key is not None:
758 758 sdp = self.strdispatchers.get(name, StrDispatch())
759 759 sdp.add_s(str_key, f, priority )
760 760 self.strdispatchers[name] = sdp
761 761 return
762 762 if re_key is not None:
763 763 sdp = self.strdispatchers.get(name, StrDispatch())
764 764 sdp.add_re(re.compile(re_key), f, priority )
765 765 self.strdispatchers[name] = sdp
766 766 return
767 767
768 768 dp = getattr(self.hooks, name, None)
769 769 if name not in IPython.hooks.__all__:
770 770 print "Warning! Hook '%s' is not one of %s" % (name, IPython.hooks.__all__ )
771 771 if not dp:
772 772 dp = IPython.hooks.CommandChainDispatcher()
773 773
774 774 try:
775 775 dp.add(f,priority)
776 776 except AttributeError:
777 777 # it was not commandchain, plain old func - replace
778 778 dp = f
779 779
780 780 setattr(self.hooks,name, dp)
781 781
782 782
783 783 #setattr(self.hooks,name,new.instancemethod(hook,self,self.__class__))
784 784
785 785 def set_crash_handler(self,crashHandler):
786 786 """Set the IPython crash handler.
787 787
788 788 This must be a callable with a signature suitable for use as
789 789 sys.excepthook."""
790 790
791 791 # Install the given crash handler as the Python exception hook
792 792 sys.excepthook = crashHandler
793 793
794 794 # The instance will store a pointer to this, so that runtime code
795 795 # (such as magics) can access it. This is because during the
796 796 # read-eval loop, it gets temporarily overwritten (to deal with GUI
797 797 # frameworks).
798 798 self.sys_excepthook = sys.excepthook
799 799
800 800
801 801 def set_custom_exc(self,exc_tuple,handler):
802 802 """set_custom_exc(exc_tuple,handler)
803 803
804 804 Set a custom exception handler, which will be called if any of the
805 805 exceptions in exc_tuple occur in the mainloop (specifically, in the
806 806 runcode() method.
807 807
808 808 Inputs:
809 809
810 810 - exc_tuple: a *tuple* of valid exceptions to call the defined
811 811 handler for. It is very important that you use a tuple, and NOT A
812 812 LIST here, because of the way Python's except statement works. If
813 813 you only want to trap a single exception, use a singleton tuple:
814 814
815 815 exc_tuple == (MyCustomException,)
816 816
817 817 - handler: this must be defined as a function with the following
818 818 basic interface: def my_handler(self,etype,value,tb).
819 819
820 820 This will be made into an instance method (via new.instancemethod)
821 821 of IPython itself, and it will be called if any of the exceptions
822 822 listed in the exc_tuple are caught. If the handler is None, an
823 823 internal basic one is used, which just prints basic info.
824 824
825 825 WARNING: by putting in your own exception handler into IPython's main
826 826 execution loop, you run a very good chance of nasty crashes. This
827 827 facility should only be used if you really know what you are doing."""
828 828
829 829 assert type(exc_tuple)==type(()) , \
830 830 "The custom exceptions must be given AS A TUPLE."
831 831
832 832 def dummy_handler(self,etype,value,tb):
833 833 print '*** Simple custom exception handler ***'
834 834 print 'Exception type :',etype
835 835 print 'Exception value:',value
836 836 print 'Traceback :',tb
837 837 print 'Source code :','\n'.join(self.buffer)
838 838
839 839 if handler is None: handler = dummy_handler
840 840
841 841 self.CustomTB = new.instancemethod(handler,self,self.__class__)
842 842 self.custom_exceptions = exc_tuple
843 843
844 844 def set_custom_completer(self,completer,pos=0):
845 845 """set_custom_completer(completer,pos=0)
846 846
847 847 Adds a new custom completer function.
848 848
849 849 The position argument (defaults to 0) is the index in the completers
850 850 list where you want the completer to be inserted."""
851 851
852 852 newcomp = new.instancemethod(completer,self.Completer,
853 853 self.Completer.__class__)
854 854 self.Completer.matchers.insert(pos,newcomp)
855 855
856 856 def _get_call_pdb(self):
857 857 return self._call_pdb
858 858
859 859 def _set_call_pdb(self,val):
860 860
861 861 if val not in (0,1,False,True):
862 862 raise ValueError,'new call_pdb value must be boolean'
863 863
864 864 # store value in instance
865 865 self._call_pdb = val
866 866
867 867 # notify the actual exception handlers
868 868 self.InteractiveTB.call_pdb = val
869 869 if self.isthreaded:
870 870 try:
871 871 self.sys_excepthook.call_pdb = val
872 872 except:
873 873 warn('Failed to activate pdb for threaded exception handler')
874 874
875 875 call_pdb = property(_get_call_pdb,_set_call_pdb,None,
876 876 'Control auto-activation of pdb at exceptions')
877 877
878 878
879 879 # These special functions get installed in the builtin namespace, to
880 880 # provide programmatic (pure python) access to magics, aliases and system
881 881 # calls. This is important for logging, user scripting, and more.
882 882
883 883 # We are basically exposing, via normal python functions, the three
884 884 # mechanisms in which ipython offers special call modes (magics for
885 885 # internal control, aliases for direct system access via pre-selected
886 886 # names, and !cmd for calling arbitrary system commands).
887 887
888 888 def ipmagic(self,arg_s):
889 889 """Call a magic function by name.
890 890
891 891 Input: a string containing the name of the magic function to call and any
892 892 additional arguments to be passed to the magic.
893 893
894 894 ipmagic('name -opt foo bar') is equivalent to typing at the ipython
895 895 prompt:
896 896
897 897 In[1]: %name -opt foo bar
898 898
899 899 To call a magic without arguments, simply use ipmagic('name').
900 900
901 901 This provides a proper Python function to call IPython's magics in any
902 902 valid Python code you can type at the interpreter, including loops and
903 903 compound statements. It is added by IPython to the Python builtin
904 904 namespace upon initialization."""
905 905
906 906 args = arg_s.split(' ',1)
907 907 magic_name = args[0]
908 908 magic_name = magic_name.lstrip(self.ESC_MAGIC)
909 909
910 910 try:
911 911 magic_args = args[1]
912 912 except IndexError:
913 913 magic_args = ''
914 914 fn = getattr(self,'magic_'+magic_name,None)
915 915 if fn is None:
916 916 error("Magic function `%s` not found." % magic_name)
917 917 else:
918 918 magic_args = self.var_expand(magic_args)
919 919 return fn(magic_args)
920 920
921 921 def ipalias(self,arg_s):
922 922 """Call an alias by name.
923 923
924 924 Input: a string containing the name of the alias to call and any
925 925 additional arguments to be passed to the magic.
926 926
927 927 ipalias('name -opt foo bar') is equivalent to typing at the ipython
928 928 prompt:
929 929
930 930 In[1]: name -opt foo bar
931 931
932 932 To call an alias without arguments, simply use ipalias('name').
933 933
934 934 This provides a proper Python function to call IPython's aliases in any
935 935 valid Python code you can type at the interpreter, including loops and
936 936 compound statements. It is added by IPython to the Python builtin
937 937 namespace upon initialization."""
938 938
939 939 args = arg_s.split(' ',1)
940 940 alias_name = args[0]
941 941 try:
942 942 alias_args = args[1]
943 943 except IndexError:
944 944 alias_args = ''
945 945 if alias_name in self.alias_table:
946 946 self.call_alias(alias_name,alias_args)
947 947 else:
948 948 error("Alias `%s` not found." % alias_name)
949 949
950 950 def ipsystem(self,arg_s):
951 951 """Make a system call, using IPython."""
952 952
953 953 self.system(arg_s)
954 954
955 955 def complete(self,text):
956 956 """Return a sorted list of all possible completions on text.
957 957
958 958 Inputs:
959 959
960 960 - text: a string of text to be completed on.
961 961
962 962 This is a wrapper around the completion mechanism, similar to what
963 963 readline does at the command line when the TAB key is hit. By
964 964 exposing it as a method, it can be used by other non-readline
965 965 environments (such as GUIs) for text completion.
966 966
967 967 Simple usage example:
968 968
969 969 In [1]: x = 'hello'
970 970
971 971 In [2]: __IP.complete('x.l')
972 972 Out[2]: ['x.ljust', 'x.lower', 'x.lstrip']"""
973 973
974 974 complete = self.Completer.complete
975 975 state = 0
976 976 # use a dict so we get unique keys, since ipyhton's multiple
977 977 # completers can return duplicates.
978 978 comps = {}
979 979 while True:
980 980 newcomp = complete(text,state)
981 981 if newcomp is None:
982 982 break
983 983 comps[newcomp] = 1
984 984 state += 1
985 985 outcomps = comps.keys()
986 986 outcomps.sort()
987 987 return outcomps
988 988
989 989 def set_completer_frame(self, frame=None):
990 990 if frame:
991 991 self.Completer.namespace = frame.f_locals
992 992 self.Completer.global_namespace = frame.f_globals
993 993 else:
994 994 self.Completer.namespace = self.user_ns
995 995 self.Completer.global_namespace = self.user_global_ns
996 996
997 997 def init_auto_alias(self):
998 998 """Define some aliases automatically.
999 999
1000 1000 These are ALL parameter-less aliases"""
1001 1001
1002 1002 for alias,cmd in self.auto_alias:
1003 1003 self.alias_table[alias] = (0,cmd)
1004 1004
1005 1005 def alias_table_validate(self,verbose=0):
1006 1006 """Update information about the alias table.
1007 1007
1008 1008 In particular, make sure no Python keywords/builtins are in it."""
1009 1009
1010 1010 no_alias = self.no_alias
1011 1011 for k in self.alias_table.keys():
1012 1012 if k in no_alias:
1013 1013 del self.alias_table[k]
1014 1014 if verbose:
1015 1015 print ("Deleting alias <%s>, it's a Python "
1016 1016 "keyword or builtin." % k)
1017 1017
1018 1018 def set_autoindent(self,value=None):
1019 1019 """Set the autoindent flag, checking for readline support.
1020 1020
1021 1021 If called with no arguments, it acts as a toggle."""
1022 1022
1023 1023 if not self.has_readline:
1024 1024 if os.name == 'posix':
1025 1025 warn("The auto-indent feature requires the readline library")
1026 1026 self.autoindent = 0
1027 1027 return
1028 1028 if value is None:
1029 1029 self.autoindent = not self.autoindent
1030 1030 else:
1031 1031 self.autoindent = value
1032 1032
1033 1033 def rc_set_toggle(self,rc_field,value=None):
1034 1034 """Set or toggle a field in IPython's rc config. structure.
1035 1035
1036 1036 If called with no arguments, it acts as a toggle.
1037 1037
1038 1038 If called with a non-existent field, the resulting AttributeError
1039 1039 exception will propagate out."""
1040 1040
1041 1041 rc_val = getattr(self.rc,rc_field)
1042 1042 if value is None:
1043 1043 value = not rc_val
1044 1044 setattr(self.rc,rc_field,value)
1045 1045
1046 1046 def user_setup(self,ipythondir,rc_suffix,mode='install'):
1047 1047 """Install the user configuration directory.
1048 1048
1049 1049 Can be called when running for the first time or to upgrade the user's
1050 1050 .ipython/ directory with the mode parameter. Valid modes are 'install'
1051 1051 and 'upgrade'."""
1052 1052
1053 1053 def wait():
1054 1054 try:
1055 1055 raw_input("Please press <RETURN> to start IPython.")
1056 1056 except EOFError:
1057 1057 print >> Term.cout
1058 1058 print '*'*70
1059 1059
1060 1060 cwd = os.getcwd() # remember where we started
1061 1061 glb = glob.glob
1062 1062 print '*'*70
1063 1063 if mode == 'install':
1064 1064 print \
1065 1065 """Welcome to IPython. I will try to create a personal configuration directory
1066 1066 where you can customize many aspects of IPython's functionality in:\n"""
1067 1067 else:
1068 1068 print 'I am going to upgrade your configuration in:'
1069 1069
1070 1070 print ipythondir
1071 1071
1072 1072 rcdirend = os.path.join('IPython','UserConfig')
1073 1073 cfg = lambda d: os.path.join(d,rcdirend)
1074 1074 try:
1075 1075 rcdir = filter(os.path.isdir,map(cfg,sys.path))[0]
1076 1076 except IOError:
1077 1077 warning = """
1078 1078 Installation error. IPython's directory was not found.
1079 1079
1080 1080 Check the following:
1081 1081
1082 1082 The ipython/IPython directory should be in a directory belonging to your
1083 1083 PYTHONPATH environment variable (that is, it should be in a directory
1084 1084 belonging to sys.path). You can copy it explicitly there or just link to it.
1085 1085
1086 1086 IPython will proceed with builtin defaults.
1087 1087 """
1088 1088 warn(warning)
1089 1089 wait()
1090 1090 return
1091 1091
1092 1092 if mode == 'install':
1093 1093 try:
1094 1094 shutil.copytree(rcdir,ipythondir)
1095 1095 os.chdir(ipythondir)
1096 1096 rc_files = glb("ipythonrc*")
1097 1097 for rc_file in rc_files:
1098 1098 os.rename(rc_file,rc_file+rc_suffix)
1099 1099 except:
1100 1100 warning = """
1101 1101
1102 1102 There was a problem with the installation:
1103 1103 %s
1104 1104 Try to correct it or contact the developers if you think it's a bug.
1105 1105 IPython will proceed with builtin defaults.""" % sys.exc_info()[1]
1106 1106 warn(warning)
1107 1107 wait()
1108 1108 return
1109 1109
1110 1110 elif mode == 'upgrade':
1111 1111 try:
1112 1112 os.chdir(ipythondir)
1113 1113 except:
1114 1114 print """
1115 1115 Can not upgrade: changing to directory %s failed. Details:
1116 1116 %s
1117 1117 """ % (ipythondir,sys.exc_info()[1])
1118 1118 wait()
1119 1119 return
1120 1120 else:
1121 1121 sources = glb(os.path.join(rcdir,'[A-Za-z]*'))
1122 1122 for new_full_path in sources:
1123 1123 new_filename = os.path.basename(new_full_path)
1124 1124 if new_filename.startswith('ipythonrc'):
1125 1125 new_filename = new_filename + rc_suffix
1126 1126 # The config directory should only contain files, skip any
1127 1127 # directories which may be there (like CVS)
1128 1128 if os.path.isdir(new_full_path):
1129 1129 continue
1130 1130 if os.path.exists(new_filename):
1131 1131 old_file = new_filename+'.old'
1132 1132 if os.path.exists(old_file):
1133 1133 os.remove(old_file)
1134 1134 os.rename(new_filename,old_file)
1135 1135 shutil.copy(new_full_path,new_filename)
1136 1136 else:
1137 1137 raise ValueError,'unrecognized mode for install:',`mode`
1138 1138
1139 1139 # Fix line-endings to those native to each platform in the config
1140 1140 # directory.
1141 1141 try:
1142 1142 os.chdir(ipythondir)
1143 1143 except:
1144 1144 print """
1145 1145 Problem: changing to directory %s failed.
1146 1146 Details:
1147 1147 %s
1148 1148
1149 1149 Some configuration files may have incorrect line endings. This should not
1150 1150 cause any problems during execution. """ % (ipythondir,sys.exc_info()[1])
1151 1151 wait()
1152 1152 else:
1153 1153 for fname in glb('ipythonrc*'):
1154 1154 try:
1155 1155 native_line_ends(fname,backup=0)
1156 1156 except IOError:
1157 1157 pass
1158 1158
1159 1159 if mode == 'install':
1160 1160 print """
1161 1161 Successful installation!
1162 1162
1163 1163 Please read the sections 'Initial Configuration' and 'Quick Tips' in the
1164 1164 IPython manual (there are both HTML and PDF versions supplied with the
1165 1165 distribution) to make sure that your system environment is properly configured
1166 1166 to take advantage of IPython's features.
1167 1167
1168 1168 Important note: the configuration system has changed! The old system is
1169 1169 still in place, but its setting may be partly overridden by the settings in
1170 1170 "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file
1171 1171 if some of the new settings bother you.
1172 1172
1173 1173 """
1174 1174 else:
1175 1175 print """
1176 1176 Successful upgrade!
1177 1177
1178 1178 All files in your directory:
1179 1179 %(ipythondir)s
1180 1180 which would have been overwritten by the upgrade were backed up with a .old
1181 1181 extension. If you had made particular customizations in those files you may
1182 1182 want to merge them back into the new files.""" % locals()
1183 1183 wait()
1184 1184 os.chdir(cwd)
1185 1185 # end user_setup()
1186 1186
1187 1187 def atexit_operations(self):
1188 1188 """This will be executed at the time of exit.
1189 1189
1190 1190 Saving of persistent data should be performed here. """
1191 1191
1192 1192 #print '*** IPython exit cleanup ***' # dbg
1193 1193 # input history
1194 1194 self.savehist()
1195 1195
1196 1196 # Cleanup all tempfiles left around
1197 1197 for tfile in self.tempfiles:
1198 1198 try:
1199 1199 os.unlink(tfile)
1200 1200 except OSError:
1201 1201 pass
1202 1202
1203 1203 # save the "persistent data" catch-all dictionary
1204 1204 self.hooks.shutdown_hook()
1205 1205
1206 1206 def savehist(self):
1207 1207 """Save input history to a file (via readline library)."""
1208 1208 try:
1209 1209 self.readline.write_history_file(self.histfile)
1210 1210 except:
1211 1211 print 'Unable to save IPython command history to file: ' + \
1212 1212 `self.histfile`
1213 1213
1214 def history_saving_wrapper(self, func):
1215 """ Wrap func for readline history saving
1216
1217 Convert func into callable that saves & restores
1218 history around the call """
1219
1220 if not self.has_readline:
1221 return func
1222
1223 def wrapper():
1224 self.savehist()
1225 try:
1226 func()
1227 finally:
1228 readline.read_history_file(self.histfile)
1229 return wrapper
1230
1231
1214 1232 def pre_readline(self):
1215 1233 """readline hook to be used at the start of each line.
1216 1234
1217 1235 Currently it handles auto-indent only."""
1218 1236
1219 1237 #debugx('self.indent_current_nsp','pre_readline:')
1220 1238 self.readline.insert_text(self.indent_current_str())
1221 1239
1222 1240 def init_readline(self):
1223 1241 """Command history completion/saving/reloading."""
1224 1242
1225 1243 import IPython.rlineimpl as readline
1226 1244 if not readline.have_readline:
1227 1245 self.has_readline = 0
1228 1246 self.readline = None
1229 1247 # no point in bugging windows users with this every time:
1230 1248 warn('Readline services not available on this platform.')
1231 1249 else:
1232 1250 sys.modules['readline'] = readline
1233 1251 import atexit
1234 1252 from IPython.completer import IPCompleter
1235 1253 self.Completer = IPCompleter(self,
1236 1254 self.user_ns,
1237 1255 self.user_global_ns,
1238 1256 self.rc.readline_omit__names,
1239 1257 self.alias_table)
1240 1258 sdisp = self.strdispatchers.get('complete_command', StrDispatch())
1241 1259 self.strdispatchers['complete_command'] = sdisp
1242 1260 self.Completer.custom_completers = sdisp
1243 1261 # Platform-specific configuration
1244 1262 if os.name == 'nt':
1245 1263 self.readline_startup_hook = readline.set_pre_input_hook
1246 1264 else:
1247 1265 self.readline_startup_hook = readline.set_startup_hook
1248 1266
1249 1267 # Load user's initrc file (readline config)
1250 1268 inputrc_name = os.environ.get('INPUTRC')
1251 1269 if inputrc_name is None:
1252 1270 home_dir = get_home_dir()
1253 1271 if home_dir is not None:
1254 1272 inputrc_name = os.path.join(home_dir,'.inputrc')
1255 1273 if os.path.isfile(inputrc_name):
1256 1274 try:
1257 1275 readline.read_init_file(inputrc_name)
1258 1276 except:
1259 1277 warn('Problems reading readline initialization file <%s>'
1260 1278 % inputrc_name)
1261 1279
1262 1280 self.has_readline = 1
1263 1281 self.readline = readline
1264 1282 # save this in sys so embedded copies can restore it properly
1265 1283 sys.ipcompleter = self.Completer.complete
1266 1284 readline.set_completer(self.Completer.complete)
1267 1285
1268 1286 # Configure readline according to user's prefs
1269 1287 for rlcommand in self.rc.readline_parse_and_bind:
1270 1288 readline.parse_and_bind(rlcommand)
1271 1289
1272 1290 # remove some chars from the delimiters list
1273 1291 delims = readline.get_completer_delims()
1274 1292 delims = delims.translate(string._idmap,
1275 1293 self.rc.readline_remove_delims)
1276 1294 readline.set_completer_delims(delims)
1277 1295 # otherwise we end up with a monster history after a while:
1278 1296 readline.set_history_length(1000)
1279 1297 try:
1280 1298 #print '*** Reading readline history' # dbg
1281 1299 readline.read_history_file(self.histfile)
1282 1300 except IOError:
1283 1301 pass # It doesn't exist yet.
1284 1302
1285 1303 atexit.register(self.atexit_operations)
1286 1304 del atexit
1287 1305
1288 1306 # Configure auto-indent for all platforms
1289 1307 self.set_autoindent(self.rc.autoindent)
1290 1308
1291 1309 def ask_yes_no(self,prompt,default=True):
1292 1310 if self.rc.quiet:
1293 1311 return True
1294 1312 return ask_yes_no(prompt,default)
1295 1313
1296 1314 def _should_recompile(self,e):
1297 1315 """Utility routine for edit_syntax_error"""
1298 1316
1299 1317 if e.filename in ('<ipython console>','<input>','<string>',
1300 1318 '<console>','<BackgroundJob compilation>',
1301 1319 None):
1302 1320
1303 1321 return False
1304 1322 try:
1305 1323 if (self.rc.autoedit_syntax and
1306 1324 not self.ask_yes_no('Return to editor to correct syntax error? '
1307 1325 '[Y/n] ','y')):
1308 1326 return False
1309 1327 except EOFError:
1310 1328 return False
1311 1329
1312 1330 def int0(x):
1313 1331 try:
1314 1332 return int(x)
1315 1333 except TypeError:
1316 1334 return 0
1317 1335 # always pass integer line and offset values to editor hook
1318 1336 self.hooks.fix_error_editor(e.filename,
1319 1337 int0(e.lineno),int0(e.offset),e.msg)
1320 1338 return True
1321 1339
1322 1340 def edit_syntax_error(self):
1323 1341 """The bottom half of the syntax error handler called in the main loop.
1324 1342
1325 1343 Loop until syntax error is fixed or user cancels.
1326 1344 """
1327 1345
1328 1346 while self.SyntaxTB.last_syntax_error:
1329 1347 # copy and clear last_syntax_error
1330 1348 err = self.SyntaxTB.clear_err_state()
1331 1349 if not self._should_recompile(err):
1332 1350 return
1333 1351 try:
1334 1352 # may set last_syntax_error again if a SyntaxError is raised
1335 1353 self.safe_execfile(err.filename,self.user_ns)
1336 1354 except:
1337 1355 self.showtraceback()
1338 1356 else:
1339 1357 try:
1340 1358 f = file(err.filename)
1341 1359 try:
1342 1360 sys.displayhook(f.read())
1343 1361 finally:
1344 1362 f.close()
1345 1363 except:
1346 1364 self.showtraceback()
1347 1365
1348 1366 def showsyntaxerror(self, filename=None):
1349 1367 """Display the syntax error that just occurred.
1350 1368
1351 1369 This doesn't display a stack trace because there isn't one.
1352 1370
1353 1371 If a filename is given, it is stuffed in the exception instead
1354 1372 of what was there before (because Python's parser always uses
1355 1373 "<string>" when reading from a string).
1356 1374 """
1357 1375 etype, value, last_traceback = sys.exc_info()
1358 1376
1359 1377 # See note about these variables in showtraceback() below
1360 1378 sys.last_type = etype
1361 1379 sys.last_value = value
1362 1380 sys.last_traceback = last_traceback
1363 1381
1364 1382 if filename and etype is SyntaxError:
1365 1383 # Work hard to stuff the correct filename in the exception
1366 1384 try:
1367 1385 msg, (dummy_filename, lineno, offset, line) = value
1368 1386 except:
1369 1387 # Not the format we expect; leave it alone
1370 1388 pass
1371 1389 else:
1372 1390 # Stuff in the right filename
1373 1391 try:
1374 1392 # Assume SyntaxError is a class exception
1375 1393 value = SyntaxError(msg, (filename, lineno, offset, line))
1376 1394 except:
1377 1395 # If that failed, assume SyntaxError is a string
1378 1396 value = msg, (filename, lineno, offset, line)
1379 1397 self.SyntaxTB(etype,value,[])
1380 1398
1381 1399 def debugger(self):
1382 1400 """Call the pydb/pdb debugger."""
1383 1401
1384 1402 if not self.rc.pdb:
1385 1403 return
1386 1404 have_pydb = False
1387 1405 if sys.version[:3] >= '2.5':
1388 1406 try:
1389 1407 from pydb import pm
1390 1408 have_pydb = True
1391 1409 except ImportError:
1392 1410 pass
1393 1411 if not have_pydb:
1394 1412 from pdb import pm
1395 pm()
1413 self.history_saving_wrapper(pm)()
1396 1414
1397 1415 def showtraceback(self,exc_tuple = None,filename=None,tb_offset=None):
1398 1416 """Display the exception that just occurred.
1399 1417
1400 1418 If nothing is known about the exception, this is the method which
1401 1419 should be used throughout the code for presenting user tracebacks,
1402 1420 rather than directly invoking the InteractiveTB object.
1403 1421
1404 1422 A specific showsyntaxerror() also exists, but this method can take
1405 1423 care of calling it if needed, so unless you are explicitly catching a
1406 1424 SyntaxError exception, don't try to analyze the stack manually and
1407 1425 simply call this method."""
1408 1426
1409 1427 # Though this won't be called by syntax errors in the input line,
1410 1428 # there may be SyntaxError cases whith imported code.
1411 1429 if exc_tuple is None:
1412 1430 etype, value, tb = sys.exc_info()
1413 1431 else:
1414 1432 etype, value, tb = exc_tuple
1415 1433 if etype is SyntaxError:
1416 1434 self.showsyntaxerror(filename)
1417 1435 else:
1418 1436 # WARNING: these variables are somewhat deprecated and not
1419 1437 # necessarily safe to use in a threaded environment, but tools
1420 1438 # like pdb depend on their existence, so let's set them. If we
1421 1439 # find problems in the field, we'll need to revisit their use.
1422 1440 sys.last_type = etype
1423 1441 sys.last_value = value
1424 1442 sys.last_traceback = tb
1425 1443
1426 1444 self.InteractiveTB(etype,value,tb,tb_offset=tb_offset)
1427 1445 if self.InteractiveTB.call_pdb and self.has_readline:
1428 1446 # pdb mucks up readline, fix it back
1429 1447 self.readline.set_completer(self.Completer.complete)
1430 1448
1431 1449 def mainloop(self,banner=None):
1432 1450 """Creates the local namespace and starts the mainloop.
1433 1451
1434 1452 If an optional banner argument is given, it will override the
1435 1453 internally created default banner."""
1436 1454
1437 1455 if self.rc.c: # Emulate Python's -c option
1438 1456 self.exec_init_cmd()
1439 1457 if banner is None:
1440 1458 if not self.rc.banner:
1441 1459 banner = ''
1442 1460 # banner is string? Use it directly!
1443 1461 elif isinstance(self.rc.banner,basestring):
1444 1462 banner = self.rc.banner
1445 1463 else:
1446 1464 banner = self.BANNER+self.banner2
1447 1465
1448 1466 self.interact(banner)
1449 1467
1450 1468 def exec_init_cmd(self):
1451 1469 """Execute a command given at the command line.
1452 1470
1453 1471 This emulates Python's -c option."""
1454 1472
1455 1473 #sys.argv = ['-c']
1456 1474 self.push(self.rc.c)
1457 1475
1458 1476 def embed_mainloop(self,header='',local_ns=None,global_ns=None,stack_depth=0):
1459 1477 """Embeds IPython into a running python program.
1460 1478
1461 1479 Input:
1462 1480
1463 1481 - header: An optional header message can be specified.
1464 1482
1465 1483 - local_ns, global_ns: working namespaces. If given as None, the
1466 1484 IPython-initialized one is updated with __main__.__dict__, so that
1467 1485 program variables become visible but user-specific configuration
1468 1486 remains possible.
1469 1487
1470 1488 - stack_depth: specifies how many levels in the stack to go to
1471 1489 looking for namespaces (when local_ns and global_ns are None). This
1472 1490 allows an intermediate caller to make sure that this function gets
1473 1491 the namespace from the intended level in the stack. By default (0)
1474 1492 it will get its locals and globals from the immediate caller.
1475 1493
1476 1494 Warning: it's possible to use this in a program which is being run by
1477 1495 IPython itself (via %run), but some funny things will happen (a few
1478 1496 globals get overwritten). In the future this will be cleaned up, as
1479 1497 there is no fundamental reason why it can't work perfectly."""
1480 1498
1481 1499 # Get locals and globals from caller
1482 1500 if local_ns is None or global_ns is None:
1483 1501 call_frame = sys._getframe(stack_depth).f_back
1484 1502
1485 1503 if local_ns is None:
1486 1504 local_ns = call_frame.f_locals
1487 1505 if global_ns is None:
1488 1506 global_ns = call_frame.f_globals
1489 1507
1490 1508 # Update namespaces and fire up interpreter
1491 1509
1492 1510 # The global one is easy, we can just throw it in
1493 1511 self.user_global_ns = global_ns
1494 1512
1495 1513 # but the user/local one is tricky: ipython needs it to store internal
1496 1514 # data, but we also need the locals. We'll copy locals in the user
1497 1515 # one, but will track what got copied so we can delete them at exit.
1498 1516 # This is so that a later embedded call doesn't see locals from a
1499 1517 # previous call (which most likely existed in a separate scope).
1500 1518 local_varnames = local_ns.keys()
1501 1519 self.user_ns.update(local_ns)
1502 1520
1503 1521 # Patch for global embedding to make sure that things don't overwrite
1504 1522 # user globals accidentally. Thanks to Richard <rxe@renre-europe.com>
1505 1523 # FIXME. Test this a bit more carefully (the if.. is new)
1506 1524 if local_ns is None and global_ns is None:
1507 1525 self.user_global_ns.update(__main__.__dict__)
1508 1526
1509 1527 # make sure the tab-completer has the correct frame information, so it
1510 1528 # actually completes using the frame's locals/globals
1511 1529 self.set_completer_frame()
1512 1530
1513 1531 # before activating the interactive mode, we need to make sure that
1514 1532 # all names in the builtin namespace needed by ipython point to
1515 1533 # ourselves, and not to other instances.
1516 1534 self.add_builtins()
1517 1535
1518 1536 self.interact(header)
1519 1537
1520 1538 # now, purge out the user namespace from anything we might have added
1521 1539 # from the caller's local namespace
1522 1540 delvar = self.user_ns.pop
1523 1541 for var in local_varnames:
1524 1542 delvar(var,None)
1525 1543 # and clean builtins we may have overridden
1526 1544 self.clean_builtins()
1527 1545
1528 1546 def interact(self, banner=None):
1529 1547 """Closely emulate the interactive Python console.
1530 1548
1531 1549 The optional banner argument specify the banner to print
1532 1550 before the first interaction; by default it prints a banner
1533 1551 similar to the one printed by the real Python interpreter,
1534 1552 followed by the current class name in parentheses (so as not
1535 1553 to confuse this with the real interpreter -- since it's so
1536 1554 close!).
1537 1555
1538 1556 """
1539 1557
1540 1558 if self.exit_now:
1541 1559 # batch run -> do not interact
1542 1560 return
1543 1561 cprt = 'Type "copyright", "credits" or "license" for more information.'
1544 1562 if banner is None:
1545 1563 self.write("Python %s on %s\n%s\n(%s)\n" %
1546 1564 (sys.version, sys.platform, cprt,
1547 1565 self.__class__.__name__))
1548 1566 else:
1549 1567 self.write(banner)
1550 1568
1551 1569 more = 0
1552 1570
1553 1571 # Mark activity in the builtins
1554 1572 __builtin__.__dict__['__IPYTHON__active'] += 1
1555 1573
1556 1574 # exit_now is set by a call to %Exit or %Quit
1557 1575 while not self.exit_now:
1558 1576 if more:
1559 1577 prompt = self.hooks.generate_prompt(True)
1560 1578 if self.autoindent:
1561 1579 self.readline_startup_hook(self.pre_readline)
1562 1580 else:
1563 1581 prompt = self.hooks.generate_prompt(False)
1564 1582 try:
1565 1583 line = self.raw_input(prompt,more)
1566 1584 if self.exit_now:
1567 1585 # quick exit on sys.std[in|out] close
1568 1586 break
1569 1587 if self.autoindent:
1570 1588 self.readline_startup_hook(None)
1571 1589 except KeyboardInterrupt:
1572 1590 self.write('\nKeyboardInterrupt\n')
1573 1591 self.resetbuffer()
1574 1592 # keep cache in sync with the prompt counter:
1575 1593 self.outputcache.prompt_count -= 1
1576 1594
1577 1595 if self.autoindent:
1578 1596 self.indent_current_nsp = 0
1579 1597 more = 0
1580 1598 except EOFError:
1581 1599 if self.autoindent:
1582 1600 self.readline_startup_hook(None)
1583 1601 self.write('\n')
1584 1602 self.exit()
1585 1603 except bdb.BdbQuit:
1586 1604 warn('The Python debugger has exited with a BdbQuit exception.\n'
1587 1605 'Because of how pdb handles the stack, it is impossible\n'
1588 1606 'for IPython to properly format this particular exception.\n'
1589 1607 'IPython will resume normal operation.')
1590 1608 except:
1591 1609 # exceptions here are VERY RARE, but they can be triggered
1592 1610 # asynchronously by signal handlers, for example.
1593 1611 self.showtraceback()
1594 1612 else:
1595 1613 more = self.push(line)
1596 1614 if (self.SyntaxTB.last_syntax_error and
1597 1615 self.rc.autoedit_syntax):
1598 1616 self.edit_syntax_error()
1599 1617
1600 1618 # We are off again...
1601 1619 __builtin__.__dict__['__IPYTHON__active'] -= 1
1602 1620
1603 1621 def excepthook(self, etype, value, tb):
1604 1622 """One more defense for GUI apps that call sys.excepthook.
1605 1623
1606 1624 GUI frameworks like wxPython trap exceptions and call
1607 1625 sys.excepthook themselves. I guess this is a feature that
1608 1626 enables them to keep running after exceptions that would
1609 1627 otherwise kill their mainloop. This is a bother for IPython
1610 1628 which excepts to catch all of the program exceptions with a try:
1611 1629 except: statement.
1612 1630
1613 1631 Normally, IPython sets sys.excepthook to a CrashHandler instance, so if
1614 1632 any app directly invokes sys.excepthook, it will look to the user like
1615 1633 IPython crashed. In order to work around this, we can disable the
1616 1634 CrashHandler and replace it with this excepthook instead, which prints a
1617 1635 regular traceback using our InteractiveTB. In this fashion, apps which
1618 1636 call sys.excepthook will generate a regular-looking exception from
1619 1637 IPython, and the CrashHandler will only be triggered by real IPython
1620 1638 crashes.
1621 1639
1622 1640 This hook should be used sparingly, only in places which are not likely
1623 1641 to be true IPython errors.
1624 1642 """
1625 1643 self.showtraceback((etype,value,tb),tb_offset=0)
1626 1644
1627 1645 def expand_aliases(self,fn,rest):
1628 1646 """ Expand multiple levels of aliases:
1629 1647
1630 1648 if:
1631 1649
1632 1650 alias foo bar /tmp
1633 1651 alias baz foo
1634 1652
1635 1653 then:
1636 1654
1637 1655 baz huhhahhei -> bar /tmp huhhahhei
1638 1656
1639 1657 """
1640 1658 line = fn + " " + rest
1641 1659
1642 1660 done = Set()
1643 1661 while 1:
1644 1662 pre,fn,rest = self.split_user_input(line)
1645 1663 if fn in self.alias_table:
1646 1664 if fn in done:
1647 1665 warn("Cyclic alias definition, repeated '%s'" % fn)
1648 1666 return ""
1649 1667 done.add(fn)
1650 1668
1651 1669 l2 = self.transform_alias(fn,rest)
1652 1670 # dir -> dir
1653 1671 # print "alias",line, "->",l2 #dbg
1654 1672 if l2 == line:
1655 1673 break
1656 1674 # ls -> ls -F should not recurse forever
1657 1675 if l2.split(None,1)[0] == line.split(None,1)[0]:
1658 1676 line = l2
1659 1677 break
1660 1678
1661 1679 line=l2
1662 1680
1663 1681
1664 1682 # print "al expand to",line #dbg
1665 1683 else:
1666 1684 break
1667 1685
1668 1686 return line
1669 1687
1670 1688 def transform_alias(self, alias,rest=''):
1671 1689 """ Transform alias to system command string.
1672 1690 """
1673 1691 nargs,cmd = self.alias_table[alias]
1674 1692 if ' ' in cmd and os.path.isfile(cmd):
1675 1693 cmd = '"%s"' % cmd
1676 1694
1677 1695 # Expand the %l special to be the user's input line
1678 1696 if cmd.find('%l') >= 0:
1679 1697 cmd = cmd.replace('%l',rest)
1680 1698 rest = ''
1681 1699 if nargs==0:
1682 1700 # Simple, argument-less aliases
1683 1701 cmd = '%s %s' % (cmd,rest)
1684 1702 else:
1685 1703 # Handle aliases with positional arguments
1686 1704 args = rest.split(None,nargs)
1687 1705 if len(args)< nargs:
1688 1706 error('Alias <%s> requires %s arguments, %s given.' %
1689 1707 (alias,nargs,len(args)))
1690 1708 return None
1691 1709 cmd = '%s %s' % (cmd % tuple(args[:nargs]),' '.join(args[nargs:]))
1692 1710 # Now call the macro, evaluating in the user's namespace
1693 1711 #print 'new command: <%r>' % cmd # dbg
1694 1712 return cmd
1695 1713
1696 1714 def call_alias(self,alias,rest=''):
1697 1715 """Call an alias given its name and the rest of the line.
1698 1716
1699 1717 This is only used to provide backwards compatibility for users of
1700 1718 ipalias(), use of which is not recommended for anymore."""
1701 1719
1702 1720 # Now call the macro, evaluating in the user's namespace
1703 1721 cmd = self.transform_alias(alias, rest)
1704 1722 try:
1705 1723 self.system(cmd)
1706 1724 except:
1707 1725 self.showtraceback()
1708 1726
1709 1727 def indent_current_str(self):
1710 1728 """return the current level of indentation as a string"""
1711 1729 return self.indent_current_nsp * ' '
1712 1730
1713 1731 def autoindent_update(self,line):
1714 1732 """Keep track of the indent level."""
1715 1733
1716 1734 #debugx('line')
1717 1735 #debugx('self.indent_current_nsp')
1718 1736 if self.autoindent:
1719 1737 if line:
1720 1738 inisp = num_ini_spaces(line)
1721 1739 if inisp < self.indent_current_nsp:
1722 1740 self.indent_current_nsp = inisp
1723 1741
1724 1742 if line[-1] == ':':
1725 1743 self.indent_current_nsp += 4
1726 1744 elif dedent_re.match(line):
1727 1745 self.indent_current_nsp -= 4
1728 1746 else:
1729 1747 self.indent_current_nsp = 0
1730 1748
1731 1749 def runlines(self,lines):
1732 1750 """Run a string of one or more lines of source.
1733 1751
1734 1752 This method is capable of running a string containing multiple source
1735 1753 lines, as if they had been entered at the IPython prompt. Since it
1736 1754 exposes IPython's processing machinery, the given strings can contain
1737 1755 magic calls (%magic), special shell access (!cmd), etc."""
1738 1756
1739 1757 # We must start with a clean buffer, in case this is run from an
1740 1758 # interactive IPython session (via a magic, for example).
1741 1759 self.resetbuffer()
1742 1760 lines = lines.split('\n')
1743 1761 more = 0
1744 1762 for line in lines:
1745 1763 # skip blank lines so we don't mess up the prompt counter, but do
1746 1764 # NOT skip even a blank line if we are in a code block (more is
1747 1765 # true)
1748 1766 if line or more:
1749 1767 more = self.push(self.prefilter(line,more))
1750 1768 # IPython's runsource returns None if there was an error
1751 1769 # compiling the code. This allows us to stop processing right
1752 1770 # away, so the user gets the error message at the right place.
1753 1771 if more is None:
1754 1772 break
1755 1773 # final newline in case the input didn't have it, so that the code
1756 1774 # actually does get executed
1757 1775 if more:
1758 1776 self.push('\n')
1759 1777
1760 1778 def runsource(self, source, filename='<input>', symbol='single'):
1761 1779 """Compile and run some source in the interpreter.
1762 1780
1763 1781 Arguments are as for compile_command().
1764 1782
1765 1783 One several things can happen:
1766 1784
1767 1785 1) The input is incorrect; compile_command() raised an
1768 1786 exception (SyntaxError or OverflowError). A syntax traceback
1769 1787 will be printed by calling the showsyntaxerror() method.
1770 1788
1771 1789 2) The input is incomplete, and more input is required;
1772 1790 compile_command() returned None. Nothing happens.
1773 1791
1774 1792 3) The input is complete; compile_command() returned a code
1775 1793 object. The code is executed by calling self.runcode() (which
1776 1794 also handles run-time exceptions, except for SystemExit).
1777 1795
1778 1796 The return value is:
1779 1797
1780 1798 - True in case 2
1781 1799
1782 1800 - False in the other cases, unless an exception is raised, where
1783 1801 None is returned instead. This can be used by external callers to
1784 1802 know whether to continue feeding input or not.
1785 1803
1786 1804 The return value can be used to decide whether to use sys.ps1 or
1787 1805 sys.ps2 to prompt the next line."""
1788 1806
1789 1807 try:
1790 1808 code = self.compile(source,filename,symbol)
1791 1809 except (OverflowError, SyntaxError, ValueError):
1792 1810 # Case 1
1793 1811 self.showsyntaxerror(filename)
1794 1812 return None
1795 1813
1796 1814 if code is None:
1797 1815 # Case 2
1798 1816 return True
1799 1817
1800 1818 # Case 3
1801 1819 # We store the code object so that threaded shells and
1802 1820 # custom exception handlers can access all this info if needed.
1803 1821 # The source corresponding to this can be obtained from the
1804 1822 # buffer attribute as '\n'.join(self.buffer).
1805 1823 self.code_to_run = code
1806 1824 # now actually execute the code object
1807 1825 if self.runcode(code) == 0:
1808 1826 return False
1809 1827 else:
1810 1828 return None
1811 1829
1812 1830 def runcode(self,code_obj):
1813 1831 """Execute a code object.
1814 1832
1815 1833 When an exception occurs, self.showtraceback() is called to display a
1816 1834 traceback.
1817 1835
1818 1836 Return value: a flag indicating whether the code to be run completed
1819 1837 successfully:
1820 1838
1821 1839 - 0: successful execution.
1822 1840 - 1: an error occurred.
1823 1841 """
1824 1842
1825 1843 # Set our own excepthook in case the user code tries to call it
1826 1844 # directly, so that the IPython crash handler doesn't get triggered
1827 1845 old_excepthook,sys.excepthook = sys.excepthook, self.excepthook
1828 1846
1829 1847 # we save the original sys.excepthook in the instance, in case config
1830 1848 # code (such as magics) needs access to it.
1831 1849 self.sys_excepthook = old_excepthook
1832 1850 outflag = 1 # happens in more places, so it's easier as default
1833 1851 try:
1834 1852 try:
1835 1853 # Embedded instances require separate global/local namespaces
1836 1854 # so they can see both the surrounding (local) namespace and
1837 1855 # the module-level globals when called inside another function.
1838 1856 if self.embedded:
1839 1857 exec code_obj in self.user_global_ns, self.user_ns
1840 1858 # Normal (non-embedded) instances should only have a single
1841 1859 # namespace for user code execution, otherwise functions won't
1842 1860 # see interactive top-level globals.
1843 1861 else:
1844 1862 exec code_obj in self.user_ns
1845 1863 finally:
1846 1864 # Reset our crash handler in place
1847 1865 sys.excepthook = old_excepthook
1848 1866 except SystemExit:
1849 1867 self.resetbuffer()
1850 1868 self.showtraceback()
1851 1869 warn("Type %exit or %quit to exit IPython "
1852 1870 "(%Exit or %Quit do so unconditionally).",level=1)
1853 1871 except self.custom_exceptions:
1854 1872 etype,value,tb = sys.exc_info()
1855 1873 self.CustomTB(etype,value,tb)
1856 1874 except:
1857 1875 self.showtraceback()
1858 1876 else:
1859 1877 outflag = 0
1860 1878 if softspace(sys.stdout, 0):
1861 1879 print
1862 1880 # Flush out code object which has been run (and source)
1863 1881 self.code_to_run = None
1864 1882 return outflag
1865 1883
1866 1884 def push(self, line):
1867 1885 """Push a line to the interpreter.
1868 1886
1869 1887 The line should not have a trailing newline; it may have
1870 1888 internal newlines. The line is appended to a buffer and the
1871 1889 interpreter's runsource() method is called with the
1872 1890 concatenated contents of the buffer as source. If this
1873 1891 indicates that the command was executed or invalid, the buffer
1874 1892 is reset; otherwise, the command is incomplete, and the buffer
1875 1893 is left as it was after the line was appended. The return
1876 1894 value is 1 if more input is required, 0 if the line was dealt
1877 1895 with in some way (this is the same as runsource()).
1878 1896 """
1879 1897
1880 1898 # autoindent management should be done here, and not in the
1881 1899 # interactive loop, since that one is only seen by keyboard input. We
1882 1900 # need this done correctly even for code run via runlines (which uses
1883 1901 # push).
1884 1902
1885 1903 #print 'push line: <%s>' % line # dbg
1886 1904 for subline in line.splitlines():
1887 1905 self.autoindent_update(subline)
1888 1906 self.buffer.append(line)
1889 1907 more = self.runsource('\n'.join(self.buffer), self.filename)
1890 1908 if not more:
1891 1909 self.resetbuffer()
1892 1910 return more
1893 1911
1894 1912 def resetbuffer(self):
1895 1913 """Reset the input buffer."""
1896 1914 self.buffer[:] = []
1897 1915
1898 1916 def raw_input(self,prompt='',continue_prompt=False):
1899 1917 """Write a prompt and read a line.
1900 1918
1901 1919 The returned line does not include the trailing newline.
1902 1920 When the user enters the EOF key sequence, EOFError is raised.
1903 1921
1904 1922 Optional inputs:
1905 1923
1906 1924 - prompt(''): a string to be printed to prompt the user.
1907 1925
1908 1926 - continue_prompt(False): whether this line is the first one or a
1909 1927 continuation in a sequence of inputs.
1910 1928 """
1911 1929
1912 1930 try:
1913 1931 line = raw_input_original(prompt)
1914 1932 except ValueError:
1915 1933 warn("\n********\nYou or a %run:ed script called sys.stdin.close() or sys.stdout.close()!\nExiting IPython!")
1916 1934 self.exit_now = True
1917 1935 return ""
1918 1936
1919 1937
1920 1938 # Try to be reasonably smart about not re-indenting pasted input more
1921 1939 # than necessary. We do this by trimming out the auto-indent initial
1922 1940 # spaces, if the user's actual input started itself with whitespace.
1923 1941 #debugx('self.buffer[-1]')
1924 1942
1925 1943 if self.autoindent:
1926 1944 if num_ini_spaces(line) > self.indent_current_nsp:
1927 1945 line = line[self.indent_current_nsp:]
1928 1946 self.indent_current_nsp = 0
1929 1947
1930 1948 # store the unfiltered input before the user has any chance to modify
1931 1949 # it.
1932 1950 if line.strip():
1933 1951 if continue_prompt:
1934 1952 self.input_hist_raw[-1] += '%s\n' % line
1935 1953 if self.has_readline: # and some config option is set?
1936 1954 try:
1937 1955 histlen = self.readline.get_current_history_length()
1938 1956 newhist = self.input_hist_raw[-1].rstrip()
1939 1957 self.readline.remove_history_item(histlen-1)
1940 1958 self.readline.replace_history_item(histlen-2,newhist)
1941 1959 except AttributeError:
1942 1960 pass # re{move,place}_history_item are new in 2.4.
1943 1961 else:
1944 1962 self.input_hist_raw.append('%s\n' % line)
1945 1963
1946 1964 try:
1947 1965 lineout = self.prefilter(line,continue_prompt)
1948 1966 except:
1949 1967 # blanket except, in case a user-defined prefilter crashes, so it
1950 1968 # can't take all of ipython with it.
1951 1969 self.showtraceback()
1952 1970 return ''
1953 1971 else:
1954 1972 return lineout
1955 1973
1956 1974 def split_user_input(self,line):
1957 1975 """Split user input into pre-char, function part and rest."""
1958 1976
1959 1977 lsplit = self.line_split.match(line)
1960 1978 if lsplit is None: # no regexp match returns None
1961 1979 try:
1962 1980 iFun,theRest = line.split(None,1)
1963 1981 except ValueError:
1964 1982 iFun,theRest = line,''
1965 1983 pre = re.match('^(\s*)(.*)',line).groups()[0]
1966 1984 else:
1967 1985 pre,iFun,theRest = lsplit.groups()
1968 1986
1969 1987 #print 'line:<%s>' % line # dbg
1970 1988 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun.strip(),theRest) # dbg
1971 1989 return pre,iFun.strip(),theRest
1972 1990
1973 1991 def _prefilter(self, line, continue_prompt):
1974 1992 """Calls different preprocessors, depending on the form of line."""
1975 1993
1976 1994 # All handlers *must* return a value, even if it's blank ('').
1977 1995
1978 1996 # Lines are NOT logged here. Handlers should process the line as
1979 1997 # needed, update the cache AND log it (so that the input cache array
1980 1998 # stays synced).
1981 1999
1982 2000 # This function is _very_ delicate, and since it's also the one which
1983 2001 # determines IPython's response to user input, it must be as efficient
1984 2002 # as possible. For this reason it has _many_ returns in it, trying
1985 2003 # always to exit as quickly as it can figure out what it needs to do.
1986 2004
1987 2005 # This function is the main responsible for maintaining IPython's
1988 2006 # behavior respectful of Python's semantics. So be _very_ careful if
1989 2007 # making changes to anything here.
1990 2008
1991 2009 #.....................................................................
1992 2010 # Code begins
1993 2011
1994 2012 #if line.startswith('%crash'): raise RuntimeError,'Crash now!' # dbg
1995 2013
1996 2014 # save the line away in case we crash, so the post-mortem handler can
1997 2015 # record it
1998 2016 self._last_input_line = line
1999 2017
2000 2018 #print '***line: <%s>' % line # dbg
2001 2019
2002 2020 # the input history needs to track even empty lines
2003 2021 stripped = line.strip()
2004 2022
2005 2023 if not stripped:
2006 2024 if not continue_prompt:
2007 2025 self.outputcache.prompt_count -= 1
2008 2026 return self.handle_normal(line,continue_prompt)
2009 2027 #return self.handle_normal('',continue_prompt)
2010 2028
2011 2029 # print '***cont',continue_prompt # dbg
2012 2030 # special handlers are only allowed for single line statements
2013 2031 if continue_prompt and not self.rc.multi_line_specials:
2014 2032 return self.handle_normal(line,continue_prompt)
2015 2033
2016 2034
2017 2035 # For the rest, we need the structure of the input
2018 2036 pre,iFun,theRest = self.split_user_input(line)
2019 2037
2020 2038 # See whether any pre-existing handler can take care of it
2021 2039
2022 2040 rewritten = self.hooks.input_prefilter(stripped)
2023 2041 if rewritten != stripped: # ok, some prefilter did something
2024 2042 rewritten = pre + rewritten # add indentation
2025 2043 return self.handle_normal(rewritten)
2026 2044
2027 2045 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2028 2046
2029 2047 # First check for explicit escapes in the last/first character
2030 2048 handler = None
2031 2049 if line[-1] == self.ESC_HELP:
2032 2050 handler = self.esc_handlers.get(line[-1]) # the ? can be at the end
2033 2051 if handler is None:
2034 2052 # look at the first character of iFun, NOT of line, so we skip
2035 2053 # leading whitespace in multiline input
2036 2054 handler = self.esc_handlers.get(iFun[0:1])
2037 2055 if handler is not None:
2038 2056 return handler(line,continue_prompt,pre,iFun,theRest)
2039 2057 # Emacs ipython-mode tags certain input lines
2040 2058 if line.endswith('# PYTHON-MODE'):
2041 2059 return self.handle_emacs(line,continue_prompt)
2042 2060
2043 2061 # Next, check if we can automatically execute this thing
2044 2062
2045 2063 # Allow ! in multi-line statements if multi_line_specials is on:
2046 2064 if continue_prompt and self.rc.multi_line_specials and \
2047 2065 iFun.startswith(self.ESC_SHELL):
2048 2066 return self.handle_shell_escape(line,continue_prompt,
2049 2067 pre=pre,iFun=iFun,
2050 2068 theRest=theRest)
2051 2069
2052 2070 # Let's try to find if the input line is a magic fn
2053 2071 oinfo = None
2054 2072 if hasattr(self,'magic_'+iFun):
2055 2073 # WARNING: _ofind uses getattr(), so it can consume generators and
2056 2074 # cause other side effects.
2057 2075 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2058 2076 if oinfo['ismagic']:
2059 2077 # Be careful not to call magics when a variable assignment is
2060 2078 # being made (ls='hi', for example)
2061 2079 if self.rc.automagic and \
2062 2080 (len(theRest)==0 or theRest[0] not in '!=()<>,') and \
2063 2081 (self.rc.multi_line_specials or not continue_prompt):
2064 2082 return self.handle_magic(line,continue_prompt,
2065 2083 pre,iFun,theRest)
2066 2084 else:
2067 2085 return self.handle_normal(line,continue_prompt)
2068 2086
2069 2087 # If the rest of the line begins with an (in)equality, assginment or
2070 2088 # function call, we should not call _ofind but simply execute it.
2071 2089 # This avoids spurious geattr() accesses on objects upon assignment.
2072 2090 #
2073 2091 # It also allows users to assign to either alias or magic names true
2074 2092 # python variables (the magic/alias systems always take second seat to
2075 2093 # true python code).
2076 2094 if theRest and theRest[0] in '!=()':
2077 2095 return self.handle_normal(line,continue_prompt)
2078 2096
2079 2097 if oinfo is None:
2080 2098 # let's try to ensure that _oinfo is ONLY called when autocall is
2081 2099 # on. Since it has inevitable potential side effects, at least
2082 2100 # having autocall off should be a guarantee to the user that no
2083 2101 # weird things will happen.
2084 2102
2085 2103 if self.rc.autocall:
2086 2104 oinfo = self._ofind(iFun) # FIXME - _ofind is part of Magic
2087 2105 else:
2088 2106 # in this case, all that's left is either an alias or
2089 2107 # processing the line normally.
2090 2108 if iFun in self.alias_table:
2091 2109 # if autocall is off, by not running _ofind we won't know
2092 2110 # whether the given name may also exist in one of the
2093 2111 # user's namespace. At this point, it's best to do a
2094 2112 # quick check just to be sure that we don't let aliases
2095 2113 # shadow variables.
2096 2114 head = iFun.split('.',1)[0]
2097 2115 if head in self.user_ns or head in self.internal_ns \
2098 2116 or head in __builtin__.__dict__:
2099 2117 return self.handle_normal(line,continue_prompt)
2100 2118 else:
2101 2119 return self.handle_alias(line,continue_prompt,
2102 2120 pre,iFun,theRest)
2103 2121
2104 2122 else:
2105 2123 return self.handle_normal(line,continue_prompt)
2106 2124
2107 2125 if not oinfo['found']:
2108 2126 return self.handle_normal(line,continue_prompt)
2109 2127 else:
2110 2128 #print 'pre<%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2111 2129 if oinfo['isalias']:
2112 2130 return self.handle_alias(line,continue_prompt,
2113 2131 pre,iFun,theRest)
2114 2132
2115 2133 if (self.rc.autocall
2116 2134 and
2117 2135 (
2118 2136 #only consider exclusion re if not "," or ";" autoquoting
2119 2137 (pre == self.ESC_QUOTE or pre == self.ESC_QUOTE2
2120 2138 or pre == self.ESC_PAREN) or
2121 2139 (not self.re_exclude_auto.match(theRest)))
2122 2140 and
2123 2141 self.re_fun_name.match(iFun) and
2124 2142 callable(oinfo['obj'])) :
2125 2143 #print 'going auto' # dbg
2126 2144 return self.handle_auto(line,continue_prompt,
2127 2145 pre,iFun,theRest,oinfo['obj'])
2128 2146 else:
2129 2147 #print 'was callable?', callable(oinfo['obj']) # dbg
2130 2148 return self.handle_normal(line,continue_prompt)
2131 2149
2132 2150 # If we get here, we have a normal Python line. Log and return.
2133 2151 return self.handle_normal(line,continue_prompt)
2134 2152
2135 2153 def _prefilter_dumb(self, line, continue_prompt):
2136 2154 """simple prefilter function, for debugging"""
2137 2155 return self.handle_normal(line,continue_prompt)
2138 2156
2139 2157
2140 2158 def multiline_prefilter(self, line, continue_prompt):
2141 2159 """ Run _prefilter for each line of input
2142 2160
2143 2161 Covers cases where there are multiple lines in the user entry,
2144 2162 which is the case when the user goes back to a multiline history
2145 2163 entry and presses enter.
2146 2164
2147 2165 """
2148 2166 out = []
2149 2167 for l in line.rstrip('\n').split('\n'):
2150 2168 out.append(self._prefilter(l, continue_prompt))
2151 2169 return '\n'.join(out)
2152 2170
2153 2171 # Set the default prefilter() function (this can be user-overridden)
2154 2172 prefilter = multiline_prefilter
2155 2173
2156 2174 def handle_normal(self,line,continue_prompt=None,
2157 2175 pre=None,iFun=None,theRest=None):
2158 2176 """Handle normal input lines. Use as a template for handlers."""
2159 2177
2160 2178 # With autoindent on, we need some way to exit the input loop, and I
2161 2179 # don't want to force the user to have to backspace all the way to
2162 2180 # clear the line. The rule will be in this case, that either two
2163 2181 # lines of pure whitespace in a row, or a line of pure whitespace but
2164 2182 # of a size different to the indent level, will exit the input loop.
2165 2183
2166 2184 if (continue_prompt and self.autoindent and line.isspace() and
2167 2185 (0 < abs(len(line) - self.indent_current_nsp) <= 2 or
2168 2186 (self.buffer[-1]).isspace() )):
2169 2187 line = ''
2170 2188
2171 2189 self.log(line,line,continue_prompt)
2172 2190 return line
2173 2191
2174 2192 def handle_alias(self,line,continue_prompt=None,
2175 2193 pre=None,iFun=None,theRest=None):
2176 2194 """Handle alias input lines. """
2177 2195
2178 2196 # pre is needed, because it carries the leading whitespace. Otherwise
2179 2197 # aliases won't work in indented sections.
2180 2198 transformed = self.expand_aliases(iFun, theRest)
2181 2199 line_out = '%s_ip.system(%s)' % (pre, make_quoted_expr( transformed ))
2182 2200 self.log(line,line_out,continue_prompt)
2183 2201 #print 'line out:',line_out # dbg
2184 2202 return line_out
2185 2203
2186 2204 def handle_shell_escape(self, line, continue_prompt=None,
2187 2205 pre=None,iFun=None,theRest=None):
2188 2206 """Execute the line in a shell, empty return value"""
2189 2207
2190 2208 #print 'line in :', `line` # dbg
2191 2209 # Example of a special handler. Others follow a similar pattern.
2192 2210 if line.lstrip().startswith('!!'):
2193 2211 # rewrite iFun/theRest to properly hold the call to %sx and
2194 2212 # the actual command to be executed, so handle_magic can work
2195 2213 # correctly
2196 2214 theRest = '%s %s' % (iFun[2:],theRest)
2197 2215 iFun = 'sx'
2198 2216 return self.handle_magic('%ssx %s' % (self.ESC_MAGIC,
2199 2217 line.lstrip()[2:]),
2200 2218 continue_prompt,pre,iFun,theRest)
2201 2219 else:
2202 2220 cmd=line.lstrip().lstrip('!')
2203 2221 line_out = '%s_ip.system(%s)' % (pre,make_quoted_expr(cmd))
2204 2222 # update cache/log and return
2205 2223 self.log(line,line_out,continue_prompt)
2206 2224 return line_out
2207 2225
2208 2226 def handle_magic(self, line, continue_prompt=None,
2209 2227 pre=None,iFun=None,theRest=None):
2210 2228 """Execute magic functions."""
2211 2229
2212 2230
2213 2231 cmd = '%s_ip.magic(%s)' % (pre,make_quoted_expr(iFun + " " + theRest))
2214 2232 self.log(line,cmd,continue_prompt)
2215 2233 #print 'in handle_magic, cmd=<%s>' % cmd # dbg
2216 2234 return cmd
2217 2235
2218 2236 def handle_auto(self, line, continue_prompt=None,
2219 2237 pre=None,iFun=None,theRest=None,obj=None):
2220 2238 """Hande lines which can be auto-executed, quoting if requested."""
2221 2239
2222 2240 #print 'pre <%s> iFun <%s> rest <%s>' % (pre,iFun,theRest) # dbg
2223 2241
2224 2242 # This should only be active for single-line input!
2225 2243 if continue_prompt:
2226 2244 self.log(line,line,continue_prompt)
2227 2245 return line
2228 2246
2229 2247 auto_rewrite = True
2230 2248
2231 2249 if pre == self.ESC_QUOTE:
2232 2250 # Auto-quote splitting on whitespace
2233 2251 newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split()) )
2234 2252 elif pre == self.ESC_QUOTE2:
2235 2253 # Auto-quote whole string
2236 2254 newcmd = '%s("%s")' % (iFun,theRest)
2237 2255 elif pre == self.ESC_PAREN:
2238 2256 newcmd = '%s(%s)' % (iFun,",".join(theRest.split()))
2239 2257 else:
2240 2258 # Auto-paren.
2241 2259 # We only apply it to argument-less calls if the autocall
2242 2260 # parameter is set to 2. We only need to check that autocall is <
2243 2261 # 2, since this function isn't called unless it's at least 1.
2244 2262 if not theRest and (self.rc.autocall < 2):
2245 2263 newcmd = '%s %s' % (iFun,theRest)
2246 2264 auto_rewrite = False
2247 2265 else:
2248 2266 if theRest.startswith('['):
2249 2267 if hasattr(obj,'__getitem__'):
2250 2268 # Don't autocall in this case: item access for an object
2251 2269 # which is BOTH callable and implements __getitem__.
2252 2270 newcmd = '%s %s' % (iFun,theRest)
2253 2271 auto_rewrite = False
2254 2272 else:
2255 2273 # if the object doesn't support [] access, go ahead and
2256 2274 # autocall
2257 2275 newcmd = '%s(%s)' % (iFun.rstrip(),theRest)
2258 2276 elif theRest.endswith(';'):
2259 2277 newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1])
2260 2278 else:
2261 2279 newcmd = '%s(%s)' % (iFun.rstrip(), theRest)
2262 2280
2263 2281 if auto_rewrite:
2264 2282 print >>Term.cout, self.outputcache.prompt1.auto_rewrite() + newcmd
2265 2283 # log what is now valid Python, not the actual user input (without the
2266 2284 # final newline)
2267 2285 self.log(line,newcmd,continue_prompt)
2268 2286 return newcmd
2269 2287
2270 2288 def handle_help(self, line, continue_prompt=None,
2271 2289 pre=None,iFun=None,theRest=None):
2272 2290 """Try to get some help for the object.
2273 2291
2274 2292 obj? or ?obj -> basic information.
2275 2293 obj?? or ??obj -> more details.
2276 2294 """
2277 2295
2278 2296 # We need to make sure that we don't process lines which would be
2279 2297 # otherwise valid python, such as "x=1 # what?"
2280 2298 try:
2281 2299 codeop.compile_command(line)
2282 2300 except SyntaxError:
2283 2301 # We should only handle as help stuff which is NOT valid syntax
2284 2302 if line[0]==self.ESC_HELP:
2285 2303 line = line[1:]
2286 2304 elif line[-1]==self.ESC_HELP:
2287 2305 line = line[:-1]
2288 2306 self.log(line,'#?'+line,continue_prompt)
2289 2307 if line:
2290 2308 self.magic_pinfo(line)
2291 2309 else:
2292 2310 page(self.usage,screen_lines=self.rc.screen_length)
2293 2311 return '' # Empty string is needed here!
2294 2312 except:
2295 2313 # Pass any other exceptions through to the normal handler
2296 2314 return self.handle_normal(line,continue_prompt)
2297 2315 else:
2298 2316 # If the code compiles ok, we should handle it normally
2299 2317 return self.handle_normal(line,continue_prompt)
2300 2318
2301 2319 def getapi(self):
2302 2320 """ Get an IPApi object for this shell instance
2303 2321
2304 2322 Getting an IPApi object is always preferable to accessing the shell
2305 2323 directly, but this holds true especially for extensions.
2306 2324
2307 2325 It should always be possible to implement an extension with IPApi
2308 2326 alone. If not, contact maintainer to request an addition.
2309 2327
2310 2328 """
2311 2329 return self.api
2312 2330
2313 2331 def handle_emacs(self,line,continue_prompt=None,
2314 2332 pre=None,iFun=None,theRest=None):
2315 2333 """Handle input lines marked by python-mode."""
2316 2334
2317 2335 # Currently, nothing is done. Later more functionality can be added
2318 2336 # here if needed.
2319 2337
2320 2338 # The input cache shouldn't be updated
2321 2339
2322 2340 return line
2323 2341
2324 2342 def mktempfile(self,data=None):
2325 2343 """Make a new tempfile and return its filename.
2326 2344
2327 2345 This makes a call to tempfile.mktemp, but it registers the created
2328 2346 filename internally so ipython cleans it up at exit time.
2329 2347
2330 2348 Optional inputs:
2331 2349
2332 2350 - data(None): if data is given, it gets written out to the temp file
2333 2351 immediately, and the file is closed again."""
2334 2352
2335 2353 filename = tempfile.mktemp('.py','ipython_edit_')
2336 2354 self.tempfiles.append(filename)
2337 2355
2338 2356 if data:
2339 2357 tmp_file = open(filename,'w')
2340 2358 tmp_file.write(data)
2341 2359 tmp_file.close()
2342 2360 return filename
2343 2361
2344 2362 def write(self,data):
2345 2363 """Write a string to the default output"""
2346 2364 Term.cout.write(data)
2347 2365
2348 2366 def write_err(self,data):
2349 2367 """Write a string to the default error output"""
2350 2368 Term.cerr.write(data)
2351 2369
2352 2370 def exit(self):
2353 2371 """Handle interactive exit.
2354 2372
2355 2373 This method sets the exit_now attribute."""
2356 2374
2357 2375 if self.rc.confirm_exit:
2358 2376 if self.ask_yes_no('Do you really want to exit ([y]/n)?','y'):
2359 2377 self.exit_now = True
2360 2378 else:
2361 2379 self.exit_now = True
2362 2380
2363 2381 def safe_execfile(self,fname,*where,**kw):
2364 2382 fname = os.path.expanduser(fname)
2365 2383
2366 2384 # find things also in current directory
2367 2385 dname = os.path.dirname(fname)
2368 2386 if not sys.path.count(dname):
2369 2387 sys.path.append(dname)
2370 2388
2371 2389 try:
2372 2390 xfile = open(fname)
2373 2391 except:
2374 2392 print >> Term.cerr, \
2375 2393 'Could not open file <%s> for safe execution.' % fname
2376 2394 return None
2377 2395
2378 2396 kw.setdefault('islog',0)
2379 2397 kw.setdefault('quiet',1)
2380 2398 kw.setdefault('exit_ignore',0)
2381 2399 first = xfile.readline()
2382 2400 loghead = str(self.loghead_tpl).split('\n',1)[0].strip()
2383 2401 xfile.close()
2384 2402 # line by line execution
2385 2403 if first.startswith(loghead) or kw['islog']:
2386 2404 print 'Loading log file <%s> one line at a time...' % fname
2387 2405 if kw['quiet']:
2388 2406 stdout_save = sys.stdout
2389 2407 sys.stdout = StringIO.StringIO()
2390 2408 try:
2391 2409 globs,locs = where[0:2]
2392 2410 except:
2393 2411 try:
2394 2412 globs = locs = where[0]
2395 2413 except:
2396 2414 globs = locs = globals()
2397 2415 badblocks = []
2398 2416
2399 2417 # we also need to identify indented blocks of code when replaying
2400 2418 # logs and put them together before passing them to an exec
2401 2419 # statement. This takes a bit of regexp and look-ahead work in the
2402 2420 # file. It's easiest if we swallow the whole thing in memory
2403 2421 # first, and manually walk through the lines list moving the
2404 2422 # counter ourselves.
2405 2423 indent_re = re.compile('\s+\S')
2406 2424 xfile = open(fname)
2407 2425 filelines = xfile.readlines()
2408 2426 xfile.close()
2409 2427 nlines = len(filelines)
2410 2428 lnum = 0
2411 2429 while lnum < nlines:
2412 2430 line = filelines[lnum]
2413 2431 lnum += 1
2414 2432 # don't re-insert logger status info into cache
2415 2433 if line.startswith('#log#'):
2416 2434 continue
2417 2435 else:
2418 2436 # build a block of code (maybe a single line) for execution
2419 2437 block = line
2420 2438 try:
2421 2439 next = filelines[lnum] # lnum has already incremented
2422 2440 except:
2423 2441 next = None
2424 2442 while next and indent_re.match(next):
2425 2443 block += next
2426 2444 lnum += 1
2427 2445 try:
2428 2446 next = filelines[lnum]
2429 2447 except:
2430 2448 next = None
2431 2449 # now execute the block of one or more lines
2432 2450 try:
2433 2451 exec block in globs,locs
2434 2452 except SystemExit:
2435 2453 pass
2436 2454 except:
2437 2455 badblocks.append(block.rstrip())
2438 2456 if kw['quiet']: # restore stdout
2439 2457 sys.stdout.close()
2440 2458 sys.stdout = stdout_save
2441 2459 print 'Finished replaying log file <%s>' % fname
2442 2460 if badblocks:
2443 2461 print >> sys.stderr, ('\nThe following lines/blocks in file '
2444 2462 '<%s> reported errors:' % fname)
2445 2463
2446 2464 for badline in badblocks:
2447 2465 print >> sys.stderr, badline
2448 2466 else: # regular file execution
2449 2467 try:
2450 2468 execfile(fname,*where)
2451 2469 except SyntaxError:
2452 2470 self.showsyntaxerror()
2453 2471 warn('Failure executing file: <%s>' % fname)
2454 2472 except SystemExit,status:
2455 2473 if not kw['exit_ignore']:
2456 2474 self.showtraceback()
2457 2475 warn('Failure executing file: <%s>' % fname)
2458 2476 except:
2459 2477 self.showtraceback()
2460 2478 warn('Failure executing file: <%s>' % fname)
2461 2479
2462 2480 #************************* end of file <iplib.py> *****************************
@@ -1,5868 +1,5872 b''
1 1 2006-11-02 Ville Vainio <vivainio@gmail.com>
2 2
3 3 * ipy_stock_completers.py: Add %run and %cd completers.
4 4
5 5 * completer.py: Try running custom completer for both
6 6 "foo" and "%foo" if the command is just "foo". Ignore case
7 7 when filtering possible completions.
8 8
9 9 * UserConfig/ipy_user_conf.py: install stock completers as default
10 10
11 * iplib.py (history_saving_wrapper), debugger(), ipy_pydb.py:
12 simplified readline history save / restore through a wrapper
13 function
14
11 15
12 16 2006-10-31 Ville Vainio <vivainio@gmail.com>
13 17
14 18 * strdispatch.py, completer.py, ipy_stock_completers.py:
15 19 Allow str_key ("command") in completer hooks. Implement
16 20 trivial completer for 'import' (stdlib modules only). Rename
17 21 ipy_linux_package_managers.py to ipy_stock_completers.py.
18 22 SVN completer.
19 23
20 24 * Extensions/ledit.py: %magic line editor for easily and
21 25 incrementally manipulating lists of strings. The magic command
22 26 name is %led.
23 27
24 28 2006-10-30 Ville Vainio <vivainio@gmail.com>
25 29
26 30 * Debugger.py, iplib.py (debugger()): Add last set of Rocky
27 31 Bernsteins's patches for pydb integration.
28 32 http://bashdb.sourceforge.net/pydb/
29 33
30 34 * strdispatch.py, iplib.py, completer.py, IPython/__init__.py,
31 35 Extensions/ipy_linux_package_managers.py, hooks.py: Implement
32 36 custom completer hook to allow the users to implement their own
33 37 completers. See ipy_linux_package_managers.py for example. The
34 38 hook name is 'complete_command'.
35 39
36 40 2006-10-28 Fernando Perez <Fernando.Perez@colorado.edu>
37 41
38 42 * IPython/UserConfig/ipythonrc-scipy: minor clenaups to remove old
39 43 Numeric leftovers.
40 44
41 45 * ipython.el (py-execute-region): apply Stefan's patch to fix
42 46 garbled results if the python shell hasn't been previously started.
43 47
44 48 * IPython/genutils.py (arg_split): moved to genutils, since it's a
45 49 pretty generic function and useful for other things.
46 50
47 51 * IPython/OInspect.py (getsource): Add customizable source
48 52 extractor. After a request/patch form W. Stein (SAGE).
49 53
50 54 * IPython/irunner.py (InteractiveRunner.run_source): reset tty
51 55 window size to a more reasonable value from what pexpect does,
52 56 since their choice causes wrapping bugs with long input lines.
53 57
54 58 2006-10-28 Ville Vainio <vivainio@gmail.com>
55 59
56 60 * Magic.py (%run): Save and restore the readline history from
57 61 file around %run commands to prevent side effects from
58 62 %runned programs that might use readline (e.g. pydb).
59 63
60 64 * extensions/ipy_pydb.py: Adds %pydb magic when imported, for
61 65 invoking the pydb enhanced debugger.
62 66
63 67 2006-10-23 Walter Doerwald <walter@livinglogic.de>
64 68
65 69 * IPython/Extensions/ipipe.py (ifile): Remove all methods that
66 70 call the base class method and propagate the return value to
67 71 ifile. This is now done by path itself.
68 72
69 73 2006-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
70 74
71 75 * IPython/ipapi.py (IPApi.__init__): Added new entry to public
72 76 api: set_crash_handler(), to expose the ability to change the
73 77 internal crash handler.
74 78
75 79 * IPython/CrashHandler.py (CrashHandler.__init__): abstract out
76 80 the various parameters of the crash handler so that apps using
77 81 IPython as their engine can customize crash handling. Ipmlemented
78 82 at the request of SAGE.
79 83
80 84 2006-10-14 Ville Vainio <vivainio@gmail.com>
81 85
82 86 * Magic.py, ipython.el: applied first "safe" part of Rocky
83 87 Bernstein's patch set for pydb integration.
84 88
85 89 * Magic.py (%unalias, %alias): %store'd aliases can now be
86 90 removed with '%unalias'. %alias w/o args now shows most
87 91 interesting (stored / manually defined) aliases last
88 92 where they catch the eye w/o scrolling.
89 93
90 94 * Magic.py (%rehashx), ext_rehashdir.py: files with
91 95 'py' extension are always considered executable, even
92 96 when not in PATHEXT environment variable.
93 97
94 98 2006-10-12 Ville Vainio <vivainio@gmail.com>
95 99
96 100 * jobctrl.py: Add new "jobctrl" extension for spawning background
97 101 processes with "&find /". 'import jobctrl' to try it out. Requires
98 102 'subprocess' module, standard in python 2.4+.
99 103
100 104 * iplib.py (expand_aliases, handle_alias): Aliases expand transitively,
101 105 so if foo -> bar and bar -> baz, then foo -> baz.
102 106
103 107 2006-10-09 Fernando Perez <Fernando.Perez@colorado.edu>
104 108
105 109 * IPython/Magic.py (Magic.parse_options): add a new posix option
106 110 to allow parsing of input args in magics that doesn't strip quotes
107 111 (if posix=False). This also closes %timeit bug reported by
108 112 Stefan.
109 113
110 114 2006-10-03 Ville Vainio <vivainio@gmail.com>
111 115
112 116 * iplib.py (raw_input, interact): Return ValueError catching for
113 117 raw_input. Fixes infinite loop for sys.stdin.close() or
114 118 sys.stdout.close().
115 119
116 120 2006-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
117 121
118 122 * IPython/irunner.py (InteractiveRunner.run_source): small fixes
119 123 to help in handling doctests. irunner is now pretty useful for
120 124 running standalone scripts and simulate a full interactive session
121 125 in a format that can be then pasted as a doctest.
122 126
123 127 * IPython/iplib.py (InteractiveShell.__init__): Install exit/quit
124 128 on top of the default (useless) ones. This also fixes the nasty
125 129 way in which 2.5's Quitter() exits (reverted [1785]).
126 130
127 131 * IPython/Debugger.py (Pdb.__init__): Fix ipdb to work with python
128 132 2.5.
129 133
130 134 * IPython/ultraTB.py (TBTools.set_colors): Make sure that ipdb
131 135 color scheme is updated as well when color scheme is changed
132 136 interactively.
133 137
134 138 2006-09-27 Ville Vainio <vivainio@gmail.com>
135 139
136 140 * iplib.py (raw_input): python 2.5 closes stdin on quit -> avoid
137 141 infinite loop and just exit. It's a hack, but will do for a while.
138 142
139 143 2006-08-25 Walter Doerwald <walter@livinglogic.de>
140 144
141 145 * IPython/Extensions/ipipe.py (ils): Add arguments dirs and files to
142 146 the constructor, this makes it possible to get a list of only directories
143 147 or only files.
144 148
145 149 2006-08-12 Ville Vainio <vivainio@gmail.com>
146 150
147 151 * Fakemodule.py, OInspect.py: Reverted 2006-08-11 mods,
148 152 they broke unittest
149 153
150 154 2006-08-11 Ville Vainio <vivainio@gmail.com>
151 155
152 156 * Fakemodule.py, OInspect.py: remove 2006-08-09 monkepatch
153 157 by resolving issue properly, i.e. by inheriting FakeModule
154 158 from types.ModuleType. Pickling ipython interactive data
155 159 should still work as usual (testing appreciated).
156 160
157 161 2006-08-09 Fernando Perez <Fernando.Perez@colorado.edu>
158 162
159 163 * IPython/OInspect.py: monkeypatch inspect from the stdlib if
160 164 running under python 2.3 with code from 2.4 to fix a bug with
161 165 help(). Reported by the Debian maintainers, Norbert Tretkowski
162 166 <norbert-AT-tretkowski.de> and Alexandre Fayolle
163 167 <afayolle-AT-debian.org>.
164 168
165 169 2006-08-04 Walter Doerwald <walter@livinglogic.de>
166 170
167 171 * IPython/Extensions/ibrowse.py: Fixed the help message in the footer
168 172 (which was displaying "quit" twice).
169 173
170 174 2006-07-28 Walter Doerwald <walter@livinglogic.de>
171 175
172 176 * IPython/Extensions/ipipe.py: Fix isort.__iter__() (was still using
173 177 the mode argument).
174 178
175 179 2006-07-27 Walter Doerwald <walter@livinglogic.de>
176 180
177 181 * IPython/Extensions/ipipe.py: Fix getglobals() if we're
178 182 not running under IPython.
179 183
180 184 * IPython/Extensions/ipipe.py: Rename XAttr to AttributeDetail
181 185 and make it iterable (iterating over the attribute itself). Add two new
182 186 magic strings for __xattrs__(): If the string starts with "-", the attribute
183 187 will not be displayed in ibrowse's detail view (but it can still be
184 188 iterated over). This makes it possible to add attributes that are large
185 189 lists or generator methods to the detail view. Replace magic attribute names
186 190 and _attrname() and _getattr() with "descriptors": For each type of magic
187 191 attribute name there's a subclass of Descriptor: None -> SelfDescriptor();
188 192 "foo" -> AttributeDescriptor("foo"); "foo()" -> MethodDescriptor("foo");
189 193 "-foo" -> IterAttributeDescriptor("foo"); "-foo()" -> IterMethodDescriptor("foo");
190 194 foo() -> FunctionDescriptor(foo). Magic strings returned from __xattrs__()
191 195 are still supported.
192 196
193 197 * IPython/Extensions/ibrowse.py: If fetching the next row from the input
194 198 fails in ibrowse.fetch(), the exception object is added as the last item
195 199 and item fetching is canceled. This prevents ibrowse from aborting if e.g.
196 200 a generator throws an exception midway through execution.
197 201
198 202 * IPython/Extensions/ipipe.py: Turn ifile's properties mimetype and
199 203 encoding into methods.
200 204
201 205 2006-07-26 Ville Vainio <vivainio@gmail.com>
202 206
203 207 * iplib.py: history now stores multiline input as single
204 208 history entries. Patch by Jorgen Cederlof.
205 209
206 210 2006-07-18 Walter Doerwald <walter@livinglogic.de>
207 211
208 212 * IPython/Extensions/ibrowse.py: Make cursor visible over
209 213 non existing attributes.
210 214
211 215 2006-07-14 Walter Doerwald <walter@livinglogic.de>
212 216
213 217 * IPython/Extensions/ipipe.py (ix): Use os.popen4() so that the
214 218 error output of the running command doesn't mess up the screen.
215 219
216 220 2006-07-13 Walter Doerwald <walter@livinglogic.de>
217 221
218 222 * IPython/Extensions/ipipe.py (isort): Make isort usable without
219 223 argument. This sorts the items themselves.
220 224
221 225 2006-07-12 Walter Doerwald <walter@livinglogic.de>
222 226
223 227 * IPython/Extensions/ipipe.py (eval, ifilter, isort, ieval):
224 228 Compile expression strings into code objects. This should speed
225 229 up ifilter and friends somewhat.
226 230
227 231 2006-07-08 Ville Vainio <vivainio@gmail.com>
228 232
229 233 * Magic.py: %cpaste now strips > from the beginning of lines
230 234 to ease pasting quoted code from emails. Contributed by
231 235 Stefan van der Walt.
232 236
233 237 2006-06-29 Ville Vainio <vivainio@gmail.com>
234 238
235 239 * ipmaker.py, Shell.py: qt4agg matplotlib backend support for pylab
236 240 mode, patch contributed by Darren Dale. NEEDS TESTING!
237 241
238 242 2006-06-28 Walter Doerwald <walter@livinglogic.de>
239 243
240 244 * IPython/Extensions/ibrowse.py: Give the ibrowse cursor row
241 245 a blue background. Fix fetching new display rows when the browser
242 246 scrolls more than a screenful (e.g. by using the goto command).
243 247
244 248 2006-06-27 Ville Vainio <vivainio@gmail.com>
245 249
246 250 * Magic.py (_inspect, _ofind) Apply David Huard's
247 251 patch for displaying the correct docstring for 'property'
248 252 attributes.
249 253
250 254 2006-06-23 Walter Doerwald <walter@livinglogic.de>
251 255
252 256 * IPython/Extensions/ibrowse.py: Put the documentation of the keyboard
253 257 commands into the methods implementing them.
254 258
255 259 2006-06-22 Fernando Perez <Fernando.Perez@colorado.edu>
256 260
257 261 * ipython.el (ipython-indentation-hook): cleanup patch, submitted
258 262 by Kov Chai <tchaikov-AT-gmail.com>. He notes that the original
259 263 autoindent support was authored by Jin Liu.
260 264
261 265 2006-06-22 Walter Doerwald <walter@livinglogic.de>
262 266
263 267 * IPython/Extensions/ibrowse.py: Replace the plain dictionaries used
264 268 for keymaps with a custom class that simplifies handling.
265 269
266 270 2006-06-19 Walter Doerwald <walter@livinglogic.de>
267 271
268 272 * IPython/Extensions/ibrowse.py: ibrowse now properly handles terminal
269 273 resizing. This requires Python 2.5 to work.
270 274
271 275 2006-06-16 Walter Doerwald <walter@livinglogic.de>
272 276
273 277 * IPython/Extensions/ibrowse.py: Add two new commands to
274 278 ibrowse: "hideattr" (mapped to "h") hides the attribute under
275 279 the cursor. "unhiderattrs" (mapped to "H") reveals all hidden
276 280 attributes again. Remapped the help command to "?". Display
277 281 keycodes in the range 0x01-0x1F as CTRL-xx. Add CTRL-a and CTRL-e
278 282 as keys for the "home" and "end" commands. Add three new commands
279 283 to the input mode for "find" and friends: "delend" (CTRL-K)
280 284 deletes to the end of line. "incsearchup" searches upwards in the
281 285 command history for an input that starts with the text before the cursor.
282 286 "incsearchdown" does the same downwards. Removed a bogus mapping of
283 287 the x key to "delete".
284 288
285 289 2006-06-15 Ville Vainio <vivainio@gmail.com>
286 290
287 291 * iplib.py, hooks.py: Added new generate_prompt hook that can be
288 292 used to create prompts dynamically, instead of the "old" way of
289 293 assigning "magic" strings to prompt_in1 and prompt_in2. The old
290 294 way still works (it's invoked by the default hook), of course.
291 295
292 296 * Prompts.py: added generate_output_prompt hook for altering output
293 297 prompt
294 298
295 299 * Release.py: Changed version string to 0.7.3.svn.
296 300
297 301 2006-06-15 Walter Doerwald <walter@livinglogic.de>
298 302
299 303 * IPython/Extensions/ibrowse.py: Change _BrowserLevel.moveto() so that
300 304 the call to fetch() always tries to fetch enough data for at least one
301 305 full screen. This makes it possible to simply call moveto(0,0,True) in
302 306 the constructor. Fix typos and removed the obsolete goto attribute.
303 307
304 308 2006-06-12 Ville Vainio <vivainio@gmail.com>
305 309
306 310 * ipy_profile_sh.py: applied Krisha Mohan Gundu's patch for
307 311 allowing $variable interpolation within multiline statements,
308 312 though so far only with "sh" profile for a testing period.
309 313 The patch also enables splitting long commands with \ but it
310 314 doesn't work properly yet.
311 315
312 316 2006-06-12 Walter Doerwald <walter@livinglogic.de>
313 317
314 318 * IPython/Extensions/ibrowse.py (_dodisplay): Display the length of the
315 319 input history and the position of the cursor in the input history for
316 320 the find, findbackwards and goto command.
317 321
318 322 2006-06-10 Walter Doerwald <walter@livinglogic.de>
319 323
320 324 * IPython/Extensions/ibrowse.py: Add a class _CommandInput that
321 325 implements the basic functionality of browser commands that require
322 326 input. Reimplement the goto, find and findbackwards commands as
323 327 subclasses of _CommandInput. Add an input history and keymaps to those
324 328 commands. Add "\r" as a keyboard shortcut for the enterdefault and
325 329 execute commands.
326 330
327 331 2006-06-07 Ville Vainio <vivainio@gmail.com>
328 332
329 333 * iplib.py: ipython mybatch.ipy exits ipython immediately after
330 334 running the batch files instead of leaving the session open.
331 335
332 336 2006-06-07 Fernando Perez <Fernando.Perez@colorado.edu>
333 337
334 338 * IPython/iplib.py (InteractiveShell.__init__): update BSD fix, as
335 339 the original fix was incomplete. Patch submitted by W. Maier.
336 340
337 341 2006-06-07 Ville Vainio <vivainio@gmail.com>
338 342
339 343 * iplib.py,Magic.py, ipmaker.py (magic_rehashx):
340 344 Confirmation prompts can be supressed by 'quiet' option.
341 345 _ip.options.quiet = 1 means "assume yes for all yes/no queries".
342 346
343 347 2006-06-06 *** Released version 0.7.2
344 348
345 349 2006-06-06 Fernando Perez <Fernando.Perez@colorado.edu>
346 350
347 351 * IPython/Release.py (version): Made 0.7.2 final for release.
348 352 Repo tagged and release cut.
349 353
350 354 2006-06-05 Ville Vainio <vivainio@gmail.com>
351 355
352 356 * Magic.py (magic_rehashx): Honor no_alias list earlier in
353 357 %rehashx, to avoid clobbering builtins in ipy_profile_sh.py
354 358
355 359 * upgrade_dir.py: try import 'path' module a bit harder
356 360 (for %upgrade)
357 361
358 362 2006-06-03 Fernando Perez <Fernando.Perez@colorado.edu>
359 363
360 364 * IPython/genutils.py (ask_yes_no): treat EOF as a default answer
361 365 instead of looping 20 times.
362 366
363 367 * IPython/ipmaker.py (make_IPython): honor -ipythondir flag
364 368 correctly at initialization time. Bug reported by Krishna Mohan
365 369 Gundu <gkmohan-AT-gmail.com> on the user list.
366 370
367 371 * IPython/Release.py (version): Mark 0.7.2 version to start
368 372 testing for release on 06/06.
369 373
370 374 2006-05-31 Fernando Perez <Fernando.Perez@colorado.edu>
371 375
372 376 * scripts/irunner: thin script interface so users don't have to
373 377 find the module and call it as an executable, since modules rarely
374 378 live in people's PATH.
375 379
376 380 * IPython/irunner.py (InteractiveRunner.__init__): added
377 381 delaybeforesend attribute to control delays with newer versions of
378 382 pexpect. Thanks to detailed help from pexpect's author, Noah
379 383 Spurrier <noah-AT-noah.org>. Noted how to use the SAGE runner
380 384 correctly (it works in NoColor mode).
381 385
382 386 * IPython/iplib.py (handle_normal): fix nasty crash reported on
383 387 SAGE list, from improper log() calls.
384 388
385 389 2006-05-31 Ville Vainio <vivainio@gmail.com>
386 390
387 391 * upgrade_dir.py, Magic.py (magic_upgrade): call upgrade_dir
388 392 with args in parens to work correctly with dirs that have spaces.
389 393
390 394 2006-05-30 Fernando Perez <Fernando.Perez@colorado.edu>
391 395
392 396 * IPython/Logger.py (Logger.logstart): add option to log raw input
393 397 instead of the processed one. A -r flag was added to the
394 398 %logstart magic used for controlling logging.
395 399
396 400 2006-05-29 Fernando Perez <Fernando.Perez@colorado.edu>
397 401
398 402 * IPython/iplib.py (InteractiveShell.__init__): add check for the
399 403 *BSDs to omit --color from all 'ls' aliases, since *BSD ls doesn't
400 404 recognize the option. After a bug report by Will Maier. This
401 405 closes #64 (will do it after confirmation from W. Maier).
402 406
403 407 * IPython/irunner.py: New module to run scripts as if manually
404 408 typed into an interactive environment, based on pexpect. After a
405 409 submission by Ken Schutte <kschutte-AT-csail.mit.edu> on the
406 410 ipython-user list. Simple unittests in the tests/ directory.
407 411
408 412 * tools/release: add Will Maier, OpenBSD port maintainer, to
409 413 recepients list. We are now officially part of the OpenBSD ports:
410 414 http://www.openbsd.org/ports.html ! Many thanks to Will for the
411 415 work.
412 416
413 417 2006-05-26 Fernando Perez <Fernando.Perez@colorado.edu>
414 418
415 419 * IPython/ipmaker.py (make_IPython): modify sys.argv fix (below)
416 420 so that it doesn't break tkinter apps.
417 421
418 422 * IPython/iplib.py (_prefilter): fix bug where aliases would
419 423 shadow variables when autocall was fully off. Reported by SAGE
420 424 author William Stein.
421 425
422 426 * IPython/OInspect.py (Inspector.__init__): add a flag to control
423 427 at what detail level strings are computed when foo? is requested.
424 428 This allows users to ask for example that the string form of an
425 429 object is only computed when foo?? is called, or even never, by
426 430 setting the object_info_string_level >= 2 in the configuration
427 431 file. This new option has been added and documented. After a
428 432 request by SAGE to be able to control the printing of very large
429 433 objects more easily.
430 434
431 435 2006-05-25 Fernando Perez <Fernando.Perez@colorado.edu>
432 436
433 437 * IPython/ipmaker.py (make_IPython): remove the ipython call path
434 438 from sys.argv, to be 100% consistent with how Python itself works
435 439 (as seen for example with python -i file.py). After a bug report
436 440 by Jeffrey Collins.
437 441
438 442 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix
439 443 nasty bug which was preventing custom namespaces with -pylab,
440 444 reported by M. Foord. Minor cleanup, remove old matplotlib.matlab
441 445 compatibility (long gone from mpl).
442 446
443 447 * IPython/ipapi.py (make_session): name change: create->make. We
444 448 use make in other places (ipmaker,...), it's shorter and easier to
445 449 type and say, etc. I'm trying to clean things before 0.7.2 so
446 450 that I can keep things stable wrt to ipapi in the chainsaw branch.
447 451
448 452 * ipython.el: fix the py-pdbtrack-input-prompt variable so that
449 453 python-mode recognizes our debugger mode. Add support for
450 454 autoindent inside (X)emacs. After a patch sent in by Jin Liu
451 455 <m.liu.jin-AT-gmail.com> originally written by
452 456 doxgen-AT-newsmth.net (with minor modifications for xemacs
453 457 compatibility)
454 458
455 459 * IPython/Debugger.py (Pdb.format_stack_entry): fix formatting of
456 460 tracebacks when walking the stack so that the stack tracking system
457 461 in emacs' python-mode can identify the frames correctly.
458 462
459 463 * IPython/ipmaker.py (make_IPython): make the internal (and
460 464 default config) autoedit_syntax value false by default. Too many
461 465 users have complained to me (both on and off-list) about problems
462 466 with this option being on by default, so I'm making it default to
463 467 off. It can still be enabled by anyone via the usual mechanisms.
464 468
465 469 * IPython/completer.py (Completer.attr_matches): add support for
466 470 PyCrust-style _getAttributeNames magic method. Patch contributed
467 471 by <mscott-AT-goldenspud.com>. Closes #50.
468 472
469 473 * IPython/iplib.py (InteractiveShell.__init__): remove the
470 474 deletion of exit/quit from __builtin__, which can break
471 475 third-party tools like the Zope debugging console. The
472 476 %exit/%quit magics remain. In general, it's probably a good idea
473 477 not to delete anything from __builtin__, since we never know what
474 478 that will break. In any case, python now (for 2.5) will support
475 479 'real' exit/quit, so this issue is moot. Closes #55.
476 480
477 481 * IPython/genutils.py (with_obj): rename the 'with' function to
478 482 'withobj' to avoid incompatibilities with Python 2.5, where 'with'
479 483 becomes a language keyword. Closes #53.
480 484
481 485 * IPython/FakeModule.py (FakeModule.__init__): add a proper
482 486 __file__ attribute to this so it fools more things into thinking
483 487 it is a real module. Closes #59.
484 488
485 489 * IPython/Magic.py (magic_edit): add -n option to open the editor
486 490 at a specific line number. After a patch by Stefan van der Walt.
487 491
488 492 2006-05-23 Fernando Perez <Fernando.Perez@colorado.edu>
489 493
490 494 * IPython/iplib.py (edit_syntax_error): fix crash when for some
491 495 reason the file could not be opened. After automatic crash
492 496 reports sent by James Graham <jgraham-AT-ast.cam.ac.uk> and
493 497 Charles Dolan <charlespatrickdolan-AT-yahoo.com>.
494 498 (_should_recompile): Don't fire editor if using %bg, since there
495 499 is no file in the first place. From the same report as above.
496 500 (raw_input): protect against faulty third-party prefilters. After
497 501 an automatic crash report sent by Dirk Laurie <dirk-AT-sun.ac.za>
498 502 while running under SAGE.
499 503
500 504 2006-05-23 Ville Vainio <vivainio@gmail.com>
501 505
502 506 * ipapi.py: Stripped down ip.to_user_ns() to work only as
503 507 ip.to_user_ns("x1 y1"), which exposes vars x1 and y1. ipapi.get()
504 508 now returns None (again), unless dummy is specifically allowed by
505 509 ipapi.get(allow_dummy=True).
506 510
507 511 2006-05-18 Fernando Perez <Fernando.Perez@colorado.edu>
508 512
509 513 * IPython: remove all 2.2-compatibility objects and hacks from
510 514 everywhere, since we only support 2.3 at this point. Docs
511 515 updated.
512 516
513 517 * IPython/ipapi.py (IPApi.__init__): Cleanup of all getters.
514 518 Anything requiring extra validation can be turned into a Python
515 519 property in the future. I used a property for the db one b/c
516 520 there was a nasty circularity problem with the initialization
517 521 order, which right now I don't have time to clean up.
518 522
519 523 * IPython/Shell.py (MTInteractiveShell.runcode): Fix, I think,
520 524 another locking bug reported by Jorgen. I'm not 100% sure though,
521 525 so more testing is needed...
522 526
523 527 2006-05-17 Fernando Perez <Fernando.Perez@colorado.edu>
524 528
525 529 * IPython/ipapi.py (IPApi.to_user_ns): New function to inject
526 530 local variables from any routine in user code (typically executed
527 531 with %run) directly into the interactive namespace. Very useful
528 532 when doing complex debugging.
529 533 (IPythonNotRunning): Changed the default None object to a dummy
530 534 whose attributes can be queried as well as called without
531 535 exploding, to ease writing code which works transparently both in
532 536 and out of ipython and uses some of this API.
533 537
534 538 2006-05-16 Fernando Perez <Fernando.Perez@colorado.edu>
535 539
536 540 * IPython/hooks.py (result_display): Fix the fact that our display
537 541 hook was using str() instead of repr(), as the default python
538 542 console does. This had gone unnoticed b/c it only happened if
539 543 %Pprint was off, but the inconsistency was there.
540 544
541 545 2006-05-15 Ville Vainio <vivainio@gmail.com>
542 546
543 547 * Oinspect.py: Only show docstring for nonexisting/binary files
544 548 when doing object??, closing ticket #62
545 549
546 550 2006-05-13 Fernando Perez <Fernando.Perez@colorado.edu>
547 551
548 552 * IPython/Shell.py (MTInteractiveShell.runsource): Fix threading
549 553 bug, closes http://www.scipy.net/roundup/ipython/issue55. A lock
550 554 was being released in a routine which hadn't checked if it had
551 555 been the one to acquire it.
552 556
553 557 2006-05-07 Fernando Perez <Fernando.Perez@colorado.edu>
554 558
555 559 * IPython/Release.py (version): put out 0.7.2.rc1 for testing.
556 560
557 561 2006-04-11 Ville Vainio <vivainio@gmail.com>
558 562
559 563 * iplib.py, ipmaker.py: .ipy extension now means "ipython batch file"
560 564 in command line. E.g. "ipython test.ipy" runs test.ipy with ipython
561 565 prefilters, allowing stuff like magics and aliases in the file.
562 566
563 567 * Prompts.py, Extensions/clearcmd.py, ipy_system_conf.py: %clear magic
564 568 added. Supported now are "%clear in" and "%clear out" (clear input and
565 569 output history, respectively). Also fixed CachedOutput.flush to
566 570 properly flush the output cache.
567 571
568 572 * Extensions/pspersistence.py: Fix %store to avoid "%store obj.attr"
569 573 half-success (and fail explicitly).
570 574
571 575 2006-03-28 Ville Vainio <vivainio@gmail.com>
572 576
573 577 * iplib.py: Fix quoting of aliases so that only argless ones
574 578 are quoted
575 579
576 580 2006-03-28 Ville Vainio <vivainio@gmail.com>
577 581
578 582 * iplib.py: Quote aliases with spaces in the name.
579 583 "c:\program files\blah\bin" is now legal alias target.
580 584
581 585 * ext_rehashdir.py: Space no longer allowed as arg
582 586 separator, since space is legal in path names.
583 587
584 588 2006-03-16 Ville Vainio <vivainio@gmail.com>
585 589
586 590 * upgrade_dir.py: Take path.py from Extensions, correcting
587 591 %upgrade magic
588 592
589 593 * ipmaker.py: Suggest using %upgrade if ipy_user_conf.py isn't found.
590 594
591 595 * hooks.py: Only enclose editor binary in quotes if legal and
592 596 necessary (space in the name, and is an existing file). Fixes a bug
593 597 reported by Zachary Pincus.
594 598
595 599 2006-03-13 Fernando Perez <Fernando.Perez@colorado.edu>
596 600
597 601 * Manual: thanks to a tip on proper color handling for Emacs, by
598 602 Eric J Haywiser <ejh1-AT-MIT.EDU>.
599 603
600 604 * ipython.el: close http://www.scipy.net/roundup/ipython/issue57
601 605 by applying the provided patch. Thanks to Liu Jin
602 606 <m.liu.jin-AT-gmail.com> for the contribution. No problems under
603 607 XEmacs/Linux, I'm trusting the submitter that it actually helps
604 608 under win32/GNU Emacs. Will revisit if any problems are reported.
605 609
606 610 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
607 611
608 612 * IPython/Gnuplot2.py (_FileClass): update for current Gnuplot.py
609 613 from SVN, thanks to a patch by Ryan Woodard <rywo@bas.ac.uk>.
610 614
611 615 2006-03-12 Ville Vainio <vivainio@gmail.com>
612 616
613 617 * Magic.py (magic_timeit): Added %timeit magic, contributed by
614 618 Torsten Marek.
615 619
616 620 2006-03-12 Fernando Perez <Fernando.Perez@colorado.edu>
617 621
618 622 * IPython/Magic.py (magic_macro): fix so that the n1-n2 syntax for
619 623 line ranges works again.
620 624
621 625 2006-03-11 Fernando Perez <Fernando.Perez@colorado.edu>
622 626
623 627 * IPython/iplib.py (showtraceback): add back sys.last_traceback
624 628 and friends, after a discussion with Zach Pincus on ipython-user.
625 629 I'm not 100% sure, but after thinking about it quite a bit, it may
626 630 be OK. Testing with the multithreaded shells didn't reveal any
627 631 problems, but let's keep an eye out.
628 632
629 633 In the process, I fixed a few things which were calling
630 634 self.InteractiveTB() directly (like safe_execfile), which is a
631 635 mistake: ALL exception reporting should be done by calling
632 636 self.showtraceback(), which handles state and tab-completion and
633 637 more.
634 638
635 639 2006-03-01 Ville Vainio <vivainio@gmail.com>
636 640
637 641 * Extensions/ipipe.py: Added Walter Doerwald's "ipipe" module.
638 642 To use, do "from ipipe import *".
639 643
640 644 2006-02-24 Ville Vainio <vivainio@gmail.com>
641 645
642 646 * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more
643 647 "cleanly" and safely than the older upgrade mechanism.
644 648
645 649 2006-02-21 Ville Vainio <vivainio@gmail.com>
646 650
647 651 * Magic.py: %save works again.
648 652
649 653 2006-02-15 Ville Vainio <vivainio@gmail.com>
650 654
651 655 * Magic.py: %Pprint works again
652 656
653 657 * Extensions/ipy_sane_defaults.py: Provide everything provided
654 658 in default ipythonrc, to make it possible to have a completely empty
655 659 ipythonrc (and thus completely rc-file free configuration)
656 660
657 661 2006-02-11 Fernando Perez <Fernando.Perez@colorado.edu>
658 662
659 663 * IPython/hooks.py (editor): quote the call to the editor command,
660 664 to allow commands with spaces in them. Problem noted by watching
661 665 Ian Oswald's video about textpad under win32 at
662 666 http://showmedo.com/videoListPage?listKey=PythonIPythonSeries
663 667
664 668 * IPython/UserConfig/ipythonrc: Replace @ signs with % when
665 669 describing magics (we haven't used @ for a loong time).
666 670
667 671 * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch
668 672 contributed by marienz to close
669 673 http://www.scipy.net/roundup/ipython/issue53.
670 674
671 675 2006-02-10 Ville Vainio <vivainio@gmail.com>
672 676
673 677 * genutils.py: getoutput now works in win32 too
674 678
675 679 * completer.py: alias and magic completion only invoked
676 680 at the first "item" in the line, to avoid "cd %store"
677 681 nonsense.
678 682
679 683 2006-02-09 Ville Vainio <vivainio@gmail.com>
680 684
681 685 * test/*: Added a unit testing framework (finally).
682 686 '%run runtests.py' to run test_*.
683 687
684 688 * ipapi.py: Exposed runlines and set_custom_exc
685 689
686 690 2006-02-07 Ville Vainio <vivainio@gmail.com>
687 691
688 692 * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall,
689 693 instead use "f(1 2)" as before.
690 694
691 695 2006-02-05 Fernando Perez <Fernando.Perez@colorado.edu>
692 696
693 697 * IPython/demo.py (IPythonDemo): Add new classes to the demo
694 698 facilities, for demos processed by the IPython input filter
695 699 (IPythonDemo), and for running a script one-line-at-a-time as a
696 700 demo, both for pure Python (LineDemo) and for IPython-processed
697 701 input (IPythonLineDemo). After a request by Dave Kohel, from the
698 702 SAGE team.
699 703 (Demo.edit): added an edit() method to the demo objects, to edit
700 704 the in-memory copy of the last executed block.
701 705
702 706 * IPython/Magic.py (magic_edit): add '-r' option for 'raw'
703 707 processing to %edit, %macro and %save. These commands can now be
704 708 invoked on the unprocessed input as it was typed by the user
705 709 (without any prefilters applied). After requests by the SAGE team
706 710 at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html.
707 711
708 712 2006-02-01 Ville Vainio <vivainio@gmail.com>
709 713
710 714 * setup.py, eggsetup.py: easy_install ipython==dev works
711 715 correctly now (on Linux)
712 716
713 717 * ipy_user_conf,ipmaker: user config changes, removed spurious
714 718 warnings
715 719
716 720 * iplib: if rc.banner is string, use it as is.
717 721
718 722 * Magic: %pycat accepts a string argument and pages it's contents.
719 723
720 724
721 725 2006-01-30 Ville Vainio <vivainio@gmail.com>
722 726
723 727 * pickleshare,pspersistence,ipapi,Magic: persistence overhaul.
724 728 Now %store and bookmarks work through PickleShare, meaning that
725 729 concurrent access is possible and all ipython sessions see the
726 730 same database situation all the time, instead of snapshot of
727 731 the situation when the session was started. Hence, %bookmark
728 732 results are immediately accessible from othes sessions. The database
729 733 is also available for use by user extensions. See:
730 734 http://www.python.org/pypi/pickleshare
731 735
732 736 * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'.
733 737
734 738 * aliases can now be %store'd
735 739
736 740 * path.py moved to Extensions so that pickleshare does not need
737 741 IPython-specific import. Extensions added to pythonpath right
738 742 at __init__.
739 743
740 744 * iplib.py: ipalias deprecated/redundant; aliases are converted and
741 745 called with _ip.system and the pre-transformed command string.
742 746
743 747 2006-01-29 Fernando Perez <Fernando.Perez@colorado.edu>
744 748
745 749 * IPython/iplib.py (interact): Fix that we were not catching
746 750 KeyboardInterrupt exceptions properly. I'm not quite sure why the
747 751 logic here had to change, but it's fixed now.
748 752
749 753 2006-01-29 Ville Vainio <vivainio@gmail.com>
750 754
751 755 * iplib.py: Try to import pyreadline on Windows.
752 756
753 757 2006-01-27 Ville Vainio <vivainio@gmail.com>
754 758
755 759 * iplib.py: Expose ipapi as _ip in builtin namespace.
756 760 Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system)
757 761 and ip_set_hook (-> _ip.set_hook) redundant. % and !
758 762 syntax now produce _ip.* variant of the commands.
759 763
760 764 * "_ip.options().autoedit_syntax = 2" automatically throws
761 765 user to editor for syntax error correction without prompting.
762 766
763 767 2006-01-27 Ville Vainio <vivainio@gmail.com>
764 768
765 769 * ipmaker.py: Give "realistic" sys.argv for scripts (without
766 770 'ipython' at argv[0]) executed through command line.
767 771 NOTE: this DEPRECATES calling ipython with multiple scripts
768 772 ("ipython a.py b.py c.py")
769 773
770 774 * iplib.py, hooks.py: Added configurable input prefilter,
771 775 named 'input_prefilter'. See ext_rescapture.py for example
772 776 usage.
773 777
774 778 * ext_rescapture.py, Magic.py: Better system command output capture
775 779 through 'var = !ls' (deprecates user-visible %sc). Same notation
776 780 applies for magics, 'var = %alias' assigns alias list to var.
777 781
778 782 * ipapi.py: added meta() for accessing extension-usable data store.
779 783
780 784 * iplib.py: added InteractiveShell.getapi(). New magics should be
781 785 written doing self.getapi() instead of using the shell directly.
782 786
783 787 * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and
784 788 %store foo >> ~/myfoo.txt to store variables to files (in clean
785 789 textual form, not a restorable pickle).
786 790
787 791 * ipmaker.py: now import ipy_profile_PROFILENAME automatically
788 792
789 793 * usage.py, Magic.py: added %quickref
790 794
791 795 * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2).
792 796
793 797 * GetoptErrors when invoking magics etc. with wrong args
794 798 are now more helpful:
795 799 GetoptError: option -l not recognized (allowed: "qb" )
796 800
797 801 2006-01-25 Fernando Perez <Fernando.Perez@colorado.edu>
798 802
799 803 * IPython/demo.py (Demo.show): Flush stdout after each block, so
800 804 computationally intensive blocks don't appear to stall the demo.
801 805
802 806 2006-01-24 Ville Vainio <vivainio@gmail.com>
803 807
804 808 * iplib.py, hooks.py: 'result_display' hook can return a non-None
805 809 value to manipulate resulting history entry.
806 810
807 811 * ipapi.py: Moved TryNext here from hooks.py. Moved functions
808 812 to instance methods of IPApi class, to make extending an embedded
809 813 IPython feasible. See ext_rehashdir.py for example usage.
810 814
811 815 * Merged 1071-1076 from branches/0.7.1
812 816
813 817
814 818 2006-01-23 Fernando Perez <Fernando.Perez@colorado.edu>
815 819
816 820 * tools/release (daystamp): Fix build tools to use the new
817 821 eggsetup.py script to build lightweight eggs.
818 822
819 823 * Applied changesets 1062 and 1064 before 0.7.1 release.
820 824
821 825 * IPython/Magic.py (magic_history): Add '-r' option to %hist, to
822 826 see the raw input history (without conversions like %ls ->
823 827 ipmagic("ls")). After a request from W. Stein, SAGE
824 828 (http://modular.ucsd.edu/sage) developer. This information is
825 829 stored in the input_hist_raw attribute of the IPython instance, so
826 830 developers can access it if needed (it's an InputList instance).
827 831
828 832 * Versionstring = 0.7.2.svn
829 833
830 834 * eggsetup.py: A separate script for constructing eggs, creates
831 835 proper launch scripts even on Windows (an .exe file in
832 836 \python24\scripts).
833 837
834 838 * ipapi.py: launch_new_instance, launch entry point needed for the
835 839 egg.
836 840
837 841 2006-01-23 Ville Vainio <vivainio@gmail.com>
838 842
839 843 * Added %cpaste magic for pasting python code
840 844
841 845 2006-01-22 Ville Vainio <vivainio@gmail.com>
842 846
843 847 * Merge from branches/0.7.1 into trunk, revs 1052-1057
844 848
845 849 * Versionstring = 0.7.2.svn
846 850
847 851 * eggsetup.py: A separate script for constructing eggs, creates
848 852 proper launch scripts even on Windows (an .exe file in
849 853 \python24\scripts).
850 854
851 855 * ipapi.py: launch_new_instance, launch entry point needed for the
852 856 egg.
853 857
854 858 2006-01-22 Fernando Perez <Fernando.Perez@colorado.edu>
855 859
856 860 * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or
857 861 %pfile foo would print the file for foo even if it was a binary.
858 862 Now, extensions '.so' and '.dll' are skipped.
859 863
860 864 * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading
861 865 bug, where macros would fail in all threaded modes. I'm not 100%
862 866 sure, so I'm going to put out an rc instead of making a release
863 867 today, and wait for feedback for at least a few days.
864 868
865 869 * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt
866 870 it...) the handling of pasting external code with autoindent on.
867 871 To get out of a multiline input, the rule will appear for most
868 872 users unchanged: two blank lines or change the indent level
869 873 proposed by IPython. But there is a twist now: you can
870 874 add/subtract only *one or two spaces*. If you add/subtract three
871 875 or more (unless you completely delete the line), IPython will
872 876 accept that line, and you'll need to enter a second one of pure
873 877 whitespace. I know it sounds complicated, but I can't find a
874 878 different solution that covers all the cases, with the right
875 879 heuristics. Hopefully in actual use, nobody will really notice
876 880 all these strange rules and things will 'just work'.
877 881
878 882 2006-01-21 Fernando Perez <Fernando.Perez@colorado.edu>
879 883
880 884 * IPython/iplib.py (interact): catch exceptions which can be
881 885 triggered asynchronously by signal handlers. Thanks to an
882 886 automatic crash report, submitted by Colin Kingsley
883 887 <tercel-AT-gentoo.org>.
884 888
885 889 2006-01-20 Ville Vainio <vivainio@gmail.com>
886 890
887 891 * Ipython/Extensions/ext_rehashdir.py: Created a usable example
888 892 (%rehashdir, very useful, try it out) of how to extend ipython
889 893 with new magics. Also added Extensions dir to pythonpath to make
890 894 importing extensions easy.
891 895
892 896 * %store now complains when trying to store interactively declared
893 897 classes / instances of those classes.
894 898
895 899 * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py,
896 900 ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported
897 901 if they exist, and ipy_user_conf.py with some defaults is created for
898 902 the user.
899 903
900 904 * Startup rehashing done by the config file, not InterpreterExec.
901 905 This means system commands are available even without selecting the
902 906 pysh profile. It's the sensible default after all.
903 907
904 908 2006-01-20 Fernando Perez <Fernando.Perez@colorado.edu>
905 909
906 910 * IPython/iplib.py (raw_input): I _think_ I got the pasting of
907 911 multiline code with autoindent on working. But I am really not
908 912 sure, so this needs more testing. Will commit a debug-enabled
909 913 version for now, while I test it some more, so that Ville and
910 914 others may also catch any problems. Also made
911 915 self.indent_current_str() a method, to ensure that there's no
912 916 chance of the indent space count and the corresponding string
913 917 falling out of sync. All code needing the string should just call
914 918 the method.
915 919
916 920 2006-01-18 Fernando Perez <Fernando.Perez@colorado.edu>
917 921
918 922 * IPython/Magic.py (magic_edit): fix check for when users don't
919 923 save their output files, the try/except was in the wrong section.
920 924
921 925 2006-01-17 Fernando Perez <Fernando.Perez@colorado.edu>
922 926
923 927 * IPython/Magic.py (magic_run): fix __file__ global missing from
924 928 script's namespace when executed via %run. After a report by
925 929 Vivian.
926 930
927 931 * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d'
928 932 when using python 2.4. The parent constructor changed in 2.4, and
929 933 we need to track it directly (we can't call it, as it messes up
930 934 readline and tab-completion inside our pdb would stop working).
931 935 After a bug report by R. Bernstein <rocky-AT-panix.com>.
932 936
933 937 2006-01-16 Ville Vainio <vivainio@gmail.com>
934 938
935 939 * Ipython/magic.py: Reverted back to old %edit functionality
936 940 that returns file contents on exit.
937 941
938 942 * IPython/path.py: Added Jason Orendorff's "path" module to
939 943 IPython tree, http://www.jorendorff.com/articles/python/path/.
940 944 You can get path objects conveniently through %sc, and !!, e.g.:
941 945 sc files=ls
942 946 for p in files.paths: # or files.p
943 947 print p,p.mtime
944 948
945 949 * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall
946 950 now work again without considering the exclusion regexp -
947 951 hence, things like ',foo my/path' turn to 'foo("my/path")'
948 952 instead of syntax error.
949 953
950 954
951 955 2006-01-14 Ville Vainio <vivainio@gmail.com>
952 956
953 957 * IPython/ipapi.py (ashook, asmagic, options): Added convenience
954 958 ipapi decorators for python 2.4 users, options() provides access to rc
955 959 data.
956 960
957 961 * IPython/Magic.py (magic_cd): %cd now accepts backslashes
958 962 as path separators (even on Linux ;-). Space character after
959 963 backslash (as yielded by tab completer) is still space;
960 964 "%cd long\ name" works as expected.
961 965
962 966 * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented
963 967 as "chain of command", with priority. API stays the same,
964 968 TryNext exception raised by a hook function signals that
965 969 current hook failed and next hook should try handling it, as
966 970 suggested by Walter DΓΆrwald <walter@livinglogic.de>. Walter also
967 971 requested configurable display hook, which is now implemented.
968 972
969 973 2006-01-13 Ville Vainio <vivainio@gmail.com>
970 974
971 975 * IPython/platutils*.py: platform specific utility functions,
972 976 so far only set_term_title is implemented (change terminal
973 977 label in windowing systems). %cd now changes the title to
974 978 current dir.
975 979
976 980 * IPython/Release.py: Added myself to "authors" list,
977 981 had to create new files.
978 982
979 983 * IPython/iplib.py (handle_shell_escape): fixed logical flaw in
980 984 shell escape; not a known bug but had potential to be one in the
981 985 future.
982 986
983 987 * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public"
984 988 extension API for IPython! See the module for usage example. Fix
985 989 OInspect for docstring-less magic functions.
986 990
987 991
988 992 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
989 993
990 994 * IPython/iplib.py (raw_input): temporarily deactivate all
991 995 attempts at allowing pasting of code with autoindent on. It
992 996 introduced bugs (reported by Prabhu) and I can't seem to find a
993 997 robust combination which works in all cases. Will have to revisit
994 998 later.
995 999
996 1000 * IPython/genutils.py: remove isspace() function. We've dropped
997 1001 2.2 compatibility, so it's OK to use the string method.
998 1002
999 1003 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1000 1004
1001 1005 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
1002 1006 matching what NOT to autocall on, to include all python binary
1003 1007 operators (including things like 'and', 'or', 'is' and 'in').
1004 1008 Prompted by a bug report on 'foo & bar', but I realized we had
1005 1009 many more potential bug cases with other operators. The regexp is
1006 1010 self.re_exclude_auto, it's fairly commented.
1007 1011
1008 1012 2006-01-12 Ville Vainio <vivainio@gmail.com>
1009 1013
1010 1014 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
1011 1015 Prettified and hardened string/backslash quoting with ipsystem(),
1012 1016 ipalias() and ipmagic(). Now even \ characters are passed to
1013 1017 %magics, !shell escapes and aliases exactly as they are in the
1014 1018 ipython command line. Should improve backslash experience,
1015 1019 particularly in Windows (path delimiter for some commands that
1016 1020 won't understand '/'), but Unix benefits as well (regexps). %cd
1017 1021 magic still doesn't support backslash path delimiters, though. Also
1018 1022 deleted all pretense of supporting multiline command strings in
1019 1023 !system or %magic commands. Thanks to Jerry McRae for suggestions.
1020 1024
1021 1025 * doc/build_doc_instructions.txt added. Documentation on how to
1022 1026 use doc/update_manual.py, added yesterday. Both files contributed
1023 1027 by JΓΆrgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
1024 1028 doc/*.sh for deprecation at a later date.
1025 1029
1026 1030 * /ipython.py Added ipython.py to root directory for
1027 1031 zero-installation (tar xzvf ipython.tgz; cd ipython; python
1028 1032 ipython.py) and development convenience (no need to keep doing
1029 1033 "setup.py install" between changes).
1030 1034
1031 1035 * Made ! and !! shell escapes work (again) in multiline expressions:
1032 1036 if 1:
1033 1037 !ls
1034 1038 !!ls
1035 1039
1036 1040 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
1037 1041
1038 1042 * IPython/ipstruct.py (Struct): Rename IPython.Struct to
1039 1043 IPython.ipstruct, to avoid local shadowing of the stdlib 'struct'
1040 1044 module in case-insensitive installation. Was causing crashes
1041 1045 under win32. Closes http://www.scipy.net/roundup/ipython/issue49.
1042 1046
1043 1047 * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart
1044 1048 <marienz-AT-gentoo.org>, closes
1045 1049 http://www.scipy.net/roundup/ipython/issue51.
1046 1050
1047 1051 2006-01-11 Fernando Perez <Fernando.Perez@colorado.edu>
1048 1052
1049 1053 * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the
1050 1054 problem of excessive CPU usage under *nix and keyboard lag under
1051 1055 win32.
1052 1056
1053 1057 2006-01-10 *** Released version 0.7.0
1054 1058
1055 1059 2006-01-10 Fernando Perez <Fernando.Perez@colorado.edu>
1056 1060
1057 1061 * IPython/Release.py (revision): tag version number to 0.7.0,
1058 1062 ready for release.
1059 1063
1060 1064 * IPython/Magic.py (magic_edit): Add print statement to %edit so
1061 1065 it informs the user of the name of the temp. file used. This can
1062 1066 help if you decide later to reuse that same file, so you know
1063 1067 where to copy the info from.
1064 1068
1065 1069 2006-01-09 Fernando Perez <Fernando.Perez@colorado.edu>
1066 1070
1067 1071 * setup_bdist_egg.py: little script to build an egg. Added
1068 1072 support in the release tools as well.
1069 1073
1070 1074 2006-01-08 Fernando Perez <Fernando.Perez@colorado.edu>
1071 1075
1072 1076 * IPython/Shell.py (IPShellWX.__init__): add support for WXPython
1073 1077 version selection (new -wxversion command line and ipythonrc
1074 1078 parameter). Patch contributed by Arnd Baecker
1075 1079 <arnd.baecker-AT-web.de>.
1076 1080
1077 1081 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1078 1082 embedded instances, for variables defined at the interactive
1079 1083 prompt of the embedded ipython. Reported by Arnd.
1080 1084
1081 1085 * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now
1082 1086 it can be used as a (stateful) toggle, or with a direct parameter.
1083 1087
1084 1088 * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which
1085 1089 could be triggered in certain cases and cause the traceback
1086 1090 printer not to work.
1087 1091
1088 1092 2006-01-07 Fernando Perez <Fernando.Perez@colorado.edu>
1089 1093
1090 1094 * IPython/iplib.py (_should_recompile): Small fix, closes
1091 1095 http://www.scipy.net/roundup/ipython/issue48. Patch by Scott.
1092 1096
1093 1097 2006-01-04 Fernando Perez <Fernando.Perez@colorado.edu>
1094 1098
1095 1099 * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK
1096 1100 backend for matplotlib (100% cpu utiliziation). Thanks to Charlie
1097 1101 Moad for help with tracking it down.
1098 1102
1099 1103 * IPython/iplib.py (handle_auto): fix autocall handling for
1100 1104 objects which support BOTH __getitem__ and __call__ (so that f [x]
1101 1105 is left alone, instead of becoming f([x]) automatically).
1102 1106
1103 1107 * IPython/Magic.py (magic_cd): fix crash when cd -b was used.
1104 1108 Ville's patch.
1105 1109
1106 1110 2006-01-03 Fernando Perez <Fernando.Perez@colorado.edu>
1107 1111
1108 1112 * IPython/iplib.py (handle_auto): changed autocall semantics to
1109 1113 include 'smart' mode, where the autocall transformation is NOT
1110 1114 applied if there are no arguments on the line. This allows you to
1111 1115 just type 'foo' if foo is a callable to see its internal form,
1112 1116 instead of having it called with no arguments (typically a
1113 1117 mistake). The old 'full' autocall still exists: for that, you
1114 1118 need to set the 'autocall' parameter to 2 in your ipythonrc file.
1115 1119
1116 1120 * IPython/completer.py (Completer.attr_matches): add
1117 1121 tab-completion support for Enthoughts' traits. After a report by
1118 1122 Arnd and a patch by Prabhu.
1119 1123
1120 1124 2006-01-02 Fernando Perez <Fernando.Perez@colorado.edu>
1121 1125
1122 1126 * IPython/ultraTB.py (_fixed_getinnerframes): added Alex
1123 1127 Schmolck's patch to fix inspect.getinnerframes().
1124 1128
1125 1129 * IPython/iplib.py (InteractiveShell.__init__): significant fixes
1126 1130 for embedded instances, regarding handling of namespaces and items
1127 1131 added to the __builtin__ one. Multiple embedded instances and
1128 1132 recursive embeddings should work better now (though I'm not sure
1129 1133 I've got all the corner cases fixed, that code is a bit of a brain
1130 1134 twister).
1131 1135
1132 1136 * IPython/Magic.py (magic_edit): added support to edit in-memory
1133 1137 macros (automatically creates the necessary temp files). %edit
1134 1138 also doesn't return the file contents anymore, it's just noise.
1135 1139
1136 1140 * IPython/completer.py (Completer.attr_matches): revert change to
1137 1141 complete only on attributes listed in __all__. I realized it
1138 1142 cripples the tab-completion system as a tool for exploring the
1139 1143 internals of unknown libraries (it renders any non-__all__
1140 1144 attribute off-limits). I got bit by this when trying to see
1141 1145 something inside the dis module.
1142 1146
1143 1147 2005-12-31 Fernando Perez <Fernando.Perez@colorado.edu>
1144 1148
1145 1149 * IPython/iplib.py (InteractiveShell.__init__): add .meta
1146 1150 namespace for users and extension writers to hold data in. This
1147 1151 follows the discussion in
1148 1152 http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython.
1149 1153
1150 1154 * IPython/completer.py (IPCompleter.complete): small patch to help
1151 1155 tab-completion under Emacs, after a suggestion by John Barnard
1152 1156 <barnarj-AT-ccf.org>.
1153 1157
1154 1158 * IPython/Magic.py (Magic.extract_input_slices): added support for
1155 1159 the slice notation in magics to use N-M to represent numbers N...M
1156 1160 (closed endpoints). This is used by %macro and %save.
1157 1161
1158 1162 * IPython/completer.py (Completer.attr_matches): for modules which
1159 1163 define __all__, complete only on those. After a patch by Jeffrey
1160 1164 Collins <jcollins_boulder-AT-earthlink.net>. Also, clean up and
1161 1165 speed up this routine.
1162 1166
1163 1167 * IPython/Logger.py (Logger.log): fix a history handling bug. I
1164 1168 don't know if this is the end of it, but the behavior now is
1165 1169 certainly much more correct. Note that coupled with macros,
1166 1170 slightly surprising (at first) behavior may occur: a macro will in
1167 1171 general expand to multiple lines of input, so upon exiting, the
1168 1172 in/out counters will both be bumped by the corresponding amount
1169 1173 (as if the macro's contents had been typed interactively). Typing
1170 1174 %hist will reveal the intermediate (silently processed) lines.
1171 1175
1172 1176 * IPython/Magic.py (magic_run): fix a subtle bug which could cause
1173 1177 pickle to fail (%run was overwriting __main__ and not restoring
1174 1178 it, but pickle relies on __main__ to operate).
1175 1179
1176 1180 * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now
1177 1181 using properties, but forgot to make the main InteractiveShell
1178 1182 class a new-style class. Properties fail silently, and
1179 1183 mysteriously, with old-style class (getters work, but
1180 1184 setters don't do anything).
1181 1185
1182 1186 2005-12-30 Fernando Perez <Fernando.Perez@colorado.edu>
1183 1187
1184 1188 * IPython/Magic.py (magic_history): fix history reporting bug (I
1185 1189 know some nasties are still there, I just can't seem to find a
1186 1190 reproducible test case to track them down; the input history is
1187 1191 falling out of sync...)
1188 1192
1189 1193 * IPython/iplib.py (handle_shell_escape): fix bug where both
1190 1194 aliases and system accesses where broken for indented code (such
1191 1195 as loops).
1192 1196
1193 1197 * IPython/genutils.py (shell): fix small but critical bug for
1194 1198 win32 system access.
1195 1199
1196 1200 2005-12-29 Fernando Perez <Fernando.Perez@colorado.edu>
1197 1201
1198 1202 * IPython/iplib.py (showtraceback): remove use of the
1199 1203 sys.last_{type/value/traceback} structures, which are non
1200 1204 thread-safe.
1201 1205 (_prefilter): change control flow to ensure that we NEVER
1202 1206 introspect objects when autocall is off. This will guarantee that
1203 1207 having an input line of the form 'x.y', where access to attribute
1204 1208 'y' has side effects, doesn't trigger the side effect TWICE. It
1205 1209 is important to note that, with autocall on, these side effects
1206 1210 can still happen.
1207 1211 (ipsystem): new builtin, to complete the ip{magic/alias/system}
1208 1212 trio. IPython offers these three kinds of special calls which are
1209 1213 not python code, and it's a good thing to have their call method
1210 1214 be accessible as pure python functions (not just special syntax at
1211 1215 the command line). It gives us a better internal implementation
1212 1216 structure, as well as exposing these for user scripting more
1213 1217 cleanly.
1214 1218
1215 1219 * IPython/macro.py (Macro.__init__): moved macros to a standalone
1216 1220 file. Now that they'll be more likely to be used with the
1217 1221 persistance system (%store), I want to make sure their module path
1218 1222 doesn't change in the future, so that we don't break things for
1219 1223 users' persisted data.
1220 1224
1221 1225 * IPython/iplib.py (autoindent_update): move indentation
1222 1226 management into the _text_ processing loop, not the keyboard
1223 1227 interactive one. This is necessary to correctly process non-typed
1224 1228 multiline input (such as macros).
1225 1229
1226 1230 * IPython/Magic.py (Magic.format_latex): patch by Stefan van der
1227 1231 Walt <stefan-AT-sun.ac.za> to fix latex formatting of docstrings,
1228 1232 which was producing problems in the resulting manual.
1229 1233 (magic_whos): improve reporting of instances (show their class,
1230 1234 instead of simply printing 'instance' which isn't terribly
1231 1235 informative).
1232 1236
1233 1237 * IPython/genutils.py (shell): commit Jorgen Stenarson's patch
1234 1238 (minor mods) to support network shares under win32.
1235 1239
1236 1240 * IPython/winconsole.py (get_console_size): add new winconsole
1237 1241 module and fixes to page_dumb() to improve its behavior under
1238 1242 win32. Contributed by Alexander Belchenko <bialix-AT-ukr.net>.
1239 1243
1240 1244 * IPython/Magic.py (Macro): simplified Macro class to just
1241 1245 subclass list. We've had only 2.2 compatibility for a very long
1242 1246 time, yet I was still avoiding subclassing the builtin types. No
1243 1247 more (I'm also starting to use properties, though I won't shift to
1244 1248 2.3-specific features quite yet).
1245 1249 (magic_store): added Ville's patch for lightweight variable
1246 1250 persistence, after a request on the user list by Matt Wilkie
1247 1251 <maphew-AT-gmail.com>. The new %store magic's docstring has full
1248 1252 details.
1249 1253
1250 1254 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1251 1255 changed the default logfile name from 'ipython.log' to
1252 1256 'ipython_log.py'. These logs are real python files, and now that
1253 1257 we have much better multiline support, people are more likely to
1254 1258 want to use them as such. Might as well name them correctly.
1255 1259
1256 1260 * IPython/Magic.py: substantial cleanup. While we can't stop
1257 1261 using magics as mixins, due to the existing customizations 'out
1258 1262 there' which rely on the mixin naming conventions, at least I
1259 1263 cleaned out all cross-class name usage. So once we are OK with
1260 1264 breaking compatibility, the two systems can be separated.
1261 1265
1262 1266 * IPython/Logger.py: major cleanup. This one is NOT a mixin
1263 1267 anymore, and the class is a fair bit less hideous as well. New
1264 1268 features were also introduced: timestamping of input, and logging
1265 1269 of output results. These are user-visible with the -t and -o
1266 1270 options to %logstart. Closes
1267 1271 http://www.scipy.net/roundup/ipython/issue11 and a request by
1268 1272 William Stein (SAGE developer - http://modular.ucsd.edu/sage).
1269 1273
1270 1274 2005-12-28 Fernando Perez <Fernando.Perez@colorado.edu>
1271 1275
1272 1276 * IPython/iplib.py (handle_shell_escape): add Ville's patch to
1273 1277 better handle backslashes in paths. See the thread 'More Windows
1274 1278 questions part 2 - \/ characters revisited' on the iypthon user
1275 1279 list:
1276 1280 http://scipy.net/pipermail/ipython-user/2005-June/000907.html
1277 1281
1278 1282 (InteractiveShell.__init__): fix tab-completion bug in threaded shells.
1279 1283
1280 1284 (InteractiveShell.__init__): change threaded shells to not use the
1281 1285 ipython crash handler. This was causing more problems than not,
1282 1286 as exceptions in the main thread (GUI code, typically) would
1283 1287 always show up as a 'crash', when they really weren't.
1284 1288
1285 1289 The colors and exception mode commands (%colors/%xmode) have been
1286 1290 synchronized to also take this into account, so users can get
1287 1291 verbose exceptions for their threaded code as well. I also added
1288 1292 support for activating pdb inside this exception handler as well,
1289 1293 so now GUI authors can use IPython's enhanced pdb at runtime.
1290 1294
1291 1295 * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag
1292 1296 true by default, and add it to the shipped ipythonrc file. Since
1293 1297 this asks the user before proceeding, I think it's OK to make it
1294 1298 true by default.
1295 1299
1296 1300 * IPython/Magic.py (magic_exit): make new exit/quit magics instead
1297 1301 of the previous special-casing of input in the eval loop. I think
1298 1302 this is cleaner, as they really are commands and shouldn't have
1299 1303 a special role in the middle of the core code.
1300 1304
1301 1305 2005-12-27 Fernando Perez <Fernando.Perez@colorado.edu>
1302 1306
1303 1307 * IPython/iplib.py (edit_syntax_error): added support for
1304 1308 automatically reopening the editor if the file had a syntax error
1305 1309 in it. Thanks to scottt who provided the patch at:
1306 1310 http://www.scipy.net/roundup/ipython/issue36 (slightly modified
1307 1311 version committed).
1308 1312
1309 1313 * IPython/iplib.py (handle_normal): add suport for multi-line
1310 1314 input with emtpy lines. This fixes
1311 1315 http://www.scipy.net/roundup/ipython/issue43 and a similar
1312 1316 discussion on the user list.
1313 1317
1314 1318 WARNING: a behavior change is necessarily introduced to support
1315 1319 blank lines: now a single blank line with whitespace does NOT
1316 1320 break the input loop, which means that when autoindent is on, by
1317 1321 default hitting return on the next (indented) line does NOT exit.
1318 1322
1319 1323 Instead, to exit a multiline input you can either have:
1320 1324
1321 1325 - TWO whitespace lines (just hit return again), or
1322 1326 - a single whitespace line of a different length than provided
1323 1327 by the autoindent (add or remove a space).
1324 1328
1325 1329 * IPython/completer.py (MagicCompleter.__init__): new 'completer'
1326 1330 module to better organize all readline-related functionality.
1327 1331 I've deleted FlexCompleter and put all completion clases here.
1328 1332
1329 1333 * IPython/iplib.py (raw_input): improve indentation management.
1330 1334 It is now possible to paste indented code with autoindent on, and
1331 1335 the code is interpreted correctly (though it still looks bad on
1332 1336 screen, due to the line-oriented nature of ipython).
1333 1337 (MagicCompleter.complete): change behavior so that a TAB key on an
1334 1338 otherwise empty line actually inserts a tab, instead of completing
1335 1339 on the entire global namespace. This makes it easier to use the
1336 1340 TAB key for indentation. After a request by Hans Meine
1337 1341 <hans_meine-AT-gmx.net>
1338 1342 (_prefilter): add support so that typing plain 'exit' or 'quit'
1339 1343 does a sensible thing. Originally I tried to deviate as little as
1340 1344 possible from the default python behavior, but even that one may
1341 1345 change in this direction (thread on python-dev to that effect).
1342 1346 Regardless, ipython should do the right thing even if CPython's
1343 1347 '>>>' prompt doesn't.
1344 1348 (InteractiveShell): removed subclassing code.InteractiveConsole
1345 1349 class. By now we'd overridden just about all of its methods: I've
1346 1350 copied the remaining two over, and now ipython is a standalone
1347 1351 class. This will provide a clearer picture for the chainsaw
1348 1352 branch refactoring.
1349 1353
1350 1354 2005-12-26 Fernando Perez <Fernando.Perez@colorado.edu>
1351 1355
1352 1356 * IPython/ultraTB.py (VerboseTB.text): harden reporting against
1353 1357 failures for objects which break when dir() is called on them.
1354 1358
1355 1359 * IPython/FlexCompleter.py (Completer.__init__): Added support for
1356 1360 distinct local and global namespaces in the completer API. This
1357 1361 change allows us to properly handle completion with distinct
1358 1362 scopes, including in embedded instances (this had never really
1359 1363 worked correctly).
1360 1364
1361 1365 Note: this introduces a change in the constructor for
1362 1366 MagicCompleter, as a new global_namespace parameter is now the
1363 1367 second argument (the others were bumped one position).
1364 1368
1365 1369 2005-12-25 Fernando Perez <Fernando.Perez@colorado.edu>
1366 1370
1367 1371 * IPython/iplib.py (embed_mainloop): fix tab-completion in
1368 1372 embedded instances (which can be done now thanks to Vivian's
1369 1373 frame-handling fixes for pdb).
1370 1374 (InteractiveShell.__init__): Fix namespace handling problem in
1371 1375 embedded instances. We were overwriting __main__ unconditionally,
1372 1376 and this should only be done for 'full' (non-embedded) IPython;
1373 1377 embedded instances must respect the caller's __main__. Thanks to
1374 1378 a bug report by Yaroslav Bulatov <yaroslavvb-AT-gmail.com>
1375 1379
1376 1380 2005-12-24 Fernando Perez <Fernando.Perez@colorado.edu>
1377 1381
1378 1382 * setup.py: added download_url to setup(). This registers the
1379 1383 download address at PyPI, which is not only useful to humans
1380 1384 browsing the site, but is also picked up by setuptools (the Eggs
1381 1385 machinery). Thanks to Ville and R. Kern for the info/discussion
1382 1386 on this.
1383 1387
1384 1388 2005-12-23 Fernando Perez <Fernando.Perez@colorado.edu>
1385 1389
1386 1390 * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements.
1387 1391 This brings a lot of nice functionality to the pdb mode, which now
1388 1392 has tab-completion, syntax highlighting, and better stack handling
1389 1393 than before. Many thanks to Vivian De Smedt
1390 1394 <vivian-AT-vdesmedt.com> for the original patches.
1391 1395
1392 1396 2005-12-08 Fernando Perez <Fernando.Perez@colorado.edu>
1393 1397
1394 1398 * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling
1395 1399 sequence to consistently accept the banner argument. The
1396 1400 inconsistency was tripping SAGE, thanks to Gary Zablackis
1397 1401 <gzabl-AT-yahoo.com> for the report.
1398 1402
1399 1403 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1400 1404
1401 1405 * IPython/iplib.py (InteractiveShell.post_config_initialization):
1402 1406 Fix bug where a naked 'alias' call in the ipythonrc file would
1403 1407 cause a crash. Bug reported by Jorgen Stenarson.
1404 1408
1405 1409 2005-11-15 Fernando Perez <Fernando.Perez@colorado.edu>
1406 1410
1407 1411 * IPython/ipmaker.py (make_IPython): cleanups which should improve
1408 1412 startup time.
1409 1413
1410 1414 * IPython/iplib.py (runcode): my globals 'fix' for embedded
1411 1415 instances had introduced a bug with globals in normal code. Now
1412 1416 it's working in all cases.
1413 1417
1414 1418 * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and
1415 1419 API changes. A new ipytonrc option, 'wildcards_case_sensitive'
1416 1420 has been introduced to set the default case sensitivity of the
1417 1421 searches. Users can still select either mode at runtime on a
1418 1422 per-search basis.
1419 1423
1420 1424 2005-11-13 Fernando Perez <Fernando.Perez@colorado.edu>
1421 1425
1422 1426 * IPython/wildcard.py (NameSpace.__init__): fix resolution of
1423 1427 attributes in wildcard searches for subclasses. Modified version
1424 1428 of a patch by Jorgen.
1425 1429
1426 1430 2005-11-12 Fernando Perez <Fernando.Perez@colorado.edu>
1427 1431
1428 1432 * IPython/iplib.py (embed_mainloop): Fix handling of globals for
1429 1433 embedded instances. I added a user_global_ns attribute to the
1430 1434 InteractiveShell class to handle this.
1431 1435
1432 1436 2005-10-31 Fernando Perez <Fernando.Perez@colorado.edu>
1433 1437
1434 1438 * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to
1435 1439 idle_add, which fixes horrible keyboard lag problems under gtk 2.6
1436 1440 (reported under win32, but may happen also in other platforms).
1437 1441 Bug report and fix courtesy of Sean Moore <smm-AT-logic.bm>
1438 1442
1439 1443 2005-10-15 Fernando Perez <Fernando.Perez@colorado.edu>
1440 1444
1441 1445 * IPython/Magic.py (magic_psearch): new support for wildcard
1442 1446 patterns. Now, typing ?a*b will list all names which begin with a
1443 1447 and end in b, for example. The %psearch magic has full
1444 1448 docstrings. Many thanks to JΓΆrgen Stenarson
1445 1449 <jorgen.stenarson-AT-bostream.nu>, author of the patches
1446 1450 implementing this functionality.
1447 1451
1448 1452 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1449 1453
1450 1454 * Manual: fixed long-standing annoyance of double-dashes (as in
1451 1455 --prefix=~, for example) being stripped in the HTML version. This
1452 1456 is a latex2html bug, but a workaround was provided. Many thanks
1453 1457 to George K. Thiruvathukal <gthiruv-AT-luc.edu> for the detailed
1454 1458 help, and Michael Tobis <mtobis-AT-gmail.com> for getting the ball
1455 1459 rolling. This seemingly small issue had tripped a number of users
1456 1460 when first installing, so I'm glad to see it gone.
1457 1461
1458 1462 2005-09-27 Fernando Perez <Fernando.Perez@colorado.edu>
1459 1463
1460 1464 * IPython/Extensions/numeric_formats.py: fix missing import,
1461 1465 reported by Stephen Walton.
1462 1466
1463 1467 2005-09-24 Fernando Perez <Fernando.Perez@colorado.edu>
1464 1468
1465 1469 * IPython/demo.py: finish demo module, fully documented now.
1466 1470
1467 1471 * IPython/genutils.py (file_read): simple little utility to read a
1468 1472 file and ensure it's closed afterwards.
1469 1473
1470 1474 2005-09-23 Fernando Perez <Fernando.Perez@colorado.edu>
1471 1475
1472 1476 * IPython/demo.py (Demo.__init__): added support for individually
1473 1477 tagging blocks for automatic execution.
1474 1478
1475 1479 * IPython/Magic.py (magic_pycat): new %pycat magic for showing
1476 1480 syntax-highlighted python sources, requested by John.
1477 1481
1478 1482 2005-09-22 Fernando Perez <Fernando.Perez@colorado.edu>
1479 1483
1480 1484 * IPython/demo.py (Demo.again): fix bug where again() blocks after
1481 1485 finishing.
1482 1486
1483 1487 * IPython/genutils.py (shlex_split): moved from Magic to here,
1484 1488 where all 2.2 compatibility stuff lives. I needed it for demo.py.
1485 1489
1486 1490 * IPython/demo.py (Demo.__init__): added support for silent
1487 1491 blocks, improved marks as regexps, docstrings written.
1488 1492 (Demo.__init__): better docstring, added support for sys.argv.
1489 1493
1490 1494 * IPython/genutils.py (marquee): little utility used by the demo
1491 1495 code, handy in general.
1492 1496
1493 1497 * IPython/demo.py (Demo.__init__): new class for interactive
1494 1498 demos. Not documented yet, I just wrote it in a hurry for
1495 1499 scipy'05. Will docstring later.
1496 1500
1497 1501 2005-09-20 Fernando Perez <Fernando.Perez@colorado.edu>
1498 1502
1499 1503 * IPython/Shell.py (sigint_handler): Drastic simplification which
1500 1504 also seems to make Ctrl-C work correctly across threads! This is
1501 1505 so simple, that I can't beleive I'd missed it before. Needs more
1502 1506 testing, though.
1503 1507 (KBINT): Never mind, revert changes. I'm sure I'd tried something
1504 1508 like this before...
1505 1509
1506 1510 * IPython/genutils.py (get_home_dir): add protection against
1507 1511 non-dirs in win32 registry.
1508 1512
1509 1513 * IPython/iplib.py (InteractiveShell.alias_table_validate): fix
1510 1514 bug where dict was mutated while iterating (pysh crash).
1511 1515
1512 1516 2005-09-06 Fernando Perez <Fernando.Perez@colorado.edu>
1513 1517
1514 1518 * IPython/iplib.py (handle_auto): Fix inconsistency arising from
1515 1519 spurious newlines added by this routine. After a report by
1516 1520 F. Mantegazza.
1517 1521
1518 1522 2005-09-05 Fernando Perez <Fernando.Perez@colorado.edu>
1519 1523
1520 1524 * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0")
1521 1525 calls. These were a leftover from the GTK 1.x days, and can cause
1522 1526 problems in certain cases (after a report by John Hunter).
1523 1527
1524 1528 * IPython/iplib.py (InteractiveShell.__init__): Trap exception if
1525 1529 os.getcwd() fails at init time. Thanks to patch from David Remahl
1526 1530 <chmod007-AT-mac.com>.
1527 1531 (InteractiveShell.__init__): prevent certain special magics from
1528 1532 being shadowed by aliases. Closes
1529 1533 http://www.scipy.net/roundup/ipython/issue41.
1530 1534
1531 1535 2005-08-31 Fernando Perez <Fernando.Perez@colorado.edu>
1532 1536
1533 1537 * IPython/iplib.py (InteractiveShell.complete): Added new
1534 1538 top-level completion method to expose the completion mechanism
1535 1539 beyond readline-based environments.
1536 1540
1537 1541 2005-08-19 Fernando Perez <Fernando.Perez@colorado.edu>
1538 1542
1539 1543 * tools/ipsvnc (svnversion): fix svnversion capture.
1540 1544
1541 1545 * IPython/iplib.py (InteractiveShell.__init__): Add has_readline
1542 1546 attribute to self, which was missing. Before, it was set by a
1543 1547 routine which in certain cases wasn't being called, so the
1544 1548 instance could end up missing the attribute. This caused a crash.
1545 1549 Closes http://www.scipy.net/roundup/ipython/issue40.
1546 1550
1547 1551 2005-08-16 Fernando Perez <fperez@colorado.edu>
1548 1552
1549 1553 * IPython/ultraTB.py (VerboseTB.text): don't crash if object
1550 1554 contains non-string attribute. Closes
1551 1555 http://www.scipy.net/roundup/ipython/issue38.
1552 1556
1553 1557 2005-08-14 Fernando Perez <fperez@colorado.edu>
1554 1558
1555 1559 * tools/ipsvnc: Minor improvements, to add changeset info.
1556 1560
1557 1561 2005-08-12 Fernando Perez <fperez@colorado.edu>
1558 1562
1559 1563 * IPython/iplib.py (runsource): remove self.code_to_run_src
1560 1564 attribute. I realized this is nothing more than
1561 1565 '\n'.join(self.buffer), and having the same data in two different
1562 1566 places is just asking for synchronization bugs. This may impact
1563 1567 people who have custom exception handlers, so I need to warn
1564 1568 ipython-dev about it (F. Mantegazza may use them).
1565 1569
1566 1570 2005-07-29 Fernando Perez <Fernando.Perez@colorado.edu>
1567 1571
1568 1572 * IPython/genutils.py: fix 2.2 compatibility (generators)
1569 1573
1570 1574 2005-07-18 Fernando Perez <fperez@colorado.edu>
1571 1575
1572 1576 * IPython/genutils.py (get_home_dir): fix to help users with
1573 1577 invalid $HOME under win32.
1574 1578
1575 1579 2005-07-17 Fernando Perez <fperez@colorado.edu>
1576 1580
1577 1581 * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove
1578 1582 some old hacks and clean up a bit other routines; code should be
1579 1583 simpler and a bit faster.
1580 1584
1581 1585 * IPython/iplib.py (interact): removed some last-resort attempts
1582 1586 to survive broken stdout/stderr. That code was only making it
1583 1587 harder to abstract out the i/o (necessary for gui integration),
1584 1588 and the crashes it could prevent were extremely rare in practice
1585 1589 (besides being fully user-induced in a pretty violent manner).
1586 1590
1587 1591 * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff.
1588 1592 Nothing major yet, but the code is simpler to read; this should
1589 1593 make it easier to do more serious modifications in the future.
1590 1594
1591 1595 * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh,
1592 1596 which broke in .15 (thanks to a report by Ville).
1593 1597
1594 1598 * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not
1595 1599 be quite correct, I know next to nothing about unicode). This
1596 1600 will allow unicode strings to be used in prompts, amongst other
1597 1601 cases. It also will prevent ipython from crashing when unicode
1598 1602 shows up unexpectedly in many places. If ascii encoding fails, we
1599 1603 assume utf_8. Currently the encoding is not a user-visible
1600 1604 setting, though it could be made so if there is demand for it.
1601 1605
1602 1606 * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack.
1603 1607
1604 1608 * IPython/Struct.py (Struct.merge): switch keys() to iterator.
1605 1609
1606 1610 * IPython/background_jobs.py: moved 2.2 compatibility to genutils.
1607 1611
1608 1612 * IPython/genutils.py: Add 2.2 compatibility here, so all other
1609 1613 code can work transparently for 2.2/2.3.
1610 1614
1611 1615 2005-07-16 Fernando Perez <fperez@colorado.edu>
1612 1616
1613 1617 * IPython/ultraTB.py (ExceptionColors): Make a global variable
1614 1618 out of the color scheme table used for coloring exception
1615 1619 tracebacks. This allows user code to add new schemes at runtime.
1616 1620 This is a minimally modified version of the patch at
1617 1621 http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw
1618 1622 for the contribution.
1619 1623
1620 1624 * IPython/FlexCompleter.py (Completer.attr_matches): Add a
1621 1625 slightly modified version of the patch in
1622 1626 http://www.scipy.net/roundup/ipython/issue34, which also allows me
1623 1627 to remove the previous try/except solution (which was costlier).
1624 1628 Thanks to Gaetan Lehmann <gaetan.lehmann-AT-jouy.inra.fr> for the fix.
1625 1629
1626 1630 2005-06-08 Fernando Perez <fperez@colorado.edu>
1627 1631
1628 1632 * IPython/iplib.py (write/write_err): Add methods to abstract all
1629 1633 I/O a bit more.
1630 1634
1631 1635 * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation
1632 1636 warning, reported by Aric Hagberg, fix by JD Hunter.
1633 1637
1634 1638 2005-06-02 *** Released version 0.6.15
1635 1639
1636 1640 2005-06-01 Fernando Perez <fperez@colorado.edu>
1637 1641
1638 1642 * IPython/iplib.py (MagicCompleter.file_matches): Fix
1639 1643 tab-completion of filenames within open-quoted strings. Note that
1640 1644 this requires that in ~/.ipython/ipythonrc, users change the
1641 1645 readline delimiters configuration to read:
1642 1646
1643 1647 readline_remove_delims -/~
1644 1648
1645 1649
1646 1650 2005-05-31 *** Released version 0.6.14
1647 1651
1648 1652 2005-05-29 Fernando Perez <fperez@colorado.edu>
1649 1653
1650 1654 * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks
1651 1655 with files not on the filesystem. Reported by Eliyahu Sandler
1652 1656 <eli@gondolin.net>
1653 1657
1654 1658 2005-05-22 Fernando Perez <fperez@colorado.edu>
1655 1659
1656 1660 * IPython/iplib.py: Fix a few crashes in the --upgrade option.
1657 1661 After an initial report by LUK ShunTim <shuntim.luk@polyu.edu.hk>.
1658 1662
1659 1663 2005-05-19 Fernando Perez <fperez@colorado.edu>
1660 1664
1661 1665 * IPython/iplib.py (safe_execfile): close a file which could be
1662 1666 left open (causing problems in win32, which locks open files).
1663 1667 Thanks to a bug report by D Brown <dbrown2@yahoo.com>.
1664 1668
1665 1669 2005-05-18 Fernando Perez <fperez@colorado.edu>
1666 1670
1667 1671 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all
1668 1672 keyword arguments correctly to safe_execfile().
1669 1673
1670 1674 2005-05-13 Fernando Perez <fperez@colorado.edu>
1671 1675
1672 1676 * ipython.1: Added info about Qt to manpage, and threads warning
1673 1677 to usage page (invoked with --help).
1674 1678
1675 1679 * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added
1676 1680 new matcher (it goes at the end of the priority list) to do
1677 1681 tab-completion on named function arguments. Submitted by George
1678 1682 Sakkis <gsakkis-AT-eden.rutgers.edu>. See the thread at
1679 1683 http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html
1680 1684 for more details.
1681 1685
1682 1686 * IPython/Magic.py (magic_run): Added new -e flag to ignore
1683 1687 SystemExit exceptions in the script being run. Thanks to a report
1684 1688 by danny shevitz <danny_shevitz-AT-yahoo.com>, about this
1685 1689 producing very annoying behavior when running unit tests.
1686 1690
1687 1691 2005-05-12 Fernando Perez <fperez@colorado.edu>
1688 1692
1689 1693 * IPython/iplib.py (handle_auto): fixed auto-quoting and parens,
1690 1694 which I'd broken (again) due to a changed regexp. In the process,
1691 1695 added ';' as an escape to auto-quote the whole line without
1692 1696 splitting its arguments. Thanks to a report by Jerry McRae
1693 1697 <qrs0xyc02-AT-sneakemail.com>.
1694 1698
1695 1699 * IPython/ultraTB.py (VerboseTB.text): protect against rare but
1696 1700 possible crashes caused by a TokenError. Reported by Ed Schofield
1697 1701 <schofield-AT-ftw.at>.
1698 1702
1699 1703 2005-05-06 Fernando Perez <fperez@colorado.edu>
1700 1704
1701 1705 * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6.
1702 1706
1703 1707 2005-04-29 Fernando Perez <fperez@colorado.edu>
1704 1708
1705 1709 * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière
1706 1710 <nudz-AT-free.fr>, Yann Cointepas <yann-AT-sapetnioc.org> and Benjamin
1707 1711 Thyreau <Benji2-AT-decideur.info>, we now have a -qthread option
1708 1712 which provides support for Qt interactive usage (similar to the
1709 1713 existing one for WX and GTK). This had been often requested.
1710 1714
1711 1715 2005-04-14 *** Released version 0.6.13
1712 1716
1713 1717 2005-04-08 Fernando Perez <fperez@colorado.edu>
1714 1718
1715 1719 * IPython/Magic.py (Magic._ofind): remove docstring evaluation
1716 1720 from _ofind, which gets called on almost every input line. Now,
1717 1721 we only try to get docstrings if they are actually going to be
1718 1722 used (the overhead of fetching unnecessary docstrings can be
1719 1723 noticeable for certain objects, such as Pyro proxies).
1720 1724
1721 1725 * IPython/iplib.py (MagicCompleter.python_matches): Change the API
1722 1726 for completers. For some reason I had been passing them the state
1723 1727 variable, which completers never actually need, and was in
1724 1728 conflict with the rlcompleter API. Custom completers ONLY need to
1725 1729 take the text parameter.
1726 1730
1727 1731 * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics
1728 1732 work correctly in pysh. I've also moved all the logic which used
1729 1733 to be in pysh.py here, which will prevent problems with future
1730 1734 upgrades. However, this time I must warn users to update their
1731 1735 pysh profile to include the line
1732 1736
1733 1737 import_all IPython.Extensions.InterpreterExec
1734 1738
1735 1739 because otherwise things won't work for them. They MUST also
1736 1740 delete pysh.py and the line
1737 1741
1738 1742 execfile pysh.py
1739 1743
1740 1744 from their ipythonrc-pysh.
1741 1745
1742 1746 * IPython/FlexCompleter.py (Completer.attr_matches): Make more
1743 1747 robust in the face of objects whose dir() returns non-strings
1744 1748 (which it shouldn't, but some broken libs like ITK do). Thanks to
1745 1749 a patch by John Hunter (implemented differently, though). Also
1746 1750 minor improvements by using .extend instead of + on lists.
1747 1751
1748 1752 * pysh.py:
1749 1753
1750 1754 2005-04-06 Fernando Perez <fperez@colorado.edu>
1751 1755
1752 1756 * IPython/ipmaker.py (make_IPython): Make multi_line_specials on
1753 1757 by default, so that all users benefit from it. Those who don't
1754 1758 want it can still turn it off.
1755 1759
1756 1760 * IPython/UserConfig/ipythonrc: Add multi_line_specials to the
1757 1761 config file, I'd forgotten about this, so users were getting it
1758 1762 off by default.
1759 1763
1760 1764 * IPython/iplib.py (ipmagic): big overhaul of the magic system for
1761 1765 consistency. Now magics can be called in multiline statements,
1762 1766 and python variables can be expanded in magic calls via $var.
1763 1767 This makes the magic system behave just like aliases or !system
1764 1768 calls.
1765 1769
1766 1770 2005-03-28 Fernando Perez <fperez@colorado.edu>
1767 1771
1768 1772 * IPython/iplib.py (handle_auto): cleanup to use %s instead of
1769 1773 expensive string additions for building command. Add support for
1770 1774 trailing ';' when autocall is used.
1771 1775
1772 1776 2005-03-26 Fernando Perez <fperez@colorado.edu>
1773 1777
1774 1778 * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31.
1775 1779 Bugfix by A. Schmolck, the ipython.el maintainer. Also make
1776 1780 ipython.el robust against prompts with any number of spaces
1777 1781 (including 0) after the ':' character.
1778 1782
1779 1783 * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in
1780 1784 continuation prompt, which misled users to think the line was
1781 1785 already indented. Closes debian Bug#300847, reported to me by
1782 1786 Norbert Tretkowski <tretkowski-AT-inittab.de>.
1783 1787
1784 1788 2005-03-23 Fernando Perez <fperez@colorado.edu>
1785 1789
1786 1790 * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are
1787 1791 properly aligned if they have embedded newlines.
1788 1792
1789 1793 * IPython/iplib.py (runlines): Add a public method to expose
1790 1794 IPython's code execution machinery, so that users can run strings
1791 1795 as if they had been typed at the prompt interactively.
1792 1796 (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__
1793 1797 methods which can call the system shell, but with python variable
1794 1798 expansion. The three such methods are: __IPYTHON__.system,
1795 1799 .getoutput and .getoutputerror. These need to be documented in a
1796 1800 'public API' section (to be written) of the manual.
1797 1801
1798 1802 2005-03-20 Fernando Perez <fperez@colorado.edu>
1799 1803
1800 1804 * IPython/iplib.py (InteractiveShell.set_custom_exc): new system
1801 1805 for custom exception handling. This is quite powerful, and it
1802 1806 allows for user-installable exception handlers which can trap
1803 1807 custom exceptions at runtime and treat them separately from
1804 1808 IPython's default mechanisms. At the request of FrΓ©dΓ©ric
1805 1809 Mantegazza <mantegazza-AT-ill.fr>.
1806 1810 (InteractiveShell.set_custom_completer): public API function to
1807 1811 add new completers at runtime.
1808 1812
1809 1813 2005-03-19 Fernando Perez <fperez@colorado.edu>
1810 1814
1811 1815 * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to
1812 1816 allow objects which provide their docstrings via non-standard
1813 1817 mechanisms (like Pyro proxies) to still be inspected by ipython's
1814 1818 ? system.
1815 1819
1816 1820 * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e
1817 1821 automatic capture system. I tried quite hard to make it work
1818 1822 reliably, and simply failed. I tried many combinations with the
1819 1823 subprocess module, but eventually nothing worked in all needed
1820 1824 cases (not blocking stdin for the child, duplicating stdout
1821 1825 without blocking, etc). The new %sc/%sx still do capture to these
1822 1826 magical list/string objects which make shell use much more
1823 1827 conveninent, so not all is lost.
1824 1828
1825 1829 XXX - FIX MANUAL for the change above!
1826 1830
1827 1831 (runsource): I copied code.py's runsource() into ipython to modify
1828 1832 it a bit. Now the code object and source to be executed are
1829 1833 stored in ipython. This makes this info accessible to third-party
1830 1834 tools, like custom exception handlers. After a request by FrΓ©dΓ©ric
1831 1835 Mantegazza <mantegazza-AT-ill.fr>.
1832 1836
1833 1837 * IPython/UserConfig/ipythonrc: Add up/down arrow keys to
1834 1838 history-search via readline (like C-p/C-n). I'd wanted this for a
1835 1839 long time, but only recently found out how to do it. For users
1836 1840 who already have their ipythonrc files made and want this, just
1837 1841 add:
1838 1842
1839 1843 readline_parse_and_bind "\e[A": history-search-backward
1840 1844 readline_parse_and_bind "\e[B": history-search-forward
1841 1845
1842 1846 2005-03-18 Fernando Perez <fperez@colorado.edu>
1843 1847
1844 1848 * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy
1845 1849 LSString and SList classes which allow transparent conversions
1846 1850 between list mode and whitespace-separated string.
1847 1851 (magic_r): Fix recursion problem in %r.
1848 1852
1849 1853 * IPython/genutils.py (LSString): New class to be used for
1850 1854 automatic storage of the results of all alias/system calls in _o
1851 1855 and _e (stdout/err). These provide a .l/.list attribute which
1852 1856 does automatic splitting on newlines. This means that for most
1853 1857 uses, you'll never need to do capturing of output with %sc/%sx
1854 1858 anymore, since ipython keeps this always done for you. Note that
1855 1859 only the LAST results are stored, the _o/e variables are
1856 1860 overwritten on each call. If you need to save their contents
1857 1861 further, simply bind them to any other name.
1858 1862
1859 1863 2005-03-17 Fernando Perez <fperez@colorado.edu>
1860 1864
1861 1865 * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for
1862 1866 prompt namespace handling.
1863 1867
1864 1868 2005-03-16 Fernando Perez <fperez@colorado.edu>
1865 1869
1866 1870 * IPython/Prompts.py (CachedOutput.__init__): Fix default and
1867 1871 classic prompts to be '>>> ' (final space was missing, and it
1868 1872 trips the emacs python mode).
1869 1873 (BasePrompt.__str__): Added safe support for dynamic prompt
1870 1874 strings. Now you can set your prompt string to be '$x', and the
1871 1875 value of x will be printed from your interactive namespace. The
1872 1876 interpolation syntax includes the full Itpl support, so
1873 1877 ${foo()+x+bar()} is a valid prompt string now, and the function
1874 1878 calls will be made at runtime.
1875 1879
1876 1880 2005-03-15 Fernando Perez <fperez@colorado.edu>
1877 1881
1878 1882 * IPython/Magic.py (magic_history): renamed %hist to %history, to
1879 1883 avoid name clashes in pylab. %hist still works, it just forwards
1880 1884 the call to %history.
1881 1885
1882 1886 2005-03-02 *** Released version 0.6.12
1883 1887
1884 1888 2005-03-02 Fernando Perez <fperez@colorado.edu>
1885 1889
1886 1890 * IPython/iplib.py (handle_magic): log magic calls properly as
1887 1891 ipmagic() function calls.
1888 1892
1889 1893 * IPython/Magic.py (magic_time): Improved %time to support
1890 1894 statements and provide wall-clock as well as CPU time.
1891 1895
1892 1896 2005-02-27 Fernando Perez <fperez@colorado.edu>
1893 1897
1894 1898 * IPython/hooks.py: New hooks module, to expose user-modifiable
1895 1899 IPython functionality in a clean manner. For now only the editor
1896 1900 hook is actually written, and other thigns which I intend to turn
1897 1901 into proper hooks aren't yet there. The display and prefilter
1898 1902 stuff, for example, should be hooks. But at least now the
1899 1903 framework is in place, and the rest can be moved here with more
1900 1904 time later. IPython had had a .hooks variable for a long time for
1901 1905 this purpose, but I'd never actually used it for anything.
1902 1906
1903 1907 2005-02-26 Fernando Perez <fperez@colorado.edu>
1904 1908
1905 1909 * IPython/ipmaker.py (make_IPython): make the default ipython
1906 1910 directory be called _ipython under win32, to follow more the
1907 1911 naming peculiarities of that platform (where buggy software like
1908 1912 Visual Sourcesafe breaks with .named directories). Reported by
1909 1913 Ville Vainio.
1910 1914
1911 1915 2005-02-23 Fernando Perez <fperez@colorado.edu>
1912 1916
1913 1917 * IPython/iplib.py (InteractiveShell.__init__): removed a few
1914 1918 auto_aliases for win32 which were causing problems. Users can
1915 1919 define the ones they personally like.
1916 1920
1917 1921 2005-02-21 Fernando Perez <fperez@colorado.edu>
1918 1922
1919 1923 * IPython/Magic.py (magic_time): new magic to time execution of
1920 1924 expressions. After a request by Charles Moad <cmoad-AT-indiana.edu>.
1921 1925
1922 1926 2005-02-19 Fernando Perez <fperez@colorado.edu>
1923 1927
1924 1928 * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings
1925 1929 into keys (for prompts, for example).
1926 1930
1927 1931 * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty
1928 1932 prompts in case users want them. This introduces a small behavior
1929 1933 change: ipython does not automatically add a space to all prompts
1930 1934 anymore. To get the old prompts with a space, users should add it
1931 1935 manually to their ipythonrc file, so for example prompt_in1 should
1932 1936 now read 'In [\#]: ' instead of 'In [\#]:'.
1933 1937 (BasePrompt.__init__): New option prompts_pad_left (only in rc
1934 1938 file) to control left-padding of secondary prompts.
1935 1939
1936 1940 * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if
1937 1941 the profiler can't be imported. Fix for Debian, which removed
1938 1942 profile.py because of License issues. I applied a slightly
1939 1943 modified version of the original Debian patch at
1940 1944 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500.
1941 1945
1942 1946 2005-02-17 Fernando Perez <fperez@colorado.edu>
1943 1947
1944 1948 * IPython/genutils.py (native_line_ends): Fix bug which would
1945 1949 cause improper line-ends under win32 b/c I was not opening files
1946 1950 in binary mode. Bug report and fix thanks to Ville.
1947 1951
1948 1952 * IPython/iplib.py (handle_auto): Fix bug which I introduced when
1949 1953 trying to catch spurious foo[1] autocalls. My fix actually broke
1950 1954 ',/' autoquote/call with explicit escape (bad regexp).
1951 1955
1952 1956 2005-02-15 *** Released version 0.6.11
1953 1957
1954 1958 2005-02-14 Fernando Perez <fperez@colorado.edu>
1955 1959
1956 1960 * IPython/background_jobs.py: New background job management
1957 1961 subsystem. This is implemented via a new set of classes, and
1958 1962 IPython now provides a builtin 'jobs' object for background job
1959 1963 execution. A convenience %bg magic serves as a lightweight
1960 1964 frontend for starting the more common type of calls. This was
1961 1965 inspired by discussions with B. Granger and the BackgroundCommand
1962 1966 class described in the book Python Scripting for Computational
1963 1967 Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting
1964 1968 (although ultimately no code from this text was used, as IPython's
1965 1969 system is a separate implementation).
1966 1970
1967 1971 * IPython/iplib.py (MagicCompleter.python_matches): add new option
1968 1972 to control the completion of single/double underscore names
1969 1973 separately. As documented in the example ipytonrc file, the
1970 1974 readline_omit__names variable can now be set to 2, to omit even
1971 1975 single underscore names. Thanks to a patch by Brian Wong
1972 1976 <BrianWong-AT-AirgoNetworks.Com>.
1973 1977 (InteractiveShell.__init__): Fix bug which would cause foo[1] to
1974 1978 be autocalled as foo([1]) if foo were callable. A problem for
1975 1979 things which are both callable and implement __getitem__.
1976 1980 (init_readline): Fix autoindentation for win32. Thanks to a patch
1977 1981 by Vivian De Smedt <vivian-AT-vdesmedt.com>.
1978 1982
1979 1983 2005-02-12 Fernando Perez <fperez@colorado.edu>
1980 1984
1981 1985 * IPython/ipmaker.py (make_IPython): Disabled the stout traps
1982 1986 which I had written long ago to sort out user error messages which
1983 1987 may occur during startup. This seemed like a good idea initially,
1984 1988 but it has proven a disaster in retrospect. I don't want to
1985 1989 change much code for now, so my fix is to set the internal 'debug'
1986 1990 flag to true everywhere, whose only job was precisely to control
1987 1991 this subsystem. This closes issue 28 (as well as avoiding all
1988 1992 sorts of strange hangups which occur from time to time).
1989 1993
1990 1994 2005-02-07 Fernando Perez <fperez@colorado.edu>
1991 1995
1992 1996 * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the
1993 1997 previous call produced a syntax error.
1994 1998
1995 1999 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
1996 2000 classes without constructor.
1997 2001
1998 2002 2005-02-06 Fernando Perez <fperez@colorado.edu>
1999 2003
2000 2004 * IPython/iplib.py (MagicCompleter.complete): Extend the list of
2001 2005 completions with the results of each matcher, so we return results
2002 2006 to the user from all namespaces. This breaks with ipython
2003 2007 tradition, but I think it's a nicer behavior. Now you get all
2004 2008 possible completions listed, from all possible namespaces (python,
2005 2009 filesystem, magics...) After a request by John Hunter
2006 2010 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2007 2011
2008 2012 2005-02-05 Fernando Perez <fperez@colorado.edu>
2009 2013
2010 2014 * IPython/Magic.py (magic_prun): Fix bug where prun would fail if
2011 2015 the call had quote characters in it (the quotes were stripped).
2012 2016
2013 2017 2005-01-31 Fernando Perez <fperez@colorado.edu>
2014 2018
2015 2019 * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on
2016 2020 Itpl.itpl() to make the code more robust against psyco
2017 2021 optimizations.
2018 2022
2019 2023 * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead
2020 2024 of causing an exception. Quicker, cleaner.
2021 2025
2022 2026 2005-01-28 Fernando Perez <fperez@colorado.edu>
2023 2027
2024 2028 * scripts/ipython_win_post_install.py (install): hardcode
2025 2029 sys.prefix+'python.exe' as the executable path. It turns out that
2026 2030 during the post-installation run, sys.executable resolves to the
2027 2031 name of the binary installer! I should report this as a distutils
2028 2032 bug, I think. I updated the .10 release with this tiny fix, to
2029 2033 avoid annoying the lists further.
2030 2034
2031 2035 2005-01-27 *** Released version 0.6.10
2032 2036
2033 2037 2005-01-27 Fernando Perez <fperez@colorado.edu>
2034 2038
2035 2039 * IPython/numutils.py (norm): Added 'inf' as optional name for
2036 2040 L-infinity norm, included references to mathworld.com for vector
2037 2041 norm definitions.
2038 2042 (amin/amax): added amin/amax for array min/max. Similar to what
2039 2043 pylab ships with after the recent reorganization of names.
2040 2044 (spike/spike_odd): removed deprecated spike/spike_odd functions.
2041 2045
2042 2046 * ipython.el: committed Alex's recent fixes and improvements.
2043 2047 Tested with python-mode from CVS, and it looks excellent. Since
2044 2048 python-mode hasn't released anything in a while, I'm temporarily
2045 2049 putting a copy of today's CVS (v 4.70) of python-mode in:
2046 2050 http://ipython.scipy.org/tmp/python-mode.el
2047 2051
2048 2052 * scripts/ipython_win_post_install.py (install): Win32 fix to use
2049 2053 sys.executable for the executable name, instead of assuming it's
2050 2054 called 'python.exe' (the post-installer would have produced broken
2051 2055 setups on systems with a differently named python binary).
2052 2056
2053 2057 * IPython/PyColorize.py (Parser.__call__): change explicit '\n'
2054 2058 references to os.linesep, to make the code more
2055 2059 platform-independent. This is also part of the win32 coloring
2056 2060 fixes.
2057 2061
2058 2062 * IPython/genutils.py (page_dumb): Remove attempts to chop long
2059 2063 lines, which actually cause coloring bugs because the length of
2060 2064 the line is very difficult to correctly compute with embedded
2061 2065 escapes. This was the source of all the coloring problems under
2062 2066 Win32. I think that _finally_, Win32 users have a properly
2063 2067 working ipython in all respects. This would never have happened
2064 2068 if not for Gary Bishop and Viktor Ransmayr's great help and work.
2065 2069
2066 2070 2005-01-26 *** Released version 0.6.9
2067 2071
2068 2072 2005-01-25 Fernando Perez <fperez@colorado.edu>
2069 2073
2070 2074 * setup.py: finally, we have a true Windows installer, thanks to
2071 2075 the excellent work of Viktor Ransmayr
2072 2076 <viktor.ransmayr-AT-t-online.de>. The docs have been updated for
2073 2077 Windows users. The setup routine is quite a bit cleaner thanks to
2074 2078 this, and the post-install script uses the proper functions to
2075 2079 allow a clean de-installation using the standard Windows Control
2076 2080 Panel.
2077 2081
2078 2082 * IPython/genutils.py (get_home_dir): changed to use the $HOME
2079 2083 environment variable under all OSes (including win32) if
2080 2084 available. This will give consistency to win32 users who have set
2081 2085 this variable for any reason. If os.environ['HOME'] fails, the
2082 2086 previous policy of using HOMEDRIVE\HOMEPATH kicks in.
2083 2087
2084 2088 2005-01-24 Fernando Perez <fperez@colorado.edu>
2085 2089
2086 2090 * IPython/numutils.py (empty_like): add empty_like(), similar to
2087 2091 zeros_like() but taking advantage of the new empty() Numeric routine.
2088 2092
2089 2093 2005-01-23 *** Released version 0.6.8
2090 2094
2091 2095 2005-01-22 Fernando Perez <fperez@colorado.edu>
2092 2096
2093 2097 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the
2094 2098 automatic show() calls. After discussing things with JDH, it
2095 2099 turns out there are too many corner cases where this can go wrong.
2096 2100 It's best not to try to be 'too smart', and simply have ipython
2097 2101 reproduce as much as possible the default behavior of a normal
2098 2102 python shell.
2099 2103
2100 2104 * IPython/iplib.py (InteractiveShell.__init__): Modified the
2101 2105 line-splitting regexp and _prefilter() to avoid calling getattr()
2102 2106 on assignments. This closes
2103 2107 http://www.scipy.net/roundup/ipython/issue24. Note that Python's
2104 2108 readline uses getattr(), so a simple <TAB> keypress is still
2105 2109 enough to trigger getattr() calls on an object.
2106 2110
2107 2111 2005-01-21 Fernando Perez <fperez@colorado.edu>
2108 2112
2109 2113 * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run
2110 2114 docstring under pylab so it doesn't mask the original.
2111 2115
2112 2116 2005-01-21 *** Released version 0.6.7
2113 2117
2114 2118 2005-01-21 Fernando Perez <fperez@colorado.edu>
2115 2119
2116 2120 * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with
2117 2121 signal handling for win32 users in multithreaded mode.
2118 2122
2119 2123 2005-01-17 Fernando Perez <fperez@colorado.edu>
2120 2124
2121 2125 * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting
2122 2126 instances with no __init__. After a crash report by Norbert Nemec
2123 2127 <Norbert-AT-nemec-online.de>.
2124 2128
2125 2129 2005-01-14 Fernando Perez <fperez@colorado.edu>
2126 2130
2127 2131 * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of
2128 2132 names for verbose exceptions, when multiple dotted names and the
2129 2133 'parent' object were present on the same line.
2130 2134
2131 2135 2005-01-11 Fernando Perez <fperez@colorado.edu>
2132 2136
2133 2137 * IPython/genutils.py (flag_calls): new utility to trap and flag
2134 2138 calls in functions. I need it to clean up matplotlib support.
2135 2139 Also removed some deprecated code in genutils.
2136 2140
2137 2141 * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so
2138 2142 that matplotlib scripts called with %run, which don't call show()
2139 2143 themselves, still have their plotting windows open.
2140 2144
2141 2145 2005-01-05 Fernando Perez <fperez@colorado.edu>
2142 2146
2143 2147 * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw
2144 2148 <astraw-AT-caltech.edu>, to fix gtk deprecation warnings.
2145 2149
2146 2150 2004-12-19 Fernando Perez <fperez@colorado.edu>
2147 2151
2148 2152 * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of
2149 2153 parent_runcode, which was an eyesore. The same result can be
2150 2154 obtained with Python's regular superclass mechanisms.
2151 2155
2152 2156 2004-12-17 Fernando Perez <fperez@colorado.edu>
2153 2157
2154 2158 * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem
2155 2159 reported by Prabhu.
2156 2160 (Magic.magic_sx): direct all errors to Term.cerr (defaults to
2157 2161 sys.stderr) instead of explicitly calling sys.stderr. This helps
2158 2162 maintain our I/O abstractions clean, for future GUI embeddings.
2159 2163
2160 2164 * IPython/genutils.py (info): added new utility for sys.stderr
2161 2165 unified info message handling (thin wrapper around warn()).
2162 2166
2163 2167 * IPython/ultraTB.py (VerboseTB.text): Fix misreported global
2164 2168 composite (dotted) names on verbose exceptions.
2165 2169 (VerboseTB.nullrepr): harden against another kind of errors which
2166 2170 Python's inspect module can trigger, and which were crashing
2167 2171 IPython. Thanks to a report by Marco Lombardi
2168 2172 <mlombard-AT-ma010192.hq.eso.org>.
2169 2173
2170 2174 2004-12-13 *** Released version 0.6.6
2171 2175
2172 2176 2004-12-12 Fernando Perez <fperez@colorado.edu>
2173 2177
2174 2178 * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors
2175 2179 generated by pygtk upon initialization if it was built without
2176 2180 threads (for matplotlib users). After a crash reported by
2177 2181 Leguijt, Jaap J SIEP-EPT-RES <Jaap.Leguijt-AT-shell.com>.
2178 2182
2179 2183 * IPython/ipmaker.py (make_IPython): fix small bug in the
2180 2184 import_some parameter for multiple imports.
2181 2185
2182 2186 * IPython/iplib.py (ipmagic): simplified the interface of
2183 2187 ipmagic() to take a single string argument, just as it would be
2184 2188 typed at the IPython cmd line.
2185 2189 (ipalias): Added new ipalias() with an interface identical to
2186 2190 ipmagic(). This completes exposing a pure python interface to the
2187 2191 alias and magic system, which can be used in loops or more complex
2188 2192 code where IPython's automatic line mangling is not active.
2189 2193
2190 2194 * IPython/genutils.py (timing): changed interface of timing to
2191 2195 simply run code once, which is the most common case. timings()
2192 2196 remains unchanged, for the cases where you want multiple runs.
2193 2197
2194 2198 * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a
2195 2199 bug where Python2.2 crashes with exec'ing code which does not end
2196 2200 in a single newline. Python 2.3 is OK, so I hadn't noticed this
2197 2201 before.
2198 2202
2199 2203 2004-12-10 Fernando Perez <fperez@colorado.edu>
2200 2204
2201 2205 * IPython/Magic.py (Magic.magic_prun): changed name of option from
2202 2206 -t to -T, to accomodate the new -t flag in %run (the %run and
2203 2207 %prun options are kind of intermixed, and it's not easy to change
2204 2208 this with the limitations of python's getopt).
2205 2209
2206 2210 * IPython/Magic.py (Magic.magic_run): Added new -t option to time
2207 2211 the execution of scripts. It's not as fine-tuned as timeit.py,
2208 2212 but it works from inside ipython (and under 2.2, which lacks
2209 2213 timeit.py). Optionally a number of runs > 1 can be given for
2210 2214 timing very short-running code.
2211 2215
2212 2216 * IPython/genutils.py (uniq_stable): new routine which returns a
2213 2217 list of unique elements in any iterable, but in stable order of
2214 2218 appearance. I needed this for the ultraTB fixes, and it's a handy
2215 2219 utility.
2216 2220
2217 2221 * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of
2218 2222 dotted names in Verbose exceptions. This had been broken since
2219 2223 the very start, now x.y will properly be printed in a Verbose
2220 2224 traceback, instead of x being shown and y appearing always as an
2221 2225 'undefined global'. Getting this to work was a bit tricky,
2222 2226 because by default python tokenizers are stateless. Saved by
2223 2227 python's ability to easily add a bit of state to an arbitrary
2224 2228 function (without needing to build a full-blown callable object).
2225 2229
2226 2230 Also big cleanup of this code, which had horrendous runtime
2227 2231 lookups of zillions of attributes for colorization. Moved all
2228 2232 this code into a few templates, which make it cleaner and quicker.
2229 2233
2230 2234 Printout quality was also improved for Verbose exceptions: one
2231 2235 variable per line, and memory addresses are printed (this can be
2232 2236 quite handy in nasty debugging situations, which is what Verbose
2233 2237 is for).
2234 2238
2235 2239 * IPython/ipmaker.py (make_IPython): Do NOT execute files named in
2236 2240 the command line as scripts to be loaded by embedded instances.
2237 2241 Doing so has the potential for an infinite recursion if there are
2238 2242 exceptions thrown in the process. This fixes a strange crash
2239 2243 reported by Philippe MULLER <muller-AT-irit.fr>.
2240 2244
2241 2245 2004-12-09 Fernando Perez <fperez@colorado.edu>
2242 2246
2243 2247 * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support
2244 2248 to reflect new names in matplotlib, which now expose the
2245 2249 matlab-compatible interface via a pylab module instead of the
2246 2250 'matlab' name. The new code is backwards compatible, so users of
2247 2251 all matplotlib versions are OK. Patch by J. Hunter.
2248 2252
2249 2253 * IPython/OInspect.py (Inspector.pinfo): Add to object? printing
2250 2254 of __init__ docstrings for instances (class docstrings are already
2251 2255 automatically printed). Instances with customized docstrings
2252 2256 (indep. of the class) are also recognized and all 3 separate
2253 2257 docstrings are printed (instance, class, constructor). After some
2254 2258 comments/suggestions by J. Hunter.
2255 2259
2256 2260 2004-12-05 Fernando Perez <fperez@colorado.edu>
2257 2261
2258 2262 * IPython/iplib.py (MagicCompleter.complete): Remove annoying
2259 2263 warnings when tab-completion fails and triggers an exception.
2260 2264
2261 2265 2004-12-03 Fernando Perez <fperez@colorado.edu>
2262 2266
2263 2267 * IPython/Magic.py (magic_prun): Fix bug where an exception would
2264 2268 be triggered when using 'run -p'. An incorrect option flag was
2265 2269 being set ('d' instead of 'D').
2266 2270 (manpage): fix missing escaped \- sign.
2267 2271
2268 2272 2004-11-30 *** Released version 0.6.5
2269 2273
2270 2274 2004-11-30 Fernando Perez <fperez@colorado.edu>
2271 2275
2272 2276 * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint
2273 2277 setting with -d option.
2274 2278
2275 2279 * setup.py (docfiles): Fix problem where the doc glob I was using
2276 2280 was COMPLETELY BROKEN. It was giving the right files by pure
2277 2281 accident, but failed once I tried to include ipython.el. Note:
2278 2282 glob() does NOT allow you to do exclusion on multiple endings!
2279 2283
2280 2284 2004-11-29 Fernando Perez <fperez@colorado.edu>
2281 2285
2282 2286 * IPython/usage.py (__doc__): cleaned up usage docstring, by using
2283 2287 the manpage as the source. Better formatting & consistency.
2284 2288
2285 2289 * IPython/Magic.py (magic_run): Added new -d option, to run
2286 2290 scripts under the control of the python pdb debugger. Note that
2287 2291 this required changing the %prun option -d to -D, to avoid a clash
2288 2292 (since %run must pass options to %prun, and getopt is too dumb to
2289 2293 handle options with string values with embedded spaces). Thanks
2290 2294 to a suggestion by Matthew Arnison <maffew-AT-cat.org.au>.
2291 2295 (magic_who_ls): added type matching to %who and %whos, so that one
2292 2296 can filter their output to only include variables of certain
2293 2297 types. Another suggestion by Matthew.
2294 2298 (magic_whos): Added memory summaries in kb and Mb for arrays.
2295 2299 (magic_who): Improve formatting (break lines every 9 vars).
2296 2300
2297 2301 2004-11-28 Fernando Perez <fperez@colorado.edu>
2298 2302
2299 2303 * IPython/Logger.py (Logger.log): Fix bug in syncing the input
2300 2304 cache when empty lines were present.
2301 2305
2302 2306 2004-11-24 Fernando Perez <fperez@colorado.edu>
2303 2307
2304 2308 * IPython/usage.py (__doc__): document the re-activated threading
2305 2309 options for WX and GTK.
2306 2310
2307 2311 2004-11-23 Fernando Perez <fperez@colorado.edu>
2308 2312
2309 2313 * IPython/Shell.py (start): Added Prabhu's big patch to reactivate
2310 2314 the -wthread and -gthread options, along with a new -tk one to try
2311 2315 and coordinate Tk threading with wx/gtk. The tk support is very
2312 2316 platform dependent, since it seems to require Tcl and Tk to be
2313 2317 built with threads (Fedora1/2 appears NOT to have it, but in
2314 2318 Prabhu's Debian boxes it works OK). But even with some Tk
2315 2319 limitations, this is a great improvement.
2316 2320
2317 2321 * IPython/Prompts.py (prompt_specials_color): Added \t for time
2318 2322 info in user prompts. Patch by Prabhu.
2319 2323
2320 2324 2004-11-18 Fernando Perez <fperez@colorado.edu>
2321 2325
2322 2326 * IPython/genutils.py (ask_yes_no): Add check for a max of 20
2323 2327 EOFErrors and bail, to avoid infinite loops if a non-terminating
2324 2328 file is fed into ipython. Patch submitted in issue 19 by user,
2325 2329 many thanks.
2326 2330
2327 2331 * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger
2328 2332 autoquote/parens in continuation prompts, which can cause lots of
2329 2333 problems. Closes roundup issue 20.
2330 2334
2331 2335 2004-11-17 Fernando Perez <fperez@colorado.edu>
2332 2336
2333 2337 * debian/control (Build-Depends-Indep): Fix dpatch dependency,
2334 2338 reported as debian bug #280505. I'm not sure my local changelog
2335 2339 entry has the proper debian format (Jack?).
2336 2340
2337 2341 2004-11-08 *** Released version 0.6.4
2338 2342
2339 2343 2004-11-08 Fernando Perez <fperez@colorado.edu>
2340 2344
2341 2345 * IPython/iplib.py (init_readline): Fix exit message for Windows
2342 2346 when readline is active. Thanks to a report by Eric Jones
2343 2347 <eric-AT-enthought.com>.
2344 2348
2345 2349 2004-11-07 Fernando Perez <fperez@colorado.edu>
2346 2350
2347 2351 * IPython/genutils.py (page): Add a trap for OSError exceptions,
2348 2352 sometimes seen by win2k/cygwin users.
2349 2353
2350 2354 2004-11-06 Fernando Perez <fperez@colorado.edu>
2351 2355
2352 2356 * IPython/iplib.py (interact): Change the handling of %Exit from
2353 2357 trying to propagate a SystemExit to an internal ipython flag.
2354 2358 This is less elegant than using Python's exception mechanism, but
2355 2359 I can't get that to work reliably with threads, so under -pylab
2356 2360 %Exit was hanging IPython. Cross-thread exception handling is
2357 2361 really a bitch. Thaks to a bug report by Stephen Walton
2358 2362 <stephen.walton-AT-csun.edu>.
2359 2363
2360 2364 2004-11-04 Fernando Perez <fperez@colorado.edu>
2361 2365
2362 2366 * IPython/iplib.py (raw_input_original): store a pointer to the
2363 2367 true raw_input to harden against code which can modify it
2364 2368 (wx.py.PyShell does this and would otherwise crash ipython).
2365 2369 Thanks to a bug report by Jim Flowers <james.flowers-AT-lgx.com>.
2366 2370
2367 2371 * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for
2368 2372 Ctrl-C problem, which does not mess up the input line.
2369 2373
2370 2374 2004-11-03 Fernando Perez <fperez@colorado.edu>
2371 2375
2372 2376 * IPython/Release.py: Changed licensing to BSD, in all files.
2373 2377 (name): lowercase name for tarball/RPM release.
2374 2378
2375 2379 * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for
2376 2380 use throughout ipython.
2377 2381
2378 2382 * IPython/Magic.py (Magic._ofind): Switch to using the new
2379 2383 OInspect.getdoc() function.
2380 2384
2381 2385 * IPython/Shell.py (sigint_handler): Hack to ignore the execution
2382 2386 of the line currently being canceled via Ctrl-C. It's extremely
2383 2387 ugly, but I don't know how to do it better (the problem is one of
2384 2388 handling cross-thread exceptions).
2385 2389
2386 2390 2004-10-28 Fernando Perez <fperez@colorado.edu>
2387 2391
2388 2392 * IPython/Shell.py (signal_handler): add signal handlers to trap
2389 2393 SIGINT and SIGSEGV in threaded code properly. Thanks to a bug
2390 2394 report by Francesc Alted.
2391 2395
2392 2396 2004-10-21 Fernando Perez <fperez@colorado.edu>
2393 2397
2394 2398 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @
2395 2399 to % for pysh syntax extensions.
2396 2400
2397 2401 2004-10-09 Fernando Perez <fperez@colorado.edu>
2398 2402
2399 2403 * IPython/Magic.py (Magic.magic_whos): modify output of Numeric
2400 2404 arrays to print a more useful summary, without calling str(arr).
2401 2405 This avoids the problem of extremely lengthy computations which
2402 2406 occur if arr is large, and appear to the user as a system lockup
2403 2407 with 100% cpu activity. After a suggestion by Kristian Sandberg
2404 2408 <Kristian.Sandberg@colorado.edu>.
2405 2409 (Magic.__init__): fix bug in global magic escapes not being
2406 2410 correctly set.
2407 2411
2408 2412 2004-10-08 Fernando Perez <fperez@colorado.edu>
2409 2413
2410 2414 * IPython/Magic.py (__license__): change to absolute imports of
2411 2415 ipython's own internal packages, to start adapting to the absolute
2412 2416 import requirement of PEP-328.
2413 2417
2414 2418 * IPython/genutils.py (__author__): Fix coding to utf-8 on all
2415 2419 files, and standardize author/license marks through the Release
2416 2420 module instead of having per/file stuff (except for files with
2417 2421 particular licenses, like the MIT/PSF-licensed codes).
2418 2422
2419 2423 * IPython/Debugger.py: remove dead code for python 2.1
2420 2424
2421 2425 2004-10-04 Fernando Perez <fperez@colorado.edu>
2422 2426
2423 2427 * IPython/iplib.py (ipmagic): New function for accessing magics
2424 2428 via a normal python function call.
2425 2429
2426 2430 * IPython/Magic.py (Magic.magic_magic): Change the magic escape
2427 2431 from '@' to '%', to accomodate the new @decorator syntax of python
2428 2432 2.4.
2429 2433
2430 2434 2004-09-29 Fernando Perez <fperez@colorado.edu>
2431 2435
2432 2436 * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to
2433 2437 matplotlib.use to prevent running scripts which try to switch
2434 2438 interactive backends from within ipython. This will just crash
2435 2439 the python interpreter, so we can't allow it (but a detailed error
2436 2440 is given to the user).
2437 2441
2438 2442 2004-09-28 Fernando Perez <fperez@colorado.edu>
2439 2443
2440 2444 * IPython/Shell.py (MatplotlibShellBase.mplot_exec):
2441 2445 matplotlib-related fixes so that using @run with non-matplotlib
2442 2446 scripts doesn't pop up spurious plot windows. This requires
2443 2447 matplotlib >= 0.63, where I had to make some changes as well.
2444 2448
2445 2449 * IPython/ipmaker.py (make_IPython): update version requirement to
2446 2450 python 2.2.
2447 2451
2448 2452 * IPython/iplib.py (InteractiveShell.mainloop): Add an optional
2449 2453 banner arg for embedded customization.
2450 2454
2451 2455 * IPython/Magic.py (Magic.__init__): big cleanup to remove all
2452 2456 explicit uses of __IP as the IPython's instance name. Now things
2453 2457 are properly handled via the shell.name value. The actual code
2454 2458 is a bit ugly b/c I'm doing it via a global in Magic.py, but this
2455 2459 is much better than before. I'll clean things completely when the
2456 2460 magic stuff gets a real overhaul.
2457 2461
2458 2462 * ipython.1: small fixes, sent in by Jack Moffit. He also sent in
2459 2463 minor changes to debian dir.
2460 2464
2461 2465 * IPython/iplib.py (InteractiveShell.__init__): Fix adding a
2462 2466 pointer to the shell itself in the interactive namespace even when
2463 2467 a user-supplied dict is provided. This is needed for embedding
2464 2468 purposes (found by tests with Michel Sanner).
2465 2469
2466 2470 2004-09-27 Fernando Perez <fperez@colorado.edu>
2467 2471
2468 2472 * IPython/UserConfig/ipythonrc: remove []{} from
2469 2473 readline_remove_delims, so that things like [modname.<TAB> do
2470 2474 proper completion. This disables [].TAB, but that's a less common
2471 2475 case than module names in list comprehensions, for example.
2472 2476 Thanks to a report by Andrea Riciputi.
2473 2477
2474 2478 2004-09-09 Fernando Perez <fperez@colorado.edu>
2475 2479
2476 2480 * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid
2477 2481 blocking problems in win32 and osx. Fix by John.
2478 2482
2479 2483 2004-09-08 Fernando Perez <fperez@colorado.edu>
2480 2484
2481 2485 * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug
2482 2486 for Win32 and OSX. Fix by John Hunter.
2483 2487
2484 2488 2004-08-30 *** Released version 0.6.3
2485 2489
2486 2490 2004-08-30 Fernando Perez <fperez@colorado.edu>
2487 2491
2488 2492 * setup.py (isfile): Add manpages to list of dependent files to be
2489 2493 updated.
2490 2494
2491 2495 2004-08-27 Fernando Perez <fperez@colorado.edu>
2492 2496
2493 2497 * IPython/Shell.py (start): I've disabled -wthread and -gthread
2494 2498 for now. They don't really work with standalone WX/GTK code
2495 2499 (though matplotlib IS working fine with both of those backends).
2496 2500 This will neeed much more testing. I disabled most things with
2497 2501 comments, so turning it back on later should be pretty easy.
2498 2502
2499 2503 * IPython/iplib.py (InteractiveShell.__init__): Fix accidental
2500 2504 autocalling of expressions like r'foo', by modifying the line
2501 2505 split regexp. Closes
2502 2506 http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas
2503 2507 Riley <ipythonbugs-AT-sabi.net>.
2504 2508 (InteractiveShell.mainloop): honor --nobanner with banner
2505 2509 extensions.
2506 2510
2507 2511 * IPython/Shell.py: Significant refactoring of all classes, so
2508 2512 that we can really support ALL matplotlib backends and threading
2509 2513 models (John spotted a bug with Tk which required this). Now we
2510 2514 should support single-threaded, WX-threads and GTK-threads, both
2511 2515 for generic code and for matplotlib.
2512 2516
2513 2517 * IPython/ipmaker.py (__call__): Changed -mpthread option to
2514 2518 -pylab, to simplify things for users. Will also remove the pylab
2515 2519 profile, since now all of matplotlib configuration is directly
2516 2520 handled here. This also reduces startup time.
2517 2521
2518 2522 * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of
2519 2523 shell wasn't being correctly called. Also in IPShellWX.
2520 2524
2521 2525 * IPython/iplib.py (InteractiveShell.__init__): Added option to
2522 2526 fine-tune banner.
2523 2527
2524 2528 * IPython/numutils.py (spike): Deprecate these spike functions,
2525 2529 delete (long deprecated) gnuplot_exec handler.
2526 2530
2527 2531 2004-08-26 Fernando Perez <fperez@colorado.edu>
2528 2532
2529 2533 * ipython.1: Update for threading options, plus some others which
2530 2534 were missing.
2531 2535
2532 2536 * IPython/ipmaker.py (__call__): Added -wthread option for
2533 2537 wxpython thread handling. Make sure threading options are only
2534 2538 valid at the command line.
2535 2539
2536 2540 * scripts/ipython: moved shell selection into a factory function
2537 2541 in Shell.py, to keep the starter script to a minimum.
2538 2542
2539 2543 2004-08-25 Fernando Perez <fperez@colorado.edu>
2540 2544
2541 2545 * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by
2542 2546 John. Along with some recent changes he made to matplotlib, the
2543 2547 next versions of both systems should work very well together.
2544 2548
2545 2549 2004-08-24 Fernando Perez <fperez@colorado.edu>
2546 2550
2547 2551 * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I
2548 2552 tried to switch the profiling to using hotshot, but I'm getting
2549 2553 strange errors from prof.runctx() there. I may be misreading the
2550 2554 docs, but it looks weird. For now the profiling code will
2551 2555 continue to use the standard profiler.
2552 2556
2553 2557 2004-08-23 Fernando Perez <fperez@colorado.edu>
2554 2558
2555 2559 * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX
2556 2560 threaded shell, by John Hunter. It's not quite ready yet, but
2557 2561 close.
2558 2562
2559 2563 2004-08-22 Fernando Perez <fperez@colorado.edu>
2560 2564
2561 2565 * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also
2562 2566 in Magic and ultraTB.
2563 2567
2564 2568 * ipython.1: document threading options in manpage.
2565 2569
2566 2570 * scripts/ipython: Changed name of -thread option to -gthread,
2567 2571 since this is GTK specific. I want to leave the door open for a
2568 2572 -wthread option for WX, which will most likely be necessary. This
2569 2573 change affects usage and ipmaker as well.
2570 2574
2571 2575 * IPython/Shell.py (matplotlib_shell): Add a factory function to
2572 2576 handle the matplotlib shell issues. Code by John Hunter
2573 2577 <jdhunter-AT-nitace.bsd.uchicago.edu>.
2574 2578 (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's
2575 2579 broken (and disabled for end users) for now, but it puts the
2576 2580 infrastructure in place.
2577 2581
2578 2582 2004-08-21 Fernando Perez <fperez@colorado.edu>
2579 2583
2580 2584 * ipythonrc-pylab: Add matplotlib support.
2581 2585
2582 2586 * matplotlib_config.py: new files for matplotlib support, part of
2583 2587 the pylab profile.
2584 2588
2585 2589 * IPython/usage.py (__doc__): documented the threading options.
2586 2590
2587 2591 2004-08-20 Fernando Perez <fperez@colorado.edu>
2588 2592
2589 2593 * ipython: Modified the main calling routine to handle the -thread
2590 2594 and -mpthread options. This needs to be done as a top-level hack,
2591 2595 because it determines which class to instantiate for IPython
2592 2596 itself.
2593 2597
2594 2598 * IPython/Shell.py (MTInteractiveShell.__init__): New set of
2595 2599 classes to support multithreaded GTK operation without blocking,
2596 2600 and matplotlib with all backends. This is a lot of still very
2597 2601 experimental code, and threads are tricky. So it may still have a
2598 2602 few rough edges... This code owes a lot to
2599 2603 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by
2600 2604 Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and
2601 2605 to John Hunter for all the matplotlib work.
2602 2606
2603 2607 * IPython/ipmaker.py (__call__): Added -thread and -mpthread
2604 2608 options for gtk thread and matplotlib support.
2605 2609
2606 2610 2004-08-16 Fernando Perez <fperez@colorado.edu>
2607 2611
2608 2612 * IPython/iplib.py (InteractiveShell.__init__): don't trigger
2609 2613 autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug
2610 2614 reported by Stephen Walton <stephen.walton-AT-csun.edu>.
2611 2615
2612 2616 2004-08-11 Fernando Perez <fperez@colorado.edu>
2613 2617
2614 2618 * setup.py (isfile): Fix build so documentation gets updated for
2615 2619 rpms (it was only done for .tgz builds).
2616 2620
2617 2621 2004-08-10 Fernando Perez <fperez@colorado.edu>
2618 2622
2619 2623 * genutils.py (Term): Fix misspell of stdin stream (sin->cin).
2620 2624
2621 2625 * iplib.py : Silence syntax error exceptions in tab-completion.
2622 2626
2623 2627 2004-08-05 Fernando Perez <fperez@colorado.edu>
2624 2628
2625 2629 * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set
2626 2630 'color off' mark for continuation prompts. This was causing long
2627 2631 continuation lines to mis-wrap.
2628 2632
2629 2633 2004-08-01 Fernando Perez <fperez@colorado.edu>
2630 2634
2631 2635 * IPython/ipmaker.py (make_IPython): Allow the shell class used
2632 2636 for building ipython to be a parameter. All this is necessary
2633 2637 right now to have a multithreaded version, but this insane
2634 2638 non-design will be cleaned up soon. For now, it's a hack that
2635 2639 works.
2636 2640
2637 2641 * IPython/Shell.py (IPShell.__init__): Stop using mutable default
2638 2642 args in various places. No bugs so far, but it's a dangerous
2639 2643 practice.
2640 2644
2641 2645 2004-07-31 Fernando Perez <fperez@colorado.edu>
2642 2646
2643 2647 * IPython/iplib.py (complete): ignore SyntaxError exceptions to
2644 2648 fix completion of files with dots in their names under most
2645 2649 profiles (pysh was OK because the completion order is different).
2646 2650
2647 2651 2004-07-27 Fernando Perez <fperez@colorado.edu>
2648 2652
2649 2653 * IPython/iplib.py (InteractiveShell.__init__): build dict of
2650 2654 keywords manually, b/c the one in keyword.py was removed in python
2651 2655 2.4. Patch by Anakim Border <aborder-AT-users.sourceforge.net>.
2652 2656 This is NOT a bug under python 2.3 and earlier.
2653 2657
2654 2658 2004-07-26 Fernando Perez <fperez@colorado.edu>
2655 2659
2656 2660 * IPython/ultraTB.py (VerboseTB.text): Add another
2657 2661 linecache.checkcache() call to try to prevent inspect.py from
2658 2662 crashing under python 2.3. I think this fixes
2659 2663 http://www.scipy.net/roundup/ipython/issue17.
2660 2664
2661 2665 2004-07-26 *** Released version 0.6.2
2662 2666
2663 2667 2004-07-26 Fernando Perez <fperez@colorado.edu>
2664 2668
2665 2669 * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would
2666 2670 fail for any number.
2667 2671 (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for
2668 2672 empty bookmarks.
2669 2673
2670 2674 2004-07-26 *** Released version 0.6.1
2671 2675
2672 2676 2004-07-26 Fernando Perez <fperez@colorado.edu>
2673 2677
2674 2678 * ipython_win_post_install.py (run): Added pysh shortcut for Windows.
2675 2679
2676 2680 * IPython/iplib.py (protect_filename): Applied Ville's patch for
2677 2681 escaping '()[]{}' in filenames.
2678 2682
2679 2683 * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for
2680 2684 Python 2.2 users who lack a proper shlex.split.
2681 2685
2682 2686 2004-07-19 Fernando Perez <fperez@colorado.edu>
2683 2687
2684 2688 * IPython/iplib.py (InteractiveShell.init_readline): Add support
2685 2689 for reading readline's init file. I follow the normal chain:
2686 2690 $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a
2687 2691 report by Mike Heeter. This closes
2688 2692 http://www.scipy.net/roundup/ipython/issue16.
2689 2693
2690 2694 2004-07-18 Fernando Perez <fperez@colorado.edu>
2691 2695
2692 2696 * IPython/iplib.py (__init__): Add better handling of '\' under
2693 2697 Win32 for filenames. After a patch by Ville.
2694 2698
2695 2699 2004-07-17 Fernando Perez <fperez@colorado.edu>
2696 2700
2697 2701 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
2698 2702 autocalling would be triggered for 'foo is bar' if foo is
2699 2703 callable. I also cleaned up the autocall detection code to use a
2700 2704 regexp, which is faster. Bug reported by Alexander Schmolck.
2701 2705
2702 2706 * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with
2703 2707 '?' in them would confuse the help system. Reported by Alex
2704 2708 Schmolck.
2705 2709
2706 2710 2004-07-16 Fernando Perez <fperez@colorado.edu>
2707 2711
2708 2712 * IPython/GnuplotInteractive.py (__all__): added plot2.
2709 2713
2710 2714 * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for
2711 2715 plotting dictionaries, lists or tuples of 1d arrays.
2712 2716
2713 2717 * IPython/Magic.py (Magic.magic_hist): small clenaups and
2714 2718 optimizations.
2715 2719
2716 2720 * IPython/iplib.py:Remove old Changelog info for cleanup. This is
2717 2721 the information which was there from Janko's original IPP code:
2718 2722
2719 2723 03.05.99 20:53 porto.ifm.uni-kiel.de
2720 2724 --Started changelog.
2721 2725 --make clear do what it say it does
2722 2726 --added pretty output of lines from inputcache
2723 2727 --Made Logger a mixin class, simplifies handling of switches
2724 2728 --Added own completer class. .string<TAB> expands to last history
2725 2729 line which starts with string. The new expansion is also present
2726 2730 with Ctrl-r from the readline library. But this shows, who this
2727 2731 can be done for other cases.
2728 2732 --Added convention that all shell functions should accept a
2729 2733 parameter_string This opens the door for different behaviour for
2730 2734 each function. @cd is a good example of this.
2731 2735
2732 2736 04.05.99 12:12 porto.ifm.uni-kiel.de
2733 2737 --added logfile rotation
2734 2738 --added new mainloop method which freezes first the namespace
2735 2739
2736 2740 07.05.99 21:24 porto.ifm.uni-kiel.de
2737 2741 --added the docreader classes. Now there is a help system.
2738 2742 -This is only a first try. Currently it's not easy to put new
2739 2743 stuff in the indices. But this is the way to go. Info would be
2740 2744 better, but HTML is every where and not everybody has an info
2741 2745 system installed and it's not so easy to change html-docs to info.
2742 2746 --added global logfile option
2743 2747 --there is now a hook for object inspection method pinfo needs to
2744 2748 be provided for this. Can be reached by two '??'.
2745 2749
2746 2750 08.05.99 20:51 porto.ifm.uni-kiel.de
2747 2751 --added a README
2748 2752 --bug in rc file. Something has changed so functions in the rc
2749 2753 file need to reference the shell and not self. Not clear if it's a
2750 2754 bug or feature.
2751 2755 --changed rc file for new behavior
2752 2756
2753 2757 2004-07-15 Fernando Perez <fperez@colorado.edu>
2754 2758
2755 2759 * IPython/Logger.py (Logger.log): fixed recent bug where the input
2756 2760 cache was falling out of sync in bizarre manners when multi-line
2757 2761 input was present. Minor optimizations and cleanup.
2758 2762
2759 2763 (Logger): Remove old Changelog info for cleanup. This is the
2760 2764 information which was there from Janko's original code:
2761 2765
2762 2766 Changes to Logger: - made the default log filename a parameter
2763 2767
2764 2768 - put a check for lines beginning with !@? in log(). Needed
2765 2769 (even if the handlers properly log their lines) for mid-session
2766 2770 logging activation to work properly. Without this, lines logged
2767 2771 in mid session, which get read from the cache, would end up
2768 2772 'bare' (with !@? in the open) in the log. Now they are caught
2769 2773 and prepended with a #.
2770 2774
2771 2775 * IPython/iplib.py (InteractiveShell.init_readline): added check
2772 2776 in case MagicCompleter fails to be defined, so we don't crash.
2773 2777
2774 2778 2004-07-13 Fernando Perez <fperez@colorado.edu>
2775 2779
2776 2780 * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation
2777 2781 of EPS if the requested filename ends in '.eps'.
2778 2782
2779 2783 2004-07-04 Fernando Perez <fperez@colorado.edu>
2780 2784
2781 2785 * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix
2782 2786 escaping of quotes when calling the shell.
2783 2787
2784 2788 2004-07-02 Fernando Perez <fperez@colorado.edu>
2785 2789
2786 2790 * IPython/Prompts.py (CachedOutput.update): Fix problem with
2787 2791 gettext not working because we were clobbering '_'. Fixes
2788 2792 http://www.scipy.net/roundup/ipython/issue6.
2789 2793
2790 2794 2004-07-01 Fernando Perez <fperez@colorado.edu>
2791 2795
2792 2796 * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling
2793 2797 into @cd. Patch by Ville.
2794 2798
2795 2799 * IPython/iplib.py (InteractiveShell.post_config_initialization):
2796 2800 new function to store things after ipmaker runs. Patch by Ville.
2797 2801 Eventually this will go away once ipmaker is removed and the class
2798 2802 gets cleaned up, but for now it's ok. Key functionality here is
2799 2803 the addition of the persistent storage mechanism, a dict for
2800 2804 keeping data across sessions (for now just bookmarks, but more can
2801 2805 be implemented later).
2802 2806
2803 2807 * IPython/Magic.py (Magic.magic_bookmark): New bookmark system,
2804 2808 persistent across sections. Patch by Ville, I modified it
2805 2809 soemwhat to allow bookmarking arbitrary dirs other than CWD. Also
2806 2810 added a '-l' option to list all bookmarks.
2807 2811
2808 2812 * IPython/iplib.py (InteractiveShell.atexit_operations): new
2809 2813 center for cleanup. Registered with atexit.register(). I moved
2810 2814 here the old exit_cleanup(). After a patch by Ville.
2811 2815
2812 2816 * IPython/Magic.py (get_py_filename): added '~' to the accepted
2813 2817 characters in the hacked shlex_split for python 2.2.
2814 2818
2815 2819 * IPython/iplib.py (file_matches): more fixes to filenames with
2816 2820 whitespace in them. It's not perfect, but limitations in python's
2817 2821 readline make it impossible to go further.
2818 2822
2819 2823 2004-06-29 Fernando Perez <fperez@colorado.edu>
2820 2824
2821 2825 * IPython/iplib.py (file_matches): escape whitespace correctly in
2822 2826 filename completions. Bug reported by Ville.
2823 2827
2824 2828 2004-06-28 Fernando Perez <fperez@colorado.edu>
2825 2829
2826 2830 * IPython/ipmaker.py (__call__): Added per-profile histories. Now
2827 2831 the history file will be called 'history-PROFNAME' (or just
2828 2832 'history' if no profile is loaded). I was getting annoyed at
2829 2833 getting my Numerical work history clobbered by pysh sessions.
2830 2834
2831 2835 * IPython/iplib.py (InteractiveShell.__init__): Internal
2832 2836 getoutputerror() function so that we can honor the system_verbose
2833 2837 flag for _all_ system calls. I also added escaping of #
2834 2838 characters here to avoid confusing Itpl.
2835 2839
2836 2840 * IPython/Magic.py (shlex_split): removed call to shell in
2837 2841 parse_options and replaced it with shlex.split(). The annoying
2838 2842 part was that in Python 2.2, shlex.split() doesn't exist, so I had
2839 2843 to backport it from 2.3, with several frail hacks (the shlex
2840 2844 module is rather limited in 2.2). Thanks to a suggestion by Ville
2841 2845 Vainio <vivainio@kolumbus.fi>. For Python 2.3 there should be no
2842 2846 problem.
2843 2847
2844 2848 (Magic.magic_system_verbose): new toggle to print the actual
2845 2849 system calls made by ipython. Mainly for debugging purposes.
2846 2850
2847 2851 * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which
2848 2852 doesn't support persistence. Reported (and fix suggested) by
2849 2853 Travis Caldwell <travis_caldwell2000@yahoo.com>.
2850 2854
2851 2855 2004-06-26 Fernando Perez <fperez@colorado.edu>
2852 2856
2853 2857 * IPython/Logger.py (Logger.log): fix to handle correctly empty
2854 2858 continue prompts.
2855 2859
2856 2860 * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh()
2857 2861 function (basically a big docstring) and a few more things here to
2858 2862 speedup startup. pysh.py is now very lightweight. We want because
2859 2863 it gets execfile'd, while InterpreterExec gets imported, so
2860 2864 byte-compilation saves time.
2861 2865
2862 2866 2004-06-25 Fernando Perez <fperez@colorado.edu>
2863 2867
2864 2868 * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd
2865 2869 -NUM', which was recently broken.
2866 2870
2867 2871 * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow !
2868 2872 in multi-line input (but not !!, which doesn't make sense there).
2869 2873
2870 2874 * IPython/UserConfig/ipythonrc: made autoindent on by default.
2871 2875 It's just too useful, and people can turn it off in the less
2872 2876 common cases where it's a problem.
2873 2877
2874 2878 2004-06-24 Fernando Perez <fperez@colorado.edu>
2875 2879
2876 2880 * IPython/iplib.py (InteractiveShell._prefilter): big change -
2877 2881 special syntaxes (like alias calling) is now allied in multi-line
2878 2882 input. This is still _very_ experimental, but it's necessary for
2879 2883 efficient shell usage combining python looping syntax with system
2880 2884 calls. For now it's restricted to aliases, I don't think it
2881 2885 really even makes sense to have this for magics.
2882 2886
2883 2887 2004-06-23 Fernando Perez <fperez@colorado.edu>
2884 2888
2885 2889 * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added
2886 2890 $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd.
2887 2891
2888 2892 * IPython/Magic.py (Magic.magic_rehashx): modified to handle
2889 2893 extensions under Windows (after code sent by Gary Bishop). The
2890 2894 extensions considered 'executable' are stored in IPython's rc
2891 2895 structure as win_exec_ext.
2892 2896
2893 2897 * IPython/genutils.py (shell): new function, like system() but
2894 2898 without return value. Very useful for interactive shell work.
2895 2899
2896 2900 * IPython/Magic.py (Magic.magic_unalias): New @unalias function to
2897 2901 delete aliases.
2898 2902
2899 2903 * IPython/iplib.py (InteractiveShell.alias_table_update): make
2900 2904 sure that the alias table doesn't contain python keywords.
2901 2905
2902 2906 2004-06-21 Fernando Perez <fperez@colorado.edu>
2903 2907
2904 2908 * IPython/Magic.py (Magic.magic_rehash): Fix crash when
2905 2909 non-existent items are found in $PATH. Reported by Thorsten.
2906 2910
2907 2911 2004-06-20 Fernando Perez <fperez@colorado.edu>
2908 2912
2909 2913 * IPython/iplib.py (complete): modified the completer so that the
2910 2914 order of priorities can be easily changed at runtime.
2911 2915
2912 2916 * IPython/Extensions/InterpreterExec.py (prefilter_shell):
2913 2917 Modified to auto-execute all lines beginning with '~', '/' or '.'.
2914 2918
2915 2919 * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to
2916 2920 expand Python variables prepended with $ in all system calls. The
2917 2921 same was done to InteractiveShell.handle_shell_escape. Now all
2918 2922 system access mechanisms (!, !!, @sc, @sx and aliases) allow the
2919 2923 expansion of python variables and expressions according to the
2920 2924 syntax of PEP-215 - http://www.python.org/peps/pep-0215.html.
2921 2925
2922 2926 Though PEP-215 has been rejected, a similar (but simpler) one
2923 2927 seems like it will go into Python 2.4, PEP-292 -
2924 2928 http://www.python.org/peps/pep-0292.html.
2925 2929
2926 2930 I'll keep the full syntax of PEP-215, since IPython has since the
2927 2931 start used Ka-Ping Yee's reference implementation discussed there
2928 2932 (Itpl), and I actually like the powerful semantics it offers.
2929 2933
2930 2934 In order to access normal shell variables, the $ has to be escaped
2931 2935 via an extra $. For example:
2932 2936
2933 2937 In [7]: PATH='a python variable'
2934 2938
2935 2939 In [8]: !echo $PATH
2936 2940 a python variable
2937 2941
2938 2942 In [9]: !echo $$PATH
2939 2943 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2940 2944
2941 2945 (Magic.parse_options): escape $ so the shell doesn't evaluate
2942 2946 things prematurely.
2943 2947
2944 2948 * IPython/iplib.py (InteractiveShell.call_alias): added the
2945 2949 ability for aliases to expand python variables via $.
2946 2950
2947 2951 * IPython/Magic.py (Magic.magic_rehash): based on the new alias
2948 2952 system, now there's a @rehash/@rehashx pair of magics. These work
2949 2953 like the csh rehash command, and can be invoked at any time. They
2950 2954 build a table of aliases to everything in the user's $PATH
2951 2955 (@rehash uses everything, @rehashx is slower but only adds
2952 2956 executable files). With this, the pysh.py-based shell profile can
2953 2957 now simply call rehash upon startup, and full access to all
2954 2958 programs in the user's path is obtained.
2955 2959
2956 2960 * IPython/iplib.py (InteractiveShell.call_alias): The new alias
2957 2961 functionality is now fully in place. I removed the old dynamic
2958 2962 code generation based approach, in favor of a much lighter one
2959 2963 based on a simple dict. The advantage is that this allows me to
2960 2964 now have thousands of aliases with negligible cost (unthinkable
2961 2965 with the old system).
2962 2966
2963 2967 2004-06-19 Fernando Perez <fperez@colorado.edu>
2964 2968
2965 2969 * IPython/iplib.py (__init__): extended MagicCompleter class to
2966 2970 also complete (last in priority) on user aliases.
2967 2971
2968 2972 * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in
2969 2973 call to eval.
2970 2974 (ItplNS.__init__): Added a new class which functions like Itpl,
2971 2975 but allows configuring the namespace for the evaluation to occur
2972 2976 in.
2973 2977
2974 2978 2004-06-18 Fernando Perez <fperez@colorado.edu>
2975 2979
2976 2980 * IPython/iplib.py (InteractiveShell.runcode): modify to print a
2977 2981 better message when 'exit' or 'quit' are typed (a common newbie
2978 2982 confusion).
2979 2983
2980 2984 * IPython/Magic.py (Magic.magic_colors): Added the runtime color
2981 2985 check for Windows users.
2982 2986
2983 2987 * IPython/iplib.py (InteractiveShell.user_setup): removed
2984 2988 disabling of colors for Windows. I'll test at runtime and issue a
2985 2989 warning if Gary's readline isn't found, as to nudge users to
2986 2990 download it.
2987 2991
2988 2992 2004-06-16 Fernando Perez <fperez@colorado.edu>
2989 2993
2990 2994 * IPython/genutils.py (Stream.__init__): changed to print errors
2991 2995 to sys.stderr. I had a circular dependency here. Now it's
2992 2996 possible to run ipython as IDLE's shell (consider this pre-alpha,
2993 2997 since true stdout things end up in the starting terminal instead
2994 2998 of IDLE's out).
2995 2999
2996 3000 * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for
2997 3001 users who haven't # updated their prompt_in2 definitions. Remove
2998 3002 eventually.
2999 3003 (multiple_replace): added credit to original ASPN recipe.
3000 3004
3001 3005 2004-06-15 Fernando Perez <fperez@colorado.edu>
3002 3006
3003 3007 * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the
3004 3008 list of auto-defined aliases.
3005 3009
3006 3010 2004-06-13 Fernando Perez <fperez@colorado.edu>
3007 3011
3008 3012 * setup.py (scriptfiles): Don't trigger win_post_install unless an
3009 3013 install was really requested (so setup.py can be used for other
3010 3014 things under Windows).
3011 3015
3012 3016 2004-06-10 Fernando Perez <fperez@colorado.edu>
3013 3017
3014 3018 * IPython/Logger.py (Logger.create_log): Manually remove any old
3015 3019 backup, since os.remove may fail under Windows. Fixes bug
3016 3020 reported by Thorsten.
3017 3021
3018 3022 2004-06-09 Fernando Perez <fperez@colorado.edu>
3019 3023
3020 3024 * examples/example-embed.py: fixed all references to %n (replaced
3021 3025 with \\# for ps1/out prompts and with \\D for ps2 prompts). Done
3022 3026 for all examples and the manual as well.
3023 3027
3024 3028 2004-06-08 Fernando Perez <fperez@colorado.edu>
3025 3029
3026 3030 * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt
3027 3031 alignment and color management. All 3 prompt subsystems now
3028 3032 inherit from BasePrompt.
3029 3033
3030 3034 * tools/release: updates for windows installer build and tag rpms
3031 3035 with python version (since paths are fixed).
3032 3036
3033 3037 * IPython/UserConfig/ipythonrc: modified to use \# instead of %n,
3034 3038 which will become eventually obsolete. Also fixed the default
3035 3039 prompt_in2 to use \D, so at least new users start with the correct
3036 3040 defaults.
3037 3041 WARNING: Users with existing ipythonrc files will need to apply
3038 3042 this fix manually!
3039 3043
3040 3044 * setup.py: make windows installer (.exe). This is finally the
3041 3045 integration of an old patch by Cory Dodt <dodt-AT-fcoe.k12.ca.us>,
3042 3046 which I hadn't included because it required Python 2.3 (or recent
3043 3047 distutils).
3044 3048
3045 3049 * IPython/usage.py (__doc__): update docs (and manpage) to reflect
3046 3050 usage of new '\D' escape.
3047 3051
3048 3052 * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which
3049 3053 lacks os.getuid())
3050 3054 (CachedOutput.set_colors): Added the ability to turn coloring
3051 3055 on/off with @colors even for manually defined prompt colors. It
3052 3056 uses a nasty global, but it works safely and via the generic color
3053 3057 handling mechanism.
3054 3058 (Prompt2.__init__): Introduced new escape '\D' for continuation
3055 3059 prompts. It represents the counter ('\#') as dots.
3056 3060 *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will
3057 3061 need to update their ipythonrc files and replace '%n' with '\D' in
3058 3062 their prompt_in2 settings everywhere. Sorry, but there's
3059 3063 otherwise no clean way to get all prompts to properly align. The
3060 3064 ipythonrc shipped with IPython has been updated.
3061 3065
3062 3066 2004-06-07 Fernando Perez <fperez@colorado.edu>
3063 3067
3064 3068 * setup.py (isfile): Pass local_icons option to latex2html, so the
3065 3069 resulting HTML file is self-contained. Thanks to
3066 3070 dryice-AT-liu.com.cn for the tip.
3067 3071
3068 3072 * pysh.py: I created a new profile 'shell', which implements a
3069 3073 _rudimentary_ IPython-based shell. This is in NO WAY a realy
3070 3074 system shell, nor will it become one anytime soon. It's mainly
3071 3075 meant to illustrate the use of the new flexible bash-like prompts.
3072 3076 I guess it could be used by hardy souls for true shell management,
3073 3077 but it's no tcsh/bash... pysh.py is loaded by the 'shell'
3074 3078 profile. This uses the InterpreterExec extension provided by
3075 3079 W.J. van der Laan <gnufnork-AT-hetdigitalegat.nl>
3076 3080
3077 3081 * IPython/Prompts.py (PromptOut.__str__): now it will correctly
3078 3082 auto-align itself with the length of the previous input prompt
3079 3083 (taking into account the invisible color escapes).
3080 3084 (CachedOutput.__init__): Large restructuring of this class. Now
3081 3085 all three prompts (primary1, primary2, output) are proper objects,
3082 3086 managed by the 'parent' CachedOutput class. The code is still a
3083 3087 bit hackish (all prompts share state via a pointer to the cache),
3084 3088 but it's overall far cleaner than before.
3085 3089
3086 3090 * IPython/genutils.py (getoutputerror): modified to add verbose,
3087 3091 debug and header options. This makes the interface of all getout*
3088 3092 functions uniform.
3089 3093 (SystemExec.getoutputerror): added getoutputerror to SystemExec.
3090 3094
3091 3095 * IPython/Magic.py (Magic.default_option): added a function to
3092 3096 allow registering default options for any magic command. This
3093 3097 makes it easy to have profiles which customize the magics globally
3094 3098 for a certain use. The values set through this function are
3095 3099 picked up by the parse_options() method, which all magics should
3096 3100 use to parse their options.
3097 3101
3098 3102 * IPython/genutils.py (warn): modified the warnings framework to
3099 3103 use the Term I/O class. I'm trying to slowly unify all of
3100 3104 IPython's I/O operations to pass through Term.
3101 3105
3102 3106 * IPython/Prompts.py (Prompt2._str_other): Added functionality in
3103 3107 the secondary prompt to correctly match the length of the primary
3104 3108 one for any prompt. Now multi-line code will properly line up
3105 3109 even for path dependent prompts, such as the new ones available
3106 3110 via the prompt_specials.
3107 3111
3108 3112 2004-06-06 Fernando Perez <fperez@colorado.edu>
3109 3113
3110 3114 * IPython/Prompts.py (prompt_specials): Added the ability to have
3111 3115 bash-like special sequences in the prompts, which get
3112 3116 automatically expanded. Things like hostname, current working
3113 3117 directory and username are implemented already, but it's easy to
3114 3118 add more in the future. Thanks to a patch by W.J. van der Laan
3115 3119 <gnufnork-AT-hetdigitalegat.nl>
3116 3120 (prompt_specials): Added color support for prompt strings, so
3117 3121 users can define arbitrary color setups for their prompts.
3118 3122
3119 3123 2004-06-05 Fernando Perez <fperez@colorado.edu>
3120 3124
3121 3125 * IPython/genutils.py (Term.reopen_all): Added Windows-specific
3122 3126 code to load Gary Bishop's readline and configure it
3123 3127 automatically. Thanks to Gary for help on this.
3124 3128
3125 3129 2004-06-01 Fernando Perez <fperez@colorado.edu>
3126 3130
3127 3131 * IPython/Logger.py (Logger.create_log): fix bug for logging
3128 3132 with no filename (previous fix was incomplete).
3129 3133
3130 3134 2004-05-25 Fernando Perez <fperez@colorado.edu>
3131 3135
3132 3136 * IPython/Magic.py (Magic.parse_options): fix bug where naked
3133 3137 parens would get passed to the shell.
3134 3138
3135 3139 2004-05-20 Fernando Perez <fperez@colorado.edu>
3136 3140
3137 3141 * IPython/Magic.py (Magic.magic_prun): changed default profile
3138 3142 sort order to 'time' (the more common profiling need).
3139 3143
3140 3144 * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache
3141 3145 so that source code shown is guaranteed in sync with the file on
3142 3146 disk (also changed in psource). Similar fix to the one for
3143 3147 ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du
3144 3148 <yann.ledu-AT-noos.fr>.
3145 3149
3146 3150 * IPython/Magic.py (Magic.parse_options): Fixed bug where commands
3147 3151 with a single option would not be correctly parsed. Closes
3148 3152 http://www.scipy.net/roundup/ipython/issue14. This bug had been
3149 3153 introduced in 0.6.0 (on 2004-05-06).
3150 3154
3151 3155 2004-05-13 *** Released version 0.6.0
3152 3156
3153 3157 2004-05-13 Fernando Perez <fperez@colorado.edu>
3154 3158
3155 3159 * debian/: Added debian/ directory to CVS, so that debian support
3156 3160 is publicly accessible. The debian package is maintained by Jack
3157 3161 Moffit <jack-AT-xiph.org>.
3158 3162
3159 3163 * Documentation: included the notes about an ipython-based system
3160 3164 shell (the hypothetical 'pysh') into the new_design.pdf document,
3161 3165 so that these ideas get distributed to users along with the
3162 3166 official documentation.
3163 3167
3164 3168 2004-05-10 Fernando Perez <fperez@colorado.edu>
3165 3169
3166 3170 * IPython/Logger.py (Logger.create_log): fix recently introduced
3167 3171 bug (misindented line) where logstart would fail when not given an
3168 3172 explicit filename.
3169 3173
3170 3174 2004-05-09 Fernando Perez <fperez@colorado.edu>
3171 3175
3172 3176 * IPython/Magic.py (Magic.parse_options): skip system call when
3173 3177 there are no options to look for. Faster, cleaner for the common
3174 3178 case.
3175 3179
3176 3180 * Documentation: many updates to the manual: describing Windows
3177 3181 support better, Gnuplot updates, credits, misc small stuff. Also
3178 3182 updated the new_design doc a bit.
3179 3183
3180 3184 2004-05-06 *** Released version 0.6.0.rc1
3181 3185
3182 3186 2004-05-06 Fernando Perez <fperez@colorado.edu>
3183 3187
3184 3188 * IPython/ultraTB.py (ListTB.text): modified a ton of string +=
3185 3189 operations to use the vastly more efficient list/''.join() method.
3186 3190 (FormattedTB.text): Fix
3187 3191 http://www.scipy.net/roundup/ipython/issue12 - exception source
3188 3192 extract not updated after reload. Thanks to Mike Salib
3189 3193 <msalib-AT-mit.edu> for pinning the source of the problem.
3190 3194 Fortunately, the solution works inside ipython and doesn't require
3191 3195 any changes to python proper.
3192 3196
3193 3197 * IPython/Magic.py (Magic.parse_options): Improved to process the
3194 3198 argument list as a true shell would (by actually using the
3195 3199 underlying system shell). This way, all @magics automatically get
3196 3200 shell expansion for variables. Thanks to a comment by Alex
3197 3201 Schmolck.
3198 3202
3199 3203 2004-04-04 Fernando Perez <fperez@colorado.edu>
3200 3204
3201 3205 * IPython/iplib.py (InteractiveShell.interact): Added a special
3202 3206 trap for a debugger quit exception, which is basically impossible
3203 3207 to handle by normal mechanisms, given what pdb does to the stack.
3204 3208 This fixes a crash reported by <fgibbons-AT-llama.med.harvard.edu>.
3205 3209
3206 3210 2004-04-03 Fernando Perez <fperez@colorado.edu>
3207 3211
3208 3212 * IPython/genutils.py (Term): Standardized the names of the Term
3209 3213 class streams to cin/cout/cerr, following C++ naming conventions
3210 3214 (I can't use in/out/err because 'in' is not a valid attribute
3211 3215 name).
3212 3216
3213 3217 * IPython/iplib.py (InteractiveShell.interact): don't increment
3214 3218 the prompt if there's no user input. By Daniel 'Dang' Griffith
3215 3219 <pythondev-dang-AT-lazytwinacres.net>, after a suggestion from
3216 3220 Francois Pinard.
3217 3221
3218 3222 2004-04-02 Fernando Perez <fperez@colorado.edu>
3219 3223
3220 3224 * IPython/genutils.py (Stream.__init__): Modified to survive at
3221 3225 least importing in contexts where stdin/out/err aren't true file
3222 3226 objects, such as PyCrust (they lack fileno() and mode). However,
3223 3227 the recovery facilities which rely on these things existing will
3224 3228 not work.
3225 3229
3226 3230 2004-04-01 Fernando Perez <fperez@colorado.edu>
3227 3231
3228 3232 * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to
3229 3233 use the new getoutputerror() function, so it properly
3230 3234 distinguishes stdout/err.
3231 3235
3232 3236 * IPython/genutils.py (getoutputerror): added a function to
3233 3237 capture separately the standard output and error of a command.
3234 3238 After a comment from dang on the mailing lists. This code is
3235 3239 basically a modified version of commands.getstatusoutput(), from
3236 3240 the standard library.
3237 3241
3238 3242 * IPython/iplib.py (InteractiveShell.handle_shell_escape): added
3239 3243 '!!' as a special syntax (shorthand) to access @sx.
3240 3244
3241 3245 * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell
3242 3246 command and return its output as a list split on '\n'.
3243 3247
3244 3248 2004-03-31 Fernando Perez <fperez@colorado.edu>
3245 3249
3246 3250 * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__
3247 3251 method to dictionaries used as FakeModule instances if they lack
3248 3252 it. At least pydoc in python2.3 breaks for runtime-defined
3249 3253 functions without this hack. At some point I need to _really_
3250 3254 understand what FakeModule is doing, because it's a gross hack.
3251 3255 But it solves Arnd's problem for now...
3252 3256
3253 3257 2004-02-27 Fernando Perez <fperez@colorado.edu>
3254 3258
3255 3259 * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate'
3256 3260 mode would behave erratically. Also increased the number of
3257 3261 possible logs in rotate mod to 999. Thanks to Rod Holland
3258 3262 <rhh@StructureLABS.com> for the report and fixes.
3259 3263
3260 3264 2004-02-26 Fernando Perez <fperez@colorado.edu>
3261 3265
3262 3266 * IPython/genutils.py (page): Check that the curses module really
3263 3267 has the initscr attribute before trying to use it. For some
3264 3268 reason, the Solaris curses module is missing this. I think this
3265 3269 should be considered a Solaris python bug, but I'm not sure.
3266 3270
3267 3271 2004-01-17 Fernando Perez <fperez@colorado.edu>
3268 3272
3269 3273 * IPython/genutils.py (Stream.__init__): Changes to try to make
3270 3274 ipython robust against stdin/out/err being closed by the user.
3271 3275 This is 'user error' (and blocks a normal python session, at least
3272 3276 the stdout case). However, Ipython should be able to survive such
3273 3277 instances of abuse as gracefully as possible. To simplify the
3274 3278 coding and maintain compatibility with Gary Bishop's Term
3275 3279 contributions, I've made use of classmethods for this. I think
3276 3280 this introduces a dependency on python 2.2.
3277 3281
3278 3282 2004-01-13 Fernando Perez <fperez@colorado.edu>
3279 3283
3280 3284 * IPython/numutils.py (exp_safe): simplified the code a bit and
3281 3285 removed the need for importing the kinds module altogether.
3282 3286
3283 3287 2004-01-06 Fernando Perez <fperez@colorado.edu>
3284 3288
3285 3289 * IPython/Magic.py (Magic.magic_sc): Made the shell capture system
3286 3290 a magic function instead, after some community feedback. No
3287 3291 special syntax will exist for it, but its name is deliberately
3288 3292 very short.
3289 3293
3290 3294 2003-12-20 Fernando Perez <fperez@colorado.edu>
3291 3295
3292 3296 * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added
3293 3297 new functionality, to automagically assign the result of a shell
3294 3298 command to a variable. I'll solicit some community feedback on
3295 3299 this before making it permanent.
3296 3300
3297 3301 * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was
3298 3302 requested about callables for which inspect couldn't obtain a
3299 3303 proper argspec. Thanks to a crash report sent by Etienne
3300 3304 Posthumus <etienne-AT-apple01.cs.vu.nl>.
3301 3305
3302 3306 2003-12-09 Fernando Perez <fperez@colorado.edu>
3303 3307
3304 3308 * IPython/genutils.py (page): patch for the pager to work across
3305 3309 various versions of Windows. By Gary Bishop.
3306 3310
3307 3311 2003-12-04 Fernando Perez <fperez@colorado.edu>
3308 3312
3309 3313 * IPython/Gnuplot2.py (PlotItems): Fixes for working with
3310 3314 Gnuplot.py version 1.7, whose internal names changed quite a bit.
3311 3315 While I tested this and it looks ok, there may still be corner
3312 3316 cases I've missed.
3313 3317
3314 3318 2003-12-01 Fernando Perez <fperez@colorado.edu>
3315 3319
3316 3320 * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug
3317 3321 where a line like 'p,q=1,2' would fail because the automagic
3318 3322 system would be triggered for @p.
3319 3323
3320 3324 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related
3321 3325 cleanups, code unmodified.
3322 3326
3323 3327 * IPython/genutils.py (Term): added a class for IPython to handle
3324 3328 output. In most cases it will just be a proxy for stdout/err, but
3325 3329 having this allows modifications to be made for some platforms,
3326 3330 such as handling color escapes under Windows. All of this code
3327 3331 was contributed by Gary Bishop, with minor modifications by me.
3328 3332 The actual changes affect many files.
3329 3333
3330 3334 2003-11-30 Fernando Perez <fperez@colorado.edu>
3331 3335
3332 3336 * IPython/iplib.py (file_matches): new completion code, courtesy
3333 3337 of Jeff Collins. This enables filename completion again under
3334 3338 python 2.3, which disabled it at the C level.
3335 3339
3336 3340 2003-11-11 Fernando Perez <fperez@colorado.edu>
3337 3341
3338 3342 * IPython/numutils.py (amap): Added amap() fn. Simple shorthand
3339 3343 for Numeric.array(map(...)), but often convenient.
3340 3344
3341 3345 2003-11-05 Fernando Perez <fperez@colorado.edu>
3342 3346
3343 3347 * IPython/numutils.py (frange): Changed a call from int() to
3344 3348 int(round()) to prevent a problem reported with arange() in the
3345 3349 numpy list.
3346 3350
3347 3351 2003-10-06 Fernando Perez <fperez@colorado.edu>
3348 3352
3349 3353 * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to
3350 3354 prevent crashes if sys lacks an argv attribute (it happens with
3351 3355 embedded interpreters which build a bare-bones sys module).
3352 3356 Thanks to a report/bugfix by Adam Hupp <hupp-AT-cs.wisc.edu>.
3353 3357
3354 3358 2003-09-24 Fernando Perez <fperez@colorado.edu>
3355 3359
3356 3360 * IPython/Magic.py (Magic._ofind): blanket except around getattr()
3357 3361 to protect against poorly written user objects where __getattr__
3358 3362 raises exceptions other than AttributeError. Thanks to a bug
3359 3363 report by Oliver Sander <osander-AT-gmx.de>.
3360 3364
3361 3365 * IPython/FakeModule.py (FakeModule.__repr__): this method was
3362 3366 missing. Thanks to bug report by Ralf Schmitt <ralf-AT-brainbot.com>.
3363 3367
3364 3368 2003-09-09 Fernando Perez <fperez@colorado.edu>
3365 3369
3366 3370 * IPython/iplib.py (InteractiveShell._prefilter): fix bug where
3367 3371 unpacking a list whith a callable as first element would
3368 3372 mistakenly trigger autocalling. Thanks to a bug report by Jeffery
3369 3373 Collins.
3370 3374
3371 3375 2003-08-25 *** Released version 0.5.0
3372 3376
3373 3377 2003-08-22 Fernando Perez <fperez@colorado.edu>
3374 3378
3375 3379 * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of
3376 3380 improperly defined user exceptions. Thanks to feedback from Mark
3377 3381 Russell <mrussell-AT-verio.net>.
3378 3382
3379 3383 2003-08-20 Fernando Perez <fperez@colorado.edu>
3380 3384
3381 3385 * IPython/OInspect.py (Inspector.pinfo): changed String Form
3382 3386 printing so that it would print multi-line string forms starting
3383 3387 with a new line. This way the formatting is better respected for
3384 3388 objects which work hard to make nice string forms.
3385 3389
3386 3390 * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where
3387 3391 autocall would overtake data access for objects with both
3388 3392 __getitem__ and __call__.
3389 3393
3390 3394 2003-08-19 *** Released version 0.5.0-rc1
3391 3395
3392 3396 2003-08-19 Fernando Perez <fperez@colorado.edu>
3393 3397
3394 3398 * IPython/deep_reload.py (load_tail): single tiny change here
3395 3399 seems to fix the long-standing bug of dreload() failing to work
3396 3400 for dotted names. But this module is pretty tricky, so I may have
3397 3401 missed some subtlety. Needs more testing!.
3398 3402
3399 3403 * IPython/ultraTB.py (VerboseTB.linereader): harden against user
3400 3404 exceptions which have badly implemented __str__ methods.
3401 3405 (VerboseTB.text): harden against inspect.getinnerframes crashing,
3402 3406 which I've been getting reports about from Python 2.3 users. I
3403 3407 wish I had a simple test case to reproduce the problem, so I could
3404 3408 either write a cleaner workaround or file a bug report if
3405 3409 necessary.
3406 3410
3407 3411 * IPython/Magic.py (Magic.magic_edit): fixed bug where after
3408 3412 making a class 'foo', file 'foo.py' couldn't be edited. Thanks to
3409 3413 a bug report by Tjabo Kloppenburg.
3410 3414
3411 3415 * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb
3412 3416 crashes. Wrapped the pdb call in a blanket try/except, since pdb
3413 3417 seems rather unstable. Thanks to a bug report by Tjabo
3414 3418 Kloppenburg <tjabo.kloppenburg-AT-unix-ag.uni-siegen.de>.
3415 3419
3416 3420 * IPython/Release.py (version): release 0.5.0-rc1. I want to put
3417 3421 this out soon because of the critical fixes in the inner loop for
3418 3422 generators.
3419 3423
3420 3424 * IPython/Magic.py (Magic.getargspec): removed. This (and
3421 3425 _get_def) have been obsoleted by OInspect for a long time, I
3422 3426 hadn't noticed that they were dead code.
3423 3427 (Magic._ofind): restored _ofind functionality for a few literals
3424 3428 (those in ["''",'""','[]','{}','()']). But it won't work anymore
3425 3429 for things like "hello".capitalize?, since that would require a
3426 3430 potentially dangerous eval() again.
3427 3431
3428 3432 * IPython/iplib.py (InteractiveShell._prefilter): reorganized the
3429 3433 logic a bit more to clean up the escapes handling and minimize the
3430 3434 use of _ofind to only necessary cases. The interactive 'feel' of
3431 3435 IPython should have improved quite a bit with the changes in
3432 3436 _prefilter and _ofind (besides being far safer than before).
3433 3437
3434 3438 * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather
3435 3439 obscure, never reported). Edit would fail to find the object to
3436 3440 edit under some circumstances.
3437 3441 (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls
3438 3442 which were causing double-calling of generators. Those eval calls
3439 3443 were _very_ dangerous, since code with side effects could be
3440 3444 triggered. As they say, 'eval is evil'... These were the
3441 3445 nastiest evals in IPython. Besides, _ofind is now far simpler,
3442 3446 and it should also be quite a bit faster. Its use of inspect is
3443 3447 also safer, so perhaps some of the inspect-related crashes I've
3444 3448 seen lately with Python 2.3 might be taken care of. That will
3445 3449 need more testing.
3446 3450
3447 3451 2003-08-17 Fernando Perez <fperez@colorado.edu>
3448 3452
3449 3453 * IPython/iplib.py (InteractiveShell._prefilter): significant
3450 3454 simplifications to the logic for handling user escapes. Faster
3451 3455 and simpler code.
3452 3456
3453 3457 2003-08-14 Fernando Perez <fperez@colorado.edu>
3454 3458
3455 3459 * IPython/numutils.py (sum_flat): rewrote to be non-recursive.
3456 3460 Now it requires O(N) storage (N=size(a)) for non-contiguous input,
3457 3461 but it should be quite a bit faster. And the recursive version
3458 3462 generated O(log N) intermediate storage for all rank>1 arrays,
3459 3463 even if they were contiguous.
3460 3464 (l1norm): Added this function.
3461 3465 (norm): Added this function for arbitrary norms (including
3462 3466 l-infinity). l1 and l2 are still special cases for convenience
3463 3467 and speed.
3464 3468
3465 3469 2003-08-03 Fernando Perez <fperez@colorado.edu>
3466 3470
3467 3471 * IPython/Magic.py (Magic.magic_edit): Removed all remaining string
3468 3472 exceptions, which now raise PendingDeprecationWarnings in Python
3469 3473 2.3. There were some in Magic and some in Gnuplot2.
3470 3474
3471 3475 2003-06-30 Fernando Perez <fperez@colorado.edu>
3472 3476
3473 3477 * IPython/genutils.py (page): modified to call curses only for
3474 3478 terminals where TERM=='xterm'. After problems under many other
3475 3479 terminals were reported by Keith Beattie <KSBeattie-AT-lbl.gov>.
3476 3480
3477 3481 * IPython/iplib.py (complete): removed spurious 'print "IE"' which
3478 3482 would be triggered when readline was absent. This was just an old
3479 3483 debugging statement I'd forgotten to take out.
3480 3484
3481 3485 2003-06-20 Fernando Perez <fperez@colorado.edu>
3482 3486
3483 3487 * IPython/genutils.py (clock): modified to return only user time
3484 3488 (not counting system time), after a discussion on scipy. While
3485 3489 system time may be a useful quantity occasionally, it may much
3486 3490 more easily be skewed by occasional swapping or other similar
3487 3491 activity.
3488 3492
3489 3493 2003-06-05 Fernando Perez <fperez@colorado.edu>
3490 3494
3491 3495 * IPython/numutils.py (identity): new function, for building
3492 3496 arbitrary rank Kronecker deltas (mostly backwards compatible with
3493 3497 Numeric.identity)
3494 3498
3495 3499 2003-06-03 Fernando Perez <fperez@colorado.edu>
3496 3500
3497 3501 * IPython/iplib.py (InteractiveShell.handle_magic): protect
3498 3502 arguments passed to magics with spaces, to allow trailing '\' to
3499 3503 work normally (mainly for Windows users).
3500 3504
3501 3505 2003-05-29 Fernando Perez <fperez@colorado.edu>
3502 3506
3503 3507 * IPython/ipmaker.py (make_IPython): Load site._Helper() as help
3504 3508 instead of pydoc.help. This fixes a bizarre behavior where
3505 3509 printing '%s' % locals() would trigger the help system. Now
3506 3510 ipython behaves like normal python does.
3507 3511
3508 3512 Note that if one does 'from pydoc import help', the bizarre
3509 3513 behavior returns, but this will also happen in normal python, so
3510 3514 it's not an ipython bug anymore (it has to do with how pydoc.help
3511 3515 is implemented).
3512 3516
3513 3517 2003-05-22 Fernando Perez <fperez@colorado.edu>
3514 3518
3515 3519 * IPython/FlexCompleter.py (Completer.attr_matches): fixed to
3516 3520 return [] instead of None when nothing matches, also match to end
3517 3521 of line. Patch by Gary Bishop.
3518 3522
3519 3523 * IPython/ipmaker.py (make_IPython): Added same sys.excepthook
3520 3524 protection as before, for files passed on the command line. This
3521 3525 prevents the CrashHandler from kicking in if user files call into
3522 3526 sys.excepthook (such as PyQt and WxWindows have a nasty habit of
3523 3527 doing). After a report by Kasper Souren <Kasper.Souren-AT-ircam.fr>
3524 3528
3525 3529 2003-05-20 *** Released version 0.4.0
3526 3530
3527 3531 2003-05-20 Fernando Perez <fperez@colorado.edu>
3528 3532
3529 3533 * setup.py: added support for manpages. It's a bit hackish b/c of
3530 3534 a bug in the way the bdist_rpm distutils target handles gzipped
3531 3535 manpages, but it works. After a patch by Jack.
3532 3536
3533 3537 2003-05-19 Fernando Perez <fperez@colorado.edu>
3534 3538
3535 3539 * IPython/numutils.py: added a mockup of the kinds module, since
3536 3540 it was recently removed from Numeric. This way, numutils will
3537 3541 work for all users even if they are missing kinds.
3538 3542
3539 3543 * IPython/Magic.py (Magic._ofind): Harden against an inspect
3540 3544 failure, which can occur with SWIG-wrapped extensions. After a
3541 3545 crash report from Prabhu.
3542 3546
3543 3547 2003-05-16 Fernando Perez <fperez@colorado.edu>
3544 3548
3545 3549 * IPython/iplib.py (InteractiveShell.excepthook): New method to
3546 3550 protect ipython from user code which may call directly
3547 3551 sys.excepthook (this looks like an ipython crash to the user, even
3548 3552 when it isn't). After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3549 3553 This is especially important to help users of WxWindows, but may
3550 3554 also be useful in other cases.
3551 3555
3552 3556 * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow
3553 3557 an optional tb_offset to be specified, and to preserve exception
3554 3558 info if given. After a patch by Gary Bishop <gb-AT-cs.unc.edu>.
3555 3559
3556 3560 * ipython.1 (Default): Thanks to Jack's work, we now have manpages!
3557 3561
3558 3562 2003-05-15 Fernando Perez <fperez@colorado.edu>
3559 3563
3560 3564 * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when
3561 3565 installing for a new user under Windows.
3562 3566
3563 3567 2003-05-12 Fernando Perez <fperez@colorado.edu>
3564 3568
3565 3569 * IPython/iplib.py (InteractiveShell.handle_emacs): New line
3566 3570 handler for Emacs comint-based lines. Currently it doesn't do
3567 3571 much (but importantly, it doesn't update the history cache). In
3568 3572 the future it may be expanded if Alex needs more functionality
3569 3573 there.
3570 3574
3571 3575 * IPython/CrashHandler.py (CrashHandler.__call__): Added platform
3572 3576 info to crash reports.
3573 3577
3574 3578 * IPython/iplib.py (InteractiveShell.mainloop): Added -c option,
3575 3579 just like Python's -c. Also fixed crash with invalid -color
3576 3580 option value at startup. Thanks to Will French
3577 3581 <wfrench-AT-bestweb.net> for the bug report.
3578 3582
3579 3583 2003-05-09 Fernando Perez <fperez@colorado.edu>
3580 3584
3581 3585 * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString
3582 3586 to EvalDict (it's a mapping, after all) and simplified its code
3583 3587 quite a bit, after a nice discussion on c.l.py where Gustavo
3584 3588 CΓ³rdova <gcordova-AT-sismex.com> suggested the new version.
3585 3589
3586 3590 2003-04-30 Fernando Perez <fperez@colorado.edu>
3587 3591
3588 3592 * IPython/genutils.py (timings_out): modified it to reduce its
3589 3593 overhead in the common reps==1 case.
3590 3594
3591 3595 2003-04-29 Fernando Perez <fperez@colorado.edu>
3592 3596
3593 3597 * IPython/genutils.py (timings_out): Modified to use the resource
3594 3598 module, which avoids the wraparound problems of time.clock().
3595 3599
3596 3600 2003-04-17 *** Released version 0.2.15pre4
3597 3601
3598 3602 2003-04-17 Fernando Perez <fperez@colorado.edu>
3599 3603
3600 3604 * setup.py (scriptfiles): Split windows-specific stuff over to a
3601 3605 separate file, in an attempt to have a Windows GUI installer.
3602 3606 That didn't work, but part of the groundwork is done.
3603 3607
3604 3608 * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for
3605 3609 indent/unindent with 4 spaces. Particularly useful in combination
3606 3610 with the new auto-indent option.
3607 3611
3608 3612 2003-04-16 Fernando Perez <fperez@colorado.edu>
3609 3613
3610 3614 * IPython/Magic.py: various replacements of self.rc for
3611 3615 self.shell.rc. A lot more remains to be done to fully disentangle
3612 3616 this class from the main Shell class.
3613 3617
3614 3618 * IPython/GnuplotRuntime.py: added checks for mouse support so
3615 3619 that we don't try to enable it if the current gnuplot doesn't
3616 3620 really support it. Also added checks so that we don't try to
3617 3621 enable persist under Windows (where Gnuplot doesn't recognize the
3618 3622 option).
3619 3623
3620 3624 * IPython/iplib.py (InteractiveShell.interact): Added optional
3621 3625 auto-indenting code, after a patch by King C. Shu
3622 3626 <kingshu-AT-myrealbox.com>. It's off by default because it doesn't
3623 3627 get along well with pasting indented code. If I ever figure out
3624 3628 how to make that part go well, it will become on by default.
3625 3629
3626 3630 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would
3627 3631 crash ipython if there was an unmatched '%' in the user's prompt
3628 3632 string. Reported by Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
3629 3633
3630 3634 * IPython/iplib.py (InteractiveShell.interact): removed the
3631 3635 ability to ask the user whether he wants to crash or not at the
3632 3636 'last line' exception handler. Calling functions at that point
3633 3637 changes the stack, and the error reports would have incorrect
3634 3638 tracebacks.
3635 3639
3636 3640 * IPython/Magic.py (Magic.magic_page): Added new @page magic, to
3637 3641 pass through a peger a pretty-printed form of any object. After a
3638 3642 contribution by Olivier Aubert <oaubert-AT-bat710.univ-lyon1.fr>
3639 3643
3640 3644 2003-04-14 Fernando Perez <fperez@colorado.edu>
3641 3645
3642 3646 * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where
3643 3647 all files in ~ would be modified at first install (instead of
3644 3648 ~/.ipython). This could be potentially disastrous, as the
3645 3649 modification (make line-endings native) could damage binary files.
3646 3650
3647 3651 2003-04-10 Fernando Perez <fperez@colorado.edu>
3648 3652
3649 3653 * IPython/iplib.py (InteractiveShell.handle_help): Modified to
3650 3654 handle only lines which are invalid python. This now means that
3651 3655 lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins
3652 3656 for the bug report.
3653 3657
3654 3658 2003-04-01 Fernando Perez <fperez@colorado.edu>
3655 3659
3656 3660 * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug
3657 3661 where failing to set sys.last_traceback would crash pdb.pm().
3658 3662 Thanks to Jeffery D. Collins <Jeff.Collins-AT-vexcel.com> for the bug
3659 3663 report.
3660 3664
3661 3665 2003-03-25 Fernando Perez <fperez@colorado.edu>
3662 3666
3663 3667 * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler
3664 3668 before printing it (it had a lot of spurious blank lines at the
3665 3669 end).
3666 3670
3667 3671 * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr
3668 3672 output would be sent 21 times! Obviously people don't use this
3669 3673 too often, or I would have heard about it.
3670 3674
3671 3675 2003-03-24 Fernando Perez <fperez@colorado.edu>
3672 3676
3673 3677 * setup.py (scriptfiles): renamed the data_files parameter from
3674 3678 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink
3675 3679 for the patch.
3676 3680
3677 3681 2003-03-20 Fernando Perez <fperez@colorado.edu>
3678 3682
3679 3683 * IPython/genutils.py (error): added error() and fatal()
3680 3684 functions.
3681 3685
3682 3686 2003-03-18 *** Released version 0.2.15pre3
3683 3687
3684 3688 2003-03-18 Fernando Perez <fperez@colorado.edu>
3685 3689
3686 3690 * setupext/install_data_ext.py
3687 3691 (install_data_ext.initialize_options): Class contributed by Jack
3688 3692 Moffit for fixing the old distutils hack. He is sending this to
3689 3693 the distutils folks so in the future we may not need it as a
3690 3694 private fix.
3691 3695
3692 3696 * MANIFEST.in: Extensive reorganization, based on Jack Moffit's
3693 3697 changes for Debian packaging. See his patch for full details.
3694 3698 The old distutils hack of making the ipythonrc* files carry a
3695 3699 bogus .py extension is gone, at last. Examples were moved to a
3696 3700 separate subdir under doc/, and the separate executable scripts
3697 3701 now live in their own directory. Overall a great cleanup. The
3698 3702 manual was updated to use the new files, and setup.py has been
3699 3703 fixed for this setup.
3700 3704
3701 3705 * IPython/PyColorize.py (Parser.usage): made non-executable and
3702 3706 created a pycolor wrapper around it to be included as a script.
3703 3707
3704 3708 2003-03-12 *** Released version 0.2.15pre2
3705 3709
3706 3710 2003-03-12 Fernando Perez <fperez@colorado.edu>
3707 3711
3708 3712 * IPython/ColorANSI.py (make_color_table): Finally fixed the
3709 3713 long-standing problem with garbage characters in some terminals.
3710 3714 The issue was really that the \001 and \002 escapes must _only_ be
3711 3715 passed to input prompts (which call readline), but _never_ to
3712 3716 normal text to be printed on screen. I changed ColorANSI to have
3713 3717 two classes: TermColors and InputTermColors, each with the
3714 3718 appropriate escapes for input prompts or normal text. The code in
3715 3719 Prompts.py got slightly more complicated, but this very old and
3716 3720 annoying bug is finally fixed.
3717 3721
3718 3722 All the credit for nailing down the real origin of this problem
3719 3723 and the correct solution goes to Jack Moffit <jack-AT-xiph.org>.
3720 3724 *Many* thanks to him for spending quite a bit of effort on this.
3721 3725
3722 3726 2003-03-05 *** Released version 0.2.15pre1
3723 3727
3724 3728 2003-03-03 Fernando Perez <fperez@colorado.edu>
3725 3729
3726 3730 * IPython/FakeModule.py: Moved the former _FakeModule to a
3727 3731 separate file, because it's also needed by Magic (to fix a similar
3728 3732 pickle-related issue in @run).
3729 3733
3730 3734 2003-03-02 Fernando Perez <fperez@colorado.edu>
3731 3735
3732 3736 * IPython/Magic.py (Magic.magic_autocall): new magic to control
3733 3737 the autocall option at runtime.
3734 3738 (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns
3735 3739 across Magic.py to start separating Magic from InteractiveShell.
3736 3740 (Magic._ofind): Fixed to return proper namespace for dotted
3737 3741 names. Before, a dotted name would always return 'not currently
3738 3742 defined', because it would find the 'parent'. s.x would be found,
3739 3743 but since 'x' isn't defined by itself, it would get confused.
3740 3744 (Magic.magic_run): Fixed pickling problems reported by Ralf
3741 3745 Ahlbrink <RAhlbrink-AT-RosenInspection.net>. The fix was similar to
3742 3746 that I'd used when Mike Heeter reported similar issues at the
3743 3747 top-level, but now for @run. It boils down to injecting the
3744 3748 namespace where code is being executed with something that looks
3745 3749 enough like a module to fool pickle.dump(). Since a pickle stores
3746 3750 a named reference to the importing module, we need this for
3747 3751 pickles to save something sensible.
3748 3752
3749 3753 * IPython/ipmaker.py (make_IPython): added an autocall option.
3750 3754
3751 3755 * IPython/iplib.py (InteractiveShell._prefilter): reordered all of
3752 3756 the auto-eval code. Now autocalling is an option, and the code is
3753 3757 also vastly safer. There is no more eval() involved at all.
3754 3758
3755 3759 2003-03-01 Fernando Perez <fperez@colorado.edu>
3756 3760
3757 3761 * IPython/Magic.py (Magic._ofind): Changed interface to return a
3758 3762 dict with named keys instead of a tuple.
3759 3763
3760 3764 * IPython: Started using CVS for IPython as of 0.2.15pre1.
3761 3765
3762 3766 * setup.py (make_shortcut): Fixed message about directories
3763 3767 created during Windows installation (the directories were ok, just
3764 3768 the printed message was misleading). Thanks to Chris Liechti
3765 3769 <cliechti-AT-gmx.net> for the heads up.
3766 3770
3767 3771 2003-02-21 Fernando Perez <fperez@colorado.edu>
3768 3772
3769 3773 * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching
3770 3774 of ValueError exception when checking for auto-execution. This
3771 3775 one is raised by things like Numeric arrays arr.flat when the
3772 3776 array is non-contiguous.
3773 3777
3774 3778 2003-01-31 Fernando Perez <fperez@colorado.edu>
3775 3779
3776 3780 * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would
3777 3781 not return any value at all (even though the command would get
3778 3782 executed).
3779 3783 (xsys): Flush stdout right after printing the command to ensure
3780 3784 proper ordering of commands and command output in the total
3781 3785 output.
3782 3786 (SystemExec/xsys/bq): Switched the names of xsys/bq and
3783 3787 system/getoutput as defaults. The old ones are kept for
3784 3788 compatibility reasons, so no code which uses this library needs
3785 3789 changing.
3786 3790
3787 3791 2003-01-27 *** Released version 0.2.14
3788 3792
3789 3793 2003-01-25 Fernando Perez <fperez@colorado.edu>
3790 3794
3791 3795 * IPython/Magic.py (Magic.magic_edit): Fixed problem where
3792 3796 functions defined in previous edit sessions could not be re-edited
3793 3797 (because the temp files were immediately removed). Now temp files
3794 3798 are removed only at IPython's exit.
3795 3799 (Magic.magic_run): Improved @run to perform shell-like expansions
3796 3800 on its arguments (~users and $VARS). With this, @run becomes more
3797 3801 like a normal command-line.
3798 3802
3799 3803 * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small
3800 3804 bugs related to embedding and cleaned up that code. A fairly
3801 3805 important one was the impossibility to access the global namespace
3802 3806 through the embedded IPython (only local variables were visible).
3803 3807
3804 3808 2003-01-14 Fernando Perez <fperez@colorado.edu>
3805 3809
3806 3810 * IPython/iplib.py (InteractiveShell._prefilter): Fixed
3807 3811 auto-calling to be a bit more conservative. Now it doesn't get
3808 3812 triggered if any of '!=()<>' are in the rest of the input line, to
3809 3813 allow comparing callables. Thanks to Alex for the heads up.
3810 3814
3811 3815 2003-01-07 Fernando Perez <fperez@colorado.edu>
3812 3816
3813 3817 * IPython/genutils.py (page): fixed estimation of the number of
3814 3818 lines in a string to be paged to simply count newlines. This
3815 3819 prevents over-guessing due to embedded escape sequences. A better
3816 3820 long-term solution would involve stripping out the control chars
3817 3821 for the count, but it's potentially so expensive I just don't
3818 3822 think it's worth doing.
3819 3823
3820 3824 2002-12-19 *** Released version 0.2.14pre50
3821 3825
3822 3826 2002-12-19 Fernando Perez <fperez@colorado.edu>
3823 3827
3824 3828 * tools/release (version): Changed release scripts to inform
3825 3829 Andrea and build a NEWS file with a list of recent changes.
3826 3830
3827 3831 * IPython/ColorANSI.py (__all__): changed terminal detection
3828 3832 code. Seems to work better for xterms without breaking
3829 3833 konsole. Will need more testing to determine if WinXP and Mac OSX
3830 3834 also work ok.
3831 3835
3832 3836 2002-12-18 *** Released version 0.2.14pre49
3833 3837
3834 3838 2002-12-18 Fernando Perez <fperez@colorado.edu>
3835 3839
3836 3840 * Docs: added new info about Mac OSX, from Andrea.
3837 3841
3838 3842 * IPython/Gnuplot2.py (String): Added a String PlotItem class to
3839 3843 allow direct plotting of python strings whose format is the same
3840 3844 of gnuplot data files.
3841 3845
3842 3846 2002-12-16 Fernando Perez <fperez@colorado.edu>
3843 3847
3844 3848 * IPython/iplib.py (InteractiveShell.interact): fixed default (y)
3845 3849 value of exit question to be acknowledged.
3846 3850
3847 3851 2002-12-03 Fernando Perez <fperez@colorado.edu>
3848 3852
3849 3853 * IPython/ipmaker.py: removed generators, which had been added
3850 3854 by mistake in an earlier debugging run. This was causing trouble
3851 3855 to users of python 2.1.x. Thanks to Abel Daniel <abli-AT-freemail.hu>
3852 3856 for pointing this out.
3853 3857
3854 3858 2002-11-17 Fernando Perez <fperez@colorado.edu>
3855 3859
3856 3860 * Manual: updated the Gnuplot section.
3857 3861
3858 3862 * IPython/GnuplotRuntime.py: refactored a lot all this code, with
3859 3863 a much better split of what goes in Runtime and what goes in
3860 3864 Interactive.
3861 3865
3862 3866 * IPython/ipmaker.py: fixed bug where import_fail_info wasn't
3863 3867 being imported from iplib.
3864 3868
3865 3869 * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc
3866 3870 for command-passing. Now the global Gnuplot instance is called
3867 3871 'gp' instead of 'g', which was really a far too fragile and
3868 3872 common name.
3869 3873
3870 3874 * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken
3871 3875 bounding boxes generated by Gnuplot for square plots.
3872 3876
3873 3877 * IPython/genutils.py (popkey): new function added. I should
3874 3878 suggest this on c.l.py as a dict method, it seems useful.
3875 3879
3876 3880 * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot
3877 3881 to transparently handle PostScript generation. MUCH better than
3878 3882 the previous plot_eps/replot_eps (which I removed now). The code
3879 3883 is also fairly clean and well documented now (including
3880 3884 docstrings).
3881 3885
3882 3886 2002-11-13 Fernando Perez <fperez@colorado.edu>
3883 3887
3884 3888 * IPython/Magic.py (Magic.magic_edit): fixed docstring
3885 3889 (inconsistent with options).
3886 3890
3887 3891 * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been
3888 3892 manually disabled, I don't know why. Fixed it.
3889 3893 (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly
3890 3894 eps output.
3891 3895
3892 3896 2002-11-12 Fernando Perez <fperez@colorado.edu>
3893 3897
3894 3898 * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they
3895 3899 don't propagate up to caller. Fixes crash reported by François
3896 3900 Pinard.
3897 3901
3898 3902 2002-11-09 Fernando Perez <fperez@colorado.edu>
3899 3903
3900 3904 * IPython/ipmaker.py (make_IPython): fixed problem with writing
3901 3905 history file for new users.
3902 3906 (make_IPython): fixed bug where initial install would leave the
3903 3907 user running in the .ipython dir.
3904 3908 (make_IPython): fixed bug where config dir .ipython would be
3905 3909 created regardless of the given -ipythondir option. Thanks to Cory
3906 3910 Dodt <cdodt-AT-fcoe.k12.ca.us> for the bug report.
3907 3911
3908 3912 * IPython/genutils.py (ask_yes_no): new function for asking yes/no
3909 3913 type confirmations. Will need to use it in all of IPython's code
3910 3914 consistently.
3911 3915
3912 3916 * IPython/CrashHandler.py (CrashHandler.__call__): changed the
3913 3917 context to print 31 lines instead of the default 5. This will make
3914 3918 the crash reports extremely detailed in case the problem is in
3915 3919 libraries I don't have access to.
3916 3920
3917 3921 * IPython/iplib.py (InteractiveShell.interact): changed the 'last
3918 3922 line of defense' code to still crash, but giving users fair
3919 3923 warning. I don't want internal errors to go unreported: if there's
3920 3924 an internal problem, IPython should crash and generate a full
3921 3925 report.
3922 3926
3923 3927 2002-11-08 Fernando Perez <fperez@colorado.edu>
3924 3928
3925 3929 * IPython/iplib.py (InteractiveShell.interact): added code to trap
3926 3930 otherwise uncaught exceptions which can appear if people set
3927 3931 sys.stdout to something badly broken. Thanks to a crash report
3928 3932 from henni-AT-mail.brainbot.com.
3929 3933
3930 3934 2002-11-04 Fernando Perez <fperez@colorado.edu>
3931 3935
3932 3936 * IPython/iplib.py (InteractiveShell.interact): added
3933 3937 __IPYTHON__active to the builtins. It's a flag which goes on when
3934 3938 the interaction starts and goes off again when it stops. This
3935 3939 allows embedding code to detect being inside IPython. Before this
3936 3940 was done via __IPYTHON__, but that only shows that an IPython
3937 3941 instance has been created.
3938 3942
3939 3943 * IPython/Magic.py (Magic.magic_env): I realized that in a
3940 3944 UserDict, instance.data holds the data as a normal dict. So I
3941 3945 modified @env to return os.environ.data instead of rebuilding a
3942 3946 dict by hand.
3943 3947
3944 3948 2002-11-02 Fernando Perez <fperez@colorado.edu>
3945 3949
3946 3950 * IPython/genutils.py (warn): changed so that level 1 prints no
3947 3951 header. Level 2 is now the default (with 'WARNING' header, as
3948 3952 before). I think I tracked all places where changes were needed in
3949 3953 IPython, but outside code using the old level numbering may have
3950 3954 broken.
3951 3955
3952 3956 * IPython/iplib.py (InteractiveShell.runcode): added this to
3953 3957 handle the tracebacks in SystemExit traps correctly. The previous
3954 3958 code (through interact) was printing more of the stack than
3955 3959 necessary, showing IPython internal code to the user.
3956 3960
3957 3961 * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by
3958 3962 default. Now that the default at the confirmation prompt is yes,
3959 3963 it's not so intrusive. François' argument that ipython sessions
3960 3964 tend to be complex enough not to lose them from an accidental C-d,
3961 3965 is a valid one.
3962 3966
3963 3967 * IPython/iplib.py (InteractiveShell.interact): added a
3964 3968 showtraceback() call to the SystemExit trap, and modified the exit
3965 3969 confirmation to have yes as the default.
3966 3970
3967 3971 * IPython/UserConfig/ipythonrc.py: removed 'session' option from
3968 3972 this file. It's been gone from the code for a long time, this was
3969 3973 simply leftover junk.
3970 3974
3971 3975 2002-11-01 Fernando Perez <fperez@colorado.edu>
3972 3976
3973 3977 * IPython/UserConfig/ipythonrc.py: new confirm_exit option
3974 3978 added. If set, IPython now traps EOF and asks for
3975 3979 confirmation. After a request by François Pinard.
3976 3980
3977 3981 * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead
3978 3982 of @abort, and with a new (better) mechanism for handling the
3979 3983 exceptions.
3980 3984
3981 3985 2002-10-27 Fernando Perez <fperez@colorado.edu>
3982 3986
3983 3987 * IPython/usage.py (__doc__): updated the --help information and
3984 3988 the ipythonrc file to indicate that -log generates
3985 3989 ./ipython.log. Also fixed the corresponding info in @logstart.
3986 3990 This and several other fixes in the manuals thanks to reports by
3987 3991 François Pinard <pinard-AT-iro.umontreal.ca>.
3988 3992
3989 3993 * IPython/Logger.py (Logger.switch_log): Fixed error message to
3990 3994 refer to @logstart (instead of @log, which doesn't exist).
3991 3995
3992 3996 * IPython/iplib.py (InteractiveShell._prefilter): fixed
3993 3997 AttributeError crash. Thanks to Christopher Armstrong
3994 3998 <radix-AT-twistedmatrix.com> for the report/fix. This bug had been
3995 3999 introduced recently (in 0.2.14pre37) with the fix to the eval
3996 4000 problem mentioned below.
3997 4001
3998 4002 2002-10-17 Fernando Perez <fperez@colorado.edu>
3999 4003
4000 4004 * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows
4001 4005 installation. Thanks to Leonardo Santagada <retype-AT-terra.com.br>.
4002 4006
4003 4007 * IPython/iplib.py (InteractiveShell._prefilter): Many changes to
4004 4008 this function to fix a problem reported by Alex Schmolck. He saw
4005 4009 it with list comprehensions and generators, which were getting
4006 4010 called twice. The real problem was an 'eval' call in testing for
4007 4011 automagic which was evaluating the input line silently.
4008 4012
4009 4013 This is a potentially very nasty bug, if the input has side
4010 4014 effects which must not be repeated. The code is much cleaner now,
4011 4015 without any blanket 'except' left and with a regexp test for
4012 4016 actual function names.
4013 4017
4014 4018 But an eval remains, which I'm not fully comfortable with. I just
4015 4019 don't know how to find out if an expression could be a callable in
4016 4020 the user's namespace without doing an eval on the string. However
4017 4021 that string is now much more strictly checked so that no code
4018 4022 slips by, so the eval should only happen for things that can
4019 4023 really be only function/method names.
4020 4024
4021 4025 2002-10-15 Fernando Perez <fperez@colorado.edu>
4022 4026
4023 4027 * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac
4024 4028 OSX information to main manual, removed README_Mac_OSX file from
4025 4029 distribution. Also updated credits for recent additions.
4026 4030
4027 4031 2002-10-10 Fernando Perez <fperez@colorado.edu>
4028 4032
4029 4033 * README_Mac_OSX: Added a README for Mac OSX users for fixing
4030 4034 terminal-related issues. Many thanks to Andrea Riciputi
4031 4035 <andrea.riciputi-AT-libero.it> for writing it.
4032 4036
4033 4037 * IPython/UserConfig/ipythonrc.py: Fixes to various small issues,
4034 4038 thanks to Thorsten Kampe <thorsten-AT-thorstenkampe.de>.
4035 4039
4036 4040 * setup.py (make_shortcut): Fixes for Windows installation. Thanks
4037 4041 to Fredrik Kant <fredrik.kant-AT-front.com> and Syver Enstad
4038 4042 <syver-en-AT-online.no> who both submitted patches for this problem.
4039 4043
4040 4044 * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for
4041 4045 global embedding to make sure that things don't overwrite user
4042 4046 globals accidentally. Thanks to Richard <rxe-AT-renre-europe.com>
4043 4047
4044 4048 * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6
4045 4049 compatibility. Thanks to Hayden Callow
4046 4050 <h.callow-AT-elec.canterbury.ac.nz>
4047 4051
4048 4052 2002-10-04 Fernando Perez <fperez@colorado.edu>
4049 4053
4050 4054 * IPython/Gnuplot2.py (PlotItem): Added 'index' option for
4051 4055 Gnuplot.File objects.
4052 4056
4053 4057 2002-07-23 Fernando Perez <fperez@colorado.edu>
4054 4058
4055 4059 * IPython/genutils.py (timing): Added timings() and timing() for
4056 4060 quick access to the most commonly needed data, the execution
4057 4061 times. Old timing() renamed to timings_out().
4058 4062
4059 4063 2002-07-18 Fernando Perez <fperez@colorado.edu>
4060 4064
4061 4065 * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed
4062 4066 bug with nested instances disrupting the parent's tab completion.
4063 4067
4064 4068 * IPython/iplib.py (all_completions): Added Alex Schmolck's
4065 4069 all_completions code to begin the emacs integration.
4066 4070
4067 4071 * IPython/Gnuplot2.py (zip_items): Added optional 'titles'
4068 4072 argument to allow titling individual arrays when plotting.
4069 4073
4070 4074 2002-07-15 Fernando Perez <fperez@colorado.edu>
4071 4075
4072 4076 * setup.py (make_shortcut): changed to retrieve the value of
4073 4077 'Program Files' directory from the registry (this value changes in
4074 4078 non-english versions of Windows). Thanks to Thomas Fanslau
4075 4079 <tfanslau-AT-gmx.de> for the report.
4076 4080
4077 4081 2002-07-10 Fernando Perez <fperez@colorado.edu>
4078 4082
4079 4083 * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for
4080 4084 a bug in pdb, which crashes if a line with only whitespace is
4081 4085 entered. Bug report submitted to sourceforge.
4082 4086
4083 4087 2002-07-09 Fernando Perez <fperez@colorado.edu>
4084 4088
4085 4089 * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when
4086 4090 reporting exceptions (it's a bug in inspect.py, I just set a
4087 4091 workaround).
4088 4092
4089 4093 2002-07-08 Fernando Perez <fperez@colorado.edu>
4090 4094
4091 4095 * IPython/iplib.py (InteractiveShell.__init__): fixed reference to
4092 4096 __IPYTHON__ in __builtins__ to show up in user_ns.
4093 4097
4094 4098 2002-07-03 Fernando Perez <fperez@colorado.edu>
4095 4099
4096 4100 * IPython/GnuplotInteractive.py (magic_gp_set_default): changed
4097 4101 name from @gp_set_instance to @gp_set_default.
4098 4102
4099 4103 * IPython/ipmaker.py (make_IPython): default editor value set to
4100 4104 '0' (a string), to match the rc file. Otherwise will crash when
4101 4105 .strip() is called on it.
4102 4106
4103 4107
4104 4108 2002-06-28 Fernando Perez <fperez@colorado.edu>
4105 4109
4106 4110 * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing
4107 4111 of files in current directory when a file is executed via
4108 4112 @run. Patch also by RA <ralf_ahlbrink-AT-web.de>.
4109 4113
4110 4114 * setup.py (manfiles): fix for rpm builds, submitted by RA
4111 4115 <ralf_ahlbrink-AT-web.de>. Now we have RPMs!
4112 4116
4113 4117 * IPython/ipmaker.py (make_IPython): fixed lookup of default
4114 4118 editor when set to '0'. Problem was, '0' evaluates to True (it's a
4115 4119 string!). A. Schmolck caught this one.
4116 4120
4117 4121 2002-06-27 Fernando Perez <fperez@colorado.edu>
4118 4122
4119 4123 * IPython/ipmaker.py (make_IPython): fixed bug when running user
4120 4124 defined files at the cmd line. __name__ wasn't being set to
4121 4125 __main__.
4122 4126
4123 4127 * IPython/Gnuplot2.py (zip_items): improved it so it can plot also
4124 4128 regular lists and tuples besides Numeric arrays.
4125 4129
4126 4130 * IPython/Prompts.py (CachedOutput.__call__): Added output
4127 4131 supression for input ending with ';'. Similar to Mathematica and
4128 4132 Matlab. The _* vars and Out[] list are still updated, just like
4129 4133 Mathematica behaves.
4130 4134
4131 4135 2002-06-25 Fernando Perez <fperez@colorado.edu>
4132 4136
4133 4137 * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of
4134 4138 .ini extensions for profiels under Windows.
4135 4139
4136 4140 * IPython/OInspect.py (Inspector.pinfo): improved alignment of
4137 4141 string form. Fix contributed by Alexander Schmolck
4138 4142 <a.schmolck-AT-gmx.net>
4139 4143
4140 4144 * IPython/GnuplotRuntime.py (gp_new): new function. Returns a
4141 4145 pre-configured Gnuplot instance.
4142 4146
4143 4147 2002-06-21 Fernando Perez <fperez@colorado.edu>
4144 4148
4145 4149 * IPython/numutils.py (exp_safe): new function, works around the
4146 4150 underflow problems in Numeric.
4147 4151 (log2): New fn. Safe log in base 2: returns exact integer answer
4148 4152 for exact integer powers of 2.
4149 4153
4150 4154 * IPython/Magic.py (get_py_filename): fixed it not expanding '~'
4151 4155 properly.
4152 4156
4153 4157 2002-06-20 Fernando Perez <fperez@colorado.edu>
4154 4158
4155 4159 * IPython/genutils.py (timing): new function like
4156 4160 Mathematica's. Similar to time_test, but returns more info.
4157 4161
4158 4162 2002-06-18 Fernando Perez <fperez@colorado.edu>
4159 4163
4160 4164 * IPython/Magic.py (Magic.magic_save): modified @save and @r
4161 4165 according to Mike Heeter's suggestions.
4162 4166
4163 4167 2002-06-16 Fernando Perez <fperez@colorado.edu>
4164 4168
4165 4169 * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot
4166 4170 system. GnuplotMagic is gone as a user-directory option. New files
4167 4171 make it easier to use all the gnuplot stuff both from external
4168 4172 programs as well as from IPython. Had to rewrite part of
4169 4173 hardcopy() b/c of a strange bug: often the ps files simply don't
4170 4174 get created, and require a repeat of the command (often several
4171 4175 times).
4172 4176
4173 4177 * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to
4174 4178 resolve output channel at call time, so that if sys.stderr has
4175 4179 been redirected by user this gets honored.
4176 4180
4177 4181 2002-06-13 Fernando Perez <fperez@colorado.edu>
4178 4182
4179 4183 * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to
4180 4184 IPShell. Kept a copy with the old names to avoid breaking people's
4181 4185 embedded code.
4182 4186
4183 4187 * IPython/ipython: simplified it to the bare minimum after
4184 4188 Holger's suggestions. Added info about how to use it in
4185 4189 PYTHONSTARTUP.
4186 4190
4187 4191 * IPython/Shell.py (IPythonShell): changed the options passing
4188 4192 from a string with funky %s replacements to a straight list. Maybe
4189 4193 a bit more typing, but it follows sys.argv conventions, so there's
4190 4194 less special-casing to remember.
4191 4195
4192 4196 2002-06-12 Fernando Perez <fperez@colorado.edu>
4193 4197
4194 4198 * IPython/Magic.py (Magic.magic_r): new magic auto-repeat
4195 4199 command. Thanks to a suggestion by Mike Heeter.
4196 4200 (Magic.magic_pfile): added behavior to look at filenames if given
4197 4201 arg is not a defined object.
4198 4202 (Magic.magic_save): New @save function to save code snippets. Also
4199 4203 a Mike Heeter idea.
4200 4204
4201 4205 * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to
4202 4206 plot() and replot(). Much more convenient now, especially for
4203 4207 interactive use.
4204 4208
4205 4209 * IPython/Magic.py (Magic.magic_run): Added .py automatically to
4206 4210 filenames.
4207 4211
4208 4212 2002-06-02 Fernando Perez <fperez@colorado.edu>
4209 4213
4210 4214 * IPython/Struct.py (Struct.__init__): modified to admit
4211 4215 initialization via another struct.
4212 4216
4213 4217 * IPython/genutils.py (SystemExec.__init__): New stateful
4214 4218 interface to xsys and bq. Useful for writing system scripts.
4215 4219
4216 4220 2002-05-30 Fernando Perez <fperez@colorado.edu>
4217 4221
4218 4222 * MANIFEST.in: Changed docfile selection to exclude all the lyx
4219 4223 documents. This will make the user download smaller (it's getting
4220 4224 too big).
4221 4225
4222 4226 2002-05-29 Fernando Perez <fperez@colorado.edu>
4223 4227
4224 4228 * IPython/iplib.py (_FakeModule.__init__): New class introduced to
4225 4229 fix problems with shelve and pickle. Seems to work, but I don't
4226 4230 know if corner cases break it. Thanks to Mike Heeter
4227 4231 <korora-AT-SDF.LONESTAR.ORG> for the bug reports and test cases.
4228 4232
4229 4233 2002-05-24 Fernando Perez <fperez@colorado.edu>
4230 4234
4231 4235 * IPython/Magic.py (Macro.__init__): fixed magics embedded in
4232 4236 macros having broken.
4233 4237
4234 4238 2002-05-21 Fernando Perez <fperez@colorado.edu>
4235 4239
4236 4240 * IPython/Magic.py (Magic.magic_logstart): fixed recently
4237 4241 introduced logging bug: all history before logging started was
4238 4242 being written one character per line! This came from the redesign
4239 4243 of the input history as a special list which slices to strings,
4240 4244 not to lists.
4241 4245
4242 4246 2002-05-20 Fernando Perez <fperez@colorado.edu>
4243 4247
4244 4248 * IPython/Prompts.py (CachedOutput.__init__): made the color table
4245 4249 be an attribute of all classes in this module. The design of these
4246 4250 classes needs some serious overhauling.
4247 4251
4248 4252 * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug
4249 4253 which was ignoring '_' in option names.
4250 4254
4251 4255 * IPython/ultraTB.py (FormattedTB.__init__): Changed
4252 4256 'Verbose_novars' to 'Context' and made it the new default. It's a
4253 4257 bit more readable and also safer than verbose.
4254 4258
4255 4259 * IPython/PyColorize.py (Parser.__call__): Fixed coloring of
4256 4260 triple-quoted strings.
4257 4261
4258 4262 * IPython/OInspect.py (__all__): new module exposing the object
4259 4263 introspection facilities. Now the corresponding magics are dummy
4260 4264 wrappers around this. Having this module will make it much easier
4261 4265 to put these functions into our modified pdb.
4262 4266 This new object inspector system uses the new colorizing module,
4263 4267 so source code and other things are nicely syntax highlighted.
4264 4268
4265 4269 2002-05-18 Fernando Perez <fperez@colorado.edu>
4266 4270
4267 4271 * IPython/ColorANSI.py: Split the coloring tools into a separate
4268 4272 module so I can use them in other code easier (they were part of
4269 4273 ultraTB).
4270 4274
4271 4275 2002-05-17 Fernando Perez <fperez@colorado.edu>
4272 4276
4273 4277 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4274 4278 fixed it to set the global 'g' also to the called instance, as
4275 4279 long as 'g' was still a gnuplot instance (so it doesn't overwrite
4276 4280 user's 'g' variables).
4277 4281
4278 4282 * IPython/iplib.py (InteractiveShell.__init__): Added In/Out
4279 4283 global variables (aliases to _ih,_oh) so that users which expect
4280 4284 In[5] or Out[7] to work aren't unpleasantly surprised.
4281 4285 (InputList.__getslice__): new class to allow executing slices of
4282 4286 input history directly. Very simple class, complements the use of
4283 4287 macros.
4284 4288
4285 4289 2002-05-16 Fernando Perez <fperez@colorado.edu>
4286 4290
4287 4291 * setup.py (docdirbase): make doc directory be just doc/IPython
4288 4292 without version numbers, it will reduce clutter for users.
4289 4293
4290 4294 * IPython/Magic.py (Magic.magic_run): Add explicit local dict to
4291 4295 execfile call to prevent possible memory leak. See for details:
4292 4296 http://mail.python.org/pipermail/python-list/2002-February/088476.html
4293 4297
4294 4298 2002-05-15 Fernando Perez <fperez@colorado.edu>
4295 4299
4296 4300 * IPython/Magic.py (Magic.magic_psource): made the object
4297 4301 introspection names be more standard: pdoc, pdef, pfile and
4298 4302 psource. They all print/page their output, and it makes
4299 4303 remembering them easier. Kept old names for compatibility as
4300 4304 aliases.
4301 4305
4302 4306 2002-05-14 Fernando Perez <fperez@colorado.edu>
4303 4307
4304 4308 * IPython/UserConfig/GnuplotMagic.py: I think I finally understood
4305 4309 what the mouse problem was. The trick is to use gnuplot with temp
4306 4310 files and NOT with pipes (for data communication), because having
4307 4311 both pipes and the mouse on is bad news.
4308 4312
4309 4313 2002-05-13 Fernando Perez <fperez@colorado.edu>
4310 4314
4311 4315 * IPython/Magic.py (Magic._ofind): fixed namespace order search
4312 4316 bug. Information would be reported about builtins even when
4313 4317 user-defined functions overrode them.
4314 4318
4315 4319 2002-05-11 Fernando Perez <fperez@colorado.edu>
4316 4320
4317 4321 * IPython/__init__.py (__all__): removed FlexCompleter from
4318 4322 __all__ so that things don't fail in platforms without readline.
4319 4323
4320 4324 2002-05-10 Fernando Perez <fperez@colorado.edu>
4321 4325
4322 4326 * IPython/__init__.py (__all__): removed numutils from __all__ b/c
4323 4327 it requires Numeric, effectively making Numeric a dependency for
4324 4328 IPython.
4325 4329
4326 4330 * Released 0.2.13
4327 4331
4328 4332 * IPython/Magic.py (Magic.magic_prun): big overhaul to the
4329 4333 profiler interface. Now all the major options from the profiler
4330 4334 module are directly supported in IPython, both for single
4331 4335 expressions (@prun) and for full programs (@run -p).
4332 4336
4333 4337 2002-05-09 Fernando Perez <fperez@colorado.edu>
4334 4338
4335 4339 * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of
4336 4340 magic properly formatted for screen.
4337 4341
4338 4342 * setup.py (make_shortcut): Changed things to put pdf version in
4339 4343 doc/ instead of doc/manual (had to change lyxport a bit).
4340 4344
4341 4345 * IPython/Magic.py (Profile.string_stats): made profile runs go
4342 4346 through pager (they are long and a pager allows searching, saving,
4343 4347 etc.)
4344 4348
4345 4349 2002-05-08 Fernando Perez <fperez@colorado.edu>
4346 4350
4347 4351 * Released 0.2.12
4348 4352
4349 4353 2002-05-06 Fernando Perez <fperez@colorado.edu>
4350 4354
4351 4355 * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently
4352 4356 introduced); 'hist n1 n2' was broken.
4353 4357 (Magic.magic_pdb): added optional on/off arguments to @pdb
4354 4358 (Magic.magic_run): added option -i to @run, which executes code in
4355 4359 the IPython namespace instead of a clean one. Also added @irun as
4356 4360 an alias to @run -i.
4357 4361
4358 4362 * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance):
4359 4363 fixed (it didn't really do anything, the namespaces were wrong).
4360 4364
4361 4365 * IPython/Debugger.py (__init__): Added workaround for python 2.1
4362 4366
4363 4367 * IPython/__init__.py (__all__): Fixed package namespace, now
4364 4368 'import IPython' does give access to IPython.<all> as
4365 4369 expected. Also renamed __release__ to Release.
4366 4370
4367 4371 * IPython/Debugger.py (__license__): created new Pdb class which
4368 4372 functions like a drop-in for the normal pdb.Pdb but does NOT
4369 4373 import readline by default. This way it doesn't muck up IPython's
4370 4374 readline handling, and now tab-completion finally works in the
4371 4375 debugger -- sort of. It completes things globally visible, but the
4372 4376 completer doesn't track the stack as pdb walks it. That's a bit
4373 4377 tricky, and I'll have to implement it later.
4374 4378
4375 4379 2002-05-05 Fernando Perez <fperez@colorado.edu>
4376 4380
4377 4381 * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for
4378 4382 magic docstrings when printed via ? (explicit \'s were being
4379 4383 printed).
4380 4384
4381 4385 * IPython/ipmaker.py (make_IPython): fixed namespace
4382 4386 identification bug. Now variables loaded via logs or command-line
4383 4387 files are recognized in the interactive namespace by @who.
4384 4388
4385 4389 * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in
4386 4390 log replay system stemming from the string form of Structs.
4387 4391
4388 4392 * IPython/Magic.py (Macro.__init__): improved macros to properly
4389 4393 handle magic commands in them.
4390 4394 (Magic.magic_logstart): usernames are now expanded so 'logstart
4391 4395 ~/mylog' now works.
4392 4396
4393 4397 * IPython/iplib.py (complete): fixed bug where paths starting with
4394 4398 '/' would be completed as magic names.
4395 4399
4396 4400 2002-05-04 Fernando Perez <fperez@colorado.edu>
4397 4401
4398 4402 * IPython/Magic.py (Magic.magic_run): added options -p and -f to
4399 4403 allow running full programs under the profiler's control.
4400 4404
4401 4405 * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars
4402 4406 mode to report exceptions verbosely but without formatting
4403 4407 variables. This addresses the issue of ipython 'freezing' (it's
4404 4408 not frozen, but caught in an expensive formatting loop) when huge
4405 4409 variables are in the context of an exception.
4406 4410 (VerboseTB.text): Added '--->' markers at line where exception was
4407 4411 triggered. Much clearer to read, especially in NoColor modes.
4408 4412
4409 4413 * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been
4410 4414 implemented in reverse when changing to the new parse_options().
4411 4415
4412 4416 2002-05-03 Fernando Perez <fperez@colorado.edu>
4413 4417
4414 4418 * IPython/Magic.py (Magic.parse_options): new function so that
4415 4419 magics can parse options easier.
4416 4420 (Magic.magic_prun): new function similar to profile.run(),
4417 4421 suggested by Chris Hart.
4418 4422 (Magic.magic_cd): fixed behavior so that it only changes if
4419 4423 directory actually is in history.
4420 4424
4421 4425 * IPython/usage.py (__doc__): added information about potential
4422 4426 slowness of Verbose exception mode when there are huge data
4423 4427 structures to be formatted (thanks to Archie Paulson).
4424 4428
4425 4429 * IPython/ipmaker.py (make_IPython): Changed default logging
4426 4430 (when simply called with -log) to use curr_dir/ipython.log in
4427 4431 rotate mode. Fixed crash which was occuring with -log before
4428 4432 (thanks to Jim Boyle).
4429 4433
4430 4434 2002-05-01 Fernando Perez <fperez@colorado.edu>
4431 4435
4432 4436 * Released 0.2.11 for these fixes (mainly the ultraTB one which
4433 4437 was nasty -- though somewhat of a corner case).
4434 4438
4435 4439 * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to
4436 4440 text (was a bug).
4437 4441
4438 4442 2002-04-30 Fernando Perez <fperez@colorado.edu>
4439 4443
4440 4444 * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add
4441 4445 a print after ^D or ^C from the user so that the In[] prompt
4442 4446 doesn't over-run the gnuplot one.
4443 4447
4444 4448 2002-04-29 Fernando Perez <fperez@colorado.edu>
4445 4449
4446 4450 * Released 0.2.10
4447 4451
4448 4452 * IPython/__release__.py (version): get date dynamically.
4449 4453
4450 4454 * Misc. documentation updates thanks to Arnd's comments. Also ran
4451 4455 a full spellcheck on the manual (hadn't been done in a while).
4452 4456
4453 4457 2002-04-27 Fernando Perez <fperez@colorado.edu>
4454 4458
4455 4459 * IPython/Magic.py (Magic.magic_logstart): Fixed bug where
4456 4460 starting a log in mid-session would reset the input history list.
4457 4461
4458 4462 2002-04-26 Fernando Perez <fperez@colorado.edu>
4459 4463
4460 4464 * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not
4461 4465 all files were being included in an update. Now anything in
4462 4466 UserConfig that matches [A-Za-z]*.py will go (this excludes
4463 4467 __init__.py)
4464 4468
4465 4469 2002-04-25 Fernando Perez <fperez@colorado.edu>
4466 4470
4467 4471 * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__
4468 4472 to __builtins__ so that any form of embedded or imported code can
4469 4473 test for being inside IPython.
4470 4474
4471 4475 * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance):
4472 4476 changed to GnuplotMagic because it's now an importable module,
4473 4477 this makes the name follow that of the standard Gnuplot module.
4474 4478 GnuplotMagic can now be loaded at any time in mid-session.
4475 4479
4476 4480 2002-04-24 Fernando Perez <fperez@colorado.edu>
4477 4481
4478 4482 * IPython/numutils.py: removed SIUnits. It doesn't properly set
4479 4483 the globals (IPython has its own namespace) and the
4480 4484 PhysicalQuantity stuff is much better anyway.
4481 4485
4482 4486 * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot
4483 4487 embedding example to standard user directory for
4484 4488 distribution. Also put it in the manual.
4485 4489
4486 4490 * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot
4487 4491 instance as first argument (so it doesn't rely on some obscure
4488 4492 hidden global).
4489 4493
4490 4494 * IPython/UserConfig/ipythonrc.py: put () back in accepted
4491 4495 delimiters. While it prevents ().TAB from working, it allows
4492 4496 completions in open (... expressions. This is by far a more common
4493 4497 case.
4494 4498
4495 4499 2002-04-23 Fernando Perez <fperez@colorado.edu>
4496 4500
4497 4501 * IPython/Extensions/InterpreterPasteInput.py: new
4498 4502 syntax-processing module for pasting lines with >>> or ... at the
4499 4503 start.
4500 4504
4501 4505 * IPython/Extensions/PhysicalQ_Interactive.py
4502 4506 (PhysicalQuantityInteractive.__int__): fixed to work with either
4503 4507 Numeric or math.
4504 4508
4505 4509 * IPython/UserConfig/ipythonrc-numeric.py: reorganized the
4506 4510 provided profiles. Now we have:
4507 4511 -math -> math module as * and cmath with its own namespace.
4508 4512 -numeric -> Numeric as *, plus gnuplot & grace
4509 4513 -physics -> same as before
4510 4514
4511 4515 * IPython/Magic.py (Magic.magic_magic): Fixed bug where
4512 4516 user-defined magics wouldn't be found by @magic if they were
4513 4517 defined as class methods. Also cleaned up the namespace search
4514 4518 logic and the string building (to use %s instead of many repeated
4515 4519 string adds).
4516 4520
4517 4521 * IPython/UserConfig/example-magic.py (magic_foo): updated example
4518 4522 of user-defined magics to operate with class methods (cleaner, in
4519 4523 line with the gnuplot code).
4520 4524
4521 4525 2002-04-22 Fernando Perez <fperez@colorado.edu>
4522 4526
4523 4527 * setup.py: updated dependency list so that manual is updated when
4524 4528 all included files change.
4525 4529
4526 4530 * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring
4527 4531 the delimiter removal option (the fix is ugly right now).
4528 4532
4529 4533 * IPython/UserConfig/ipythonrc-physics.py: simplified not to load
4530 4534 all of the math profile (quicker loading, no conflict between
4531 4535 g-9.8 and g-gnuplot).
4532 4536
4533 4537 * IPython/CrashHandler.py (CrashHandler.__call__): changed default
4534 4538 name of post-mortem files to IPython_crash_report.txt.
4535 4539
4536 4540 * Cleanup/update of the docs. Added all the new readline info and
4537 4541 formatted all lists as 'real lists'.
4538 4542
4539 4543 * IPython/ipmaker.py (make_IPython): removed now-obsolete
4540 4544 tab-completion options, since the full readline parse_and_bind is
4541 4545 now accessible.
4542 4546
4543 4547 * IPython/iplib.py (InteractiveShell.init_readline): Changed
4544 4548 handling of readline options. Now users can specify any string to
4545 4549 be passed to parse_and_bind(), as well as the delimiters to be
4546 4550 removed.
4547 4551 (InteractiveShell.__init__): Added __name__ to the global
4548 4552 namespace so that things like Itpl which rely on its existence
4549 4553 don't crash.
4550 4554 (InteractiveShell._prefilter): Defined the default with a _ so
4551 4555 that prefilter() is easier to override, while the default one
4552 4556 remains available.
4553 4557
4554 4558 2002-04-18 Fernando Perez <fperez@colorado.edu>
4555 4559
4556 4560 * Added information about pdb in the docs.
4557 4561
4558 4562 2002-04-17 Fernando Perez <fperez@colorado.edu>
4559 4563
4560 4564 * IPython/ipmaker.py (make_IPython): added rc_override option to
4561 4565 allow passing config options at creation time which may override
4562 4566 anything set in the config files or command line. This is
4563 4567 particularly useful for configuring embedded instances.
4564 4568
4565 4569 2002-04-15 Fernando Perez <fperez@colorado.edu>
4566 4570
4567 4571 * IPython/Logger.py (Logger.log): Fixed a nasty bug which could
4568 4572 crash embedded instances because of the input cache falling out of
4569 4573 sync with the output counter.
4570 4574
4571 4575 * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug
4572 4576 mode which calls pdb after an uncaught exception in IPython itself.
4573 4577
4574 4578 2002-04-14 Fernando Perez <fperez@colorado.edu>
4575 4579
4576 4580 * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up
4577 4581 readline, fix it back after each call.
4578 4582
4579 4583 * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private
4580 4584 method to force all access via __call__(), which guarantees that
4581 4585 traceback references are properly deleted.
4582 4586
4583 4587 * IPython/Prompts.py (CachedOutput._display): minor fixes to
4584 4588 improve printing when pprint is in use.
4585 4589
4586 4590 2002-04-13 Fernando Perez <fperez@colorado.edu>
4587 4591
4588 4592 * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit
4589 4593 exceptions aren't caught anymore. If the user triggers one, he
4590 4594 should know why he's doing it and it should go all the way up,
4591 4595 just like any other exception. So now @abort will fully kill the
4592 4596 embedded interpreter and the embedding code (unless that happens
4593 4597 to catch SystemExit).
4594 4598
4595 4599 * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag
4596 4600 and a debugger() method to invoke the interactive pdb debugger
4597 4601 after printing exception information. Also added the corresponding
4598 4602 -pdb option and @pdb magic to control this feature, and updated
4599 4603 the docs. After a suggestion from Christopher Hart
4600 4604 (hart-AT-caltech.edu).
4601 4605
4602 4606 2002-04-12 Fernando Perez <fperez@colorado.edu>
4603 4607
4604 4608 * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use
4605 4609 the exception handlers defined by the user (not the CrashHandler)
4606 4610 so that user exceptions don't trigger an ipython bug report.
4607 4611
4608 4612 * IPython/ultraTB.py (ColorTB.__init__): made the color scheme
4609 4613 configurable (it should have always been so).
4610 4614
4611 4615 2002-03-26 Fernando Perez <fperez@colorado.edu>
4612 4616
4613 4617 * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here
4614 4618 and there to fix embedding namespace issues. This should all be
4615 4619 done in a more elegant way.
4616 4620
4617 4621 2002-03-25 Fernando Perez <fperez@colorado.edu>
4618 4622
4619 4623 * IPython/genutils.py (get_home_dir): Try to make it work under
4620 4624 win9x also.
4621 4625
4622 4626 2002-03-20 Fernando Perez <fperez@colorado.edu>
4623 4627
4624 4628 * IPython/Shell.py (IPythonShellEmbed.__init__): leave
4625 4629 sys.displayhook untouched upon __init__.
4626 4630
4627 4631 2002-03-19 Fernando Perez <fperez@colorado.edu>
4628 4632
4629 4633 * Released 0.2.9 (for embedding bug, basically).
4630 4634
4631 4635 * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit
4632 4636 exceptions so that enclosing shell's state can be restored.
4633 4637
4634 4638 * Changed magic_gnuplot.py to magic-gnuplot.py to standardize
4635 4639 naming conventions in the .ipython/ dir.
4636 4640
4637 4641 * IPython/iplib.py (InteractiveShell.init_readline): removed '-'
4638 4642 from delimiters list so filenames with - in them get expanded.
4639 4643
4640 4644 * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with
4641 4645 sys.displayhook not being properly restored after an embedded call.
4642 4646
4643 4647 2002-03-18 Fernando Perez <fperez@colorado.edu>
4644 4648
4645 4649 * Released 0.2.8
4646 4650
4647 4651 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where
4648 4652 some files weren't being included in a -upgrade.
4649 4653 (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous
4650 4654 on' so that the first tab completes.
4651 4655 (InteractiveShell.handle_magic): fixed bug with spaces around
4652 4656 quotes breaking many magic commands.
4653 4657
4654 4658 * setup.py: added note about ignoring the syntax error messages at
4655 4659 installation.
4656 4660
4657 4661 * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished
4658 4662 streamlining the gnuplot interface, now there's only one magic @gp.
4659 4663
4660 4664 2002-03-17 Fernando Perez <fperez@colorado.edu>
4661 4665
4662 4666 * IPython/UserConfig/magic_gnuplot.py: new name for the
4663 4667 example-magic_pm.py file. Much enhanced system, now with a shell
4664 4668 for communicating directly with gnuplot, one command at a time.
4665 4669
4666 4670 * IPython/Magic.py (Magic.magic_run): added option -n to prevent
4667 4671 setting __name__=='__main__'.
4668 4672
4669 4673 * IPython/UserConfig/example-magic_pm.py (magic_pm): Added
4670 4674 mini-shell for accessing gnuplot from inside ipython. Should
4671 4675 extend it later for grace access too. Inspired by Arnd's
4672 4676 suggestion.
4673 4677
4674 4678 * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when
4675 4679 calling magic functions with () in their arguments. Thanks to Arnd
4676 4680 Baecker for pointing this to me.
4677 4681
4678 4682 * IPython/numutils.py (sum_flat): fixed bug. Would recurse
4679 4683 infinitely for integer or complex arrays (only worked with floats).
4680 4684
4681 4685 2002-03-16 Fernando Perez <fperez@colorado.edu>
4682 4686
4683 4687 * setup.py: Merged setup and setup_windows into a single script
4684 4688 which properly handles things for windows users.
4685 4689
4686 4690 2002-03-15 Fernando Perez <fperez@colorado.edu>
4687 4691
4688 4692 * Big change to the manual: now the magics are all automatically
4689 4693 documented. This information is generated from their docstrings
4690 4694 and put in a latex file included by the manual lyx file. This way
4691 4695 we get always up to date information for the magics. The manual
4692 4696 now also has proper version information, also auto-synced.
4693 4697
4694 4698 For this to work, an undocumented --magic_docstrings option was added.
4695 4699
4696 4700 2002-03-13 Fernando Perez <fperez@colorado.edu>
4697 4701
4698 4702 * IPython/ultraTB.py (TermColors): fixed problem with dark colors
4699 4703 under CDE terminals. An explicit ;2 color reset is needed in the escapes.
4700 4704
4701 4705 2002-03-12 Fernando Perez <fperez@colorado.edu>
4702 4706
4703 4707 * IPython/ultraTB.py (TermColors): changed color escapes again to
4704 4708 fix the (old, reintroduced) line-wrapping bug. Basically, if
4705 4709 \001..\002 aren't given in the color escapes, lines get wrapped
4706 4710 weirdly. But giving those screws up old xterms and emacs terms. So
4707 4711 I added some logic for emacs terms to be ok, but I can't identify old
4708 4712 xterms separately ($TERM=='xterm' for many terminals, like konsole).
4709 4713
4710 4714 2002-03-10 Fernando Perez <fperez@colorado.edu>
4711 4715
4712 4716 * IPython/usage.py (__doc__): Various documentation cleanups and
4713 4717 updates, both in usage docstrings and in the manual.
4714 4718
4715 4719 * IPython/Prompts.py (CachedOutput.set_colors): cleanups for
4716 4720 handling of caching. Set minimum acceptabe value for having a
4717 4721 cache at 20 values.
4718 4722
4719 4723 * IPython/iplib.py (InteractiveShell.user_setup): moved the
4720 4724 install_first_time function to a method, renamed it and added an
4721 4725 'upgrade' mode. Now people can update their config directory with
4722 4726 a simple command line switch (-upgrade, also new).
4723 4727
4724 4728 * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to
4725 4729 @file (convenient for automagic users under Python >= 2.2).
4726 4730 Removed @files (it seemed more like a plural than an abbrev. of
4727 4731 'file show').
4728 4732
4729 4733 * IPython/iplib.py (install_first_time): Fixed crash if there were
4730 4734 backup files ('~') in .ipython/ install directory.
4731 4735
4732 4736 * IPython/ipmaker.py (make_IPython): fixes for new prompt
4733 4737 system. Things look fine, but these changes are fairly
4734 4738 intrusive. Test them for a few days.
4735 4739
4736 4740 * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of
4737 4741 the prompts system. Now all in/out prompt strings are user
4738 4742 controllable. This is particularly useful for embedding, as one
4739 4743 can tag embedded instances with particular prompts.
4740 4744
4741 4745 Also removed global use of sys.ps1/2, which now allows nested
4742 4746 embeddings without any problems. Added command-line options for
4743 4747 the prompt strings.
4744 4748
4745 4749 2002-03-08 Fernando Perez <fperez@colorado.edu>
4746 4750
4747 4751 * IPython/UserConfig/example-embed-short.py (ipshell): added
4748 4752 example file with the bare minimum code for embedding.
4749 4753
4750 4754 * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added
4751 4755 functionality for the embeddable shell to be activated/deactivated
4752 4756 either globally or at each call.
4753 4757
4754 4758 * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of
4755 4759 rewriting the prompt with '--->' for auto-inputs with proper
4756 4760 coloring. Now the previous UGLY hack in handle_auto() is gone, and
4757 4761 this is handled by the prompts class itself, as it should.
4758 4762
4759 4763 2002-03-05 Fernando Perez <fperez@colorado.edu>
4760 4764
4761 4765 * IPython/Magic.py (Magic.magic_logstart): Changed @log to
4762 4766 @logstart to avoid name clashes with the math log function.
4763 4767
4764 4768 * Big updates to X/Emacs section of the manual.
4765 4769
4766 4770 * Removed ipython_emacs. Milan explained to me how to pass
4767 4771 arguments to ipython through Emacs. Some day I'm going to end up
4768 4772 learning some lisp...
4769 4773
4770 4774 2002-03-04 Fernando Perez <fperez@colorado.edu>
4771 4775
4772 4776 * IPython/ipython_emacs: Created script to be used as the
4773 4777 py-python-command Emacs variable so we can pass IPython
4774 4778 parameters. I can't figure out how to tell Emacs directly to pass
4775 4779 parameters to IPython, so a dummy shell script will do it.
4776 4780
4777 4781 Other enhancements made for things to work better under Emacs'
4778 4782 various types of terminals. Many thanks to Milan Zamazal
4779 4783 <pdm-AT-zamazal.org> for all the suggestions and pointers.
4780 4784
4781 4785 2002-03-01 Fernando Perez <fperez@colorado.edu>
4782 4786
4783 4787 * IPython/ipmaker.py (make_IPython): added a --readline! option so
4784 4788 that loading of readline is now optional. This gives better
4785 4789 control to emacs users.
4786 4790
4787 4791 * IPython/ultraTB.py (__date__): Modified color escape sequences
4788 4792 and now things work fine under xterm and in Emacs' term buffers
4789 4793 (though not shell ones). Well, in emacs you get colors, but all
4790 4794 seem to be 'light' colors (no difference between dark and light
4791 4795 ones). But the garbage chars are gone, and also in xterms. It
4792 4796 seems that now I'm using 'cleaner' ansi sequences.
4793 4797
4794 4798 2002-02-21 Fernando Perez <fperez@colorado.edu>
4795 4799
4796 4800 * Released 0.2.7 (mainly to publish the scoping fix).
4797 4801
4798 4802 * IPython/Logger.py (Logger.logstate): added. A corresponding
4799 4803 @logstate magic was created.
4800 4804
4801 4805 * IPython/Magic.py: fixed nested scoping problem under Python
4802 4806 2.1.x (automagic wasn't working).
4803 4807
4804 4808 2002-02-20 Fernando Perez <fperez@colorado.edu>
4805 4809
4806 4810 * Released 0.2.6.
4807 4811
4808 4812 * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet'
4809 4813 option so that logs can come out without any headers at all.
4810 4814
4811 4815 * IPython/UserConfig/ipythonrc-scipy.py: created a profile for
4812 4816 SciPy.
4813 4817
4814 4818 * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so
4815 4819 that embedded IPython calls don't require vars() to be explicitly
4816 4820 passed. Now they are extracted from the caller's frame (code
4817 4821 snatched from Eric Jones' weave). Added better documentation to
4818 4822 the section on embedding and the example file.
4819 4823
4820 4824 * IPython/genutils.py (page): Changed so that under emacs, it just
4821 4825 prints the string. You can then page up and down in the emacs
4822 4826 buffer itself. This is how the builtin help() works.
4823 4827
4824 4828 * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with
4825 4829 macro scoping: macros need to be executed in the user's namespace
4826 4830 to work as if they had been typed by the user.
4827 4831
4828 4832 * IPython/Magic.py (Magic.magic_macro): Changed macros so they
4829 4833 execute automatically (no need to type 'exec...'). They then
4830 4834 behave like 'true macros'. The printing system was also modified
4831 4835 for this to work.
4832 4836
4833 4837 2002-02-19 Fernando Perez <fperez@colorado.edu>
4834 4838
4835 4839 * IPython/genutils.py (page_file): new function for paging files
4836 4840 in an OS-independent way. Also necessary for file viewing to work
4837 4841 well inside Emacs buffers.
4838 4842 (page): Added checks for being in an emacs buffer.
4839 4843 (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed
4840 4844 same bug in iplib.
4841 4845
4842 4846 2002-02-18 Fernando Perez <fperez@colorado.edu>
4843 4847
4844 4848 * IPython/iplib.py (InteractiveShell.init_readline): modified use
4845 4849 of readline so that IPython can work inside an Emacs buffer.
4846 4850
4847 4851 * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to
4848 4852 method signatures (they weren't really bugs, but it looks cleaner
4849 4853 and keeps PyChecker happy).
4850 4854
4851 4855 * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP
4852 4856 for implementing various user-defined hooks. Currently only
4853 4857 display is done.
4854 4858
4855 4859 * IPython/Prompts.py (CachedOutput._display): changed display
4856 4860 functions so that they can be dynamically changed by users easily.
4857 4861
4858 4862 * IPython/Extensions/numeric_formats.py (num_display): added an
4859 4863 extension for printing NumPy arrays in flexible manners. It
4860 4864 doesn't do anything yet, but all the structure is in
4861 4865 place. Ultimately the plan is to implement output format control
4862 4866 like in Octave.
4863 4867
4864 4868 * IPython/Magic.py (Magic.lsmagic): changed so that bound magic
4865 4869 methods are found at run-time by all the automatic machinery.
4866 4870
4867 4871 2002-02-17 Fernando Perez <fperez@colorado.edu>
4868 4872
4869 4873 * setup_Windows.py (make_shortcut): documented. Cleaned up the
4870 4874 whole file a little.
4871 4875
4872 4876 * ToDo: closed this document. Now there's a new_design.lyx
4873 4877 document for all new ideas. Added making a pdf of it for the
4874 4878 end-user distro.
4875 4879
4876 4880 * IPython/Logger.py (Logger.switch_log): Created this to replace
4877 4881 logon() and logoff(). It also fixes a nasty crash reported by
4878 4882 Philip Hisley <compsys-AT-starpower.net>. Many thanks to him.
4879 4883
4880 4884 * IPython/iplib.py (complete): got auto-completion to work with
4881 4885 automagic (I had wanted this for a long time).
4882 4886
4883 4887 * IPython/Magic.py (Magic.magic_files): Added @files as an alias
4884 4888 to @file, since file() is now a builtin and clashes with automagic
4885 4889 for @file.
4886 4890
4887 4891 * Made some new files: Prompts, CrashHandler, Magic, Logger. All
4888 4892 of this was previously in iplib, which had grown to more than 2000
4889 4893 lines, way too long. No new functionality, but it makes managing
4890 4894 the code a bit easier.
4891 4895
4892 4896 * IPython/iplib.py (IPythonCrashHandler.__call__): Added version
4893 4897 information to crash reports.
4894 4898
4895 4899 2002-02-12 Fernando Perez <fperez@colorado.edu>
4896 4900
4897 4901 * Released 0.2.5.
4898 4902
4899 4903 2002-02-11 Fernando Perez <fperez@colorado.edu>
4900 4904
4901 4905 * Wrote a relatively complete Windows installer. It puts
4902 4906 everything in place, creates Start Menu entries and fixes the
4903 4907 color issues. Nothing fancy, but it works.
4904 4908
4905 4909 2002-02-10 Fernando Perez <fperez@colorado.edu>
4906 4910
4907 4911 * IPython/iplib.py (InteractiveShell.safe_execfile): added an
4908 4912 os.path.expanduser() call so that we can type @run ~/myfile.py and
4909 4913 have thigs work as expected.
4910 4914
4911 4915 * IPython/genutils.py (page): fixed exception handling so things
4912 4916 work both in Unix and Windows correctly. Quitting a pager triggers
4913 4917 an IOError/broken pipe in Unix, and in windows not finding a pager
4914 4918 is also an IOError, so I had to actually look at the return value
4915 4919 of the exception, not just the exception itself. Should be ok now.
4916 4920
4917 4921 * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme):
4918 4922 modified to allow case-insensitive color scheme changes.
4919 4923
4920 4924 2002-02-09 Fernando Perez <fperez@colorado.edu>
4921 4925
4922 4926 * IPython/genutils.py (native_line_ends): new function to leave
4923 4927 user config files with os-native line-endings.
4924 4928
4925 4929 * README and manual updates.
4926 4930
4927 4931 * IPython/genutils.py: fixed unicode bug: use types.StringTypes
4928 4932 instead of StringType to catch Unicode strings.
4929 4933
4930 4934 * IPython/genutils.py (filefind): fixed bug for paths with
4931 4935 embedded spaces (very common in Windows).
4932 4936
4933 4937 * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc
4934 4938 files under Windows, so that they get automatically associated
4935 4939 with a text editor. Windows makes it a pain to handle
4936 4940 extension-less files.
4937 4941
4938 4942 * IPython/iplib.py (InteractiveShell.init_readline): Made the
4939 4943 warning about readline only occur for Posix. In Windows there's no
4940 4944 way to get readline, so why bother with the warning.
4941 4945
4942 4946 * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__
4943 4947 for __str__ instead of dir(self), since dir() changed in 2.2.
4944 4948
4945 4949 * Ported to Windows! Tested on XP, I suspect it should work fine
4946 4950 on NT/2000, but I don't think it will work on 98 et al. That
4947 4951 series of Windows is such a piece of junk anyway that I won't try
4948 4952 porting it there. The XP port was straightforward, showed a few
4949 4953 bugs here and there (fixed all), in particular some string
4950 4954 handling stuff which required considering Unicode strings (which
4951 4955 Windows uses). This is good, but hasn't been too tested :) No
4952 4956 fancy installer yet, I'll put a note in the manual so people at
4953 4957 least make manually a shortcut.
4954 4958
4955 4959 * IPython/iplib.py (Magic.magic_colors): Unified the color options
4956 4960 into a single one, "colors". This now controls both prompt and
4957 4961 exception color schemes, and can be changed both at startup
4958 4962 (either via command-line switches or via ipythonrc files) and at
4959 4963 runtime, with @colors.
4960 4964 (Magic.magic_run): renamed @prun to @run and removed the old
4961 4965 @run. The two were too similar to warrant keeping both.
4962 4966
4963 4967 2002-02-03 Fernando Perez <fperez@colorado.edu>
4964 4968
4965 4969 * IPython/iplib.py (install_first_time): Added comment on how to
4966 4970 configure the color options for first-time users. Put a <return>
4967 4971 request at the end so that small-terminal users get a chance to
4968 4972 read the startup info.
4969 4973
4970 4974 2002-01-23 Fernando Perez <fperez@colorado.edu>
4971 4975
4972 4976 * IPython/iplib.py (CachedOutput.update): Changed output memory
4973 4977 variable names from _o,_oo,_ooo,_o<n> to simply _,__,___,_<n>. For
4974 4978 input history we still use _i. Did this b/c these variable are
4975 4979 very commonly used in interactive work, so the less we need to
4976 4980 type the better off we are.
4977 4981 (Magic.magic_prun): updated @prun to better handle the namespaces
4978 4982 the file will run in, including a fix for __name__ not being set
4979 4983 before.
4980 4984
4981 4985 2002-01-20 Fernando Perez <fperez@colorado.edu>
4982 4986
4983 4987 * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of
4984 4988 extra garbage for Python 2.2. Need to look more carefully into
4985 4989 this later.
4986 4990
4987 4991 2002-01-19 Fernando Perez <fperez@colorado.edu>
4988 4992
4989 4993 * IPython/iplib.py (InteractiveShell.showtraceback): fixed to
4990 4994 display SyntaxError exceptions properly formatted when they occur
4991 4995 (they can be triggered by imported code).
4992 4996
4993 4997 2002-01-18 Fernando Perez <fperez@colorado.edu>
4994 4998
4995 4999 * IPython/iplib.py (InteractiveShell.safe_execfile): now
4996 5000 SyntaxError exceptions are reported nicely formatted, instead of
4997 5001 spitting out only offset information as before.
4998 5002 (Magic.magic_prun): Added the @prun function for executing
4999 5003 programs with command line args inside IPython.
5000 5004
5001 5005 2002-01-16 Fernando Perez <fperez@colorado.edu>
5002 5006
5003 5007 * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist
5004 5008 to *not* include the last item given in a range. This brings their
5005 5009 behavior in line with Python's slicing:
5006 5010 a[n1:n2] -> a[n1]...a[n2-1]
5007 5011 It may be a bit less convenient, but I prefer to stick to Python's
5008 5012 conventions *everywhere*, so users never have to wonder.
5009 5013 (Magic.magic_macro): Added @macro function to ease the creation of
5010 5014 macros.
5011 5015
5012 5016 2002-01-05 Fernando Perez <fperez@colorado.edu>
5013 5017
5014 5018 * Released 0.2.4.
5015 5019
5016 5020 * IPython/iplib.py (Magic.magic_pdef):
5017 5021 (InteractiveShell.safe_execfile): report magic lines and error
5018 5022 lines without line numbers so one can easily copy/paste them for
5019 5023 re-execution.
5020 5024
5021 5025 * Updated manual with recent changes.
5022 5026
5023 5027 * IPython/iplib.py (Magic.magic_oinfo): added constructor
5024 5028 docstring printing when class? is called. Very handy for knowing
5025 5029 how to create class instances (as long as __init__ is well
5026 5030 documented, of course :)
5027 5031 (Magic.magic_doc): print both class and constructor docstrings.
5028 5032 (Magic.magic_pdef): give constructor info if passed a class and
5029 5033 __call__ info for callable object instances.
5030 5034
5031 5035 2002-01-04 Fernando Perez <fperez@colorado.edu>
5032 5036
5033 5037 * Made deep_reload() off by default. It doesn't always work
5034 5038 exactly as intended, so it's probably safer to have it off. It's
5035 5039 still available as dreload() anyway, so nothing is lost.
5036 5040
5037 5041 2002-01-02 Fernando Perez <fperez@colorado.edu>
5038 5042
5039 5043 * Released 0.2.3 (contacted R.Singh at CU about biopython course,
5040 5044 so I wanted an updated release).
5041 5045
5042 5046 2001-12-27 Fernando Perez <fperez@colorado.edu>
5043 5047
5044 5048 * IPython/iplib.py (InteractiveShell.interact): Added the original
5045 5049 code from 'code.py' for this module in order to change the
5046 5050 handling of a KeyboardInterrupt. This was necessary b/c otherwise
5047 5051 the history cache would break when the user hit Ctrl-C, and
5048 5052 interact() offers no way to add any hooks to it.
5049 5053
5050 5054 2001-12-23 Fernando Perez <fperez@colorado.edu>
5051 5055
5052 5056 * setup.py: added check for 'MANIFEST' before trying to remove
5053 5057 it. Thanks to Sean Reifschneider.
5054 5058
5055 5059 2001-12-22 Fernando Perez <fperez@colorado.edu>
5056 5060
5057 5061 * Released 0.2.2.
5058 5062
5059 5063 * Finished (reasonably) writing the manual. Later will add the
5060 5064 python-standard navigation stylesheets, but for the time being
5061 5065 it's fairly complete. Distribution will include html and pdf
5062 5066 versions.
5063 5067
5064 5068 * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu
5065 5069 (MayaVi author).
5066 5070
5067 5071 2001-12-21 Fernando Perez <fperez@colorado.edu>
5068 5072
5069 5073 * Released 0.2.1. Barring any nasty bugs, this is it as far as a
5070 5074 good public release, I think (with the manual and the distutils
5071 5075 installer). The manual can use some work, but that can go
5072 5076 slowly. Otherwise I think it's quite nice for end users. Next
5073 5077 summer, rewrite the guts of it...
5074 5078
5075 5079 * Changed format of ipythonrc files to use whitespace as the
5076 5080 separator instead of an explicit '='. Cleaner.
5077 5081
5078 5082 2001-12-20 Fernando Perez <fperez@colorado.edu>
5079 5083
5080 5084 * Started a manual in LyX. For now it's just a quick merge of the
5081 5085 various internal docstrings and READMEs. Later it may grow into a
5082 5086 nice, full-blown manual.
5083 5087
5084 5088 * Set up a distutils based installer. Installation should now be
5085 5089 trivially simple for end-users.
5086 5090
5087 5091 2001-12-11 Fernando Perez <fperez@colorado.edu>
5088 5092
5089 5093 * Released 0.2.0. First public release, announced it at
5090 5094 comp.lang.python. From now on, just bugfixes...
5091 5095
5092 5096 * Went through all the files, set copyright/license notices and
5093 5097 cleaned up things. Ready for release.
5094 5098
5095 5099 2001-12-10 Fernando Perez <fperez@colorado.edu>
5096 5100
5097 5101 * Changed the first-time installer not to use tarfiles. It's more
5098 5102 robust now and less unix-dependent. Also makes it easier for
5099 5103 people to later upgrade versions.
5100 5104
5101 5105 * Changed @exit to @abort to reflect the fact that it's pretty
5102 5106 brutal (a sys.exit()). The difference between @abort and Ctrl-D
5103 5107 becomes significant only when IPyhton is embedded: in that case,
5104 5108 C-D closes IPython only, but @abort kills the enclosing program
5105 5109 too (unless it had called IPython inside a try catching
5106 5110 SystemExit).
5107 5111
5108 5112 * Created Shell module which exposes the actuall IPython Shell
5109 5113 classes, currently the normal and the embeddable one. This at
5110 5114 least offers a stable interface we won't need to change when
5111 5115 (later) the internals are rewritten. That rewrite will be confined
5112 5116 to iplib and ipmaker, but the Shell interface should remain as is.
5113 5117
5114 5118 * Added embed module which offers an embeddable IPShell object,
5115 5119 useful to fire up IPython *inside* a running program. Great for
5116 5120 debugging or dynamical data analysis.
5117 5121
5118 5122 2001-12-08 Fernando Perez <fperez@colorado.edu>
5119 5123
5120 5124 * Fixed small bug preventing seeing info from methods of defined
5121 5125 objects (incorrect namespace in _ofind()).
5122 5126
5123 5127 * Documentation cleanup. Moved the main usage docstrings to a
5124 5128 separate file, usage.py (cleaner to maintain, and hopefully in the
5125 5129 future some perlpod-like way of producing interactive, man and
5126 5130 html docs out of it will be found).
5127 5131
5128 5132 * Added @profile to see your profile at any time.
5129 5133
5130 5134 * Added @p as an alias for 'print'. It's especially convenient if
5131 5135 using automagic ('p x' prints x).
5132 5136
5133 5137 * Small cleanups and fixes after a pychecker run.
5134 5138
5135 5139 * Changed the @cd command to handle @cd - and @cd -<n> for
5136 5140 visiting any directory in _dh.
5137 5141
5138 5142 * Introduced _dh, a history of visited directories. @dhist prints
5139 5143 it out with numbers.
5140 5144
5141 5145 2001-12-07 Fernando Perez <fperez@colorado.edu>
5142 5146
5143 5147 * Released 0.1.22
5144 5148
5145 5149 * Made initialization a bit more robust against invalid color
5146 5150 options in user input (exit, not traceback-crash).
5147 5151
5148 5152 * Changed the bug crash reporter to write the report only in the
5149 5153 user's .ipython directory. That way IPython won't litter people's
5150 5154 hard disks with crash files all over the place. Also print on
5151 5155 screen the necessary mail command.
5152 5156
5153 5157 * With the new ultraTB, implemented LightBG color scheme for light
5154 5158 background terminals. A lot of people like white backgrounds, so I
5155 5159 guess we should at least give them something readable.
5156 5160
5157 5161 2001-12-06 Fernando Perez <fperez@colorado.edu>
5158 5162
5159 5163 * Modified the structure of ultraTB. Now there's a proper class
5160 5164 for tables of color schemes which allow adding schemes easily and
5161 5165 switching the active scheme without creating a new instance every
5162 5166 time (which was ridiculous). The syntax for creating new schemes
5163 5167 is also cleaner. I think ultraTB is finally done, with a clean
5164 5168 class structure. Names are also much cleaner (now there's proper
5165 5169 color tables, no need for every variable to also have 'color' in
5166 5170 its name).
5167 5171
5168 5172 * Broke down genutils into separate files. Now genutils only
5169 5173 contains utility functions, and classes have been moved to their
5170 5174 own files (they had enough independent functionality to warrant
5171 5175 it): ConfigLoader, OutputTrap, Struct.
5172 5176
5173 5177 2001-12-05 Fernando Perez <fperez@colorado.edu>
5174 5178
5175 5179 * IPython turns 21! Released version 0.1.21, as a candidate for
5176 5180 public consumption. If all goes well, release in a few days.
5177 5181
5178 5182 * Fixed path bug (files in Extensions/ directory wouldn't be found
5179 5183 unless IPython/ was explicitly in sys.path).
5180 5184
5181 5185 * Extended the FlexCompleter class as MagicCompleter to allow
5182 5186 completion of @-starting lines.
5183 5187
5184 5188 * Created __release__.py file as a central repository for release
5185 5189 info that other files can read from.
5186 5190
5187 5191 * Fixed small bug in logging: when logging was turned on in
5188 5192 mid-session, old lines with special meanings (!@?) were being
5189 5193 logged without the prepended comment, which is necessary since
5190 5194 they are not truly valid python syntax. This should make session
5191 5195 restores produce less errors.
5192 5196
5193 5197 * The namespace cleanup forced me to make a FlexCompleter class
5194 5198 which is nothing but a ripoff of rlcompleter, but with selectable
5195 5199 namespace (rlcompleter only works in __main__.__dict__). I'll try
5196 5200 to submit a note to the authors to see if this change can be
5197 5201 incorporated in future rlcompleter releases (Dec.6: done)
5198 5202
5199 5203 * More fixes to namespace handling. It was a mess! Now all
5200 5204 explicit references to __main__.__dict__ are gone (except when
5201 5205 really needed) and everything is handled through the namespace
5202 5206 dicts in the IPython instance. We seem to be getting somewhere
5203 5207 with this, finally...
5204 5208
5205 5209 * Small documentation updates.
5206 5210
5207 5211 * Created the Extensions directory under IPython (with an
5208 5212 __init__.py). Put the PhysicalQ stuff there. This directory should
5209 5213 be used for all special-purpose extensions.
5210 5214
5211 5215 * File renaming:
5212 5216 ipythonlib --> ipmaker
5213 5217 ipplib --> iplib
5214 5218 This makes a bit more sense in terms of what these files actually do.
5215 5219
5216 5220 * Moved all the classes and functions in ipythonlib to ipplib, so
5217 5221 now ipythonlib only has make_IPython(). This will ease up its
5218 5222 splitting in smaller functional chunks later.
5219 5223
5220 5224 * Cleaned up (done, I think) output of @whos. Better column
5221 5225 formatting, and now shows str(var) for as much as it can, which is
5222 5226 typically what one gets with a 'print var'.
5223 5227
5224 5228 2001-12-04 Fernando Perez <fperez@colorado.edu>
5225 5229
5226 5230 * Fixed namespace problems. Now builtin/IPyhton/user names get
5227 5231 properly reported in their namespace. Internal namespace handling
5228 5232 is finally getting decent (not perfect yet, but much better than
5229 5233 the ad-hoc mess we had).
5230 5234
5231 5235 * Removed -exit option. If people just want to run a python
5232 5236 script, that's what the normal interpreter is for. Less
5233 5237 unnecessary options, less chances for bugs.
5234 5238
5235 5239 * Added a crash handler which generates a complete post-mortem if
5236 5240 IPython crashes. This will help a lot in tracking bugs down the
5237 5241 road.
5238 5242
5239 5243 * Fixed nasty bug in auto-evaluation part of prefilter(). Names
5240 5244 which were boud to functions being reassigned would bypass the
5241 5245 logger, breaking the sync of _il with the prompt counter. This
5242 5246 would then crash IPython later when a new line was logged.
5243 5247
5244 5248 2001-12-02 Fernando Perez <fperez@colorado.edu>
5245 5249
5246 5250 * Made IPython a package. This means people don't have to clutter
5247 5251 their sys.path with yet another directory. Changed the INSTALL
5248 5252 file accordingly.
5249 5253
5250 5254 * Cleaned up the output of @who_ls, @who and @whos. @who_ls now
5251 5255 sorts its output (so @who shows it sorted) and @whos formats the
5252 5256 table according to the width of the first column. Nicer, easier to
5253 5257 read. Todo: write a generic table_format() which takes a list of
5254 5258 lists and prints it nicely formatted, with optional row/column
5255 5259 separators and proper padding and justification.
5256 5260
5257 5261 * Released 0.1.20
5258 5262
5259 5263 * Fixed bug in @log which would reverse the inputcache list (a
5260 5264 copy operation was missing).
5261 5265
5262 5266 * Code cleanup. @config was changed to use page(). Better, since
5263 5267 its output is always quite long.
5264 5268
5265 5269 * Itpl is back as a dependency. I was having too many problems
5266 5270 getting the parametric aliases to work reliably, and it's just
5267 5271 easier to code weird string operations with it than playing %()s
5268 5272 games. It's only ~6k, so I don't think it's too big a deal.
5269 5273
5270 5274 * Found (and fixed) a very nasty bug with history. !lines weren't
5271 5275 getting cached, and the out of sync caches would crash
5272 5276 IPython. Fixed it by reorganizing the prefilter/handlers/logger
5273 5277 division of labor a bit better. Bug fixed, cleaner structure.
5274 5278
5275 5279 2001-12-01 Fernando Perez <fperez@colorado.edu>
5276 5280
5277 5281 * Released 0.1.19
5278 5282
5279 5283 * Added option -n to @hist to prevent line number printing. Much
5280 5284 easier to copy/paste code this way.
5281 5285
5282 5286 * Created global _il to hold the input list. Allows easy
5283 5287 re-execution of blocks of code by slicing it (inspired by Janko's
5284 5288 comment on 'macros').
5285 5289
5286 5290 * Small fixes and doc updates.
5287 5291
5288 5292 * Rewrote @history function (was @h). Renamed it to @hist, @h is
5289 5293 much too fragile with automagic. Handles properly multi-line
5290 5294 statements and takes parameters.
5291 5295
5292 5296 2001-11-30 Fernando Perez <fperez@colorado.edu>
5293 5297
5294 5298 * Version 0.1.18 released.
5295 5299
5296 5300 * Fixed nasty namespace bug in initial module imports.
5297 5301
5298 5302 * Added copyright/license notes to all code files (except
5299 5303 DPyGetOpt). For the time being, LGPL. That could change.
5300 5304
5301 5305 * Rewrote a much nicer README, updated INSTALL, cleaned up
5302 5306 ipythonrc-* samples.
5303 5307
5304 5308 * Overall code/documentation cleanup. Basically ready for
5305 5309 release. Only remaining thing: licence decision (LGPL?).
5306 5310
5307 5311 * Converted load_config to a class, ConfigLoader. Now recursion
5308 5312 control is better organized. Doesn't include the same file twice.
5309 5313
5310 5314 2001-11-29 Fernando Perez <fperez@colorado.edu>
5311 5315
5312 5316 * Got input history working. Changed output history variables from
5313 5317 _p to _o so that _i is for input and _o for output. Just cleaner
5314 5318 convention.
5315 5319
5316 5320 * Implemented parametric aliases. This pretty much allows the
5317 5321 alias system to offer full-blown shell convenience, I think.
5318 5322
5319 5323 * Version 0.1.17 released, 0.1.18 opened.
5320 5324
5321 5325 * dot_ipython/ipythonrc (alias): added documentation.
5322 5326 (xcolor): Fixed small bug (xcolors -> xcolor)
5323 5327
5324 5328 * Changed the alias system. Now alias is a magic command to define
5325 5329 aliases just like the shell. Rationale: the builtin magics should
5326 5330 be there for things deeply connected to IPython's
5327 5331 architecture. And this is a much lighter system for what I think
5328 5332 is the really important feature: allowing users to define quickly
5329 5333 magics that will do shell things for them, so they can customize
5330 5334 IPython easily to match their work habits. If someone is really
5331 5335 desperate to have another name for a builtin alias, they can
5332 5336 always use __IP.magic_newname = __IP.magic_oldname. Hackish but
5333 5337 works.
5334 5338
5335 5339 2001-11-28 Fernando Perez <fperez@colorado.edu>
5336 5340
5337 5341 * Changed @file so that it opens the source file at the proper
5338 5342 line. Since it uses less, if your EDITOR environment is
5339 5343 configured, typing v will immediately open your editor of choice
5340 5344 right at the line where the object is defined. Not as quick as
5341 5345 having a direct @edit command, but for all intents and purposes it
5342 5346 works. And I don't have to worry about writing @edit to deal with
5343 5347 all the editors, less does that.
5344 5348
5345 5349 * Version 0.1.16 released, 0.1.17 opened.
5346 5350
5347 5351 * Fixed some nasty bugs in the page/page_dumb combo that could
5348 5352 crash IPython.
5349 5353
5350 5354 2001-11-27 Fernando Perez <fperez@colorado.edu>
5351 5355
5352 5356 * Version 0.1.15 released, 0.1.16 opened.
5353 5357
5354 5358 * Finally got ? and ?? to work for undefined things: now it's
5355 5359 possible to type {}.get? and get information about the get method
5356 5360 of dicts, or os.path? even if only os is defined (so technically
5357 5361 os.path isn't). Works at any level. For example, after import os,
5358 5362 os?, os.path?, os.path.abspath? all work. This is great, took some
5359 5363 work in _ofind.
5360 5364
5361 5365 * Fixed more bugs with logging. The sanest way to do it was to add
5362 5366 to @log a 'mode' parameter. Killed two in one shot (this mode
5363 5367 option was a request of Janko's). I think it's finally clean
5364 5368 (famous last words).
5365 5369
5366 5370 * Added a page_dumb() pager which does a decent job of paging on
5367 5371 screen, if better things (like less) aren't available. One less
5368 5372 unix dependency (someday maybe somebody will port this to
5369 5373 windows).
5370 5374
5371 5375 * Fixed problem in magic_log: would lock of logging out if log
5372 5376 creation failed (because it would still think it had succeeded).
5373 5377
5374 5378 * Improved the page() function using curses to auto-detect screen
5375 5379 size. Now it can make a much better decision on whether to print
5376 5380 or page a string. Option screen_length was modified: a value 0
5377 5381 means auto-detect, and that's the default now.
5378 5382
5379 5383 * Version 0.1.14 released, 0.1.15 opened. I think this is ready to
5380 5384 go out. I'll test it for a few days, then talk to Janko about
5381 5385 licences and announce it.
5382 5386
5383 5387 * Fixed the length of the auto-generated ---> prompt which appears
5384 5388 for auto-parens and auto-quotes. Getting this right isn't trivial,
5385 5389 with all the color escapes, different prompt types and optional
5386 5390 separators. But it seems to be working in all the combinations.
5387 5391
5388 5392 2001-11-26 Fernando Perez <fperez@colorado.edu>
5389 5393
5390 5394 * Wrote a regexp filter to get option types from the option names
5391 5395 string. This eliminates the need to manually keep two duplicate
5392 5396 lists.
5393 5397
5394 5398 * Removed the unneeded check_option_names. Now options are handled
5395 5399 in a much saner manner and it's easy to visually check that things
5396 5400 are ok.
5397 5401
5398 5402 * Updated version numbers on all files I modified to carry a
5399 5403 notice so Janko and Nathan have clear version markers.
5400 5404
5401 5405 * Updated docstring for ultraTB with my changes. I should send
5402 5406 this to Nathan.
5403 5407
5404 5408 * Lots of small fixes. Ran everything through pychecker again.
5405 5409
5406 5410 * Made loading of deep_reload an cmd line option. If it's not too
5407 5411 kosher, now people can just disable it. With -nodeep_reload it's
5408 5412 still available as dreload(), it just won't overwrite reload().
5409 5413
5410 5414 * Moved many options to the no| form (-opt and -noopt
5411 5415 accepted). Cleaner.
5412 5416
5413 5417 * Changed magic_log so that if called with no parameters, it uses
5414 5418 'rotate' mode. That way auto-generated logs aren't automatically
5415 5419 over-written. For normal logs, now a backup is made if it exists
5416 5420 (only 1 level of backups). A new 'backup' mode was added to the
5417 5421 Logger class to support this. This was a request by Janko.
5418 5422
5419 5423 * Added @logoff/@logon to stop/restart an active log.
5420 5424
5421 5425 * Fixed a lot of bugs in log saving/replay. It was pretty
5422 5426 broken. Now special lines (!@,/) appear properly in the command
5423 5427 history after a log replay.
5424 5428
5425 5429 * Tried and failed to implement full session saving via pickle. My
5426 5430 idea was to pickle __main__.__dict__, but modules can't be
5427 5431 pickled. This would be a better alternative to replaying logs, but
5428 5432 seems quite tricky to get to work. Changed -session to be called
5429 5433 -logplay, which more accurately reflects what it does. And if we
5430 5434 ever get real session saving working, -session is now available.
5431 5435
5432 5436 * Implemented color schemes for prompts also. As for tracebacks,
5433 5437 currently only NoColor and Linux are supported. But now the
5434 5438 infrastructure is in place, based on a generic ColorScheme
5435 5439 class. So writing and activating new schemes both for the prompts
5436 5440 and the tracebacks should be straightforward.
5437 5441
5438 5442 * Version 0.1.13 released, 0.1.14 opened.
5439 5443
5440 5444 * Changed handling of options for output cache. Now counter is
5441 5445 hardwired starting at 1 and one specifies the maximum number of
5442 5446 entries *in the outcache* (not the max prompt counter). This is
5443 5447 much better, since many statements won't increase the cache
5444 5448 count. It also eliminated some confusing options, now there's only
5445 5449 one: cache_size.
5446 5450
5447 5451 * Added 'alias' magic function and magic_alias option in the
5448 5452 ipythonrc file. Now the user can easily define whatever names he
5449 5453 wants for the magic functions without having to play weird
5450 5454 namespace games. This gives IPython a real shell-like feel.
5451 5455
5452 5456 * Fixed doc/?/?? for magics. Now all work, in all forms (explicit
5453 5457 @ or not).
5454 5458
5455 5459 This was one of the last remaining 'visible' bugs (that I know
5456 5460 of). I think if I can clean up the session loading so it works
5457 5461 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first
5458 5462 about licensing).
5459 5463
5460 5464 2001-11-25 Fernando Perez <fperez@colorado.edu>
5461 5465
5462 5466 * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and
5463 5467 there's a cleaner distinction between what ? and ?? show.
5464 5468
5465 5469 * Added screen_length option. Now the user can define his own
5466 5470 screen size for page() operations.
5467 5471
5468 5472 * Implemented magic shell-like functions with automatic code
5469 5473 generation. Now adding another function is just a matter of adding
5470 5474 an entry to a dict, and the function is dynamically generated at
5471 5475 run-time. Python has some really cool features!
5472 5476
5473 5477 * Renamed many options to cleanup conventions a little. Now all
5474 5478 are lowercase, and only underscores where needed. Also in the code
5475 5479 option name tables are clearer.
5476 5480
5477 5481 * Changed prompts a little. Now input is 'In [n]:' instead of
5478 5482 'In[n]:='. This allows it the numbers to be aligned with the
5479 5483 Out[n] numbers, and removes usage of ':=' which doesn't exist in
5480 5484 Python (it was a Mathematica thing). The '...' continuation prompt
5481 5485 was also changed a little to align better.
5482 5486
5483 5487 * Fixed bug when flushing output cache. Not all _p<n> variables
5484 5488 exist, so their deletion needs to be wrapped in a try:
5485 5489
5486 5490 * Figured out how to properly use inspect.formatargspec() (it
5487 5491 requires the args preceded by *). So I removed all the code from
5488 5492 _get_pdef in Magic, which was just replicating that.
5489 5493
5490 5494 * Added test to prefilter to allow redefining magic function names
5491 5495 as variables. This is ok, since the @ form is always available,
5492 5496 but whe should allow the user to define a variable called 'ls' if
5493 5497 he needs it.
5494 5498
5495 5499 * Moved the ToDo information from README into a separate ToDo.
5496 5500
5497 5501 * General code cleanup and small bugfixes. I think it's close to a
5498 5502 state where it can be released, obviously with a big 'beta'
5499 5503 warning on it.
5500 5504
5501 5505 * Got the magic function split to work. Now all magics are defined
5502 5506 in a separate class. It just organizes things a bit, and now
5503 5507 Xemacs behaves nicer (it was choking on InteractiveShell b/c it
5504 5508 was too long).
5505 5509
5506 5510 * Changed @clear to @reset to avoid potential confusions with
5507 5511 the shell command clear. Also renamed @cl to @clear, which does
5508 5512 exactly what people expect it to from their shell experience.
5509 5513
5510 5514 Added a check to the @reset command (since it's so
5511 5515 destructive, it's probably a good idea to ask for confirmation).
5512 5516 But now reset only works for full namespace resetting. Since the
5513 5517 del keyword is already there for deleting a few specific
5514 5518 variables, I don't see the point of having a redundant magic
5515 5519 function for the same task.
5516 5520
5517 5521 2001-11-24 Fernando Perez <fperez@colorado.edu>
5518 5522
5519 5523 * Updated the builtin docs (esp. the ? ones).
5520 5524
5521 5525 * Ran all the code through pychecker. Not terribly impressed with
5522 5526 it: lots of spurious warnings and didn't really find anything of
5523 5527 substance (just a few modules being imported and not used).
5524 5528
5525 5529 * Implemented the new ultraTB functionality into IPython. New
5526 5530 option: xcolors. This chooses color scheme. xmode now only selects
5527 5531 between Plain and Verbose. Better orthogonality.
5528 5532
5529 5533 * Large rewrite of ultraTB. Much cleaner now, with a separation of
5530 5534 mode and color scheme for the exception handlers. Now it's
5531 5535 possible to have the verbose traceback with no coloring.
5532 5536
5533 5537 2001-11-23 Fernando Perez <fperez@colorado.edu>
5534 5538
5535 5539 * Version 0.1.12 released, 0.1.13 opened.
5536 5540
5537 5541 * Removed option to set auto-quote and auto-paren escapes by
5538 5542 user. The chances of breaking valid syntax are just too high. If
5539 5543 someone *really* wants, they can always dig into the code.
5540 5544
5541 5545 * Made prompt separators configurable.
5542 5546
5543 5547 2001-11-22 Fernando Perez <fperez@colorado.edu>
5544 5548
5545 5549 * Small bugfixes in many places.
5546 5550
5547 5551 * Removed the MyCompleter class from ipplib. It seemed redundant
5548 5552 with the C-p,C-n history search functionality. Less code to
5549 5553 maintain.
5550 5554
5551 5555 * Moved all the original ipython.py code into ipythonlib.py. Right
5552 5556 now it's just one big dump into a function called make_IPython, so
5553 5557 no real modularity has been gained. But at least it makes the
5554 5558 wrapper script tiny, and since ipythonlib is a module, it gets
5555 5559 compiled and startup is much faster.
5556 5560
5557 5561 This is a reasobably 'deep' change, so we should test it for a
5558 5562 while without messing too much more with the code.
5559 5563
5560 5564 2001-11-21 Fernando Perez <fperez@colorado.edu>
5561 5565
5562 5566 * Version 0.1.11 released, 0.1.12 opened for further work.
5563 5567
5564 5568 * Removed dependency on Itpl. It was only needed in one place. It
5565 5569 would be nice if this became part of python, though. It makes life
5566 5570 *a lot* easier in some cases.
5567 5571
5568 5572 * Simplified the prefilter code a bit. Now all handlers are
5569 5573 expected to explicitly return a value (at least a blank string).
5570 5574
5571 5575 * Heavy edits in ipplib. Removed the help system altogether. Now
5572 5576 obj?/?? is used for inspecting objects, a magic @doc prints
5573 5577 docstrings, and full-blown Python help is accessed via the 'help'
5574 5578 keyword. This cleans up a lot of code (less to maintain) and does
5575 5579 the job. Since 'help' is now a standard Python component, might as
5576 5580 well use it and remove duplicate functionality.
5577 5581
5578 5582 Also removed the option to use ipplib as a standalone program. By
5579 5583 now it's too dependent on other parts of IPython to function alone.
5580 5584
5581 5585 * Fixed bug in genutils.pager. It would crash if the pager was
5582 5586 exited immediately after opening (broken pipe).
5583 5587
5584 5588 * Trimmed down the VerboseTB reporting a little. The header is
5585 5589 much shorter now and the repeated exception arguments at the end
5586 5590 have been removed. For interactive use the old header seemed a bit
5587 5591 excessive.
5588 5592
5589 5593 * Fixed small bug in output of @whos for variables with multi-word
5590 5594 types (only first word was displayed).
5591 5595
5592 5596 2001-11-17 Fernando Perez <fperez@colorado.edu>
5593 5597
5594 5598 * Version 0.1.10 released, 0.1.11 opened for further work.
5595 5599
5596 5600 * Modified dirs and friends. dirs now *returns* the stack (not
5597 5601 prints), so one can manipulate it as a variable. Convenient to
5598 5602 travel along many directories.
5599 5603
5600 5604 * Fixed bug in magic_pdef: would only work with functions with
5601 5605 arguments with default values.
5602 5606
5603 5607 2001-11-14 Fernando Perez <fperez@colorado.edu>
5604 5608
5605 5609 * Added the PhysicsInput stuff to dot_ipython so it ships as an
5606 5610 example with IPython. Various other minor fixes and cleanups.
5607 5611
5608 5612 * Version 0.1.9 released, 0.1.10 opened for further work.
5609 5613
5610 5614 * Added sys.path to the list of directories searched in the
5611 5615 execfile= option. It used to be the current directory and the
5612 5616 user's IPYTHONDIR only.
5613 5617
5614 5618 2001-11-13 Fernando Perez <fperez@colorado.edu>
5615 5619
5616 5620 * Reinstated the raw_input/prefilter separation that Janko had
5617 5621 initially. This gives a more convenient setup for extending the
5618 5622 pre-processor from the outside: raw_input always gets a string,
5619 5623 and prefilter has to process it. We can then redefine prefilter
5620 5624 from the outside and implement extensions for special
5621 5625 purposes.
5622 5626
5623 5627 Today I got one for inputting PhysicalQuantity objects
5624 5628 (from Scientific) without needing any function calls at
5625 5629 all. Extremely convenient, and it's all done as a user-level
5626 5630 extension (no IPython code was touched). Now instead of:
5627 5631 a = PhysicalQuantity(4.2,'m/s**2')
5628 5632 one can simply say
5629 5633 a = 4.2 m/s**2
5630 5634 or even
5631 5635 a = 4.2 m/s^2
5632 5636
5633 5637 I use this, but it's also a proof of concept: IPython really is
5634 5638 fully user-extensible, even at the level of the parsing of the
5635 5639 command line. It's not trivial, but it's perfectly doable.
5636 5640
5637 5641 * Added 'add_flip' method to inclusion conflict resolver. Fixes
5638 5642 the problem of modules being loaded in the inverse order in which
5639 5643 they were defined in
5640 5644
5641 5645 * Version 0.1.8 released, 0.1.9 opened for further work.
5642 5646
5643 5647 * Added magics pdef, source and file. They respectively show the
5644 5648 definition line ('prototype' in C), source code and full python
5645 5649 file for any callable object. The object inspector oinfo uses
5646 5650 these to show the same information.
5647 5651
5648 5652 * Version 0.1.7 released, 0.1.8 opened for further work.
5649 5653
5650 5654 * Separated all the magic functions into a class called Magic. The
5651 5655 InteractiveShell class was becoming too big for Xemacs to handle
5652 5656 (de-indenting a line would lock it up for 10 seconds while it
5653 5657 backtracked on the whole class!)
5654 5658
5655 5659 FIXME: didn't work. It can be done, but right now namespaces are
5656 5660 all messed up. Do it later (reverted it for now, so at least
5657 5661 everything works as before).
5658 5662
5659 5663 * Got the object introspection system (magic_oinfo) working! I
5660 5664 think this is pretty much ready for release to Janko, so he can
5661 5665 test it for a while and then announce it. Pretty much 100% of what
5662 5666 I wanted for the 'phase 1' release is ready. Happy, tired.
5663 5667
5664 5668 2001-11-12 Fernando Perez <fperez@colorado.edu>
5665 5669
5666 5670 * Version 0.1.6 released, 0.1.7 opened for further work.
5667 5671
5668 5672 * Fixed bug in printing: it used to test for truth before
5669 5673 printing, so 0 wouldn't print. Now checks for None.
5670 5674
5671 5675 * Fixed bug where auto-execs increase the prompt counter by 2 (b/c
5672 5676 they have to call len(str(sys.ps1)) ). But the fix is ugly, it
5673 5677 reaches by hand into the outputcache. Think of a better way to do
5674 5678 this later.
5675 5679
5676 5680 * Various small fixes thanks to Nathan's comments.
5677 5681
5678 5682 * Changed magic_pprint to magic_Pprint. This way it doesn't
5679 5683 collide with pprint() and the name is consistent with the command
5680 5684 line option.
5681 5685
5682 5686 * Changed prompt counter behavior to be fully like
5683 5687 Mathematica's. That is, even input that doesn't return a result
5684 5688 raises the prompt counter. The old behavior was kind of confusing
5685 5689 (getting the same prompt number several times if the operation
5686 5690 didn't return a result).
5687 5691
5688 5692 * Fixed Nathan's last name in a couple of places (Gray, not Graham).
5689 5693
5690 5694 * Fixed -Classic mode (wasn't working anymore).
5691 5695
5692 5696 * Added colored prompts using Nathan's new code. Colors are
5693 5697 currently hardwired, they can be user-configurable. For
5694 5698 developers, they can be chosen in file ipythonlib.py, at the
5695 5699 beginning of the CachedOutput class def.
5696 5700
5697 5701 2001-11-11 Fernando Perez <fperez@colorado.edu>
5698 5702
5699 5703 * Version 0.1.5 released, 0.1.6 opened for further work.
5700 5704
5701 5705 * Changed magic_env to *return* the environment as a dict (not to
5702 5706 print it). This way it prints, but it can also be processed.
5703 5707
5704 5708 * Added Verbose exception reporting to interactive
5705 5709 exceptions. Very nice, now even 1/0 at the prompt gives a verbose
5706 5710 traceback. Had to make some changes to the ultraTB file. This is
5707 5711 probably the last 'big' thing in my mental todo list. This ties
5708 5712 in with the next entry:
5709 5713
5710 5714 * Changed -Xi and -Xf to a single -xmode option. Now all the user
5711 5715 has to specify is Plain, Color or Verbose for all exception
5712 5716 handling.
5713 5717
5714 5718 * Removed ShellServices option. All this can really be done via
5715 5719 the magic system. It's easier to extend, cleaner and has automatic
5716 5720 namespace protection and documentation.
5717 5721
5718 5722 2001-11-09 Fernando Perez <fperez@colorado.edu>
5719 5723
5720 5724 * Fixed bug in output cache flushing (missing parameter to
5721 5725 __init__). Other small bugs fixed (found using pychecker).
5722 5726
5723 5727 * Version 0.1.4 opened for bugfixing.
5724 5728
5725 5729 2001-11-07 Fernando Perez <fperez@colorado.edu>
5726 5730
5727 5731 * Version 0.1.3 released, mainly because of the raw_input bug.
5728 5732
5729 5733 * Fixed NASTY bug in raw_input: input line wasn't properly parsed
5730 5734 and when testing for whether things were callable, a call could
5731 5735 actually be made to certain functions. They would get called again
5732 5736 once 'really' executed, with a resulting double call. A disaster
5733 5737 in many cases (list.reverse() would never work!).
5734 5738
5735 5739 * Removed prefilter() function, moved its code to raw_input (which
5736 5740 after all was just a near-empty caller for prefilter). This saves
5737 5741 a function call on every prompt, and simplifies the class a tiny bit.
5738 5742
5739 5743 * Fix _ip to __ip name in magic example file.
5740 5744
5741 5745 * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should
5742 5746 work with non-gnu versions of tar.
5743 5747
5744 5748 2001-11-06 Fernando Perez <fperez@colorado.edu>
5745 5749
5746 5750 * Version 0.1.2. Just to keep track of the recent changes.
5747 5751
5748 5752 * Fixed nasty bug in output prompt routine. It used to check 'if
5749 5753 arg != None...'. Problem is, this fails if arg implements a
5750 5754 special comparison (__cmp__) which disallows comparing to
5751 5755 None. Found it when trying to use the PhysicalQuantity module from
5752 5756 ScientificPython.
5753 5757
5754 5758 2001-11-05 Fernando Perez <fperez@colorado.edu>
5755 5759
5756 5760 * Also added dirs. Now the pushd/popd/dirs family functions
5757 5761 basically like the shell, with the added convenience of going home
5758 5762 when called with no args.
5759 5763
5760 5764 * pushd/popd slightly modified to mimic shell behavior more
5761 5765 closely.
5762 5766
5763 5767 * Added env,pushd,popd from ShellServices as magic functions. I
5764 5768 think the cleanest will be to port all desired functions from
5765 5769 ShellServices as magics and remove ShellServices altogether. This
5766 5770 will provide a single, clean way of adding functionality
5767 5771 (shell-type or otherwise) to IP.
5768 5772
5769 5773 2001-11-04 Fernando Perez <fperez@colorado.edu>
5770 5774
5771 5775 * Added .ipython/ directory to sys.path. This way users can keep
5772 5776 customizations there and access them via import.
5773 5777
5774 5778 2001-11-03 Fernando Perez <fperez@colorado.edu>
5775 5779
5776 5780 * Opened version 0.1.1 for new changes.
5777 5781
5778 5782 * Changed version number to 0.1.0: first 'public' release, sent to
5779 5783 Nathan and Janko.
5780 5784
5781 5785 * Lots of small fixes and tweaks.
5782 5786
5783 5787 * Minor changes to whos format. Now strings are shown, snipped if
5784 5788 too long.
5785 5789
5786 5790 * Changed ShellServices to work on __main__ so they show up in @who
5787 5791
5788 5792 * Help also works with ? at the end of a line:
5789 5793 ?sin and sin?
5790 5794 both produce the same effect. This is nice, as often I use the
5791 5795 tab-complete to find the name of a method, but I used to then have
5792 5796 to go to the beginning of the line to put a ? if I wanted more
5793 5797 info. Now I can just add the ? and hit return. Convenient.
5794 5798
5795 5799 2001-11-02 Fernando Perez <fperez@colorado.edu>
5796 5800
5797 5801 * Python version check (>=2.1) added.
5798 5802
5799 5803 * Added LazyPython documentation. At this point the docs are quite
5800 5804 a mess. A cleanup is in order.
5801 5805
5802 5806 * Auto-installer created. For some bizarre reason, the zipfiles
5803 5807 module isn't working on my system. So I made a tar version
5804 5808 (hopefully the command line options in various systems won't kill
5805 5809 me).
5806 5810
5807 5811 * Fixes to Struct in genutils. Now all dictionary-like methods are
5808 5812 protected (reasonably).
5809 5813
5810 5814 * Added pager function to genutils and changed ? to print usage
5811 5815 note through it (it was too long).
5812 5816
5813 5817 * Added the LazyPython functionality. Works great! I changed the
5814 5818 auto-quote escape to ';', it's on home row and next to '. But
5815 5819 both auto-quote and auto-paren (still /) escapes are command-line
5816 5820 parameters.
5817 5821
5818 5822
5819 5823 2001-11-01 Fernando Perez <fperez@colorado.edu>
5820 5824
5821 5825 * Version changed to 0.0.7. Fairly large change: configuration now
5822 5826 is all stored in a directory, by default .ipython. There, all
5823 5827 config files have normal looking names (not .names)
5824 5828
5825 5829 * Version 0.0.6 Released first to Lucas and Archie as a test
5826 5830 run. Since it's the first 'semi-public' release, change version to
5827 5831 > 0.0.6 for any changes now.
5828 5832
5829 5833 * Stuff I had put in the ipplib.py changelog:
5830 5834
5831 5835 Changes to InteractiveShell:
5832 5836
5833 5837 - Made the usage message a parameter.
5834 5838
5835 5839 - Require the name of the shell variable to be given. It's a bit
5836 5840 of a hack, but allows the name 'shell' not to be hardwired in the
5837 5841 magic (@) handler, which is problematic b/c it requires
5838 5842 polluting the global namespace with 'shell'. This in turn is
5839 5843 fragile: if a user redefines a variable called shell, things
5840 5844 break.
5841 5845
5842 5846 - magic @: all functions available through @ need to be defined
5843 5847 as magic_<name>, even though they can be called simply as
5844 5848 @<name>. This allows the special command @magic to gather
5845 5849 information automatically about all existing magic functions,
5846 5850 even if they are run-time user extensions, by parsing the shell
5847 5851 instance __dict__ looking for special magic_ names.
5848 5852
5849 5853 - mainloop: added *two* local namespace parameters. This allows
5850 5854 the class to differentiate between parameters which were there
5851 5855 before and after command line initialization was processed. This
5852 5856 way, later @who can show things loaded at startup by the
5853 5857 user. This trick was necessary to make session saving/reloading
5854 5858 really work: ideally after saving/exiting/reloading a session,
5855 5859 *everything* should look the same, including the output of @who. I
5856 5860 was only able to make this work with this double namespace
5857 5861 trick.
5858 5862
5859 5863 - added a header to the logfile which allows (almost) full
5860 5864 session restoring.
5861 5865
5862 5866 - prepend lines beginning with @ or !, with a and log
5863 5867 them. Why? !lines: may be useful to know what you did @lines:
5864 5868 they may affect session state. So when restoring a session, at
5865 5869 least inform the user of their presence. I couldn't quite get
5866 5870 them to properly re-execute, but at least the user is warned.
5867 5871
5868 5872 * Started ChangeLog.
General Comments 0
You need to be logged in to leave comments. Login now