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 True.
15 0.9.3 (9/25/2003 to 1/24/2004)
16 ------------------------------
18 Fun and games with dynamic renaming. Details of any other changes
19 were lost in the confusion. I'll try to do better in the future.
22 0.9.2 (5/3/2003 to 9/25/2003)
23 -----------------------------
25 Changed to the new prefix-less "wx" package::
31 from wxPython import wx
33 Fixed typo in ``PyWrap.py``::
35 if __name__ == '__main__':
40 if __name__ == '__main__':
43 Added pretty-print Display tab to Crust, based on suggestion from
46 Improved ``Can*`` checks in ``EditWindow``, since STC is too lenient,
47 particularly when it is set to read-only but returns True for
48 CanPaste() (seems like an STC bug to me)::
51 """Return True if text is selected and can be copied."""
52 return self.GetSelectionStart() != self.GetSelectionEnd()
55 """Return True if text is selected and can be cut."""
56 return self.CanCopy() and self.CanEdit()
59 """Return True if editing should succeed."""
60 return not self.GetReadOnly()
63 """Return True if pasting should succeed."""
64 return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit()
67 0.9.1 (3/21/2003 to 5/2/2003)
68 -----------------------------
70 PyCrust is dead! Long live Py!
72 * Renamed ``PyCrust`` package to ``py``.
73 * Moved code to wxPython's CVS repository.
75 Fixed bug in ``introspect.py`` on introspecting objects occurring
76 immediately after a secondary prompt, like this::
79 >>> for n in range(3):
80 ... l. <-- failed to popup autocomplete list
82 Added documentation files:
87 * wxPythonExamples.txt
89 Added PyAlaMode and PyAlaCarte code editors.
91 Major refactoring to support ``editor`` and ``shell`` from the same
94 Renamed program files:
96 * ``PyCrustApp.py`` to ``PyCrust.py``
97 * ``PyFillingApp.py`` to ``PyFilling.py``
98 * ``PyShellApp.py`` to ``PyShell.py``
99 * ``wrap.py`` to ``PyWrap.py``
101 Removed disabling of autocomplete for lists of 2000 items or more.
102 The current implementation of wxSTC can now handle lists this big.
104 Improved handling of ``sys.path`` to mimic the standard Python shell.
107 0.9 (2/27/2003 to 3/20/2003)
108 ----------------------------
110 Added fontIncrease, fontDecrease, fontDefault signals, receivers and
113 Ctrl+] Increase font size.
114 Ctrl+[ Decrease font size.
115 Ctrl+= Default font size.
117 Continued enhancement of the decorator capability to provide better
118 documentation and docstrings for wxPython classes and functions.
120 Introduced new tabbed interface:
129 ``Filling.tree`` now expands tuples as well as lists. (It should have
130 done this all along, I just never noticed this omission before.)
132 Added this True/False test to all modules::
140 Added ``wxd`` directory with decoration classes.
143 0.8.2 (1/5/2003 to 2/26/2003)
144 -----------------------------
146 Wrapped ``sys.ps1``, ``sys.ps2``, and ``sys.ps3`` in ``str()``.
147 (Thanks, Kieran Holland.)
149 Fixed minor things found by PyChecker.
151 Changed locals to use ``__main__.__dict__`` and added code to clean up
152 the namespace, making it as close to the regular Python environment as
153 possible. This solves the problem of pickling and unpickling
154 instances of classes defined in the shell.
156 Made ``shell.PasteAndRun()`` a little more forgiving when it finds a
157 ps2 prompt line with no trailing space, such when you copy code from a
160 Improved autocomplete behavior by adding these to shell::
162 self.AutoCompSetAutoHide(False)
163 self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
165 Added ``decor`` directory, ``decorator.py``, ``stcDecor.py``, and
166 ``stcConstants.py``. These all serve the purpose of adding docstrings
167 to existing wxPython classes, in particular the ``wxStyledTextCtrl``.
169 Added ``wrap.py``, a command line utility for running a wxPython app
170 with additional runtime-tools loaded, such as PyCrust (the only tool
173 Flushed the clipboard Cut/Copy operations so that selections will
174 exist in the clipboard even after PyCrust has been closed.
176 Improved the suppression of docstrings for simple data types appearing
177 in the namespace viewer.
179 Better handling of autocompletion with numeric types; no
180 autocompletion when typing a dot after an integer. If the
181 autocompletion is desired, type a space before the dot::
185 More Filling!!! The namespace tree is now dynamically updated.
188 0.8.1 (12/20/2002 to 12/25/2002)
189 --------------------------------
191 Improved keyboard handling with Autocomplete active. You can now use
192 Enter as well as Tab to select an item from the list.
194 Disabled autocomplete for lists of 2000 items or more. The current
195 implementation of wxSTC can't handle lists this big.
197 Changed ``filling`` to always display docstrings for objects. This is
198 useful for objects whose docstrings have been decorated, rather than
199 coming directly from the source code. (Hmmm. Sounds like someone is
200 doing some decorating. I wonder where that would be helpful? <wink>)
202 Fixed handling of icon. Added ``images.py`` file.
205 0.8 (10/29/2002 to 12/16/2002)
206 ------------------------------
208 Added "help" to startup banner info.
210 Made all ``wx`` and ``stc`` imports explicit. No more ``import *``.
212 Replaced use of the ``wx`` module's ``true`` and ``false`` with
213 Python's ``True`` and ``False``.
215 Changed ``introspect.getRoot()`` to use ``tokenize`` module. This
216 does a slightly better job than the previous parsing routine and the
219 Improved handling of whitespace and empty types during introspection.
221 Fixed cut/copy clipboard problem under Linux. (Robin Dunn rocks!!!)
223 Added shell.about() which works like this::
228 Interpreter Revision: 1.15
229 Python Version: 2.2.2
230 wxPython Version: 2.3.3.1
233 Added copy plus and paste plus to shell menu.
235 Moved shell menu from ``shell.py`` to ``shellmenu.py``.
237 Added ``sys.stdin.readlines()`` support.
239 Added ``time.sleep()`` in ``readline()`` and ``OnIdle()`` event
240 handler to free up the CPU.
243 0.7.2 (2/22/2002 to 8/27/2002)
244 ------------------------------
246 Tweaked ``getAttributeNames()`` to pick up a few more attributes::
248 '__bases__', '__class__', '__dict__', '__name__', 'func_closure',
249 'func_code', 'func_defaults', 'func_dict', 'func_doc',
250 'func_globals', 'func_name'
252 Added a tests directory and unit tests.
254 Improved support for empty types in the shell: ``[]``, ``()`` and
255 ``{}`` as far as when call tips and autocompletion are available.
257 Added support for the other triple string - ``''''''``.
259 Refactored ``introspect.py`` to improve testability.
261 Improved call tips for unbound methods by leaving the "self"
262 parameter, since unbound methods require an instance be passed.
264 Fixed call tip bug where a tip was displayed when a "(" was typed
265 after an object that wasn't callable.
267 Fixed ``getAllAttributeNames`` when ``str(object)`` fails.
269 Added brace highlighting. (Thank you, Kevin Altis.)
271 Fixed problem displaying unicode objects in ``PyFilling``.
273 Changed how ``filling.py`` checks for expandable objects. Lists are
274 now expandable objects.
276 Made the key handling more robust when there is an active text
277 selection that includes text prior to the last primary prompt. Thanks
278 to Raul Cota for pointing this out.
280 Fixed wxSTC problem with brace highlighting and non-us keyboards.
281 (Thank you for the patch, Jean-Michel Fauth.)
283 Added ``busy = wxBusyCursor()`` to key points in ``shell`` and
286 Added ``OnCloseWindow`` handler to ``ShellFrame`` and ``CrustFrame``.
288 Default to ``SetWrapMode(1)`` for shell and namespace viewer.
290 Added ``shell.wrap()`` and ``shell.zoom()``.
292 Added autoCompleteKeys hooks for Raul Cota.
294 Cleaned up various little key handling bugs.
296 Changed input methods to get values from shell, rather than dialog
297 boxes. Renamed ``readIn`` to ``readline`` and ``readRaw`` to
301 0.7.1 (12/12/2001 to 2/21/2002)
302 -------------------------------
304 Fixed ``OnChar()`` issues effecting European keyboards, as reported by
307 Fixed ``introspect.py`` issue with xmlrpc objects reported by Kevin
310 Fixed some introspect/PyFilling issues with regard to Python 2.2.
312 Fixed font background color as reported by Keith J. Farmer. (Thanks)
314 Fixed problem with call tips and autocompletion inside multiline
315 commands as report by Kevin Altis.
317 Improved ``OnKeyDown`` handling of cut/copy/paste operations based on
318 feedback from Syver Enstad. (Thanks)
320 Added a ``shell.help()`` method to display some help info.
322 Changed sort of items in the namespace viewer to case insensitive.
324 Changed ``attributes.sort(lambda x, y: cmp(x.upper(), y.upper()))`` in
325 advance of an upcoming fix to an autocompletion matching bug in wxSTC.
327 Improved support for ZODB by allowing namespace drilldown into BTrees.
329 Added ``shell.PasteAndRun()`` to support pasting multiple commands into
330 the shell from the clipboard. Ctrl+Shift+V or v.
332 Enter now always processes a command (or copies down a previous one.)
333 To insert a line break, press Ctrl+Enter.
335 Escape key clears the current, unexecuted command.
337 History retrieval changed to replace current command. Added new keys
338 to insert from history - Shift+Up and Shift+Down.
340 Better call tips on objects with ``__call__`` methods.
342 Improved call tip positioning calculation.
345 0.7 (10/15/2001 to 12/11/2001)
346 ------------------------------
348 Changed how command history retrieval functions work. Added Alt-P,
349 Alt-N as keybindings for Retrieve-Previous, Retrieve-Next.
351 Added full support for multi-line commands, similar to IDLE.
353 Changed ``introspect.getAttributeNames()`` to do a case insensitive
356 Changed Cut/Copy/Paste to deal with prompts intelligently. Cut and
357 Copy remove all prompts. Paste can handle prompted or not-prompted
360 Added ``CopyWithPrompts()`` method attached to Ctrl-Shift-C for those
361 times when you really do want all the prompts left intact.
363 Improved handling of the shell's read-only zone.
365 Changed ``CrustFrame.__init__`` parameter spec to include all
366 parameters allowed by a ``wxFrame``.
368 Changed ``FillingText`` to be read-only.
370 Renamed ``PyCrust.py`` to ``PyCrustApp.py`` to eliminate
371 package/module name conflicts that kept you from doing ``from PyCrust
372 import shell`` inside files located in the ``PyCrust`` directory.
374 Renamed ``PyFilling.py`` to ``PyFillingApp.py`` and ``PyShell.py`` to
375 ``PyShellApp.py`` to maintain consistency.
377 Removed the ``__date__`` property from all modules.
379 Fixed bug in ``introspect.getCallTip()``, reported by Kevin Altis.
382 0.6.1 (9/19/2001 to 10/12/2001)
383 -------------------------------
385 Changed ``Shell.run()`` to always position to the end of existing
386 text, as suggested by Raul Cota.
388 Changed ``introspect.getAllAttributeNames()`` to break circular
389 references in ``object.__class__``, which occurs in Zope/ZODB
392 Changed ``filling.FillingTree.getChildren()`` to introspect extension
395 Fixed minor bugs in ``introspect.getCallTip()`` that were interfering
396 with call tips for Zope/ZODB extension class methods.
398 In preparation for wxPython 2.3.2, added code to fix a font sizing
399 problem. Versions of wxPython prior to 2.3.2 had a sizing bug on Win
400 platform where the font was 2 points larger than what was specified.
402 Added a hack to ``introspect.getAllAttributeNames()`` to "wake up"
403 ZODB objects that are asleep - in a "ghost" state. Otherwise it
404 returns incomplete info.
407 0.6 (8/21/2001 to 9/12/2001)
408 ----------------------------
410 Added ``PyFilling.py`` and ``filling.py``.
412 ``PyShell.py`` and ``PyFilling.py`` can now be run standalone, as well
415 Added ``crust.py`` and moved some code from ``PyCrust.py`` to it.
417 Added command history retrieval features submitted by Richie Hindle.
419 Changed ``shell.write()`` to replace line endings with OS-specific
420 endings. Changed ``shell.py`` and ``interpreter.py`` to use
421 ``os.linesep`` in strings having hardcoded line endings.
423 Added ``shell.redirectStdin()``, ``shell.redirectStdout()`` and
424 ``shell.redirectStderr()`` to allow the surrounding app to toggle
425 requests that the specified ``sys.std*`` be redirected to the shell.
426 These can also be run from within the shell itself, of course.
428 The shell now adds the current working directory "." to the search
431 sys.path.insert(0, os.curdir)
433 Added support for distutils installations.
436 0.5.4 (8/17/2001 to 8/20/2001)
437 ------------------------------
439 Changed default font size under Linux to::
444 Changed ``Shell`` to expect a parameter referencing an Interpreter
445 class, rather than an intepreter instance, to facilitate subclassing
446 of Interpreter, which effectively broke when the Editor class was
449 Fixed ``PyCrustAlaCarte.py``, which had been broken by previous
452 Created ``InterpreterAlaCarte`` class as an example for use in the
455 Split ``PyCrust.py`` into ``PyCrust.py`` and ``PyShell.py`` in
456 anticipation of ``PyFilling.py``.
462 Added patch to ``PyCrust.py`` to fix wxPython bug::
464 wxID_SELECTALL = NewId() # This *should* be defined by wxPython.
467 0.5.2 (8/14/2001 to 8/15/2001)
468 ------------------------------
470 Shortened module names by dropping "PyCrust" as a prefix.
472 Changed ``version`` to ``VERSION`` in ``version`` module.
474 Added Options menu to PyCrust application.
476 Eliminated the Editor class (and editor module) by merging with Shell.
477 This means that Shell "is a" wxStyledTextCtrl rather than "has a".
478 There just wasn't enough non-gui code to justify the separation.
479 Plus, Shell will be much easier for gui toolkits/designers to deal
483 0.5.1 (8/10/2001 to 8/14/2001)
484 ------------------------------
486 Added ``introspect`` module.
488 Moved some functionality from ``PyCrustInterp`` to ``introspect``.
490 Changed ``introspect.getRoot()`` to no longer remove whitespace from
491 the command. This was a remnant of a previous approach that, when
492 left as part of the current approach, turned out to be a really bad
495 Changed ``introspect.getRoot()`` to allow commands of ``''``, ``""``,
496 ``""""""``, ``[]``, ``()``, and ``{}`` to pass through. This allows
497 you to type them, followed by a dot, and get autocomplete options on
500 Changed ``introspect.getRoot()`` to identify some situations where
501 strings shouldn't be considered roots. For example::
503 >>> import PyCrust # To illustrate the potential problem.
504 >>> len('PyCrust.py')
506 Typing the dot at the end of "PyCrust" in the second line above should
507 NOT result in an autocompletion list because "PyCrust" is part of a
508 string in this context, not a reference to the PyCrust module object.
509 Similar reasoning applies to call tips. For example::
513 Typing the left paren at the end of "dir" should NOT result in a call
516 Both features now behave properly in the examples given. However,
517 there is still the case where whitespace precedes the potential root
518 and that is NOT handled properly. For example::
520 >>> len('this is a dir(')
524 >>> len('This is PyCrust.py')
526 More code needs to be written to handle more complex situations.
528 Added ``locals=None`` parameter to ``Shell.__init__()``.
530 Added support for magic attribute retrieval. Users can change this
533 >>> shell.editor.autoCompleteIncludeMagic = 0
535 Added the ability to set filters on auto completion to exclude
536 attributes prefixed with a single or double underscore. Users can
537 exclude one or the other or both with::
539 >>> shell.editor.autoCompleteExcludeSingle = 1
540 >>> shell.editor.autoCompleteExcludeDouble = 1
546 Mostly just a final version change before creating a release.
549 0.4 (8/4/2001 to 8/7/2001)
550 --------------------------
552 Changed version/revision handling.
557 0.3 (8/2/2001 to 8/3/2001)
558 --------------------------
560 Removed lots of cruft.
562 Added lots of docstrings.
564 Imported to CVS repository at SourceForge.
569 0.2 (7/30/2001 to 8/2/2001)
570 ---------------------------
572 Renamed several files.
574 Added command autocompletion.
576 Added menus to PyCrust.py: File, Edit and Help.
578 Added sample applications: ``PyCrustAlaCarte.py``,
579 ``PyCrustAlaMode.py``, and ``PyCrustMinimus.py``.
582 0.1 (7/1/2001 to 7/19/2001)
583 ---------------------------
585 Added basic syntax coloring much like Boa.
587 Added read-only logging much like IDLE.
589 Can retrieve a previous command by putting the cursor back on that
590 line and hitting enter.
592 Stdin and raw_input operate properly so you can now do ``help()`` and
593 ``license()`` without hanging.
595 Redefined "quit", "exit", and "close" to display a better-than-nothing
598 Home key honors the prompt.
600 Created SourceForge account, but nothing was posted.
603 In the beginning, there was pie... (7/1/2001)
604 ---------------------------------------------
606 Blame it all on IDLE, Boa and PythonWin. I was using all three, got
607 frustrated with their dissimilarities, and began to let everyone know
608 how I felt. At the same time, Scintilla looked like an interesting
609 tool to build a shell around. And while I didn't receive much in the
610 way of positive feedback, let alone encouragement, I just couldn't let
611 go of the idea of a Scintilla-based Python shell. Then the PythonCard
612 project got to the point where they were talking about including a
613 shell in their development environment. That was all the incentive I
614 needed. PyCrust had to happen...