| 1 | <?xml version="1.0" encoding="iso-8859-1" ?> |
| 2 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| 3 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| 4 | <head> |
| 5 | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> |
| 6 | <meta name="generator" content="Docutils 0.3.7: http://docutils.sourceforge.net/" /> |
| 7 | <title>The Py Manual</title> |
| 8 | <meta name="author" content="Patrick K. O'Brien" /> |
| 9 | <meta name="organization" content="Orbtech" /> |
| 10 | <meta name="date" content="2004-04-15" /> |
| 11 | <link rel="stylesheet" href="default.css" type="text/css" /> |
| 12 | </head> |
| 13 | <body> |
| 14 | <div class="document" id="the-py-manual"> |
| 15 | <h1 class="title">The Py Manual</h1> |
| 16 | <h2 class="subtitle" id="py-served-fresh-daily">Py - Served Fresh Daily</h2> |
| 17 | <table class="docinfo" frame="void" rules="none"> |
| 18 | <col class="docinfo-name" /> |
| 19 | <col class="docinfo-content" /> |
| 20 | <tbody valign="top"> |
| 21 | <tr><th class="docinfo-name">Author:</th> |
| 22 | <td>Patrick K. O'Brien</td></tr> |
| 23 | <tr><th class="docinfo-name">Contact:</th> |
| 24 | <td><a class="first last reference" href="mailto:pobrien@orbtech.com">pobrien@orbtech.com</a></td></tr> |
| 25 | <tr><th class="docinfo-name">Organization:</th> |
| 26 | <td><a class="first last reference" href="http://www.orbtech.com/">Orbtech</a></td></tr> |
| 27 | <tr><th class="docinfo-name">Date:</th> |
| 28 | <td>2004-04-15</td></tr> |
| 29 | <tr><th class="docinfo-name">Revision:</th> |
| 30 | <td>1.5</td></tr> |
| 31 | </tbody> |
| 32 | </table> |
| 33 | <div class="contents topic" id="contents"> |
| 34 | <p class="topic-title first"><a name="contents">Contents</a></p> |
| 35 | <ul class="simple"> |
| 36 | <li><a class="reference" href="#introduction" id="id4" name="id4">Introduction</a></li> |
| 37 | <li><a class="reference" href="#developer-reference" id="id5" name="id5">Developer Reference</a></li> |
| 38 | <li><a class="reference" href="#what-is-py" id="id6" name="id6">What is Py?</a></li> |
| 39 | <li><a class="reference" href="#pycrust-is-dead-long-live-py" id="id7" name="id7">PyCrust is dead! Long live Py!</a></li> |
| 40 | <li><a class="reference" href="#py-standalone-programs" id="id8" name="id8">Py standalone programs</a></li> |
| 41 | <li><a class="reference" href="#pyalacarte" id="id9" name="id9">PyAlaCarte</a></li> |
| 42 | <li><a class="reference" href="#pyalamode" id="id10" name="id10">PyAlaMode</a></li> |
| 43 | <li><a class="reference" href="#pycrust" id="id11" name="id11">PyCrust</a></li> |
| 44 | <li><a class="reference" href="#pyfilling" id="id12" name="id12">PyFilling</a></li> |
| 45 | <li><a class="reference" href="#pyshell" id="id13" name="id13">PyShell</a></li> |
| 46 | <li><a class="reference" href="#pywrap" id="id14" name="id14">PyWrap</a></li> |
| 47 | <li><a class="reference" href="#py-modules" id="id15" name="id15">Py modules</a></li> |
| 48 | <li><a class="reference" href="#projects-using-py" id="id16" name="id16">Projects using Py</a></li> |
| 49 | <li><a class="reference" href="#history-of-changes" id="id17" name="id17">History of changes</a><ul> |
| 50 | <li><a class="reference" href="#id1" id="id18" name="id18">0.9.5 (12/23/2005)</a></li> |
| 51 | <li><a class="reference" href="#to-2004" id="id19" name="id19">0.9.4 (1/25/2004 to //2004)</a></li> |
| 52 | <li><a class="reference" href="#to-1-24-2004" id="id20" name="id20">0.9.3 (9/25/2003 to 1/24/2004)</a></li> |
| 53 | <li><a class="reference" href="#to-9-25-2003" id="id21" name="id21">0.9.2 (5/3/2003 to 9/25/2003)</a></li> |
| 54 | <li><a class="reference" href="#to-5-2-2003" id="id22" name="id22">0.9.1 (3/21/2003 to 5/2/2003)</a></li> |
| 55 | <li><a class="reference" href="#to-3-20-2003" id="id23" name="id23">0.9 (2/27/2003 to 3/20/2003)</a></li> |
| 56 | <li><a class="reference" href="#to-2-26-2003" id="id24" name="id24">0.8.2 (1/5/2003 to 2/26/2003)</a></li> |
| 57 | <li><a class="reference" href="#to-12-25-2002" id="id25" name="id25">0.8.1 (12/20/2002 to 12/25/2002)</a></li> |
| 58 | <li><a class="reference" href="#to-12-16-2002" id="id26" name="id26">0.8 (10/29/2002 to 12/16/2002)</a></li> |
| 59 | <li><a class="reference" href="#to-8-27-2002" id="id27" name="id27">0.7.2 (2/22/2002 to 8/27/2002)</a></li> |
| 60 | <li><a class="reference" href="#to-2-21-2002" id="id28" name="id28">0.7.1 (12/12/2001 to 2/21/2002)</a></li> |
| 61 | <li><a class="reference" href="#to-12-11-2001" id="id29" name="id29">0.7 (10/15/2001 to 12/11/2001)</a></li> |
| 62 | <li><a class="reference" href="#to-10-12-2001" id="id30" name="id30">0.6.1 (9/19/2001 to 10/12/2001)</a></li> |
| 63 | <li><a class="reference" href="#to-9-12-2001" id="id31" name="id31">0.6 (8/21/2001 to 9/12/2001)</a></li> |
| 64 | <li><a class="reference" href="#to-8-20-2001" id="id32" name="id32">0.5.4 (8/17/2001 to 8/20/2001)</a></li> |
| 65 | <li><a class="reference" href="#id2" id="id33" name="id33">0.5.3 (8/16/2001)</a></li> |
| 66 | <li><a class="reference" href="#to-8-15-2001" id="id34" name="id34">0.5.2 (8/14/2001 to 8/15/2001)</a></li> |
| 67 | <li><a class="reference" href="#to-8-14-2001" id="id35" name="id35">0.5.1 (8/10/2001 to 8/14/2001)</a></li> |
| 68 | <li><a class="reference" href="#id3" id="id36" name="id36">0.5 (8/8/2001)</a></li> |
| 69 | <li><a class="reference" href="#to-8-7-2001" id="id37" name="id37">0.4 (8/4/2001 to 8/7/2001)</a></li> |
| 70 | <li><a class="reference" href="#to-8-3-2001" id="id38" name="id38">0.3 (8/2/2001 to 8/3/2001)</a></li> |
| 71 | <li><a class="reference" href="#to-8-2-2001" id="id39" name="id39">0.2 (7/30/2001 to 8/2/2001)</a></li> |
| 72 | <li><a class="reference" href="#to-7-19-2001" id="id40" name="id40">0.1 (7/1/2001 to 7/19/2001)</a></li> |
| 73 | <li><a class="reference" href="#in-the-beginning-there-was-pie-7-1-2001" id="id41" name="id41">In the beginning, there was pie... (7/1/2001)</a></li> |
| 74 | </ul> |
| 75 | </li> |
| 76 | </ul> |
| 77 | </div> |
| 78 | <div class="section" id="introduction"> |
| 79 | <h1><a class="toc-backref" href="#id4" name="introduction">Introduction</a></h1> |
| 80 | <p>This document will show you how to use the Py programs and the Py |
| 81 | library of Python source code modules. Py is the new name for the |
| 82 | project that began as PyCrust. Py is officially part of <a class="reference" href="http://www.wxpython.org/">wxPython</a>, |
| 83 | and includes PyCrust, so PyCrust is no longer distributed separately.</p> |
| 84 | </div> |
| 85 | <div class="section" id="developer-reference"> |
| 86 | <h1><a class="toc-backref" href="#id5" name="developer-reference">Developer Reference</a></h1> |
| 87 | <p>Source code documentation for developers is available at:</p> |
| 88 | <p><a class="reference" href="http://www.orbtech.com/www/wx/epydoc/public/wx.py-module.html">http://www.orbtech.com/www/wx/epydoc/public/wx.py-module.html</a></p> |
| 89 | </div> |
| 90 | <div class="section" id="what-is-py"> |
| 91 | <h1><a class="toc-backref" href="#id6" name="what-is-py">What is Py?</a></h1> |
| 92 | <p>Besides being <a class="reference" href="http://www.wikipedia.org/wiki/Pie">a delicious dessert</a>, Py is the name for a collection |
| 93 | of whimsically-named Python programs and modules that began as the |
| 94 | PyCrust project. So Py is really several things: a set of standalone |
| 95 | programs, including the original PyCrust program, a library of Python |
| 96 | source code modules that can be used in your own programs, and as many |
| 97 | examples of bad "pie" puns as I can come up with. (If you're going to |
| 98 | do something, you might as well do it all the way, right?) Py uses |
| 99 | Python and wxPython, so it works equally well on Windows, Linux and |
| 100 | Mac OS X.</p> |
| 101 | </div> |
| 102 | <div class="section" id="pycrust-is-dead-long-live-py"> |
| 103 | <h1><a class="toc-backref" href="#id7" name="pycrust-is-dead-long-live-py">PyCrust is dead! Long live Py!</a></h1> |
| 104 | <p>This project began with a program I created called PyCrust - an |
| 105 | interactive, graphical Python shell, developed using the wxPython GUI |
| 106 | toolkit. For about two years, PyCrust was hosted on <a class="reference" href="http://www.sf.net/projects/pycrust/">SourceForge</a>. |
| 107 | Shortly after I created PyCrust, the wxPython folks started including |
| 108 | it in their distribution. As the PyCrust project grew, it reached a |
| 109 | point where I thought the original PyCrust name was too confining. I |
| 110 | was using the PyCrust code base to develop programs that weren't just |
| 111 | Python shells any more.</p> |
| 112 | <p>Around that same time, the wxPython folks asked me if I'd be willing |
| 113 | to move all my wxPython-related projects into the <a class="reference" href="http://cvs.wxWidgets.org">wxPython CVS |
| 114 | repository</a>, and become part of the <a class="reference" href="http://www.wxpython.org/">wxPython</a>/<a class="reference" href="http://www.wxWidgets.org/">wxWidgets</a> developer team. |
| 115 | I decided the time was right to restructure the PyCrust project. |
| 116 | During the move, the PyCrust package was renamed to "py" (lowercase |
| 117 | "p") and the collection of programs and modules as a whole became |
| 118 | known as "Py" (with a capital "P").</p> |
| 119 | <p>The original goal of PyCrust was to be the best interactive, graphical |
| 120 | Python shell (of course, I claimed it was the "flakiest" Python |
| 121 | shell). And that was all I wanted it to be. But little by little I |
| 122 | found myself developing a wider variety of tools for wxPython |
| 123 | applications. Eventually I'll create a debugger (PySlice, perhaps) |
| 124 | and whatever else is needed to one day become a complete wxPython |
| 125 | application development environment (PyFactory?). In the mean time, |
| 126 | PyCrust is still the flakiest Python shell, and the other Py programs |
| 127 | are equally tasty.</p> |
| 128 | <p>At this point, Py has standalone programs that include Python code |
| 129 | editors (PyAlaCarte and PyAlaMode), interactive Python shells (PyCrust |
| 130 | and PyShell), and a runtime wrapper (PyWrap). The runtime wrapper |
| 131 | utility provides you with runtime introspection capabilities for your |
| 132 | wxPython programs without having to include PyCrust or PyShell in your |
| 133 | program, and without having to alter one line of your source code.</p> |
| 134 | <p>Py also contains a collection of modules that you can use in your own |
| 135 | wxPython applications to provide similar services, either for your own |
| 136 | use during development, or as an interface for users of your programs. |
| 137 | These modules are the same ones used by all the Py programs.</p> |
| 138 | </div> |
| 139 | <div class="section" id="py-standalone-programs"> |
| 140 | <h1><a class="toc-backref" href="#id8" name="py-standalone-programs">Py standalone programs</a></h1> |
| 141 | <p>These are the standalone applications in the Py collection:</p> |
| 142 | <ul class="simple"> |
| 143 | <li>PyAlaCarte</li> |
| 144 | <li>PyAlaMode</li> |
| 145 | <li>PyCrust</li> |
| 146 | <li>PyFilling</li> |
| 147 | <li>PyShell</li> |
| 148 | <li>PyWrap</li> |
| 149 | </ul> |
| 150 | </div> |
| 151 | <div class="section" id="pyalacarte"> |
| 152 | <h1><a class="toc-backref" href="#id9" name="pyalacarte">PyAlaCarte</a></h1> |
| 153 | <p>PyAlaCarte is a Python source code editor. It is designed to have a |
| 154 | simple, single-file interface. As a standalone application, it is |
| 155 | good for simple, short editing tasks. But it is really meant to be |
| 156 | more of an example of how to embed the Py editor into a wxPython |
| 157 | application.</p> |
| 158 | </div> |
| 159 | <div class="section" id="pyalamode"> |
| 160 | <h1><a class="toc-backref" href="#id10" name="pyalamode">PyAlaMode</a></h1> |
| 161 | <p>PyAlaMode is a Python source code editor.</p> |
| 162 | </div> |
| 163 | <div class="section" id="pycrust"> |
| 164 | <h1><a class="toc-backref" href="#id11" name="pycrust">PyCrust</a></h1> |
| 165 | <p>PyCrust is an interactive, Python shell. But it's more than just a |
| 166 | shell. It includes a tabbed notebook containing a namespace tree |
| 167 | (PyFilling), and several other things.</p> |
| 168 | </div> |
| 169 | <div class="section" id="pyfilling"> |
| 170 | <h1><a class="toc-backref" href="#id12" name="pyfilling">PyFilling</a></h1> |
| 171 | <p>PyFilling is a namespace viewer. It isn't really useful as a |
| 172 | standalone program, but it does illustrate how to make use of the |
| 173 | underlying <tt class="docutils literal"><span class="pre">filling</span></tt> module.</p> |
| 174 | </div> |
| 175 | <div class="section" id="pyshell"> |
| 176 | <h1><a class="toc-backref" href="#id13" name="pyshell">PyShell</a></h1> |
| 177 | <p>PyShell is an interactive, Python shell. It shares the same base code |
| 178 | as PyCrust, but doesn't have any of the extra features that appear in |
| 179 | the PyCrust notebook interface.</p> |
| 180 | <div class="figure"> |
| 181 | <div class="image"><img alt="screenshots/PyShell.png" src="screenshots/PyShell.png" /></div> |
| 182 | <p class="caption">PyShell running on Mandrake Linux.</p> |
| 183 | </div> |
| 184 | </div> |
| 185 | <div class="section" id="pywrap"> |
| 186 | <h1><a class="toc-backref" href="#id14" name="pywrap">PyWrap</a></h1> |
| 187 | <p>PyWrap is a runtime utility that lets you run an existing wxPython |
| 188 | program with a PyCrust frame at the same time. Inside the PyCrust |
| 189 | shell namespace, the local variable <tt class="docutils literal"><span class="pre">app</span></tt> is assigned to your |
| 190 | application instance. In this way you can introspect your entire |
| 191 | application within the PyCrust shell, as well as the PyFilling |
| 192 | namespace viewer.</p> |
| 193 | </div> |
| 194 | <div class="section" id="py-modules"> |
| 195 | <h1><a class="toc-backref" href="#id15" name="py-modules">Py modules</a></h1> |
| 196 | <p>Py was designed to be modular. That means graphical code is kept |
| 197 | separate from non-graphical code, and many of the Py modules can be |
| 198 | used by other programs. Likewise, other programs can supply some of |
| 199 | the modules needed by Py. For example, you could supply a customized |
| 200 | interpreter module and plug it in to the PyCrust standalone |
| 201 | application. As long as it supports the minimum functionality |
| 202 | required, PyCrust will work just as well with your interpreter as with |
| 203 | its default interpreter.</p> |
| 204 | </div> |
| 205 | <div class="section" id="projects-using-py"> |
| 206 | <h1><a class="toc-backref" href="#id16" name="projects-using-py">Projects using Py</a></h1> |
| 207 | <ul class="simple"> |
| 208 | <li><a class="reference" href="http://conflictsolver.sourceforge.net/">Conflict Solver</a></li> |
| 209 | <li><a class="reference" href="http://www.gnumed.org/">Gnumed</a></li> |
| 210 | <li>PyGist</li> |
| 211 | <li><a class="reference" href="http://www.pythoncard.org/">PythonCard</a></li> |
| 212 | <li><a class="reference" href="http://rpy.sourceforge.net/">RPy</a></li> |
| 213 | <li><a class="reference" href="http://www.scipy.org/">SciPy</a></li> |
| 214 | <li><a class="reference" href="http://www.sim42.org/">Sim42</a></li> |
| 215 | <li><a class="reference" href="http://linus.yorktown.arlington.k12.va.us/CS/APCSC/student_sites/David_Mayo/wxGasp">wxGasp</a></li> |
| 216 | </ul> |
| 217 | </div> |
| 218 | <div class="section" id="history-of-changes"> |
| 219 | <h1><a class="toc-backref" href="#id17" name="history-of-changes">History of changes</a></h1> |
| 220 | <p>This section lists all the changes that have been made to the Py |
| 221 | programs and modules, since the beginning.</p> |
| 222 | <div class="section" id="id1"> |
| 223 | <h2><a class="toc-backref" href="#id18" name="id1">0.9.5 (12/23/2005)</a></h2> |
| 224 | <p>Applied a series of enhancments by Franz Steinaeusler, Adi Sieker, and |
| 225 | Sebastian Haase, up until their 7-31-2005 version. (Their next |
| 226 | version broke some existing functionality, and added some confusing |
| 227 | hacks, and I didn't feel that the incremental gains were worth the |
| 228 | loss at that point so I stopped at 7-31-2005.)</p> |
| 229 | <p>Their changes include the following:</p> |
| 230 | <ul class="simple"> |
| 231 | <li>The Autocomplete and Calltip windows can now be opened manually with |
| 232 | Ctrl-Space and Ctrl-Shift-Space.</li> |
| 233 | <li>In the stand alone PyCrust app the various option settings, window |
| 234 | size and position, and etc. are saved and restored at the next run.</li> |
| 235 | <li>Added a help dialog bound to the F1 key that shows the key bindings.</li> |
| 236 | <li>Added a new text completion function that suggests words from the |
| 237 | history. Bound to Shift-Return.</li> |
| 238 | <li>F11 will toggle the maximized state of the frame.</li> |
| 239 | <li>switched to Bind() from wx.EVT_*().</li> |
| 240 | <li>Display of line numbers can be toggled.</li> |
| 241 | <li>F12 toggles a "free edit" mode of the shell buffer. This mode is |
| 242 | useful, for example, if you would like to remove some output or |
| 243 | errors or etc. from the buffer before doing a copy/paste. The free |
| 244 | edit mode is designated by the use of a red, non-flashing caret.</li> |
| 245 | <li>Ctrl-Shift-F will fold/unfold (hide/show) the selected lines.</li> |
| 246 | </ul> |
| 247 | <p>On top of these changes I (Robin Dunn) added the following:</p> |
| 248 | <ul class="simple"> |
| 249 | <li>General code cleanup and fixes.</li> |
| 250 | <li>Use wx.StandardPaths to determine the location of the config files.</li> |
| 251 | <li>Remove Orbtech attributions from the UI, they've been there long |
| 252 | enough.</li> |
| 253 | <li>Use wx.SP_LIVE_UPDATE on crust and filling windows.</li> |
| 254 | <li>Extended the saving of the config info and other new features to the |
| 255 | PyShell app too. Additionally, other apps that embed a PyCrust or a |
| 256 | PyShell can pass their own wx.Config object and have the Py code |
| 257 | save/restore its settings to/from there.</li> |
| 258 | <li>All of the classes with config info get an opportunity to save/load |
| 259 | their own settings instead of putting all the save/load code in one |
| 260 | place that then has to reach all over the place to do anything.</li> |
| 261 | <li>Enable editing of the startup python code, which will either be the |
| 262 | file pointed to by PYTHONSTARTUP or a file in the config dir if |
| 263 | PYTHONSTARTUP is not set in the environment.</li> |
| 264 | <li>Added an option to skip the running of the startup code when |
| 265 | PyShell or PyCrust starts.</li> |
| 266 | <li>PyCrust adds a pp(item) function to the shell's namespace that |
| 267 | pretty prints the item in the Display tab of the notebook. Added |
| 268 | code to raise that tab when pp() is called.</li> |
| 269 | <li>Added an option for whether to insert text for function parameters |
| 270 | when popping up the call tip.</li> |
| 271 | <li>Added Find and Find-Next functions that use the wx.FindReplaceDialog.</li> |
| 272 | </ul> |
| 273 | </div> |
| 274 | <div class="section" id="to-2004"> |
| 275 | <h2><a class="toc-backref" href="#id19" name="to-2004">0.9.4 (1/25/2004 to //2004)</a></h2> |
| 276 | <p>Removed wxd decorators in favor of new SWIG-generated docstrings.</p> |
| 277 | <p>Removed docs tabs from crust interface: |
| 278 | * wxPython Docs |
| 279 | * wxSTC Docs</p> |
| 280 | <p>Fixed Calltip tab refresh problem on Windows.</p> |
| 281 | <p>shell.autoCompleteAutoHide added with default of False.</p> |
| 282 | <p>Changed default namespace of Shell to __main__.__dict__, instead of an |
| 283 | empty dictionary.</p> |
| 284 | </div> |
| 285 | <div class="section" id="to-1-24-2004"> |
| 286 | <h2><a class="toc-backref" href="#id20" name="to-1-24-2004">0.9.3 (9/25/2003 to 1/24/2004)</a></h2> |
| 287 | <p>Fun and games with dynamic renaming. Details of any other changes |
| 288 | were lost in the confusion. I'll try to do better in the future.</p> |
| 289 | </div> |
| 290 | <div class="section" id="to-9-25-2003"> |
| 291 | <h2><a class="toc-backref" href="#id21" name="to-9-25-2003">0.9.2 (5/3/2003 to 9/25/2003)</a></h2> |
| 292 | <p>Changed to the new prefix-less "wx" package:</p> |
| 293 | <pre class="literal-block"> |
| 294 | import wx |
| 295 | </pre> |
| 296 | <p>instead of:</p> |
| 297 | <pre class="literal-block"> |
| 298 | from wxPython import wx |
| 299 | </pre> |
| 300 | <p>Fixed typo in <tt class="docutils literal"><span class="pre">PyWrap.py</span></tt>:</p> |
| 301 | <pre class="literal-block"> |
| 302 | if __name__ == '__main__': |
| 303 | main(sys.argv) |
| 304 | </pre> |
| 305 | <p>should have been:</p> |
| 306 | <pre class="literal-block"> |
| 307 | if __name__ == '__main__': |
| 308 | main() |
| 309 | </pre> |
| 310 | <p>Added pretty-print Display tab to Crust, based on suggestion from |
| 311 | Jason Whitlark.</p> |
| 312 | <p>Improved <tt class="docutils literal"><span class="pre">Can*</span></tt> checks in <tt class="docutils literal"><span class="pre">EditWindow</span></tt>, since STC is too lenient, |
| 313 | particularly when it is set to read-only but returns True for |
| 314 | CanPaste() (seems like an STC bug to me):</p> |
| 315 | <pre class="literal-block"> |
| 316 | def CanCopy(self): |
| 317 | """Return True if text is selected and can be copied.""" |
| 318 | return self.GetSelectionStart() != self.GetSelectionEnd() |
| 319 | |
| 320 | def CanCut(self): |
| 321 | """Return True if text is selected and can be cut.""" |
| 322 | return self.CanCopy() and self.CanEdit() |
| 323 | |
| 324 | def CanEdit(self): |
| 325 | """Return True if editing should succeed.""" |
| 326 | return not self.GetReadOnly() |
| 327 | |
| 328 | def CanPaste(self): |
| 329 | """Return True if pasting should succeed.""" |
| 330 | return stc.StyledTextCtrl.CanPaste(self) and self.CanEdit() |
| 331 | </pre> |
| 332 | </div> |
| 333 | <div class="section" id="to-5-2-2003"> |
| 334 | <h2><a class="toc-backref" href="#id22" name="to-5-2-2003">0.9.1 (3/21/2003 to 5/2/2003)</a></h2> |
| 335 | <p>PyCrust is dead! Long live Py!</p> |
| 336 | <ul class="simple"> |
| 337 | <li>Renamed <tt class="docutils literal"><span class="pre">PyCrust</span></tt> package to <tt class="docutils literal"><span class="pre">py</span></tt>.</li> |
| 338 | <li>Moved code to wxPython's CVS repository.</li> |
| 339 | </ul> |
| 340 | <p>Fixed bug in <tt class="docutils literal"><span class="pre">introspect.py</span></tt> on introspecting objects occurring |
| 341 | immediately after a secondary prompt, like this:</p> |
| 342 | <pre class="literal-block"> |
| 343 | >>> l = [1, 2, 3] |
| 344 | >>> for n in range(3): |
| 345 | ... l. <-- failed to popup autocomplete list |
| 346 | </pre> |
| 347 | <p>Added documentation files:</p> |
| 348 | <ul class="simple"> |
| 349 | <li>PyManual.txt</li> |
| 350 | <li>wxPythonManual.txt</li> |
| 351 | <li>wxPythonPackage.txt</li> |
| 352 | <li>wxPythonExamples.txt</li> |
| 353 | </ul> |
| 354 | <p>Added PyAlaMode and PyAlaCarte code editors.</p> |
| 355 | <p>Major refactoring to support <tt class="docutils literal"><span class="pre">editor</span></tt> and <tt class="docutils literal"><span class="pre">shell</span></tt> from the same |
| 356 | base.</p> |
| 357 | <p>Renamed program files:</p> |
| 358 | <ul class="simple"> |
| 359 | <li><tt class="docutils literal"><span class="pre">PyCrustApp.py</span></tt> to <tt class="docutils literal"><span class="pre">PyCrust.py</span></tt></li> |
| 360 | <li><tt class="docutils literal"><span class="pre">PyFillingApp.py</span></tt> to <tt class="docutils literal"><span class="pre">PyFilling.py</span></tt></li> |
| 361 | <li><tt class="docutils literal"><span class="pre">PyShellApp.py</span></tt> to <tt class="docutils literal"><span class="pre">PyShell.py</span></tt></li> |
| 362 | <li><tt class="docutils literal"><span class="pre">wrap.py</span></tt> to <tt class="docutils literal"><span class="pre">PyWrap.py</span></tt></li> |
| 363 | </ul> |
| 364 | <p>Removed disabling of autocomplete for lists of 2000 items or more. |
| 365 | The current implementation of wxSTC can now handle lists this big.</p> |
| 366 | <p>Improved handling of <tt class="docutils literal"><span class="pre">sys.path</span></tt> to mimic the standard Python shell.</p> |
| 367 | </div> |
| 368 | <div class="section" id="to-3-20-2003"> |
| 369 | <h2><a class="toc-backref" href="#id23" name="to-3-20-2003">0.9 (2/27/2003 to 3/20/2003)</a></h2> |
| 370 | <p>Added fontIncrease, fontDecrease, fontDefault signals, receivers and |
| 371 | keybindings:</p> |
| 372 | <pre class="literal-block"> |
| 373 | Ctrl+] Increase font size. |
| 374 | Ctrl+[ Decrease font size. |
| 375 | Ctrl+= Default font size. |
| 376 | </pre> |
| 377 | <p>Continued enhancement of the decorator capability to provide better |
| 378 | documentation and docstrings for wxPython classes and functions.</p> |
| 379 | <p>Introduced new tabbed interface:</p> |
| 380 | <ul class="simple"> |
| 381 | <li>Namespace</li> |
| 382 | <li>Calltip</li> |
| 383 | <li>Session</li> |
| 384 | <li>Dispatcher</li> |
| 385 | <li>wxPython Docs</li> |
| 386 | <li>wxSTC Docs</li> |
| 387 | </ul> |
| 388 | <p><tt class="docutils literal"><span class="pre">Filling.tree</span></tt> now expands tuples as well as lists. (It should have |
| 389 | done this all along, I just never noticed this omission before.)</p> |
| 390 | <p>Added this True/False test to all modules:</p> |
| 391 | <pre class="literal-block"> |
| 392 | try: |
| 393 | True |
| 394 | except NameError: |
| 395 | True = 1==1 |
| 396 | False = 1==0 |
| 397 | </pre> |
| 398 | <p>Added <tt class="docutils literal"><span class="pre">wxd</span></tt> directory with decoration classes.</p> |
| 399 | </div> |
| 400 | <div class="section" id="to-2-26-2003"> |
| 401 | <h2><a class="toc-backref" href="#id24" name="to-2-26-2003">0.8.2 (1/5/2003 to 2/26/2003)</a></h2> |
| 402 | <p>Wrapped <tt class="docutils literal"><span class="pre">sys.ps1</span></tt>, <tt class="docutils literal"><span class="pre">sys.ps2</span></tt>, and <tt class="docutils literal"><span class="pre">sys.ps3</span></tt> in <tt class="docutils literal"><span class="pre">str()</span></tt>. |
| 403 | (Thanks, Kieran Holland.)</p> |
| 404 | <p>Fixed minor things found by PyChecker.</p> |
| 405 | <p>Changed locals to use <tt class="docutils literal"><span class="pre">__main__.__dict__</span></tt> and added code to clean up |
| 406 | the namespace, making it as close to the regular Python environment as |
| 407 | possible. This solves the problem of pickling and unpickling |
| 408 | instances of classes defined in the shell.</p> |
| 409 | <p>Made <tt class="docutils literal"><span class="pre">shell.PasteAndRun()</span></tt> a little more forgiving when it finds a |
| 410 | ps2 prompt line with no trailing space, such when you copy code from a |
| 411 | web page.</p> |
| 412 | <p>Improved autocomplete behavior by adding these to shell:</p> |
| 413 | <pre class="literal-block"> |
| 414 | self.AutoCompSetAutoHide(False) |
| 415 | self.AutoCompStops(' .,;:([)]}\'"\\<>%^&+-=*/|`') |
| 416 | </pre> |
| 417 | <p>Added <tt class="docutils literal"><span class="pre">decor</span></tt> directory, <tt class="docutils literal"><span class="pre">decorator.py</span></tt>, <tt class="docutils literal"><span class="pre">stcDecor.py</span></tt>, and |
| 418 | <tt class="docutils literal"><span class="pre">stcConstants.py</span></tt>. These all serve the purpose of adding docstrings |
| 419 | to existing wxPython classes, in particular the <tt class="docutils literal"><span class="pre">wxStyledTextCtrl</span></tt>.</p> |
| 420 | <p>Added <tt class="docutils literal"><span class="pre">wrap.py</span></tt>, a command line utility for running a wxPython app |
| 421 | with additional runtime-tools loaded, such as PyCrust (the only tool |
| 422 | at this point).</p> |
| 423 | <p>Flushed the clipboard Cut/Copy operations so that selections will |
| 424 | exist in the clipboard even after PyCrust has been closed.</p> |
| 425 | <p>Improved the suppression of docstrings for simple data types appearing |
| 426 | in the namespace viewer.</p> |
| 427 | <p>Better handling of autocompletion with numeric types; no |
| 428 | autocompletion when typing a dot after an integer. If the |
| 429 | autocompletion is desired, type a space before the dot:</p> |
| 430 | <pre class="literal-block"> |
| 431 | func = 3 . |
| 432 | </pre> |
| 433 | <p>More Filling!!! The namespace tree is now dynamically updated.</p> |
| 434 | </div> |
| 435 | <div class="section" id="to-12-25-2002"> |
| 436 | <h2><a class="toc-backref" href="#id25" name="to-12-25-2002">0.8.1 (12/20/2002 to 12/25/2002)</a></h2> |
| 437 | <p>Improved keyboard handling with Autocomplete active. You can now use |
| 438 | Enter as well as Tab to select an item from the list.</p> |
| 439 | <p>Disabled autocomplete for lists of 2000 items or more. The current |
| 440 | implementation of wxSTC can't handle lists this big.</p> |
| 441 | <p>Changed <tt class="docutils literal"><span class="pre">filling</span></tt> to always display docstrings for objects. This is |
| 442 | useful for objects whose docstrings have been decorated, rather than |
| 443 | coming directly from the source code. (Hmmm. Sounds like someone is |
| 444 | doing some decorating. I wonder where that would be helpful? <wink>)</p> |
| 445 | <p>Fixed handling of icon. Added <tt class="docutils literal"><span class="pre">images.py</span></tt> file.</p> |
| 446 | </div> |
| 447 | <div class="section" id="to-12-16-2002"> |
| 448 | <h2><a class="toc-backref" href="#id26" name="to-12-16-2002">0.8 (10/29/2002 to 12/16/2002)</a></h2> |
| 449 | <p>Added "help" to startup banner info.</p> |
| 450 | <p>Made all <tt class="docutils literal"><span class="pre">wx</span></tt> and <tt class="docutils literal"><span class="pre">stc</span></tt> imports explicit. No more <tt class="docutils literal"><span class="pre">import</span> <span class="pre">*</span></tt>.</p> |
| 451 | <p>Replaced use of the <tt class="docutils literal"><span class="pre">wx</span></tt> module's <tt class="docutils literal"><span class="pre">true</span></tt> and <tt class="docutils literal"><span class="pre">false</span></tt> with |
| 452 | Python's <tt class="docutils literal"><span class="pre">True</span></tt> and <tt class="docutils literal"><span class="pre">False</span></tt>.</p> |
| 453 | <p>Changed <tt class="docutils literal"><span class="pre">introspect.getRoot()</span></tt> to use <tt class="docutils literal"><span class="pre">tokenize</span></tt> module. This |
| 454 | does a slightly better job than the previous parsing routine and the |
| 455 | code is clearer.</p> |
| 456 | <p>Improved handling of whitespace and empty types during introspection.</p> |
| 457 | <p>Fixed cut/copy clipboard problem under Linux. (Robin Dunn rocks!!!)</p> |
| 458 | <p>Added shell.about() which works like this:</p> |
| 459 | <pre class="literal-block"> |
| 460 | >>> shell.about() |
| 461 | PyCrust Version: 0.8 |
| 462 | Shell Revision: 1.80 |
| 463 | Interpreter Revision: 1.15 |
| 464 | Python Version: 2.2.2 |
| 465 | wxPython Version: 2.3.3.1 |
| 466 | Platform: linux2 |
| 467 | </pre> |
| 468 | <p>Added copy plus and paste plus to shell menu.</p> |
| 469 | <p>Moved shell menu from <tt class="docutils literal"><span class="pre">shell.py</span></tt> to <tt class="docutils literal"><span class="pre">shellmenu.py</span></tt>.</p> |
| 470 | <p>Added <tt class="docutils literal"><span class="pre">sys.stdin.readlines()</span></tt> support.</p> |
| 471 | <p>Added <tt class="docutils literal"><span class="pre">time.sleep()</span></tt> in <tt class="docutils literal"><span class="pre">readline()</span></tt> and <tt class="docutils literal"><span class="pre">OnIdle()</span></tt> event |
| 472 | handler to free up the CPU.</p> |
| 473 | </div> |
| 474 | <div class="section" id="to-8-27-2002"> |
| 475 | <h2><a class="toc-backref" href="#id27" name="to-8-27-2002">0.7.2 (2/22/2002 to 8/27/2002)</a></h2> |
| 476 | <p>Tweaked <tt class="docutils literal"><span class="pre">getAttributeNames()</span></tt> to pick up a few more attributes:</p> |
| 477 | <pre class="literal-block"> |
| 478 | '__bases__', '__class__', '__dict__', '__name__', 'func_closure', |
| 479 | 'func_code', 'func_defaults', 'func_dict', 'func_doc', |
| 480 | 'func_globals', 'func_name' |
| 481 | </pre> |
| 482 | <p>Added a tests directory and unit tests.</p> |
| 483 | <p>Improved support for empty types in the shell: <tt class="docutils literal"><span class="pre">[]</span></tt>, <tt class="docutils literal"><span class="pre">()</span></tt> and |
| 484 | <tt class="docutils literal"><span class="pre">{}</span></tt> as far as when call tips and autocompletion are available.</p> |
| 485 | <p>Added support for the other triple string - <tt class="docutils literal"><span class="pre">''''''</span></tt>.</p> |
| 486 | <p>Refactored <tt class="docutils literal"><span class="pre">introspect.py</span></tt> to improve testability.</p> |
| 487 | <p>Improved call tips for unbound methods by leaving the "self" |
| 488 | parameter, since unbound methods require an instance be passed.</p> |
| 489 | <p>Fixed call tip bug where a tip was displayed when a "(" was typed |
| 490 | after an object that wasn't callable.</p> |
| 491 | <p>Fixed <tt class="docutils literal"><span class="pre">getAllAttributeNames</span></tt> when <tt class="docutils literal"><span class="pre">str(object)</span></tt> fails.</p> |
| 492 | <p>Added brace highlighting. (Thank you, Kevin Altis.)</p> |
| 493 | <p>Fixed problem displaying unicode objects in <tt class="docutils literal"><span class="pre">PyFilling</span></tt>.</p> |
| 494 | <p>Changed how <tt class="docutils literal"><span class="pre">filling.py</span></tt> checks for expandable objects. Lists are |
| 495 | now expandable objects.</p> |
| 496 | <p>Made the key handling more robust when there is an active text |
| 497 | selection that includes text prior to the last primary prompt. Thanks |
| 498 | to Raul Cota for pointing this out.</p> |
| 499 | <p>Fixed wxSTC problem with brace highlighting and non-us keyboards. |
| 500 | (Thank you for the patch, Jean-Michel Fauth.)</p> |
| 501 | <p>Added <tt class="docutils literal"><span class="pre">busy</span> <span class="pre">=</span> <span class="pre">wxBusyCursor()</span></tt> to key points in <tt class="docutils literal"><span class="pre">shell</span></tt> and |
| 502 | <tt class="docutils literal"><span class="pre">filling</span></tt>.</p> |
| 503 | <p>Added <tt class="docutils literal"><span class="pre">OnCloseWindow</span></tt> handler to <tt class="docutils literal"><span class="pre">ShellFrame</span></tt> and <tt class="docutils literal"><span class="pre">CrustFrame</span></tt>.</p> |
| 504 | <p>Default to <tt class="docutils literal"><span class="pre">SetWrapMode(1)</span></tt> for shell and namespace viewer.</p> |
| 505 | <p>Added <tt class="docutils literal"><span class="pre">shell.wrap()</span></tt> and <tt class="docutils literal"><span class="pre">shell.zoom()</span></tt>.</p> |
| 506 | <p>Added autoCompleteKeys hooks for Raul Cota.</p> |
| 507 | <p>Cleaned up various little key handling bugs.</p> |
| 508 | <p>Changed input methods to get values from shell, rather than dialog |
| 509 | boxes. Renamed <tt class="docutils literal"><span class="pre">readIn</span></tt> to <tt class="docutils literal"><span class="pre">readline</span></tt> and <tt class="docutils literal"><span class="pre">readRaw</span></tt> to |
| 510 | <tt class="docutils literal"><span class="pre">raw_input</span></tt>.</p> |
| 511 | </div> |
| 512 | <div class="section" id="to-2-21-2002"> |
| 513 | <h2><a class="toc-backref" href="#id28" name="to-2-21-2002">0.7.1 (12/12/2001 to 2/21/2002)</a></h2> |
| 514 | <p>Fixed <tt class="docutils literal"><span class="pre">OnChar()</span></tt> issues effecting European keyboards, as reported by |
| 515 | Jean-Michel Fauth.</p> |
| 516 | <p>Fixed <tt class="docutils literal"><span class="pre">introspect.py</span></tt> issue with xmlrpc objects reported by Kevin |
| 517 | Altis.</p> |
| 518 | <p>Fixed some introspect/PyFilling issues with regard to Python 2.2.</p> |
| 519 | <p>Fixed font background color as reported by Keith J. Farmer. (Thanks)</p> |
| 520 | <p>Fixed problem with call tips and autocompletion inside multiline |
| 521 | commands as report by Kevin Altis.</p> |
| 522 | <p>Improved <tt class="docutils literal"><span class="pre">OnKeyDown</span></tt> handling of cut/copy/paste operations based on |
| 523 | feedback from Syver Enstad. (Thanks)</p> |
| 524 | <p>Added a <tt class="docutils literal"><span class="pre">shell.help()</span></tt> method to display some help info.</p> |
| 525 | <p>Changed sort of items in the namespace viewer to case insensitive.</p> |
| 526 | <p>Changed <tt class="docutils literal"><span class="pre">attributes.sort(lambda</span> <span class="pre">x,</span> <span class="pre">y:</span> <span class="pre">cmp(x.upper(),</span> <span class="pre">y.upper()))</span></tt> in |
| 527 | advance of an upcoming fix to an autocompletion matching bug in wxSTC.</p> |
| 528 | <p>Improved support for ZODB by allowing namespace drilldown into BTrees.</p> |
| 529 | <p>Added <tt class="docutils literal"><span class="pre">shell.PasteAndRun()</span></tt> to support pasting multiple commands into |
| 530 | the shell from the clipboard. Ctrl+Shift+V or v.</p> |
| 531 | <p>Enter now always processes a command (or copies down a previous one.) |
| 532 | To insert a line break, press Ctrl+Enter.</p> |
| 533 | <p>Escape key clears the current, unexecuted command.</p> |
| 534 | <p>History retrieval changed to replace current command. Added new keys |
| 535 | to insert from history - Shift+Up and Shift+Down.</p> |
| 536 | <p>Better call tips on objects with <tt class="docutils literal"><span class="pre">__call__</span></tt> methods.</p> |
| 537 | <p>Improved call tip positioning calculation.</p> |
| 538 | </div> |
| 539 | <div class="section" id="to-12-11-2001"> |
| 540 | <h2><a class="toc-backref" href="#id29" name="to-12-11-2001">0.7 (10/15/2001 to 12/11/2001)</a></h2> |
| 541 | <p>Changed how command history retrieval functions work. Added Alt-P, |
| 542 | Alt-N as keybindings for Retrieve-Previous, Retrieve-Next.</p> |
| 543 | <p>Added full support for multi-line commands, similar to IDLE.</p> |
| 544 | <p>Changed <tt class="docutils literal"><span class="pre">introspect.getAttributeNames()</span></tt> to do a case insensitive |
| 545 | sort.</p> |
| 546 | <p>Changed Cut/Copy/Paste to deal with prompts intelligently. Cut and |
| 547 | Copy remove all prompts. Paste can handle prompted or not-prompted |
| 548 | text.</p> |
| 549 | <p>Added <tt class="docutils literal"><span class="pre">CopyWithPrompts()</span></tt> method attached to Ctrl-Shift-C for those |
| 550 | times when you really do want all the prompts left intact.</p> |
| 551 | <p>Improved handling of the shell's read-only zone.</p> |
| 552 | <p>Changed <tt class="docutils literal"><span class="pre">CrustFrame.__init__</span></tt> parameter spec to include all |
| 553 | parameters allowed by a <tt class="docutils literal"><span class="pre">wxFrame</span></tt>.</p> |
| 554 | <p>Changed <tt class="docutils literal"><span class="pre">FillingText</span></tt> to be read-only.</p> |
| 555 | <p>Renamed <tt class="docutils literal"><span class="pre">PyCrust.py</span></tt> to <tt class="docutils literal"><span class="pre">PyCrustApp.py</span></tt> to eliminate |
| 556 | package/module name conflicts that kept you from doing <tt class="docutils literal"><span class="pre">from</span> <span class="pre">PyCrust</span> |
| 557 | <span class="pre">import</span> <span class="pre">shell</span></tt> inside files located in the <tt class="docutils literal"><span class="pre">PyCrust</span></tt> directory.</p> |
| 558 | <p>Renamed <tt class="docutils literal"><span class="pre">PyFilling.py</span></tt> to <tt class="docutils literal"><span class="pre">PyFillingApp.py</span></tt> and <tt class="docutils literal"><span class="pre">PyShell.py</span></tt> to |
| 559 | <tt class="docutils literal"><span class="pre">PyShellApp.py</span></tt> to maintain consistency.</p> |
| 560 | <p>Removed the <tt class="docutils literal"><span class="pre">__date__</span></tt> property from all modules.</p> |
| 561 | <p>Fixed bug in <tt class="docutils literal"><span class="pre">introspect.getCallTip()</span></tt>, reported by Kevin Altis.</p> |
| 562 | </div> |
| 563 | <div class="section" id="to-10-12-2001"> |
| 564 | <h2><a class="toc-backref" href="#id30" name="to-10-12-2001">0.6.1 (9/19/2001 to 10/12/2001)</a></h2> |
| 565 | <p>Changed <tt class="docutils literal"><span class="pre">Shell.run()</span></tt> to always position to the end of existing |
| 566 | text, as suggested by Raul Cota.</p> |
| 567 | <p>Changed <tt class="docutils literal"><span class="pre">introspect.getAllAttributeNames()</span></tt> to break circular |
| 568 | references in <tt class="docutils literal"><span class="pre">object.__class__</span></tt>, which occurs in Zope/ZODB |
| 569 | extension classes.</p> |
| 570 | <p>Changed <tt class="docutils literal"><span class="pre">filling.FillingTree.getChildren()</span></tt> to introspect extension |
| 571 | classes.</p> |
| 572 | <p>Fixed minor bugs in <tt class="docutils literal"><span class="pre">introspect.getCallTip()</span></tt> that were interfering |
| 573 | with call tips for Zope/ZODB extension class methods.</p> |
| 574 | <p>In preparation for wxPython 2.3.2, added code to fix a font sizing |
| 575 | problem. Versions of wxPython prior to 2.3.2 had a sizing bug on Win |
| 576 | platform where the font was 2 points larger than what was specified.</p> |
| 577 | <p>Added a hack to <tt class="docutils literal"><span class="pre">introspect.getAllAttributeNames()</span></tt> to "wake up" |
| 578 | ZODB objects that are asleep - in a "ghost" state. Otherwise it |
| 579 | returns incomplete info.</p> |
| 580 | </div> |
| 581 | <div class="section" id="to-9-12-2001"> |
| 582 | <h2><a class="toc-backref" href="#id31" name="to-9-12-2001">0.6 (8/21/2001 to 9/12/2001)</a></h2> |
| 583 | <p>Added <tt class="docutils literal"><span class="pre">PyFilling.py</span></tt> and <tt class="docutils literal"><span class="pre">filling.py</span></tt>.</p> |
| 584 | <p><tt class="docutils literal"><span class="pre">PyShell.py</span></tt> and <tt class="docutils literal"><span class="pre">PyFilling.py</span></tt> can now be run standalone, as well |
| 585 | as <tt class="docutils literal"><span class="pre">PyCrust.py</span></tt>.</p> |
| 586 | <p>Added <tt class="docutils literal"><span class="pre">crust.py</span></tt> and moved some code from <tt class="docutils literal"><span class="pre">PyCrust.py</span></tt> to it.</p> |
| 587 | <p>Added command history retrieval features submitted by Richie Hindle.</p> |
| 588 | <p>Changed <tt class="docutils literal"><span class="pre">shell.write()</span></tt> to replace line endings with OS-specific |
| 589 | endings. Changed <tt class="docutils literal"><span class="pre">shell.py</span></tt> and <tt class="docutils literal"><span class="pre">interpreter.py</span></tt> to use |
| 590 | <tt class="docutils literal"><span class="pre">os.linesep</span></tt> in strings having hardcoded line endings.</p> |
| 591 | <p>Added <tt class="docutils literal"><span class="pre">shell.redirectStdin()</span></tt>, <tt class="docutils literal"><span class="pre">shell.redirectStdout()</span></tt> and |
| 592 | <tt class="docutils literal"><span class="pre">shell.redirectStderr()</span></tt> to allow the surrounding app to toggle |
| 593 | requests that the specified <tt class="docutils literal"><span class="pre">sys.std*</span></tt> be redirected to the shell. |
| 594 | These can also be run from within the shell itself, of course.</p> |
| 595 | <p>The shell now adds the current working directory "." to the search |
| 596 | path:</p> |
| 597 | <pre class="literal-block"> |
| 598 | sys.path.insert(0, os.curdir) |
| 599 | </pre> |
| 600 | <p>Added support for distutils installations.</p> |
| 601 | </div> |
| 602 | <div class="section" id="to-8-20-2001"> |
| 603 | <h2><a class="toc-backref" href="#id32" name="to-8-20-2001">0.5.4 (8/17/2001 to 8/20/2001)</a></h2> |
| 604 | <p>Changed default font size under Linux to:</p> |
| 605 | <pre class="literal-block"> |
| 606 | 'size' : 12, |
| 607 | 'lnsize' : 10, |
| 608 | </pre> |
| 609 | <p>Changed <tt class="docutils literal"><span class="pre">Shell</span></tt> to expect a parameter referencing an Interpreter |
| 610 | class, rather than an intepreter instance, to facilitate subclassing |
| 611 | of Interpreter, which effectively broke when the Editor class was |
| 612 | eliminated.</p> |
| 613 | <p>Fixed <tt class="docutils literal"><span class="pre">PyCrustAlaCarte.py</span></tt>, which had been broken by previous |
| 614 | changes.</p> |
| 615 | <p>Created <tt class="docutils literal"><span class="pre">InterpreterAlaCarte</span></tt> class as an example for use in the |
| 616 | demo.</p> |
| 617 | <p>Split <tt class="docutils literal"><span class="pre">PyCrust.py</span></tt> into <tt class="docutils literal"><span class="pre">PyCrust.py</span></tt> and <tt class="docutils literal"><span class="pre">PyShell.py</span></tt> in |
| 618 | anticipation of <tt class="docutils literal"><span class="pre">PyFilling.py</span></tt>.</p> |
| 619 | </div> |
| 620 | <div class="section" id="id2"> |
| 621 | <h2><a class="toc-backref" href="#id33" name="id2">0.5.3 (8/16/2001)</a></h2> |
| 622 | <p>Added patch to <tt class="docutils literal"><span class="pre">PyCrust.py</span></tt> to fix wxPython bug:</p> |
| 623 | <pre class="literal-block"> |
| 624 | wxID_SELECTALL = NewId() # This *should* be defined by wxPython. |
| 625 | </pre> |
| 626 | </div> |
| 627 | <div class="section" id="to-8-15-2001"> |
| 628 | <h2><a class="toc-backref" href="#id34" name="to-8-15-2001">0.5.2 (8/14/2001 to 8/15/2001)</a></h2> |
| 629 | <p>Shortened module names by dropping "PyCrust" as a prefix.</p> |
| 630 | <p>Changed <tt class="docutils literal"><span class="pre">version</span></tt> to <tt class="docutils literal"><span class="pre">VERSION</span></tt> in <tt class="docutils literal"><span class="pre">version</span></tt> module.</p> |
| 631 | <p>Added Options menu to PyCrust application.</p> |
| 632 | <p>Eliminated the Editor class (and editor module) by merging with Shell. |
| 633 | This means that Shell "is a" wxStyledTextCtrl rather than "has a". |
| 634 | There just wasn't enough non-gui code to justify the separation. |
| 635 | Plus, Shell will be much easier for gui toolkits/designers to deal |
| 636 | with now.</p> |
| 637 | </div> |
| 638 | <div class="section" id="to-8-14-2001"> |
| 639 | <h2><a class="toc-backref" href="#id35" name="to-8-14-2001">0.5.1 (8/10/2001 to 8/14/2001)</a></h2> |
| 640 | <p>Added <tt class="docutils literal"><span class="pre">introspect</span></tt> module.</p> |
| 641 | <p>Moved some functionality from <tt class="docutils literal"><span class="pre">PyCrustInterp</span></tt> to <tt class="docutils literal"><span class="pre">introspect</span></tt>.</p> |
| 642 | <p>Changed <tt class="docutils literal"><span class="pre">introspect.getRoot()</span></tt> to no longer remove whitespace from |
| 643 | the command. This was a remnant of a previous approach that, when |
| 644 | left as part of the current approach, turned out to be a really bad |
| 645 | thing.</p> |
| 646 | <p>Changed <tt class="docutils literal"><span class="pre">introspect.getRoot()</span></tt> to allow commands of <tt class="docutils literal"><span class="pre">''</span></tt>, <tt class="docutils literal"><span class="pre">""</span></tt>, |
| 647 | <tt class="docutils literal"><span class="pre">""""""</span></tt>, <tt class="docutils literal"><span class="pre">[]</span></tt>, <tt class="docutils literal"><span class="pre">()</span></tt>, and <tt class="docutils literal"><span class="pre">{}</span></tt> to pass through. This allows |
| 648 | you to type them, followed by a dot, and get autocomplete options on |
| 649 | them.</p> |
| 650 | <p>Changed <tt class="docutils literal"><span class="pre">introspect.getRoot()</span></tt> to identify some situations where |
| 651 | strings shouldn't be considered roots. For example:</p> |
| 652 | <pre class="literal-block"> |
| 653 | >>> import PyCrust # To illustrate the potential problem. |
| 654 | >>> len('PyCrust.py') |
| 655 | </pre> |
| 656 | <p>Typing the dot at the end of "PyCrust" in the second line above should |
| 657 | NOT result in an autocompletion list because "PyCrust" is part of a |
| 658 | string in this context, not a reference to the PyCrust module object. |
| 659 | Similar reasoning applies to call tips. For example:</p> |
| 660 | <pre class="literal-block"> |
| 661 | >>> len('dir(') |
| 662 | </pre> |
| 663 | <p>Typing the left paren at the end of "dir" should NOT result in a call |
| 664 | tip.</p> |
| 665 | <p>Both features now behave properly in the examples given. However, |
| 666 | there is still the case where whitespace precedes the potential root |
| 667 | and that is NOT handled properly. For example:</p> |
| 668 | <pre class="literal-block"> |
| 669 | >>> len('this is a dir(') |
| 670 | </pre> |
| 671 | <p>and:</p> |
| 672 | <pre class="literal-block"> |
| 673 | >>> len('This is PyCrust.py') |
| 674 | </pre> |
| 675 | <p>More code needs to be written to handle more complex situations.</p> |
| 676 | <p>Added <tt class="docutils literal"><span class="pre">locals=None</span></tt> parameter to <tt class="docutils literal"><span class="pre">Shell.__init__()</span></tt>.</p> |
| 677 | <p>Added support for magic attribute retrieval. Users can change this |
| 678 | with:</p> |
| 679 | <pre class="literal-block"> |
| 680 | >>> shell.editor.autoCompleteIncludeMagic = 0 |
| 681 | </pre> |
| 682 | <p>Added the ability to set filters on auto completion to exclude |
| 683 | attributes prefixed with a single or double underscore. Users can |
| 684 | exclude one or the other or both with:</p> |
| 685 | <pre class="literal-block"> |
| 686 | >>> shell.editor.autoCompleteExcludeSingle = 1 |
| 687 | >>> shell.editor.autoCompleteExcludeDouble = 1 |
| 688 | </pre> |
| 689 | </div> |
| 690 | <div class="section" id="id3"> |
| 691 | <h2><a class="toc-backref" href="#id36" name="id3">0.5 (8/8/2001)</a></h2> |
| 692 | <p>Mostly just a final version change before creating a release.</p> |
| 693 | </div> |
| 694 | <div class="section" id="to-8-7-2001"> |
| 695 | <h2><a class="toc-backref" href="#id37" name="to-8-7-2001">0.4 (8/4/2001 to 8/7/2001)</a></h2> |
| 696 | <p>Changed version/revision handling.</p> |
| 697 | <p>Fixed bugs.</p> |
| 698 | </div> |
| 699 | <div class="section" id="to-8-3-2001"> |
| 700 | <h2><a class="toc-backref" href="#id38" name="to-8-3-2001">0.3 (8/2/2001 to 8/3/2001)</a></h2> |
| 701 | <p>Removed lots of cruft.</p> |
| 702 | <p>Added lots of docstrings.</p> |
| 703 | <p>Imported to CVS repository at SourceForge.</p> |
| 704 | <p>Added call tips.</p> |
| 705 | </div> |
| 706 | <div class="section" id="to-8-2-2001"> |
| 707 | <h2><a class="toc-backref" href="#id39" name="to-8-2-2001">0.2 (7/30/2001 to 8/2/2001)</a></h2> |
| 708 | <p>Renamed several files.</p> |
| 709 | <p>Added command autocompletion.</p> |
| 710 | <p>Added menus to PyCrust.py: File, Edit and Help.</p> |
| 711 | <p>Added sample applications: <tt class="docutils literal"><span class="pre">PyCrustAlaCarte.py</span></tt>, |
| 712 | <tt class="docutils literal"><span class="pre">PyCrustAlaMode.py</span></tt>, and <tt class="docutils literal"><span class="pre">PyCrustMinimus.py</span></tt>.</p> |
| 713 | </div> |
| 714 | <div class="section" id="to-7-19-2001"> |
| 715 | <h2><a class="toc-backref" href="#id40" name="to-7-19-2001">0.1 (7/1/2001 to 7/19/2001)</a></h2> |
| 716 | <p>Added basic syntax coloring much like Boa.</p> |
| 717 | <p>Added read-only logging much like IDLE.</p> |
| 718 | <p>Can retrieve a previous command by putting the cursor back on that |
| 719 | line and hitting enter.</p> |
| 720 | <p>Stdin and raw_input operate properly so you can now do <tt class="docutils literal"><span class="pre">help()</span></tt> and |
| 721 | <tt class="docutils literal"><span class="pre">license()</span></tt> without hanging.</p> |
| 722 | <p>Redefined "quit", "exit", and "close" to display a better-than-nothing |
| 723 | response.</p> |
| 724 | <p>Home key honors the prompt.</p> |
| 725 | <p>Created SourceForge account, but nothing was posted.</p> |
| 726 | </div> |
| 727 | <div class="section" id="in-the-beginning-there-was-pie-7-1-2001"> |
| 728 | <h2><a class="toc-backref" href="#id41" name="in-the-beginning-there-was-pie-7-1-2001">In the beginning, there was pie... (7/1/2001)</a></h2> |
| 729 | <p>Blame it all on IDLE, Boa and PythonWin. I was using all three, got |
| 730 | frustrated with their dissimilarities, and began to let everyone know |
| 731 | how I felt. At the same time, Scintilla looked like an interesting |
| 732 | tool to build a shell around. And while I didn't receive much in the |
| 733 | way of positive feedback, let alone encouragement, I just couldn't let |
| 734 | go of the idea of a Scintilla-based Python shell. Then the PythonCard |
| 735 | project got to the point where they were talking about including a |
| 736 | shell in their development environment. That was all the incentive I |
| 737 | needed. PyCrust had to happen...</p> |
| 738 | </div> |
| 739 | </div> |
| 740 | </div> |
| 741 | </body> |
| 742 | </html> |