2 0.9.2 (5/3/2003 to //2003)
3 -----------------------------
5 Changed to the new prefix-less "wx" package::
11 from wxPython import wx
13 Fixed typo in ``PyWrap.py``::
15 if __name__ == '__main__':
20 if __name__ == '__main__':
23 Added pretty-print Display tab to Crust, based on suggestion from
26 Improved ``Can*`` checks in ``EditWindow``, since STC is too lenient,
27 particularly when it is set to read-only but returns True for
28 CanPaste() (seems like an STC bug to me)::
31 """Return True if text is selected and can be copied."""
32 return self.GetSelectionStart() != self.GetSelectionEnd()
35 """Return True if text is selected and can be cut."""
36 return self.CanCopy() and self.CanEdit()
39 """Return True if editing should succeed."""
40 return not self.GetReadOnly()
43 """Return True if pasting should succeed."""
44 return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit()
47 0.9.1 (3/21/2003 to 5/2/2003)
48 -----------------------------
50 PyCrust is dead! Long live Py!
52 * Renamed ``PyCrust`` package to ``py``.
53 * Moved code to wxPython's CVS repository.
55 Fixed bug in ``introspect.py`` on introspecting objects occurring
56 immediately after a secondary prompt, like this::
59 >>> for n in range(3):
60 ... l. <-- failed to popup autocomplete list
62 Added documentation files:
67 * wxPythonExamples.txt
69 Added PyAlaMode and PyAlaCarte code editors.
71 Major refactoring to support ``editor`` and ``shell`` from the same
74 Renamed program files:
76 * ``PyCrustApp.py`` to ``PyCrust.py``
77 * ``PyFillingApp.py`` to ``PyFilling.py``
78 * ``PyShellApp.py`` to ``PyShell.py``
79 * ``wrap.py`` to ``PyWrap.py``
81 Removed disabling of autocomplete for lists of 2000 items or more.
82 The current implementation of wxSTC can now handle lists this big.
84 Improved handling of ``sys.path`` to mimic the standard Python shell.
87 0.9 (2/27/2003 to 3/20/2003)
88 ----------------------------
90 Added fontIncrease, fontDecrease, fontDefault signals, receivers and
93 Ctrl+] Increase font size.
94 Ctrl+[ Decrease font size.
95 Ctrl+= Default font size.
97 Continued enhancement of the decorator capability to provide better
98 documentation and docstrings for wxPython classes and functions.
100 Introduced new tabbed interface:
109 ``Filling.tree`` now expands tuples as well as lists. (It should have
110 done this all along, I just never noticed this omission before.)
112 Added this True/False test to all modules::
120 Added ``wxd`` directory with decoration classes.
123 0.8.2 (1/5/2003 to 2/26/2003)
124 -----------------------------
126 Wrapped ``sys.ps1``, ``sys.ps2``, and ``sys.ps3`` in ``str()``.
127 (Thanks, Kieran Holland.)
129 Fixed minor things found by PyChecker.
131 Changed locals to use ``__main__.__dict__`` and added code to clean up
132 the namespace, making it as close to the regular Python environment as
133 possible. This solves the problem of pickling and unpickling
134 instances of classes defined in the shell.
136 Made ``shell.PasteAndRun()`` a little more forgiving when it finds a
137 ps2 prompt line with no trailing space, such when you copy code from a
140 Improved autocomplete behavior by adding these to shell::
142 self.AutoCompSetAutoHide(False)
143 self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`')
145 Added ``decor`` directory, ``decorator.py``, ``stcDecor.py``, and
146 ``stcConstants.py``. These all serve the purpose of adding docstrings
147 to existing wxPython classes, in particular the ``wxStyledTextCtrl``.
149 Added ``wrap.py``, a command line utility for running a wxPython app
150 with additional runtime-tools loaded, such as PyCrust (the only tool
153 Flushed the clipboard Cut/Copy operations so that selections will
154 exist in the clipboard even after PyCrust has been closed.
156 Improved the suppression of docstrings for simple data types appearing
157 in the namespace viewer.
159 Better handling of autocompletion with numeric types; no
160 autocompletion when typing a dot after an integer. If the
161 autocompletion is desired, type a space before the dot::
165 More Filling!!! The namespace tree is now dynamically updated.
168 0.8.1 (12/20/2002 to 12/25/2002)
169 --------------------------------
171 Improved keyboard handling with Autocomplete active. You can now use
172 Enter as well as Tab to select an item from the list.
174 Disabled autocomplete for lists of 2000 items or more. The current
175 implementation of wxSTC can't handle lists this big.
177 Changed ``filling`` to always display docstrings for objects. This is
178 useful for objects whose docstrings have been decorated, rather than
179 coming directly from the source code. (Hmmm. Sounds like someone is
180 doing some decorating. I wonder where that would be helpful? <wink>)
182 Fixed handling of icon. Added ``images.py`` file.
185 0.8 (10/29/2002 to 12/16/2002)
186 ------------------------------
188 Added "help" to startup banner info.
190 Made all ``wx`` and ``stc`` imports explicit. No more ``import *``.
192 Replaced use of the ``wx`` module's ``true`` and ``false`` with
193 Python's ``True`` and ``False``.
195 Changed ``introspect.getRoot()`` to use ``tokenize`` module. This
196 does a slightly better job than the previous parsing routine and the
199 Improved handling of whitespace and empty types during introspection.
201 Fixed cut/copy clipboard problem under Linux. (Robin Dunn rocks!!!)
203 Added shell.about() which works like this::
208 Interpreter Revision: 1.15
209 Python Version: 2.2.2
210 wxPython Version: 2.3.3.1
213 Added copy plus and paste plus to shell menu.
215 Moved shell menu from ``shell.py`` to ``shellmenu.py``.
217 Added ``sys.stdin.readlines()`` support.
219 Added ``time.sleep()`` in ``readline()`` and ``OnIdle()`` event
220 handler to free up the CPU.
223 0.7.2 (2/22/2002 to 8/27/2002)
224 ------------------------------
226 Tweaked ``getAttributeNames()`` to pick up a few more attributes::
228 '__bases__', '__class__', '__dict__', '__name__', 'func_closure',
229 'func_code', 'func_defaults', 'func_dict', 'func_doc',
230 'func_globals', 'func_name'
232 Added a tests directory and unit tests.
234 Improved support for empty types in the shell: ``[]``, ``()`` and
235 ``{}`` as far as when call tips and autocompletion are available.
237 Added support for the other triple string - ``''''''``.
239 Refactored ``introspect.py`` to improve testability.
241 Improved call tips for unbound methods by leaving the "self"
242 parameter, since unbound methods require an instance be passed.
244 Fixed call tip bug where a tip was displayed when a "(" was typed
245 after an object that wasn't callable.
247 Fixed ``getAllAttributeNames`` when ``str(object)`` fails.
249 Added brace highlighting. (Thank you, Kevin Altis.)
251 Fixed problem displaying unicode objects in ``PyFilling``.
253 Changed how ``filling.py`` checks for expandable objects. Lists are
254 now expandable objects.
256 Made the key handling more robust when there is an active text
257 selection that includes text prior to the last primary prompt. Thanks
258 to Raul Cota for pointing this out.
260 Fixed wxSTC problem with brace highlighting and non-us keyboards.
261 (Thank you for the patch, Jean-Michel Fauth.)
263 Added ``busy = wxBusyCursor()`` to key points in ``shell`` and
266 Added ``OnCloseWindow`` handler to ``ShellFrame`` and ``CrustFrame``.
268 Default to ``SetWrapMode(1)`` for shell and namespace viewer.
270 Added ``shell.wrap()`` and ``shell.zoom()``.
272 Added autoCompleteKeys hooks for Raul Cota.
274 Cleaned up various little key handling bugs.
276 Changed input methods to get values from shell, rather than dialog
277 boxes. Renamed ``readIn`` to ``readline`` and ``readRaw`` to
281 0.7.1 (12/12/2001 to 2/21/2002)
282 -------------------------------
284 Fixed ``OnChar()`` issues effecting European keyboards, as reported by
287 Fixed ``introspect.py`` issue with xmlrpc objects reported by Kevin
290 Fixed some introspect/PyFilling issues with regard to Python 2.2.
292 Fixed font background color as reported by Keith J. Farmer. (Thanks)
294 Fixed problem with call tips and autocompletion inside multiline
295 commands as report by Kevin Altis.
297 Improved ``OnKeyDown`` handling of cut/copy/paste operations based on
298 feedback from Syver Enstad. (Thanks)
300 Added a ``shell.help()`` method to display some help info.
302 Changed sort of items in the namespace viewer to case insensitive.
304 Changed ``attributes.sort(lambda x, y: cmp(x.upper(), y.upper()))`` in
305 advance of an upcoming fix to an autocompletion matching bug in wxSTC.
307 Improved support for ZODB by allowing namespace drilldown into BTrees.
309 Added ``shell.PasteAndRun()`` to support pasting multiple commands into
310 the shell from the clipboard. Ctrl+Shift+V or v.
312 Enter now always processes a command (or copies down a previous one.)
313 To insert a line break, press Ctrl+Enter.
315 Escape key clears the current, unexecuted command.
317 History retrieval changed to replace current command. Added new keys
318 to insert from history - Shift+Up and Shift+Down.
320 Better call tips on objects with ``__call__`` methods.
322 Improved call tip positioning calculation.
325 0.7 (10/15/2001 to 12/11/2001)
326 ------------------------------
328 Changed how command history retrieval functions work. Added Alt-P,
329 Alt-N as keybindings for Retrieve-Previous, Retrieve-Next.
331 Added full support for multi-line commands, similar to IDLE.
333 Changed ``introspect.getAttributeNames()`` to do a case insensitive
336 Changed Cut/Copy/Paste to deal with prompts intelligently. Cut and
337 Copy remove all prompts. Paste can handle prompted or not-prompted
340 Added ``CopyWithPrompts()`` method attached to Ctrl-Shift-C for those
341 times when you really do want all the prompts left intact.
343 Improved handling of the shell's read-only zone.
345 Changed ``CrustFrame.__init__`` parameter spec to include all
346 parameters allowed by a ``wxFrame``.
348 Changed ``FillingText`` to be read-only.
350 Renamed ``PyCrust.py`` to ``PyCrustApp.py`` to eliminate
351 package/module name conflicts that kept you from doing ``from PyCrust
352 import shell`` inside files located in the ``PyCrust`` directory.
354 Renamed ``PyFilling.py`` to ``PyFillingApp.py`` and ``PyShell.py`` to
355 ``PyShellApp.py`` to maintain consistency.
357 Removed the ``__date__`` property from all modules.
359 Fixed bug in ``introspect.getCallTip()``, reported by Kevin Altis.
362 0.6.1 (9/19/2001 to 10/12/2001)
363 -------------------------------
365 Changed ``Shell.run()`` to always position to the end of existing
366 text, as suggested by Raul Cota.
368 Changed ``introspect.getAllAttributeNames()`` to break circular
369 references in ``object.__class__``, which occurs in Zope/ZODB
372 Changed ``filling.FillingTree.getChildren()`` to introspect extension
375 Fixed minor bugs in ``introspect.getCallTip()`` that were interfering
376 with call tips for Zope/ZODB extension class methods.
378 In preparation for wxPython 2.3.2, added code to fix a font sizing
379 problem. Versions of wxPython prior to 2.3.2 had a sizing bug on Win
380 platform where the font was 2 points larger than what was specified.
382 Added a hack to ``introspect.getAllAttributeNames()`` to "wake up"
383 ZODB objects that are asleep - in a "ghost" state. Otherwise it
384 returns incomplete info.
387 0.6 (8/21/2001 to 9/12/2001)
388 ----------------------------
390 Added ``PyFilling.py`` and ``filling.py``.
392 ``PyShell.py`` and ``PyFilling.py`` can now be run standalone, as well
395 Added ``crust.py`` and moved some code from ``PyCrust.py`` to it.
397 Added command history retrieval features submitted by Richie Hindle.
399 Changed ``shell.write()`` to replace line endings with OS-specific
400 endings. Changed ``shell.py`` and ``interpreter.py`` to use
401 ``os.linesep`` in strings having hardcoded line endings.
403 Added ``shell.redirectStdin()``, ``shell.redirectStdout()`` and
404 ``shell.redirectStderr()`` to allow the surrounding app to toggle
405 requests that the specified ``sys.std*`` be redirected to the shell.
406 These can also be run from within the shell itself, of course.
408 The shell now adds the current working directory "." to the search
411 sys.path.insert(0, os.curdir)
413 Added support for distutils installations.
416 0.5.4 (8/17/2001 to 8/20/2001)
417 ------------------------------
419 Changed default font size under Linux to::
424 Changed ``Shell`` to expect a parameter referencing an Interpreter
425 class, rather than an intepreter instance, to facilitate subclassing
426 of Interpreter, which effectively broke when the Editor class was
429 Fixed ``PyCrustAlaCarte.py``, which had been broken by previous
432 Created ``InterpreterAlaCarte`` class as an example for use in the
435 Split ``PyCrust.py`` into ``PyCrust.py`` and ``PyShell.py`` in
436 anticipation of ``PyFilling.py``.
442 Added patch to ``PyCrust.py`` to fix wxPython bug::
444 wxID_SELECTALL = NewId() # This *should* be defined by wxPython.
447 0.5.2 (8/14/2001 to 8/15/2001)
448 ------------------------------
450 Shortened module names by dropping "PyCrust" as a prefix.
452 Changed ``version`` to ``VERSION`` in ``version`` module.
454 Added Options menu to PyCrust application.
456 Eliminated the Editor class (and editor module) by merging with Shell.
457 This means that Shell "is a" wxStyledTextCtrl rather than "has a".
458 There just wasn't enough non-gui code to justify the separation.
459 Plus, Shell will be much easier for gui toolkits/designers to deal
463 0.5.1 (8/10/2001 to 8/14/2001)
464 ------------------------------
466 Added ``introspect`` module.
468 Moved some functionality from ``PyCrustInterp`` to ``introspect``.
470 Changed ``introspect.getRoot()`` to no longer remove whitespace from
471 the command. This was a remnant of a previous approach that, when
472 left as part of the current approach, turned out to be a really bad
475 Changed ``introspect.getRoot()`` to allow commands of ``''``, ``""``,
476 ``""""""``, ``[]``, ``()``, and ``{}`` to pass through. This allows
477 you to type them, followed by a dot, and get autocomplete options on
480 Changed ``introspect.getRoot()`` to identify some situations where
481 strings shouldn't be considered roots. For example::
483 >>> import PyCrust # To illustrate the potential problem.
484 >>> len('PyCrust.py')
486 Typing the dot at the end of "PyCrust" in the second line above should
487 NOT result in an autocompletion list because "PyCrust" is part of a
488 string in this context, not a reference to the PyCrust module object.
489 Similar reasoning applies to call tips. For example::
493 Typing the left paren at the end of "dir" should NOT result in a call
496 Both features now behave properly in the examples given. However,
497 there is still the case where whitespace precedes the potential root
498 and that is NOT handled properly. For example::
500 >>> len('this is a dir(')
504 >>> len('This is PyCrust.py')
506 More code needs to be written to handle more complex situations.
508 Added ``locals=None`` parameter to ``Shell.__init__()``.
510 Added support for magic attribute retrieval. Users can change this
513 >>> shell.editor.autoCompleteIncludeMagic = 0
515 Added the ability to set filters on auto completion to exclude
516 attributes prefixed with a single or double underscore. Users can
517 exclude one or the other or both with::
519 >>> shell.editor.autoCompleteExcludeSingle = 1
520 >>> shell.editor.autoCompleteExcludeDouble = 1
526 Mostly just a final version change before creating a release.
529 0.4 (8/4/2001 to 8/7/2001)
530 --------------------------
532 Changed version/revision handling.
537 0.3 (8/2/2001 to 8/3/2001)
538 --------------------------
540 Removed lots of cruft.
542 Added lots of docstrings.
544 Imported to CVS repository at SourceForge.
549 0.2 (7/30/2001 to 8/2/2001)
550 ---------------------------
552 Renamed several files.
554 Added command autocompletion.
556 Added menus to PyCrust.py: File, Edit and Help.
558 Added sample applications: ``PyCrustAlaCarte.py``,
559 ``PyCrustAlaMode.py``, and ``PyCrustMinimus.py``.
562 0.1 (7/1/2001 to 7/19/2001)
563 ---------------------------
565 Added basic syntax coloring much like Boa.
567 Added read-only logging much like IDLE.
569 Can retrieve a previous command by putting the cursor back on that
570 line and hitting enter.
572 Stdin and raw_input operate properly so you can now do ``help()`` and
573 ``license()`` without hanging.
575 Redefined "quit", "exit", and "close" to display a better-than-nothing
578 Home key honors the prompt.
580 Created SourceForge account, but nothing was posted.
583 In the beginning, there was pie... (7/1/2001)
584 ---------------------------------------------
586 Blame it all on IDLE, Boa and PythonWin. I was using all three, got
587 frustrated with their dissimilarities, and began to let everyone know
588 how I felt. At the same time, Scintilla looked like an interesting
589 tool to build a shell around. And while I didn't receive much in the
590 way of positive feedback, let alone encouragement, I just couldn't let
591 go of the idea of a Scintilla-based Python shell. Then the PythonCard
592 project got to the point where they were talking about including a
593 shell in their development environment. That was all the incentive I
594 needed. PyCrust had to happen...