2006-02-24 Ville Vainio * Magic.py, upgrade_dir.py: %upgrade magic added. Does things more "cleanly" and safely than the older upgrade mechanism. 2006-02-21 Ville Vainio * Magic.py: %save works again. 2006-02-15 Ville Vainio * Magic.py: %Pprint works again * Extensions/ipy_sane_defaults.py: Provide everything provided in default ipythonrc, to make it possible to have a completely empty ipythonrc (and thus completely rc-file free configuration) 2006-02-11 Fernando Perez * IPython/hooks.py (editor): quote the call to the editor command, to allow commands with spaces in them. Problem noted by watching Ian Oswald's video about textpad under win32 at http://showmedo.com/videoListPage?listKey=PythonIPythonSeries * IPython/UserConfig/ipythonrc: Replace @ signs with % when describing magics (we haven't used @ for a loong time). * IPython/ultraTB.py (VerboseTB.text.text_repr): Added patch contributed by marienz to close http://www.scipy.net/roundup/ipython/issue53. 2006-02-10 Ville Vainio * genutils.py: getoutput now works in win32 too * completer.py: alias and magic completion only invoked at the first "item" in the line, to avoid "cd %store" nonsense. 2006-02-09 Ville Vainio * test/*: Added a unit testing framework (finally). '%run runtests.py' to run test_*. * ipapi.py: Exposed runlines and set_custom_exc 2006-02-07 Ville Vainio * iplib.py: don't split "f 1 2" to "f(1,2)" in autocall, instead use "f(1 2)" as before. 2006-02-05 Fernando Perez * IPython/demo.py (IPythonDemo): Add new classes to the demo facilities, for demos processed by the IPython input filter (IPythonDemo), and for running a script one-line-at-a-time as a demo, both for pure Python (LineDemo) and for IPython-processed input (IPythonLineDemo). After a request by Dave Kohel, from the SAGE team. (Demo.edit): added and edit() method to the demo objects, to edit the in-memory copy of the last executed block. * IPython/Magic.py (magic_edit): add '-r' option for 'raw' processing to %edit, %macro and %save. These commands can now be invoked on the unprocessed input as it was typed by the user (without any prefilters applied). After requests by the SAGE team at SAGE days 2006: http://modular.ucsd.edu/sage/days1/schedule.html. 2006-02-01 Ville Vainio * setup.py, eggsetup.py: easy_install ipython==dev works correctly now (on Linux) * ipy_user_conf,ipmaker: user config changes, removed spurious warnings * iplib: if rc.banner is string, use it as is. * Magic: %pycat accepts a string argument and pages it's contents. 2006-01-30 Ville Vainio * pickleshare,pspersistence,ipapi,Magic: persistence overhaul. Now %store and bookmarks work through PickleShare, meaning that concurrent access is possible and all ipython sessions see the same database situation all the time, instead of snapshot of the situation when the session was started. Hence, %bookmark results are immediately accessible from othes sessions. The database is also available for use by user extensions. See: http://www.python.org/pypi/pickleshare * hooks.py: Two new hooks, 'shutdown_hook' and 'late_startup_hook'. * aliases can now be %store'd * path.py move to Extensions so that pickleshare does not need IPython-specific import. Extensions added to pythonpath right at __init__. * iplib.py: ipalias deprecated/redundant; aliases are converted and called with _ip.system and the pre-transformed command string. 2006-01-29 Fernando Perez * IPython/iplib.py (interact): Fix that we were not catching KeyboardInterrupt exceptions properly. I'm not quite sure why the logic here had to change, but it's fixed now. 2006-01-29 Ville Vainio * iplib.py: Try to import pyreadline on Windows. 2006-01-27 Ville Vainio * iplib.py: Expose ipapi as _ip in builtin namespace. Makes ipmagic (-> _ip.magic), ipsystem (-> _ip.system) and ip_set_hook (-> _ip.set_hook) redundant. % and ! syntax now produce _ip.* variant of the commands. * "_ip.options().autoedit_syntax = 2" automatically throws user to editor for syntax error correction without prompting. 2006-01-27 Ville Vainio * ipmaker.py: Give "realistic" sys.argv for scripts (without 'ipython' at argv[0]) executed through command line. NOTE: this DEPRECATES calling ipython with multiple scripts ("ipython a.py b.py c.py") * iplib.py, hooks.py: Added configurable input prefilter, named 'input_prefilter'. See ext_rescapture.py for example usage. * ext_rescapture.py, Magic.py: Better system command output capture through 'var = !ls' (deprecates user-visible %sc). Same notation applies for magics, 'var = %alias' assigns alias list to var. * ipapi.py: added meta() for accessing extension-usable data store. * iplib.py: added InteractiveShell.getapi(). New magics should be written doing self.getapi() instead of using the shell directly. * Magic.py: %store now allows doing %store foo > ~/myfoo.txt and %store foo >> ~/myfoo.txt to store variables to files (in clean textual form, not a restorable pickle). * ipmaker.py: now import ipy_profile_PROFILENAME automatically * usage.py, Magic.py: added %quickref * iplib.py: ESC_PAREN fixes: /f 1 2 -> f(1,2), not f(1 2). * GetoptErrors when invoking magics etc. with wrong args are now more helpful: GetoptError: option -l not recognized (allowed: "qb" ) 2006-01-25 Fernando Perez * IPython/demo.py (Demo.show): Flush stdout after each block, so computationally intensive blocks don't appear to stall the demo. 2006-01-24 Ville Vainio * iplib.py, hooks.py: 'result_display' hook can return a non-None value to manipulate resulting history entry. * ipapi.py: Moved TryNext here from hooks.py. Moved functions to instance methods of IPApi class, to make extending an embedded IPython feasible. See ext_rehashdir.py for example usage. * Merged 1071-1076 from banches/0.7.1 2006-01-23 Fernando Perez * tools/release (daystamp): Fix build tools to use the new eggsetup.py script to build lightweight eggs. * Applied changesets 1062 and 1064 before 0.7.1 release. * IPython/Magic.py (magic_history): Add '-r' option to %hist, to see the raw input history (without conversions like %ls -> ipmagic("ls")). After a request from W. Stein, SAGE (http://modular.ucsd.edu/sage) developer. This information is stored in the input_hist_raw attribute of the IPython instance, so developers can access it if needed (it's an InputList instance). * Versionstring = 0.7.2.svn * eggsetup.py: A separate script for constructing eggs, creates proper launch scripts even on Windows (an .exe file in \python24\scripts). * ipapi.py: launch_new_instance, launch entry point needed for the egg. 2006-01-23 Ville Vainio * Added %cpaste magic for pasting python code 2006-01-22 Ville Vainio * Merge from branches/0.7.1 into trunk, revs 1052-1057 * Versionstring = 0.7.2.svn * eggsetup.py: A separate script for constructing eggs, creates proper launch scripts even on Windows (an .exe file in \python24\scripts). * ipapi.py: launch_new_instance, launch entry point needed for the egg. 2006-01-22 Fernando Perez * IPython/OInspect.py (Inspector.pinfo): fix bug where foo?? or %pfile foo would print the file for foo even if it was a binary. Now, extensions '.so' and '.dll' are skipped. * IPython/Shell.py (MTInteractiveShell.__init__): Fix threading bug, where macros would fail in all threaded modes. I'm not 100% sure, so I'm going to put out an rc instead of making a release today, and wait for feedback for at least a few days. * IPython/iplib.py (handle_normal): fix (finally? somehow I doubt it...) the handling of pasting external code with autoindent on. To get out of a multiline input, the rule will appear for most users unchanged: two blank lines or change the indent level proposed by IPython. But there is a twist now: you can add/subtract only *one or two spaces*. If you add/subtract three or more (unless you completely delete the line), IPython will accept that line, and you'll need to enter a second one of pure whitespace. I know it sounds complicated, but I can't find a different solution that covers all the cases, with the right heuristics. Hopefully in actual use, nobody will really notice all these strange rules and things will 'just work'. 2006-01-21 Fernando Perez * IPython/iplib.py (interact): catch exceptions which can be triggered asynchronously by signal handlers. Thanks to an automatic crash report, submitted by Colin Kingsley . 2006-01-20 Ville Vainio * Ipython/Extensions/ext_rehashdir.py: Created a usable example (%rehashdir, very useful, try it out) of how to extend ipython with new magics. Also added Extensions dir to pythonpath to make importing extensions easy. * %store now complains when trying to store interactively declared classes / instances of those classes. * Extensions/ipy_system_conf.py, UserConfig/ipy_user_conf.py, ipmaker.py: Config rehaul. Now ipy_..._conf.py are always imported if they exist, and ipy_user_conf.py with some defaults is created for the user. * Startup rehashing done by the config file, not InterpreterExec. This means system commands are available even without selecting the pysh profile. It's the sensible default after all. 2006-01-20 Fernando Perez * IPython/iplib.py (raw_input): I _think_ I got the pasting of multiline code with autoindent on working. But I am really not sure, so this needs more testing. Will commit a debug-enabled version for now, while I test it some more, so that Ville and others may also catch any problems. Also made self.indent_current_str() a method, to ensure that there's no chance of the indent space count and the corresponding string falling out of sync. All code needing the string should just call the method. 2006-01-18 Fernando Perez * IPython/Magic.py (magic_edit): fix check for when users don't save their output files, the try/except was in the wrong section. 2006-01-17 Fernando Perez * IPython/Magic.py (magic_run): fix __file__ global missing from script's namespace when executed via %run. After a report by Vivian. * IPython/Debugger.py (Pdb.__init__): Fix breakage with '%run -d' when using python 2.4. The parent constructor changed in 2.4, and we need to track it directly (we can't call it, as it messes up readline and tab-completion inside our pdb would stop working). After a bug report by R. Bernstein . 2006-01-16 Ville Vainio * Ipython/magic.py:Reverted back to old %edit functionality that returns file contents on exit. * IPython/path.py: Added Jason Orendorff's "path" module to IPython tree, http://www.jorendorff.com/articles/python/path/. You can get path objects conveniently through %sc, and !!, e.g.: sc files=ls for p in files.paths: # or files.p print p,p.mtime * Ipython/iplib.py:"," and ";" autoquoting-upon-autocall now work again without considering the exclusion regexp - hence, things like ',foo my/path' turn to 'foo("my/path")' instead of syntax error. 2006-01-14 Ville Vainio * IPython/ipapi.py (ashook, asmagic, options): Added convenience ipapi decorators for python 2.4 users, options() provides access to rc data. * IPython/Magic.py (magic_cd): %cd now accepts backslashes as path separators (even on Linux ;-). Space character after backslash (as yielded by tab completer) is still space; "%cd long\ name" works as expected. * IPython/ipapi.py,hooks.py,iplib.py: Hooks now implemented as "chain of command", with priority. API stays the same, TryNext exception raised by a hook function signals that current hook failed and next hook should try handling it, as suggested by Walter Dörwald . Walter also requested configurable display hook, which is now implemented. 2006-01-13 Ville Vainio * IPython/platutils*.py: platform specific utility functions, so far only set_term_title is implemented (change terminal label in windowing systems). %cd now changes the title to current dir. * IPython/Release.py: Added myself to "authors" list, had to create new files. * IPython/iplib.py (handle_shell_escape): fixed logical flaw in shell escape; not a known bug but had potential to be one in the future. * IPython/ipapi.py (added),OInspect.py,iplib.py: "Public" extension API for IPython! See the module for usage example. Fix OInspect for docstring-less magic functions. 2006-01-13 Fernando Perez * IPython/iplib.py (raw_input): temporarily deactivate all attempts at allowing pasting of code with autoindent on. It introduced bugs (reported by Prabhu) and I can't seem to find a robust combination which works in all cases. Will have to revisit later. * IPython/genutils.py: remove isspace() function. We've dropped 2.2 compatibility, so it's OK to use the string method. 2006-01-12 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): fix regexp matching what NOT to autocall on, to include all python binary operators (including things like 'and', 'or', 'is' and 'in'). Prompted by a bug report on 'foo & bar', but I realized we had many more potential bug cases with other operators. The regexp is self.re_exclude_auto, it's fairly commented. 2006-01-12 Ville Vainio * IPython/iplib.py (make_quoted_expr,handle_shell_escape): Prettified and hardened string/backslash quoting with ipsystem(), ipalias() and ipmagic(). Now even \ characters are passed to %magics, !shell escapes and aliases exactly as they are in the ipython command line. Should improve backslash experience, particularly in Windows (path delimiter for some commands that won't understand '/'), but Unix benefits as well (regexps). %cd magic still doesn't support backslash path delimiters, though. Also deleted all pretense of supporting multiline command strings in !system or %magic commands. Thanks to Jerry McRae for suggestions. * doc/build_doc_instructions.txt added. Documentation on how to use doc/update_manual.py, added yesterday. Both files contributed by Jörgen Stenarson . This slates doc/*.sh for deprecation at a later date. * /ipython.py Added ipython.py to root directory for zero-installation (tar xzvf ipython.tgz; cd ipython; python ipython.py) and development convenience (no need to kee doing "setup.py install" between changes). * Made ! and !! shell escapes work (again) in multiline expressions: if 1: !ls !!ls 2006-01-12 Fernando Perez * IPython/ipstruct.py (Struct): Rename IPython.Struct to IPython.ipstruct, to avoid local shadowing of the stdlib 'struct' module in case-insensitive installation. Was causing crashes under win32. Closes http://www.scipy.net/roundup/ipython/issue49. * IPython/Magic.py (magic_pycat): Fix pycat, patch by Marien Zwart , closes http://www.scipy.net/roundup/ipython/issue51. 2006-01-11 Fernando Perez * IPython/Shell.py (IPShellGTK.on_timer): Finally fix the the problem of excessive CPU usage under *nix and keyboard lag under win32. 2006-01-10 *** Released version 0.7.0 2006-01-10 Fernando Perez * IPython/Release.py (revision): tag version number to 0.7.0, ready for release. * IPython/Magic.py (magic_edit): Add print statement to %edit so it informs the user of the name of the temp. file used. This can help if you decide later to reuse that same file, so you know where to copy the info from. 2006-01-09 Fernando Perez * setup_bdist_egg.py: little script to build an egg. Added support in the release tools as well. 2006-01-08 Fernando Perez * IPython/Shell.py (IPShellWX.__init__): add support for WXPython version selection (new -wxversion command line and ipythonrc parameter). Patch contributed by Arnd Baecker . * IPython/iplib.py (embed_mainloop): fix tab-completion in embedded instances, for variables defined at the interactive prompt of the embedded ipython. Reported by Arnd. * IPython/Magic.py (magic_autocall): Fix %autocall magic. Now it can be used as a (stateful) toggle, or with a direct parameter. * IPython/ultraTB.py (_fixed_getinnerframes): remove debug assert which could be triggered in certain cases and cause the traceback printer not to work. 2006-01-07 Fernando Perez * IPython/iplib.py (_should_recompile): Small fix, closes http://www.scipy.net/roundup/ipython/issue48. Patch by Scott. 2006-01-04 Fernando Perez * IPython/Shell.py (IPShellGTK.mainloop): fix bug in the GTK backend for matplotlib (100% cpu utiliziation). Thanks to Charlie Moad for help with tracking it down. * IPython/iplib.py (handle_auto): fix autocall handling for objects which support BOTH __getitem__ and __call__ (so that f [x] is left alone, instead of becoming f([x]) automatically). * IPython/Magic.py (magic_cd): fix crash when cd -b was used. Ville's patch. 2006-01-03 Fernando Perez * IPython/iplib.py (handle_auto): changed autocall semantics to include 'smart' mode, where the autocall transformation is NOT applied if there are no arguments on the line. This allows you to just type 'foo' if foo is a callable to see its internal form, instead of having it called with no arguments (typically a mistake). The old 'full' autocall still exists: for that, you need to set the 'autocall' parameter to 2 in your ipythonrc file. * IPython/completer.py (Completer.attr_matches): add tab-completion support for Enthoughts' traits. After a report by Arnd and a patch by Prabhu. 2006-01-02 Fernando Perez * IPython/ultraTB.py (_fixed_getinnerframes): added Alex Schmolck's patch to fix inspect.getinnerframes(). * IPython/iplib.py (InteractiveShell.__init__): significant fixes for embedded instances, regarding handling of namespaces and items added to the __builtin__ one. Multiple embedded instances and recursive embeddings should work better now (though I'm not sure I've got all the corner cases fixed, that code is a bit of a brain twister). * IPython/Magic.py (magic_edit): added support to edit in-memory macros (automatically creates the necessary temp files). %edit also doesn't return the file contents anymore, it's just noise. * IPython/completer.py (Completer.attr_matches): revert change to complete only on attributes listed in __all__. I realized it cripples the tab-completion system as a tool for exploring the internals of unknown libraries (it renders any non-__all__ attribute off-limits). I got bit by this when trying to see something inside the dis module. 2005-12-31 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): add .meta namespace for users and extension writers to hold data in. This follows the discussion in http://projects.scipy.org/ipython/ipython/wiki/RefactoringIPython. * IPython/completer.py (IPCompleter.complete): small patch to help tab-completion under Emacs, after a suggestion by John Barnard . * IPython/Magic.py (Magic.extract_input_slices): added support for the slice notation in magics to use N-M to represent numbers N...M (closed endpoints). This is used by %macro and %save. * IPython/completer.py (Completer.attr_matches): for modules which define __all__, complete only on those. After a patch by Jeffrey Collins . Also, clean up and speed up this routine. * IPython/Logger.py (Logger.log): fix a history handling bug. I don't know if this is the end of it, but the behavior now is certainly much more correct. Note that coupled with macros, slightly surprising (at first) behavior may occur: a macro will in general expand to multiple lines of input, so upon exiting, the in/out counters will both be bumped by the corresponding amount (as if the macro's contents had been typed interactively). Typing %hist will reveal the intermediate (silently processed) lines. * IPython/Magic.py (magic_run): fix a subtle bug which could cause pickle to fail (%run was overwriting __main__ and not restoring it, but pickle relies on __main__ to operate). * IPython/iplib.py (InteractiveShell): fix pdb calling: I'm now using properties, but forgot to make the main InteractiveShell class a new-style class. Properties fail silently, and misteriously, with old-style class (getters work, but setters don't do anything). 2005-12-30 Fernando Perez * IPython/Magic.py (magic_history): fix history reporting bug (I know some nasties are still there, I just can't seem to find a reproducible test case to track them down; the input history is falling out of sync...) * IPython/iplib.py (handle_shell_escape): fix bug where both aliases and system accesses where broken for indented code (such as loops). * IPython/genutils.py (shell): fix small but critical bug for win32 system access. 2005-12-29 Fernando Perez * IPython/iplib.py (showtraceback): remove use of the sys.last_{type/value/traceback} structures, which are non thread-safe. (_prefilter): change control flow to ensure that we NEVER introspect objects when autocall is off. This will guarantee that having an input line of the form 'x.y', where access to attribute 'y' has side effects, doesn't trigger the side effect TWICE. It is important to note that, with autocall on, these side effects can still happen. (ipsystem): new builtin, to complete the ip{magic/alias/system} trio. IPython offers these three kinds of special calls which are not python code, and it's a good thing to have their call method be accessible as pure python functions (not just special syntax at the command line). It gives us a better internal implementation structure, as well as exposing these for user scripting more cleanly. * IPython/macro.py (Macro.__init__): moved macros to a standalone file. Now that they'll be more likely to be used with the persistance system (%store), I want to make sure their module path doesn't change in the future, so that we don't break things for users' persisted data. * IPython/iplib.py (autoindent_update): move indentation management into the _text_ processing loop, not the keyboard interactive one. This is necessary to correctly process non-typed multiline input (such as macros). * IPython/Magic.py (Magic.format_latex): patch by Stefan van der Walt to fix latex formatting of docstrings, which was producing problems in the resulting manual. (magic_whos): improve reporting of instances (show their class, instead of simply printing 'instance' which isn't terribly informative). * IPython/genutils.py (shell): commit Jorgen Stenarson's patch (minor mods) to support network shares under win32. * IPython/winconsole.py (get_console_size): add new winconsole module and fixes to page_dumb() to improve its behavior under win32. Contributed by Alexander Belchenko . * IPython/Magic.py (Macro): simplified Macro class to just subclass list. We've had only 2.2 compatibility for a very long time, yet I was still avoiding subclassing the builtin types. No more (I'm also starting to use properties, though I won't shift to 2.3-specific features quite yet). (magic_store): added Ville's patch for lightweight variable persistence, after a request on the user list by Matt Wilkie . The new %store magic's docstring has full details. * IPython/iplib.py (InteractiveShell.post_config_initialization): changed the default logfile name from 'ipython.log' to 'ipython_log.py'. These logs are real python files, and now that we have much better multiline support, people are more likely to want to use them as such. Might as well name them correctly. * IPython/Magic.py: substantial cleanup. While we can't stop using magics as mixins, due to the existing customizations 'out there' which rely on the mixin naming conventions, at least I cleaned out all cross-class name usage. So once we are OK with breaking compatibility, the two systems can be separated. * IPython/Logger.py: major cleanup. This one is NOT a mixin anymore, and the class is a fair bit less hideous as well. New features were also introduced: timestamping of input, and logging of output results. These are user-visible with the -t and -o options to %logstart. Closes http://www.scipy.net/roundup/ipython/issue11 and a request by William Stein (SAGE developer - http://modular.ucsd.edu/sage). 2005-12-28 Fernando Perez * IPython/iplib.py (handle_shell_escape): add Ville's patch to better hadnle backslashes in paths. See the thread 'More Windows questions part 2 - \/ characters revisited' on the iypthon user list: http://scipy.net/pipermail/ipython-user/2005-June/000907.html (InteractiveShell.__init__): fix tab-completion bug in threaded shells. (InteractiveShell.__init__): change threaded shells to not use the ipython crash handler. This was causing more problems than not, as exceptions in the main thread (GUI code, typically) would always show up as a 'crash', when they really weren't. The colors and exception mode commands (%colors/%xmode) have been synchronized to also take this into account, so users can get verbose exceptions for their threaded code as well. I also added support for activating pdb inside this exception handler as well, so now GUI authors can use IPython's enhanced pdb at runtime. * IPython/ipmaker.py (make_IPython): make the autoedit_syntax flag true by default, and add it to the shipped ipythonrc file. Since this asks the user before proceeding, I think it's OK to make it true by default. * IPython/Magic.py (magic_exit): make new exit/quit magics instead of the previous special-casing of input in the eval loop. I think this is cleaner, as they really are commands and shouldn't have a special role in the middle of the core code. 2005-12-27 Fernando Perez * IPython/iplib.py (edit_syntax_error): added support for automatically reopening the editor if the file had a syntax error in it. Thanks to scottt who provided the patch at: http://www.scipy.net/roundup/ipython/issue36 (slightly modified version committed). * IPython/iplib.py (handle_normal): add suport for multi-line input with emtpy lines. This fixes http://www.scipy.net/roundup/ipython/issue43 and a similar discussion on the user list. WARNING: a behavior change is necessarily introduced to support blank lines: now a single blank line with whitespace does NOT break the input loop, which means that when autoindent is on, by default hitting return on the next (indented) line does NOT exit. Instead, to exit a multiline input you can either have: - TWO whitespace lines (just hit return again), or - a single whitespace line of a different length than provided by the autoindent (add or remove a space). * IPython/completer.py (MagicCompleter.__init__): new 'completer' module to better organize all readline-related functionality. I've deleted FlexCompleter and put all completion clases here. * IPython/iplib.py (raw_input): improve indentation management. It is now possible to paste indented code with autoindent on, and the code is interpreted correctly (though it still looks bad on screen, due to the line-oriented nature of ipython). (MagicCompleter.complete): change behavior so that a TAB key on an otherwise empty line actually inserts a tab, instead of completing on the entire global namespace. This makes it easier to use the TAB key for indentation. After a request by Hans Meine (_prefilter): add support so that typing plain 'exit' or 'quit' does a sensible thing. Originally I tried to deviate as little as possible from the default python behavior, but even that one may change in this direction (thread on python-dev to that effect). Regardless, ipython should do the right thing even if CPython's '>>>' prompt doesn't. (InteractiveShell): removed subclassing code.InteractiveConsole class. By now we'd overridden just about all of its methods: I've copied the remaining two over, and now ipython is a standalone class. This will provide a clearer picture for the chainsaw branch refactoring. 2005-12-26 Fernando Perez * IPython/ultraTB.py (VerboseTB.text): harden reporting against failures for objects which break when dir() is called on them. * IPython/FlexCompleter.py (Completer.__init__): Added support for distinct local and global namespaces in the completer API. This change allows us top properly handle completion with distinct scopes, including in embedded instances (this had never really worked correctly). Note: this introduces a change in the constructor for MagicCompleter, as a new global_namespace parameter is now the second argument (the others were bumped one position). 2005-12-25 Fernando Perez * IPython/iplib.py (embed_mainloop): fix tab-completion in embedded instances (which can be done now thanks to Vivian's frame-handling fixes for pdb). (InteractiveShell.__init__): Fix namespace handling problem in embedded instances. We were overwriting __main__ unconditionally, and this should only be done for 'full' (non-embedded) IPython; embedded instances must respect the caller's __main__. Thanks to a bug report by Yaroslav Bulatov 2005-12-24 Fernando Perez * setup.py: added download_url to setup(). This registers the download address at PyPI, which is not only useful to humans browsing the site, but is also picked up by setuptools (the Eggs machinery). Thanks to Ville and R. Kern for the info/discussion on this. 2005-12-23 Fernando Perez * IPython/Debugger.py (Pdb.__init__): Major pdb mode enhancements. This brings a lot of nice functionality to the pdb mode, which now has tab-completion, syntax highlighting, and better stack handling than before. Many thanks to Vivian De Smedt for the original patches. 2005-12-08 Fernando Perez * IPython/Shell.py (IPShellGTK.mainloop): fix mainloop() calling sequence to consistently accept the banner argument. The inconsistency was tripping SAGE, thanks to Gary Zablackis for the report. 2005-11-15 Fernando Perez * IPython/iplib.py (InteractiveShell.post_config_initialization): Fix bug where a naked 'alias' call in the ipythonrc file would cause a crash. Bug reported by Jorgen Stenarson. 2005-11-15 Fernando Perez * IPython/ipmaker.py (make_IPython): cleanups which should improve startup time. * IPython/iplib.py (runcode): my globals 'fix' for embedded instances had introduced a bug with globals in normal code. Now it's working in all cases. * IPython/Magic.py (magic_psearch): Finish wildcard cleanup and API changes. A new ipytonrc option, 'wildcards_case_sensitive' has been introduced to set the default case sensitivity of the searches. Users can still select either mode at runtime on a per-search basis. 2005-11-13 Fernando Perez * IPython/wildcard.py (NameSpace.__init__): fix resolution of attributes in wildcard searches for subclasses. Modified version of a patch by Jorgen. 2005-11-12 Fernando Perez * IPython/iplib.py (embed_mainloop): Fix handling of globals for embedded instances. I added a user_global_ns attribute to the InteractiveShell class to handle this. 2005-10-31 Fernando Perez * IPython/Shell.py (IPShellGTK.mainloop): Change timeout_add to idle_add, which fixes horrible keyboard lag problems under gtk 2.6 (reported under win32, but may happen also in other platforms). Bug report and fix courtesy of Sean Moore 2005-10-15 Fernando Perez * IPython/Magic.py (magic_psearch): new support for wildcard patterns. Now, typing ?a*b will list all names which begin with a and end in b, for example. The %psearch magic has full docstrings. Many thanks to Jörgen Stenarson , author of the patches implementing this functionality. 2005-09-27 Fernando Perez * Manual: fixed long-standing annoyance of double-dashes (as in --prefix=~, for example) being stripped in the HTML version. This is a latex2html bug, but a workaround was provided. Many thanks to George K. Thiruvathukal for the detailed help, and Michael Tobis for getting the ball rolling. This seemingly small issue had tripped a number of users when first installing, so I'm glad to see it gone. 2005-09-27 Fernando Perez * IPython/Extensions/numeric_formats.py: fix missing import, reported by Stephen Walton. 2005-09-24 Fernando Perez * IPython/demo.py: finish demo module, fully documented now. * IPython/genutils.py (file_read): simple little utility to read a file and ensure it's closed afterwards. 2005-09-23 Fernando Perez * IPython/demo.py (Demo.__init__): added support for individually tagging blocks for automatic execution. * IPython/Magic.py (magic_pycat): new %pycat magic for showing syntax-highlighted python sources, requested by John. 2005-09-22 Fernando Perez * IPython/demo.py (Demo.again): fix bug where again() blocks after finishing. * IPython/genutils.py (shlex_split): moved from Magic to here, where all 2.2 compatibility stuff lives. I needed it for demo.py. * IPython/demo.py (Demo.__init__): added support for silent blocks, improved marks as regexps, docstrings written. (Demo.__init__): better docstring, added support for sys.argv. * IPython/genutils.py (marquee): little utility used by the demo code, handy in general. * IPython/demo.py (Demo.__init__): new class for interactive demos. Not documented yet, I just wrote it in a hurry for scipy'05. Will docstring later. 2005-09-20 Fernando Perez * IPython/Shell.py (sigint_handler): Drastic simplification which also seems to make Ctrl-C work correctly across threads! This is so simple, that I can't beleive I'd missed it before. Needs more testing, though. (KBINT): Never mind, revert changes. I'm sure I'd tried something like this before... * IPython/genutils.py (get_home_dir): add protection against non-dirs in win32 registry. * IPython/iplib.py (InteractiveShell.alias_table_validate): fix bug where dict was mutated while iterating (pysh crash). 2005-09-06 Fernando Perez * IPython/iplib.py (handle_auto): Fix inconsistency arising from spurious newlines added by this routine. After a report by F. Mantegazza. 2005-09-05 Fernando Perez * IPython/Shell.py (hijack_gtk): remove pygtk.require("2.0") calls. These were a leftover from the GTK 1.x days, and can cause problems in certain cases (after a report by John Hunter). * IPython/iplib.py (InteractiveShell.__init__): Trap exception if os.getcwd() fails at init time. Thanks to patch from David Remahl . (InteractiveShell.__init__): prevent certain special magics from being shadowed by aliases. Closes http://www.scipy.net/roundup/ipython/issue41. 2005-08-31 Fernando Perez * IPython/iplib.py (InteractiveShell.complete): Added new top-level completion method to expose the completion mechanism beyond readline-based environments. 2005-08-19 Fernando Perez * tools/ipsvnc (svnversion): fix svnversion capture. * IPython/iplib.py (InteractiveShell.__init__): Add has_readline attribute to self, which was missing. Before, it was set by a routine which in certain cases wasn't being called, so the instance could end up missing the attribute. This caused a crash. Closes http://www.scipy.net/roundup/ipython/issue40. 2005-08-16 Fernando Perez * IPython/ultraTB.py (VerboseTB.text): don't crash if object contains non-string attribute. Closes http://www.scipy.net/roundup/ipython/issue38. 2005-08-14 Fernando Perez * tools/ipsvnc: Minor improvements, to add changeset info. 2005-08-12 Fernando Perez * IPython/iplib.py (runsource): remove self.code_to_run_src attribute. I realized this is nothing more than '\n'.join(self.buffer), and having the same data in two different places is just asking for synchronization bugs. This may impact people who have custom exception handlers, so I need to warn ipython-dev about it (F. Mantegazza may use them). 2005-07-29 Fernando Perez * IPython/genutils.py: fix 2.2 compatibility (generators) 2005-07-18 Fernando Perez * IPython/genutils.py (get_home_dir): fix to help users with invalid $HOME under win32. 2005-07-17 Fernando Perez * IPython/Prompts.py (str_safe): Make unicode-safe. Also remove some old hacks and clean up a bit other routines; code should be simpler and a bit faster. * IPython/iplib.py (interact): removed some last-resort attempts to survive broken stdout/stderr. That code was only making it harder to abstract out the i/o (necessary for gui integration), and the crashes it could prevent were extremely rare in practice (besides being fully user-induced in a pretty violent manner). * IPython/genutils.py (IOStream.__init__): Simplify the i/o stuff. Nothing major yet, but the code is simpler to read; this should make it easier to do more serious modifications in the future. * IPython/Extensions/InterpreterExec.py: Fix auto-quoting in pysh, which broke in .15 (thanks to a report by Ville). * IPython/Itpl.py (Itpl.__init__): add unicode support (it may not be quite correct, I know next to nothing about unicode). This will allow unicode strings to be used in prompts, amongst other cases. It also will prevent ipython from crashing when unicode shows up unexpectedly in many places. If ascii encoding fails, we assume utf_8. Currently the encoding is not a user-visible setting, though it could be made so if there is demand for it. * IPython/ipmaker.py (make_IPython): remove old 2.1-specific hack. * IPython/Struct.py (Struct.merge): switch keys() to iterator. * IPython/background_jobs.py: moved 2.2 compatibility to genutils. * IPython/genutils.py: Add 2.2 compatibility here, so all other code can work transparently for 2.2/2.3. 2005-07-16 Fernando Perez * IPython/ultraTB.py (ExceptionColors): Make a global variable out of the color scheme table used for coloring exception tracebacks. This allows user code to add new schemes at runtime. This is a minimally modified version of the patch at http://www.scipy.net/roundup/ipython/issue35, many thanks to pabw for the contribution. * IPython/FlexCompleter.py (Completer.attr_matches): Add a slightly modified version of the patch in http://www.scipy.net/roundup/ipython/issue34, which also allows me to remove the previous try/except solution (which was costlier). Thanks to Gaetan Lehmann for the fix. 2005-06-08 Fernando Perez * IPython/iplib.py (write/write_err): Add methods to abstract all I/O a bit more. * IPython/Shell.py (IPShellGTK.mainloop): Fix GTK deprecation warning, reported by Aric Hagberg, fix by JD Hunter. 2005-06-02 *** Released version 0.6.15 2005-06-01 Fernando Perez * IPython/iplib.py (MagicCompleter.file_matches): Fix tab-completion of filenames within open-quoted strings. Note that this requires that in ~/.ipython/ipythonrc, users change the readline delimiters configuration to read: readline_remove_delims -/~ 2005-05-31 *** Released version 0.6.14 2005-05-29 Fernando Perez * IPython/ultraTB.py (VerboseTB.text): Fix crash for tracebacks with files not on the filesystem. Reported by Eliyahu Sandler 2005-05-22 Fernando Perez * IPython/iplib.py: Fix a few crashes in the --upgrade option. After an initial report by LUK ShunTim . 2005-05-19 Fernando Perez * IPython/iplib.py (safe_execfile): close a file which could be left open (causing problems in win32, which locks open files). Thanks to a bug report by D Brown . 2005-05-18 Fernando Perez * IPython/Shell.py (MatplotlibShellBase.mplot_exec): pass all keyword arguments correctly to safe_execfile(). 2005-05-13 Fernando Perez * ipython.1: Added info about Qt to manpage, and threads warning to usage page (invoked with --help). * IPython/iplib.py (MagicCompleter.python_func_kw_matches): Added new matcher (it goes at the end of the priority list) to do tab-completion on named function arguments. Submitted by George Sakkis . See the thread at http://www.scipy.net/pipermail/ipython-dev/2005-April/000436.html for more details. * IPython/Magic.py (magic_run): Added new -e flag to ignore SystemExit exceptions in the script being run. Thanks to a report by danny shevitz , about this producing very annoying behavior when running unit tests. 2005-05-12 Fernando Perez * IPython/iplib.py (handle_auto): fixed auto-quoting and parens, which I'd broken (again) due to a changed regexp. In the process, added ';' as an escape to auto-quote the whole line without splitting its arguments. Thanks to a report by Jerry McRae . * IPython/ultraTB.py (VerboseTB.text): protect against rare but possible crashes caused by a TokenError. Reported by Ed Schofield . 2005-05-06 Fernando Perez * IPython/Shell.py (hijack_wx): Fix to work with WX v.2.6. 2005-04-29 Fernando Perez * IPython/Shell.py (IPShellQt): Thanks to Denis Rivière , Yann Cointepas and Benjamin Thyreau , we now have a -qthread option which provides support for Qt interactive usage (similar to the existing one for WX and GTK). This had been often requested. 2005-04-14 *** Released version 0.6.13 2005-04-08 Fernando Perez * IPython/Magic.py (Magic._ofind): remove docstring evaluation from _ofind, which gets called on almost every input line. Now, we only try to get docstrings if they are actually going to be used (the overhead of fetching unnecessary docstrings can be noticeable for certain objects, such as Pyro proxies). * IPython/iplib.py (MagicCompleter.python_matches): Change the API for completers. For some reason I had been passing them the state variable, which completers never actually need, and was in conflict with the rlcompleter API. Custom completers ONLY need to take the text parameter. * IPython/Extensions/InterpreterExec.py: Fix regexp so that magics work correctly in pysh. I've also moved all the logic which used to be in pysh.py here, which will prevent problems with future upgrades. However, this time I must warn users to update their pysh profile to include the line import_all IPython.Extensions.InterpreterExec because otherwise things won't work for them. They MUST also delete pysh.py and the line execfile pysh.py from their ipythonrc-pysh. * IPython/FlexCompleter.py (Completer.attr_matches): Make more robust in the face of objects whose dir() returns non-strings (which it shouldn't, but some broken libs like ITK do). Thanks to a patch by John Hunter (implemented differently, though). Also minor improvements by using .extend instead of + on lists. * pysh.py: 2005-04-06 Fernando Perez * IPython/ipmaker.py (make_IPython): Make multi_line_specials on by default, so that all users benefit from it. Those who don't want it can still turn it off. * IPython/UserConfig/ipythonrc: Add multi_line_specials to the config file, I'd forgotten about this, so users were getting it off by default. * IPython/iplib.py (ipmagic): big overhaul of the magic system for consistency. Now magics can be called in multiline statements, and python variables can be expanded in magic calls via $var. This makes the magic system behave just like aliases or !system calls. 2005-03-28 Fernando Perez * IPython/iplib.py (handle_auto): cleanup to use %s instead of expensive string additions for building command. Add support for trailing ';' when autocall is used. 2005-03-26 Fernando Perez * ipython.el: Fix http://www.scipy.net/roundup/ipython/issue31. Bugfix by A. Schmolck, the ipython.el maintainer. Also make ipython.el robust against prompts with any number of spaces (including 0) after the ':' character. * IPython/Prompts.py (Prompt2.set_p_str): Fix spurious space in continuation prompt, which misled users to think the line was already indented. Closes debian Bug#300847, reported to me by Norbert Tretkowski . 2005-03-23 Fernando Perez * IPython/Prompts.py (Prompt1.__str__): Make sure that prompts are properly aligned if they have embedded newlines. * IPython/iplib.py (runlines): Add a public method to expose IPython's code execution machinery, so that users can run strings as if they had been typed at the prompt interactively. (InteractiveShell.__init__): Added getoutput() to the __IPYTHON__ methods which can call the system shell, but with python variable expansion. The three such methods are: __IPYTHON__.system, .getoutput and .getoutputerror. These need to be documented in a 'public API' section (to be written) of the manual. 2005-03-20 Fernando Perez * IPython/iplib.py (InteractiveShell.set_custom_exc): new system for custom exception handling. This is quite powerful, and it allows for user-installable exception handlers which can trap custom exceptions at runtime and treat them separately from IPython's default mechanisms. At the request of Frédéric Mantegazza . (InteractiveShell.set_custom_completer): public API function to add new completers at runtime. 2005-03-19 Fernando Perez * IPython/OInspect.py (getdoc): Add a call to obj.getdoc(), to allow objects which provide their docstrings via non-standard mechanisms (like Pyro proxies) to still be inspected by ipython's ? system. * IPython/iplib.py (InteractiveShell.__init__): back off the _o/_e automatic capture system. I tried quite hard to make it work reliably, and simply failed. I tried many combinations with the subprocess module, but eventually nothing worked in all needed cases (not blocking stdin for the child, duplicating stdout without blocking, etc). The new %sc/%sx still do capture to these magical list/string objects which make shell use much more conveninent, so not all is lost. XXX - FIX MANUAL for the change above! (runsource): I copied code.py's runsource() into ipython to modify it a bit. Now the code object and source to be executed are stored in ipython. This makes this info accessible to third-party tools, like custom exception handlers. After a request by Frédéric Mantegazza . * IPython/UserConfig/ipythonrc: Add up/down arrow keys to history-search via readline (like C-p/C-n). I'd wanted this for a long time, but only recently found out how to do it. For users who already have their ipythonrc files made and want this, just add: readline_parse_and_bind "\e[A": history-search-backward readline_parse_and_bind "\e[B": history-search-forward 2005-03-18 Fernando Perez * IPython/Magic.py (magic_sc): %sc and %sx now use the fancy LSString and SList classes which allow transparent conversions between list mode and whitespace-separated string. (magic_r): Fix recursion problem in %r. * IPython/genutils.py (LSString): New class to be used for automatic storage of the results of all alias/system calls in _o and _e (stdout/err). These provide a .l/.list attribute which does automatic splitting on newlines. This means that for most uses, you'll never need to do capturing of output with %sc/%sx anymore, since ipython keeps this always done for you. Note that only the LAST results are stored, the _o/e variables are overwritten on each call. If you need to save their contents further, simply bind them to any other name. 2005-03-17 Fernando Perez * IPython/Prompts.py (BasePrompt.cwd_filt): a few more fixes for prompt namespace handling. 2005-03-16 Fernando Perez * IPython/Prompts.py (CachedOutput.__init__): Fix default and classic prompts to be '>>> ' (final space was missing, and it trips the emacs python mode). (BasePrompt.__str__): Added safe support for dynamic prompt strings. Now you can set your prompt string to be '$x', and the value of x will be printed from your interactive namespace. The interpolation syntax includes the full Itpl support, so ${foo()+x+bar()} is a valid prompt string now, and the function calls will be made at runtime. 2005-03-15 Fernando Perez * IPython/Magic.py (magic_history): renamed %hist to %history, to avoid name clashes in pylab. %hist still works, it just forwards the call to %history. 2005-03-02 *** Released version 0.6.12 2005-03-02 Fernando Perez * IPython/iplib.py (handle_magic): log magic calls properly as ipmagic() function calls. * IPython/Magic.py (magic_time): Improved %time to support statements and provide wall-clock as well as CPU time. 2005-02-27 Fernando Perez * IPython/hooks.py: New hooks module, to expose user-modifiable IPython functionality in a clean manner. For now only the editor hook is actually written, and other thigns which I intend to turn into proper hooks aren't yet there. The display and prefilter stuff, for example, should be hooks. But at least now the framework is in place, and the rest can be moved here with more time later. IPython had had a .hooks variable for a long time for this purpose, but I'd never actually used it for anything. 2005-02-26 Fernando Perez * IPython/ipmaker.py (make_IPython): make the default ipython directory be called _ipython under win32, to follow more the naming peculiarities of that platform (where buggy software like Visual Sourcesafe breaks with .named directories). Reported by Ville Vainio. 2005-02-23 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): removed a few auto_aliases for win32 which were causing problems. Users can define the ones they personally like. 2005-02-21 Fernando Perez * IPython/Magic.py (magic_time): new magic to time execution of expressions. After a request by Charles Moad . 2005-02-19 Fernando Perez * IPython/ConfigLoader.py (ConfigLoader.load): Allow empty strings into keys (for prompts, for example). * IPython/Prompts.py (BasePrompt.set_p_str): Fix to allow empty prompts in case users want them. This introduces a small behavior change: ipython does not automatically add a space to all prompts anymore. To get the old prompts with a space, users should add it manually to their ipythonrc file, so for example prompt_in1 should now read 'In [\#]: ' instead of 'In [\#]:'. (BasePrompt.__init__): New option prompts_pad_left (only in rc file) to control left-padding of secondary prompts. * IPython/Magic.py (Magic.profile_missing_notice): Don't crash if the profiler can't be imported. Fix for Debian, which removed profile.py because of License issues. I applied a slightly modified version of the original Debian patch at http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=294500. 2005-02-17 Fernando Perez * IPython/genutils.py (native_line_ends): Fix bug which would cause improper line-ends under win32 b/c I was not opening files in binary mode. Bug report and fix thanks to Ville. * IPython/iplib.py (handle_auto): Fix bug which I introduced when trying to catch spurious foo[1] autocalls. My fix actually broke ',/' autoquote/call with explicit escape (bad regexp). 2005-02-15 *** Released version 0.6.11 2005-02-14 Fernando Perez * IPython/background_jobs.py: New background job management subsystem. This is implemented via a new set of classes, and IPython now provides a builtin 'jobs' object for background job execution. A convenience %bg magic serves as a lightweight frontend for starting the more common type of calls. This was inspired by discussions with B. Granger and the BackgroundCommand class described in the book Python Scripting for Computational Science, by H. P. Langtangen: http://folk.uio.no/hpl/scripting (although ultimately no code from this text was used, as IPython's system is a separate implementation). * IPython/iplib.py (MagicCompleter.python_matches): add new option to control the completion of single/double underscore names separately. As documented in the example ipytonrc file, the readline_omit__names variable can now be set to 2, to omit even single underscore names. Thanks to a patch by Brian Wong . (InteractiveShell.__init__): Fix bug which would cause foo[1] to be autocalled as foo([1]) if foo were callable. A problem for things which are both callable and implement __getitem__. (init_readline): Fix autoindentation for win32. Thanks to a patch by Vivian De Smedt . 2005-02-12 Fernando Perez * IPython/ipmaker.py (make_IPython): Disabled the stout traps which I had written long ago to sort out user error messages which may occur during startup. This seemed like a good idea initially, but it has proven a disaster in retrospect. I don't want to change much code for now, so my fix is to set the internal 'debug' flag to true everywhere, whose only job was precisely to control this subsystem. This closes issue 28 (as well as avoiding all sorts of strange hangups which occur from time to time). 2005-02-07 Fernando Perez * IPython/Magic.py (magic_edit): Fix 'ed -p' not working when the previous call produced a syntax error. * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting classes without constructor. 2005-02-06 Fernando Perez * IPython/iplib.py (MagicCompleter.complete): Extend the list of completions with the results of each matcher, so we return results to the user from all namespaces. This breaks with ipython tradition, but I think it's a nicer behavior. Now you get all possible completions listed, from all possible namespaces (python, filesystem, magics...) After a request by John Hunter . 2005-02-05 Fernando Perez * IPython/Magic.py (magic_prun): Fix bug where prun would fail if the call had quote characters in it (the quotes were stripped). 2005-01-31 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): reduce reliance on Itpl.itpl() to make the code more robust against psyco optimizations. * IPython/Itpl.py (Itpl.__str__): Use a _getframe() call instead of causing an exception. Quicker, cleaner. 2005-01-28 Fernando Perez * scripts/ipython_win_post_install.py (install): hardcode sys.prefix+'python.exe' as the executable path. It turns out that during the post-installation run, sys.executable resolves to the name of the binary installer! I should report this as a distutils bug, I think. I updated the .10 release with this tiny fix, to avoid annoying the lists further. 2005-01-27 *** Released version 0.6.10 2005-01-27 Fernando Perez * IPython/numutils.py (norm): Added 'inf' as optional name for L-infinity norm, included references to mathworld.com for vector norm definitions. (amin/amax): added amin/amax for array min/max. Similar to what pylab ships with after the recent reorganization of names. (spike/spike_odd): removed deprecated spike/spike_odd functions. * ipython.el: committed Alex's recent fixes and improvements. Tested with python-mode from CVS, and it looks excellent. Since python-mode hasn't released anything in a while, I'm temporarily putting a copy of today's CVS (v 4.70) of python-mode in: http://ipython.scipy.org/tmp/python-mode.el * scripts/ipython_win_post_install.py (install): Win32 fix to use sys.executable for the executable name, instead of assuming it's called 'python.exe' (the post-installer would have produced broken setups on systems with a differently named python binary). * IPython/PyColorize.py (Parser.__call__): change explicit '\n' references to os.linesep, to make the code more platform-independent. This is also part of the win32 coloring fixes. * IPython/genutils.py (page_dumb): Remove attempts to chop long lines, which actually cause coloring bugs because the length of the line is very difficult to correctly compute with embedded escapes. This was the source of all the coloring problems under Win32. I think that _finally_, Win32 users have a properly working ipython in all respects. This would never have happened if not for Gary Bishop and Viktor Ransmayr's great help and work. 2005-01-26 *** Released version 0.6.9 2005-01-25 Fernando Perez * setup.py: finally, we have a true Windows installer, thanks to the excellent work of Viktor Ransmayr . The docs have been updated for Windows users. The setup routine is quite a bit cleaner thanks to this, and the post-install script uses the proper functions to allow a clean de-installation using the standard Windows Control Panel. * IPython/genutils.py (get_home_dir): changed to use the $HOME environment variable under all OSes (including win32) if available. This will give consistency to win32 users who have set this variable for any reason. If os.environ['HOME'] fails, the previous policy of using HOMEDRIVE\HOMEPATH kicks in. 2005-01-24 Fernando Perez * IPython/numutils.py (empty_like): add empty_like(), similar to zeros_like() but taking advantage of the new empty() Numeric routine. 2005-01-23 *** Released version 0.6.8 2005-01-22 Fernando Perez * IPython/Shell.py (MatplotlibShellBase.mplot_exec): I removed the automatic show() calls. After discussing things with JDH, it turns out there are too many corner cases where this can go wrong. It's best not to try to be 'too smart', and simply have ipython reproduce as much as possible the default behavior of a normal python shell. * IPython/iplib.py (InteractiveShell.__init__): Modified the line-splitting regexp and _prefilter() to avoid calling getattr() on assignments. This closes http://www.scipy.net/roundup/ipython/issue24. Note that Python's readline uses getattr(), so a simple keypress is still enough to trigger getattr() calls on an object. 2005-01-21 Fernando Perez * IPython/Shell.py (MatplotlibShellBase.magic_run): Fix the %run docstring under pylab so it doesn't mask the original. 2005-01-21 *** Released version 0.6.7 2005-01-21 Fernando Perez * IPython/Shell.py (MTInteractiveShell.runcode): Trap a crash with signal handling for win32 users in multithreaded mode. 2005-01-17 Fernando Perez * IPython/OInspect.py (Inspector.pinfo): Fix crash when inspecting instances with no __init__. After a crash report by Norbert Nemec . 2005-01-14 Fernando Perez * IPython/ultraTB.py (VerboseTB.text): Fix bug in reporting of names for verbose exceptions, when multiple dotted names and the 'parent' object were present on the same line. 2005-01-11 Fernando Perez * IPython/genutils.py (flag_calls): new utility to trap and flag calls in functions. I need it to clean up matplotlib support. Also removed some deprecated code in genutils. * IPython/Shell.py (MatplotlibShellBase.mplot_exec): small fix so that matplotlib scripts called with %run, which don't call show() themselves, still have their plotting windows open. 2005-01-05 Fernando Perez * IPython/Shell.py (IPShellGTK.__init__): Patch by Andrew Straw , to fix gtk deprecation warnings. 2004-12-19 Fernando Perez * IPython/Shell.py (MTInteractiveShell.runcode): Get rid of parent_runcode, which was an eyesore. The same result can be obtained with Python's regular superclass mechanisms. 2004-12-17 Fernando Perez * IPython/Magic.py (Magic.magic_sc): Fix quote stripping problem reported by Prabhu. (Magic.magic_sx): direct all errors to Term.cerr (defaults to sys.stderr) instead of explicitly calling sys.stderr. This helps maintain our I/O abstractions clean, for future GUI embeddings. * IPython/genutils.py (info): added new utility for sys.stderr unified info message handling (thin wrapper around warn()). * IPython/ultraTB.py (VerboseTB.text): Fix misreported global composite (dotted) names on verbose exceptions. (VerboseTB.nullrepr): harden against another kind of errors which Python's inspect module can trigger, and which were crashing IPython. Thanks to a report by Marco Lombardi . 2004-12-13 *** Released version 0.6.6 2004-12-12 Fernando Perez * IPython/Shell.py (IPShellGTK.mainloop): catch RuntimeErrors generated by pygtk upon initialization if it was built without threads (for matplotlib users). After a crash reported by Leguijt, Jaap J SIEP-EPT-RES . * IPython/ipmaker.py (make_IPython): fix small bug in the import_some parameter for multiple imports. * IPython/iplib.py (ipmagic): simplified the interface of ipmagic() to take a single string argument, just as it would be typed at the IPython cmd line. (ipalias): Added new ipalias() with an interface identical to ipmagic(). This completes exposing a pure python interface to the alias and magic system, which can be used in loops or more complex code where IPython's automatic line mangling is not active. * IPython/genutils.py (timing): changed interface of timing to simply run code once, which is the most common case. timings() remains unchanged, for the cases where you want multiple runs. * IPython/Shell.py (MatplotlibShellBase._matplotlib_config): Fix a bug where Python2.2 crashes with exec'ing code which does not end in a single newline. Python 2.3 is OK, so I hadn't noticed this before. 2004-12-10 Fernando Perez * IPython/Magic.py (Magic.magic_prun): changed name of option from -t to -T, to accomodate the new -t flag in %run (the %run and %prun options are kind of intermixed, and it's not easy to change this with the limitations of python's getopt). * IPython/Magic.py (Magic.magic_run): Added new -t option to time the execution of scripts. It's not as fine-tuned as timeit.py, but it works from inside ipython (and under 2.2, which lacks timeit.py). Optionally a number of runs > 1 can be given for timing very short-running code. * IPython/genutils.py (uniq_stable): new routine which returns a list of unique elements in any iterable, but in stable order of appearance. I needed this for the ultraTB fixes, and it's a handy utility. * IPython/ultraTB.py (VerboseTB.text): Fix proper reporting of dotted names in Verbose exceptions. This had been broken since the very start, now x.y will properly be printed in a Verbose traceback, instead of x being shown and y appearing always as an 'undefined global'. Getting this to work was a bit tricky, because by default python tokenizers are stateless. Saved by python's ability to easily add a bit of state to an arbitrary function (without needing to build a full-blown callable object). Also big cleanup of this code, which had horrendous runtime lookups of zillions of attributes for colorization. Moved all this code into a few templates, which make it cleaner and quicker. Printout quality was also improved for Verbose exceptions: one variable per line, and memory addresses are printed (this can be quite handy in nasty debugging situations, which is what Verbose is for). * IPython/ipmaker.py (make_IPython): Do NOT execute files named in the command line as scripts to be loaded by embedded instances. Doing so has the potential for an infinite recursion if there are exceptions thrown in the process. This fixes a strange crash reported by Philippe MULLER . 2004-12-09 Fernando Perez * IPython/Shell.py (MatplotlibShellBase.use): Change pylab support to reflect new names in matplotlib, which now expose the matlab-compatible interface via a pylab module instead of the 'matlab' name. The new code is backwards compatible, so users of all matplotlib versions are OK. Patch by J. Hunter. * IPython/OInspect.py (Inspector.pinfo): Add to object? printing of __init__ docstrings for instances (class docstrings are already automatically printed). Instances with customized docstrings (indep. of the class) are also recognized and all 3 separate docstrings are printed (instance, class, constructor). After some comments/suggestions by J. Hunter. 2004-12-05 Fernando Perez * IPython/iplib.py (MagicCompleter.complete): Remove annoying warnings when tab-completion fails and triggers an exception. 2004-12-03 Fernando Perez * IPython/Magic.py (magic_prun): Fix bug where an exception would be triggered when using 'run -p'. An incorrect option flag was being set ('d' instead of 'D'). (manpage): fix missing escaped \- sign. 2004-11-30 *** Released version 0.6.5 2004-11-30 Fernando Perez * IPython/Magic.py (Magic.magic_run): Fix bug in breakpoint setting with -d option. * setup.py (docfiles): Fix problem where the doc glob I was using was COMPLETELY BROKEN. It was giving the right files by pure accident, but failed once I tried to include ipython.el. Note: glob() does NOT allow you to do exclusion on multiple endings! 2004-11-29 Fernando Perez * IPython/usage.py (__doc__): cleaned up usage docstring, by using the manpage as the source. Better formatting & consistency. * IPython/Magic.py (magic_run): Added new -d option, to run scripts under the control of the python pdb debugger. Note that this required changing the %prun option -d to -D, to avoid a clash (since %run must pass options to %prun, and getopt is too dumb to handle options with string values with embedded spaces). Thanks to a suggestion by Matthew Arnison . (magic_who_ls): added type matching to %who and %whos, so that one can filter their output to only include variables of certain types. Another suggestion by Matthew. (magic_whos): Added memory summaries in kb and Mb for arrays. (magic_who): Improve formatting (break lines every 9 vars). 2004-11-28 Fernando Perez * IPython/Logger.py (Logger.log): Fix bug in syncing the input cache when empty lines were present. 2004-11-24 Fernando Perez * IPython/usage.py (__doc__): document the re-activated threading options for WX and GTK. 2004-11-23 Fernando Perez * IPython/Shell.py (start): Added Prabhu's big patch to reactivate the -wthread and -gthread options, along with a new -tk one to try and coordinate Tk threading with wx/gtk. The tk support is very platform dependent, since it seems to require Tcl and Tk to be built with threads (Fedora1/2 appears NOT to have it, but in Prabhu's Debian boxes it works OK). But even with some Tk limitations, this is a great improvement. * IPython/Prompts.py (prompt_specials_color): Added \t for time info in user prompts. Patch by Prabhu. 2004-11-18 Fernando Perez * IPython/genutils.py (ask_yes_no): Add check for a max of 20 EOFErrors and bail, to avoid infinite loops if a non-terminating file is fed into ipython. Patch submitted in issue 19 by user, many thanks. * IPython/iplib.py (InteractiveShell.handle_auto): do NOT trigger autoquote/parens in continuation prompts, which can cause lots of problems. Closes roundup issue 20. 2004-11-17 Fernando Perez * debian/control (Build-Depends-Indep): Fix dpatch dependency, reported as debian bug #280505. I'm not sure my local changelog entry has the proper debian format (Jack?). 2004-11-08 *** Released version 0.6.4 2004-11-08 Fernando Perez * IPython/iplib.py (init_readline): Fix exit message for Windows when readline is active. Thanks to a report by Eric Jones . 2004-11-07 Fernando Perez * IPython/genutils.py (page): Add a trap for OSError exceptions, sometimes seen by win2k/cygwin users. 2004-11-06 Fernando Perez * IPython/iplib.py (interact): Change the handling of %Exit from trying to propagate a SystemExit to an internal ipython flag. This is less elegant than using Python's exception mechanism, but I can't get that to work reliably with threads, so under -pylab %Exit was hanging IPython. Cross-thread exception handling is really a bitch. Thaks to a bug report by Stephen Walton . 2004-11-04 Fernando Perez * IPython/iplib.py (raw_input_original): store a pointer to the true raw_input to harden against code which can modify it (wx.py.PyShell does this and would otherwise crash ipython). Thanks to a bug report by Jim Flowers . * IPython/Shell.py (MTInteractiveShell.runsource): Cleaner fix for Ctrl-C problem, which does not mess up the input line. 2004-11-03 Fernando Perez * IPython/Release.py: Changed licensing to BSD, in all files. (name): lowercase name for tarball/RPM release. * IPython/OInspect.py (getdoc): wrap inspect.getdoc() safely for use throughout ipython. * IPython/Magic.py (Magic._ofind): Switch to using the new OInspect.getdoc() function. * IPython/Shell.py (sigint_handler): Hack to ignore the execution of the line currently being canceled via Ctrl-C. It's extremely ugly, but I don't know how to do it better (the problem is one of handling cross-thread exceptions). 2004-10-28 Fernando Perez * IPython/Shell.py (signal_handler): add signal handlers to trap SIGINT and SIGSEGV in threaded code properly. Thanks to a bug report by Francesc Alted. 2004-10-21 Fernando Perez * IPython/Extensions/InterpreterExec.py (prefilter_shell): Fix @ to % for pysh syntax extensions. 2004-10-09 Fernando Perez * IPython/Magic.py (Magic.magic_whos): modify output of Numeric arrays to print a more useful summary, without calling str(arr). This avoids the problem of extremely lengthy computations which occur if arr is large, and appear to the user as a system lockup with 100% cpu activity. After a suggestion by Kristian Sandberg . (Magic.__init__): fix bug in global magic escapes not being correctly set. 2004-10-08 Fernando Perez * IPython/Magic.py (__license__): change to absolute imports of ipython's own internal packages, to start adapting to the absolute import requirement of PEP-328. * IPython/genutils.py (__author__): Fix coding to utf-8 on all files, and standardize author/license marks through the Release module instead of having per/file stuff (except for files with particular licenses, like the MIT/PSF-licensed codes). * IPython/Debugger.py: remove dead code for python 2.1 2004-10-04 Fernando Perez * IPython/iplib.py (ipmagic): New function for accessing magics via a normal python function call. * IPython/Magic.py (Magic.magic_magic): Change the magic escape from '@' to '%', to accomodate the new @decorator syntax of python 2.4. 2004-09-29 Fernando Perez * IPython/Shell.py (MatplotlibShellBase.use): Added a wrapper to matplotlib.use to prevent running scripts which try to switch interactive backends from within ipython. This will just crash the python interpreter, so we can't allow it (but a detailed error is given to the user). 2004-09-28 Fernando Perez * IPython/Shell.py (MatplotlibShellBase.mplot_exec): matplotlib-related fixes so that using @run with non-matplotlib scripts doesn't pop up spurious plot windows. This requires matplotlib >= 0.63, where I had to make some changes as well. * IPython/ipmaker.py (make_IPython): update version requirement to python 2.2. * IPython/iplib.py (InteractiveShell.mainloop): Add an optional banner arg for embedded customization. * IPython/Magic.py (Magic.__init__): big cleanup to remove all explicit uses of __IP as the IPython's instance name. Now things are properly handled via the shell.name value. The actual code is a bit ugly b/c I'm doing it via a global in Magic.py, but this is much better than before. I'll clean things completely when the magic stuff gets a real overhaul. * ipython.1: small fixes, sent in by Jack Moffit. He also sent in minor changes to debian dir. * IPython/iplib.py (InteractiveShell.__init__): Fix adding a pointer to the shell itself in the interactive namespace even when a user-supplied dict is provided. This is needed for embedding purposes (found by tests with Michel Sanner). 2004-09-27 Fernando Perez * IPython/UserConfig/ipythonrc: remove []{} from readline_remove_delims, so that things like [modname. do proper completion. This disables [].TAB, but that's a less common case than module names in list comprehensions, for example. Thanks to a report by Andrea Riciputi. 2004-09-09 Fernando Perez * IPython/Shell.py (IPShellGTK.mainloop): reorder to avoid blocking problems in win32 and osx. Fix by John. 2004-09-08 Fernando Perez * IPython/Shell.py (IPShellWX.OnInit): Fix output redirection bug for Win32 and OSX. Fix by John Hunter. 2004-08-30 *** Released version 0.6.3 2004-08-30 Fernando Perez * setup.py (isfile): Add manpages to list of dependent files to be updated. 2004-08-27 Fernando Perez * IPython/Shell.py (start): I've disabled -wthread and -gthread for now. They don't really work with standalone WX/GTK code (though matplotlib IS working fine with both of those backends). This will neeed much more testing. I disabled most things with comments, so turning it back on later should be pretty easy. * IPython/iplib.py (InteractiveShell.__init__): Fix accidental autocalling of expressions like r'foo', by modifying the line split regexp. Closes http://www.scipy.net/roundup/ipython/issue18, reported by Nicholas Riley . (InteractiveShell.mainloop): honor --nobanner with banner extensions. * IPython/Shell.py: Significant refactoring of all classes, so that we can really support ALL matplotlib backends and threading models (John spotted a bug with Tk which required this). Now we should support single-threaded, WX-threads and GTK-threads, both for generic code and for matplotlib. * IPython/ipmaker.py (__call__): Changed -mpthread option to -pylab, to simplify things for users. Will also remove the pylab profile, since now all of matplotlib configuration is directly handled here. This also reduces startup time. * IPython/Shell.py (IPShellGTK.run): Fixed bug where mainloop() of shell wasn't being correctly called. Also in IPShellWX. * IPython/iplib.py (InteractiveShell.__init__): Added option to fine-tune banner. * IPython/numutils.py (spike): Deprecate these spike functions, delete (long deprecated) gnuplot_exec handler. 2004-08-26 Fernando Perez * ipython.1: Update for threading options, plus some others which were missing. * IPython/ipmaker.py (__call__): Added -wthread option for wxpython thread handling. Make sure threading options are only valid at the command line. * scripts/ipython: moved shell selection into a factory function in Shell.py, to keep the starter script to a minimum. 2004-08-25 Fernando Perez * IPython/Shell.py (IPShellWX.wxexit): fixes to WX threading, by John. Along with some recent changes he made to matplotlib, the next versions of both systems should work very well together. 2004-08-24 Fernando Perez * IPython/Magic.py (Magic.magic_prun): cleanup some dead code. I tried to switch the profiling to using hotshot, but I'm getting strange errors from prof.runctx() there. I may be misreading the docs, but it looks weird. For now the profiling code will continue to use the standard profiler. 2004-08-23 Fernando Perez * IPython/Shell.py (IPShellWX.__init__): Improvements to the WX threaded shell, by John Hunter. It's not quite ready yet, but close. 2004-08-22 Fernando Perez * IPython/iplib.py (InteractiveShell.interact): tab cleanups, also in Magic and ultraTB. * ipython.1: document threading options in manpage. * scripts/ipython: Changed name of -thread option to -gthread, since this is GTK specific. I want to leave the door open for a -wthread option for WX, which will most likely be necessary. This change affects usage and ipmaker as well. * IPython/Shell.py (matplotlib_shell): Add a factory function to handle the matplotlib shell issues. Code by John Hunter . (IPShellMatplotlibWX.__init__): Rudimentary WX support. It's broken (and disabled for end users) for now, but it puts the infrastructure in place. 2004-08-21 Fernando Perez * ipythonrc-pylab: Add matplotlib support. * matplotlib_config.py: new files for matplotlib support, part of the pylab profile. * IPython/usage.py (__doc__): documented the threading options. 2004-08-20 Fernando Perez * ipython: Modified the main calling routine to handle the -thread and -mpthread options. This needs to be done as a top-level hack, because it determines which class to instantiate for IPython itself. * IPython/Shell.py (MTInteractiveShell.__init__): New set of classes to support multithreaded GTK operation without blocking, and matplotlib with all backends. This is a lot of still very experimental code, and threads are tricky. So it may still have a few rough edges... This code owes a lot to http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65109, by Brian # McErlean and John Finlay, to Antoon Pardon for fixes, and to John Hunter for all the matplotlib work. * IPython/ipmaker.py (__call__): Added -thread and -mpthread options for gtk thread and matplotlib support. 2004-08-16 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): don't trigger autocall for things like p*q,p/q,p+q,p-q, when p is callable. Bug reported by Stephen Walton . 2004-08-11 Fernando Perez * setup.py (isfile): Fix build so documentation gets updated for rpms (it was only done for .tgz builds). 2004-08-10 Fernando Perez * genutils.py (Term): Fix misspell of stdin stream (sin->cin). * iplib.py : Silence syntax error exceptions in tab-completion. 2004-08-05 Fernando Perez * IPython/Prompts.py (Prompt2.set_colors): Fix incorrectly set 'color off' mark for continuation prompts. This was causing long continuation lines to mis-wrap. 2004-08-01 Fernando Perez * IPython/ipmaker.py (make_IPython): Allow the shell class used for building ipython to be a parameter. All this is necessary right now to have a multithreaded version, but this insane non-design will be cleaned up soon. For now, it's a hack that works. * IPython/Shell.py (IPShell.__init__): Stop using mutable default args in various places. No bugs so far, but it's a dangerous practice. 2004-07-31 Fernando Perez * IPython/iplib.py (complete): ignore SyntaxError exceptions to fix completion of files with dots in their names under most profiles (pysh was OK because the completion order is different). 2004-07-27 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): build dict of keywords manually, b/c the one in keyword.py was removed in python 2.4. Patch by Anakim Border . This is NOT a bug under python 2.3 and earlier. 2004-07-26 Fernando Perez * IPython/ultraTB.py (VerboseTB.text): Add another linecache.checkcache() call to try to prevent inspect.py from crashing under python 2.3. I think this fixes http://www.scipy.net/roundup/ipython/issue17. 2004-07-26 *** Released version 0.6.2 2004-07-26 Fernando Perez * IPython/Magic.py (Magic.magic_cd): Fix bug where 'cd -N' would fail for any number. (Magic.magic_bookmark): Fix bug where 'bookmark -l' would fail for empty bookmarks. 2004-07-26 *** Released version 0.6.1 2004-07-26 Fernando Perez * ipython_win_post_install.py (run): Added pysh shortcut for Windows. * IPython/iplib.py (protect_filename): Applied Ville's patch for escaping '()[]{}' in filenames. * IPython/Magic.py (shlex_split): Fix handling of '*' and '?' for Python 2.2 users who lack a proper shlex.split. 2004-07-19 Fernando Perez * IPython/iplib.py (InteractiveShell.init_readline): Add support for reading readline's init file. I follow the normal chain: $INPUTRC is honored, otherwise ~/.inputrc is used. Thanks to a report by Mike Heeter. This closes http://www.scipy.net/roundup/ipython/issue16. 2004-07-18 Fernando Perez * IPython/iplib.py (__init__): Add better handling of '\' under Win32 for filenames. After a patch by Ville. 2004-07-17 Fernando Perez * IPython/iplib.py (InteractiveShell._prefilter): fix bug where autocalling would be triggered for 'foo is bar' if foo is callable. I also cleaned up the autocall detection code to use a regexp, which is faster. Bug reported by Alexander Schmolck. * IPython/Magic.py (Magic.magic_pinfo): Fix bug where strings with '?' in them would confuse the help system. Reported by Alex Schmolck. 2004-07-16 Fernando Perez * IPython/GnuplotInteractive.py (__all__): added plot2. * IPython/Gnuplot2.py (Gnuplot.plot2): added new function for plotting dictionaries, lists or tuples of 1d arrays. * IPython/Magic.py (Magic.magic_hist): small clenaups and optimizations. * IPython/iplib.py:Remove old Changelog info for cleanup. This is the information which was there from Janko's original IPP code: 03.05.99 20:53 porto.ifm.uni-kiel.de --Started changelog. --make clear do what it say it does --added pretty output of lines from inputcache --Made Logger a mixin class, simplifies handling of switches --Added own completer class. .string expands to last history line which starts with string. The new expansion is also present with Ctrl-r from the readline library. But this shows, who this can be done for other cases. --Added convention that all shell functions should accept a parameter_string This opens the door for different behaviour for each function. @cd is a good example of this. 04.05.99 12:12 porto.ifm.uni-kiel.de --added logfile rotation --added new mainloop method which freezes first the namespace 07.05.99 21:24 porto.ifm.uni-kiel.de --added the docreader classes. Now there is a help system. -This is only a first try. Currently it's not easy to put new stuff in the indices. But this is the way to go. Info would be better, but HTML is every where and not everybody has an info system installed and it's not so easy to change html-docs to info. --added global logfile option --there is now a hook for object inspection method pinfo needs to be provided for this. Can be reached by two '??'. 08.05.99 20:51 porto.ifm.uni-kiel.de --added a README --bug in rc file. Something has changed so functions in the rc file need to reference the shell and not self. Not clear if it's a bug or feature. --changed rc file for new behavior 2004-07-15 Fernando Perez * IPython/Logger.py (Logger.log): fixed recent bug where the input cache was falling out of sync in bizarre manners when multi-line input was present. Minor optimizations and cleanup. (Logger): Remove old Changelog info for cleanup. This is the information which was there from Janko's original code: Changes to Logger: - made the default log filename a parameter - put a check for lines beginning with !@? in log(). Needed (even if the handlers properly log their lines) for mid-session logging activation to work properly. Without this, lines logged in mid session, which get read from the cache, would end up 'bare' (with !@? in the open) in the log. Now they are caught and prepended with a #. * IPython/iplib.py (InteractiveShell.init_readline): added check in case MagicCompleter fails to be defined, so we don't crash. 2004-07-13 Fernando Perez * IPython/Gnuplot2.py (Gnuplot.hardcopy): add automatic generation of EPS if the requested filename ends in '.eps'. 2004-07-04 Fernando Perez * IPython/iplib.py (InteractiveShell.handle_shell_escape): Fix escaping of quotes when calling the shell. 2004-07-02 Fernando Perez * IPython/Prompts.py (CachedOutput.update): Fix problem with gettext not working because we were clobbering '_'. Fixes http://www.scipy.net/roundup/ipython/issue6. 2004-07-01 Fernando Perez * IPython/Magic.py (Magic.magic_cd): integrated bookmark handling into @cd. Patch by Ville. * IPython/iplib.py (InteractiveShell.post_config_initialization): new function to store things after ipmaker runs. Patch by Ville. Eventually this will go away once ipmaker is removed and the class gets cleaned up, but for now it's ok. Key functionality here is the addition of the persistent storage mechanism, a dict for keeping data across sessions (for now just bookmarks, but more can be implemented later). * IPython/Magic.py (Magic.magic_bookmark): New bookmark system, persistent across sections. Patch by Ville, I modified it soemwhat to allow bookmarking arbitrary dirs other than CWD. Also added a '-l' option to list all bookmarks. * IPython/iplib.py (InteractiveShell.atexit_operations): new center for cleanup. Registered with atexit.register(). I moved here the old exit_cleanup(). After a patch by Ville. * IPython/Magic.py (get_py_filename): added '~' to the accepted characters in the hacked shlex_split for python 2.2. * IPython/iplib.py (file_matches): more fixes to filenames with whitespace in them. It's not perfect, but limitations in python's readline make it impossible to go further. 2004-06-29 Fernando Perez * IPython/iplib.py (file_matches): escape whitespace correctly in filename completions. Bug reported by Ville. 2004-06-28 Fernando Perez * IPython/ipmaker.py (__call__): Added per-profile histories. Now the history file will be called 'history-PROFNAME' (or just 'history' if no profile is loaded). I was getting annoyed at getting my Numerical work history clobbered by pysh sessions. * IPython/iplib.py (InteractiveShell.__init__): Internal getoutputerror() function so that we can honor the system_verbose flag for _all_ system calls. I also added escaping of # characters here to avoid confusing Itpl. * IPython/Magic.py (shlex_split): removed call to shell in parse_options and replaced it with shlex.split(). The annoying part was that in Python 2.2, shlex.split() doesn't exist, so I had to backport it from 2.3, with several frail hacks (the shlex module is rather limited in 2.2). Thanks to a suggestion by Ville Vainio . For Python 2.3 there should be no problem. (Magic.magic_system_verbose): new toggle to print the actual system calls made by ipython. Mainly for debugging purposes. * IPython/GnuplotRuntime.py (gnu_out): fix bug for cygwin, which doesn't support persistence. Reported (and fix suggested) by Travis Caldwell . 2004-06-26 Fernando Perez * IPython/Logger.py (Logger.log): fix to handle correctly empty continue prompts. * IPython/Extensions/InterpreterExec.py (pysh): moved the pysh() function (basically a big docstring) and a few more things here to speedup startup. pysh.py is now very lightweight. We want because it gets execfile'd, while InterpreterExec gets imported, so byte-compilation saves time. 2004-06-25 Fernando Perez * IPython/Magic.py (Magic.magic_cd): Fixed to restore usage of 'cd -NUM', which was recently broken. * IPython/iplib.py (InteractiveShell.handle_shell_escape): allow ! in multi-line input (but not !!, which doesn't make sense there). * IPython/UserConfig/ipythonrc: made autoindent on by default. It's just too useful, and people can turn it off in the less common cases where it's a problem. 2004-06-24 Fernando Perez * IPython/iplib.py (InteractiveShell._prefilter): big change - special syntaxes (like alias calling) is now allied in multi-line input. This is still _very_ experimental, but it's necessary for efficient shell usage combining python looping syntax with system calls. For now it's restricted to aliases, I don't think it really even makes sense to have this for magics. 2004-06-23 Fernando Perez * IPython/Extensions/InterpreterExec.py (prefilter_shell): Added $var=cmd <=> @sc var=cmd and $$var=cmd <=> @sc -l var=cmd. * IPython/Magic.py (Magic.magic_rehashx): modified to handle extensions under Windows (after code sent by Gary Bishop). The extensions considered 'executable' are stored in IPython's rc structure as win_exec_ext. * IPython/genutils.py (shell): new function, like system() but without return value. Very useful for interactive shell work. * IPython/Magic.py (Magic.magic_unalias): New @unalias function to delete aliases. * IPython/iplib.py (InteractiveShell.alias_table_update): make sure that the alias table doesn't contain python keywords. 2004-06-21 Fernando Perez * IPython/Magic.py (Magic.magic_rehash): Fix crash when non-existent items are found in $PATH. Reported by Thorsten. 2004-06-20 Fernando Perez * IPython/iplib.py (complete): modified the completer so that the order of priorities can be easily changed at runtime. * IPython/Extensions/InterpreterExec.py (prefilter_shell): Modified to auto-execute all lines beginning with '~', '/' or '.'. * IPython/Magic.py (Magic.magic_sx): modified @sc and @sx to expand Python variables prepended with $ in all system calls. The same was done to InteractiveShell.handle_shell_escape. Now all system access mechanisms (!, !!, @sc, @sx and aliases) allow the expansion of python variables and expressions according to the syntax of PEP-215 - http://www.python.org/peps/pep-0215.html. Though PEP-215 has been rejected, a similar (but simpler) one seems like it will go into Python 2.4, PEP-292 - http://www.python.org/peps/pep-0292.html. I'll keep the full syntax of PEP-215, since IPython has since the start used Ka-Ping Yee's reference implementation discussed there (Itpl), and I actually like the powerful semantics it offers. In order to access normal shell variables, the $ has to be escaped via an extra $. For example: In [7]: PATH='a python variable' In [8]: !echo $PATH a python variable In [9]: !echo $$PATH /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:... (Magic.parse_options): escape $ so the shell doesn't evaluate things prematurely. * IPython/iplib.py (InteractiveShell.call_alias): added the ability for aliases to expand python variables via $. * IPython/Magic.py (Magic.magic_rehash): based on the new alias system, now there's a @rehash/@rehashx pair of magics. These work like the csh rehash command, and can be invoked at any time. They build a table of aliases to everything in the user's $PATH (@rehash uses everything, @rehashx is slower but only adds executable files). With this, the pysh.py-based shell profile can now simply call rehash upon startup, and full access to all programs in the user's path is obtained. * IPython/iplib.py (InteractiveShell.call_alias): The new alias functionality is now fully in place. I removed the old dynamic code generation based approach, in favor of a much lighter one based on a simple dict. The advantage is that this allows me to now have thousands of aliases with negligible cost (unthinkable with the old system). 2004-06-19 Fernando Perez * IPython/iplib.py (__init__): extended MagicCompleter class to also complete (last in priority) on user aliases. * IPython/Itpl.py (Itpl.__str__): fixed order of globals/locals in call to eval. (ItplNS.__init__): Added a new class which functions like Itpl, but allows configuring the namespace for the evaluation to occur in. 2004-06-18 Fernando Perez * IPython/iplib.py (InteractiveShell.runcode): modify to print a better message when 'exit' or 'quit' are typed (a common newbie confusion). * IPython/Magic.py (Magic.magic_colors): Added the runtime color check for Windows users. * IPython/iplib.py (InteractiveShell.user_setup): removed disabling of colors for Windows. I'll test at runtime and issue a warning if Gary's readline isn't found, as to nudge users to download it. 2004-06-16 Fernando Perez * IPython/genutils.py (Stream.__init__): changed to print errors to sys.stderr. I had a circular dependency here. Now it's possible to run ipython as IDLE's shell (consider this pre-alpha, since true stdout things end up in the starting terminal instead of IDLE's out). * IPython/Prompts.py (Prompt2.set_colors): prevent crashes for users who haven't # updated their prompt_in2 definitions. Remove eventually. (multiple_replace): added credit to original ASPN recipe. 2004-06-15 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): add 'cp' to the list of auto-defined aliases. 2004-06-13 Fernando Perez * setup.py (scriptfiles): Don't trigger win_post_install unless an install was really requested (so setup.py can be used for other things under Windows). 2004-06-10 Fernando Perez * IPython/Logger.py (Logger.create_log): Manually remove any old backup, since os.remove may fail under Windows. Fixes bug reported by Thorsten. 2004-06-09 Fernando Perez * examples/example-embed.py: fixed all references to %n (replaced with \\# for ps1/out prompts and with \\D for ps2 prompts). Done for all examples and the manual as well. 2004-06-08 Fernando Perez * IPython/Prompts.py (Prompt2.set_p_str): fixed all prompt alignment and color management. All 3 prompt subsystems now inherit from BasePrompt. * tools/release: updates for windows installer build and tag rpms with python version (since paths are fixed). * IPython/UserConfig/ipythonrc: modified to use \# instead of %n, which will become eventually obsolete. Also fixed the default prompt_in2 to use \D, so at least new users start with the correct defaults. WARNING: Users with existing ipythonrc files will need to apply this fix manually! * setup.py: make windows installer (.exe). This is finally the integration of an old patch by Cory Dodt , which I hadn't included because it required Python 2.3 (or recent distutils). * IPython/usage.py (__doc__): update docs (and manpage) to reflect usage of new '\D' escape. * IPython/Prompts.py (ROOT_SYMBOL): Small fix for Windows (which lacks os.getuid()) (CachedOutput.set_colors): Added the ability to turn coloring on/off with @colors even for manually defined prompt colors. It uses a nasty global, but it works safely and via the generic color handling mechanism. (Prompt2.__init__): Introduced new escape '\D' for continuation prompts. It represents the counter ('\#') as dots. *** NOTE *** THIS IS A BACKWARDS-INCOMPATIBLE CHANGE. Users will need to update their ipythonrc files and replace '%n' with '\D' in their prompt_in2 settings everywhere. Sorry, but there's otherwise no clean way to get all prompts to properly align. The ipythonrc shipped with IPython has been updated. 2004-06-07 Fernando Perez * setup.py (isfile): Pass local_icons option to latex2html, so the resulting HTML file is self-contained. Thanks to dryice-AT-liu.com.cn for the tip. * pysh.py: I created a new profile 'shell', which implements a _rudimentary_ IPython-based shell. This is in NO WAY a realy system shell, nor will it become one anytime soon. It's mainly meant to illustrate the use of the new flexible bash-like prompts. I guess it could be used by hardy souls for true shell management, but it's no tcsh/bash... pysh.py is loaded by the 'shell' profile. This uses the InterpreterExec extension provided by W.J. van der Laan * IPython/Prompts.py (PromptOut.__str__): now it will correctly auto-align itself with the length of the previous input prompt (taking into account the invisible color escapes). (CachedOutput.__init__): Large restructuring of this class. Now all three prompts (primary1, primary2, output) are proper objects, managed by the 'parent' CachedOutput class. The code is still a bit hackish (all prompts share state via a pointer to the cache), but it's overall far cleaner than before. * IPython/genutils.py (getoutputerror): modified to add verbose, debug and header options. This makes the interface of all getout* functions uniform. (SystemExec.getoutputerror): added getoutputerror to SystemExec. * IPython/Magic.py (Magic.default_option): added a function to allow registering default options for any magic command. This makes it easy to have profiles which customize the magics globally for a certain use. The values set through this function are picked up by the parse_options() method, which all magics should use to parse their options. * IPython/genutils.py (warn): modified the warnings framework to use the Term I/O class. I'm trying to slowly unify all of IPython's I/O operations to pass through Term. * IPython/Prompts.py (Prompt2._str_other): Added functionality in the secondary prompt to correctly match the length of the primary one for any prompt. Now multi-line code will properly line up even for path dependent prompts, such as the new ones available via the prompt_specials. 2004-06-06 Fernando Perez * IPython/Prompts.py (prompt_specials): Added the ability to have bash-like special sequences in the prompts, which get automatically expanded. Things like hostname, current working directory and username are implemented already, but it's easy to add more in the future. Thanks to a patch by W.J. van der Laan (prompt_specials): Added color support for prompt strings, so users can define arbitrary color setups for their prompts. 2004-06-05 Fernando Perez * IPython/genutils.py (Term.reopen_all): Added Windows-specific code to load Gary Bishop's readline and configure it automatically. Thanks to Gary for help on this. 2004-06-01 Fernando Perez * IPython/Logger.py (Logger.create_log): fix bug for logging with no filename (previous fix was incomplete). 2004-05-25 Fernando Perez * IPython/Magic.py (Magic.parse_options): fix bug where naked parens would get passed to the shell. 2004-05-20 Fernando Perez * IPython/Magic.py (Magic.magic_prun): changed default profile sort order to 'time' (the more common profiling need). * IPython/OInspect.py (Inspector.pinfo): flush the inspect cache so that source code shown is guaranteed in sync with the file on disk (also changed in psource). Similar fix to the one for ultraTB on 2004-05-06. Thanks to a bug report by Yann Le Du . * IPython/Magic.py (Magic.parse_options): Fixed bug where commands with a single option would not be correctly parsed. Closes http://www.scipy.net/roundup/ipython/issue14. This bug had been introduced in 0.6.0 (on 2004-05-06). 2004-05-13 *** Released version 0.6.0 2004-05-13 Fernando Perez * debian/: Added debian/ directory to CVS, so that debian support is publicly accessible. The debian package is maintained by Jack Moffit . * Documentation: included the notes about an ipython-based system shell (the hypothetical 'pysh') into the new_design.pdf document, so that these ideas get distributed to users along with the official documentation. 2004-05-10 Fernando Perez * IPython/Logger.py (Logger.create_log): fix recently introduced bug (misindented line) where logstart would fail when not given an explicit filename. 2004-05-09 Fernando Perez * IPython/Magic.py (Magic.parse_options): skip system call when there are no options to look for. Faster, cleaner for the common case. * Documentation: many updates to the manual: describing Windows support better, Gnuplot updates, credits, misc small stuff. Also updated the new_design doc a bit. 2004-05-06 *** Released version 0.6.0.rc1 2004-05-06 Fernando Perez * IPython/ultraTB.py (ListTB.text): modified a ton of string += operations to use the vastly more efficient list/''.join() method. (FormattedTB.text): Fix http://www.scipy.net/roundup/ipython/issue12 - exception source extract not updated after reload. Thanks to Mike Salib for pinning the source of the problem. Fortunately, the solution works inside ipython and doesn't require any changes to python proper. * IPython/Magic.py (Magic.parse_options): Improved to process the argument list as a true shell would (by actually using the underlying system shell). This way, all @magics automatically get shell expansion for variables. Thanks to a comment by Alex Schmolck. 2004-04-04 Fernando Perez * IPython/iplib.py (InteractiveShell.interact): Added a special trap for a debugger quit exception, which is basically impossible to handle by normal mechanisms, given what pdb does to the stack. This fixes a crash reported by . 2004-04-03 Fernando Perez * IPython/genutils.py (Term): Standardized the names of the Term class streams to cin/cout/cerr, following C++ naming conventions (I can't use in/out/err because 'in' is not a valid attribute name). * IPython/iplib.py (InteractiveShell.interact): don't increment the prompt if there's no user input. By Daniel 'Dang' Griffith , after a suggestion from Francois Pinard. 2004-04-02 Fernando Perez * IPython/genutils.py (Stream.__init__): Modified to survive at least importing in contexts where stdin/out/err aren't true file objects, such as PyCrust (they lack fileno() and mode). However, the recovery facilities which rely on these things existing will not work. 2004-04-01 Fernando Perez * IPython/Magic.py (Magic.magic_sx): modified (as well as @sc) to use the new getoutputerror() function, so it properly distinguishes stdout/err. * IPython/genutils.py (getoutputerror): added a function to capture separately the standard output and error of a command. After a comment from dang on the mailing lists. This code is basically a modified version of commands.getstatusoutput(), from the standard library. * IPython/iplib.py (InteractiveShell.handle_shell_escape): added '!!' as a special syntax (shorthand) to access @sx. * IPython/Magic.py (Magic.magic_sx): new magic, to execute a shell command and return its output as a list split on '\n'. 2004-03-31 Fernando Perez * IPython/FakeModule.py (FakeModule.__init__): added __nonzero__ method to dictionaries used as FakeModule instances if they lack it. At least pydoc in python2.3 breaks for runtime-defined functions without this hack. At some point I need to _really_ understand what FakeModule is doing, because it's a gross hack. But it solves Arnd's problem for now... 2004-02-27 Fernando Perez * IPython/Logger.py (Logger.create_log): Fix bug where 'rotate' mode would behave erratically. Also increased the number of possible logs in rotate mod to 999. Thanks to Rod Holland for the report and fixes. 2004-02-26 Fernando Perez * IPython/genutils.py (page): Check that the curses module really has the initscr attribute before trying to use it. For some reason, the Solaris curses module is missing this. I think this should be considered a Solaris python bug, but I'm not sure. 2004-01-17 Fernando Perez * IPython/genutils.py (Stream.__init__): Changes to try to make ipython robust against stdin/out/err being closed by the user. This is 'user error' (and blocks a normal python session, at least the stdout case). However, Ipython should be able to survive such instances of abuse as gracefully as possible. To simplify the coding and maintain compatibility with Gary Bishop's Term contributions, I've made use of classmethods for this. I think this introduces a dependency on python 2.2. 2004-01-13 Fernando Perez * IPython/numutils.py (exp_safe): simplified the code a bit and removed the need for importing the kinds module altogether. 2004-01-06 Fernando Perez * IPython/Magic.py (Magic.magic_sc): Made the shell capture system a magic function instead, after some community feedback. No special syntax will exist for it, but its name is deliberately very short. 2003-12-20 Fernando Perez * IPython/iplib.py (InteractiveShell.handle_shell_assign): Added new functionality, to automagically assign the result of a shell command to a variable. I'll solicit some community feedback on this before making it permanent. * IPython/OInspect.py (Inspector.pinfo): Fix crash when info was requested about callables for which inspect couldn't obtain a proper argspec. Thanks to a crash report sent by Etienne Posthumus . 2003-12-09 Fernando Perez * IPython/genutils.py (page): patch for the pager to work across various versions of Windows. By Gary Bishop. 2003-12-04 Fernando Perez * IPython/Gnuplot2.py (PlotItems): Fixes for working with Gnuplot.py version 1.7, whose internal names changed quite a bit. While I tested this and it looks ok, there may still be corner cases I've missed. 2003-12-01 Fernando Perez * IPython/iplib.py (InteractiveShell._prefilter): Fixed a bug where a line like 'p,q=1,2' would fail because the automagic system would be triggered for @p. * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): Tab-related cleanups, code unmodified. * IPython/genutils.py (Term): added a class for IPython to handle output. In most cases it will just be a proxy for stdout/err, but having this allows modifications to be made for some platforms, such as handling color escapes under Windows. All of this code was contributed by Gary Bishop, with minor modifications by me. The actual changes affect many files. 2003-11-30 Fernando Perez * IPython/iplib.py (file_matches): new completion code, courtesy of Jeff Collins. This enables filename completion again under python 2.3, which disabled it at the C level. 2003-11-11 Fernando Perez * IPython/numutils.py (amap): Added amap() fn. Simple shorthand for Numeric.array(map(...)), but often convenient. 2003-11-05 Fernando Perez * IPython/numutils.py (frange): Changed a call from int() to int(round()) to prevent a problem reported with arange() in the numpy list. 2003-10-06 Fernando Perez * IPython/DPyGetOpt.py (DPyGetOpt.processArguments): changed to prevent crashes if sys lacks an argv attribute (it happens with embedded interpreters which build a bare-bones sys module). Thanks to a report/bugfix by Adam Hupp . 2003-09-24 Fernando Perez * IPython/Magic.py (Magic._ofind): blanket except around getattr() to protect against poorly written user objects where __getattr__ raises exceptions other than AttributeError. Thanks to a bug report by Oliver Sander . * IPython/FakeModule.py (FakeModule.__repr__): this method was missing. Thanks to bug report by Ralf Schmitt . 2003-09-09 Fernando Perez * IPython/iplib.py (InteractiveShell._prefilter): fix bug where unpacking a list whith a callable as first element would mistakenly trigger autocalling. Thanks to a bug report by Jeffery Collins. 2003-08-25 *** Released version 0.5.0 2003-08-22 Fernando Perez * IPython/ultraTB.py (VerboseTB.linereader): Improved handling of improperly defined user exceptions. Thanks to feedback from Mark Russell . 2003-08-20 Fernando Perez * IPython/OInspect.py (Inspector.pinfo): changed String Form printing so that it would print multi-line string forms starting with a new line. This way the formatting is better respected for objects which work hard to make nice string forms. * IPython/iplib.py (InteractiveShell.handle_auto): Fix bug where autocall would overtake data access for objects with both __getitem__ and __call__. 2003-08-19 *** Released version 0.5.0-rc1 2003-08-19 Fernando Perez * IPython/deep_reload.py (load_tail): single tiny change here seems to fix the long-standing bug of dreload() failing to work for dotted names. But this module is pretty tricky, so I may have missed some subtlety. Needs more testing!. * IPython/ultraTB.py (VerboseTB.linereader): harden against user exceptions which have badly implemented __str__ methods. (VerboseTB.text): harden against inspect.getinnerframes crashing, which I've been getting reports about from Python 2.3 users. I wish I had a simple test case to reproduce the problem, so I could either write a cleaner workaround or file a bug report if necessary. * IPython/Magic.py (Magic.magic_edit): fixed bug where after making a class 'foo', file 'foo.py' couldn't be edited. Thanks to a bug report by Tjabo Kloppenburg. * IPython/ultraTB.py (VerboseTB.debugger): hardened against pdb crashes. Wrapped the pdb call in a blanket try/except, since pdb seems rather unstable. Thanks to a bug report by Tjabo Kloppenburg . * IPython/Release.py (version): release 0.5.0-rc1. I want to put this out soon because of the critical fixes in the inner loop for generators. * IPython/Magic.py (Magic.getargspec): removed. This (and _get_def) have been obsoleted by OInspect for a long time, I hadn't noticed that they were dead code. (Magic._ofind): restored _ofind functionality for a few literals (those in ["''",'""','[]','{}','()']). But it won't work anymore for things like "hello".capitalize?, since that would require a potentially dangerous eval() again. * IPython/iplib.py (InteractiveShell._prefilter): reorganized the logic a bit more to clean up the escapes handling and minimize the use of _ofind to only necessary cases. The interactive 'feel' of IPython should have improved quite a bit with the changes in _prefilter and _ofind (besides being far safer than before). * IPython/Magic.py (Magic.magic_edit): Fixed old bug (but rather obscure, never reported). Edit would fail to find the object to edit under some circumstances. (Magic._ofind): CRITICAL FIX. Finally removed the eval() calls which were causing double-calling of generators. Those eval calls were _very_ dangerous, since code with side effects could be triggered. As they say, 'eval is evil'... These were the nastiest evals in IPython. Besides, _ofind is now far simpler, and it should also be quite a bit faster. Its use of inspect is also safer, so perhaps some of the inspect-related crashes I've seen lately with Python 2.3 might be taken care of. That will need more testing. 2003-08-17 Fernando Perez * IPython/iplib.py (InteractiveShell._prefilter): significant simplifications to the logic for handling user escapes. Faster and simpler code. 2003-08-14 Fernando Perez * IPython/numutils.py (sum_flat): rewrote to be non-recursive. Now it requires O(N) storage (N=size(a)) for non-contiguous input, but it should be quite a bit faster. And the recursive version generated O(log N) intermediate storage for all rank>1 arrays, even if they were contiguous. (l1norm): Added this function. (norm): Added this function for arbitrary norms (including l-infinity). l1 and l2 are still special cases for convenience and speed. 2003-08-03 Fernando Perez * IPython/Magic.py (Magic.magic_edit): Removed all remaining string exceptions, which now raise PendingDeprecationWarnings in Python 2.3. There were some in Magic and some in Gnuplot2. 2003-06-30 Fernando Perez * IPython/genutils.py (page): modified to call curses only for terminals where TERM=='xterm'. After problems under many other terminals were reported by Keith Beattie . * IPython/iplib.py (complete): removed spurious 'print "IE"' which would be triggered when readline was absent. This was just an old debugging statement I'd forgotten to take out. 2003-06-20 Fernando Perez * IPython/genutils.py (clock): modified to return only user time (not counting system time), after a discussion on scipy. While system time may be a useful quantity occasionally, it may much more easily be skewed by occasional swapping or other similar activity. 2003-06-05 Fernando Perez * IPython/numutils.py (identity): new function, for building arbitrary rank Kronecker deltas (mostly backwards compatible with Numeric.identity) 2003-06-03 Fernando Perez * IPython/iplib.py (InteractiveShell.handle_magic): protect arguments passed to magics with spaces, to allow trailing '\' to work normally (mainly for Windows users). 2003-05-29 Fernando Perez * IPython/ipmaker.py (make_IPython): Load site._Helper() as help instead of pydoc.help. This fixes a bizarre behavior where printing '%s' % locals() would trigger the help system. Now ipython behaves like normal python does. Note that if one does 'from pydoc import help', the bizarre behavior returns, but this will also happen in normal python, so it's not an ipython bug anymore (it has to do with how pydoc.help is implemented). 2003-05-22 Fernando Perez * IPython/FlexCompleter.py (Completer.attr_matches): fixed to return [] instead of None when nothing matches, also match to end of line. Patch by Gary Bishop. * IPython/ipmaker.py (make_IPython): Added same sys.excepthook protection as before, for files passed on the command line. This prevents the CrashHandler from kicking in if user files call into sys.excepthook (such as PyQt and WxWindows have a nasty habit of doing). After a report by Kasper Souren 2003-05-20 *** Released version 0.4.0 2003-05-20 Fernando Perez * setup.py: added support for manpages. It's a bit hackish b/c of a bug in the way the bdist_rpm distutils target handles gzipped manpages, but it works. After a patch by Jack. 2003-05-19 Fernando Perez * IPython/numutils.py: added a mockup of the kinds module, since it was recently removed from Numeric. This way, numutils will work for all users even if they are missing kinds. * IPython/Magic.py (Magic._ofind): Harden against an inspect failure, which can occur with SWIG-wrapped extensions. After a crash report from Prabhu. 2003-05-16 Fernando Perez * IPython/iplib.py (InteractiveShell.excepthook): New method to protect ipython from user code which may call directly sys.excepthook (this looks like an ipython crash to the user, even when it isn't). After a patch by Gary Bishop . This is especially important to help users of WxWindows, but may also be useful in other cases. * IPython/ultraTB.py (AutoFormattedTB.__call__): Changed to allow an optional tb_offset to be specified, and to preserve exception info if given. After a patch by Gary Bishop . * ipython.1 (Default): Thanks to Jack's work, we now have manpages! 2003-05-15 Fernando Perez * IPython/iplib.py (InteractiveShell.user_setup): Fix crash when installing for a new user under Windows. 2003-05-12 Fernando Perez * IPython/iplib.py (InteractiveShell.handle_emacs): New line handler for Emacs comint-based lines. Currently it doesn't do much (but importantly, it doesn't update the history cache). In the future it may be expanded if Alex needs more functionality there. * IPython/CrashHandler.py (CrashHandler.__call__): Added platform info to crash reports. * IPython/iplib.py (InteractiveShell.mainloop): Added -c option, just like Python's -c. Also fixed crash with invalid -color option value at startup. Thanks to Will French for the bug report. 2003-05-09 Fernando Perez * IPython/genutils.py (EvalDict.__getitem__): Renamed EvalString to EvalDict (it's a mapping, after all) and simplified its code quite a bit, after a nice discussion on c.l.py where Gustavo Córdova suggested the new version. 2003-04-30 Fernando Perez * IPython/genutils.py (timings_out): modified it to reduce its overhead in the common reps==1 case. 2003-04-29 Fernando Perez * IPython/genutils.py (timings_out): Modified to use the resource module, which avoids the wraparound problems of time.clock(). 2003-04-17 *** Released version 0.2.15pre4 2003-04-17 Fernando Perez * setup.py (scriptfiles): Split windows-specific stuff over to a separate file, in an attempt to have a Windows GUI installer. That didn't work, but part of the groundwork is done. * IPython/UserConfig/ipythonrc: Added M-i, M-o and M-I for indent/unindent with 4 spaces. Particularly useful in combination with the new auto-indent option. 2003-04-16 Fernando Perez * IPython/Magic.py: various replacements of self.rc for self.shell.rc. A lot more remains to be done to fully disentangle this class from the main Shell class. * IPython/GnuplotRuntime.py: added checks for mouse support so that we don't try to enable it if the current gnuplot doesn't really support it. Also added checks so that we don't try to enable persist under Windows (where Gnuplot doesn't recognize the option). * IPython/iplib.py (InteractiveShell.interact): Added optional auto-indenting code, after a patch by King C. Shu . It's off by default because it doesn't get along well with pasting indented code. If I ever figure out how to make that part go well, it will become on by default. * IPython/Prompts.py (Prompt1.auto_rewrite): Fixed bug which would crash ipython if there was an unmatched '%' in the user's prompt string. Reported by Thorsten Kampe . * IPython/iplib.py (InteractiveShell.interact): removed the ability to ask the user whether he wants to crash or not at the 'last line' exception handler. Calling functions at that point changes the stack, and the error reports would have incorrect tracebacks. * IPython/Magic.py (Magic.magic_page): Added new @page magic, to pass through a peger a pretty-printed form of any object. After a contribution by Olivier Aubert 2003-04-14 Fernando Perez * IPython/iplib.py (InteractiveShell.user_setup): Fixed bug where all files in ~ would be modified at first install (instead of ~/.ipython). This could be potentially disastrous, as the modification (make line-endings native) could damage binary files. 2003-04-10 Fernando Perez * IPython/iplib.py (InteractiveShell.handle_help): Modified to handle only lines which are invalid python. This now means that lines like 'x=1 #?' execute properly. Thanks to Jeffery Collins for the bug report. 2003-04-01 Fernando Perez * IPython/iplib.py (InteractiveShell.showtraceback): Fixed bug where failing to set sys.last_traceback would crash pdb.pm(). Thanks to Jeffery D. Collins for the bug report. 2003-03-25 Fernando Perez * IPython/Magic.py (Magic.magic_prun): rstrip() output of profiler before printing it (it had a lot of spurious blank lines at the end). * IPython/Gnuplot2.py (Gnuplot.hardcopy): fixed bug where lpr output would be sent 21 times! Obviously people don't use this too often, or I would have heard about it. 2003-03-24 Fernando Perez * setup.py (scriptfiles): renamed the data_files parameter from 'base' to 'data' to fix rpm build issues. Thanks to Ralf Ahlbrink for the patch. 2003-03-20 Fernando Perez * IPython/genutils.py (error): added error() and fatal() functions. 2003-03-18 *** Released version 0.2.15pre3 2003-03-18 Fernando Perez * setupext/install_data_ext.py (install_data_ext.initialize_options): Class contributed by Jack Moffit for fixing the old distutils hack. He is sending this to the distutils folks so in the future we may not need it as a private fix. * MANIFEST.in: Extensive reorganization, based on Jack Moffit's changes for Debian packaging. See his patch for full details. The old distutils hack of making the ipythonrc* files carry a bogus .py extension is gone, at last. Examples were moved to a separate subdir under doc/, and the separate executable scripts now live in their own directory. Overall a great cleanup. The manual was updated to use the new files, and setup.py has been fixed for this setup. * IPython/PyColorize.py (Parser.usage): made non-executable and created a pycolor wrapper around it to be included as a script. 2003-03-12 *** Released version 0.2.15pre2 2003-03-12 Fernando Perez * IPython/ColorANSI.py (make_color_table): Finally fixed the long-standing problem with garbage characters in some terminals. The issue was really that the \001 and \002 escapes must _only_ be passed to input prompts (which call readline), but _never_ to normal text to be printed on screen. I changed ColorANSI to have two classes: TermColors and InputTermColors, each with the appropriate escapes for input prompts or normal text. The code in Prompts.py got slightly more complicated, but this very old and annoying bug is finally fixed. All the credit for nailing down the real origin of this problem and the correct solution goes to Jack Moffit . *Many* thanks to him for spending quite a bit of effort on this. 2003-03-05 *** Released version 0.2.15pre1 2003-03-03 Fernando Perez * IPython/FakeModule.py: Moved the former _FakeModule to a separate file, because it's also needed by Magic (to fix a similar pickle-related issue in @run). 2003-03-02 Fernando Perez * IPython/Magic.py (Magic.magic_autocall): new magic to control the autocall option at runtime. (Magic.magic_dhist): changed self.user_ns to self.shell.user_ns across Magic.py to start separating Magic from InteractiveShell. (Magic._ofind): Fixed to return proper namespace for dotted names. Before, a dotted name would always return 'not currently defined', because it would find the 'parent'. s.x would be found, but since 'x' isn't defined by itself, it would get confused. (Magic.magic_run): Fixed pickling problems reported by Ralf Ahlbrink . The fix was similar to that I'd used when Mike Heeter reported similar issues at the top-level, but now for @run. It boils down to injecting the namespace where code is being executed with something that looks enough like a module to fool pickle.dump(). Since a pickle stores a named reference to the importing module, we need this for pickles to save something sensible. * IPython/ipmaker.py (make_IPython): added an autocall option. * IPython/iplib.py (InteractiveShell._prefilter): reordered all of the auto-eval code. Now autocalling is an option, and the code is also vastly safer. There is no more eval() involved at all. 2003-03-01 Fernando Perez * IPython/Magic.py (Magic._ofind): Changed interface to return a dict with named keys instead of a tuple. * IPython: Started using CVS for IPython as of 0.2.15pre1. * setup.py (make_shortcut): Fixed message about directories created during Windows installation (the directories were ok, just the printed message was misleading). Thanks to Chris Liechti for the heads up. 2003-02-21 Fernando Perez * IPython/iplib.py (InteractiveShell._prefilter): Fixed catching of ValueError exception when checking for auto-execution. This one is raised by things like Numeric arrays arr.flat when the array is non-contiguous. 2003-01-31 Fernando Perez * IPython/genutils.py (SystemExec.bq): Fixed bug where bq would not return any value at all (even though the command would get executed). (xsys): Flush stdout right after printing the command to ensure proper ordering of commands and command output in the total output. (SystemExec/xsys/bq): Switched the names of xsys/bq and system/getoutput as defaults. The old ones are kept for compatibility reasons, so no code which uses this library needs changing. 2003-01-27 *** Released version 0.2.14 2003-01-25 Fernando Perez * IPython/Magic.py (Magic.magic_edit): Fixed problem where functions defined in previous edit sessions could not be re-edited (because the temp files were immediately removed). Now temp files are removed only at IPython's exit. (Magic.magic_run): Improved @run to perform shell-like expansions on its arguments (~users and $VARS). With this, @run becomes more like a normal command-line. * IPython/Shell.py (IPShellEmbed.__call__): Fixed a bunch of small bugs related to embedding and cleaned up that code. A fairly important one was the impossibility to access the global namespace through the embedded IPython (only local variables were visible). 2003-01-14 Fernando Perez * IPython/iplib.py (InteractiveShell._prefilter): Fixed auto-calling to be a bit more conservative. Now it doesn't get triggered if any of '!=()<>' are in the rest of the input line, to allow comparing callables. Thanks to Alex for the heads up. 2003-01-07 Fernando Perez * IPython/genutils.py (page): fixed estimation of the number of lines in a string to be paged to simply count newlines. This prevents over-guessing due to embedded escape sequences. A better long-term solution would involve stripping out the control chars for the count, but it's potentially so expensive I just don't think it's worth doing. 2002-12-19 *** Released version 0.2.14pre50 2002-12-19 Fernando Perez * tools/release (version): Changed release scripts to inform Andrea and build a NEWS file with a list of recent changes. * IPython/ColorANSI.py (__all__): changed terminal detection code. Seems to work better for xterms without breaking konsole. Will need more testing to determine if WinXP and Mac OSX also work ok. 2002-12-18 *** Released version 0.2.14pre49 2002-12-18 Fernando Perez * Docs: added new info about Mac OSX, from Andrea. * IPython/Gnuplot2.py (String): Added a String PlotItem class to allow direct plotting of python strings whose format is the same of gnuplot data files. 2002-12-16 Fernando Perez * IPython/iplib.py (InteractiveShell.interact): fixed default (y) value of exit question to be acknowledged. 2002-12-03 Fernando Perez * IPython/ipmaker.py: removed generators, which had been added by mistake in an earlier debugging run. This was causing trouble to users of python 2.1.x. Thanks to Abel Daniel for pointing this out. 2002-11-17 Fernando Perez * Manual: updated the Gnuplot section. * IPython/GnuplotRuntime.py: refactored a lot all this code, with a much better split of what goes in Runtime and what goes in Interactive. * IPython/ipmaker.py: fixed bug where import_fail_info wasn't being imported from iplib. * IPython/GnuplotInteractive.py (magic_gpc): renamed @gp to @gpc for command-passing. Now the global Gnuplot instance is called 'gp' instead of 'g', which was really a far too fragile and common name. * IPython/Gnuplot2.py (eps_fix_bbox): added this to fix broken bounding boxes generated by Gnuplot for square plots. * IPython/genutils.py (popkey): new function added. I should suggest this on c.l.py as a dict method, it seems useful. * IPython/Gnuplot2.py (Gnuplot.plot): Overhauled plot and replot to transparently handle PostScript generation. MUCH better than the previous plot_eps/replot_eps (which I removed now). The code is also fairly clean and well documented now (including docstrings). 2002-11-13 Fernando Perez * IPython/Magic.py (Magic.magic_edit): fixed docstring (inconsistent with options). * IPython/Gnuplot2.py (Gnuplot.hardcopy): hardcopy had been manually disabled, I don't know why. Fixed it. (Gnuplot._plot_eps): added new plot_eps/replot_eps to get directly eps output. 2002-11-12 Fernando Perez * IPython/genutils.py (ask_yes_no): trap EOF and ^C so that they don't propagate up to caller. Fixes crash reported by François Pinard. 2002-11-09 Fernando Perez * IPython/ipmaker.py (make_IPython): fixed problem with writing history file for new users. (make_IPython): fixed bug where initial install would leave the user running in the .ipython dir. (make_IPython): fixed bug where config dir .ipython would be created regardless of the given -ipythondir option. Thanks to Cory Dodt for the bug report. * IPython/genutils.py (ask_yes_no): new function for asking yes/no type confirmations. Will need to use it in all of IPython's code consistently. * IPython/CrashHandler.py (CrashHandler.__call__): changed the context to print 31 lines instead of the default 5. This will make the crash reports extremely detailed in case the problem is in libraries I don't have access to. * IPython/iplib.py (InteractiveShell.interact): changed the 'last line of defense' code to still crash, but giving users fair warning. I don't want internal errors to go unreported: if there's an internal problem, IPython should crash and generate a full report. 2002-11-08 Fernando Perez * IPython/iplib.py (InteractiveShell.interact): added code to trap otherwise uncaught exceptions which can appear if people set sys.stdout to something badly broken. Thanks to a crash report from henni-AT-mail.brainbot.com. 2002-11-04 Fernando Perez * IPython/iplib.py (InteractiveShell.interact): added __IPYTHON__active to the builtins. It's a flag which goes on when the interaction starts and goes off again when it stops. This allows embedding code to detect being inside IPython. Before this was done via __IPYTHON__, but that only shows that an IPython instance has been created. * IPython/Magic.py (Magic.magic_env): I realized that in a UserDict, instance.data holds the data as a normal dict. So I modified @env to return os.environ.data instead of rebuilding a dict by hand. 2002-11-02 Fernando Perez * IPython/genutils.py (warn): changed so that level 1 prints no header. Level 2 is now the default (with 'WARNING' header, as before). I think I tracked all places where changes were needed in IPython, but outside code using the old level numbering may have broken. * IPython/iplib.py (InteractiveShell.runcode): added this to handle the tracebacks in SystemExit traps correctly. The previous code (through interact) was printing more of the stack than necessary, showing IPython internal code to the user. * IPython/UserConfig/ipythonrc.py: Made confirm_exit 1 by default. Now that the default at the confirmation prompt is yes, it's not so intrusive. François' argument that ipython sessions tend to be complex enough not to lose them from an accidental C-d, is a valid one. * IPython/iplib.py (InteractiveShell.interact): added a showtraceback() call to the SystemExit trap, and modified the exit confirmation to have yes as the default. * IPython/UserConfig/ipythonrc.py: removed 'session' option from this file. It's been gone from the code for a long time, this was simply leftover junk. 2002-11-01 Fernando Perez * IPython/UserConfig/ipythonrc.py: new confirm_exit option added. If set, IPython now traps EOF and asks for confirmation. After a request by François Pinard. * IPython/Magic.py (Magic.magic_Exit): New @Exit and @Quit instead of @abort, and with a new (better) mechanism for handling the exceptions. 2002-10-27 Fernando Perez * IPython/usage.py (__doc__): updated the --help information and the ipythonrc file to indicate that -log generates ./ipython.log. Also fixed the corresponding info in @logstart. This and several other fixes in the manuals thanks to reports by François Pinard . * IPython/Logger.py (Logger.switch_log): Fixed error message to refer to @logstart (instead of @log, which doesn't exist). * IPython/iplib.py (InteractiveShell._prefilter): fixed AttributeError crash. Thanks to Christopher Armstrong for the report/fix. This bug had been introduced recently (in 0.2.14pre37) with the fix to the eval problem mentioned below. 2002-10-17 Fernando Perez * IPython/ConfigLoader.py (ConfigLoader.load): Fixes for Windows installation. Thanks to Leonardo Santagada . * IPython/iplib.py (InteractiveShell._prefilter): Many changes to this function to fix a problem reported by Alex Schmolck. He saw it with list comprehensions and generators, which were getting called twice. The real problem was an 'eval' call in testing for automagic which was evaluating the input line silently. This is a potentially very nasty bug, if the input has side effects which must not be repeated. The code is much cleaner now, without any blanket 'except' left and with a regexp test for actual function names. But an eval remains, which I'm not fully comfortable with. I just don't know how to find out if an expression could be a callable in the user's namespace without doing an eval on the string. However that string is now much more strictly checked so that no code slips by, so the eval should only happen for things that can really be only function/method names. 2002-10-15 Fernando Perez * Updated LyX to 1.2.1 so I can work on the docs again. Added Mac OSX information to main manual, removed README_Mac_OSX file from distribution. Also updated credits for recent additions. 2002-10-10 Fernando Perez * README_Mac_OSX: Added a README for Mac OSX users for fixing terminal-related issues. Many thanks to Andrea Riciputi for writing it. * IPython/UserConfig/ipythonrc.py: Fixes to various small issues, thanks to Thorsten Kampe . * setup.py (make_shortcut): Fixes for Windows installation. Thanks to Fredrik Kant and Syver Enstad who both submitted patches for this problem. * IPython/iplib.py (InteractiveShell.embed_mainloop): Patch for global embedding to make sure that things don't overwrite user globals accidentally. Thanks to Richard * IPython/Gnuplot2.py (gp): Patch for Gnuplot.py 1.6 compatibility. Thanks to Hayden Callow 2002-10-04 Fernando Perez * IPython/Gnuplot2.py (PlotItem): Added 'index' option for Gnuplot.File objects. 2002-07-23 Fernando Perez * IPython/genutils.py (timing): Added timings() and timing() for quick access to the most commonly needed data, the execution times. Old timing() renamed to timings_out(). 2002-07-18 Fernando Perez * IPython/Shell.py (IPShellEmbed.restore_system_completer): fixed bug with nested instances disrupting the parent's tab completion. * IPython/iplib.py (all_completions): Added Alex Schmolck's all_completions code to begin the emacs integration. * IPython/Gnuplot2.py (zip_items): Added optional 'titles' argument to allow titling individual arrays when plotting. 2002-07-15 Fernando Perez * setup.py (make_shortcut): changed to retrieve the value of 'Program Files' directory from the registry (this value changes in non-english versions of Windows). Thanks to Thomas Fanslau for the report. 2002-07-10 Fernando Perez * IPython/ultraTB.py (VerboseTB.debugger): enabled workaround for a bug in pdb, which crashes if a line with only whitespace is entered. Bug report submitted to sourceforge. 2002-07-09 Fernando Perez * IPython/ultraTB.py (VerboseTB.nullrepr): fixed rare crash when reporting exceptions (it's a bug in inspect.py, I just set a workaround). 2002-07-08 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): fixed reference to __IPYTHON__ in __builtins__ to show up in user_ns. 2002-07-03 Fernando Perez * IPython/GnuplotInteractive.py (magic_gp_set_default): changed name from @gp_set_instance to @gp_set_default. * IPython/ipmaker.py (make_IPython): default editor value set to '0' (a string), to match the rc file. Otherwise will crash when .strip() is called on it. 2002-06-28 Fernando Perez * IPython/iplib.py (InteractiveShell.safe_execfile): fix importing of files in current directory when a file is executed via @run. Patch also by RA . * setup.py (manfiles): fix for rpm builds, submitted by RA . Now we have RPMs! * IPython/ipmaker.py (make_IPython): fixed lookup of default editor when set to '0'. Problem was, '0' evaluates to True (it's a string!). A. Schmolck caught this one. 2002-06-27 Fernando Perez * IPython/ipmaker.py (make_IPython): fixed bug when running user defined files at the cmd line. __name__ wasn't being set to __main__. * IPython/Gnuplot2.py (zip_items): improved it so it can plot also regular lists and tuples besides Numeric arrays. * IPython/Prompts.py (CachedOutput.__call__): Added output supression for input ending with ';'. Similar to Mathematica and Matlab. The _* vars and Out[] list are still updated, just like Mathematica behaves. 2002-06-25 Fernando Perez * IPython/ConfigLoader.py (ConfigLoader.load): fixed checking of .ini extensions for profiels under Windows. * IPython/OInspect.py (Inspector.pinfo): improved alignment of string form. Fix contributed by Alexander Schmolck * IPython/GnuplotRuntime.py (gp_new): new function. Returns a pre-configured Gnuplot instance. 2002-06-21 Fernando Perez * IPython/numutils.py (exp_safe): new function, works around the underflow problems in Numeric. (log2): New fn. Safe log in base 2: returns exact integer answer for exact integer powers of 2. * IPython/Magic.py (get_py_filename): fixed it not expanding '~' properly. 2002-06-20 Fernando Perez * IPython/genutils.py (timing): new function like Mathematica's. Similar to time_test, but returns more info. 2002-06-18 Fernando Perez * IPython/Magic.py (Magic.magic_save): modified @save and @r according to Mike Heeter's suggestions. 2002-06-16 Fernando Perez * IPython/GnuplotRuntime.py: Massive overhaul to the Gnuplot system. GnuplotMagic is gone as a user-directory option. New files make it easier to use all the gnuplot stuff both from external programs as well as from IPython. Had to rewrite part of hardcopy() b/c of a strange bug: often the ps files simply don't get created, and require a repeat of the command (often several times). * IPython/ultraTB.py (AutoFormattedTB.__call__): changed to resolve output channel at call time, so that if sys.stderr has been redirected by user this gets honored. 2002-06-13 Fernando Perez * IPython/Shell.py (IPShell.__init__): Changed IPythonShell to IPShell. Kept a copy with the old names to avoid breaking people's embedded code. * IPython/ipython: simplified it to the bare minimum after Holger's suggestions. Added info about how to use it in PYTHONSTARTUP. * IPython/Shell.py (IPythonShell): changed the options passing from a string with funky %s replacements to a straight list. Maybe a bit more typing, but it follows sys.argv conventions, so there's less special-casing to remember. 2002-06-12 Fernando Perez * IPython/Magic.py (Magic.magic_r): new magic auto-repeat command. Thanks to a suggestion by Mike Heeter. (Magic.magic_pfile): added behavior to look at filenames if given arg is not a defined object. (Magic.magic_save): New @save function to save code snippets. Also a Mike Heeter idea. * IPython/UserConfig/GnuplotMagic.py (plot): Improvements to plot() and replot(). Much more convenient now, especially for interactive use. * IPython/Magic.py (Magic.magic_run): Added .py automatically to filenames. 2002-06-02 Fernando Perez * IPython/Struct.py (Struct.__init__): modified to admit initialization via another struct. * IPython/genutils.py (SystemExec.__init__): New stateful interface to xsys and bq. Useful for writing system scripts. 2002-05-30 Fernando Perez * MANIFEST.in: Changed docfile selection to exclude all the lyx documents. This will make the user download smaller (it's getting too big). 2002-05-29 Fernando Perez * IPython/iplib.py (_FakeModule.__init__): New class introduced to fix problems with shelve and pickle. Seems to work, but I don't know if corner cases break it. Thanks to Mike Heeter for the bug reports and test cases. 2002-05-24 Fernando Perez * IPython/Magic.py (Macro.__init__): fixed magics embedded in macros having broken. 2002-05-21 Fernando Perez * IPython/Magic.py (Magic.magic_logstart): fixed recently introduced logging bug: all history before logging started was being written one character per line! This came from the redesign of the input history as a special list which slices to strings, not to lists. 2002-05-20 Fernando Perez * IPython/Prompts.py (CachedOutput.__init__): made the color table be an attribute of all classes in this module. The design of these classes needs some serious overhauling. * IPython/DPyGetOpt.py (DPyGetOpt.setPosixCompliance): fixed bug which was ignoring '_' in option names. * IPython/ultraTB.py (FormattedTB.__init__): Changed 'Verbose_novars' to 'Context' and made it the new default. It's a bit more readable and also safer than verbose. * IPython/PyColorize.py (Parser.__call__): Fixed coloring of triple-quoted strings. * IPython/OInspect.py (__all__): new module exposing the object introspection facilities. Now the corresponding magics are dummy wrappers around this. Having this module will make it much easier to put these functions into our modified pdb. This new object inspector system uses the new colorizing module, so source code and other things are nicely syntax highlighted. 2002-05-18 Fernando Perez * IPython/ColorANSI.py: Split the coloring tools into a separate module so I can use them in other code easier (they were part of ultraTB). 2002-05-17 Fernando Perez * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance): fixed it to set the global 'g' also to the called instance, as long as 'g' was still a gnuplot instance (so it doesn't overwrite user's 'g' variables). * IPython/iplib.py (InteractiveShell.__init__): Added In/Out global variables (aliases to _ih,_oh) so that users which expect In[5] or Out[7] to work aren't unpleasantly surprised. (InputList.__getslice__): new class to allow executing slices of input history directly. Very simple class, complements the use of macros. 2002-05-16 Fernando Perez * setup.py (docdirbase): make doc directory be just doc/IPython without version numbers, it will reduce clutter for users. * IPython/Magic.py (Magic.magic_run): Add explicit local dict to execfile call to prevent possible memory leak. See for details: http://mail.python.org/pipermail/python-list/2002-February/088476.html 2002-05-15 Fernando Perez * IPython/Magic.py (Magic.magic_psource): made the object introspection names be more standard: pdoc, pdef, pfile and psource. They all print/page their output, and it makes remembering them easier. Kept old names for compatibility as aliases. 2002-05-14 Fernando Perez * IPython/UserConfig/GnuplotMagic.py: I think I finally understood what the mouse problem was. The trick is to use gnuplot with temp files and NOT with pipes (for data communication), because having both pipes and the mouse on is bad news. 2002-05-13 Fernando Perez * IPython/Magic.py (Magic._ofind): fixed namespace order search bug. Information would be reported about builtins even when user-defined functions overrode them. 2002-05-11 Fernando Perez * IPython/__init__.py (__all__): removed FlexCompleter from __all__ so that things don't fail in platforms without readline. 2002-05-10 Fernando Perez * IPython/__init__.py (__all__): removed numutils from __all__ b/c it requires Numeric, effectively making Numeric a dependency for IPython. * Released 0.2.13 * IPython/Magic.py (Magic.magic_prun): big overhaul to the profiler interface. Now all the major options from the profiler module are directly supported in IPython, both for single expressions (@prun) and for full programs (@run -p). 2002-05-09 Fernando Perez * IPython/Magic.py (Magic.magic_doc): fixed to show docstrings of magic properly formatted for screen. * setup.py (make_shortcut): Changed things to put pdf version in doc/ instead of doc/manual (had to change lyxport a bit). * IPython/Magic.py (Profile.string_stats): made profile runs go through pager (they are long and a pager allows searching, saving, etc.) 2002-05-08 Fernando Perez * Released 0.2.12 2002-05-06 Fernando Perez * IPython/Magic.py (Magic.magic_hist): small bug fixed (recently introduced); 'hist n1 n2' was broken. (Magic.magic_pdb): added optional on/off arguments to @pdb (Magic.magic_run): added option -i to @run, which executes code in the IPython namespace instead of a clean one. Also added @irun as an alias to @run -i. * IPython/UserConfig/GnuplotMagic.py (magic_gp_set_instance): fixed (it didn't really do anything, the namespaces were wrong). * IPython/Debugger.py (__init__): Added workaround for python 2.1 * IPython/__init__.py (__all__): Fixed package namespace, now 'import IPython' does give access to IPython. as expected. Also renamed __release__ to Release. * IPython/Debugger.py (__license__): created new Pdb class which functions like a drop-in for the normal pdb.Pdb but does NOT import readline by default. This way it doesn't muck up IPython's readline handling, and now tab-completion finally works in the debugger -- sort of. It completes things globally visible, but the completer doesn't track the stack as pdb walks it. That's a bit tricky, and I'll have to implement it later. 2002-05-05 Fernando Perez * IPython/Magic.py (Magic.magic_oinfo): fixed formatting bug for magic docstrings when printed via ? (explicit \'s were being printed). * IPython/ipmaker.py (make_IPython): fixed namespace identification bug. Now variables loaded via logs or command-line files are recognized in the interactive namespace by @who. * IPython/iplib.py (InteractiveShell.safe_execfile): Fixed bug in log replay system stemming from the string form of Structs. * IPython/Magic.py (Macro.__init__): improved macros to properly handle magic commands in them. (Magic.magic_logstart): usernames are now expanded so 'logstart ~/mylog' now works. * IPython/iplib.py (complete): fixed bug where paths starting with '/' would be completed as magic names. 2002-05-04 Fernando Perez * IPython/Magic.py (Magic.magic_run): added options -p and -f to allow running full programs under the profiler's control. * IPython/ultraTB.py (FormattedTB.__init__): Added Verbose_novars mode to report exceptions verbosely but without formatting variables. This addresses the issue of ipython 'freezing' (it's not frozen, but caught in an expensive formatting loop) when huge variables are in the context of an exception. (VerboseTB.text): Added '--->' markers at line where exception was triggered. Much clearer to read, especially in NoColor modes. * IPython/Magic.py (Magic.magic_run): bugfix: -n option had been implemented in reverse when changing to the new parse_options(). 2002-05-03 Fernando Perez * IPython/Magic.py (Magic.parse_options): new function so that magics can parse options easier. (Magic.magic_prun): new function similar to profile.run(), suggested by Chris Hart. (Magic.magic_cd): fixed behavior so that it only changes if directory actually is in history. * IPython/usage.py (__doc__): added information about potential slowness of Verbose exception mode when there are huge data structures to be formatted (thanks to Archie Paulson). * IPython/ipmaker.py (make_IPython): Changed default logging (when simply called with -log) to use curr_dir/ipython.log in rotate mode. Fixed crash which was occuring with -log before (thanks to Jim Boyle). 2002-05-01 Fernando Perez * Released 0.2.11 for these fixes (mainly the ultraTB one which was nasty -- though somewhat of a corner case). * IPython/ultraTB.py (AutoFormattedTB.text): renamed __text to text (was a bug). 2002-04-30 Fernando Perez * IPython/UserConfig/GnuplotMagic.py (magic_gp): Minor fix to add a print after ^D or ^C from the user so that the In[] prompt doesn't over-run the gnuplot one. 2002-04-29 Fernando Perez * Released 0.2.10 * IPython/__release__.py (version): get date dynamically. * Misc. documentation updates thanks to Arnd's comments. Also ran a full spellcheck on the manual (hadn't been done in a while). 2002-04-27 Fernando Perez * IPython/Magic.py (Magic.magic_logstart): Fixed bug where starting a log in mid-session would reset the input history list. 2002-04-26 Fernando Perez * IPython/iplib.py (InteractiveShell.wait): Fixed bug where not all files were being included in an update. Now anything in UserConfig that matches [A-Za-z]*.py will go (this excludes __init__.py) 2002-04-25 Fernando Perez * IPython/iplib.py (InteractiveShell.__init__): Added __IPYTHON__ to __builtins__ so that any form of embedded or imported code can test for being inside IPython. * IPython/UserConfig/GnuplotMagic.py: (magic_gp_set_instance): changed to GnuplotMagic because it's now an importable module, this makes the name follow that of the standard Gnuplot module. GnuplotMagic can now be loaded at any time in mid-session. 2002-04-24 Fernando Perez * IPython/numutils.py: removed SIUnits. It doesn't properly set the globals (IPython has its own namespace) and the PhysicalQuantity stuff is much better anyway. * IPython/UserConfig/example-gnuplot.py (g2): Added gnuplot embedding example to standard user directory for distribution. Also put it in the manual. * IPython/numutils.py (gnuplot_exec): Changed to take a gnuplot instance as first argument (so it doesn't rely on some obscure hidden global). * IPython/UserConfig/ipythonrc.py: put () back in accepted delimiters. While it prevents ().TAB from working, it allows completions in open (... expressions. This is by far a more common case. 2002-04-23 Fernando Perez * IPython/Extensions/InterpreterPasteInput.py: new syntax-processing module for pasting lines with >>> or ... at the start. * IPython/Extensions/PhysicalQ_Interactive.py (PhysicalQuantityInteractive.__int__): fixed to work with either Numeric or math. * IPython/UserConfig/ipythonrc-numeric.py: reorganized the provided profiles. Now we have: -math -> math module as * and cmath with its own namespace. -numeric -> Numeric as *, plus gnuplot & grace -physics -> same as before * IPython/Magic.py (Magic.magic_magic): Fixed bug where user-defined magics wouldn't be found by @magic if they were defined as class methods. Also cleaned up the namespace search logic and the string building (to use %s instead of many repeated string adds). * IPython/UserConfig/example-magic.py (magic_foo): updated example of user-defined magics to operate with class methods (cleaner, in line with the gnuplot code). 2002-04-22 Fernando Perez * setup.py: updated dependency list so that manual is updated when all included files change. * IPython/ipmaker.py (make_IPython): Fixed bug which was ignoring the delimiter removal option (the fix is ugly right now). * IPython/UserConfig/ipythonrc-physics.py: simplified not to load all of the math profile (quicker loading, no conflict between g-9.8 and g-gnuplot). * IPython/CrashHandler.py (CrashHandler.__call__): changed default name of post-mortem files to IPython_crash_report.txt. * Cleanup/update of the docs. Added all the new readline info and formatted all lists as 'real lists'. * IPython/ipmaker.py (make_IPython): removed now-obsolete tab-completion options, since the full readline parse_and_bind is now accessible. * IPython/iplib.py (InteractiveShell.init_readline): Changed handling of readline options. Now users can specify any string to be passed to parse_and_bind(), as well as the delimiters to be removed. (InteractiveShell.__init__): Added __name__ to the global namespace so that things like Itpl which rely on its existence don't crash. (InteractiveShell._prefilter): Defined the default with a _ so that prefilter() is easier to override, while the default one remains available. 2002-04-18 Fernando Perez * Added information about pdb in the docs. 2002-04-17 Fernando Perez * IPython/ipmaker.py (make_IPython): added rc_override option to allow passing config options at creation time which may override anything set in the config files or command line. This is particularly useful for configuring embedded instances. 2002-04-15 Fernando Perez * IPython/Logger.py (Logger.log): Fixed a nasty bug which could crash embedded instances because of the input cache falling out of sync with the output counter. * IPython/Shell.py (IPythonShellEmbed.__init__): added a debug mode which calls pdb after an uncaught exception in IPython itself. 2002-04-14 Fernando Perez * IPython/iplib.py (InteractiveShell.showtraceback): pdb mucks up readline, fix it back after each call. * IPython/ultraTB.py (AutoFormattedTB.__text): made text a private method to force all access via __call__(), which guarantees that traceback references are properly deleted. * IPython/Prompts.py (CachedOutput._display): minor fixes to improve printing when pprint is in use. 2002-04-13 Fernando Perez * IPython/Shell.py (IPythonShellEmbed.__call__): SystemExit exceptions aren't caught anymore. If the user triggers one, he should know why he's doing it and it should go all the way up, just like any other exception. So now @abort will fully kill the embedded interpreter and the embedding code (unless that happens to catch SystemExit). * IPython/ultraTB.py (VerboseTB.__init__): added a call_pdb flag and a debugger() method to invoke the interactive pdb debugger after printing exception information. Also added the corresponding -pdb option and @pdb magic to control this feature, and updated the docs. After a suggestion from Christopher Hart (hart-AT-caltech.edu). 2002-04-12 Fernando Perez * IPython/Shell.py (IPythonShellEmbed.__init__): modified to use the exception handlers defined by the user (not the CrashHandler) so that user exceptions don't trigger an ipython bug report. * IPython/ultraTB.py (ColorTB.__init__): made the color scheme configurable (it should have always been so). 2002-03-26 Fernando Perez * IPython/Shell.py (IPythonShellEmbed.__call__): many changes here and there to fix embedding namespace issues. This should all be done in a more elegant way. 2002-03-25 Fernando Perez * IPython/genutils.py (get_home_dir): Try to make it work under win9x also. 2002-03-20 Fernando Perez * IPython/Shell.py (IPythonShellEmbed.__init__): leave sys.displayhook untouched upon __init__. 2002-03-19 Fernando Perez * Released 0.2.9 (for embedding bug, basically). * IPython/Shell.py (IPythonShellEmbed.__call__): Trap SystemExit exceptions so that enclosing shell's state can be restored. * Changed magic_gnuplot.py to magic-gnuplot.py to standardize naming conventions in the .ipython/ dir. * IPython/iplib.py (InteractiveShell.init_readline): removed '-' from delimiters list so filenames with - in them get expanded. * IPython/Shell.py (IPythonShellEmbed.__call__): fixed bug with sys.displayhook not being properly restored after an embedded call. 2002-03-18 Fernando Perez * Released 0.2.8 * IPython/iplib.py (InteractiveShell.user_setup): fixed bug where some files weren't being included in a -upgrade. (InteractiveShell.init_readline): Added 'set show-all-if-ambiguous on' so that the first tab completes. (InteractiveShell.handle_magic): fixed bug with spaces around quotes breaking many magic commands. * setup.py: added note about ignoring the syntax error messages at installation. * IPython/UserConfig/magic_gnuplot.py (magic_gp): finished streamlining the gnuplot interface, now there's only one magic @gp. 2002-03-17 Fernando Perez * IPython/UserConfig/magic_gnuplot.py: new name for the example-magic_pm.py file. Much enhanced system, now with a shell for communicating directly with gnuplot, one command at a time. * IPython/Magic.py (Magic.magic_run): added option -n to prevent setting __name__=='__main__'. * IPython/UserConfig/example-magic_pm.py (magic_pm): Added mini-shell for accessing gnuplot from inside ipython. Should extend it later for grace access too. Inspired by Arnd's suggestion. * IPython/iplib.py (InteractiveShell.handle_magic): fixed bug when calling magic functions with () in their arguments. Thanks to Arnd Baecker for pointing this to me. * IPython/numutils.py (sum_flat): fixed bug. Would recurse infinitely for integer or complex arrays (only worked with floats). 2002-03-16 Fernando Perez * setup.py: Merged setup and setup_windows into a single script which properly handles things for windows users. 2002-03-15 Fernando Perez * Big change to the manual: now the magics are all automatically documented. This information is generated from their docstrings and put in a latex file included by the manual lyx file. This way we get always up to date information for the magics. The manual now also has proper version information, also auto-synced. For this to work, an undocumented --magic_docstrings option was added. 2002-03-13 Fernando Perez * IPython/ultraTB.py (TermColors): fixed problem with dark colors under CDE terminals. An explicit ;2 color reset is needed in the escapes. 2002-03-12 Fernando Perez * IPython/ultraTB.py (TermColors): changed color escapes again to fix the (old, reintroduced) line-wrapping bug. Basically, if \001..\002 aren't given in the color escapes, lines get wrapped weirdly. But giving those screws up old xterms and emacs terms. So I added some logic for emacs terms to be ok, but I can't identify old xterms separately ($TERM=='xterm' for many terminals, like konsole). 2002-03-10 Fernando Perez * IPython/usage.py (__doc__): Various documentation cleanups and updates, both in usage docstrings and in the manual. * IPython/Prompts.py (CachedOutput.set_colors): cleanups for handling of caching. Set minimum acceptabe value for having a cache at 20 values. * IPython/iplib.py (InteractiveShell.user_setup): moved the install_first_time function to a method, renamed it and added an 'upgrade' mode. Now people can update their config directory with a simple command line switch (-upgrade, also new). * IPython/Magic.py (Magic.magic_pfile): Made @pfile an alias to @file (convenient for automagic users under Python >= 2.2). Removed @files (it seemed more like a plural than an abbrev. of 'file show'). * IPython/iplib.py (install_first_time): Fixed crash if there were backup files ('~') in .ipython/ install directory. * IPython/ipmaker.py (make_IPython): fixes for new prompt system. Things look fine, but these changes are fairly intrusive. Test them for a few days. * IPython/Prompts.py (CachedOutput.__init__): Massive rewrite of the prompts system. Now all in/out prompt strings are user controllable. This is particularly useful for embedding, as one can tag embedded instances with particular prompts. Also removed global use of sys.ps1/2, which now allows nested embeddings without any problems. Added command-line options for the prompt strings. 2002-03-08 Fernando Perez * IPython/UserConfig/example-embed-short.py (ipshell): added example file with the bare minimum code for embedding. * IPython/Shell.py (IPythonShellEmbed.set_dummy_mode): added functionality for the embeddable shell to be activated/deactivated either globally or at each call. * IPython/Prompts.py (Prompt1.auto_rewrite): Fixes the problem of rewriting the prompt with '--->' for auto-inputs with proper coloring. Now the previous UGLY hack in handle_auto() is gone, and this is handled by the prompts class itself, as it should. 2002-03-05 Fernando Perez * IPython/Magic.py (Magic.magic_logstart): Changed @log to @logstart to avoid name clashes with the math log function. * Big updates to X/Emacs section of the manual. * Removed ipython_emacs. Milan explained to me how to pass arguments to ipython through Emacs. Some day I'm going to end up learning some lisp... 2002-03-04 Fernando Perez * IPython/ipython_emacs: Created script to be used as the py-python-command Emacs variable so we can pass IPython parameters. I can't figure out how to tell Emacs directly to pass parameters to IPython, so a dummy shell script will do it. Other enhancements made for things to work better under Emacs' various types of terminals. Many thanks to Milan Zamazal for all the suggestions and pointers. 2002-03-01 Fernando Perez * IPython/ipmaker.py (make_IPython): added a --readline! option so that loading of readline is now optional. This gives better control to emacs users. * IPython/ultraTB.py (__date__): Modified color escape sequences and now things work fine under xterm and in Emacs' term buffers (though not shell ones). Well, in emacs you get colors, but all seem to be 'light' colors (no difference between dark and light ones). But the garbage chars are gone, and also in xterms. It seems that now I'm using 'cleaner' ansi sequences. 2002-02-21 Fernando Perez * Released 0.2.7 (mainly to publish the scoping fix). * IPython/Logger.py (Logger.logstate): added. A corresponding @logstate magic was created. * IPython/Magic.py: fixed nested scoping problem under Python 2.1.x (automagic wasn't working). 2002-02-20 Fernando Perez * Released 0.2.6. * IPython/OutputTrap.py (OutputTrap.__init__): added a 'quiet' option so that logs can come out without any headers at all. * IPython/UserConfig/ipythonrc-scipy.py: created a profile for SciPy. * IPython/iplib.py (InteractiveShell.embed_mainloop): Changed so that embedded IPython calls don't require vars() to be explicitly passed. Now they are extracted from the caller's frame (code snatched from Eric Jones' weave). Added better documentation to the section on embedding and the example file. * IPython/genutils.py (page): Changed so that under emacs, it just prints the string. You can then page up and down in the emacs buffer itself. This is how the builtin help() works. * IPython/Prompts.py (CachedOutput.__call__): Fixed issue with macro scoping: macros need to be executed in the user's namespace to work as if they had been typed by the user. * IPython/Magic.py (Magic.magic_macro): Changed macros so they execute automatically (no need to type 'exec...'). They then behave like 'true macros'. The printing system was also modified for this to work. 2002-02-19 Fernando Perez * IPython/genutils.py (page_file): new function for paging files in an OS-independent way. Also necessary for file viewing to work well inside Emacs buffers. (page): Added checks for being in an emacs buffer. (page): fixed bug for Windows ($TERM isn't set in Windows). Fixed same bug in iplib. 2002-02-18 Fernando Perez * IPython/iplib.py (InteractiveShell.init_readline): modified use of readline so that IPython can work inside an Emacs buffer. * IPython/ultraTB.py (AutoFormattedTB.__call__): some fixes to method signatures (they weren't really bugs, but it looks cleaner and keeps PyChecker happy). * IPython/ipmaker.py (make_IPython): added hooks Struct to __IP for implementing various user-defined hooks. Currently only display is done. * IPython/Prompts.py (CachedOutput._display): changed display functions so that they can be dynamically changed by users easily. * IPython/Extensions/numeric_formats.py (num_display): added an extension for printing NumPy arrays in flexible manners. It doesn't do anything yet, but all the structure is in place. Ultimately the plan is to implement output format control like in Octave. * IPython/Magic.py (Magic.lsmagic): changed so that bound magic methods are found at run-time by all the automatic machinery. 2002-02-17 Fernando Perez * setup_Windows.py (make_shortcut): documented. Cleaned up the whole file a little. * ToDo: closed this document. Now there's a new_design.lyx document for all new ideas. Added making a pdf of it for the end-user distro. * IPython/Logger.py (Logger.switch_log): Created this to replace logon() and logoff(). It also fixes a nasty crash reported by Philip Hisley . Many thanks to him. * IPython/iplib.py (complete): got auto-completion to work with automagic (I had wanted this for a long time). * IPython/Magic.py (Magic.magic_files): Added @files as an alias to @file, since file() is now a builtin and clashes with automagic for @file. * Made some new files: Prompts, CrashHandler, Magic, Logger. All of this was previously in iplib, which had grown to more than 2000 lines, way too long. No new functionality, but it makes managing the code a bit easier. * IPython/iplib.py (IPythonCrashHandler.__call__): Added version information to crash reports. 2002-02-12 Fernando Perez * Released 0.2.5. 2002-02-11 Fernando Perez * Wrote a relatively complete Windows installer. It puts everything in place, creates Start Menu entries and fixes the color issues. Nothing fancy, but it works. 2002-02-10 Fernando Perez * IPython/iplib.py (InteractiveShell.safe_execfile): added an os.path.expanduser() call so that we can type @run ~/myfile.py and have thigs work as expected. * IPython/genutils.py (page): fixed exception handling so things work both in Unix and Windows correctly. Quitting a pager triggers an IOError/broken pipe in Unix, and in windows not finding a pager is also an IOError, so I had to actually look at the return value of the exception, not just the exception itself. Should be ok now. * IPython/ultraTB.py (ColorSchemeTable.set_active_scheme): modified to allow case-insensitive color scheme changes. 2002-02-09 Fernando Perez * IPython/genutils.py (native_line_ends): new function to leave user config files with os-native line-endings. * README and manual updates. * IPython/genutils.py: fixed unicode bug: use types.StringTypes instead of StringType to catch Unicode strings. * IPython/genutils.py (filefind): fixed bug for paths with embedded spaces (very common in Windows). * IPython/ipmaker.py (make_IPython): added a '.ini' to the rc files under Windows, so that they get automatically associated with a text editor. Windows makes it a pain to handle extension-less files. * IPython/iplib.py (InteractiveShell.init_readline): Made the warning about readline only occur for Posix. In Windows there's no way to get readline, so why bother with the warning. * IPython/Struct.py (Struct.__str__): fixed to use self.__dict__ for __str__ instead of dir(self), since dir() changed in 2.2. * Ported to Windows! Tested on XP, I suspect it should work fine on NT/2000, but I don't think it will work on 98 et al. That series of Windows is such a piece of junk anyway that I won't try porting it there. The XP port was straightforward, showed a few bugs here and there (fixed all), in particular some string handling stuff which required considering Unicode strings (which Windows uses). This is good, but hasn't been too tested :) No fancy installer yet, I'll put a note in the manual so people at least make manually a shortcut. * IPython/iplib.py (Magic.magic_colors): Unified the color options into a single one, "colors". This now controls both prompt and exception color schemes, and can be changed both at startup (either via command-line switches or via ipythonrc files) and at runtime, with @colors. (Magic.magic_run): renamed @prun to @run and removed the old @run. The two were too similar to warrant keeping both. 2002-02-03 Fernando Perez * IPython/iplib.py (install_first_time): Added comment on how to configure the color options for first-time users. Put a request at the end so that small-terminal users get a chance to read the startup info. 2002-01-23 Fernando Perez * IPython/iplib.py (CachedOutput.update): Changed output memory variable names from _o,_oo,_ooo,_o to simply _,__,___,_. For input history we still use _i. Did this b/c these variable are very commonly used in interactive work, so the less we need to type the better off we are. (Magic.magic_prun): updated @prun to better handle the namespaces the file will run in, including a fix for __name__ not being set before. 2002-01-20 Fernando Perez * IPython/ultraTB.py (VerboseTB.linereader): Fixed printing of extra garbage for Python 2.2. Need to look more carefully into this later. 2002-01-19 Fernando Perez * IPython/iplib.py (InteractiveShell.showtraceback): fixed to display SyntaxError exceptions properly formatted when they occur (they can be triggered by imported code). 2002-01-18 Fernando Perez * IPython/iplib.py (InteractiveShell.safe_execfile): now SyntaxError exceptions are reported nicely formatted, instead of spitting out only offset information as before. (Magic.magic_prun): Added the @prun function for executing programs with command line args inside IPython. 2002-01-16 Fernando Perez * IPython/iplib.py (Magic.magic_hist): Changed @hist and @dhist to *not* include the last item given in a range. This brings their behavior in line with Python's slicing: a[n1:n2] -> a[n1]...a[n2-1] It may be a bit less convenient, but I prefer to stick to Python's conventions *everywhere*, so users never have to wonder. (Magic.magic_macro): Added @macro function to ease the creation of macros. 2002-01-05 Fernando Perez * Released 0.2.4. * IPython/iplib.py (Magic.magic_pdef): (InteractiveShell.safe_execfile): report magic lines and error lines without line numbers so one can easily copy/paste them for re-execution. * Updated manual with recent changes. * IPython/iplib.py (Magic.magic_oinfo): added constructor docstring printing when class? is called. Very handy for knowing how to create class instances (as long as __init__ is well documented, of course :) (Magic.magic_doc): print both class and constructor docstrings. (Magic.magic_pdef): give constructor info if passed a class and __call__ info for callable object instances. 2002-01-04 Fernando Perez * Made deep_reload() off by default. It doesn't always work exactly as intended, so it's probably safer to have it off. It's still available as dreload() anyway, so nothing is lost. 2002-01-02 Fernando Perez * Released 0.2.3 (contacted R.Singh at CU about biopython course, so I wanted an updated release). 2001-12-27 Fernando Perez * IPython/iplib.py (InteractiveShell.interact): Added the original code from 'code.py' for this module in order to change the handling of a KeyboardInterrupt. This was necessary b/c otherwise the history cache would break when the user hit Ctrl-C, and interact() offers no way to add any hooks to it. 2001-12-23 Fernando Perez * setup.py: added check for 'MANIFEST' before trying to remove it. Thanks to Sean Reifschneider. 2001-12-22 Fernando Perez * Released 0.2.2. * Finished (reasonably) writing the manual. Later will add the python-standard navigation stylesheets, but for the time being it's fairly complete. Distribution will include html and pdf versions. * Bugfix: '.' wasn't being added to sys.path. Thanks to Prabhu (MayaVi author). 2001-12-21 Fernando Perez * Released 0.2.1. Barring any nasty bugs, this is it as far as a good public release, I think (with the manual and the distutils installer). The manual can use some work, but that can go slowly. Otherwise I think it's quite nice for end users. Next summer, rewrite the guts of it... * Changed format of ipythonrc files to use whitespace as the separator instead of an explicit '='. Cleaner. 2001-12-20 Fernando Perez * Started a manual in LyX. For now it's just a quick merge of the various internal docstrings and READMEs. Later it may grow into a nice, full-blown manual. * Set up a distutils based installer. Installation should now be trivially simple for end-users. 2001-12-11 Fernando Perez * Released 0.2.0. First public release, announced it at comp.lang.python. From now on, just bugfixes... * Went through all the files, set copyright/license notices and cleaned up things. Ready for release. 2001-12-10 Fernando Perez * Changed the first-time installer not to use tarfiles. It's more robust now and less unix-dependent. Also makes it easier for people to later upgrade versions. * Changed @exit to @abort to reflect the fact that it's pretty brutal (a sys.exit()). The difference between @abort and Ctrl-D becomes significant only when IPyhton is embedded: in that case, C-D closes IPython only, but @abort kills the enclosing program too (unless it had called IPython inside a try catching SystemExit). * Created Shell module which exposes the actuall IPython Shell classes, currently the normal and the embeddable one. This at least offers a stable interface we won't need to change when (later) the internals are rewritten. That rewrite will be confined to iplib and ipmaker, but the Shell interface should remain as is. * Added embed module which offers an embeddable IPShell object, useful to fire up IPython *inside* a running program. Great for debugging or dynamical data analysis. 2001-12-08 Fernando Perez * Fixed small bug preventing seeing info from methods of defined objects (incorrect namespace in _ofind()). * Documentation cleanup. Moved the main usage docstrings to a separate file, usage.py (cleaner to maintain, and hopefully in the future some perlpod-like way of producing interactive, man and html docs out of it will be found). * Added @profile to see your profile at any time. * Added @p as an alias for 'print'. It's especially convenient if using automagic ('p x' prints x). * Small cleanups and fixes after a pychecker run. * Changed the @cd command to handle @cd - and @cd - for visiting any directory in _dh. * Introduced _dh, a history of visited directories. @dhist prints it out with numbers. 2001-12-07 Fernando Perez * Released 0.1.22 * Made initialization a bit more robust against invalid color options in user input (exit, not traceback-crash). * Changed the bug crash reporter to write the report only in the user's .ipython directory. That way IPython won't litter people's hard disks with crash files all over the place. Also print on screen the necessary mail command. * With the new ultraTB, implemented LightBG color scheme for light background terminals. A lot of people like white backgrounds, so I guess we should at least give them something readable. 2001-12-06 Fernando Perez * Modified the structure of ultraTB. Now there's a proper class for tables of color schemes which allow adding schemes easily and switching the active scheme without creating a new instance every time (which was ridiculous). The syntax for creating new schemes is also cleaner. I think ultraTB is finally done, with a clean class structure. Names are also much cleaner (now there's proper color tables, no need for every variable to also have 'color' in its name). * Broke down genutils into separate files. Now genutils only contains utility functions, and classes have been moved to their own files (they had enough independent functionality to warrant it): ConfigLoader, OutputTrap, Struct. 2001-12-05 Fernando Perez * IPython turns 21! Released version 0.1.21, as a candidate for public consumption. If all goes well, release in a few days. * Fixed path bug (files in Extensions/ directory wouldn't be found unless IPython/ was explicitly in sys.path). * Extended the FlexCompleter class as MagicCompleter to allow completion of @-starting lines. * Created __release__.py file as a central repository for release info that other files can read from. * Fixed small bug in logging: when logging was turned on in mid-session, old lines with special meanings (!@?) were being logged without the prepended comment, which is necessary since they are not truly valid python syntax. This should make session restores produce less errors. * The namespace cleanup forced me to make a FlexCompleter class which is nothing but a ripoff of rlcompleter, but with selectable namespace (rlcompleter only works in __main__.__dict__). I'll try to submit a note to the authors to see if this change can be incorporated in future rlcompleter releases (Dec.6: done) * More fixes to namespace handling. It was a mess! Now all explicit references to __main__.__dict__ are gone (except when really needed) and everything is handled through the namespace dicts in the IPython instance. We seem to be getting somewhere with this, finally... * Small documentation updates. * Created the Extensions directory under IPython (with an __init__.py). Put the PhysicalQ stuff there. This directory should be used for all special-purpose extensions. * File renaming: ipythonlib --> ipmaker ipplib --> iplib This makes a bit more sense in terms of what these files actually do. * Moved all the classes and functions in ipythonlib to ipplib, so now ipythonlib only has make_IPython(). This will ease up its splitting in smaller functional chunks later. * Cleaned up (done, I think) output of @whos. Better column formatting, and now shows str(var) for as much as it can, which is typically what one gets with a 'print var'. 2001-12-04 Fernando Perez * Fixed namespace problems. Now builtin/IPyhton/user names get properly reported in their namespace. Internal namespace handling is finally getting decent (not perfect yet, but much better than the ad-hoc mess we had). * Removed -exit option. If people just want to run a python script, that's what the normal interpreter is for. Less unnecessary options, less chances for bugs. * Added a crash handler which generates a complete post-mortem if IPython crashes. This will help a lot in tracking bugs down the road. * Fixed nasty bug in auto-evaluation part of prefilter(). Names which were boud to functions being reassigned would bypass the logger, breaking the sync of _il with the prompt counter. This would then crash IPython later when a new line was logged. 2001-12-02 Fernando Perez * Made IPython a package. This means people don't have to clutter their sys.path with yet another directory. Changed the INSTALL file accordingly. * Cleaned up the output of @who_ls, @who and @whos. @who_ls now sorts its output (so @who shows it sorted) and @whos formats the table according to the width of the first column. Nicer, easier to read. Todo: write a generic table_format() which takes a list of lists and prints it nicely formatted, with optional row/column separators and proper padding and justification. * Released 0.1.20 * Fixed bug in @log which would reverse the inputcache list (a copy operation was missing). * Code cleanup. @config was changed to use page(). Better, since its output is always quite long. * Itpl is back as a dependency. I was having too many problems getting the parametric aliases to work reliably, and it's just easier to code weird string operations with it than playing %()s games. It's only ~6k, so I don't think it's too big a deal. * Found (and fixed) a very nasty bug with history. !lines weren't getting cached, and the out of sync caches would crash IPython. Fixed it by reorganizing the prefilter/handlers/logger division of labor a bit better. Bug fixed, cleaner structure. 2001-12-01 Fernando Perez * Released 0.1.19 * Added option -n to @hist to prevent line number printing. Much easier to copy/paste code this way. * Created global _il to hold the input list. Allows easy re-execution of blocks of code by slicing it (inspired by Janko's comment on 'macros'). * Small fixes and doc updates. * Rewrote @history function (was @h). Renamed it to @hist, @h is much too fragile with automagic. Handles properly multi-line statements and takes parameters. 2001-11-30 Fernando Perez * Version 0.1.18 released. * Fixed nasty namespace bug in initial module imports. * Added copyright/license notes to all code files (except DPyGetOpt). For the time being, LGPL. That could change. * Rewrote a much nicer README, updated INSTALL, cleaned up ipythonrc-* samples. * Overall code/documentation cleanup. Basically ready for release. Only remaining thing: licence decision (LGPL?). * Converted load_config to a class, ConfigLoader. Now recursion control is better organized. Doesn't include the same file twice. 2001-11-29 Fernando Perez * Got input history working. Changed output history variables from _p to _o so that _i is for input and _o for output. Just cleaner convention. * Implemented parametric aliases. This pretty much allows the alias system to offer full-blown shell convenience, I think. * Version 0.1.17 released, 0.1.18 opened. * dot_ipython/ipythonrc (alias): added documentation. (xcolor): Fixed small bug (xcolors -> xcolor) * Changed the alias system. Now alias is a magic command to define aliases just like the shell. Rationale: the builtin magics should be there for things deeply connected to IPython's architecture. And this is a much lighter system for what I think is the really important feature: allowing users to define quickly magics that will do shell things for them, so they can customize IPython easily to match their work habits. If someone is really desperate to have another name for a builtin alias, they can always use __IP.magic_newname = __IP.magic_oldname. Hackish but works. 2001-11-28 Fernando Perez * Changed @file so that it opens the source file at the proper line. Since it uses less, if your EDITOR environment is configured, typing v will immediately open your editor of choice right at the line where the object is defined. Not as quick as having a direct @edit command, but for all intents and purposes it works. And I don't have to worry about writing @edit to deal with all the editors, less does that. * Version 0.1.16 released, 0.1.17 opened. * Fixed some nasty bugs in the page/page_dumb combo that could crash IPython. 2001-11-27 Fernando Perez * Version 0.1.15 released, 0.1.16 opened. * Finally got ? and ?? to work for undefined things: now it's possible to type {}.get? and get information about the get method of dicts, or os.path? even if only os is defined (so technically os.path isn't). Works at any level. For example, after import os, os?, os.path?, os.path.abspath? all work. This is great, took some work in _ofind. * Fixed more bugs with logging. The sanest way to do it was to add to @log a 'mode' parameter. Killed two in one shot (this mode option was a request of Janko's). I think it's finally clean (famous last words). * Added a page_dumb() pager which does a decent job of paging on screen, if better things (like less) aren't available. One less unix dependency (someday maybe somebody will port this to windows). * Fixed problem in magic_log: would lock of logging out if log creation failed (because it would still think it had succeeded). * Improved the page() function using curses to auto-detect screen size. Now it can make a much better decision on whether to print or page a string. Option screen_length was modified: a value 0 means auto-detect, and that's the default now. * Version 0.1.14 released, 0.1.15 opened. I think this is ready to go out. I'll test it for a few days, then talk to Janko about licences and announce it. * Fixed the length of the auto-generated ---> prompt which appears for auto-parens and auto-quotes. Getting this right isn't trivial, with all the color escapes, different prompt types and optional separators. But it seems to be working in all the combinations. 2001-11-26 Fernando Perez * Wrote a regexp filter to get option types from the option names string. This eliminates the need to manually keep two duplicate lists. * Removed the unneeded check_option_names. Now options are handled in a much saner manner and it's easy to visually check that things are ok. * Updated version numbers on all files I modified to carry a notice so Janko and Nathan have clear version markers. * Updated docstring for ultraTB with my changes. I should send this to Nathan. * Lots of small fixes. Ran everything through pychecker again. * Made loading of deep_reload an cmd line option. If it's not too kosher, now people can just disable it. With -nodeep_reload it's still available as dreload(), it just won't overwrite reload(). * Moved many options to the no| form (-opt and -noopt accepted). Cleaner. * Changed magic_log so that if called with no parameters, it uses 'rotate' mode. That way auto-generated logs aren't automatically over-written. For normal logs, now a backup is made if it exists (only 1 level of backups). A new 'backup' mode was added to the Logger class to support this. This was a request by Janko. * Added @logoff/@logon to stop/restart an active log. * Fixed a lot of bugs in log saving/replay. It was pretty broken. Now special lines (!@,/) appear properly in the command history after a log replay. * Tried and failed to implement full session saving via pickle. My idea was to pickle __main__.__dict__, but modules can't be pickled. This would be a better alternative to replaying logs, but seems quite tricky to get to work. Changed -session to be called -logplay, which more accurately reflects what it does. And if we ever get real session saving working, -session is now available. * Implemented color schemes for prompts also. As for tracebacks, currently only NoColor and Linux are supported. But now the infrastructure is in place, based on a generic ColorScheme class. So writing and activating new schemes both for the prompts and the tracebacks should be straightforward. * Version 0.1.13 released, 0.1.14 opened. * Changed handling of options for output cache. Now counter is hardwired starting at 1 and one specifies the maximum number of entries *in the outcache* (not the max prompt counter). This is much better, since many statements won't increase the cache count. It also eliminated some confusing options, now there's only one: cache_size. * Added 'alias' magic function and magic_alias option in the ipythonrc file. Now the user can easily define whatever names he wants for the magic functions without having to play weird namespace games. This gives IPython a real shell-like feel. * Fixed doc/?/?? for magics. Now all work, in all forms (explicit @ or not). This was one of the last remaining 'visible' bugs (that I know of). I think if I can clean up the session loading so it works 100% I'll release a 0.2.0 version on c.p.l (talk to Janko first about licensing). 2001-11-25 Fernando Perez * Rewrote somewhat oinfo (?/??). Nicer, now uses page() and there's a cleaner distinction between what ? and ?? show. * Added screen_length option. Now the user can define his own screen size for page() operations. * Implemented magic shell-like functions with automatic code generation. Now adding another function is just a matter of adding an entry to a dict, and the function is dynamically generated at run-time. Python has some really cool features! * Renamed many options to cleanup conventions a little. Now all are lowercase, and only underscores where needed. Also in the code option name tables are clearer. * Changed prompts a little. Now input is 'In [n]:' instead of 'In[n]:='. This allows it the numbers to be aligned with the Out[n] numbers, and removes usage of ':=' which doesn't exist in Python (it was a Mathematica thing). The '...' continuation prompt was also changed a little to align better. * Fixed bug when flushing output cache. Not all _p variables exist, so their deletion needs to be wrapped in a try: * Figured out how to properly use inspect.formatargspec() (it requires the args preceded by *). So I removed all the code from _get_pdef in Magic, which was just replicating that. * Added test to prefilter to allow redefining magic function names as variables. This is ok, since the @ form is always available, but whe should allow the user to define a variable called 'ls' if he needs it. * Moved the ToDo information from README into a separate ToDo. * General code cleanup and small bugfixes. I think it's close to a state where it can be released, obviously with a big 'beta' warning on it. * Got the magic function split to work. Now all magics are defined in a separate class. It just organizes things a bit, and now Xemacs behaves nicer (it was choking on InteractiveShell b/c it was too long). * Changed @clear to @reset to avoid potential confusions with the shell command clear. Also renamed @cl to @clear, which does exactly what people expect it to from their shell experience. Added a check to the @reset command (since it's so destructive, it's probably a good idea to ask for confirmation). But now reset only works for full namespace resetting. Since the del keyword is already there for deleting a few specific variables, I don't see the point of having a redundant magic function for the same task. 2001-11-24 Fernando Perez * Updated the builtin docs (esp. the ? ones). * Ran all the code through pychecker. Not terribly impressed with it: lots of spurious warnings and didn't really find anything of substance (just a few modules being imported and not used). * Implemented the new ultraTB functionality into IPython. New option: xcolors. This chooses color scheme. xmode now only selects between Plain and Verbose. Better orthogonality. * Large rewrite of ultraTB. Much cleaner now, with a separation of mode and color scheme for the exception handlers. Now it's possible to have the verbose traceback with no coloring. 2001-11-23 Fernando Perez * Version 0.1.12 released, 0.1.13 opened. * Removed option to set auto-quote and auto-paren escapes by user. The chances of breaking valid syntax are just too high. If someone *really* wants, they can always dig into the code. * Made prompt separators configurable. 2001-11-22 Fernando Perez * Small bugfixes in many places. * Removed the MyCompleter class from ipplib. It seemed redundant with the C-p,C-n history search functionality. Less code to maintain. * Moved all the original ipython.py code into ipythonlib.py. Right now it's just one big dump into a function called make_IPython, so no real modularity has been gained. But at least it makes the wrapper script tiny, and since ipythonlib is a module, it gets compiled and startup is much faster. This is a reasobably 'deep' change, so we should test it for a while without messing too much more with the code. 2001-11-21 Fernando Perez * Version 0.1.11 released, 0.1.12 opened for further work. * Removed dependency on Itpl. It was only needed in one place. It would be nice if this became part of python, though. It makes life *a lot* easier in some cases. * Simplified the prefilter code a bit. Now all handlers are expected to explicitly return a value (at least a blank string). * Heavy edits in ipplib. Removed the help system altogether. Now obj?/?? is used for inspecting objects, a magic @doc prints docstrings, and full-blown Python help is accessed via the 'help' keyword. This cleans up a lot of code (less to maintain) and does the job. Since 'help' is now a standard Python component, might as well use it and remove duplicate functionality. Also removed the option to use ipplib as a standalone program. By now it's too dependent on other parts of IPython to function alone. * Fixed bug in genutils.pager. It would crash if the pager was exited immediately after opening (broken pipe). * Trimmed down the VerboseTB reporting a little. The header is much shorter now and the repeated exception arguments at the end have been removed. For interactive use the old header seemed a bit excessive. * Fixed small bug in output of @whos for variables with multi-word types (only first word was displayed). 2001-11-17 Fernando Perez * Version 0.1.10 released, 0.1.11 opened for further work. * Modified dirs and friends. dirs now *returns* the stack (not prints), so one can manipulate it as a variable. Convenient to travel along many directories. * Fixed bug in magic_pdef: would only work with functions with arguments with default values. 2001-11-14 Fernando Perez * Added the PhysicsInput stuff to dot_ipython so it ships as an example with IPython. Various other minor fixes and cleanups. * Version 0.1.9 released, 0.1.10 opened for further work. * Added sys.path to the list of directories searched in the execfile= option. It used to be the current directory and the user's IPYTHONDIR only. 2001-11-13 Fernando Perez * Reinstated the raw_input/prefilter separation that Janko had initially. This gives a more convenient setup for extending the pre-processor from the outside: raw_input always gets a string, and prefilter has to process it. We can then redefine prefilter from the outside and implement extensions for special purposes. Today I got one for inputting PhysicalQuantity objects (from Scientific) without needing any function calls at all. Extremely convenient, and it's all done as a user-level extension (no IPython code was touched). Now instead of: a = PhysicalQuantity(4.2,'m/s**2') one can simply say a = 4.2 m/s**2 or even a = 4.2 m/s^2 I use this, but it's also a proof of concept: IPython really is fully user-extensible, even at the level of the parsing of the command line. It's not trivial, but it's perfectly doable. * Added 'add_flip' method to inclusion conflict resolver. Fixes the problem of modules being loaded in the inverse order in which they were defined in * Version 0.1.8 released, 0.1.9 opened for further work. * Added magics pdef, source and file. They respectively show the definition line ('prototype' in C), source code and full python file for any callable object. The object inspector oinfo uses these to show the same information. * Version 0.1.7 released, 0.1.8 opened for further work. * Separated all the magic functions into a class called Magic. The InteractiveShell class was becoming too big for Xemacs to handle (de-indenting a line would lock it up for 10 seconds while it backtracked on the whole class!) FIXME: didn't work. It can be done, but right now namespaces are all messed up. Do it later (reverted it for now, so at least everything works as before). * Got the object introspection system (magic_oinfo) working! I think this is pretty much ready for release to Janko, so he can test it for a while and then announce it. Pretty much 100% of what I wanted for the 'phase 1' release is ready. Happy, tired. 2001-11-12 Fernando Perez * Version 0.1.6 released, 0.1.7 opened for further work. * Fixed bug in printing: it used to test for truth before printing, so 0 wouldn't print. Now checks for None. * Fixed bug where auto-execs increase the prompt counter by 2 (b/c they have to call len(str(sys.ps1)) ). But the fix is ugly, it reaches by hand into the outputcache. Think of a better way to do this later. * Various small fixes thanks to Nathan's comments. * Changed magic_pprint to magic_Pprint. This way it doesn't collide with pprint() and the name is consistent with the command line option. * Changed prompt counter behavior to be fully like Mathematica's. That is, even input that doesn't return a result raises the prompt counter. The old behavior was kind of confusing (getting the same prompt number several times if the operation didn't return a result). * Fixed Nathan's last name in a couple of places (Gray, not Graham). * Fixed -Classic mode (wasn't working anymore). * Added colored prompts using Nathan's new code. Colors are currently hardwired, they can be user-configurable. For developers, they can be chosen in file ipythonlib.py, at the beginning of the CachedOutput class def. 2001-11-11 Fernando Perez * Version 0.1.5 released, 0.1.6 opened for further work. * Changed magic_env to *return* the environment as a dict (not to print it). This way it prints, but it can also be processed. * Added Verbose exception reporting to interactive exceptions. Very nice, now even 1/0 at the prompt gives a verbose traceback. Had to make some changes to the ultraTB file. This is probably the last 'big' thing in my mental todo list. This ties in with the next entry: * Changed -Xi and -Xf to a single -xmode option. Now all the user has to specify is Plain, Color or Verbose for all exception handling. * Removed ShellServices option. All this can really be done via the magic system. It's easier to extend, cleaner and has automatic namespace protection and documentation. 2001-11-09 Fernando Perez * Fixed bug in output cache flushing (missing parameter to __init__). Other small bugs fixed (found using pychecker). * Version 0.1.4 opened for bugfixing. 2001-11-07 Fernando Perez * Version 0.1.3 released, mainly because of the raw_input bug. * Fixed NASTY bug in raw_input: input line wasn't properly parsed and when testing for whether things were callable, a call could actually be made to certain functions. They would get called again once 'really' executed, with a resulting double call. A disaster in many cases (list.reverse() would never work!). * Removed prefilter() function, moved its code to raw_input (which after all was just a near-empty caller for prefilter). This saves a function call on every prompt, and simplifies the class a tiny bit. * Fix _ip to __ip name in magic example file. * Changed 'tar -x -f' to 'tar xvf' in auto-installer. This should work with non-gnu versions of tar. 2001-11-06 Fernando Perez * Version 0.1.2. Just to keep track of the recent changes. * Fixed nasty bug in output prompt routine. It used to check 'if arg != None...'. Problem is, this fails if arg implements a special comparison (__cmp__) which disallows comparing to None. Found it when trying to use the PhysicalQuantity module from ScientificPython. 2001-11-05 Fernando Perez * Also added dirs. Now the pushd/popd/dirs family functions basically like the shell, with the added convenience of going home when called with no args. * pushd/popd slightly modified to mimic shell behavior more closely. * Added env,pushd,popd from ShellServices as magic functions. I think the cleanest will be to port all desired functions from ShellServices as magics and remove ShellServices altogether. This will provide a single, clean way of adding functionality (shell-type or otherwise) to IP. 2001-11-04 Fernando Perez * Added .ipython/ directory to sys.path. This way users can keep customizations there and access them via import. 2001-11-03 Fernando Perez * Opened version 0.1.1 for new changes. * Changed version number to 0.1.0: first 'public' release, sent to Nathan and Janko. * Lots of small fixes and tweaks. * Minor changes to whos format. Now strings are shown, snipped if too long. * Changed ShellServices to work on __main__ so they show up in @who * Help also works with ? at the end of a line: ?sin and sin? both produce the same effect. This is nice, as often I use the tab-complete to find the name of a method, but I used to then have to go to the beginning of the line to put a ? if I wanted more info. Now I can just add the ? and hit return. Convenient. 2001-11-02 Fernando Perez * Python version check (>=2.1) added. * Added LazyPython documentation. At this point the docs are quite a mess. A cleanup is in order. * Auto-installer created. For some bizarre reason, the zipfiles module isn't working on my system. So I made a tar version (hopefully the command line options in various systems won't kill me). * Fixes to Struct in genutils. Now all dictionary-like methods are protected (reasonably). * Added pager function to genutils and changed ? to print usage note through it (it was too long). * Added the LazyPython functionality. Works great! I changed the auto-quote escape to ';', it's on home row and next to '. But both auto-quote and auto-paren (still /) escapes are command-line parameters. 2001-11-01 Fernando Perez * Version changed to 0.0.7. Fairly large change: configuration now is all stored in a directory, by default .ipython. There, all config files have normal looking names (not .names) * Version 0.0.6 Released first to Lucas and Archie as a test run. Since it's the first 'semi-public' release, change version to > 0.0.6 for any changes now. * Stuff I had put in the ipplib.py changelog: Changes to InteractiveShell: - Made the usage message a parameter. - Require the name of the shell variable to be given. It's a bit of a hack, but allows the name 'shell' not to be hardwire in the magic (@) handler, which is problematic b/c it requires polluting the global namespace with 'shell'. This in turn is fragile: if a user redefines a variable called shell, things break. - magic @: all functions available through @ need to be defined as magic_, even though they can be called simply as @. This allows the special command @magic to gather information automatically about all existing magic functions, even if they are run-time user extensions, by parsing the shell instance __dict__ looking for special magic_ names. - mainloop: added *two* local namespace parameters. This allows the class to differentiate between parameters which were there before and after command line initialization was processed. This way, later @who can show things loaded at startup by the user. This trick was necessary to make session saving/reloading really work: ideally after saving/exiting/reloading a session, *everythin* should look the same, including the output of @who. I was only able to make this work with this double namespace trick. - added a header to the logfile which allows (almost) full session restoring. - prepend lines beginning with @ or !, with a and log them. Why? !lines: may be useful to know what you did @lines: they may affect session state. So when restoring a session, at least inform the user of their presence. I couldn't quite get them to properly re-execute, but at least the user is warned. * Started ChangeLog.