1 0.9.4 (1/25/2004 to //2004)
 
   2 ------------------------------
 
   4 Removed wxd decorators in favor of new SWIG-generated docstrings.
 
   6 Removed docs tabs from crust interface:
 
  10 Fixed Calltip tab refresh problem on Windows.
 
  12 shell.autoCompleteAutoHide added with default of False.
 
  14 Changed default namespace of Shell to __main__.__dict__, instead of an
 
  18 0.9.3 (9/25/2003 to 1/24/2004)
 
  19 ------------------------------
 
  21 Fun and games with dynamic renaming.  Details of any other changes
 
  22 were lost in the confusion.  I'll try to do better in the future.
 
  25 0.9.2 (5/3/2003 to 9/25/2003)
 
  26 -----------------------------
 
  28 Changed to the new prefix-less "wx" package::
 
  34     from wxPython import wx
 
  36 Fixed typo in ``PyWrap.py``::
 
  38     if __name__ == '__main__':
 
  43     if __name__ == '__main__':
 
  46 Added pretty-print Display tab to Crust, based on suggestion from
 
  49 Improved ``Can*`` checks in ``EditWindow``, since STC is too lenient,
 
  50 particularly when it is set to read-only but returns True for
 
  51 CanPaste() (seems like an STC bug to me)::
 
  54         """Return True if text is selected and can be copied."""
 
  55         return self.GetSelectionStart() != self.GetSelectionEnd()
 
  58         """Return True if text is selected and can be cut."""
 
  59         return self.CanCopy() and self.CanEdit()
 
  62         """Return True if editing should succeed."""
 
  63         return not self.GetReadOnly()
 
  66         """Return True if pasting should succeed."""
 
  67         return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit()
 
  70 0.9.1 (3/21/2003 to 5/2/2003)
 
  71 -----------------------------
 
  73 PyCrust is dead!  Long live Py!
 
  75 * Renamed ``PyCrust`` package to ``py``.
 
  76 * Moved code to wxPython's CVS repository.
 
  78 Fixed bug in ``introspect.py`` on introspecting objects occurring
 
  79 immediately after a secondary prompt, like this::
 
  82     >>> for n in range(3):
 
  83     ...     l.  <-- failed to popup autocomplete list
 
  85 Added documentation files:
 
  90 * wxPythonExamples.txt
 
  92 Added PyAlaMode and PyAlaCarte code editors.
 
  94 Major refactoring to support ``editor`` and ``shell`` from the same
 
  97 Renamed program files:
 
  99 * ``PyCrustApp.py`` to ``PyCrust.py``
 
 100 * ``PyFillingApp.py`` to ``PyFilling.py``
 
 101 * ``PyShellApp.py`` to ``PyShell.py``
 
 102 * ``wrap.py`` to ``PyWrap.py``
 
 104 Removed disabling of autocomplete for lists of 2000 items or more.
 
 105 The current implementation of wxSTC can now handle lists this big.
 
 107 Improved handling of ``sys.path`` to mimic the standard Python shell.
 
 110 0.9 (2/27/2003 to 3/20/2003)
 
 111 ----------------------------
 
 113 Added fontIncrease, fontDecrease, fontDefault signals, receivers and
 
 116     Ctrl+]            Increase font size.
 
 117     Ctrl+[            Decrease font size.
 
 118     Ctrl+=            Default font size.
 
 120 Continued enhancement of the decorator capability to provide better
 
 121 documentation and docstrings for wxPython classes and functions.
 
 123 Introduced new tabbed interface:
 
 132 ``Filling.tree`` now expands tuples as well as lists.  (It should have
 
 133 done this all along, I just never noticed this omission before.)
 
 135 Added this True/False test to all modules::
 
 143 Added ``wxd`` directory with decoration classes.
 
 146 0.8.2 (1/5/2003 to 2/26/2003)
 
 147 -----------------------------
 
 149 Wrapped ``sys.ps1``, ``sys.ps2``, and ``sys.ps3`` in ``str()``.
 
 150 (Thanks, Kieran Holland.)
 
 152 Fixed minor things found by PyChecker.
 
 154 Changed locals to use ``__main__.__dict__`` and added code to clean up
 
 155 the namespace, making it as close to the regular Python environment as
 
 156 possible.  This solves the problem of pickling and unpickling
 
 157 instances of classes defined in the shell.
 
 159 Made ``shell.PasteAndRun()`` a little more forgiving when it finds a
 
 160 ps2 prompt line with no trailing space, such when you copy code from a
 
 163 Improved autocomplete behavior by adding these to shell::
 
 165     self.AutoCompSetAutoHide(False)
 
 166     self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
 
 168 Added ``decor`` directory, ``decorator.py``, ``stcDecor.py``, and
 
 169 ``stcConstants.py``.  These all serve the purpose of adding docstrings
 
 170 to existing wxPython classes, in particular the ``wxStyledTextCtrl``.
 
 172 Added ``wrap.py``, a command line utility for running a wxPython app
 
 173 with additional runtime-tools loaded, such as PyCrust (the only tool
 
 176 Flushed the clipboard Cut/Copy operations so that selections will
 
 177 exist in the clipboard even after PyCrust has been closed.
 
 179 Improved the suppression of docstrings for simple data types appearing
 
 180 in the namespace viewer.
 
 182 Better handling of autocompletion with numeric types; no
 
 183 autocompletion when typing a dot after an integer.  If the
 
 184 autocompletion is desired, type a space before the dot::
 
 188 More Filling!!! The namespace tree is now dynamically updated.
 
 191 0.8.1 (12/20/2002 to 12/25/2002)
 
 192 --------------------------------
 
 194 Improved keyboard handling with Autocomplete active.  You can now use
 
 195 Enter as well as Tab to select an item from the list.
 
 197 Disabled autocomplete for lists of 2000 items or more.  The current
 
 198 implementation of wxSTC can't handle lists this big.
 
 200 Changed ``filling`` to always display docstrings for objects.  This is
 
 201 useful for objects whose docstrings have been decorated, rather than
 
 202 coming directly from the source code.  (Hmmm.  Sounds like someone is
 
 203 doing some decorating.  I wonder where that would be helpful? <wink>)
 
 205 Fixed handling of icon.  Added ``images.py`` file.
 
 208 0.8 (10/29/2002 to 12/16/2002)
 
 209 ------------------------------
 
 211 Added "help" to startup banner info.
 
 213 Made all ``wx`` and ``stc`` imports explicit.  No more ``import *``.
 
 215 Replaced use of the ``wx`` module's ``true`` and ``false`` with
 
 216 Python's ``True`` and ``False``.
 
 218 Changed ``introspect.getRoot()`` to use ``tokenize`` module.  This
 
 219 does a slightly better job than the previous parsing routine and the
 
 222 Improved handling of whitespace and empty types during introspection.
 
 224 Fixed cut/copy clipboard problem under Linux.  (Robin Dunn rocks!!!)
 
 226 Added shell.about() which works like this::
 
 231     Interpreter Revision: 1.15
 
 232     Python Version: 2.2.2
 
 233     wxPython Version: 2.3.3.1
 
 236 Added copy plus and paste plus to shell menu.
 
 238 Moved shell menu from ``shell.py`` to ``shellmenu.py``.
 
 240 Added ``sys.stdin.readlines()`` support.
 
 242 Added ``time.sleep()`` in ``readline()`` and ``OnIdle()`` event
 
 243 handler to free up the CPU.
 
 246 0.7.2 (2/22/2002 to 8/27/2002)
 
 247 ------------------------------
 
 249 Tweaked ``getAttributeNames()`` to pick up a few more attributes::
 
 251     '__bases__', '__class__', '__dict__', '__name__', 'func_closure',
 
 252     'func_code', 'func_defaults', 'func_dict', 'func_doc',
 
 253     'func_globals', 'func_name'
 
 255 Added a tests directory and unit tests.
 
 257 Improved support for empty types in the shell: ``[]``, ``()`` and
 
 258 ``{}`` as far as when call tips and autocompletion are available.
 
 260 Added support for the other triple string - ``''''''``.
 
 262 Refactored ``introspect.py`` to improve testability.
 
 264 Improved call tips for unbound methods by leaving the "self"
 
 265 parameter, since unbound methods require an instance be passed.
 
 267 Fixed call tip bug where a tip was displayed when a "(" was typed
 
 268 after an object that wasn't callable.
 
 270 Fixed ``getAllAttributeNames`` when ``str(object)`` fails.
 
 272 Added brace highlighting.  (Thank you, Kevin Altis.)
 
 274 Fixed problem displaying unicode objects in ``PyFilling``.
 
 276 Changed how ``filling.py`` checks for expandable objects.  Lists are
 
 277 now expandable objects.
 
 279 Made the key handling more robust when there is an active text
 
 280 selection that includes text prior to the last primary prompt.  Thanks
 
 281 to Raul Cota for pointing this out.
 
 283 Fixed wxSTC problem with brace highlighting and non-us keyboards.
 
 284 (Thank you for the patch, Jean-Michel Fauth.)
 
 286 Added ``busy = wxBusyCursor()`` to key points in ``shell`` and
 
 289 Added ``OnCloseWindow`` handler to ``ShellFrame`` and ``CrustFrame``.
 
 291 Default to ``SetWrapMode(1)`` for shell and namespace viewer.
 
 293 Added ``shell.wrap()`` and ``shell.zoom()``.
 
 295 Added autoCompleteKeys hooks for Raul Cota.
 
 297 Cleaned up various little key handling bugs.
 
 299 Changed input methods to get values from shell, rather than dialog
 
 300 boxes.  Renamed ``readIn`` to ``readline`` and ``readRaw`` to
 
 304 0.7.1 (12/12/2001 to 2/21/2002)
 
 305 -------------------------------
 
 307 Fixed ``OnChar()`` issues effecting European keyboards, as reported by
 
 310 Fixed ``introspect.py`` issue with xmlrpc objects reported by Kevin
 
 313 Fixed some introspect/PyFilling issues with regard to Python 2.2.
 
 315 Fixed font background color as reported by Keith J. Farmer.  (Thanks)
 
 317 Fixed problem with call tips and autocompletion inside multiline
 
 318 commands as report by Kevin Altis.
 
 320 Improved ``OnKeyDown`` handling of cut/copy/paste operations based on
 
 321 feedback from Syver Enstad.  (Thanks)
 
 323 Added a ``shell.help()`` method to display some help info.
 
 325 Changed sort of items in the namespace viewer to case insensitive.
 
 327 Changed ``attributes.sort(lambda x, y: cmp(x.upper(), y.upper()))`` in
 
 328 advance of an upcoming fix to an autocompletion matching bug in wxSTC.
 
 330 Improved support for ZODB by allowing namespace drilldown into BTrees.
 
 332 Added ``shell.PasteAndRun()`` to support pasting multiple commands into
 
 333 the shell from the clipboard.  Ctrl+Shift+V or v.
 
 335 Enter now always processes a command (or copies down a previous one.)
 
 336 To insert a line break, press Ctrl+Enter.
 
 338 Escape key clears the current, unexecuted command.
 
 340 History retrieval changed to replace current command.  Added new keys
 
 341 to insert from history - Shift+Up and Shift+Down.
 
 343 Better call tips on objects with ``__call__`` methods.
 
 345 Improved call tip positioning calculation.
 
 348 0.7 (10/15/2001 to 12/11/2001)
 
 349 ------------------------------
 
 351 Changed how command history retrieval functions work.  Added Alt-P,
 
 352 Alt-N as keybindings for Retrieve-Previous, Retrieve-Next.
 
 354 Added full support for multi-line commands, similar to IDLE.
 
 356 Changed ``introspect.getAttributeNames()`` to do a case insensitive
 
 359 Changed Cut/Copy/Paste to deal with prompts intelligently.  Cut and
 
 360 Copy remove all prompts.  Paste can handle prompted or not-prompted
 
 363 Added ``CopyWithPrompts()`` method attached to Ctrl-Shift-C for those
 
 364 times when you really do want all the prompts left intact.
 
 366 Improved handling of the shell's read-only zone.
 
 368 Changed ``CrustFrame.__init__`` parameter spec to include all
 
 369 parameters allowed by a ``wxFrame``.
 
 371 Changed ``FillingText`` to be read-only.
 
 373 Renamed ``PyCrust.py`` to ``PyCrustApp.py`` to eliminate
 
 374 package/module name conflicts that kept you from doing ``from PyCrust
 
 375 import shell`` inside files located in the ``PyCrust`` directory.
 
 377 Renamed ``PyFilling.py`` to ``PyFillingApp.py`` and ``PyShell.py`` to
 
 378 ``PyShellApp.py`` to maintain consistency.
 
 380 Removed the ``__date__`` property from all modules.
 
 382 Fixed bug in ``introspect.getCallTip()``, reported by Kevin Altis.
 
 385 0.6.1 (9/19/2001 to 10/12/2001)
 
 386 -------------------------------
 
 388 Changed ``Shell.run()`` to always position to the end of existing
 
 389 text, as suggested by Raul Cota.
 
 391 Changed ``introspect.getAllAttributeNames()`` to break circular
 
 392 references in ``object.__class__``, which occurs in Zope/ZODB
 
 395 Changed ``filling.FillingTree.getChildren()`` to introspect extension
 
 398 Fixed minor bugs in ``introspect.getCallTip()`` that were interfering
 
 399 with call tips for Zope/ZODB extension class methods.
 
 401 In preparation for wxPython 2.3.2, added code to fix a font sizing
 
 402 problem.  Versions of wxPython prior to 2.3.2 had a sizing bug on Win
 
 403 platform where the font was 2 points larger than what was specified.
 
 405 Added a hack to ``introspect.getAllAttributeNames()`` to "wake up"
 
 406 ZODB objects that are asleep - in a "ghost" state.  Otherwise it
 
 407 returns incomplete info.
 
 410 0.6 (8/21/2001 to 9/12/2001)
 
 411 ----------------------------
 
 413 Added ``PyFilling.py`` and ``filling.py``.
 
 415 ``PyShell.py`` and ``PyFilling.py`` can now be run standalone, as well
 
 418 Added ``crust.py`` and moved some code from ``PyCrust.py`` to it.
 
 420 Added command history retrieval features submitted by Richie Hindle.
 
 422 Changed ``shell.write()`` to replace line endings with OS-specific
 
 423 endings.  Changed ``shell.py`` and ``interpreter.py`` to use
 
 424 ``os.linesep`` in strings having hardcoded line endings.
 
 426 Added ``shell.redirectStdin()``, ``shell.redirectStdout()`` and
 
 427 ``shell.redirectStderr()`` to allow the surrounding app to toggle
 
 428 requests that the specified ``sys.std*`` be redirected to the shell.
 
 429 These can also be run from within the shell itself, of course.
 
 431 The shell now adds the current working directory "." to the search
 
 434     sys.path.insert(0, os.curdir)
 
 436 Added support for distutils installations.
 
 439 0.5.4 (8/17/2001 to 8/20/2001)
 
 440 ------------------------------
 
 442 Changed default font size under Linux to::
 
 447 Changed ``Shell`` to expect a parameter referencing an Interpreter
 
 448 class, rather than an intepreter instance, to facilitate subclassing
 
 449 of Interpreter, which effectively broke when the Editor class was
 
 452 Fixed ``PyCrustAlaCarte.py``, which had been broken by previous
 
 455 Created ``InterpreterAlaCarte`` class as an example for use in the
 
 458 Split ``PyCrust.py`` into ``PyCrust.py`` and ``PyShell.py`` in
 
 459 anticipation of ``PyFilling.py``.
 
 465 Added patch to ``PyCrust.py`` to fix wxPython bug::
 
 467     wxID_SELECTALL = NewId() # This *should* be defined by wxPython.
 
 470 0.5.2 (8/14/2001 to 8/15/2001)
 
 471 ------------------------------
 
 473 Shortened module names by dropping "PyCrust" as a prefix.
 
 475 Changed ``version`` to ``VERSION`` in ``version`` module.
 
 477 Added Options menu to PyCrust application.
 
 479 Eliminated the Editor class (and editor module) by merging with Shell.
 
 480 This means that Shell "is a" wxStyledTextCtrl rather than "has a".
 
 481 There just wasn't enough non-gui code to justify the separation.
 
 482 Plus, Shell will be much easier for gui toolkits/designers to deal
 
 486 0.5.1 (8/10/2001 to 8/14/2001)
 
 487 ------------------------------
 
 489 Added ``introspect`` module.
 
 491 Moved some functionality from ``PyCrustInterp`` to ``introspect``.
 
 493 Changed ``introspect.getRoot()`` to no longer remove whitespace from
 
 494 the command.  This was a remnant of a previous approach that, when
 
 495 left as part of the current approach, turned out to be a really bad
 
 498 Changed ``introspect.getRoot()`` to allow commands of ``''``, ``""``,
 
 499 ``""""""``, ``[]``, ``()``, and ``{}`` to pass through.  This allows
 
 500 you to type them, followed by a dot, and get autocomplete options on
 
 503 Changed ``introspect.getRoot()`` to identify some situations where
 
 504 strings shouldn't be considered roots.  For example::
 
 506     >>> import PyCrust  # To illustrate the potential problem.
 
 507     >>> len('PyCrust.py')
 
 509 Typing the dot at the end of "PyCrust" in the second line above should
 
 510 NOT result in an autocompletion list because "PyCrust" is part of a
 
 511 string in this context, not a reference to the PyCrust module object.
 
 512 Similar reasoning applies to call tips.  For example::
 
 516 Typing the left paren at the end of "dir" should NOT result in a call
 
 519 Both features now behave properly in the examples given.  However,
 
 520 there is still the case where whitespace precedes the potential root
 
 521 and that is NOT handled properly.  For example::
 
 523     >>> len('this is a dir(')
 
 527     >>> len('This is PyCrust.py')
 
 529 More code needs to be written to handle more complex situations.
 
 531 Added ``locals=None`` parameter to ``Shell.__init__()``.
 
 533 Added support for magic attribute retrieval.  Users can change this
 
 536     >>> shell.editor.autoCompleteIncludeMagic = 0
 
 538 Added the ability to set filters on auto completion to exclude
 
 539 attributes prefixed with a single or double underscore.  Users can
 
 540 exclude one or the other or both with::
 
 542     >>> shell.editor.autoCompleteExcludeSingle = 1
 
 543     >>> shell.editor.autoCompleteExcludeDouble = 1
 
 549 Mostly just a final version change before creating a release.
 
 552 0.4 (8/4/2001 to 8/7/2001)
 
 553 --------------------------
 
 555 Changed version/revision handling.
 
 560 0.3 (8/2/2001 to 8/3/2001)
 
 561 --------------------------
 
 563 Removed lots of cruft.
 
 565 Added lots of docstrings.
 
 567 Imported to CVS repository at SourceForge.
 
 572 0.2 (7/30/2001 to 8/2/2001)
 
 573 ---------------------------
 
 575 Renamed several files.
 
 577 Added command autocompletion.
 
 579 Added menus to PyCrust.py: File, Edit and Help.
 
 581 Added sample applications: ``PyCrustAlaCarte.py``,
 
 582 ``PyCrustAlaMode.py``, and ``PyCrustMinimus.py``.
 
 585 0.1 (7/1/2001 to 7/19/2001)
 
 586 ---------------------------
 
 588 Added basic syntax coloring much like Boa.
 
 590 Added read-only logging much like IDLE.
 
 592 Can retrieve a previous command by putting the cursor back on that
 
 593 line and hitting enter.
 
 595 Stdin and raw_input operate properly so you can now do ``help()`` and
 
 596 ``license()`` without hanging.
 
 598 Redefined "quit", "exit", and "close" to display a better-than-nothing
 
 601 Home key honors the prompt.
 
 603 Created SourceForge account, but nothing was posted.
 
 606 In the beginning, there was pie... (7/1/2001)
 
 607 ---------------------------------------------
 
 609 Blame it all on IDLE, Boa and PythonWin.  I was using all three, got
 
 610 frustrated with their dissimilarities, and began to let everyone know
 
 611 how I felt.  At the same time, Scintilla looked like an interesting
 
 612 tool to build a shell around.  And while I didn't receive much in the
 
 613 way of positive feedback, let alone encouragement, I just couldn't let
 
 614 go of the idea of a Scintilla-based Python shell.  Then the PythonCard
 
 615 project got to the point where they were talking about including a
 
 616 shell in their development environment.  That was all the incentive I
 
 617 needed.  PyCrust had to happen...