From mail@peterbe.com Mon Jul 2 13:33:58 2001 From: mail@peterbe.com (Peter Bengtsson) Date: Mon, 2 Jul 2001 14:33:58 +0200 Subject: [Idle-dev] rightclick References: Message-ID: <014a01c102f9$59e078c0$1c64a8c0@PBN> I tried that, but since I have mine in a folder called "Program file" I put quotation marks around the paths. "C:\program files\python\pythonw.exe" "C:\program files\python\tools\idle\idle.pyw" -s -e %1 When I right click C:\program files\python\apa.py and choose Edit in IDLE, IDLE tries to open two files. One called "C:\\Program" and one called "C:\\Program Files\\Python\\Files\\Python\\apa.py" according to the two failure dialog messages "Opening non-existent file..." This works as expected though on the command line: "C:\program files\python\pythonw.exe" "C:\program files\python\tools\idle\idle.pyw" -s -e "C:\program files\python\apa.py" Any hints? ...except renaming my "Program files" folder to "Programfiles" Can not somebody with more brains that me use this http://www.toolwood.dk/freeware/PythonLauncher/ to make the idle.pyw an exe and hence it will work better with windows? Cheers, Peter > In Windows Explorer, Tools | Folder Options | File Types scroll down the > list and select Python File. Hit the Edit button. In the Edit File Type > dialog hit the New button. In the Action field type in "Edit in IDLE" and in > the Application used to perform action field type in > "C:\Python21\pythonw.exe C:\PYTHON21\Tools\idle\idle.pyw -s -e". The -s > switch is optional and will load your PYTHONSTARTUP script. The -e says to > edit the file. The location of pythonw.exe and idle.pyw depends on your > installation. > > Having done this, you can now right click on a .py file and you will have an > option to "Edit in IDLE". The only drawback to this technique is that if > IDLE is already running, a second shell window will open as well as the file > you want to edit. > > Hope that helps. > > --- > Patrick K. O'Brien > Orbtech > "I am, therefore I think." > > -----Original Message----- > From: idle-dev-admin@python.org [mailto:idle-dev-admin@python.org]On Behalf > Of Peter Bengtsson > Sent: Friday, June 29, 2001 9:30 AM > To: idle-dev@python.org > Subject: [Idle-dev] rightclick > > 1) In windows, how do I (if possible) right-click a py file and open it in > IDLE? > > 2) In windows, how do I (if possible with some hacking) right-click a py > file and open it in IDLE? > > 3) Where's the mailinglist archive for this mailing list? I never did any > research before question 1 and 2. > > > Cheers, Peter > > > _______________________________________________ > IDLE-dev mailing list > IDLE-dev@python.org > http://mail.python.org/mailman/listinfo/idle-dev > From pobrien@orbtech.com Mon Jul 2 15:27:35 2001 From: pobrien@orbtech.com (Patrick K. O'Brien) Date: Mon, 2 Jul 2001 09:27:35 -0500 Subject: [Idle-dev] rightclick In-Reply-To: <014a01c102f9$59e078c0$1c64a8c0@PBN> Message-ID: I think this is why Python no longer installs in Program Files - too many little gotchas with long names and spaces in names. --- Patrick K. O'Brien Orbtech "I am, therefore I think." -----Original Message----- From: idle-dev-admin@python.org [mailto:idle-dev-admin@python.org]On Behalf Of Peter Bengtsson Sent: Monday, July 02, 2001 7:34 AM To: pobrien@orbtech.com; IDLE Developers List Subject: Re: [Idle-dev] rightclick I tried that, but since I have mine in a folder called "Program file" I put quotation marks around the paths. "C:\program files\python\pythonw.exe" "C:\program files\python\tools\idle\idle.pyw" -s -e %1 When I right click C:\program files\python\apa.py and choose Edit in IDLE, IDLE tries to open two files. One called "C:\\Program" and one called "C:\\Program Files\\Python\\Files\\Python\\apa.py" according to the two failure dialog messages "Opening non-existent file..." This works as expected though on the command line: "C:\program files\python\pythonw.exe" "C:\program files\python\tools\idle\idle.pyw" -s -e "C:\program files\python\apa.py" Any hints? ...except renaming my "Program files" folder to "Programfiles" Can not somebody with more brains that me use this http://www.toolwood.dk/freeware/PythonLauncher/ to make the idle.pyw an exe and hence it will work better with windows? Cheers, Peter > In Windows Explorer, Tools | Folder Options | File Types scroll down the > list and select Python File. Hit the Edit button. In the Edit File Type > dialog hit the New button. In the Action field type in "Edit in IDLE" and in > the Application used to perform action field type in > "C:\Python21\pythonw.exe C:\PYTHON21\Tools\idle\idle.pyw -s -e". The -s > switch is optional and will load your PYTHONSTARTUP script. The -e says to > edit the file. The location of pythonw.exe and idle.pyw depends on your > installation. > > Having done this, you can now right click on a .py file and you will have an > option to "Edit in IDLE". The only drawback to this technique is that if > IDLE is already running, a second shell window will open as well as the file > you want to edit. > > Hope that helps. > > --- > Patrick K. O'Brien > Orbtech > "I am, therefore I think." > > -----Original Message----- > From: idle-dev-admin@python.org [mailto:idle-dev-admin@python.org]On Behalf > Of Peter Bengtsson > Sent: Friday, June 29, 2001 9:30 AM > To: idle-dev@python.org > Subject: [Idle-dev] rightclick > > 1) In windows, how do I (if possible) right-click a py file and open it in > IDLE? > > 2) In windows, how do I (if possible with some hacking) right-click a py > file and open it in IDLE? > > 3) Where's the mailinglist archive for this mailing list? I never did any > research before question 1 and 2. > > > Cheers, Peter > > > _______________________________________________ > IDLE-dev mailing list > IDLE-dev@python.org > http://mail.python.org/mailman/listinfo/idle-dev > _______________________________________________ IDLE-dev mailing list IDLE-dev@python.org http://mail.python.org/mailman/listinfo/idle-dev From guido@digicool.com Mon Jul 2 18:20:28 2001 From: guido@digicool.com (Guido van Rossum) Date: Mon, 02 Jul 2001 13:20:28 -0400 Subject: [Idle-dev] vze2f978@verizon.net: IDLE issue--beeping and IDLE hangs Message-ID: <200107021720.f62HKS803466@odiug.digicool.com> A bug report. --Guido van Rossum (home page: http://www.python.org/~guido/) ------- Forwarded Message Date: Mon, 02 Jul 2001 09:07:58 -0500 From: vze2f978@verizon.net To: guido@python.org cc: Subject: IDLE issue--beeping and IDLE hangs If the window looks something like this: >>>(cursor is here) for x in range[w]: and you hit return, IDLE will stop responding, but beep continually until the c omputer is restarted. This is in Windows 2000. I'm not sure whether the cursor is before or after the invisible space after the ">>>"; the for statement is on the line AFTER the >>>. Don't know why the student used square braces either. ------- End of Forwarded Message From mail@peterbe.com Fri Jul 6 11:47:58 2001 From: mail@peterbe.com (Peter Bengtsson) Date: Fri, 6 Jul 2001 12:47:58 +0200 Subject: [Idle-dev] When searching in Windows Message-ID: <012e01c10609$f68554d0$1c64a8c0@PBN> I search and get an Output list. I right click "Go to file/line" and then nothing happens. Unfortunatly I haven't noted when and where but this bug seems to vary for me. I've had two setups where it works and three where it doesn't. Now it doesn't. It's always been win2000 or winNT and IDLE 0.5 Does anybody know why it might be like this? Simple solutions? Peter From guido@digicool.com Fri Jul 6 12:03:37 2001 From: guido@digicool.com (Guido van Rossum) Date: Fri, 06 Jul 2001 07:03:37 -0400 Subject: [Idle-dev] When searching in Windows In-Reply-To: Your message of "Fri, 06 Jul 2001 12:47:58 +0200." <012e01c10609$f68554d0$1c64a8c0@PBN> References: <012e01c10609$f68554d0$1c64a8c0@PBN> Message-ID: <200107061103.f66B3bH17926@odiug.digicool.com> > I search and get an Output list. I right click "Go to file/line" and then > nothing happens. > > Unfortunatly I haven't noted when and where but this bug seems to vary for > me. I've had two setups where it works and three where it doesn't. Now it > doesn't. It's always been win2000 or winNT and IDLE 0.5 > > Does anybody know why it might be like this? Simple solutions? > > Peter Upgrade to Python 2.1 so you get to use IDLE 0.8? --Guido van Rossum (home page: http://www.python.org/~guido/) From StephenM.Gava Sat Jul 7 07:38:43 2001 From: StephenM.Gava (StephenM.Gava) Date: Sat, 7 Jul 2001 16:38:43 +1000 Subject: [Idle-dev] idle-fork hiatus Message-ID: <01070716384300.01147@oberon> Hello IDLErs, I thought I'd just post a quick note to anyone who's interested on what's happenning with the revamped idle-fork project. Basically we're still at stage one of the "revamping" (so, that means it was vamped before?) which is bringing cvs up to date with changes made in the last year to python official idle. There's a hold up for us at the moment as our cvs tree at sourceforge needs a little manual intervention due to a problem introduced by yours truly when first attempting to import python-idle as a vendor branch. With the invaluable help of Kurt B. Kaiser that problem was quickly solved (thanks Kurt), but sourceforge does not allow projects shell level access to their own cvs trees, so at the moment we are stuck waiting for sourceforge support to get around to making a couple of minor changes for us. (Changes that would take about ten seconds if we had file-level access to the idle-fork cvs ourselves, but which we've been waiting a week, so far, for sourceforge to do for us...). As soon as we have a working cvs again hopefully the fun part (starting to commit some new stuff!) can begin. Til later, Stephen. -- Stephen M. Gava "More power to those who don't care for it." - anon From mail@peterbe.com Mon Jul 9 08:53:51 2001 From: mail@peterbe.com (Peter Bengtsson) Date: Mon, 9 Jul 2001 09:53:51 +0200 Subject: [Idle-dev] When searching in Windows References: <012e01c10609$f68554d0$1c64a8c0@PBN> <200107061103.f66B3bH17926@odiug.digicool.com> Message-ID: <005601c10850$17237490$1c64a8c0@PBN> > > Does anybody know why it might be like this? Simple solutions? > > > > Peter > > Upgrade to Python 2.1 so you get to use IDLE 0.8? I met Zope before I met Python. Currently, allt that matters is for Zope usage. But I suppose it could be good to keep a latest version around for testing and for the IDLE then. Peter From Christoph.Herzog@urz.uni-heidelberg.de Tue Jul 10 13:28:17 2001 From: Christoph.Herzog@urz.uni-heidelberg.de (Christoph.Herzog@urz.uni-heidelberg.de) Date: Tue, 10 Jul 2001 14:28:17 +0200 Subject: [Idle-dev] idle eats code Message-ID: <3B4B1101.10805.DAC704@localhost> Hi, I hope this is not too off topic or covered before. The phenomenon is this: while editing a python file under windows 2000, IDLE (0.8, python 2.1) suddenly crashes vanishing completely (closing the python interpreter as well). The evil thing is that the .py file having been worked on is exactly 0 byte after the crash, although having been saved before, there is nothing left. Unfortunately (or rather fortunately) this happens rarely, so that I did not manage to reproduce the bug, however, it seems severe enough and I have the impression that it might be connected with either using the clipboard under Windows or with a bug in Tkinter (probably a Tcl-bug) with the internal utf8-representation of the text- widget. (I have reported this; cf. request ID #418173 ) regards Christoph From guido@digicool.com Tue Jul 10 14:58:00 2001 From: guido@digicool.com (Guido van Rossum) Date: Tue, 10 Jul 2001 09:58:00 -0400 Subject: [Idle-dev] idle eats code In-Reply-To: Your message of "Tue, 10 Jul 2001 14:28:17 +0200." <3B4B1101.10805.DAC704@localhost> References: <3B4B1101.10805.DAC704@localhost> Message-ID: <200107101358.f6ADw0A32149@odiug.digicool.com> > Hi, > I hope this is not too off topic or covered before. The phenomenon is this: while > editing a python file under windows 2000, IDLE (0.8, python 2.1) suddenly > crashes vanishing completely (closing the python interpreter as well). The evil > thing is that the .py file having been worked on is exactly 0 byte after the crash, > although having been saved before, there is nothing left. Unfortunately (or rather > fortunately) this happens rarely, so that I did not manage to reproduce the bug, > however, it seems severe enough and I have the impression that it might be > connected with either using the clipboard under Windows or with a bug in > Tkinter (probably a Tcl-bug) with the internal utf8-representation of the text- > widget. (I have reported this; cf. request ID #418173 ) > regards > Christoph Are you trying to attempt (maybe accidentally) to paste a non-ASCII character? I've seen problems with saving files containing a non-ASCII character. --Guido van Rossum (home page: http://www.python.org/~guido/) From Christoph.Herzog@urz.uni-heidelberg.de Tue Jul 10 16:27:10 2001 From: Christoph.Herzog@urz.uni-heidelberg.de (Christoph.Herzog@urz.uni-heidelberg.de) Date: Tue, 10 Jul 2001 17:27:10 +0200 Subject: [Idle-dev] idle eats code In-Reply-To: <200107101358.f6ADw0A32149@odiug.digicool.com> References: Your message of "Tue, 10 Jul 2001 14:28:17 +0200." <3B4B1101.10805.DAC704@localhost> Message-ID: <3B4B3AEE.4521.17E8FAA@localhost> >>[problem: Python crashes sometimes while editing >> (or trying to save?) .py file, setting file to 0 byte] On 10 Jul 2001, at 9:58, Guido van Rossum wrote: > Are you trying to attempt (maybe accidentally) to paste a non-ASCII > character? I've seen problems with saving files containing a > non-ASCII character. > > --Guido van Rossum (home page: http://www.python.org/~guido/) Yes, using a German keyboard, I cannot rule that out completely. Also using "non-escaped" non-Ascii characters in a string-literal in IDLE may under certain circumstances disturb IDLE's colorizing engine, so that has to be avoided. Thank you Christoph From kbk@shore.net Tue Jul 10 16:45:01 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: Tue, 10 Jul 2001 11:45:01 -0400 Subject: [Idle-dev] idle eats code References: <3B4B1101.10805.DAC704@localhost> <200107101358.f6ADw0A32149@odiug.digicool.com> Message-ID: <3B4B22FD.C1ADCECA@shore.net> Guido, This problem you've seen, do you think it's an IDLE problem, Python problem, or Windows problem? Has it been seen on Linux? Regards, KBK Guido van Rossum wrote: > Are you trying to attempt (maybe accidentally) to paste a non-ASCII > character? I've seen problems with saving files containing a > non-ASCII character. From guido@digicool.com Tue Jul 10 16:57:41 2001 From: guido@digicool.com (Guido van Rossum) Date: Tue, 10 Jul 2001 11:57:41 -0400 Subject: [Idle-dev] idle eats code In-Reply-To: Your message of "Tue, 10 Jul 2001 11:45:01 EDT." <3B4B22FD.C1ADCECA@shore.net> References: <3B4B1101.10805.DAC704@localhost> <200107101358.f6ADw0A32149@odiug.digicool.com> <3B4B22FD.C1ADCECA@shore.net> Message-ID: <200107101557.f6AFvfn32761@odiug.digicool.com> > Guido, > This problem you've seen, do you think it's an IDLE problem, Python > problem, or Windows problem? Has it been seen on Linux? > Regards, KBK The problems are at least part due to Tkinter's support for Unicode: when you paste a Unicode character into a Text window, the get() method will return a Unicode string, and IDLE is not prepared for that, causing the save operation to fail. It's harder to provoke on Linux -- on Windows, it's quite easy to get Unicode characters in the clipboard. --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@shore.net Wed Jul 11 05:14:56 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 11 Jul 2001 00:14:56 -0400 Subject: [Idle-dev] Notes on Merging Message-ID: During the hiatus waiting on Sourceforge, I've been fooling around with my local CVS repository and made some notes which might prove useful: (A Linux installation is assumed in the following, and that CVSROOT has been set to point at the SF idlefork repository.) A reasonable place to establish a working directory of idlefork IDLE is in the Tools directory of your Python source tree. It can be installed directly from there by cd ....../Tools/idlefork python setup.py assuming you have installation privileges. (It may be that idlefork IDLE as it exists will require a couple of tweaks for this to work.) To create a working copy in Tools/idlefork (using -d to avoid confict with "official" IDLE): cd ....../Tools cvs co -d idlefork idle (The idlefork project may want to consider a different installation/executable name [fidle? idler?] so installed versions of "official" Python IDLE and idlefork IDLE can co-exist for comparison and stability purposes.) For testing, a working copy can be switched to the baseline version of Visual Python IDLE as it existed Dec2000 by cvs up -r base-VP-idle Return the working copy to the current idle-fork line of development: cvs up -A ** Merging Python CVS IDLE: The Visual Python version of IDLE is on the MAIN trunk. The "official" Python CVS IDLE has been imported as (a second) vendor branch 1.1.3, with the label "py-cvs-vendor-branch". It is currently tagged in two places: "py-cvs-2000_03_09" and "py-cvs-rel2_1". Visual Python IDLE forked from "official" IDLE on 9 March 2000. It is the changes in "official" IDLE _since_ that time that we are interested in merging, to apply any bug fixes and improvements to VP IDLE before continuing development. If the 1.1.3 branch were completely merged with the MAIN trunk of idlefork/idle, the effect would be to revert all the changes made to create VP IDLE. Therefore, the merge is done by referencing _both_ 1.1.3 tags, which results in applying the difference between 9 March 2000 and Release 2.1 IDLE. (AutoExpand.py is used as an example in what follows. Those familar with repeated cvs branch merges may avert their eyes :) The merge must be made file by file, first looking at the diffs on 1.1.3: cvs diff -r py-cvs-2000_03_09 -r py-cvs-rel2_1 AutoExpand.py The merge itself (uses -j instead of -r): cvs up -j py-cvs-2000_03_09 -j py-cvs-rel2_1 AutoExpand.py which will incorporate updates to PythonCVS IDLE into your local copy. The result of the merge can be compared with the baseline VP IDLE: cvs diff -r base-VP-idle AutoExpand.py The local copy of AutoExpand.py can be further edited if necessary prior to committing it to the idlefork repository: cvs commit -m "blahblah" AutoExpand.py Of course, if you're not happy with the merge, and want to think about it some more, just rm AutoExpand.py cvs up And your copy of AutoExpand.py will be restored from the repository. Regards, KBK From StephenM.Gava Wed Jul 11 07:33:59 2001 From: StephenM.Gava (StephenM.Gava) Date: Wed, 11 Jul 2001 16:33:59 +1000 Subject: [Idle-dev] idle-fork - cvs on the move again In-Reply-To: References: <01071015573400.00507@oberon> Message-ID: <01071116335900.01466@oberon> Hey Kurt. Kurt B. Kaiser wrote: > What amazes me is he fixed us, and then continued to service recent CVS > clean-up requests, leaving about 20 prior requests behind! Heh, oh well, at least those other languishing requests are officially 'Not Our Problem' (tm)... > I got copy of the CVS tarball after the prune, and also a clean checkout. > So I went ahead with the imports. Cool. > It looks like we're all set to do the merge; the 2nd vendor branch imports > seem to have gone ok, despite warnings on the web that there can be > problems. Seems the deeper one gets into cvs the more hidden 'semi-gotchas' there are, apart from the more obvious ones like cvs not really understanding directories. > I think the trick may be to work on one vendor branch at a time, > using the -f option with commit to force the HEADS to the trunk. I hesitate > to think what might happen if you had two files with the same name, > unmodified locally, on two different vendor branches. I suppose the 1.1.1 > branch supplies the 1.1 revision, but experimentation is needed.... > > I'll volunteer to keep idlefork synched with "official" idle. Ok, excellent, congratulations new official idlefork 'cvsmeister'... ;^) *fanfare played on rusty tin whilsles* *Guido pins badge emblazoned with dead parrot hanging upside down from perch onto your 'python rocks my world' tshirt, inadvertently puncturing your left pectoral, which causes all the air to hiss out of your inflatable arnold-schwartzenegger chest* Actually, although it has been a year, and idle has progressed from version 0.5 to 0.8, both David Scherer and Guido have indicated that there may not be an awful lot to merge this time. I guess we'll see soon enough. I'm gonna do a fresh checkout now and start having a look. Regards, Stephen. ps. I'll cc this by idle-dev so folks there know things are moving again -- Stephen M. Gava "More power to those who don't care for it." - anon From guido@digicool.com Wed Jul 11 14:43:15 2001 From: guido@digicool.com (Guido van Rossum) Date: Wed, 11 Jul 2001 09:43:15 -0400 Subject: [Idle-dev] Remote execution patch available Message-ID: <200107111343.f6BDhFs13448@odiug.digicool.com> I've posted my patch for remote execution on SourceForge: http://sourceforge.net/tracker/index.php?func=detail&aid=440407&group_id=5470&atid=305470 I hope the idlefork developers will merge this with the code there. Enjoy! --Guido van Rossum (home page: http://www.python.org/~guido/) From elguavas@users.sourceforge.net Thu Jul 12 05:44:50 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 11 Jul 2001 21:44:50 -0700 Subject: [Idle-dev] CVS: idle idlever.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv6283 Modified Files: idlever.py Log Message: py-cvs merge, version update Index: idlever.py =================================================================== RCS file: /cvsroot/idlefork/idle/idlever.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** idlever.py 2001/07/04 03:15:10 1.2 --- idlever.py 2001/07/12 04:44:48 1.3 *************** *** 1 **** ! IDLE_VERSION = "0.5" --- 1 ---- ! IDLE_VERSION = "0.8" From elguavas@users.sourceforge.net Thu Jul 12 05:51:13 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 11 Jul 2001 21:51:13 -0700 Subject: [Idle-dev] CVS: idle idle.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv7460 Modified Files: idle.py Log Message: py-cvs merge, idle_dir loading changed Index: idle.py =================================================================== RCS file: /cvsroot/idlefork/idle/idle.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** idle.py 2001/07/04 03:15:10 1.2 --- idle.py 2001/07/12 04:51:11 1.3 *************** *** 5,9 **** import IdleConf ! idle_dir = os.path.split(sys.argv[0])[0] IdleConf.load(idle_dir) --- 5,9 ---- import IdleConf ! idle_dir = os.path.dirname(IdleConf.__file__) IdleConf.load(idle_dir) From elguavas@users.sourceforge.net Thu Jul 12 06:21:10 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 11 Jul 2001 22:21:10 -0700 Subject: [Idle-dev] CVS: idle help.txt,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv11632 Modified Files: help.txt Log Message: py-cvs merge, update colour changing info Index: help.txt =================================================================== RCS file: /cvsroot/idlefork/idle/help.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** help.txt 2001/07/04 03:15:10 1.2 --- help.txt 2001/07/12 05:21:08 1.3 *************** *** 105,109 **** The coloring is applied in a background "thread", so you may occasionally see uncolorized text. To change the color ! scheme, edit the ColorPrefs class in IdlePrefs.py. Python syntax colors: --- 105,110 ---- The coloring is applied in a background "thread", so you may occasionally see uncolorized text. To change the color ! scheme, edit the [Colors] section in config.txt (or add a ! [Colors] section to ~/.idle). Python syntax colors: From elguavas@users.sourceforge.net Thu Jul 12 06:24:21 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 11 Jul 2001 22:24:21 -0700 Subject: [Idle-dev] CVS: idle config.txt,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv12150 Modified Files: config.txt Log Message: py-cvs merge, update colour changing info Index: config.txt =================================================================== RCS file: /cvsroot/idlefork/idle/config.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** config.txt 2001/07/04 03:15:10 1.2 --- config.txt 2001/07/12 05:24:19 1.3 *************** *** 15,20 **** # the config files. To enable an extension, create a section with the # same name as the extension, e.g. the [ParenMatch] section below. To ! # disable an extension, either remove the section or add the the ! # enable option with the value 0. [EditorWindow] --- 15,20 ---- # the config files. To enable an extension, create a section with the # same name as the extension, e.g. the [ParenMatch] section below. To ! # disable an extension, either remove the section or add the 'enable' ! # option with the value 0. [EditorWindow] From elguavas@users.sourceforge.net Thu Jul 12 06:35:19 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 11 Jul 2001 22:35:19 -0700 Subject: [Idle-dev] CVS: idle WindowList.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv13626 Modified Files: WindowList.py Log Message: py-cvs merge, correct indentation Index: WindowList.py =================================================================== RCS file: /cvsroot/idlefork/idle/WindowList.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** WindowList.py 2001/07/04 03:15:10 1.2 --- WindowList.py 2001/07/12 05:35:17 1.3 *************** *** 40,44 **** def unregister_callback(self, callback): try: ! self.callbacks.remove(callback) except ValueError: pass --- 40,44 ---- def unregister_callback(self, callback): try: ! self.callbacks.remove(callback) except ValueError: pass From elguavas@users.sourceforge.net Thu Jul 12 07:38:26 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 11 Jul 2001 23:38:26 -0700 Subject: [Idle-dev] CVS: idle TODO.txt,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv22241 Modified Files: TODO.txt Log Message: py-cvs merge, additions Index: TODO.txt =================================================================== RCS file: /cvsroot/idlefork/idle/TODO.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** TODO.txt 2001/07/04 03:15:10 1.2 --- TODO.txt 2001/07/12 06:38:24 1.3 *************** *** 13,16 **** --- 13,17 ---- - suppress tracing through IDLE internals (e.g. print) - add a button to suppress through a specific module or class or method + - more object inspection to stack viewer, e.g. to view all array items - insert the initial current directory into sys.path - default directory attribute for each window instead of only for windows *************** *** 204,205 **** --- 205,211 ---- the shell window. Output of separate runs should all go to the same window but clearly delimited. (David Scherer) + + - GUI form designer to kick VB's butt. (Robert Geiger) + + - Printing! Possibly via generation of PDF files which the user must + then send to the printer separately. (Dinu Gherman) From elguavas@users.sourceforge.net Thu Jul 12 07:46:55 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 11 Jul 2001 23:46:55 -0700 Subject: [Idle-dev] CVS: idle ScriptBinding.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv23654 Modified Files: ScriptBinding.py Log Message: py-cvs merge, better error dialog Index: ScriptBinding.py =================================================================== RCS file: /cvsroot/idlefork/idle/ScriptBinding.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ScriptBinding.py 2001/07/04 03:15:10 1.2 --- ScriptBinding.py 2001/07/12 06:46:53 1.3 *************** *** 35,39 **** class ScriptBinding: ! keydefs = { '<>': ['', ''], --- 35,39 ---- class ScriptBinding: ! keydefs = { '<>': ['', ''], *************** *** 41,45 **** '<>': [''], } ! menudefs = [ ('edit', [None, --- 41,45 ---- '<>': [''], } ! menudefs = [ ('edit', [None, *************** *** 153,158 **** # XXX Better logic would offer to save! if not self.editwin.get_saved(): self.errorbox("Not saved", ! "Please save first!") self.editwin.text.focus_set() return --- 153,162 ---- # XXX Better logic would offer to save! if not self.editwin.get_saved(): + name = (self.editwin.short_title() or + self.editwin.long_title() or + "Untitled") self.errorbox("Not saved", ! "The buffer for %s is not saved.\n" % name + ! "Please save it first!") self.editwin.text.focus_set() return From elguavas@users.sourceforge.net Thu Jul 12 07:54:18 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 11 Jul 2001 23:54:18 -0700 Subject: [Idle-dev] CVS: idle ReplaceDialog.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv24922 Modified Files: ReplaceDialog.py Log Message: py-cvs merge, python 1.5.2 compatability Index: ReplaceDialog.py =================================================================== RCS file: /cvsroot/idlefork/idle/ReplaceDialog.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ReplaceDialog.py 2001/07/04 03:15:10 1.2 --- ReplaceDialog.py 2001/07/12 06:54:16 1.3 *************** *** 91,95 **** chars = text.get("%d.0" % line, "%d.0" % (line+1)) orig = m.group() ! new = re.pcre_expand(m, repl) i, j = m.span() first = "%d.%d" % (line, i) --- 91,95 ---- chars = text.get("%d.0" % line, "%d.0" % (line+1)) orig = m.group() ! new = self._expand(m, repl) i, j = m.span() first = "%d.%d" % (line, i) *************** *** 143,147 **** if not prog: return 0 ! new = re.pcre_expand(m, self.replvar.get()) text.mark_set("insert", first) text.undo_block_start() --- 143,147 ---- if not prog: return 0 ! new = self._expand(m, self.replvar.get()) text.mark_set("insert", first) text.undo_block_start() *************** *** 154,157 **** --- 154,173 ---- self.ok = 0 return 1 + + def _expand(self, m, template): + # XXX This code depends on internals of the regular expression + # engine! There's no standard API to do a substitution when you + # have already found the match. One should be added. + # The solution here is designed to be backwards compatible + # with previous Python versions, e.g. 1.5.2. + # XXX This dynamic test should be done only once. + if getattr(re, "engine", "pre") == "pre": + return re.pcre_expand(m, template) + else: # sre + # XXX This import should be avoidable... + import sre_parse + # XXX This parses the template over and over... + ptemplate = sre_parse.parse_template(template, m.re) + return sre_parse.expand_template(ptemplate, m) def show_hit(self, first, last): From StephenM.Gava Thu Jul 12 09:16:25 2001 From: StephenM.Gava (StephenM.Gava) Date: Thu, 12 Jul 2001 18:16:25 +1000 Subject: [Idle-dev] idle-fork, merging 2x SPE patches Message-ID: <01071218152902.00733@oberon> I've just been looking at PyShell.py after working my way up merging in reverse alpha file order from testcode.py, and it looks like I've reached the first file where the issue of "2 x separate process execution implementations" (from here on called "SPE" patrches in this message) raises its head. It seems like two possible options for handling this may be: 1. Continue merging py-cvs such that the original David Scherer SPE patches remain undisturbed, and then work out their relationship to the new Guido patches and figure out which parts of which person's patches to continue forward with. or 2. Merge py-cvs such that David's SPE patches are reduced to exisitng only in prior versions, then merge the new Guido SPE patches and look at things from that perspective. There are probably way better options than either of these two for handling the situation but I'm too tired at the moment to think on it anymore so I'm going to have some dinner. Regards, Stephen. -- Stephen M. Gava "More power to those who don't care for it." - anon From wwwjessie@21cn.com Thu Jul 12 11:01:56 2001 From: wwwjessie@21cn.com (wwwjessie@21cn.com) Date: Thu, 12 Jul 2001 18:01:56 +0800 Subject: [Idle-dev] =?gb2312?B?xvPStcnPzfijrNK7sr21vc67KFlvdXIgb25saW5lIGNvbXBhbnkp?= Message-ID: <3511401c10ab9$af11ee60$9300a8c0@ifood1gongxing> This is a multi-part message in MIME format. ------=_NextPart_000_35115_01C10AFC.BD352E60 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 1/C+tLXEu+HUsaOsxPq6w6Oh0rzKs8a31tC5+s34t/7O8dDFz6K5qcT6ss6/vKO6ICANCg0K07XT 0NfUvLq1xM34yc+5q8u+o6zVucq+uavLvrL6xre6zbf+zvGjrMzhuN/G89K1vrrV+cGmLMT609DB vdbW0aHU8aO6DQoNCjEvIM341b62qNbGIDxodHRwOi8vd3d3Lmlmb29kMS5jb20vYWJvdXR1cy9v dXJzZXJ2aWNlcy93ZWIuYXNwPiAgOg0K19S8us6su6S4/NDCo6y53MDtx7DMqLrzzKijrLj5vt3G 89K10OjSqqOsvajBotfUvLq1xM34yc+5q8u+o6zK/b7dv+LEo7/pyM7E+tGh1PGjusnMx+nQxc+i t6KyvCzN+MnPsvrGt9W5yr6jrL/Nu6e3/s7x1tDQxCzN+MnPubrO78+1zbMsv827p7nYDQrPtbnc wO0szfjJz8LbzLMszfjJz7vh0unW0NDELM34yc/V0Ma4LM22xrHPtc2zLNfKwc/PwtTY1tDQxCzO yr7ttfey6Swg1dCx6rLJubrPtc2zLLfDzsrV382zvMa31s72LCDBxMzsytIovbvB96GizLjF0Cmh raGtDQoNCs/rwcu94sr9vt2/4sSjv+nR3cq+1tDQxKO/x+vBqs+1o7ogc2FsZXNAaWZvb2QxLmNv bSA8bWFpbHRvOnNhbGVzQGlmb29kMS5jb20+DQqhobXnu7CjujA3NTUtMzc4NjMwOaGhz/rK27K/ yfLQob3jDQoNCjIvINK8zfjNqCA8aHR0cDovL29uZXQuaWZvb2QxLmNvbS8+DQot19TW+sq9vajN +KOsstnX97zytaWjrLy0vai8tNPDo7q/ydW5yr4zMNXFu/K4/Lbg1dXGrKOs19TW+sq9zqy7pKOs v8nL5sqxuPzQws28xqy6zc7E19bE2sjdo6zU2s/ft6KyvLL6xrfQxc+ioaK5q8u+tq/MrLXIo6zU +cvNtv68trn6vMrT8sP7KA0KyOdodHRwOi8veW91cm5hbWUuaWZvb2QxLmNvbSmjrNPr0rzKs8a3 1tC5+s34KNKzw+bkr8DAwb/UwtPiMjAwzfK0zim99MPcway906OszOG438LyvNK6zbnLv823w87K wb+jrLaoxtrK1bW90rzKsw0KxrfW0Ln6zfjM4bmptcS/zbun0OjH87rNssm5utDFz6Khow0KDQoN Cg0KN9TCMzDI1cewyerH67KiuLa/7sq508PSvM34zaijrMzYsfDTxbvdvNszODAw1KovxOqjrNT5 y83M9cLrueO45rKiw+K30dTayrPGt9eo0rXU09a+v6+1x7mpo6zH86OstPrA7aOsus/X99DFz6IN Cs/rwcu94rj8tuA/IKGhx+vBqs+1o7ogc2FsZXNAaWZvb2QxLmNvbSA8bWFpbHRvOnNhbGVzQGlm b29kMS5jb20+DQqhobXnu7CjujA3NTUtMzc4NjMwOaGhoaHP+srbsr/J8tChveMNCrvyILfDzsrO 0sPHtcTN+NKzIDxodHRwOi8vd3d3Lmlmb29kMS5jb20vYWJvdXR1cy9vdXJzZXJ2aWNlcy9jcHNl cnZpY2UuYXNwPg0KOnd3dy5pZm9vZDEuY29tDQoNCrvY1rSjqMfrtKvV5qO6MDc1NS0zMjM5MDQ3 u/K3orXn19PTyrz+o7ogc2FsZXNAaWZvb2QxLmNvbSA8bWFpbHRvOnNhbGVzQGlmb29kMS5jb20+ IKOpDQoNCqH1ILG+uavLvrbUzfjVvrao1sa40NDLyKShoaGhICAgICAgICAgICAgICAgICAgICAg ofUgsb65q8u+ttTSvM34zai3/s7xuNDQy8ikDQoNCrmry77D+7PGo7pfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX1/Bqs+1yMujul9fX19fX19fX19fX19fX19fXw0K X19fX18gDQoNCrXnu7Cjul9fX19fX19fX19fX19fX19fX19fX7Sr1eajul9fX19fX19fX19fX19f X19fX19fX19FLW1haWyjul9fX19fX19fX19fX19fX18NCl9fX19fXyANCg0K ------=_NextPart_000_35115_01C10AFC.BD352E60 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: base64 PEhUTUw+DQo8SEVBRD4NCjxUSVRMRT5VbnRpdGxlZCBEb2N1bWVudDwvVElUTEU+IDxNRVRBIEhU VFAtRVFVSVY9IkNvbnRlbnQtVHlwZSIgQ09OVEVOVD0idGV4dC9odG1sOyBjaGFyc2V0PWdiMjMx MiI+IA0KPC9IRUFEPg0KDQo8Qk9EWSBCR0NPTE9SPSIjRkZGRkZGIiBURVhUPSIjMDAwMDAwIj4N CjxUQUJMRSBXSURUSD0iOTglIiBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIiBDRUxMUEFERElO Rz0iMCI+PFRSPjxURD48UCBDTEFTUz1Nc29Ob3JtYWwgU1RZTEU9J21hcmdpbi1yaWdodDotMTcu ODVwdDtsaW5lLWhlaWdodDoxNTAlJz48Rk9OVCBTSVpFPSIyIj7X8L60tcS74dSxo6zE+rrDo6HS vMqzxrfW0Ln6zfi3/s7x0MXPormpxPqyzr+8o7ombmJzcDs8L0ZPTlQ+IA0KPC9QPjxQIENMQVNT PU1zb05vcm1hbCBTVFlMRT0nbWFyZ2luLXJpZ2h0Oi0xNy44NXB0O2xpbmUtaGVpZ2h0OjE1MCUn PjxGT05UIFNJWkU9IjIiPtO109DX1Ly6tcTN+MnPuavLvqOs1bnKvrmry76y+sa3us23/s7xo6zM 4bjfxvPStb661fnBpizE+tPQwb3W1tGh1PGjujxCUj48QlI+MS8gDQo8QQ0KSFJFRj0iaHR0cDov L3d3dy5pZm9vZDEuY29tL2Fib3V0dXMvb3Vyc2VydmljZXMvd2ViLmFzcCI+zfjVvrao1sY8L0E+ IDog19S8us6su6S4/NDCo6y53MDtx7DMqLrzzKijrLj5vt3G89K10OjSqqOsvajBotfUvLq1xM34 yc+5q8u+o6zK/b7dv+LEo7/pyM7E+tGh1PGjusnMx+nQxc+it6KyvCzN+MnPsvrGt9W5yr6jrL/N u6e3/s7x1tDQxCzN+MnPubrO78+1zbMsv827p7nYz7W53MDtLM34yc/C28yzLM34yc+74dLp1tDQ xCzN+MnP1dDGuCzNtsaxz7XNsyzXysHPz8LU2NbQ0MQszsq+7bX3suksIA0K1dCx6rLJubrPtc2z LLfDzsrV382zvMa31s72LCDBxMzsytIovbvB96GizLjF0CmhraGtPC9GT05UPjwvUD48UCBDTEFT Uz1Nc29Ob3JtYWwgU1RZTEU9J2xpbmUtaGVpZ2h0OjIwLjBwdCc+PEI+PEZPTlQgQ09MT1I9IiNG RjAwMDAiPs/rwcu94sr9vt2/4sSjv+nR3cq+1tDQxKO/PC9GT05UPjwvQj48Rk9OVCBTSVpFPSIy Ij7H68Gqz7WjujxBIEhSRUY9Im1haWx0bzpzYWxlc0BpZm9vZDEuY29tIj5zYWxlc0BpZm9vZDEu Y29tPC9BPiANCqGhtee7sKO6MDc1NS0zNzg2MzA5oaHP+srbsr/J8tChveM8L0ZPTlQ+PC9QPjxQ IENMQVNTPU1zb05vcm1hbCBTVFlMRT0nbGluZS1oZWlnaHQ6MjAuMHB0Jz48L1A+PFAgQ0xBU1M9 TXNvTm9ybWFsIFNUWUxFPSdsaW5lLWhlaWdodDoyMC4wcHQnPjxGT05UIFNJWkU9IjIiPjIvIA0K PEEgSFJFRj0iaHR0cDovL29uZXQuaWZvb2QxLmNvbS8iPtK8zfjNqDwvQT4t19TW+sq9vajN+KOs stnX97zytaWjrLy0vai8tNPDo7q/ydW5yr4zMNXFu/K4/Lbg1dXGrKOs19TW+sq9zqy7pKOsv8nL 5sqxuPzQws28xqy6zc7E19bE2sjdo6zU2s/ft6KyvLL6xrfQxc+ioaK5q8u+tq/MrLXIo6zU+cvN tv68trn6vMrT8sP7KMjnaHR0cDovL3lvdXJuYW1lLmlmb29kMS5jb20po6zT69K8yrPGt9bQufrN +CjSs8Pm5K/AwMG/1MLT4jIwMM3ytM4pvfTD3MGsvdOjrMzhuN/C8rzSus25y7/Nt8POysG/o6y2 qMbaytW1vdK8yrPGt9bQufrN+Mzhuam1xL/Nu6fQ6Mfzus2yybm60MXPoqGjPEJSPjwvRk9OVD48 L1A+PFAgQ0xBU1M9TXNvTm9ybWFsIFNUWUxFPSdtYXJnaW4tcmlnaHQ6LTE3Ljg1cHQ7bGluZS1o ZWlnaHQ6MTUwJSc+PEZPTlQgU0laRT0iMiI+PEJSPjwvRk9OVD4gDQo8Qj48Rk9OVCBDT0xPUj0i I0ZGMDAwMCI+NzwvRk9OVD48L0I+PEZPTlQgQ09MT1I9IiNGRjAwMDAiPjxCPtTCMzDI1cewyerH 67KiuLa/7sq508PSvM34zaijrMzYsfDTxbvdvNszODAw1KovxOqjrNT5y83M9cLrueO45rKiw+K3 0dTayrPGt9eo0rXU09a+v6+1x7mpo6zH86OstPrA7aOsus/X99DFz6I8L0I+PEJSPjwvRk9OVD4g DQo8Rk9OVCBTSVpFPSIyIj7P68HLveK4/LbgPyChocfrwarPtaO6PEEgSFJFRj0ibWFpbHRvOnNh bGVzQGlmb29kMS5jb20iPnNhbGVzQGlmb29kMS5jb208L0E+IA0KoaG157uwo7owNzU1LTM3ODYz MDmhoaGhz/rK27K/yfLQob3jPEJSPjwvRk9OVD48Rk9OVCBTSVpFPSIyIj678jxBDQpIUkVGPSJo dHRwOi8vd3d3Lmlmb29kMS5jb20vYWJvdXR1cy9vdXJzZXJ2aWNlcy9jcHNlcnZpY2UuYXNwIj63 w87KztLDx7XEzfjSszwvQT46d3d3Lmlmb29kMS5jb208L0ZPTlQ+PC9QPjxQIENMQVNTPU1zb05v cm1hbCBTVFlMRT0nbGluZS1oZWlnaHQ6MjAuMHB0JyBBTElHTj0iTEVGVCI+PC9QPjxQIENMQVNT PU1zb05vcm1hbCBBTElHTj1MRUZUIFNUWUxFPSdsaW5lLWhlaWdodDoyMC4wcHQnPjxGT05UIFNJ WkU9IjIiPjxCPrvY1rSjqMfrtKvV5qO6MDc1NS0zMjM5MDQ3u/K3orXn19PTyrz+o7o8L0I+PEEN CkhSRUY9Im1haWx0bzpzYWxlc0BpZm9vZDEuY29tIj5zYWxlc0BpZm9vZDEuY29tIDwvQT48Qj6j qTwvQj48L0ZPTlQ+PC9QPjxQPjxGT05UIFNJWkU9IjIiPqH1IA0Ksb65q8u+ttTN+NW+tqjWxrjQ 0MvIpKGhoaEmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7 Jm5ic3A7IKH1ILG+uavLvrbU0rzN+M2ot/7O8bjQ0MvIpDwvRk9OVD48L1A+PFAgQ0xBU1M9TXNv Tm9ybWFsIFNUWUxFPSdsaW5lLWhlaWdodDoyMC4wcHQnPjxGT05UIFNJWkU9IjIiPrmry77D+7PG o7pfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1/Bqs+1yMujul9f X19fX19fX19fX19fX19fX19fX19fIA0KPEJSPiA8QlI+ILXnu7Cjul9fX19fX19fX19fX19fX19f X19fX7Sr1eajul9fX19fX19fX19fX19fX19fX19fX19FLW1haWyjul9fX19fX19fX19fX19fX19f X19fX18gDQo8L0ZPTlQ+PC9QPjxQIENMQVNTPU1zb05vcm1hbCBTVFlMRT0nbGluZS1oZWlnaHQ6 MjAuMHB0Jz48L1A+PC9URD48L1RSPjwvVEFCTEU+IA0KPC9CT0RZPg0KPC9IVE1MPg0K ------=_NextPart_000_35115_01C10AFC.BD352E60-- From guido@digicool.com Thu Jul 12 12:52:09 2001 From: guido@digicool.com (Guido van Rossum) Date: Thu, 12 Jul 2001 07:52:09 -0400 Subject: [Idle-dev] idle-fork, merging 2x SPE patches In-Reply-To: Your message of "Thu, 12 Jul 2001 18:16:25 +1000." <01071218152902.00733@oberon> References: <01071218152902.00733@oberon> Message-ID: <200107121152.f6CBq9a14477@odiug.digicool.com> > 1. Continue merging py-cvs such that the original David Scherer SPE patches > remain undisturbed, and then work out their relationship to the new Guido > patches and figure out which parts of which person's patches to continue > forward with. > > or > > 2. Merge py-cvs such that David's SPE patches are reduced to exisitng only > in prior versions, then merge the new Guido SPE patches and look at things > from that perspective. I vote for 1. The first goal should be a complete merge of IDLE 0.8 as found in the Python CVS with David's version. Then we could look into a better way of SPE. I don't know if David's approach isn't just better! I vaguely remember that Jeremy Hylton reviewed it a year and a half ago and though it wasn't general enough, but that was then, and I haven't verified this myself. Also note that Jeremy wrote and checked in RemoteInterp.py, which is yet another RPC protocol; but he never got to the point of using it. Yet another option would be to look into xmlrpclib, which has just been accepted as an official standard library module in Python 2.2. --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@shore.net Thu Jul 12 14:14:46 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 09:14:46 -0400 Subject: [Idle-dev] idle-fork, merging 2x SPE patches References: <01071218152902.00733@oberon> <200107121152.f6CBq9a14477@odiug.digicool.com> Message-ID: <3B4DA2C6.FD5DDEB6@shore.net> Guido van Rossum wrote: > > > 1. Continue merging py-cvs such that the original David Scherer SPE patches > > remain undisturbed, and then work out their relationship to the new Guido > > patches and figure out which parts of which person's patches to continue > > forward with. > > > > or > > > > 2. Merge py-cvs such that David's SPE patches are reduced to exisitng only > > in prior versions, then merge the new Guido SPE patches and look at things > > from that perspective. > > I vote for 1. The first goal should be a complete merge of IDLE 0.8 > as found in the Python CVS with David's version. > > Then we could look into a better way of SPE. I don't know if David's > approach isn't just better! I vaguely remember that Jeremy Hylton > reviewed it a year and a half ago and though it wasn't general enough, > but that was then, and I haven't verified this myself. Also note that > Jeremy wrote and checked in RemoteInterp.py, which is yet another RPC > protocol; but he never got to the point of using it. > > Yet another option would be to look into xmlrpclib, which has just > been accepted as an official standard library module in Python 2.2. I vote for #1, also. What I'd suggest is finish the merge with Release 2.1, tag the repository with "py-cvs-rel2_1-merged" and then install and test the result. Once we get it working and installable with setup.py, tag again with "py-cvs-rel2_1-merged-tested" and release a new tarball to the world. Then proceed with developing the client/server design. Maybe we should do the client/server work on a branch? It might take us awhile to sort out and in the meantime people could access a solid CVS version with some usability enhancements, etc.(installed on the trunk), without the instability of the client/server development. Regards, KBK K u r t B. K a i s e r k b k @@ s h o r e .. n e t ------------------------------ From guido@digicool.com Thu Jul 12 15:01:41 2001 From: guido@digicool.com (Guido van Rossum) Date: Thu, 12 Jul 2001 10:01:41 -0400 Subject: [Idle-dev] idle-fork, merging 2x SPE patches In-Reply-To: Your message of "Thu, 12 Jul 2001 09:14:46 EDT." <3B4DA2C6.FD5DDEB6@shore.net> References: <01071218152902.00733@oberon> <200107121152.f6CBq9a14477@odiug.digicool.com> <3B4DA2C6.FD5DDEB6@shore.net> Message-ID: <200107121401.f6CE1fC14581@odiug.digicool.com> > Maybe we should do the client/server work on a branch? It might take > us awhile to sort out and in the meantime people could access a > solid CVS version with some usability enhancements, etc.(installed > on the trunk), without the instability of the client/server > development. Good idea! (How stable is David Scherer's SPE work?) --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@shore.net Thu Jul 12 15:12:16 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 10:12:16 -0400 Subject: [Idle-dev] idle-fork, merging 2x SPE patches References: <01071218152902.00733@oberon> <200107121152.f6CBq9a14477@odiug.digicool.com> <3B4DA2C6.FD5DDEB6@shore.net> <200107121401.f6CE1fC14581@odiug.digicool.com> Message-ID: <3B4DB040.8B65E36@shore.net> Guido van Rossum wrote: > > > Maybe we should do the client/server work on a branch? It might take > > us awhile to sort out and in the meantime people could access a > > solid CVS version with some usability enhancements, etc.(installed > > on the trunk), without the instability of the client/server > > development. > > Good idea! (How stable is David Scherer's SPE work?) Heh. I haven't tried it, but I guess we're going to find out =) -- K u r t B. K a i s e r k b k @@ s h o r e .. n e t ------------------------------ From fdrake@acm.org Thu Jul 12 14:54:37 2001 From: fdrake@acm.org (Fred L. Drake, Jr.) Date: Thu, 12 Jul 2001 09:54:37 -0400 (EDT) Subject: [Idle-dev] idle-fork, merging 2x SPE patches In-Reply-To: <200107121152.f6CBq9a14477@odiug.digicool.com> References: <01071218152902.00733@oberon> <200107121152.f6CBq9a14477@odiug.digicool.com> Message-ID: <15181.44061.795916.743880@cj42289-a.reston1.va.home.com> Guido van Rossum writes: > Yet another option would be to look into xmlrpclib, which has just > been accepted as an official standard library module in Python 2.2. I suspect the XML overhead would be too high compared to the work being done. I also don't think you actually solve any of the security problems that way. -Fred -- Fred L. Drake, Jr. PythonLabs at Digital Creations From StephenM.Gava Thu Jul 12 15:12:00 2001 From: StephenM.Gava (StephenM.Gava) Date: Fri, 13 Jul 2001 00:12:00 +1000 Subject: [Idle-dev] Re: idlefork merge underway - errata In-Reply-To: <200107121140.f6CBeIc14436@odiug.digicool.com> References: <01071215110401.00733@oberon> <200107121140.f6CBeIc14436@odiug.digicool.com> Message-ID: <01071300120000.00292@oberon> Guido van Rossum wrote: > > Guido, I just merged idle.py, and am moving on to it's bretheren, but I'm > > curious about the change: > > > > ! idle_dir = os.path.split(sys.argv[0])[0] > > --- > > ! idle_dir = os.path.dirname(IdleConf.__file__) > > > > What is the reason for moving to the second form of working out idle_dir > > ?? > > This is trying to find IDLE's source directory so that it can look > there for config files and icons (I think). > > The old form just *assumes* that sys.argv[0] is the absolute pathname > of idle.py. This isn't always the case (depends on shell and OS). > > The second one assumes that the IdleConf module lives in the IDLE > source directory. That's a pretty good assumption I believe! Isn't idle_dir = os.path.abspath(sys.path[0]) + os.sep os independent, and without worrying about the existence of particular files or modules?? > > --Guido van Rossum (home page: http://www.python.org/~guido/) -- Stephen M. Gava "More power to those who don't care for it." - anon From guido@digicool.com Thu Jul 12 15:34:29 2001 From: guido@digicool.com (Guido van Rossum) Date: Thu, 12 Jul 2001 10:34:29 -0400 Subject: [Idle-dev] idle-fork, merging 2x SPE patches In-Reply-To: Your message of "Thu, 12 Jul 2001 09:54:37 EDT." <15181.44061.795916.743880@cj42289-a.reston1.va.home.com> References: <01071218152902.00733@oberon> <200107121152.f6CBq9a14477@odiug.digicool.com> <15181.44061.795916.743880@cj42289-a.reston1.va.home.com> Message-ID: <200107121434.f6CEYTB14727@odiug.digicool.com> > Guido van Rossum writes: > > Yet another option would be to look into xmlrpclib, which has just > > been accepted as an official standard library module in Python 2.2. > > I suspect the XML overhead would be too high compared to the work > being done. I also don't think you actually solve any of the security > problems that way. I wasn't thinking of XML-RPC to solve the security or performance problems (although with expat, xmlrpclib seems to perform well!). I was thinking of using xmlrpclib rather than a home-grown RPC protocol. --Guido van Rossum (home page: http://www.python.org/~guido/) From guido@digicool.com Thu Jul 12 15:41:02 2001 From: guido@digicool.com (Guido van Rossum) Date: Thu, 12 Jul 2001 10:41:02 -0400 Subject: [Idle-dev] Re: idlefork merge underway - errata In-Reply-To: Your message of "Fri, 13 Jul 2001 00:12:00 +1000." <01071300120000.00292@oberon> References: <01071215110401.00733@oberon> <200107121140.f6CBeIc14436@odiug.digicool.com> <01071300120000.00292@oberon> Message-ID: <200107121441.f6CEf2X14759@odiug.digicool.com> > Guido van Rossum wrote: > > > Guido, I just merged idle.py, and am moving on to it's bretheren, but I'm > > > curious about the change: > > > > > > ! idle_dir = os.path.split(sys.argv[0])[0] > > > --- > > > ! idle_dir = os.path.dirname(IdleConf.__file__) > > > > > > What is the reason for moving to the second form of working out idle_dir > > > ?? > > > > This is trying to find IDLE's source directory so that it can look > > there for config files and icons (I think). > > > > The old form just *assumes* that sys.argv[0] is the absolute pathname > > of idle.py. This isn't always the case (depends on shell and OS). > > > > The second one assumes that the IdleConf module lives in the IDLE > > source directory. That's a pretty good assumption I believe! > > Isn't > > idle_dir = os.path.abspath(sys.path[0]) + os.sep > > os independent, and without worrying about the existence of particular files > or modules?? Concatenating os.sep is not OS dependent. On the Mac, os.sep is ':' but '::' is the equivalent of '../' and ':::' is '../../', etc. I've also seen Windows balk about excess trailing slashes in some cases. On Unix, sys.path[0] is not the right place to look into. It might be just "idle" when the "idle" script is found on $PATH and the user typed "idle". (Most shells sustitute the full pathname found, but not all do.) So please just do what I said. :-) --Guido van Rossum (home page: http://www.python.org/~guido/) From fdrake@acm.org Thu Jul 12 15:39:55 2001 From: fdrake@acm.org (Fred L. Drake, Jr.) Date: Thu, 12 Jul 2001 10:39:55 -0400 (EDT) Subject: [Idle-dev] idle-fork, merging 2x SPE patches In-Reply-To: <200107121434.f6CEYTB14727@odiug.digicool.com> References: <01071218152902.00733@oberon> <200107121152.f6CBq9a14477@odiug.digicool.com> <15181.44061.795916.743880@cj42289-a.reston1.va.home.com> <200107121434.f6CEYTB14727@odiug.digicool.com> Message-ID: <15181.46779.723475.650654@cj42289-a.reston1.va.home.com> Guido van Rossum writes: > I wasn't thinking of XML-RPC to solve the security or performance > problems (although with expat, xmlrpclib seems to perform well!). I > was thinking of using xmlrpclib rather than a home-grown RPC protocol. I'd still be suspicious, but I'm not familiar with either SPE patch, so perhaps I'm over-estimating the frequency of round trips. If XML-RPC would be used to report things like call/return events to the IDLE process, I'd expect the overhead to be excessive. If it's only to control breakpoints and the like, then it's probably fine, as the frequency should be relatively low. -Fred -- Fred L. Drake, Jr. PythonLabs at Digital Creations From fdrake@acm.org Thu Jul 12 15:44:19 2001 From: fdrake@acm.org (Fred L. Drake, Jr.) Date: Thu, 12 Jul 2001 10:44:19 -0400 (EDT) Subject: [Idle-dev] Re: idlefork merge underway - errata In-Reply-To: <200107121441.f6CEf2X14759@odiug.digicool.com> References: <01071215110401.00733@oberon> <200107121140.f6CBeIc14436@odiug.digicool.com> <01071300120000.00292@oberon> <200107121441.f6CEf2X14759@odiug.digicool.com> Message-ID: <15181.47043.178467.190236@cj42289-a.reston1.va.home.com> Guido van Rossum writes: > Concatenating os.sep is not OS dependent. On the Mac, os.sep is ':' ^^ independent > On Unix, sys.path[0] is not the right place to look into. It might be > just "idle" when the "idle" script is found on $PATH and the user > typed "idle". (Most shells sustitute the full pathname found, but not > all do.) Also, someone calling os.exec*() directly can put just about anything in there, since the path to the executable is a separate parameter from the argv list. -Fred -- Fred L. Drake, Jr. PythonLabs at Digital Creations From guido@digicool.com Thu Jul 12 15:52:36 2001 From: guido@digicool.com (Guido van Rossum) Date: Thu, 12 Jul 2001 10:52:36 -0400 Subject: [Idle-dev] idle-fork, merging 2x SPE patches In-Reply-To: Your message of "Thu, 12 Jul 2001 10:39:55 EDT." <15181.46779.723475.650654@cj42289-a.reston1.va.home.com> References: <01071218152902.00733@oberon> <200107121152.f6CBq9a14477@odiug.digicool.com> <15181.44061.795916.743880@cj42289-a.reston1.va.home.com> <200107121434.f6CEYTB14727@odiug.digicool.com> <15181.46779.723475.650654@cj42289-a.reston1.va.home.com> Message-ID: <200107121452.f6CEqa814855@odiug.digicool.com> > Guido van Rossum writes: > > I wasn't thinking of XML-RPC to solve the security or performance > > problems (although with expat, xmlrpclib seems to perform well!). I > > was thinking of using xmlrpclib rather than a home-grown RPC protocol. > > I'd still be suspicious, but I'm not familiar with either SPE patch, > so perhaps I'm over-estimating the frequency of round trips. If > XML-RPC would be used to report things like call/return events to the > IDLE process, I'd expect the overhead to be excessive. If it's only > to control breakpoints and the like, then it's probably fine, as the > frequency should be relatively low. The main performance problem is a program that writes a bunch of short lines, like this: for i in range(100): print i This generates 200 RPC calls (each line is composed of the object followed by a separate newline) and is noticeably slower using my RPC than with direct execution. The debugger doesn't work well in remote mode yet (I think I never finished that part), but it should only make an RPC call when it needs something from the GUI, i.e. for breaks. --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@shore.net Thu Jul 12 15:52:29 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 10:52:29 -0400 Subject: [Idle-dev] Re: idlefork merge underway - errata References: <01071215110401.00733@oberon> <200107121140.f6CBeIc14436@odiug.digicool.com> <01071300120000.00292@oberon> Message-ID: <3B4DB9AD.2FBB502D@shore.net> "Stephen M. Gava" wrote: > > Isn't > > idle_dir = os.path.abspath(sys.path[0]) + os.sep > > os independent, and without worrying about the existence of particular files > or modules?? > According to the check-in message on idle.py Rev 1.3 (fdrake): "Use a better approach to locating IDLE's default configuration, allowing it to be run from anywhere, including through a symlink to the actual idle.py script." K u r t B. K a i s e r k b k @@ s h o r e .. n e t ------------------------------ From StephenM.Gava Thu Jul 12 15:59:02 2001 From: StephenM.Gava (StephenM.Gava) Date: Fri, 13 Jul 2001 00:59:02 +1000 Subject: [Idle-dev] Re: idlefork merge underway - errata In-Reply-To: <200107121441.f6CEf2X14759@odiug.digicool.com> References: <01071215110401.00733@oberon> <01071300120000.00292@oberon> <200107121441.f6CEf2X14759@odiug.digicool.com> Message-ID: <01071300590201.00292@oberon> > > > > Guido, I just merged idle.py, and am moving on to it's bretheren, but > > > > I'm curious about the change: > > > > > > > > ! idle_dir = os.path.split(sys.argv[0])[0] > > > > --- > > > > ! idle_dir = os.path.dirname(IdleConf.__file__) > > > > > > > > What is the reason for moving to the second form of working out > > > > idle_dir ?? > > > > > > This is trying to find IDLE's source directory so that it can look > > > there for config files and icons (I think). > > > > > > The old form just *assumes* that sys.argv[0] is the absolute pathname > > > of idle.py. This isn't always the case (depends on shell and OS). > > > > > > The second one assumes that the IdleConf module lives in the IDLE > > > source directory. That's a pretty good assumption I believe! > > > > Isn't > > > > idle_dir = os.path.abspath(sys.path[0]) + os.sep > > > > os independent, and without worrying about the existence of particular > > files or modules?? > > Concatenating os.sep is not OS dependent. On the Mac, os.sep is ':' > but '::' is the equivalent of '../' and ':::' is '../../', etc. I've > also seen Windows balk about excess trailing slashes in some cases. > > On Unix, sys.path[0] is not the right place to look into. It might be > just "idle" when the "idle" script is found on $PATH and the user > typed "idle". (Most shells sustitute the full pathname found, but not > all do.) > > So please just do what I said. :-) *L* No problem about that, I merged that change without question before I even asked. I was just curious. It seems a shame that with all the os.path stuff there is still no platform independent way to return an absolute execution path, without looking for a specific file or something like that. I thought the os.path.abspath() would go most of the way to solving that problem. (hmm, what about using an os.path.join() in there, wouldn't that overcome the possible extra path separator problem? I must play around with this in the interpreter) Don't worry, I'm not interested in fixing stuff that isn't broken! But I am interested in learning the best methods for doing things for future use in my own work. Cheers, Stephen. -- Stephen M. Gava "More power to those who don't care for it." - anon From guido@digicool.com Thu Jul 12 16:04:27 2001 From: guido@digicool.com (Guido van Rossum) Date: Thu, 12 Jul 2001 11:04:27 -0400 Subject: [Idle-dev] Re: idlefork merge underway - errata In-Reply-To: Your message of "Fri, 13 Jul 2001 00:59:02 +1000." <01071300590201.00292@oberon> References: <01071215110401.00733@oberon> <01071300120000.00292@oberon> <200107121441.f6CEf2X14759@odiug.digicool.com> <01071300590201.00292@oberon> Message-ID: <200107121504.f6CF4Rc14973@odiug.digicool.com> > > So please just do what I said. :-) > > *L* No problem about that, I merged that change without question > before I even asked. I was just curious. It seems a shame that with > all the os.path stuff there is still no platform independent way to > return an absolute execution path, without looking for a specific > file or something like that. Depends on what you call "an absolute execution path". The issue of symbolic links comes to mind. > I thought the os.path.abspath() would > go most of the way to solving that problem. (hmm, what about using > an os.path.join() in there, wouldn't that overcome the possible > extra path separator problem? I must play around with this in the > interpreter) Don't worry, I'm not interested in fixing stuff that > isn't broken! But I am interested in learning the best methods for > doing things for future use in my own work. My point was, the absolute execution path of the script that started execution is of no importance -- what's important is the location of the code modules comprising IDLE. They are not necessarily related. --Guido van Rossum (home page: http://www.python.org/~guido/) From StephenM.Gava Thu Jul 12 16:32:04 2001 From: StephenM.Gava (StephenM.Gava) Date: Fri, 13 Jul 2001 01:32:04 +1000 Subject: [Idle-dev] Re: idlefork merge underway - errata In-Reply-To: <200107121504.f6CF4Rc14973@odiug.digicool.com> References: <01071215110401.00733@oberon> <01071300590201.00292@oberon> <200107121504.f6CF4Rc14973@odiug.digicool.com> Message-ID: <01071301320402.00292@oberon> > Depends on what you call "an absolute execution path". The issue of > symbolic links comes to mind. Hmm, yes, and there's the os.exec() issue as Fred mentionned also, and as Kurt pointed out: > According to the check-in message on idle.py Rev 1.3 (fdrake): > > "Use a better approach to locating IDLE's default configuration, > allowing it to be run from anywhere, including through a symlink to > the actual idle.py script." > My point was, the absolute execution path of the script that started > execution is of no importance -- what's important is the location of > the code modules comprising IDLE. They are not necessarily related. Now I'm wondering whether not thinking this issue through clearly before has left holes in the way other projects of mine locate data files. 8^\ On a different matter altogether, I've noticed that my cvs checkin messages come through as being just from "Stephen " even though I changed my sourceforge user details to my full name. Can anyone tell me where cvs is getting my 'identity' from so I can fix that up? --- Stephen M. Gava "More power to those who don't care for it." - anon From kbk@users.sourceforge.net Thu Jul 12 23:13:53 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 15:13:53 -0700 Subject: [Idle-dev] CVS: idle AutoExpand.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv15010 Modified Files: AutoExpand.py Log Message: py-cvs-rel1_2 (Rev 1.4) merge, "Add Alt-slash to Unix keydefs (I somehow need it on RH 6.2). Get rid of assignment to unused self.text.wordlist." --GvR Index: AutoExpand.py =================================================================== RCS file: /cvsroot/idlefork/idle/AutoExpand.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** AutoExpand.py 2001/07/04 03:15:10 1.2 --- AutoExpand.py 2001/07/12 22:13:51 1.3 *************** *** 13,17 **** unix_keydefs = { ! '<>': [''], } --- 13,17 ---- unix_keydefs = { ! '<>': ['', ''], } *************** *** 26,30 **** def __init__(self, editwin): self.text = editwin.text - self.text.wordlist = None # XXX what is this? self.state = None --- 26,29 ---- From kbk@users.sourceforge.net Thu Jul 12 23:26:46 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 15:26:46 -0700 Subject: [Idle-dev] CVS: idle CallTipWindow.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv18340 Modified Files: CallTipWindow.py Log Message: py-cvs-rel1_2 (Rev 1.3) merge - whitespace normalization Index: CallTipWindow.py =================================================================== RCS file: /cvsroot/idlefork/idle/CallTipWindow.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** CallTipWindow.py 2001/07/04 03:15:10 1.2 --- CallTipWindow.py 2001/07/12 22:26:44 1.3 *************** *** 29,33 **** font = self.widget['font']) label.pack() ! def hidetip(self): tw = self.tipwindow --- 29,33 ---- font = self.widget['font']) label.pack() ! def hidetip(self): tw = self.tipwindow *************** *** 54,58 **** text.bind("<>", self.calltip_show) text.bind("<>", self.calltip_hide) ! text.focus_set() # root.mainloop() # not in idle --- 54,58 ---- text.bind("<>", self.calltip_show) text.bind("<>", self.calltip_hide) ! text.focus_set() # root.mainloop() # not in idle From kbk@users.sourceforge.net Fri Jul 13 00:10:38 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 16:10:38 -0700 Subject: [Idle-dev] CVS: idle CallTips.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv26369 Modified Files: CallTips.py Log Message: py-cvs-rel2_1 (Rev 1.8) merge - whitespace normalization Index: CallTips.py =================================================================== RCS file: /cvsroot/idlefork/idle/CallTips.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** CallTips.py 2001/07/04 03:15:10 1.2 --- CallTips.py 2001/07/12 23:10:35 1.3 *************** *** 46,50 **** self.calltip.hidetip() self.calltip = None ! def paren_open_event(self, event): self._remove_calltip_window() --- 46,50 ---- self.calltip.hidetip() self.calltip = None ! def paren_open_event(self, event): self._remove_calltip_window() *************** *** 92,98 **** namespace.update(__main__.__dict__) try: ! return eval(word, namespace) except: ! pass return None # Can't find an object. --- 92,98 ---- namespace.update(__main__.__dict__) try: ! return eval(word, namespace) except: ! pass return None # Can't find an object. From kbk@users.sourceforge.net Fri Jul 13 00:41:39 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 16:41:39 -0700 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv29915 Modified Files: BrowserControl.py Log Message: py-cvs-rel2_1 (Rev 1.1) merge - New File - Force HEAD to trunk with -f Note: browser.py was renamed BrowserControl.py 10 May 2000. It provides a collection of classes and convenience functions to control external browsers "for 1.5.2 support". It was removed from py-cvs 18 April 2001. Index: BrowserControl.py =================================================================== RCS file: /cvsroot/idlefork/idle/BrowserControl.py,v retrieving revision 1.1.3.1 retrieving revision 1.2 diff -C2 -r1.1.3.1 -r1.2 From kbk@users.sourceforge.net Fri Jul 13 00:54:22 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 16:54:22 -0700 Subject: [Idle-dev] CVS: idle ClassBrowser.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv767 Modified Files: ClassBrowser.py Log Message: py-cvs-rel2_1 (Rev 1.12) merge - whitespace normalization Index: ClassBrowser.py =================================================================== RCS file: /cvsroot/idlefork/idle/ClassBrowser.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ClassBrowser.py 2001/07/04 03:15:10 1.2 --- ClassBrowser.py 2001/07/12 23:54:20 1.3 *************** *** 93,97 **** def IsExpandable(self): return os.path.normcase(self.file[-3:]) == ".py" ! def listclasses(self): dir, file = os.path.split(self.file) --- 93,97 ---- def IsExpandable(self): return os.path.normcase(self.file[-3:]) == ".py" ! def listclasses(self): dir, file = os.path.split(self.file) From kbk@users.sourceforge.net Fri Jul 13 01:04:26 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 17:04:26 -0700 Subject: [Idle-dev] CVS: idle ColorDelegator.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv1912 Modified Files: ColorDelegator.py Log Message: py-cvs-rel2_1 (Rev 1.11 and 1.12) merge Colorize "as" after "import" / use DEBUG instead of __debug__ Index: ColorDelegator.py =================================================================== RCS file: /cvsroot/idlefork/idle/ColorDelegator.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ColorDelegator.py 2001/07/04 03:15:10 1.2 --- ColorDelegator.py 2001/07/13 00:04:24 1.3 *************** *** 11,15 **** #$ unix ! __debug__ = 0 --- 11,15 ---- #$ unix ! DEBUG = 0 *************** *** 29,32 **** --- 29,33 ---- prog = re.compile(make_pat(), re.S) idprog = re.compile(r"\s+(\w+)", re.S) + asprog = re.compile(r".*?\b(as)\b", re.S) class ColorDelegator(Delegator): *************** *** 36,39 **** --- 37,41 ---- self.prog = prog self.idprog = idprog + self.asprog = asprog def setdelegate(self, delegate): *************** *** 83,93 **** self.tag_add("TODO", index1, index2) if self.after_id: ! if __debug__: print "colorizing already scheduled" return if self.colorizing: self.stop_colorizing = 1 ! if __debug__: print "stop colorizing" if self.allow_colorizing: ! if __debug__: print "schedule colorizing" self.after_id = self.after(1, self.recolorize) --- 85,95 ---- self.tag_add("TODO", index1, index2) if self.after_id: ! if DEBUG: print "colorizing already scheduled" return if self.colorizing: self.stop_colorizing = 1 ! if DEBUG: print "stop colorizing" if self.allow_colorizing: ! if DEBUG: print "schedule colorizing" self.after_id = self.after(1, self.recolorize) *************** *** 98,102 **** after_id = self.after_id self.after_id = None ! if __debug__: print "cancel scheduled recolorizer" self.after_cancel(after_id) self.allow_colorizing = 0 --- 100,104 ---- after_id = self.after_id self.after_id = None ! if DEBUG: print "cancel scheduled recolorizer" self.after_cancel(after_id) self.allow_colorizing = 0 *************** *** 112,124 **** after_id = self.after_id self.after_id = None ! if __debug__: print "cancel scheduled recolorizer" self.after_cancel(after_id) if self.allow_colorizing and self.colorizing: ! if __debug__: print "stop colorizing" self.stop_colorizing = 1 self.allow_colorizing = not self.allow_colorizing if self.allow_colorizing and not self.colorizing: self.after_id = self.after(1, self.recolorize) ! if __debug__: print "auto colorizing turned", self.allow_colorizing and "on" or "off" return "break" --- 114,126 ---- after_id = self.after_id self.after_id = None ! if DEBUG: print "cancel scheduled recolorizer" self.after_cancel(after_id) if self.allow_colorizing and self.colorizing: ! if DEBUG: print "stop colorizing" self.stop_colorizing = 1 self.allow_colorizing = not self.allow_colorizing if self.allow_colorizing and not self.colorizing: self.after_id = self.after(1, self.recolorize) ! if DEBUG: print "auto colorizing turned", self.allow_colorizing and "on" or "off" return "break" *************** *** 127,150 **** self.after_id = None if not self.delegate: ! if __debug__: print "no delegate" return if not self.allow_colorizing: ! if __debug__: print "auto colorizing is off" return if self.colorizing: ! if __debug__: print "already colorizing" return try: self.stop_colorizing = 0 self.colorizing = 1 ! if __debug__: print "colorizing..." t0 = time.clock() self.recolorize_main() t1 = time.clock() ! if __debug__: print "%.3f seconds" % (t1-t0) finally: self.colorizing = 0 if self.allow_colorizing and self.tag_nextrange("TODO", "1.0"): ! if __debug__: print "reschedule colorizing" self.after_id = self.after(1, self.recolorize) if self.close_when_done: --- 129,152 ---- self.after_id = None if not self.delegate: ! if DEBUG: print "no delegate" return if not self.allow_colorizing: ! if DEBUG: print "auto colorizing is off" return if self.colorizing: ! if DEBUG: print "already colorizing" return try: self.stop_colorizing = 0 self.colorizing = 1 ! if DEBUG: print "colorizing..." t0 = time.clock() self.recolorize_main() t1 = time.clock() ! if DEBUG: print "%.3f seconds" % (t1-t0) finally: self.colorizing = 0 if self.allow_colorizing and self.tag_nextrange("TODO", "1.0"): ! if DEBUG: print "reschedule colorizing" self.after_id = self.after(1, self.recolorize) if self.close_when_done: *************** *** 199,202 **** --- 201,215 ---- head + "+%dc" % a, head + "+%dc" % b) + elif value == "import": + # color all the "as" words on same line; + # cheap approximation to the truth + while 1: + m1 = self.asprog.match(chars, b) + if not m1: + break + a, b = m1.span(1) + self.tag_add("KEYWORD", + head + "+%dc" % a, + head + "+%dc" % b) m = self.prog.search(chars, m.end()) if "SYNC" in self.tag_names(next + "-1c"): *************** *** 215,219 **** self.update() if self.stop_colorizing: ! if __debug__: print "colorizing stopped" return --- 228,232 ---- self.update() if self.stop_colorizing: ! if DEBUG: print "colorizing stopped" return From kbk@users.sourceforge.net Fri Jul 13 01:07:44 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 17:07:44 -0700 Subject: [Idle-dev] CVS: idle Debugger.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv2868 Modified Files: Debugger.py Log Message: py-cvs-rel2_1 (Rev 1.15) merge - whitespace normalization Index: Debugger.py =================================================================== RCS file: /cvsroot/idlefork/idle/Debugger.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Debugger.py 2001/07/04 03:15:10 1.2 --- Debugger.py 2001/07/13 00:07:42 1.3 *************** *** 18,22 **** self.pyshell = pyshell self.make_gui() ! def canonic(self, filename): # Canonicalize filename -- called by Bdb --- 18,22 ---- self.pyshell = pyshell self.make_gui() ! def canonic(self, filename): # Canonicalize filename -- called by Bdb *************** *** 300,308 **** line = linecache.getline(filename, lineno) if not line: ! return 'That line does not exist!' if not self.breaks.has_key(filename): ! self.breaks[filename] = [] list = self.breaks[filename] if not lineno in list: ! list.append(lineno) bp = bdb.Breakpoint(filename, lineno, temporary, cond) --- 300,308 ---- line = linecache.getline(filename, lineno) if not line: ! return 'That line does not exist!' if not self.breaks.has_key(filename): ! self.breaks[filename] = [] list = self.breaks[filename] if not lineno in list: ! list.append(lineno) bp = bdb.Breakpoint(filename, lineno, temporary, cond) From kbk@users.sourceforge.net Fri Jul 13 01:10:04 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 17:10:04 -0700 Subject: [Idle-dev] CVS: idle Delegator.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv3260 Modified Files: Delegator.py Log Message: py-cvs-rel2_1 (Rev 1.3) merge - whitespace normalization Index: Delegator.py =================================================================== RCS file: /cvsroot/idlefork/idle/Delegator.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Delegator.py 2001/07/04 03:15:10 1.2 --- Delegator.py 2001/07/13 00:10:02 1.3 *************** *** 1,3 **** - class Delegator: --- 1,2 ---- From kbk@shore.net Fri Jul 13 02:00:11 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 12 Jul 2001 21:00:11 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: References: Message-ID: "Kurt B. Kaiser" writes: > Note: browser.py was renamed BrowserControl.py 10 May 2000. It provides a > collection of classes and convenience functions to control external > browsers "for 1.5.2 support". It was removed from py-cvs 18 April 2001. > Further comment: Based on 1.38 (18 April 2001, after the 2.1 release we are merging) of EditorWindow.py, "Remove legacy support for the BrowserControl module; the webbrowser module has been included since Python 2.0, and that is the preferred interface." Do we want to continue 1.5.2 support or switch to the new way? Regards, KBK From guido@digicool.com Fri Jul 13 02:20:26 2001 From: guido@digicool.com (Guido van Rossum) Date: Thu, 12 Jul 2001 21:20:26 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: Your message of "12 Jul 2001 21:00:11 EDT." References: Message-ID: <200107130120.f6D1KQT16033@odiug.digicool.com> > Do we want to continue 1.5.2 support or switch to the new way? Depends on our goals. If our goal is to provide an alternative, stable IDLE for a large audience, then we would do wise to remain 1.5.2 compatible. This can be a bit of a pain. If our goal is to move forward and develop IDLE further, we might be better off focusing on 2.0 or even 2.1, so it won't slow us down. Compatibility testing takes a lot of time! So, I'm for dropping 1.5.2 support, but I'll leave it up to you to decide what you want. --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@shore.net Fri Jul 13 02:26:10 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 12 Jul 2001 21:26:10 -0400 Subject: [Idle-dev] ConfigParser.py Message-ID: It appears that ConfigParser.py never existed in Python CVS .../Tools/idle. ConfigParser.py is normally found in the main Python /Lib directory. The version in idlefork is the same as Rev 1.17 which existed at the time idlefork split off. It's not clear why a copy appeared in Visual Python IDLE. I'm deleting it. KBK From kbk@users.sourceforge.net Fri Jul 13 02:30:09 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 18:30:09 -0700 Subject: [Idle-dev] CVS: idle ConfigParser.py,1.2,NONE Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv15390 Removed Files: ConfigParser.py Log Message: py-cvs-rel2_1 merge - Remove, lives in /Lib --- ConfigParser.py DELETED --- From pobrien@orbtech.com Fri Jul 13 02:51:26 2001 From: pobrien@orbtech.com (Patrick K. O'Brien) Date: Thu, 12 Jul 2001 20:51:26 -0500 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: <200107130120.f6D1KQT16033@odiug.digicool.com> Message-ID: The current IDLE is certainly quite good and quite useable for anyone with 1.5.2. I personally am interested in the future and having IDLE keep up with the latest language enhancements. So I would also be in favor of dropping 1.5.2 support and focusing on 2.1. --- Patrick K. O'Brien Orbtech "I am, therefore I think." -----Original Message----- From: idle-dev-admin@python.org [mailto:idle-dev-admin@python.org]On Behalf Of Guido van Rossum Sent: Thursday, July 12, 2001 8:20 PM To: Kurt B. Kaiser Cc: idle-dev@python.org Subject: Re: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 > Do we want to continue 1.5.2 support or switch to the new way? Depends on our goals. If our goal is to provide an alternative, stable IDLE for a large audience, then we would do wise to remain 1.5.2 compatible. This can be a bit of a pain. If our goal is to move forward and develop IDLE further, we might be better off focusing on 2.0 or even 2.1, so it won't slow us down. Compatibility testing takes a lot of time! So, I'm for dropping 1.5.2 support, but I'll leave it up to you to decide what you want. --Guido van Rossum (home page: http://www.python.org/~guido/) _______________________________________________ IDLE-dev mailing list IDLE-dev@python.org http://mail.python.org/mailman/listinfo/idle-dev From StephenM.Gava Fri Jul 13 03:13:04 2001 From: StephenM.Gava (StephenM.Gava) Date: Fri, 13 Jul 2001 12:13:04 +1000 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: References: Message-ID: <01071312130400.00293@oberon> > The current IDLE is certainly quite good and quite useable for anyone with > 1.5.2. I personally am interested in the future and having IDLE keep up > with the latest language enhancements. So I would also be in favor of > dropping 1.5.2 support and focusing on 2.1. Me too. I feel that if the idea of idlefork is to develop and test new features for possible eventual merging into python idle, then the project is inherently forward looking, and should not be constrained by too much emphasis on compatability with much earlier python versions. As Patrick rightfully points out, existing stable python already fills that niche admirably. Even debian linux, that I use on my office machine here, is finally moving 2.0.1 into position to be it's main python version, now that the licence issues are resolved (I've been using 'roll your own' 2.1 for development since it came out though). I figure they'll do the same with 2.1 when the promised 'licence compatabilty' release comes through. Anyone have a rough idea when this might be happenning? Or will it be subsumed by 2.2? > > --- > Patrick K. O'Brien > Orbtech > "I am, therefore I think." > > -----Original Message----- > From: idle-dev-admin@python.org [mailto:idle-dev-admin@python.org]On Behalf > Of Guido van Rossum > Sent: Thursday, July 12, 2001 8:20 PM > To: Kurt B. Kaiser > Cc: idle-dev@python.org > Subject: Re: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 > > > Do we want to continue 1.5.2 support or switch to the new way? > > Depends on our goals. If our goal is to provide an alternative, > stable IDLE for a large audience, then we would do wise to remain > 1.5.2 compatible. This can be a bit of a pain. If our goal is to > move forward and develop IDLE further, we might be better off focusing > on 2.0 or even 2.1, so it won't slow us down. Compatibility testing > takes a lot of time! > > So, I'm for dropping 1.5.2 support, but I'll leave it up to you to > decide what you want. -- Stephen M. Gava "More power to those who don't care for it." - anon From kbk@users.sourceforge.net Fri Jul 13 04:35:34 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 20:35:34 -0700 Subject: [Idle-dev] CVS: idle EditorWindow.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv30363 Modified Files: EditorWindow.py Log Message: py-cvs-rel2_1 (Rev 1.33 - 1.37) merge VP IDLE version depended on VP's ExecBinding.py and spawn.py to get the path to the Windows Doc directory (relative to python.exe). Removed this conflicting code in favor of py-cvs updates which on Windows use a hard coded path relative to the location of this module. py-cvs updates include support for webbrowser.py. Module still has BrowserControl.py for 1.5.2 support. At this point, the differences wrt py-cvs relate to menu functionality. Index: EditorWindow.py =================================================================== RCS file: /cvsroot/idlefork/idle/EditorWindow.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** EditorWindow.py 2001/07/04 03:15:10 1.2 --- EditorWindow.py 2001/07/13 03:35:32 1.3 *************** *** 13,16 **** --- 13,22 ---- import tkSimpleDialog import tkMessageBox + try: + import webbrowser + except ImportError: + import BrowserControl + webbrowser = BrowserControl + del BrowserControl import idlever import WindowList *************** *** 33,36 **** --- 39,43 ---- #$ event <> + #$ unix #$ unix *************** *** 304,323 **** self.io.loadfile(helpfile) - help_viewer = "netscape -remote 'openurl(%(url)s)' 2>/dev/null || " \ - "netscape %(url)s &" help_url = "http://www.python.org/doc/current/" def python_docs(self, event=None): ! if sys.platform=='win32': ! try: ! import win32api ! import ExecBinding ! doc = os.path.join( os.path.dirname( ExecBinding.pyth_exe ), "doc", "index.html" ) ! win32api.ShellExecute(0, None, doc, None, sys.path[0], 1) ! except: ! pass ! else: ! cmd = self.help_viewer % {"url": self.help_url} ! os.system(cmd) def select_all(self, event=None): --- 311,325 ---- self.io.loadfile(helpfile) help_url = "http://www.python.org/doc/current/" + if sys.platform[:3] == "win": + fn = os.path.dirname(__file__) + fn = os.path.join(fn, "../../Doc/index.html") + fn = os.path.normpath(fn) + if os.path.isfile(fn): + help_url = fn + del fn def python_docs(self, event=None): ! webbrowser.open(self.help_url) def select_all(self, event=None): *************** *** 689,693 **** pixels = text.tk.call("font", "measure", text["font"], "-displayof", text.master, ! "n" * newtabwith) text.configure(tabs=pixels) --- 691,695 ---- pixels = text.tk.call("font", "measure", text["font"], "-displayof", text.master, ! "n" * newtabwidth) text.configure(tabs=pixels) From kbk@shore.net Fri Jul 13 04:56:14 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 12 Jul 2001 23:56:14 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: <01071312130400.00293@oberon> References: <01071312130400.00293@oberon> Message-ID: Stephen M. Gava writes: P. K. O'Brien: > > The current IDLE is certainly quite good and quite useable for anyone with > > 1.5.2. I personally am interested in the future and having IDLE keep up > > with the latest language enhancements. So I would also be in favor of > > dropping 1.5.2 support and focusing on 2.1. > > Me too. I feel that if the idea of idlefork is to develop and test new > features for possible eventual merging into python idle, then the project is > inherently forward looking, and should not be constrained by too much > emphasis on compatability with much earlier python versions. As Patrick > rightfully points out, existing stable python already fills that niche > admirably. GvR: > > So, I'm for dropping 1.5.2 support, but I'll leave it up to you to > > decide what you want. OK, after we finish this merge, there is a tag on py-cvs called date2001-07-06 which can be used to merge almost to the present. That will rip out the BrowserControl, along with a couple of other things. Only a few files are affected, won't take long. Regards, KBK From kbk@users.sourceforge.net Fri Jul 13 05:07:50 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 21:07:50 -0700 Subject: [Idle-dev] CVS: idle FileList.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv4547 Modified Files: FileList.py Log Message: py-cvs-rel2_1 (Rev 1.8) merge - whitespace normalization Index: FileList.py =================================================================== RCS file: /cvsroot/idlefork/idle/FileList.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** FileList.py 2001/07/04 03:15:10 1.2 --- FileList.py 2001/07/13 04:07:47 1.3 *************** *** 32,41 **** def goodname(self, filename): ! filename = self.canonize(filename) ! key = os.path.normcase(filename) ! if self.dict.has_key(key): ! edit = self.dict[key] ! filename = edit.io.filename or filename ! return filename def open(self, filename, action=None): --- 32,41 ---- def goodname(self, filename): ! filename = self.canonize(filename) ! key = os.path.normcase(filename) ! if self.dict.has_key(key): ! edit = self.dict[key] ! filename = edit.io.filename or filename ! return filename def open(self, filename, action=None): From kbk@users.sourceforge.net Fri Jul 13 05:12:05 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 21:12:05 -0700 Subject: [Idle-dev] CVS: idle FormatParagraph.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv5148 Modified Files: FormatParagraph.py Log Message: py-cvs-rel2_1 (Rev 1.9) merge - whitespace normalization Index: FormatParagraph.py =================================================================== RCS file: /cvsroot/idlefork/idle/FormatParagraph.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** FormatParagraph.py 2001/07/04 03:15:10 1.2 --- FormatParagraph.py 2001/07/13 04:12:02 1.3 *************** *** 29,36 **** '<>': [''], } ! unix_keydefs = { '<>': [''], ! } def __init__(self, editwin): --- 29,36 ---- '<>': [''], } ! unix_keydefs = { '<>': [''], ! } def __init__(self, editwin): From kbk@users.sourceforge.net Fri Jul 13 05:18:34 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Thu, 12 Jul 2001 21:18:34 -0700 Subject: [Idle-dev] CVS: idle IOBinding.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv5766 Modified Files: IOBinding.py Log Message: py-cvs-rel2_1 (Rev 1.4) merge - move "import *" to module level Index: IOBinding.py =================================================================== RCS file: /cvsroot/idlefork/idle/IOBinding.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** IOBinding.py 2001/07/04 03:15:10 1.2 --- IOBinding.py 2001/07/13 04:18:32 1.3 *************** *** 223,227 **** def test(): - from Tkinter import * root = Tk() class MyEditWin: --- 223,226 ---- *************** *** 252,254 **** --- 251,254 ---- if __name__ == "__main__": + from Tkinter import * test() From guido@digicool.com Fri Jul 13 14:57:47 2001 From: guido@digicool.com (Guido van Rossum) Date: Fri, 13 Jul 2001 09:57:47 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: Your message of "Fri, 13 Jul 2001 12:13:04 +1000." <01071312130400.00293@oberon> References: <01071312130400.00293@oberon> Message-ID: <200107131357.f6DDvld16423@odiug.digicool.com> > Even debian linux, that I use on my office machine here, is finally moving > 2.0.1 into position to be it's main python version, now that the licence > issues are resolved (I've been using 'roll your own' 2.1 for development > since it came out though). I figure they'll do the same with 2.1 when the > promised 'licence compatabilty' release comes through. Anyone have a rough > idea when this might be happenning? Or will it be subsumed by 2.2? 2.1.1 release candidate 1 will be out today! Final next Friday. --Guido van Rossum (home page: http://www.python.org/~guido/) From guido@digicool.com Fri Jul 13 15:39:35 2001 From: guido@digicool.com (Guido van Rossum) Date: Fri, 13 Jul 2001 10:39:35 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: Your message of "12 Jul 2001 23:56:14 EDT." References: <01071312130400.00293@oberon> Message-ID: <200107131439.f6DEdZZ16448@odiug.digicool.com> > OK, after we finish this merge, there is a tag on py-cvs called > date2001-07-06 which can be used to merge almost to the present. That will > rip out the BrowserControl, along with a couple of other things. Only a few > files are affected, won't take long. I'm not sure why you would want that tag (which is a temporary tag for purposes of a different branch merge). But you can always request CVS revisions by date. --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@shore.net Fri Jul 13 16:59:40 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 13 Jul 2001 11:59:40 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: <200107131439.f6DEdZZ16448@odiug.digicool.com> References: <01071312130400.00293@oberon> <200107131439.f6DEdZZ16448@odiug.digicool.com> Message-ID: Guido van Rossum writes: > > OK, after we finish this merge, there is a tag on py-cvs called > > date2001-07-06 which can be used to merge almost to the present. That will > > rip out the BrowserControl, along with a couple of other things. Only a few > > files are affected, won't take long. > > I'm not sure why you would want that tag (which is a temporary tag for > purposes of a different branch merge). But you can always request CVS > revisions by date. I like to use a symbolic tag if one is available. But if that tag (and its ilk?) is going to be deleted I certainly don't want to use it. r211c1 won't hit the latest EditorWindow (or the bug you just fixed in PyShell), so I guess a date rev is the way to go. They can have problems unless everyone remembers to specify GMT. I forgot to do that when I did the 9 Mar 2000 export. I used -D 2000-03-09 23:59 and actually got 2000-03-10 03:59 GMT. Speaking of 2.1.1, IDLE help is not working on Linux because setup.py doesn't install the help.txt file. I submitted a trivial patch on this (422471) a couple of months ago. Regards, KBK From guido@digicool.com Fri Jul 13 17:22:05 2001 From: guido@digicool.com (Guido van Rossum) Date: Fri, 13 Jul 2001 12:22:05 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: Your message of "13 Jul 2001 11:59:40 EDT." References: <01071312130400.00293@oberon> <200107131439.f6DEdZZ16448@odiug.digicool.com> Message-ID: <200107131622.f6DGM5x16666@odiug.digicool.com> > r211c1 won't hit the latest EditorWindow (or the bug you just fixed in > PyShell), so I guess a date rev is the way to go. They can have problems > unless everyone remembers to specify GMT. I forgot to do that when I did the > 9 Mar 2000 export. I used -D 2000-03-09 23:59 and actually got > 2000-03-10 03:59 GMT. Sorry, I have no idea what you're talking about. Probably because I haven't been following this close enough. > Speaking of 2.1.1, IDLE help is not working on Linux because setup.py doesn't > install the help.txt file. I submitted a trivial patch on this (422471) a > couple of months ago. Hm, I've never bothered to install it using setup.py -- I didn't even know that was possible! Why don't you fix that in idlefork, then we'll eventually merge back. Or if you want this in 2.1.1 final, try drawing Thomas Wouters' attention. --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@shore.net Fri Jul 13 17:50:11 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 13 Jul 2001 12:50:11 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: <200107131622.f6DGM5x16666@odiug.digicool.com> References: <01071312130400.00293@oberon> <200107131439.f6DEdZZ16448@odiug.digicool.com> <200107131622.f6DGM5x16666@odiug.digicool.com> Message-ID: Guido van Rossum writes: > > r211c1 won't hit the latest EditorWindow (or the bug you just fixed in > > PyShell), so I guess a date rev is the way to go. They can have problems > > unless everyone remembers to specify GMT. I forgot to do that when I did the > > 9 Mar 2000 export. I used -D 2000-03-09 23:59 and actually got > > 2000-03-10 03:59 GMT. > > Sorry, I have no idea what you're talking about. Probably because I > haven't been following this close enough. For example, Stephen and I are 14 hours apart. If we both specify the same rev by date w/o using GMT, we will get repository snapshots 14 hours apart. Symbolic tags don't have this problem. > > > Speaking of 2.1.1, IDLE help is not working on Linux because setup.py doesn't > > install the help.txt file. I submitted a trivial patch on this (422471) a > > couple of months ago. > > Hm, I've never bothered to install it using setup.py -- I didn't even > know that was possible! Why don't you fix that in idlefork, then > we'll eventually merge back. > Works great, just go to ..../Tools/idle and run python setup.py Idlefork should install the same way once we get it buffed up. I plan to fix the help functionality in idlefork when the merge is done, but the change is so trivial, why not fix it in py-cvs? Incidently, IDLE is installed in Windows by default. But in Linux it is not, and I've seen some indications that some people have trouble getting it going. Why not have it installed in Linux by default, also, so that Python comes with the GUI IDE people seem to expect these days? > Or if you want this in 2.1.1 final, try drawing Thomas Wouters' attention. > OK, I'll send him a copy of this. I really think that "official" IDLE's help function should work, it may be awhile before we merge back! Regards, KBK From fdrake@acm.org Fri Jul 13 18:01:26 2001 From: fdrake@acm.org (Fred L. Drake) Date: Fri, 13 Jul 2001 13:01:26 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: Message-ID: kbk@shore.net (Kurt B. Kaiser) wrote: > Why not have it installed in Linux by default, also, so > that Python comes with > the GUI IDE people seem to expect these days? Do Linux users really expect a GUI IDE other than Emacs/XEmacs? They shouldn't! ;-) Seriously, I think it should be installed. I'm not sure exactly where all the IDLE modules should go (/usr/lib/idle/ ?), but it would be nice. If it could include a .desktop file for Gnome/KDE, that would be nice as well. If no noe has one already, I'll take a look at writing one -- it shouldn't be too painful, and I think I have the info about how to do that somewhere. -Fred -- Fred L. Drake, Jr. PythonLabs at Digital Creations From kbk@shore.net Fri Jul 13 18:15:12 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 13 Jul 2001 13:15:12 -0400 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: References: Message-ID: "Fred L. Drake" writes: > Do Linux users really expect a GUI IDE other than > Emacs/XEmacs? They shouldn't! ;-) Does Emacs run a debugger on Python in a separate process? ;-) I just run IDLE and several Emacs windows on three desktops.... > Seriously, I think it should be installed. I'm not sure > exactly where all the IDLE modules should go (/usr/lib/idle/ > ?), but it would be nice. Distutils seem to take care of all of that on Linux, you go python setup.py and the files are installed in the canonical places under site-packages. It may be one line of code in the installation scripts to set this up. And if the Windows Python directory tree becomes the same as Linux's, then you have simplification and less maintenance.... > If it could include a .desktop > file for Gnome/KDE, that would be nice as well. > If no noe has one already, I'll take a look at writing one > -- it shouldn't be too painful, and I think I have the info > about how to do that somewhere. > That would be nifty. Things should be as easy (and snazzy?) as possible, so when everyone dumps XP we'll be waiting =) Regards, KBK From kbk@users.sourceforge.net Fri Jul 13 18:38:10 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 10:38:10 -0700 Subject: [Idle-dev] CVS: idle IdleConf.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv30180 Modified Files: IdleConf.py Log Message: py-cvs-rel2_1 (Rev 1.6) merge - whitespace normalization Index: IdleConf.py =================================================================== RCS file: /cvsroot/idlefork/idle/IdleConf.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** IdleConf.py 2001/07/04 03:15:10 1.2 --- IdleConf.py 2001/07/13 17:38:08 1.3 *************** *** 11,15 **** for section in ('EditorWindow', 'Colors'): builtin_sections[section] = section ! def getcolor(self, sec, name): """Return a dictionary with foreground and background colors --- 11,15 ---- for section in ('EditorWindow', 'Colors'): builtin_sections[section] = section ! def getcolor(self, sec, name): """Return a dictionary with foreground and background colors *************** *** 18,23 **** a tag_config call. """ ! fore = self.getdef(sec, name + "-foreground") ! back = self.getdef(sec, name + "-background") return {"foreground": fore, "background": back} --- 18,23 ---- a tag_config call. """ ! fore = self.getdef(sec, name + "-foreground") ! back = self.getdef(sec, name + "-background") return {"foreground": fore, "background": back} *************** *** 25,32 **** def getdef(self, sec, options, raw=0, vars=None, default=None): """Get an option value for given section or return default""" ! try: return self.get(sec, options, raw, vars) ! except (NoSectionError, NoOptionError): ! return default def getsection(self, section): --- 25,32 ---- def getdef(self, sec, options, raw=0, vars=None, default=None): """Get an option value for given section or return default""" ! try: return self.get(sec, options, raw, vars) ! except (NoSectionError, NoOptionError): ! return default def getsection(self, section): *************** *** 38,45 **** for sec in self.sections(): if self.builtin_sections.has_key(sec): ! continue ! # enable is a bool, but it may not be defined ! if self.getdef(sec, 'enable') != '0': ! exts.append(sec) return exts --- 38,45 ---- for sec in self.sections(): if self.builtin_sections.has_key(sec): ! continue ! # enable is a bool, but it may not be defined ! if self.getdef(sec, 'enable') != '0': ! exts.append(sec) return exts *************** *** 70,77 **** def getint(self, option): return self.config.getint(self.section, option) ! def getfloat(self, option): return self.config.getint(self.section, option) ! def getboolean(self, option): return self.config.getint(self.section, option) --- 70,77 ---- def getint(self, option): return self.config.getint(self.section, option) ! def getfloat(self, option): return self.config.getint(self.section, option) ! def getboolean(self, option): return self.config.getint(self.section, option) *************** *** 99,103 **** else: genplatfile = os.path.join(dir, "config-unix.txt") ! platfile = os.path.join(dir, "config-%s.txt" % sys.platform) --- 99,103 ---- else: genplatfile = os.path.join(dir, "config-unix.txt") ! platfile = os.path.join(dir, "config-%s.txt" % sys.platform) *************** *** 111,113 **** idleconf = IdleConfParser() - --- 111,112 ---- From kbk@users.sourceforge.net Fri Jul 13 18:40:19 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 10:40:19 -0700 Subject: [Idle-dev] CVS: idle IdleHistory.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv30580 Modified Files: IdleHistory.py Log Message: py-cvs-rel2_1 (Rev 1.4) merge - whitespace normalization Index: IdleHistory.py =================================================================== RCS file: /cvsroot/idlefork/idle/IdleHistory.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** IdleHistory.py 2001/07/04 03:15:10 1.2 --- IdleHistory.py 2001/07/13 17:40:17 1.3 *************** *** 87,89 **** self.text.insert("insert", s) self.text.see("insert") - --- 87,88 ---- From kbk@users.sourceforge.net Fri Jul 13 18:44:08 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 10:44:08 -0700 Subject: [Idle-dev] CVS: idle MultiScrolledLists.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv31295 Modified Files: MultiScrolledLists.py Log Message: py-cvs-rel2_1 (Rev 1.2) merge - whitespace normalization Index: MultiScrolledLists.py =================================================================== RCS file: /cvsroot/idlefork/idle/MultiScrolledLists.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** MultiScrolledLists.py 2001/07/04 03:15:10 1.2 --- MultiScrolledLists.py 2001/07/13 17:44:06 1.3 *************** *** 11,15 **** class MultiScrolledLists: ! def __init__(self, root, nlists=2): assert nlists >= 1 --- 11,15 ---- class MultiScrolledLists: ! def __init__(self, root, nlists=2): assert nlists >= 1 *************** *** 52,66 **** # XXX one after_idle isn't enough; two are... top.after_idle(self.call_pack_propagate_1) ! def call_pack_propagate_1(self): self.top.after_idle(self.call_pack_propagate) ! def call_pack_propagate(self): for frame in self.frames: frame.pack_propagate(0) ! def close(self, event=None): self.top.destroy() ! def settitle(self): short = self.shorttitle() --- 52,66 ---- # XXX one after_idle isn't enough; two are... top.after_idle(self.call_pack_propagate_1) ! def call_pack_propagate_1(self): self.top.after_idle(self.call_pack_propagate) ! def call_pack_propagate(self): for frame in self.frames: frame.pack_propagate(0) ! def close(self, event=None): self.top.destroy() ! def settitle(self): short = self.shorttitle() *************** *** 81,101 **** # override this return "Multi Scrolled Lists" ! def shorttitle(self): # override this return None ! def width(self, i): # override this return 20 ! def height(self, i): # override this return 10 ! def subtitle(self, i): # override this return "Column %d" % i ! def fill(self, i): for k in range(i, self.nlists): --- 81,101 ---- # override this return "Multi Scrolled Lists" ! def shorttitle(self): # override this return None ! def width(self, i): # override this return 20 ! def height(self, i): # override this return 10 ! def subtitle(self, i): # override this return "Column %d" % i ! def fill(self, i): for k in range(i, self.nlists): *************** *** 106,110 **** for s in l: list.append(s) ! def on_select(self, index, i): item = self.lists[i].get(index) --- 106,110 ---- for s in l: list.append(s) ! def on_select(self, index, i): item = self.lists[i].get(index) *************** *** 113,117 **** if i+1 < self.nlists: self.fill(i+1) ! def items(self, i): # override this --- 113,117 ---- if i+1 < self.nlists: self.fill(i+1) ! def items(self, i): # override this *************** *** 123,127 **** l.append(s) return l ! def on_double(self, index, i): pass --- 123,127 ---- l.append(s) return l ! def on_double(self, index, i): pass From kbk@users.sourceforge.net Fri Jul 13 18:52:10 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 10:52:10 -0700 Subject: [Idle-dev] CVS: idle MultiStatusBar.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv394 Modified Files: MultiStatusBar.py Log Message: py-cvs-rel2_1 (Rev 1.2) merge - whitespace normalization Index: MultiStatusBar.py =================================================================== RCS file: /cvsroot/idlefork/idle/MultiStatusBar.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** MultiStatusBar.py 2001/07/04 03:15:10 1.2 --- MultiStatusBar.py 2001/07/13 17:52:08 1.3 *************** *** 2,32 **** class MultiStatusBar(Frame): - - def __init__(self, master=None, **kw): - if master is None: - master = Tk() - apply(Frame.__init__, (self, master), kw) - self.labels = {} ! def set_label(self, name, text='', side=LEFT): ! if not self.labels.has_key(name): ! label = Label(self, bd=1, relief=SUNKEN, anchor=W) ! label.pack(side=side) ! self.labels[name] = label ! else: ! label = self.labels[name] ! label.config(text=text) def _test(): ! b = Frame() ! c = Text(b) ! c.pack(side=TOP) ! a = MultiStatusBar(b) ! a.set_label("one", "hello") ! a.set_label("two", "world") ! a.pack(side=BOTTOM, fill=X) ! b.pack() ! b.mainloop() if __name__ == '__main__': ! _test() --- 2,32 ---- class MultiStatusBar(Frame): ! def __init__(self, master=None, **kw): ! if master is None: ! master = Tk() ! apply(Frame.__init__, (self, master), kw) ! self.labels = {} + def set_label(self, name, text='', side=LEFT): + if not self.labels.has_key(name): + label = Label(self, bd=1, relief=SUNKEN, anchor=W) + label.pack(side=side) + self.labels[name] = label + else: + label = self.labels[name] + label.config(text=text) + def _test(): ! b = Frame() ! c = Text(b) ! c.pack(side=TOP) ! a = MultiStatusBar(b) ! a.set_label("one", "hello") ! a.set_label("two", "world") ! a.pack(side=BOTTOM, fill=X) ! b.pack() ! b.mainloop() if __name__ == '__main__': ! _test() From kbk@users.sourceforge.net Fri Jul 13 18:57:40 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 10:57:40 -0700 Subject: [Idle-dev] CVS: idle ObjectBrowser.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv1132 Modified Files: ObjectBrowser.py Log Message: py-cvs-rel2_1 (Rev 1.3) merge "Make the test program work outside IDLE." -- GvR Index: ObjectBrowser.py =================================================================== RCS file: /cvsroot/idlefork/idle/ObjectBrowser.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ObjectBrowser.py 2001/07/04 03:15:10 1.2 --- ObjectBrowser.py 2001/07/13 17:57:37 1.3 *************** *** 135,143 **** # Test script ! def test(): import sys ! from Tkinter import Toplevel ! import PyShell ! root = Toplevel(PyShell.root) root.configure(bd=0, bg="yellow") root.focus_set() --- 135,142 ---- # Test script ! def _test(): import sys ! from Tkinter import Tk ! root = Tk() root.configure(bd=0, bg="yellow") root.focus_set() *************** *** 146,151 **** item = make_objecttreeitem("sys", sys) node = TreeNode(sc.canvas, None, item) ! node.expand() if __name__ == '__main__': ! test() --- 145,151 ---- item = make_objecttreeitem("sys", sys) node = TreeNode(sc.canvas, None, item) ! node.update() ! root.mainloop() if __name__ == '__main__': ! _test() From kbk@shore.net Fri Jul 13 20:42:16 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 13 Jul 2001 15:42:16 -0400 Subject: [Idle-dev] OutputWindow.py Message-ID: This file has been extensively modified. There was supposedly some whitespace normalization coming in from py-cvs Rev 1.5, but it got lost in the shuffle and there was no change to idlefork after the merge. >From the header comments by D. Scherer: # - OutputWindow and OnDemandOutputWindow have been hastily # extended to provide readline() support, an "iomark" separate # from the "insert" cursor, and scrolling to clear the window. # These changes are used by the ExecBinding module to provide # standard input and output for user programs. Many of the new # features are very similar to features of PyShell, which is a # subclass of OutputWindow. Someone should make some sense of # this. KBK From kbk@users.sourceforge.net Fri Jul 13 20:49:29 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 12:49:29 -0700 Subject: [Idle-dev] CVS: idle ParenMatch.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv23163 Modified Files: ParenMatch.py Log Message: cvs-py-rel2_1 (Rev 1.5) merge - whitespace normalization Index: ParenMatch.py =================================================================== RCS file: /cvsroot/idlefork/idle/ParenMatch.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ParenMatch.py 2001/07/04 03:15:10 1.2 --- ParenMatch.py 2001/07/13 19:49:27 1.3 *************** *** 21,25 **** There are three supported style of paren matching, based loosely ! on the Emacs options. The style is select based on the HILITE_STYLE attribute; it can be changed used the set_style method. --- 21,25 ---- There are three supported style of paren matching, based loosely ! on the Emacs options. The style is select based on the HILITE_STYLE attribute; it can be changed used the set_style method. *************** *** 44,50 **** so I haven't bothered. """ ! menudefs = [] ! keydefs = { '<>' : ('', --- 44,50 ---- so I haven't bothered. """ ! menudefs = [] ! keydefs = { '<>' : ('', *************** *** 147,151 **** tabwidth = AutoIndent.tabwidth context_use_ps1 = AutoIndent.context_use_ps1 ! def __init__(self, editwin): self.editwin = editwin --- 147,151 ---- tabwidth = AutoIndent.tabwidth context_use_ps1 = AutoIndent.context_use_ps1 ! def __init__(self, editwin): self.editwin = editwin *************** *** 159,163 **** # rawtext needs to contain everything up to the last # character, which was the close paren. the parser also ! # requires that the last line ends with "\n" rawtext = self.text.get(startatindex, "insert")[:-1] + "\n" y.set_str(rawtext) --- 159,163 ---- # rawtext needs to contain everything up to the last # character, which was the close paren. the parser also ! # requires that the last line ends with "\n" rawtext = self.text.get(startatindex, "insert")[:-1] + "\n" y.set_str(rawtext) *************** *** 176,180 **** i, buf = self._find_offset_in_buf(lno) if i is None \ ! or keysym_type(buf[i]) != right_keysym_type: return None lines_back = string.count(buf[i:], "\n") - 1 --- 176,180 ---- i, buf = self._find_offset_in_buf(lno) if i is None \ ! or keysym_type(buf[i]) != right_keysym_type: return None lines_back = string.count(buf[i:], "\n") - 1 *************** *** 190,192 **** return icis(startindex + "%dc" % offset) return inner - --- 190,191 ---- From kbk@users.sourceforge.net Fri Jul 13 20:57:02 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 12:57:02 -0700 Subject: [Idle-dev] CVS: idle PathBrowser.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv24415 Modified Files: PathBrowser.py Log Message: py-cvs-rel2_1 (Rev 1.6) merge - whitespace normalization Index: PathBrowser.py =================================================================== RCS file: /cvsroot/idlefork/idle/PathBrowser.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** PathBrowser.py 2001/07/04 03:15:10 1.2 --- PathBrowser.py 2001/07/13 19:57:00 1.3 *************** *** 7,11 **** class PathBrowser(ClassBrowser): ! def __init__(self, flist): self.init(flist) --- 7,11 ---- class PathBrowser(ClassBrowser): ! def __init__(self, flist): self.init(flist) From kbk@users.sourceforge.net Fri Jul 13 21:00:17 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 13:00:17 -0700 Subject: [Idle-dev] CVS: idle Percolator.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv24870 Modified Files: Percolator.py Log Message: py-cvs-rel2_1 (Rev 1.3) "move "from Tkinter import *" to module level" --jhylton Index: Percolator.py =================================================================== RCS file: /cvsroot/idlefork/idle/Percolator.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Percolator.py 2001/07/04 03:15:10 1.2 --- Percolator.py 2001/07/13 20:00:15 1.3 *************** *** 64,68 **** print self.name, ": delete", args apply(self.delegate.delete, args) - from Tkinter import * root = Tk() root.wm_protocol("WM_DELETE_WINDOW", root.quit) --- 64,67 ---- *************** *** 83,85 **** --- 82,85 ---- if __name__ == "__main__": + from Tkinter import * main() From kbk@users.sourceforge.net Fri Jul 13 21:33:48 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 13:33:48 -0700 Subject: [Idle-dev] CVS: idle PyParse.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv794 Modified Files: PyParse.py Log Message: py-cvs-rel2_1 (Rev 1.6 - 1.8) merge Fix autoindent bug and deflect Unicode from text.get() Index: PyParse.py =================================================================== RCS file: /cvsroot/idlefork/idle/PyParse.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** PyParse.py 2001/07/04 03:15:10 1.2 --- PyParse.py 2001/07/13 20:33:46 1.3 *************** *** 106,109 **** --- 106,114 ---- del ch + try: + UnicodeType = type(unicode("")) + except NameError: + UnicodeType = None + class Parser: *************** *** 114,117 **** --- 119,135 ---- def set_str(self, str): assert len(str) == 0 or str[-1] == '\n' + if type(str) is UnicodeType: + # The parse functions have no idea what to do with Unicode, so + # replace all Unicode characters with "x". This is "safe" + # so long as the only characters germane to parsing the structure + # of Python are 7-bit ASCII. It's *necessary* because Unicode + # strings don't have a .translate() method that supports + # deletechars. + uniphooey = str + str = [] + push = str.append + for raw in map(ord, uniphooey): + push(raw < 127 and chr(raw) or "x") + str = "".join(str) self.str = str self.study_level = 0 *************** *** 386,396 **** if m: # we skipped at least one boring char ! p = m.end() # back up over totally boring whitespace ! i = p-1 # index of last boring char ! while i >= 0 and str[i] in " \t\n": i = i-1 ! if i >= 0: lastch = str[i] if p >= q: break --- 404,415 ---- if m: # we skipped at least one boring char ! newp = m.end() # back up over totally boring whitespace ! i = newp - 1 # index of last boring char ! while i >= p and str[i] in " \t\n": i = i-1 ! if i >= p: lastch = str[i] + p = newp if p >= q: break From kbk@users.sourceforge.net Sat Jul 14 01:13:31 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 17:13:31 -0700 Subject: [Idle-dev] CVS: idle PyShell.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv25110 Modified Files: PyShell.py Log Message: cvs-py-rel2_1 (Rev 1.29 - 1.33) merge Merged the following py-cvs revs without conflict: 1.29 Reduce copyright text output at startup 1.30 Delay setting sys.args until Tkinter is fully initialized 1.31 Whitespace normalization 1.32 Turn syntax warning into error when interactive 1.33 Fix warning initialization bug Note that module is extensively modified wrt py-cvs Index: PyShell.py =================================================================== RCS file: /cvsroot/idlefork/idle/PyShell.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** PyShell.py 2001/07/04 03:15:10 1.2 --- PyShell.py 2001/07/14 00:13:28 1.3 *************** *** 28,31 **** --- 28,32 ---- import re import protocol + import warnings import linecache *************** *** 147,151 **** "console": cconf.getcolor("console"), "ERROR": cconf.getcolor("ERROR"), ! None: cconf.getcolor("normal"), }) --- 148,152 ---- "console": cconf.getcolor("console"), "ERROR": cconf.getcolor("ERROR"), ! None: cconf.getcolor("normal"), }) *************** *** 179,182 **** --- 180,184 ---- locals = sys.modules['__main__'].__dict__ InteractiveInterpreter.__init__(self, locals=locals) + self.save_warnings_filters = None gid = 0 *************** *** 203,207 **** filename = self.stuffsource(source) self.more = 0 ! return InteractiveInterpreter.runsource(self, source, filename) def stuffsource(self, source): --- 205,216 ---- filename = self.stuffsource(source) self.more = 0 ! self.save_warnings_filters = warnings.filters[:] ! warnings.filterwarnings(action="error", category=SyntaxWarning) ! try: ! return InteractiveInterpreter.runsource(self, source, filename) ! finally: ! if self.save_warnings_filters is not None: ! warnings.filters[:] = self.save_warnings_filters ! self.save_warnings_filters = None def stuffsource(self, source): *************** *** 272,275 **** --- 281,287 ---- def runcode(self, code): # Override base class method + if self.save_warnings_filters is not None: + warnings.filters[:] = self.save_warnings_filters + self.save_warnings_filters = None debugger = self.debugger try: *************** *** 452,459 **** return self.shell_title def begin(self): self.resetoutput() self.write("Python %s on %s\n%s\nIDLE %s -- press F1 for help\n" % ! (sys.version, sys.platform, sys.copyright, idlever.IDLE_VERSION)) try: --- 464,474 ---- return self.shell_title + COPYRIGHT = \ + 'Type "copyright", "credits" or "license" for more information.' + def begin(self): self.resetoutput() self.write("Python %s on %s\n%s\nIDLE %s -- press F1 for help\n" % ! (sys.version, sys.platform, self.COPYRIGHT, idlever.IDLE_VERSION)) try: *************** *** 791,800 **** if noshell: edit=1 - if not edit: - if cmd: - sys.argv = ["-c"] + args - else: - sys.argv = args or [""] - for i in range(len(sys.path)): sys.path[i] = os.path.abspath(sys.path[i]) --- 806,809 ---- *************** *** 814,818 **** global flist, root ! root = Tk() fixwordbreaks(root) root.withdraw() --- 823,827 ---- global flist, root ! root = Tk(className="Idle") fixwordbreaks(root) root.withdraw() *************** *** 824,828 **** if not args: flist.new() ! #dbg=OnDemandOutputWindow(flist) #dbg.set_title('Internal IDLE Problem') --- 833,842 ---- if not args: flist.new() ! else: ! if cmd: ! sys.argv = ["-c"] + args ! else: ! sys.argv = args or [""] ! #dbg=OnDemandOutputWindow(flist) #dbg.set_title('Internal IDLE Problem') From mats@laplaza.org Sat Jul 14 00:34:55 2001 From: mats@laplaza.org (Mats Wichmann) Date: Fri, 13 Jul 2001 17:34:55 -0600 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: References: Message-ID: <5.1.0.14.1.20010713172941.00aec178@laplaza.org> At 01:01 PM 7/13/2001 -0400, Fred L. Drake wrote: >kbk@shore.net (Kurt B. Kaiser) wrote: > > Why not have it installed in Linux by default, also, so > > that Python comes with > > the GUI IDE people seem to expect these days? > > Do Linux users really expect a GUI IDE other than >Emacs/XEmacs? They shouldn't! ;-) We do :-) (some of us, anyway). I'll start another religious war if I give my opinion on Emacs, so let's leave it there. > Seriously, I think it should be installed. I'm not sure >exactly where all the IDLE modules should go (/usr/lib/idle/ >?), but it would be nice. If it could include a .desktop >file for Gnome/KDE, that would be nice as well. I have no problems with my current setup, which is idle installed under site-packages, and one little dummy script in /usr/local/bin which invokes idle correctly when you type "idle" on the command line. So it can go pretty much anywhere. Incidentally, I do the same thing on Solaris and IRIX so this isn't "just a Linux" thing... Mats From kbk@users.sourceforge.net Sat Jul 14 02:14:11 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 18:14:11 -0700 Subject: [Idle-dev] CVS: idle ToolTip.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv7343 Modified Files: ToolTip.py Log Message: py-cvs-rel2_1 (Rev 1.2) merge - whitespace normalization Index: ToolTip.py =================================================================== RCS file: /cvsroot/idlefork/idle/ToolTip.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ToolTip.py 2001/07/04 03:15:10 1.2 --- ToolTip.py 2001/07/14 01:14:09 1.3 *************** *** 82,86 **** root.update() tip = ListboxToolTip(b, ["Hello", "world"]) ! # root.mainloop() # not in idle --- 82,86 ---- root.update() tip = ListboxToolTip(b, ["Hello", "world"]) ! # root.mainloop() # not in idle From kbk@users.sourceforge.net Sat Jul 14 02:16:58 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 18:16:58 -0700 Subject: [Idle-dev] CVS: idle StackViewer.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv7865 Modified Files: StackViewer.py Log Message: py-cvs-rel2_1 (Rev 1.15) merge - whitespace normalization Index: StackViewer.py =================================================================== RCS file: /cvsroot/idlefork/idle/StackViewer.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** StackViewer.py 2001/07/04 03:15:10 1.2 --- StackViewer.py 2001/07/14 01:16:56 1.3 *************** *** 101,105 **** sublist.append(item) return sublist ! def get_stack(t=None, f=None): if t is None: --- 101,105 ---- sublist.append(item) return sublist ! def get_stack(t=None, f=None): if t is None: From kbk@users.sourceforge.net Sat Jul 14 02:20:07 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 18:20:07 -0700 Subject: [Idle-dev] CVS: idle Separator.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv8540 Modified Files: Separator.py Log Message: py-cvs-rel2_1 (Rev 1.3) merge - whitespace normalization Index: Separator.py =================================================================== RCS file: /cvsroot/idlefork/idle/Separator.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** Separator.py 2001/07/04 03:15:10 1.2 --- Separator.py 2001/07/14 01:20:05 1.3 *************** *** 2,6 **** class Separator: ! def __init__(self, master, orient, min=10, thickness=5, bg=None): self.min = max(1, min) --- 2,6 ---- class Separator: ! def __init__(self, master, orient, min=10, thickness=5, bg=None): self.min = max(1, min) *************** *** 11,22 **** self.dir = "x" self.cursor = "sb_h_double_arrow" ! elif orient in ("v", "vertical"): ! self.side = "top" ! self.dim = "height" ! self.dir = "y" self.cursor = "sb_v_double_arrow" ! else: ! raise ValueError, "Separator: orient should be h or v" ! self.winfo_dim = "winfo_" + self.dim self.master = master = Frame(master) master.pack(expand=1, fill="both") --- 11,22 ---- self.dir = "x" self.cursor = "sb_h_double_arrow" ! elif orient in ("v", "vertical"): ! self.side = "top" ! self.dim = "height" ! self.dir = "y" self.cursor = "sb_v_double_arrow" ! else: ! raise ValueError, "Separator: orient should be h or v" ! self.winfo_dim = "winfo_" + self.dim self.master = master = Frame(master) master.pack(expand=1, fill="both") From kbk@users.sourceforge.net Sat Jul 14 02:23:32 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 18:23:32 -0700 Subject: [Idle-dev] CVS: idle ScrolledList.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv9177 Modified Files: ScrolledList.py Log Message: py-cvs-rel2_1 (rev 1.5) merge - whitespace normalization Index: ScrolledList.py =================================================================== RCS file: /cvsroot/idlefork/idle/ScrolledList.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ScrolledList.py 2001/07/04 03:15:10 1.2 --- ScrolledList.py 2001/07/14 01:23:30 1.3 *************** *** 2,6 **** class ScrolledList: ! default = "(None)" --- 2,6 ---- class ScrolledList: ! default = "(None)" From fdrake@acm.org Sat Jul 14 02:29:22 2001 From: fdrake@acm.org (Fred L. Drake, Jr.) Date: Fri, 13 Jul 2001 21:29:22 -0400 (EDT) Subject: [Idle-dev] CVS: idle BrowserControl.py,1.1.3.1,1.2 In-Reply-To: <5.1.0.14.1.20010713172941.00aec178@laplaza.org> References: <5.1.0.14.1.20010713172941.00aec178@laplaza.org> Message-ID: <15183.41074.541593.346225@cj42289-a.reston1.va.home.com> Mats Wichmann writes: > We do :-) (some of us, anyway). I'll start another religious > war if I give my opinion on Emacs, so let's leave it there. I was being a little facetious there... I definately like the little GNU's head button on my KDE panel to launch XEmacs! GUI's are important. ;-) > I have no problems with my current setup, which is idle installed > under site-packages, and one little dummy script in /usr/local/bin So we just need "make install" to run Tools/idle/setup.py with the freshly installed Python! -Fred -- Fred L. Drake, Jr. PythonLabs at Digital Creations From kbk@users.sourceforge.net Sat Jul 14 02:58:13 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 18:58:13 -0700 Subject: [Idle-dev] CVS: idle/Icons minusnode.gif,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle/Icons In directory usw-pr-cvs1:/tmp/cvs-serv15595 Modified Files: minusnode.gif Log Message: py-cvs-rel2_1 (Rev 1.2) merge Copied py-cvs 1.2 changed file to idlefork MAIN Index: minusnode.gif =================================================================== RCS file: /cvsroot/idlefork/idle/Icons/minusnode.gif,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 Binary files /tmp/cvsPkDx6d and /tmp/cvsEAI2Sh differ From kbk@users.sourceforge.net Sat Jul 14 03:02:39 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 19:02:39 -0700 Subject: [Idle-dev] CVS: idle/Icons python.gif,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle/Icons In directory usw-pr-cvs1:/tmp/cvs-serv16602 Modified Files: python.gif Log Message: py-cvs-rel2_1 (Rev 1.2) merge Copied py-cvs rev 1.2 changed file to idlefork MAIN Index: python.gif =================================================================== RCS file: /cvsroot/idlefork/idle/Icons/python.gif,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 Binary files /tmp/cvsj0SBgg and /tmp/cvsinT6km differ From kbk@shore.net Sat Jul 14 03:52:55 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 13 Jul 2001 22:52:55 -0400 Subject: [Idle-dev] Py-CVS Release 2.1 Merge Message-ID: I believe the Release 2.1 Merge is completed, though not tested. The idlefork repository has been tagged: py-cvs-rel2_1-merged KBK From kbk@users.sourceforge.net Sat Jul 14 04:32:08 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 20:32:08 -0700 Subject: [Idle-dev] CVS: idle - Imported sources Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv27072 Log Message: Import the 2001 July 13 23:59 GMT version of Python CVS IDLE on the existing 1.1.3 vendor branch named py-cvs-vendor-branch. Release tag is py-cvs-2001_07_13. Status: Vendor Tag: py-cvs-vendor-branch Release Tags: py-cvs-2001_07_13 U idle/AutoExpand.py U idle/AutoIndent.py U idle/Bindings.py U idle/CallTipWindow.py U idle/CallTips.py U idle/ChangeLog U idle/ClassBrowser.py U idle/ColorDelegator.py U idle/Debugger.py U idle/Delegator.py C idle/EditorWindow.py C idle/FileList.py U idle/FormatParagraph.py U idle/FrameViewer.py U idle/GrepDialog.py U idle/IOBinding.py C idle/IdleConf.py U idle/IdleHistory.py U idle/MultiScrolledLists.py U idle/MultiStatusBar.py U idle/NEWS.txt U idle/ObjectBrowser.py U idle/OldStackViewer.py U idle/OutputWindow.py U idle/ParenMatch.py U idle/PathBrowser.py U idle/Percolator.py C idle/PyParse.py C idle/PyShell.py U idle/README.txt U idle/RemoteInterp.py U idle/ReplaceDialog.py U idle/ScriptBinding.py U idle/ScrolledList.py U idle/SearchBinding.py U idle/SearchDialog.py U idle/SearchDialogBase.py U idle/SearchEngine.py U idle/Separator.py C idle/StackViewer.py U idle/TODO.txt U idle/ToolTip.py U idle/TreeWidget.py U idle/UndoDelegator.py U idle/WidgetRedirector.py U idle/WindowList.py U idle/ZoomHeight.py U idle/__init__.py U idle/config-unix.txt U idle/config-win.txt U idle/config.txt U idle/eventparse.py C idle/extend.txt U idle/help.txt U idle/idle U idle/idle.bat C idle/idle.py U idle/idle.pyw U idle/idlever.py C idle/keydefs.py U idle/setup.py U idle/testcode.py U idle/Icons/folder.gif U idle/Icons/minusnode.gif U idle/Icons/openfolder.gif U idle/Icons/plusnode.gif U idle/Icons/python.gif U idle/Icons/tk.gif 9 conflicts created by this import. Use the following command to help the merge: cvs checkout -jpy-cvs-vendor-branch:yesterday -jpy-cvs-vendor-branch idle ***** Bogus filespec: - ***** Bogus filespec: Imported ***** Bogus filespec: sources From kbk@users.sourceforge.net Sat Jul 14 04:58:27 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 20:58:27 -0700 Subject: [Idle-dev] CVS: idle EditorWindow.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv30288 Modified Files: EditorWindow.py Log Message: py-cvs-2000_07_13 (Rev 1.38) merge "Remove legacy support for the BrowserControl module; the webbrowser module has been included since Python 2.0, and that is the preferred interface." --fdrake Index: EditorWindow.py =================================================================== RCS file: /cvsroot/idlefork/idle/EditorWindow.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** EditorWindow.py 2001/07/13 03:35:32 1.3 --- EditorWindow.py 2001/07/14 03:58:25 1.4 *************** *** 13,22 **** import tkSimpleDialog import tkMessageBox ! try: ! import webbrowser ! except ImportError: ! import BrowserControl ! webbrowser = BrowserControl ! del BrowserControl import idlever import WindowList --- 13,18 ---- import tkSimpleDialog import tkMessageBox ! ! import webbrowser import idlever import WindowList *************** *** 314,318 **** if sys.platform[:3] == "win": fn = os.path.dirname(__file__) ! fn = os.path.join(fn, "../../Doc/index.html") fn = os.path.normpath(fn) if os.path.isfile(fn): --- 310,314 ---- if sys.platform[:3] == "win": fn = os.path.dirname(__file__) ! fn = os.path.join(fn, os.pardir, os.pardir, "Doc", "index.html") fn = os.path.normpath(fn) if os.path.isfile(fn): From StephenM.Gava Sat Jul 14 02:59:38 2001 From: StephenM.Gava (StephenM.Gava) Date: Sat, 14 Jul 2001 11:59:38 +1000 Subject: [Idle-dev] idlefork - py-cvs merge 1 Message-ID: <01071411473401.00304@oberon> Kurt, I notice from the flurry of recent cvs commits that greeted me this morning that you reached PyShell.py, the place where I had stopped, so, the first merge has visited the whole tree now! You are a gentelman and a scholar, and a legend in my own lunchtime (which it is right now). Now we should try to beat the merged tree into shape to do a first alpha release tarball of idlefork as it stands, to mark the beginning of "the new idlefork era". 8^) I've already started on a rough checklist of things we should do before we can tag for this release. -- Stephen M. Gava "More power to those who don't care for it." - anon From kbk@users.sourceforge.net Sat Jul 14 05:45:34 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 21:45:34 -0700 Subject: [Idle-dev] CVS: idle FileList.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv3540 Modified Files: FileList.py Log Message: py-cvs-2000_07_13 (Rev 1.9) merge "Delete goodname() method, which is unused. Add gotofileline(), a convenience method which I intend to use in a variant. Rename test() to _test()." --GvR This was an interesting merge. The join completely missed removing goodname(), which was adjacent, but outside of, a small conflict. I only caught it by comparing the 1.1.3.2/1.1.3.3 diff. CVS ain't infallible. Index: FileList.py =================================================================== RCS file: /cvsroot/idlefork/idle/FileList.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** FileList.py 2001/07/13 04:07:47 1.3 --- FileList.py 2001/07/14 04:45:32 1.4 *************** *** 30,42 **** self.vars = {} # For EditorWindow.getrawvar (shared Tcl variables) - - def goodname(self, filename): - filename = self.canonize(filename) - key = os.path.normcase(filename) - if self.dict.has_key(key): - edit = self.dict[key] - filename = edit.io.filename or filename - return filename - def open(self, filename, action=None): assert filename --- 30,33 ---- *************** *** 63,66 **** --- 54,62 ---- return action(filename) + def gotofileline(self, filename, lineno=None): + edit = self.open(filename) + if edit is not None and lineno is not None: + edit.gotoline(lineno) + def new(self): return self.EditorWindow(self) *************** *** 132,136 **** ! def test(): from EditorWindow import fixwordbreaks import sys --- 128,132 ---- ! def _test(): from EditorWindow import fixwordbreaks import sys *************** *** 148,150 **** if __name__ == '__main__': ! test() --- 144,146 ---- if __name__ == '__main__': ! _test() From kbk@users.sourceforge.net Sat Jul 14 05:51:09 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 21:51:09 -0700 Subject: [Idle-dev] CVS: idle IdleConf.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv4424 Modified Files: IdleConf.py Log Message: py-cvs-2001_07_13 (Rel 1.7) merge "Move the action of loading the configuration to the IdleConf module rather than the idle.py script. This has advantages and disadvantages; the biggest advantage being that we can more easily have an alternative main program." --GvR Index: IdleConf.py =================================================================== RCS file: /cvsroot/idlefork/idle/IdleConf.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** IdleConf.py 2001/07/13 17:38:08 1.3 --- IdleConf.py 2001/07/14 04:51:06 1.4 *************** *** 111,112 **** --- 111,113 ---- idleconf = IdleConfParser() + load(os.path.dirname(__file__)) From kbk@users.sourceforge.net Sat Jul 14 05:59:26 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 21:59:26 -0700 Subject: [Idle-dev] CVS: idle PyParse.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv5252 Modified Files: PyParse.py Log Message: py-cvs-2001_07_13 (Rel 1.9) merge "Taught IDLE's autoident parser that "yield" is a keyword that begins a stmt. Along w/ the preceding change to keyword.py, making all this work w/ a future-stmt just looks harder and harder." --tim_one (From Rel 1.8: "Hack to make this still work with Python 1.5.2. ;-( " --fdrake) Index: PyParse.py =================================================================== RCS file: /cvsroot/idlefork/idle/PyParse.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** PyParse.py 2001/07/13 20:33:46 1.3 --- PyParse.py 2001/07/14 04:59:24 1.4 *************** *** 30,33 **** --- 30,34 ---- | raise | import + | yield ) \b From kbk@shore.net Sat Jul 14 06:04:35 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 14 Jul 2001 01:04:35 -0400 Subject: [Idle-dev] PyParse In-Reply-To: References: Message-ID: "Kurt B. Kaiser" writes: > Update of /cvsroot/idlefork/idle > In directory usw-pr-cvs1:/tmp/cvs-serv5252 > > Modified Files: > PyParse.py > Log Message: > py-cvs-2001_07_13 (Rel 1.9) merge > > "Taught IDLE's autoident parser that "yield" is a keyword that begins a > stmt. Along w/ the preceding change to keyword.py, making all this > work w/ a future-stmt just looks harder and harder." --tim_one > > (From Rel 1.8: "Hack to make this still work with Python 1.5.2. ;-( " > --fdrake) > So there is clearly 1.5.2 compatibility code remaining... KBK From kbk@users.sourceforge.net Sat Jul 14 06:10:37 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 22:10:37 -0700 Subject: [Idle-dev] CVS: idle PyShell.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv6665 Modified Files: PyShell.py Log Message: py-cvs-2001_07_13 (Rev 1.34) merge "Amazing. A very subtle change in policy in descr-branch actually found a bug here. Here's the deal: Class PyShell derives from class OutputWindow. Method PyShell.close() wants to invoke its parent method, but because PyShell long ago was inherited from class PyShellEditorWindow, it invokes PyShelEditorWindow.close(self). Now, class PyShellEditorWindow itself derives from class OutputWindow, and inherits the close() method from there without overriding it. Under the old rules, PyShellEditorWindow.close would return an unbound method restricted to the class that defined the implementation of close(), which was OutputWindow.close. Under the new rules, the unbound method is restricted to the class whose method was requested, that is PyShellEditorWindow, and this was correctly trapped as an error." --GvR Index: PyShell.py =================================================================== RCS file: /cvsroot/idlefork/idle/PyShell.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** PyShell.py 2001/07/14 00:13:28 1.3 --- PyShell.py 2001/07/14 05:10:34 1.4 *************** *** 441,445 **** self.top.quit() return "cancel" ! return PyShellEditorWindow.close(self) def _close(self): --- 441,445 ---- self.top.quit() return "cancel" ! return OutputWindow.close(self) def _close(self): From kbk@users.sourceforge.net Sat Jul 14 06:15:31 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 22:15:31 -0700 Subject: [Idle-dev] CVS: idle StackViewer.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv7142 Modified Files: StackViewer.py Log Message: py-cvs-2001_07_13 (Rev 1.16) merge "Refactored, with some future plans in mind. This now uses the new gotofileline() method defined in FileList.py" --GvR Index: StackViewer.py =================================================================== RCS file: /cvsroot/idlefork/idle/StackViewer.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** StackViewer.py 2001/07/14 01:16:56 1.3 --- StackViewer.py 2001/07/14 05:15:29 1.4 *************** *** 1,4 **** import string - from Tkinter import * import linecache --- 1,5 ---- + import os + import sys import string import linecache *************** *** 7,15 **** from OldStackViewer import StackViewer, NamespaceViewer ! def StackBrowser(root, flist=None, stack=None): ! top = Toplevel(root) sc = ScrolledCanvas(top, bg="white", highlightthickness=0) sc.frame.pack(expand=1, fill="both") ! item = StackTreeItem(flist) node = TreeNode(sc.canvas, None, item) node.expand() --- 8,18 ---- from OldStackViewer import StackViewer, NamespaceViewer ! def StackBrowser(root, flist=None, tb=None, top=None): ! if top is None: ! from Tkinter import Toplevel ! top = Toplevel(root) sc = ScrolledCanvas(top, bg="white", highlightthickness=0) sc.frame.pack(expand=1, fill="both") ! item = StackTreeItem(flist, tb) node = TreeNode(sc.canvas, None, item) node.expand() *************** *** 17,23 **** class StackTreeItem(TreeItem): ! def __init__(self, flist=None): self.flist = flist ! self.stack = get_stack() self.text = get_exception() --- 20,26 ---- class StackTreeItem(TreeItem): ! def __init__(self, flist=None, tb=None): self.flist = flist ! self.stack = get_stack(tb) self.text = get_exception() *************** *** 72,77 **** frame, lineno = self.info filename = frame.f_code.co_filename ! edit = self.flist.open(filename) ! edit.gotoline(lineno) class VariablesTreeItem(ObjectTreeItem): --- 75,80 ---- frame, lineno = self.info filename = frame.f_code.co_filename ! if os.path.isfile(filename): ! self.flist.gotofileline(filename, lineno) class VariablesTreeItem(ObjectTreeItem): *************** *** 130,135 **** return s ! if __name__ == "__main__": root = Tk() ! root.withdraw() ! StackBrowser(root) --- 133,147 ---- return s ! def _test(): ! try: ! import testcode ! reload(testcode) ! except: ! sys.last_type, sys.last_value, sys.last_traceback = sys.exc_info() ! from Tkinter import Tk root = Tk() ! StackBrowser(None, top=root) ! root.mainloop() ! ! if __name__ == "__main__": ! _test() From kbk@users.sourceforge.net Sat Jul 14 06:19:02 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 22:19:02 -0700 Subject: [Idle-dev] CVS: idle extend.txt,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv7385 Modified Files: extend.txt Log Message: py-cvs-2001_07_13 (Rev 1.4) merge "Quick update to the extension mechanism (extend.py is gone, long live config.txt)" --GvR Index: extend.txt =================================================================== RCS file: /cvsroot/idlefork/idle/extend.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** extend.txt 2001/07/04 03:15:10 1.2 --- extend.txt 2001/07/14 05:18:59 1.3 *************** *** 8,12 **** The list of extensions loaded at startup time is configured by editing ! the file extend.py; see below for details. An IDLE extension is defined by a class. Methods of the class define --- 8,12 ---- The list of extensions loaded at startup time is configured by editing ! the file config.txt; see below for details. An IDLE extension is defined by a class. Methods of the class define *************** *** 87,95 **** "...Do what you want here..." ! The final piece of the puzzle is the file "extend.py", which contains a ! simple table used to configure the loading of extensions. This file ! currently contains a single list variable named "standard", which is a ! list of extension names that are to be loaded. (In the future, other ! configuration variables may be added to this module.) Extensions can define key bindings and menu entries that reference --- 87,109 ---- "...Do what you want here..." ! The final piece of the puzzle is the file "config.txt", which is used ! to to configure the loading of extensions. For each extension, ! you must include a section in config.txt (or in any of the other ! configuration files that are consulted at startup: config-unix.txt, ! config-win.txt, or ~/.idle). A section is headed by the module name ! in square brackets, e.g. ! ! [ZoomHeight] ! ! The section may be empty, or it may define configuration options for ! the extension. (See ParenMatch.py for an example.) A special option ! is 'enable': including ! ! enable = 0 ! ! in a section disables that extension. More than one configuration ! file may specify options for the same extension, so a user may disable ! an extension that is loaded by default, or enable an extension that is ! disabled by default. Extensions can define key bindings and menu entries that reference From kbk@users.sourceforge.net Sat Jul 14 06:21:40 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 22:21:40 -0700 Subject: [Idle-dev] CVS: idle idle.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv7727 Modified Files: idle.py Log Message: py-cvs-2001_07_13 (Rev 1.4) merge "Move the action of loading the configuration to the IdleConf module rather than the idle.py script. This has advantages and disadvantages; the biggest advantage being that we can more easily have an alternative main program." --GvR Index: idle.py =================================================================== RCS file: /cvsroot/idlefork/idle/idle.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** idle.py 2001/07/12 04:51:11 1.3 --- idle.py 2001/07/14 05:21:37 1.4 *************** *** 1,12 **** #! /usr/bin/env python - import os - import sys - import IdleConf - - idle_dir = os.path.dirname(IdleConf.__file__) - IdleConf.load(idle_dir) - - # defer importing Pyshell until IdleConf is loaded import PyShell PyShell.main() --- 1,4 ---- From kbk@users.sourceforge.net Sat Jul 14 06:26:26 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 22:26:26 -0700 Subject: [Idle-dev] CVS: idle keydefs.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv8216 Modified Files: keydefs.py Log Message: py-cvs-2001_07_13 (Rev 1.3) merge "Make copy, cut and paste events case insensitive. Reported by Patrick K. O'Brien on idle-dev. (Should other bindings follow suit?)" --GvR Index: keydefs.py =================================================================== RCS file: /cvsroot/idlefork/idle/keydefs.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** keydefs.py 2001/07/04 03:15:10 1.2 --- keydefs.py 2001/07/14 05:26:23 1.3 *************** *** 1,6 **** windows_keydefs = \ ! {'<>': [''], ! '<>': [''], ! '<>': [''], '<>': ['', ''], '<>': [''], --- 1,6 ---- windows_keydefs = \ ! {'<>': ['', ''], ! '<>': ['', ''], ! '<>': ['', ''], '<>': ['', ''], '<>': [''], From kbk@users.sourceforge.net Sat Jul 14 06:48:46 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Fri, 13 Jul 2001 22:48:46 -0700 Subject: [Idle-dev] CVS: idle setup.py,1.2,1.3 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv10788 Modified Files: setup.py Log Message: Installing Idle to site-packages via Distutils does not copy the Idle help.txt file. Ref SF Python Patch 422471 Index: setup.py =================================================================== RCS file: /cvsroot/idlefork/idle/setup.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** setup.py 2001/07/04 03:15:10 1.2 --- setup.py 2001/07/14 05:48:44 1.3 *************** *** 9,13 **** # the normal build_py would not incorporate the .txt files ! txt_files = ['config-unix.txt','config-win.txt','config.txt'] Icons = glob.glob1("Icons","*.gif") class idle_build_py(build_py): --- 9,13 ---- # the normal build_py would not incorporate the .txt files ! txt_files = ['config-unix.txt','config-win.txt','config.txt', 'help.txt'] Icons = glob.glob1("Icons","*.gif") class idle_build_py(build_py): From kbk@shore.net Sat Jul 14 06:52:07 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 14 Jul 2001 01:52:07 -0400 Subject: [Idle-dev] Merge of 2001 July 13 Python CVS IDLE Completed Message-ID: Merged 2001 July 13 23:59 GMT Version of Python CVS IDLE The repository is tagged py-cvs-2001-07_13 Nine files changed, see the "C" marks in the import posting. KBK From kbk@shore.net Sat Jul 14 07:06:27 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 14 Jul 2001 02:06:27 -0400 Subject: [Idle-dev] Correct Tag In-Reply-To: References: Message-ID: kbk@shore.net (Kurt B. Kaiser) writes: > > The repository is tagged py-cvs-2001-07_13 Humph. py-cvs-2001_07_13 KBK From guido@digicool.com Sat Jul 14 15:45:50 2001 From: guido@digicool.com (Guido van Rossum) Date: Sat, 14 Jul 2001 10:45:50 -0400 Subject: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: Your message of "13 Jul 2001 22:52:55 EDT." References: Message-ID: <200107141445.f6EEjoD17454@odiug.digicool.com> > I believe the Release 2.1 Merge is completed, though not tested. > > The idlefork repository has been tagged: py-cvs-rel2_1-merged When I start it now, I get an "untitled" editing window instead of the Python Shell window. I can get the Shell window via the Windows menu, but the editing window is kind of uninviting. Is this a feature? I want my shell back! :-) --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@users.sourceforge.net Sat Jul 14 17:29:48 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Sat, 14 Jul 2001 09:29:48 -0700 Subject: [Idle-dev] CVS: idle BrowserControl.py,1.2,NONE Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv10274 Removed Files: BrowserControl.py Log Message: Remove, was retained for 1.5.2 support --- BrowserControl.py DELETED --- From kbk@users.sourceforge.net Sat Jul 14 18:06:15 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Sat, 14 Jul 2001 10:06:15 -0700 Subject: [Idle-dev] CVS: idle tabnanny.py,1.2,NONE pyclbr.py,1.2,NONE Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv15956 Removed Files: tabnanny.py pyclbr.py Log Message: tabnanny and pyclbr are now found in /Lib --- tabnanny.py DELETED --- --- pyclbr.py DELETED --- From kbk@shore.net Sat Jul 14 18:28:43 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 14 Jul 2001 13:28:43 -0400 Subject: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: <200107141445.f6EEjoD17454@odiug.digicool.com> References: <200107141445.f6EEjoD17454@odiug.digicool.com> Message-ID: Guido van Rossum writes: > When I start it now, I get an "untitled" editing window instead of the > Python Shell window. I can get the Shell window via the Windows menu, > but the editing window is kind of uninviting. Is this a feature? I > want my shell back! :-) After installing to site-packages, I'm seeing an error related to loader.py when I start up. That may be why the shell doesn't come up. Yes, the shell should come up automatically! It's where a beginner starts. I gotta go work on the boat a bit before it rains. Regards, KBK From dscherer@vysics.com Sat Jul 14 21:51:28 2001 From: dscherer@vysics.com (David Scherer) Date: Sat, 14 Jul 2001 16:51:28 -0400 Subject: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: <200107141445.f6EEjoD17454@odiug.digicool.com> Message-ID: <000401c10ca6$c334dad0$8101a8c0@RABBIT> There should be two separate ways (e.g. two separate start menu icons on Windows) to start the editor and the shell. I believe there is already a way to start in shell mode using different command line arguments. The VPython idle starts in editor mode by default because the shell mode does not provide remote execution (which is essential for us) and because Bruce and Ruth were not interested in the shell as a pedagogical tool*. Dave * Because of the irreversibility of actions: unlike in an editor, "undo" doesn't, and correcting a mistake can sometimes be impossible. The "responsiveness" of a shell, on the other hand, is very nice for learning, so we tried to get as much of that as possible into the editing environment (e.g. with single-key run). The preferred use of the editor is then to re-run the program after every few lines of code! > -----Original Message----- > From: idle-dev-admin@python.org > [mailto:idle-dev-admin@python.org] On Behalf Of Guido van Rossum > Sent: Saturday, July 14, 2001 10:46 AM > To: Kurt B. Kaiser > Cc: idle-dev@python.org > Subject: Re: [Idle-dev] Py-CVS Release 2.1 Merge > > > > I believe the Release 2.1 Merge is completed, though not tested. > > > > The idlefork repository has been tagged: py-cvs-rel2_1-merged > > When I start it now, I get an "untitled" editing window > instead of the Python Shell window. I can get the Shell > window via the Windows menu, but the editing window is kind > of uninviting. Is this a feature? I want my shell back! :-) > > --Guido van Rossum (home page: http://www.python.org/~guido/) > > _______________________________________________ > IDLE-dev mailing list > IDLE-dev@python.org http://mail.python.org/mailman/listinfo/idle-dev > From kbk@shore.net Sat Jul 14 23:35:58 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 14 Jul 2001 18:35:58 -0400 Subject: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: References: <200107141445.f6EEjoD17454@odiug.digicool.com> Message-ID: kbk@shore.net (Kurt B. Kaiser) writes: > Guido van Rossum writes: > > When I start it now, I get an "untitled" editing window instead of the > > Python Shell window. I can get the Shell window via the Windows menu, > > but the editing window is kind of uninviting. Is this a feature? I > > want my shell back! :-) > > After installing to site-packages, I'm seeing an error related to loader.py > when I start up. That may be why the shell doesn't come up. > > Yes, the shell should come up automatically! It's where a beginner starts. > 1. The error related to loader.py was because imp.find_modules couldn't find the idle files from an arbitrary location. I fixed that by putting a file named site-packages.pth in the site-packages directory, its contents are idlelib fidlelib I have idle and fidle (it's easy to type f's in front of things ;) co-existing. What is the story on site-packages? Should all systems have a file like the one I set up, which could be appended as packages are installed? 2. The shell not coming up is a feature. To quote Scherer in PyShell, "Default behavior (no command line options) is to NOT start the Python Shell. If files are specified, they are opened, otherwise a single blank editor window opens." So start up with fidle -t "Guido's Shell" & and you're all set. I don't know why Dave chose this behavior, maybe he's listening. Regards, KBK From kbk@shore.net Sat Jul 14 23:45:00 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 14 Jul 2001 18:45:00 -0400 Subject: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: <000401c10ca6$c334dad0$8101a8c0@RABBIT> References: <000401c10ca6$c334dad0$8101a8c0@RABBIT> Message-ID: "David Scherer" writes: > There should be two separate ways (e.g. two separate start menu icons on > Windows) to start the editor and the shell. I believe there is already > a way to start in shell mode using different command line arguments. > > The VPython idle starts in editor mode by default because the shell mode > does not provide remote execution (which is essential for us) and > because Bruce and Ruth were not interested in the shell as a pedagogical > tool*. > > Dave > > * Because of the irreversibility of actions: unlike in an editor, "undo" > doesn't, and correcting a mistake can sometimes be impossible. The > "responsiveness" of a shell, on the other hand, is very nice for > learning, so we tried to get as much of that as possible into the > editing environment (e.g. with single-key run). The preferred use of > the editor is then to re-run the program after every few lines of code! > Well, I should have checked my mail! He certainly is listening! (Hi there!) So I guess a script fidleshell with the contents of my previous message for all the traditionalists, while the kids try the run button :) Regards, KBK Time for shishkebab....cu From bas@andrew.cmu.edu Sun Jul 15 01:26:58 2001 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Sat, 14 Jul 2001 20:26:58 -0400 Subject: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: <000401c10ca6$c334dad0$8101a8c0@RABBIT> Message-ID: <3004973344.995142418@HYPERON.REM.CMU.EDU> Dave has said it very well. I can only add a vote and a testimonial based on my own experience and that of about a hundred college freshmen pounding on VPython with Dave's Idle this past year. These were students who had never used Python nor Visual (Dave's 3D module), and a sizable minority had never written a program before. The behavior of this Idle, implemented by Dave Scherer with heavy design participation by the VPython group, is quite wonderful. Let me say immediately that as he says, there should certainly also be a shell for those who find it useful. In this regard I recently rectified a mistake and changed the VPython installation for Windows to leave the standard Idle in place, with its regular Start Menu icon, and simply added additional icons on the Start Menu and the desktop for invoking the editor. It is possible that the shell has been popular because it provided significantly higher interactivity than the editor did. But as Dave hints, this is in large part because the original Idle editor made the edit/run/edit cycle quite cumbersome. As I remember it, the cycle went something like this: When you tried to run, you got a dialog box telling you to save the program. You had to click to get rid of the dialog box. Then you had to save the program. Then you could run. It was a lot of keypresses. In the new editor environment, you press F5 and you're running! It's comparable to pressing ENTER in the shell. There is an automatic save just before the run, so even when we suffered some crashes in the classroom, students didn't lose work. (The crashes turned out to be cured by updating the video driver -- nothing to do with Python or Visual.) And you can leave the 3D window open while you change your code, then press F5, which kills the previous run windows and restarts. Etc. It is hard to list all the many little details that work exceedingly well, and well together. One other example: You can leave the scrolling print output window up, and each time you run there's a new header, so that it is easy to paw back through output to the top of a run. The interactivity is very high, probably even higher than in the shell. When I was learning Python and learning Visual, I found the fast edit/run cycle much more supportive than trying to work in the shell. When I edit, it is easy to change an early line in the program, press F5, and see what happens. I found it very difficult to do that kind of exploration in the shell. I gather than experts can use the shell to very good effect, but I'm convinced from my own experience and that of our many students that an editor is much preferable, at least initially (not that I personally now see any reason to become expert in using the shell, though). I also found it quite opaque getting a mental model of what modules were loaded or not, whereas this is all completely transparent in the editor environment. I understand that Guido is uncomfortable with automatic saves. But they work marvelously for the novice, and the expert once told can decide to save a copy somewhere at appropriate times. Also note that during a session there is unlimited undo. The automatic save NEVER caused our students problems, neither operational nor functional. Rather it made a major complication of programming something that just worked as expected and vanished into the woodwork. Our students could focus on the task rather than on the mechanics. It would be interesting if someone who feels very productive in the shell could spend some time in the new editor and report what operations, if any, they find are poorly supported in the editor compared with the shell. Bruce > --On Saturday, July 14, 2001 16:51 -0400 David Scherer > wrote: > > There should be two separate ways (e.g. two separate start menu icons on > Windows) to start the editor and the shell. I believe there is already > a way to start in shell mode using different command line arguments. > > The VPython idle starts in editor mode by default because the shell mode > does not provide remote execution (which is essential for us) and > because Bruce and Ruth were not interested in the shell as a pedagogical > tool*. > > Dave > > * Because of the irreversibility of actions: unlike in an editor, "undo" > doesn't, and correcting a mistake can sometimes be impossible. The > "responsiveness" of a shell, on the other hand, is very nice for > learning, so we tried to get as much of that as possible into the > editing environment (e.g. with single-key run). The preferred use of > the editor is then to re-run the program after every few lines of code! From bas@andrew.cmu.edu Sun Jul 15 02:03:23 2001 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Sat, 14 Jul 2001 21:03:23 -0400 Subject: [Idle-dev] Research on shell vs. editor Message-ID: <3007158394.995144603@HYPERON.REM.CMU.EDU> Ruth Chabay reminds me that Sharon Carver at Carnegie Mellon did a study on young kids using LOGO in the classroom which bears on the issue of shell vs. editor. She found that the kids were NOT writing programs, they were just issuing direct commands in a shell to the "turtle" to move on the screen (turn right; turn left; etc.). She found that the kids never did acquire a real sense of a program or an algorithm. There is a huge learning value in having the whole program in front of you, recording exactly what led to the results of the most recent run, as opposed to trying to disentangle the history of shell manipulations. Again, this is not to imply that experts shouldn't have a shell option available if they find it useful. It is a further plea that for the (what we hope to be a much larger number of) nonexperts a highly interactive editor is vastly preferable. Bruce From guido@digicool.com Sun Jul 15 02:20:01 2001 From: guido@digicool.com (Guido van Rossum) Date: Sat, 14 Jul 2001 21:20:01 -0400 Subject: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: Your message of "Sat, 14 Jul 2001 16:51:28 EDT." <000401c10ca6$c334dad0$8101a8c0@RABBIT> References: <000401c10ca6$c334dad0$8101a8c0@RABBIT> Message-ID: <200107150120.VAA23717@cj20424-a.reston1.va.home.com> > There should be two separate ways (e.g. two separate start menu icons on > Windows) to start the editor and the shell. I believe there is already > a way to start in shell mode using different command line arguments. Good point. The command line interface could be better. E.g. right now when given a file it runs that file, which is almost never what you want I believe. I also would like to see Windows specific hacks that make it possible to invoke IDLE as the editor by right-clicking any .py or .pyw file and selecting "Edit File" from the context menu, even if IDLE already runs. This may only work when the win32all extensions are loaded. > The VPython idle starts in editor mode by default because the shell mode > does not provide remote execution (which is essential for us) and > because Bruce and Ruth were not interested in the shell as a pedagogical > tool*. When the goal is learning Python (rather than physics), I find the shell the best tool there is. > Dave > > * Because of the irreversibility of actions: unlike in an editor, "undo" > doesn't, and correcting a mistake can sometimes be impossible. The > "responsiveness" of a shell, on the other hand, is very nice for > learning, so we tried to get as much of that as possible into the > editing environment (e.g. with single-key run). The preferred use of > the editor is then to re-run the program after every few lines of code! TeachScheme has an interesting mode that I like. Whenever you run a script, the "shell" environment is created afresh, and the shell can then be used to inspect effects of the script. The whole interface for running scripts needs to be changed; I'd like to see a one-key binding that pops up a dialog where you can specify - whether to use debug mode - command line arguments Pythonwin has this (plus an option to suppress the dialog and use last time's defaults). --Guido van Rossum (home page: http://www.python.org/~guido/) From bas@andrew.cmu.edu Sun Jul 15 03:00:53 2001 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Sat, 14 Jul 2001 22:00:53 -0400 Subject: [Visualpython-devel] Re: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: <200107150120.VAA23717@cj20424-a.reston1.va.home.com> Message-ID: <3010608314.995148053@HYPERON.REM.CMU.EDU> > I also would like to see Windows specific hacks that make it possible > to invoke IDLE as the editor by right-clicking any .py or .pyw file > and selecting "Edit File" from the context menu, even if IDLE already > runs. This may only work when the win32all extensions are loaded. Agreed. Dave Scherer has been asking for that with VPython but I've neglected setting up the Visual installer to do that. I'm using Inno Setup (with extensions) which has very good flexibility, so I'm guessing I can do this for VPython even if it isn't part of the Python installer. > When the goal is learning Python (rather than physics), I find the > shell the best tool there is. For the reasons given in my own postings, which have probably crossed yours, I respectfully but forcefully disagree. Both Ruth Chabay and I individually tried hard to learn Python in the shell environment and both of us just got very confused. We didn't want to see what one statement did, we wanted to put several statements together. Given our very bad experiences, I'm curious what evidence you have for the shell being a good tool for learning Python? And what are you comparing to? Dave Scherer's highly interactive editor, or a batch oriented environment with no interactivity? Bruce Sherwood P.S. On the subject of installers, a couple days ago Ruth Chabay and I had occasion to see a remarkably helpful and informative error message from the Python installer. We were trying (unsuccessfully) to debug a new Windows 2000 administrative "Operational Unit" (essentially a "light" domain). Our permissions were set wrong, so when we tried to install some applications we got cryptic messages and the installs failed. But when we tried to install Python we were told that we didn't have adequate permissions to modify the registry, and would we like to install in a way that didn't require modifying the registry, even though some things might not work quite properly. We had suspected lack of write-access to the registry, but it was only the Python installer that confirmed this, in detail. Nice job! From StephenM.Gava Sun Jul 15 03:17:02 2001 From: StephenM.Gava (StephenM.Gava) Date: Sun, 15 Jul 2001 12:17:02 +1000 Subject: [Idle-dev] idlefork - horses for courses Message-ID: <01071512170200.00292@oberon> I've just been reading a flood of messages on the editor vs shell topic (my isp had a router problem which caused all my mail to bank up for the last day, so now I have hundreds of emails spewing out...). The shell/editor seem to have been discussed at some points as though they were almost mutually exclusive methods of creating a whole program, but I certainly don't see them that way at all. I certainly found the shell to be an invaluable tool in learning python, but then it never occurred to me to somehow think of it as an editor substitute, or proxy. I used them for entirely different purposes. Of course one writes code to be saved and executed as the final program in an editor, but I've found the shell is absolutely invaluable (unbeatable) as tool for interactively testing ideas and assumptions about how more 'atomic' code 'phrases' (or even individual keywords or library functions) will behave, in parallel to using these constructs in the edited source file. In fact, if one is unsure about exactly how a particular language construct will behave in given circumstances (ie. the position a learner is certainly frequently in), then throwing a few curves at it in the shell gives you a much more certain idea of exactly what will happen than just reading the documentation on it. So definitely both should be available and should be used in teaching and learning python, but for different and complimentary purposes. This, I believe, is more an issue of being able to teach effective use of the language tools for learning the language than anything else. Far from being something for 'experts', the shell should be introduced to beginners as a great learning tool, as and aid and adjunct to source file editing. I guess two possible shortcommings to what I've said here could be that, 1) I already programmed in many other languages before python, so I wasn't a true beginner, and, 2) I was initially using the shell in a linux console, so it had all the luxuries of readline command line editing and recall, etc., which isn't normally available in a shell invoked in a dos console under windows, thus making the shell a more attractive tool on *nix style systems. Case 2) is easily answered by using the IDLE shell which comes with all the trimmings and more (like easy copying and pasting back to the editor), on all platforms. As for issue 1), well, I recently began teaching my youngest son programming in python, he hadn't programmed before, and I found that after the basic concepts, when I introduced him to using both the documents _and_ trying things in the shell to work out stuff you are unsure of out, he was quickly able to use those two resources in combination to bootstrap his own learning process. He found that trying statements in the shell and getting instant feedback as he changed parameters, etc., really helped him to work out what to type into his larger body of code in the editor, quite separately from running/testing each step of his edited code's 'evolution'. Of course the shell can be used for more advanced kinds of experimentation and 'instant gratification' one off code executions, but I think that properly teaching learners its benefits as an exploration tool can only help them to become better python programmer much faster. Hmm, enough rabbiting on, now to plunge further into my email backlog! Cheers, Stephen. -- Stephen M. Gava "More power to those who don't care for it." - anon From dscherer@vysics.com Sun Jul 15 04:22:47 2001 From: dscherer@vysics.com (David Scherer) Date: Sat, 14 Jul 2001 23:22:47 -0400 Subject: [Visualpython-devel] Re: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: <3010608314.995148053@HYPERON.REM.CMU.EDU> Message-ID: <000a01c10cdd$6bd918a0$8101a8c0@RABBIT> > > I also would like to see Windows specific hacks that make > it possible > > to invoke IDLE as the editor by right-clicking any .py or .pyw file > > and selecting "Edit File" from the context menu, even if > IDLE already > > runs. This may only work when the win32all extensions are loaded. As Bruce says, this is only an installer issue: a few Windows registry entries need to be created. I routinely do this by hand on machines that I use heavily for Python coding :) > > When the goal is learning Python (rather than physics), I find the > > shell the best tool there is. > > For the reasons given in my own postings, which have probably crossed > yours, I respectfully but forcefully disagree. Both Ruth Chabay and I > individually tried hard to learn Python in the shell > environment and both > of us just got very confused. We didn't want to see what one > statement did, we wanted to put several statements together. Maybe this last sentence is the bottom line. Here is the first code from Guido's Python tutorial: >>> 2+2 4 >>> # This is a comment ... 2+2 4 >>> 2+2 # and a comment on the same line as code 4 >>> (50-5*6)/4 5 >>> # Integer division returns the floor: ... 7/3 2 >>> 7/-3 -3 Here is the very first code from an introduction on the VPython website: from visual import * redbox=box(pos=vector(4,2,3), size=(8.,4.,6.),color=color.red) greenball=sphere(pos=vector(4,7,3), radius=2, color=color.green) The reason that the shell seems great for beginners to Guido and terrible to Bruce is that Guido thinks of teaching Python by building upwards from the statement level, so that the first thing needed is lots of experience with the results of (roughly) individual statements. The amount of state is purposely kept minimal at the beginning: in the quote above, there aren't even any assignments, only expressions. In contrast, Bruce and Ruth's course starts with graphics at the very beginning, and graphics are inherently stateful. The three-line fragment above creates quite a bit of state! Almost immediately, Bruce and Ruth might have the objects moving (I made this code up, but it's in the right spirit): from visual import * redbox=box(pos=vector(4,2,3), size=(8.,4.,6.),color=color.red) greenball=sphere(pos=vector(4,7,3), radius=2, color=color.green, velocity=vector(0,-1,0)) while 1: rate(100) greenball.pos += greenball.velocity * 0.1 It's fairly obvious that typing this into the shell is no good. For example, going back and changing an initial condition (let's give the ball velocity (0.1,-1,0) and see what happens) would be a major operation. At around the same subjective time, Guido is playing with lists: >>> a = ['spam', 'eggs', 100, 1234] >>> a ['spam', 'eggs', 100, 1234] >>> a[0] 'spam' >>> a[3] 1234 >>> a[-2] 100 >>> a[1:-1] ['eggs', 100] >>> a[:2] + ['bacon', 2*2] ['spam', 'eggs', 'bacon', 4] >>> 3*a[:3] + ['Boe!'] ['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boe!'] Later, he introduces classes: >>> class Complex: ... def __init__(self, realpart, imagpart): ... self.r = realpart ... self.i = imagpart ... >>> x = Complex(3.0,-4.5) >>> x.r, x.i (3.0, -4.5) Using the editor for this type of tutorial would be just as awkward. For example, you would have to write "print" everywhere to get any output, and the output wouldn't be usefully lined up with the program. The bottom line (in my mind) is that there is, in fact, a place for both the editor and the shell - but not necessarily in the same curriculum. I can imagine an uber-debugger that might be a true superset of both editor and shell, but I don't have time to write it ;) Dave From kbk@shore.net Sun Jul 15 04:32:15 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 14 Jul 2001 23:32:15 -0400 Subject: [Visualpython-devel] Re: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: <3010608314.995148053@HYPERON.REM.CMU.EDU> References: <3010608314.995148053@HYPERON.REM.CMU.EDU> Message-ID: Bruce Sherwood writes: > Both Ruth Chabay and I individually tried > hard to learn Python in the shell environment and both of us just got very > confused. We didn't want to see what one statement did, we wanted to put > several statements together. Given our very bad experiences, I'm curious what > evidence you have for the shell being a good tool for learning Python? > And what > are you comparing to? Dave Scherer's highly interactive editor, or a batch > oriented environment with no interactivity? In my experience, and as Stephen says, its useful to be able to do experiments in the shell. If anything comes out of this, I copy and paste into an editor window. _However_, when you get to the point where you are importing modules, and changing those modules, then IDLE gives distinctly non-intuitive results. I developed a technique, which quickly became second nature, of reloading, and, if I had used from XX import *, redoing that. This is easy, just up arrow a couple of times and hit return twice. BUT it is not obvious. If you don't do that, you get "bad experiences" which are difficult to explain/justify to beginners. It would not be necessary to save the state of the editor file if it never died! But in practice, up to now, it is not 100%, because you can kill Python. Most IDEs give the option, and I always turn it on. If I want backups, as Bruce says, you learn to take snapshots at appropriate points. It's just a different way of working. I'd say, automatic saves. With beginners, things should be as intuitive as possible. Dr Scheme has run into this headlong and they have set up their environment, which is also an editor window and an interactive window, to handle the problem. They reset the interactive window each time you run something from the editor window. They have documented their design: http://www.cs.rice.edu/CS/PLT/Publications/jfp01-fcffksf.ps Refer to section 3.2. Quoting: "Experienced functional programmers have learned to avoid this problem by using their repl in a fashion that mimics batch behavior for definitions and interactive behavior for expressions. They exit the repl, restart the evaluator, and re-load a program file after each change. This action clears the state of the repl, which eliminates bugs introduced by ghosts of old programs. Unfortunately, manually restarting the environment is both time-consuming and error-prone. DrScheme provides and enforces this batch-oriented style of interactive program evaluation in a natural way. When the programmer is ready to test a program, a click on the Execute button submits the program to the interactions window. When the programmer clicks on Execute, the repl is set to its initial state and the text from the definitions window is evaluated in the fresh environment. Thus, the repl namespace exactly reflects the program in the definitions window. Next, the programmer evaluates test expressions in the repl. After discovering an error, the programmer edits the definitions and clicks the Execute button. If the programmer forgets to execute the program and tries to evaluate an expression in the repl, DrScheme informs the programmer that the text of the program is no longer consistent with the state of the repl. In short, after every change to the program, the programmer starts the program afresh, which eliminates the problems caused by traditional repls. For large programs, restarting the entire program to test a single change can be time consuming. Although restarting the repl in this manner can be time-consuming for large programs, the first author still uses this style repl to develop DrScheme itself, albeit with selected, unchanged libraries pre-compiled to an intermediate byte-code representation." Expert people, expert techniques. Beginners need something like the Dr Scheme environment. Regards, KBK "Beginner Mind" From StephenM.Gava Sun Jul 15 05:01:44 2001 From: StephenM.Gava (StephenM.Gava) Date: Sun, 15 Jul 2001 14:01:44 +1000 Subject: [Visualpython-devel] Re: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: <000a01c10cdd$6bd918a0$8101a8c0@RABBIT> References: <000a01c10cdd$6bd918a0$8101a8c0@RABBIT> Message-ID: <01071514014401.00292@oberon> David Scherer wrote: [...] > Using the editor for this type of tutorial would be just as awkward. > For example, you would have to write "print" everywhere to get any > output, and the output wouldn't be usefully lined up with the program. > > The bottom line (in my mind) is that there is, in fact, a place for both > the editor and the shell - but not necessarily in the same curriculum. > I can imagine an uber-debugger that might be a true superset of both > editor and shell, but I don't have time to write it ;) This is really what I was trying to say in my previous post (idlefork - horses for courses). Both environments are very useful. But I would also add that neither environment is, or needs to be, transcendent, that they should be available to all to use in combination. I can see where the focus is on learning python as a graphic scripting environment starting in the editor is very wise, but idle is meant for more than only this purpose. For teaching programming itself from scratch, using python as a general purpose programming language, the shell is a fantastic tool. In either case I think both must still have their place in a varying mix and with varying use over time, some of those graphic scripting physics students might want to do some advance string manipulation for instance at some stage, a subject that can be really beneficially explored in the shell, but if they had been turned off its use because it was not centrally useful in their original use for python, then they might lose out on its benefits. Really I think thie issue can be addressed in IDLE by just an easily configurable and saveable startup state, according to preference or need. This is exactly (one of ) the kind(s) of configurability I intend to work on as my main focus on idlefork. And the issues Kurt raises on more easily using the shell interactively with the editor for larger coding experiments can be addressed too. So this definitely _shouldn't_ be any kind of shell vs editor educational value holy war. Teachers and users should be able to configure IDLE to start up in the state most suitable for the course they are teaching or the task generally at hand for them, that's all. Stephen. -- Stephen M. Gava "More power to those who don't care for it." - anon From bas@andrew.cmu.edu Sun Jul 15 05:33:54 2001 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Sun, 15 Jul 2001 00:33:54 -0400 Subject: [Idle-dev] editor experiments Message-ID: <3019789604.995157234@HYPERON.REM.CMU.EDU> One "obvious" aspect I should have mentioned: I too sometimes need to explore the syntax of some single piece of Python, for which the shell seems useful. What I do is create a new editor window, and say "print .....". And I have the ability to put something in front of that statement, or after, for another try. As far as I can tell, these tiny editor files are the functional equivalent of the shell, PROVIDED that the editor is highly interactive. And rarely can I do a meaningful experiment in a single correctly typed line.... I repeat that the shell should be available to those who find it useful. But I also emphasize that if you have only had the shell and a clunky batch-style environment to compare and contrast, don't underestimate the possibilities of doing exploration in a truly interactive editor window. Bruce Sherwood From njriley@uiuc.edu Sun Jul 15 05:55:03 2001 From: njriley@uiuc.edu (Nicholas Riley) Date: Sat, 14 Jul 2001 23:55:03 -0500 Subject: [Idle-dev] editor experiments In-Reply-To: <3019789604.995157234@HYPERON.REM.CMU.EDU>; from bas@andrew.cmu.edu on Sun, Jul 15, 2001 at 12:33:54AM -0400 References: <3019789604.995157234@HYPERON.REM.CMU.EDU> Message-ID: <20010714235503.A3568@uiuc.edu> On Sun, Jul 15, 2001 at 12:33:54AM -0400, Bruce Sherwood wrote: > I repeat that the shell should be available to those who find it useful. > But I also emphasize that if you have only had the shell and a clunky > batch-style environment to compare and contrast, don't underestimate the > possibilities of doing exploration in a truly interactive editor window. Certainly, a Smalltalk-like editor contextual menu where you could select a code fragment and "print it" or "inspect it" - spawning a new window in context - would make a lot of sense. That's what I use the shell for 99% of the time, anyway... but trying to import modules in the shell and interact with them is really painful, especially when you're changing the modules in question. That's why the single-key run of VPython's IDLE was really nice - you could create a new file when you wanted to experiment, make some changes, hit the run key, and see the output. I especially liked the way only the new output was visible, but the older output was also there if you wanted to scroll up. For a long time I've wanted to write an Inspector (again, like in Smalltalk) for Python data types and objects - it'd certainly be possible to write one with Tkinter and incorporate it into IDLE. Only reason I haven't is that I no longer use Python very much where I am now. -- Nicholas Riley | From StephenM.Gava Sun Jul 15 07:31:57 2001 From: StephenM.Gava (StephenM.Gava) Date: Sun, 15 Jul 2001 16:31:57 +1000 Subject: [Idle-dev] editor experiments In-Reply-To: <20010714235503.A3568@uiuc.edu> References: <3019789604.995157234@HYPERON.REM.CMU.EDU> <20010714235503.A3568@uiuc.edu> Message-ID: <01071516315702.00292@oberon> > On Sun, Jul 15, 2001 at 12:33:54AM -0400, Bruce Sherwood wrote: > > I repeat that the shell should be available to those who find it useful. > > But I also emphasize that if you have only had the shell and a clunky > > batch-style environment to compare and contrast, don't underestimate the > > possibilities of doing exploration in a truly interactive editor window. I don't think exploration in a truly interactive editor window has been underestimated here at all, I think its a granted that that is a great thing to have! I think the interactive mode of the python interpreter has been underestimated. :) But in any case, yes, there should be both, and they should be as easy as possible to use together. > Certainly, a Smalltalk-like editor contextual menu where you could > select a code fragment and "print it" or "inspect it" - spawning a new > window in context - would make a lot of sense. That's what I use the > shell for 99% of the time, anyway... but trying to import modules in > the shell and interact with them is really painful, especially when > you're changing the modules in question. That's why the single-key > run of VPython's IDLE was really nice - you could create a new file > when you wanted to experiment, make some changes, hit the run key, and > see the output. I especially liked the way only the new output was > visible, but the older output was also there if you wanted to scroll > up. I agree Nicholas. This mode of operation is already available in idle-fork, which was based on VPython's IDLE and which we are currently merging recent improvements in python-idle back to. We have no plan to take this extra functionality away from idle-fork, rather we plan only to add even more improvements to this feature and the rest of idle-fork. We have some rather ambitious plans but we should at least be able to make both of these camps (shell and editor lovers) happy, plus hopefully a lot more. > For a long time I've wanted to write an Inspector (again, like in > Smalltalk) for Python data types and objects - it'd certainly be > possible to write one with Tkinter and incorporate it into IDLE. Only > reason I haven't is that I no longer use Python very much where I am > now. Sounds like you could make some worthy contributions again if you have the time and the inclination in the future! This reminds me, when I began re-starting idlefork a couple of weeks ago I got in contact with all the folk who had previously been developers on it to see if they wished to carry on in any capacity under "son of idlefork". I thought I had emailed you about this but checking back over my messages I can't find one sent to you so I may have forgotten to do that. Would you like to stay on as a developer (regular commiter) under the revamped project, or would you like to revert to being an occasional commiter via patches until some future time when you may have more time for idlefork again? Either way I don't mind, I'm happy to leave you on as a developer in case you intend to use that access at some stage, as I have with a couple of others. Cheers, Stephen. -- Stephen M. Gava "More power to those who don't care for it." - anon From guido@digicool.com Sun Jul 15 17:51:30 2001 From: guido@digicool.com (Guido van Rossum) Date: Sun, 15 Jul 2001 12:51:30 -0400 Subject: [Visualpython-devel] Re: [Idle-dev] Py-CVS Release 2.1 Merge In-Reply-To: Your message of "Sat, 14 Jul 2001 22:00:53 EDT." <3010608314.995148053@HYPERON.REM.CMU.EDU> References: <3010608314.995148053@HYPERON.REM.CMU.EDU> Message-ID: <200107151651.MAA31248@cj20424-a.reston1.va.home.com> > For the reasons given in my own postings, which have probably crossed > yours, I respectfully but forcefully disagree. There's way too much mail on this subject now for me to read, so I'll just say that I see your point. --Guido van Rossum (home page: http://www.python.org/~guido/) From pobrien@orbtech.com Sun Jul 15 18:18:50 2001 From: pobrien@orbtech.com (Patrick K. O'Brien) Date: Sun, 15 Jul 2001 12:18:50 -0500 Subject: [Idle-dev] Fw: This is spoiling Python image! Message-ID: We should add this as something to fix. --- Patrick K. O'Brien Orbtech "I am, therefore I think." "Roman Suzi" wrote in message news:... The problem: it is impossible to use IDLE with non-latin1 encodings under Windows. IDLE is standard IDE for Python and it is what beginner users of Python see in their Start->Programs. Unfortunately, IDLE can't work with non-latin1 characters any more. This could lead beginners to reconsider their choice of language because of unfriendly i18n issues. The problem is explained in detail below. Lets consider all errors one at a time. 1. Tcl can't find encodings (they are in \Python21\tcl\tcl8.3\encoding\). Without them it is impossible to enter cyrillic and other kinds of letters in Text and Entry widgets under Windows. Tkinter tries to help Tcl by means of FixTk.py: import sys, os, _tkinter ver = str(_tkinter.TCL_VERSION) for t in "tcl", "tk": v = os.path.join(sys.prefix, "tcl", t+ver) if os.path.exists(os.path.join(v, "tclIndex")): os.environ[t.upper() + "_LIBRARY"] = v This sets env. variables TCL_LIBRARY and TK_LIBRARY to "C:\Python21\tcl\tcl8.3". The problem is that it imports _tkinter which initialises and calls Tcl_FindExecutable before TCL_LIBRARY is set. It is easy to fix this error in FixTk.py: import sys, os if not os.environ.has_key('TCL_LIBRARY'): tcl_library = os.path.join(sys.prefix, "tcl", "tclX.Y") os.environ['TCL_LIBRARY'] = tcl_library Tcl is smart enough to look into "C:\Python21\tcl\tclX.Y\..\tcl8.3" as well. 2. Now we are able to print in IDLE: >>> print "??????" and we will see russian letter... before we press Enter, after which: UnicodeError: ASCII decoding error: ordinal not in range(128) appears. Tcl recoded "??????" into Unicode. Python tries to recode it back into usual string, assuming usual strings have sys.getdefaultencoding(). Now we need to set default encoding. Lets look into site.py: # Set the string encoding used by the Unicode implementation. The # default is 'ascii', but if you're willing to experiment, you can # change this. encoding = "ascii" # Default value set by _PyUnicode_Init() if 0: # Enable to support locale aware default string encodings. import locale loc = locale.getdefaultlocale() if loc[1]: encoding = loc[1] if 0: # Enable to switch off string to Unicode coercion and implicit # Unicode to string conversion. encoding = "undefined" if encoding != "ascii": sys.setdefaultencoding(encoding) The code for setting default encoding is commented (maybe, to allow faster startup?) Then goes: # # Run custom site specific code, if available. # try: import sitecustomize except ImportError: pass # # Remove sys.setdefaultencoding() so that users cannot change the # encoding after initialization. The test for presence is needed when # this module is run as a script, because this code is executed twice. # if hasattr(sys, "setdefaultencoding"): del sys.setdefaultencoding So, sys.setdefaultencoding is deleted after we used it in sitecustomize.py. Its too bad, because the program can't set default encoding and implicit string<->unicode conversions are very common in Python and IDLE. The solution could be as follows. Lets put sitecustomize.py in C:\Python21\ with the following: import locale, sys encoding = locale.getdefaultlocale()[1] if encoding: sys.setdefaultencoding(encoding) * It would be wonderful if IDLE itself could setup encoding based on locale or issued warnings and pointed t o solution somehow. 3. Now we can try it again in IDLE: >>> print "??????" after hitting Enter we are getting... latin1. It's time to look at how _tkinter.c communicates with Tcl. The cheap&dirty solution for IDLE is as follows: --- Percolator.py.orig Sat Jul 14 19:38:16 2001 +++ Percolator.py Sat Jul 14 19:38:16 2001 @@ -22,6 +22,8 @@ def insert(self, index, chars, tags=None): # Could go away if inheriting from Delegator + if index != 'insert': + chars = unicode(chars) self.top.insert(index, chars, tags) def delete(self, index1, index2=None): --- PyShell.py.orig Sat Jul 14 19:38:37 2001 +++ PyShell.py Sat Jul 14 19:38:37 2001 @@ -469,6 +469,8 @@ finally: self.reading = save line = self.text.get("iomark", "end-1c") + if type(line) == type(u""): + line = line.encode() self.resetoutput() if self.canceled: self.canceled = 0 But alas these patches only mask the problem. What is really needed? Starting from version 8.1 Tcl is totally unicoded. It is very simple: tt wants us utf-8 strings and returns also utf-8 strings. (As an exception, Tcl could assume latin1 if it is unable to decode string). _tkinter.c just sends Python strings as is to Tcl. And does it correctly for Unicode strings. Receiving side is slightly more complicated: Tkapp_Call function (aka root.tk.call) handles most of the Tkinter Tcl/Tk commands. If the result is 7bit clean, Tkapp_Call returns usual string, if not -- it converts from utf-8 into unicode and returns Unicode string. Only Tkapp_Call does it. All others (Tkapp_Eval, GetVar, PythonCmd) return utf-8 string! IDLE extensively use Tkinter capabilities and all kinds of strings go back and forth between Python and Tcl. Of course, _tkinter.c works incorrectly. i) before sending a string to Tcl, it must recode it FROM default encoding TO utf-8 ii) upon receive of a string from Tcl, it must recode it from utf-8 to default encoding, if possible. [R.S.: Or return it as Unicode, if impossible] It is possible to optimize the conversions. Of course, this will have impact on the speed of Tkinter. But in our opinion correct work is more important than speed. Solution checked under Win98. >From R.S.: yes, IDLE is not ideal and there are better IDEs (Emacs, for example) and "serious" programmers rarely use it. Also Tkinter is critisized much, etc. But the problem indicated above is very bad for Python image as a user-friendly language. That is why it is very important to FIX the problem as soon, as possible. We can prepare patches for _tkinter.c as well. Before we proceed to submitting bug-reports and patches, we will be glad to hear if somebody has better solution to the indicated problem. (The big deal of the problem is the need to patch _tkinter.c and recompile it. Everything else even beginner could fix if supplied with clues and files with fixes. But of course, Python's IDLE must run correct out of the box). Author: Kirill Simonov Translator: Roman Suzi ---------- From kbk@shore.net Sun Jul 15 18:25:33 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 15 Jul 2001 13:25:33 -0400 Subject: [Idle-dev] Fw: This is spoiling Python image! In-Reply-To: References: Message-ID: Patrick, could you submit this as a bug on idlefork? Since the text is long, maybe submit a summary and attach the text as a file? That way it won't recede on idle-dev, and idlefork gets a statistics bump ;) Regards, KBK From pobrien@orbtech.com Sun Jul 15 18:50:39 2001 From: pobrien@orbtech.com (Patrick K. O'Brien) Date: Sun, 15 Jul 2001 12:50:39 -0500 Subject: [Idle-dev] Fw: This is spoiling Python image! In-Reply-To: Message-ID: Done: https://sourceforge.net/tracker/index.php?func=detail&aid=441472&group_id=95 79&atid=109579 --- Patrick K. O'Brien Orbtech "I am, therefore I think." -----Original Message----- From: idle-dev-admin@python.org [mailto:idle-dev-admin@python.org]On Behalf Of Kurt B. Kaiser Sent: Sunday, July 15, 2001 12:26 PM To: idle-dev@python.org Subject: Re: [Idle-dev] Fw: This is spoiling Python image! Patrick, could you submit this as a bug on idlefork? Since the text is long, maybe submit a summary and attach the text as a file? That way it won't recede on idle-dev, and idlefork gets a statistics bump ;) Regards, KBK _______________________________________________ IDLE-dev mailing list IDLE-dev@python.org http://mail.python.org/mailman/listinfo/idle-dev From kbk@users.sourceforge.net Mon Jul 16 05:00:12 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Sun, 15 Jul 2001 21:00:12 -0700 Subject: [Idle-dev] CVS: idle PyShell.py,1.4,1.5 setup.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv5850 Modified Files: PyShell.py setup.py Log Message: Add a script "idles" which opens a Python Shell window. The default behaviour of idlefork idle is to open an editor window instead of a shell. Complex expressions may be run in a fresh environment by selecting "run". There are times, however, when a shell is desired. Though one can be started by "idle -t 'foo'", this script is more convenient. In addition, a shell and an editor window can be started in parallel by "idles -e foo.py". Index: PyShell.py =================================================================== RCS file: /cvsroot/idlefork/idle/PyShell.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** PyShell.py 2001/07/14 05:10:34 1.4 --- PyShell.py 2001/07/16 04:00:10 1.5 *************** *** 3,7 **** # changes by dscherer@cmu.edu ! # the main() function has been replaced by a whole class, in order to # address the constraint that only one process can sit on the port # hard-coded into the loader. --- 3,7 ---- # changes by dscherer@cmu.edu ! # The main() function has been replaced by a whole class, in order to # address the constraint that only one process can sit on the port # hard-coded into the loader. *************** *** 14,24 **** # arguments for remotes is still very incomplete. ! # default behavior (no command line options) is to NOT start the Python ! # Shell. If files are specified, they are opened, otherwise a single ! # blank editor window opens. ! # If any command line -options are specified, a shell does appear. This ! # is necessary to make the current semantics of the options make sense. import os import spawn --- 14,26 ---- # arguments for remotes is still very incomplete. ! # Default behavior (no command line options) is to open an editor window ! # instead of starting the Python Shell. However, if called as ! # Pyshell.main(0), the Shell will be started instead of the editor window. ! # In the default editor mode, if files are specified, they are opened. + # If any command line options are specified, a shell does appear, and if + # the -e option is used, both a shell and an editor window open. + import os import spawn *************** *** 726,734 **** class main: ! def __init__(self): try: self.server = protocol.Server(connection_hook = self.address_ok) protocol.publish( 'IDLE', self.connect ) ! self.main( sys.argv[1:] ) return except protocol.connectionLost: --- 728,736 ---- class main: ! def __init__(self, noshell=1): try: self.server = protocol.Server(connection_hook = self.address_ok) protocol.publish( 'IDLE', self.connect ) ! self.main(sys.argv[1:], noshell) return except protocol.connectionLost: *************** *** 776,784 **** flist.new() ! def main( self, argv ): cmd = None edit = 0 - noshell = 1 - debug = 0 startup = 0 --- 778,784 ---- flist.new() ! def main(self, argv, noshell): cmd = None edit = 0 debug = 0 startup = 0 Index: setup.py =================================================================== RCS file: /cvsroot/idlefork/idle/setup.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** setup.py 2001/07/14 05:48:44 1.3 --- setup.py 2001/07/16 04:00:10 1.4 *************** *** 78,81 **** package_dir = {idlelib:'.'}, packages = [idlelib], ! scripts = ['idle'] ) --- 78,81 ---- package_dir = {idlelib:'.'}, packages = [idlelib], ! scripts = ['idle', 'idles'] ) From kbk@shore.net Mon Jul 16 05:07:44 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 16 Jul 2001 00:07:44 -0400 Subject: [Idle-dev] Startup Shell Functionality Message-ID: I added a new script, "idles", which causes a Python Shell to open instead of the default editor window you get when you use "idle". opens an empty editor window opens an editor window for foo.py opens a shell opens a shell and an editor window for foo.py executes foo.py in shell before printing prompt The last behaviour is questionable, per GvR. Should it exit, or edit foo.py? It may be that a better name than "idles" can be found. I chose that because it was short. Suggestions welcomed! KBK From kbk@users.sourceforge.net Mon Jul 16 06:25:15 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Sun, 15 Jul 2001 22:25:15 -0700 Subject: [Idle-dev] CVS: idle PyShell.py,1.5,1.6 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv20979 Modified Files: PyShell.py Log Message: Call out IDLE Fork in startup message. Index: PyShell.py =================================================================== RCS file: /cvsroot/idlefork/idle/PyShell.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** PyShell.py 2001/07/16 04:00:10 1.5 --- PyShell.py 2001/07/16 05:25:12 1.6 *************** *** 471,475 **** def begin(self): self.resetoutput() ! self.write("Python %s on %s\n%s\nIDLE %s -- press F1 for help\n" % (sys.version, sys.platform, self.COPYRIGHT, idlever.IDLE_VERSION)) --- 471,475 ---- def begin(self): self.resetoutput() ! self.write("Python %s on %s\n%s\nIDLE Fork %s -- press F1 for help\n" % (sys.version, sys.platform, self.COPYRIGHT, idlever.IDLE_VERSION)) From kbk@users.sourceforge.net Mon Jul 16 06:50:47 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Sun, 15 Jul 2001 22:50:47 -0700 Subject: [Idle-dev] CVS: idle idles,NONE,1.1 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv24228 Added Files: idles Log Message: Add a script "idles" which opens a Python Shell window. The default behaviour of idlefork idle is to open an editor window instead of a shell. Complex expressions may be run in a fresh environment by selecting "run". There are times, however, when a shell is desired. Though one can be started by "idle -t 'foo'", this script is more convenient. In addition, a shell and an editor window can be started in parallel by "idles -e foo.py". --- NEW FILE: idles --- #! /usr/bin/env python import os import sys from idlelib import IdleConf idle_dir = os.path.dirname(IdleConf.__file__) IdleConf.load(idle_dir) # defer importing Pyshell until IdleConf is loaded from idlelib import PyShell # open a shell instead of an editor window PyShell.main(0) From kbk@users.sourceforge.net Mon Jul 16 08:08:22 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Mon, 16 Jul 2001 00:08:22 -0700 Subject: [Idle-dev] CVS: idle INSTALLATION,NONE,1.1 coexist.patch,NONE,1.1 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv2612 Added Files: INSTALLATION coexist.patch Log Message: Added installation instructions. Added a patch which modifies idlefork so that it can co-exist with "official" IDLE in the site-packages directory. This patch is not necessary if only idlefork IDLE is installed. See INSTALLATION for further details. --- NEW FILE: INSTALLATION --- IDLE Fork Installation on Linux: Until the tarball is released, you must download a CVS copy. An excellent place for it is /usr/local/src/PythonX.X/Tools/idlefork, assuming that's where your Python source is located. Put the correct version in for X.X . # cd /usr/local/src/PythonX.X/Tools Now do the CVS login and checkout: # cvs -d:pserver:anonymous@cvs.idlefork.sourceforge.net:/cvsroot/idlefork login Type an for the password. # cvs -z3 -d:pserver:anonymous@cvs.idlefork.sourceforge.net:/cvsroot/idlefork \ -d idlefork checkout idle The -d option to checkout puts the files in an idlefork directory, so you don't step on "official" idle. # cd idlefork # su to root # python setup.py install # echo "idle" > /usr/local/lib/pythonX.X/site-packages.pth This last is necessary so idle can find itself. I hope we can create/append this file via setup.py at some point, but it needs to be done manually now, and it only needs to be done once (unless you totally remove and reinstall python itself). # exit from root NOTE that the above procedure will install idlefork IDLE on top of any "official" IDLE that may be already installed. If you wish to avoid doing that, there is a patch file, coexist.patch, in the idlefork directory. If, _*before*_ you install idle, you run # patch -p0 < coexist.patch idlefork will be modified so that it installs as .../site-packages/fildlelib, idle as fidle, and idles as fidles. (If you previously installed without patching, remove the idlefork/build directory before running the install.) NOTE: You must then append "fidlelib" to site-packages.pth ! Then "official" IDLE and idlefork IDLE will exist side by side for comparision. And if idlefork is temporarily broken :-(, well, you have your old IDLE ways. This is obviously an expedient development hack, but if popular, I imagine there could be a setup option. --- NEW FILE: coexist.patch --- ? coexist.diff ? fidle ? build ? install.kbk ? coexist.patch Index: PyShell.py =================================================================== RCS file: /cvsroot/idlefork/idle/PyShell.py,v retrieving revision 1.6 diff -c -r1.6 PyShell.py *** PyShell.py 2001/07/16 05:25:12 1.6 --- PyShell.py 2001/07/16 05:53:22 *************** *** 470,476 **** def begin(self): self.resetoutput() ! self.write("Python %s on %s\n%s\nIDLE Fork %s -- press F1 for help\n" % (sys.version, sys.platform, self.COPYRIGHT, idlever.IDLE_VERSION)) try: --- 470,476 ---- def begin(self): self.resetoutput() ! self.write("Python %s on %s\n%s\nFIDLE Fork %s -- press F1 for help\n" % (sys.version, sys.platform, self.COPYRIGHT, idlever.IDLE_VERSION)) try: Index: setup.py =================================================================== RCS file: /cvsroot/idlefork/idle/setup.py,v retrieving revision 1.4 diff -c -r1.4 setup.py *** setup.py 2001/07/16 04:00:10 1.4 --- setup.py 2001/07/16 05:53:22 *************** *** 5,11 **** import idlever # name of idle package ! idlelib = "idlelib" # the normal build_py would not incorporate the .txt files txt_files = ['config-unix.txt','config-win.txt','config.txt', 'help.txt'] --- 5,11 ---- import idlever # name of idle package ! idlelib = "fidlelib" # the normal build_py would not incorporate the .txt files txt_files = ['config-unix.txt','config-win.txt','config.txt', 'help.txt'] *************** *** 55,69 **** # Arghhh. install_lib thinks that all files returned from build_py's # get_outputs are bytecode files class idle_install_lib(install_lib): def _bytecode_filenames(self, files): files = [n for n in files if n.endswith('.py')] return install_lib._bytecode_filenames(self,files) - ! setup(name="IDLE", version = idlever.IDLE_VERSION, ! description = "IDLE, the Python IDE", author = "Guido van Rossum", author_email = "guido@python.org", #url = --- 55,69 ---- # Arghhh. install_lib thinks that all files returned from build_py's # get_outputs are bytecode files + class idle_install_lib(install_lib): def _bytecode_filenames(self, files): files = [n for n in files if n.endswith('.py')] return install_lib._bytecode_filenames(self,files) ! setup(name="FIDLE", version = idlever.IDLE_VERSION, ! description = "FIDLE, the Forked Python IDE", author = "Guido van Rossum", author_email = "guido@python.org", #url = *************** *** 71,81 **** """IDLE is a Tkinter based IDE for Python. It is written in 100% pure Python and works both on Windows and Unix. It features a multi-window text editor with multiple undo, Python colorizing, and many other things, ! as well as a Python shell window and a debugger.""", cmdclass = {'build_py':idle_build_py, 'install_lib':idle_install_lib}, package_dir = {idlelib:'.'}, packages = [idlelib], ! scripts = ['idle', 'idles'] ) --- 71,86 ---- """IDLE is a Tkinter based IDE for Python. It is written in 100% pure Python and works both on Windows and Unix. It features a multi-window text editor with multiple undo, Python colorizing, and many other things, ! as well as a Python shell window and a debugger. ! ! FIDLE is a separate line of development which was initiated by D. Scherer ! at CMU as part of Visual Python. It features execution in a separate ! process, with a fresh environment for each run. For further details, ! refer to idlefork.sourceforge.net.""", cmdclass = {'build_py':idle_build_py, 'install_lib':idle_install_lib}, package_dir = {idlelib:'.'}, packages = [idlelib], ! scripts = ['fidle', 'fidles'] ) *** /dev/null Tue May 5 16:32:27 1998 --- fidle Sat Jul 14 12:40:25 2001 *************** *** 0 **** --- 1,12 ---- + #! /usr/bin/env python + + import os + import sys + from fidlelib import IdleConf + + idle_dir = os.path.dirname(IdleConf.__file__) + IdleConf.load(idle_dir) + + # defer importing Pyshell until IdleConf is loaded + from fidlelib import PyShell + PyShell.main() *** idle Sat Jul 14 12:40:36 2001 --- /dev/null Tue May 5 16:32:27 1998 *************** *** 1,12 **** - #! /usr/bin/env python - - import os - import sys - from idlelib import IdleConf - - idle_dir = os.path.dirname(IdleConf.__file__) - IdleConf.load(idle_dir) - - # defer importing Pyshell until IdleConf is loaded - from idlelib import PyShell - PyShell.main() --- 0 ---- *** /dev/null Tue May 5 16:32:27 1998 --- fidles Mon Jul 16 02:25:48 2001 *************** *** 0 **** --- 1,13 ---- + #! /usr/bin/env python + + import os + import sys + from fidlelib import IdleConf + + idle_dir = os.path.dirname(IdleConf.__file__) + IdleConf.load(idle_dir) + + # defer importing Pyshell until IdleConf is loaded + from fidlelib import PyShell + # open a shell instead of an editor window + PyShell.main(0) *** idles Mon Jul 16 02:27:23 2001 --- /dev/null Tue May 5 16:32:27 1998 *************** *** 1,13 **** - #! /usr/bin/env python - - import os - import sys - from idlelib import IdleConf - - idle_dir = os.path.dirname(IdleConf.__file__) - IdleConf.load(idle_dir) - - # defer importing Pyshell until IdleConf is loaded - from idlelib import PyShell - # open a shell instead of an editor window - PyShell.main(0) --- 0 ---- From kbk@shore.net Mon Jul 16 08:17:14 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 16 Jul 2001 03:17:14 -0400 Subject: [Idle-dev] Installation Notes Message-ID: I've put together some installation instructions for idlefork IDLE. They are detailed enough so that even if a person has not tried installing something from CVS before, they should be successful. Please let me know about suggestions and improvements. Here's a copy of INSTALLATION: ******************************* IDLE Fork Installation on Linux: Until the tarball is released, you must download a CVS copy. An excellent place for it is /usr/local/src/PythonX.X/Tools/idlefork, assuming that's where your Python source is located. Put the correct version in for X.X . # cd /usr/local/src/PythonX.X/Tools Now do the CVS login and checkout: # cvs -d:pserver:anonymous@cvs.idlefork.sourceforge.net:/cvsroot/idlefork login Type an for the password. # cvs -z3 -d:pserver:anonymous@cvs.idlefork.sourceforge.net:/cvsroot/idlefork \ -d idlefork checkout idle The -d option to checkout puts the files in an idlefork directory, so you don't step on "official" idle. # cd idlefork # su to root # python setup.py install # echo "idle" > /usr/local/lib/pythonX.X/site-packages.pth This last is necessary so idle can find itself. I hope we can create/append this file via setup.py at some point, but it needs to be done manually now, and it only needs to be done once (unless you totally remove and reinstall python itself). # exit from root NOTE that the above procedure will install idlefork IDLE on top of any "official" IDLE that may be already installed. If you wish to avoid doing that, there is a patch file, coexist.patch, in the idlefork directory. If, _*before*_ you install idle, you run # patch -p0 < coexist.patch idlefork will be modified so that it installs as .../site-packages/fildlelib, idle as fidle, and idles as fidles. (If you previously installed without patching, remove the idlefork/build directory before running the install.) NOTE: You must then append "fidlelib" to site-packages.pth ! Then "official" IDLE and idlefork IDLE will exist side by side for comparision. And if idlefork is temporarily broken :-(, well, you have your old IDLE ways. This is obviously an expedient development hack, but if popular, I imagine there could be a setup option. ************************** If setup.py or PyShell.py get modified much, the patch will break and need to be regenerated. That's one of the disadvantages of doing it this way, but it's quick. The names chosen, fidle and fidles, are again only suggestions. It's easy to type f's in front of things! KBK From wwwjessie@21cn.com Mon Jul 16 10:47:41 2001 From: wwwjessie@21cn.com (wwwjessie@21cn.com) Date: Mon, 16 Jul 2001 17:47:41 +0800 Subject: [Idle-dev] =?gb2312?B?tPPBrC0yMDAxxOq5+rzKwszJq8qzxrfT68jLwOC9ob+1sqnAwLvhKA==?= =?gb2312?B?QWdybyBBbm51YWwgTWVldGluZyBDaGluYSAyMDAxKQ0=?= Message-ID: <2db8001c10ddc$5b2c7150$9300a8c0@ifood1gongxing> This is a multi-part message in MIME format. ------=_NextPart_000_2DB81_01C10E1F.694FB150 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MjAwMcTq1tC5+rn6vMrFqdK1v8a8vMTqu+ENCrn6vMrCzMmryrPGt9PryMvA4L2hv7WyqcDAu+G8 sNGnyvXM1sLbu+ENCg0KCQ0K1bnG2qO6IAmhoTIwMDHE6jnUwjTI1S03yNUJDQq12LXjo7ogCaGh tPPBrNDHuqO74dW51tDQxAkNCtb3sOyjuiAJoaHW0LuqyMvD8bmyus25+sWp0rWyvw0KoaHW0Ln6 v8bRp7y8yvXQrbvhDQqhobTzwazK0MjLw/HV/riuDQoJDQqz0LDso7ogCaGh1tC5+sLMyavKs8a3 t6LVudbQ0MQNCqGh1tC5+sWp0ae74Q0KoaHW0Ln6wszJq8qzxrfQrbvhDQqhobTzwazK0MWp0rW+ 1g0KoaG088Gs0Me6o7vh1bnW0NDEDQoJDQrN+MLnt/7O8czhuanJzKO60rzKs8a31tC5+s34IGh0 dHA6Ly93d3cuaWZvb2QxLmNvbQ0KPGh0dHA6Ly93d3cuaWZvb2QxLmNvbS9pbmRleC5hc3A/ZnI9 aWRsZS1kZXZAcHl0aG9uLm9yZz4gCQ0KIAkNCqH6IM2ouf3SvMqzxrfW0Ln6zfixqMP7ss7VuaO6 vsXV29PFu90oscjI58/W09DDv7j2IDNNIFggM00gtcSx6te81bnOu9StvNtSTUI0NTAwo6zNqLn9 ztLDx9a70Oi4tlJNQjQwNTApo6wNCrGow/u92Na5yNXG2jIwMDHE6jfUwjIwyNUgPGh0dHA6Ly9n cmVlbjIwMDEuaWZvb2QxLmNvbS9mcm9tMS5hc3A+IA0Kofogu7bTrSDD4rfR16Ky4SA8aHR0cDov L3d3dy5pZm9vZDEuY29tL3NpZ251cC9zZXZhZ3JlZW0uYXNwPiCzyc6quavLvrvh1LGhow0KN9TC MjDI1cew16Ky4aOsxPq9q9TaN9TCMjXI1cewzai5/bXn19PTyrz+t73KvcPit9G78bXDMzDM9bLJ ubrQxc+ioaMNCsjnufvE+rK7z+vK1bW9ztLDx7XE08q8/qOsx+sgwarPtc7Sw8cgPG1haWx0bzp1 bnN1YnNjcmliZUBpZm9vZDEuY29tPiCjrM7Sw8fS1Lrzvauyu9TZt6LTyrz+uPjE+qGjDQqy6dGv o7ogc2FsZXNAaWZvb2QxLmNvbSA8bWFpbHRvOnNhbGVzQGlmb29kMS5jb20+ICChoaGhtee7sKO6 MDc1NS0zNzg2MzA5oaHP+srbsr8NCsny0KG94yC2xc/IyfoNCg0KDQogDQoNCrvYINa0IKOox+u0 q9Xmo7owNzU1LTMyMzkwNDe78iC3orXn19PTyrz+o7ogc2FsZXNAaWZvb2QxLmNvbSA8bWFpbHRv OnNhbGVzQGlmb29kMS5jb20+DQqjqQkNCqH1ILG+uavLvtPQ0uLNqLn90rzKs8a31tC5+s34ss7V uSChoaGhIKH1ILG+uavLvsTivfjSu7K9wcu94rjDsqnAwLvho6zH69PrztLDx8Gqz7UNCg0KuavL vsP7s8ajul9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQrBqs+1yMujul9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCrXnu7Cjul9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCrSr1eajul9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18NCkUtbWFpbKO6X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xw0KCQ0KIAkNCiAJDQogCQ0KIAkNCiAJDQo= ------=_NextPart_000_2DB81_01C10E1F.694FB150 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: base64 PGh0bWw+DQo8aGVhZD4NCjx0aXRsZT5VbnRpdGxlZCBEb2N1bWVudDwvdGl0bGU+IDxtZXRhIGh0 dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdiMjMx MiI+IA0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCjwhLS0NCnRkIHsgIGxpbmUtaGVpZ2h0OiAy NHB4fQ0KLS0+DQo8L3N0eWxlPiANCjwvaGVhZD4NCg0KPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIg dGV4dD0iIzAwMDAwMCI+DQo8ZGl2IGFsaWduPSJDRU5URVIiPjx0YWJsZSB3aWR0aD0iNzUlIiBi b3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+PHRyPjx0ZCBhbGlnbj0i Q0VOVEVSIj48YSBocmVmPSJodHRwOy8vZ3JlZW4yMDAxLmlmb29kMS5jb20iPjxiPjIwMDHE6tbQ ufq5+rzKxanStb/GvLzE6rvhPGJyPrn6vMrCzMmryrPGt9PryMvA4L2hv7WyqcDAu+G8sNGnyvXM 1sLbu+E8L2I+PC9hPjxicj48YnI+PC90ZD48L3RyPjx0cj48dGQgYWxpZ249IkNFTlRFUiI+PHRh YmxlIHdpZHRoPSI3NSUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIw Ij48dHI+PHRkIGhlaWdodD0iMTIiIHdpZHRoPSIzOSUiIGFsaWduPSJSSUdIVCI+PGI+PGZvbnQg c2l6ZT0iMiI+1bnG2qO6IA0KPC9mb250PjwvYj48L3RkPjx0ZCBoZWlnaHQ9IjEyIiB3aWR0aD0i NjElIj48Zm9udCBzaXplPSIyIj6hoTIwMDHE6jnUwjTI1S03yNU8L2ZvbnQ+PC90ZD48L3RyPjx0 cj48dGQgaGVpZ2h0PSIxMiIgd2lkdGg9IjM5JSIgYWxpZ249IlJJR0hUIj48Yj48Zm9udCBzaXpl PSIyIj612LXjo7ogDQo8L2ZvbnQ+PC9iPjwvdGQ+PHRkIGhlaWdodD0iMTIiIHdpZHRoPSI2MSUi Pjxmb250IHNpemU9IjIiPqGhtPPBrNDHuqO74dW51tDQxDwvZm9udD48L3RkPjwvdHI+PHRyPjx0 ZCBoZWlnaHQ9IjEyIiB3aWR0aD0iMzklIiBhbGlnbj0iUklHSFQiIHZhbGlnbj0iVE9QIj48Yj48 Zm9udCBzaXplPSIyIj7W97Dso7ogDQo8L2ZvbnQ+PC9iPjwvdGQ+PHRkIGhlaWdodD0iMTIiIHdp ZHRoPSI2MSUiPjxmb250IHNpemU9IjIiPqGhPC9mb250Pjxmb250IHNpemU9IjIiPtbQu6rIy8Px ubK6zbn6xanStbK/PGJyPqGh1tC5+r/G0ae8vMr10K274Txicj6hobTzwazK0MjLw/HV/riuPGJy PjwvZm9udD48L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9IjEyIiB3aWR0aD0iMzklIiBhbGlnbj0i UklHSFQiIHZhbGlnbj0iVE9QIj48Yj48Zm9udCBzaXplPSIyIj6z0LDso7ogDQo8L2ZvbnQ+PC9i PjwvdGQ+PHRkIGhlaWdodD0iMTIiIHdpZHRoPSI2MSUiPjxmb250IHNpemU9IjIiPqGhPC9mb250 Pjxmb250IHNpemU9IjIiPtbQufrCzMmryrPGt7ei1bnW0NDEPGJyPqGh1tC5+sWp0ae74Txicj6h odbQufrCzMmryrPGt9Ctu+E8YnI+oaG088GsytDFqdK1vtY8YnI+oaG088Gs0Me6o7vh1bnW0NDE PGJyPjwvZm9udD48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0iQ0VOVEVSIj48 Zm9udCBzaXplPSIyIj7N+MLnt/7O8czhuanJzKO60rzKs8a31tC5+s34IA0KPGEgaHJlZj0iaHR0 cDovL3d3dy5pZm9vZDEuY29tL2luZGV4LmFzcD9mcj1pZGxlLWRldkBweXRob24ub3JnIj5odHRw Oi8vd3d3Lmlmb29kMS5jb208L2E+PC9mb250PjwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49IjIi IGFsaWduPSJDRU5URVIiPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkIGNvbHNwYW49IjIiIGFsaWdu PSJMRUZUIj48cD48Zm9udCBzaXplPSIyIj6h+iANCs2ouf3SvMqzxrfW0Ln6zfixqMP7ss7VuaO6 PGI+PGZvbnQgc2l6ZT0iMyIgY29sb3I9IiNGRjAwMDAiPr7F1dvTxbvdPC9mb250PjwvYj4oscjI 58/W09DDv7j2IDNNIFggM00gDQq1xLHq17zVuc671K2821JNQjQ1MDCjrM2ouf3O0sPH1rvQ6Li2 Uk1CNDA1MCmjrCA8YSBocmVmPSJodHRwOi8vZ3JlZW4yMDAxLmlmb29kMS5jb20vZnJvbTEuYXNw Ij48Yj48Zm9udCBzaXplPSIzIiBjb2xvcj0iI0ZGMDAwMCI+sajD+73Y1rnI1cbaMjAwMcTqN9TC MjDI1TwvZm9udD48L2I+PC9hPjxicj6h+iANCru20608YSBocmVmPSJodHRwOi8vd3d3Lmlmb29k MS5jb20vc2lnbnVwL3NldmFncmVlbS5hc3AiPsPit9HXorLhPC9hPrPJzqq5q8u+u+HUsaGjIDxm b250IGNvbG9yPSIjRkYwMDAwIj48Yj48Zm9udCBzaXplPSIzIj431MIyMMjVx7DXorLho6zE+r2r 1No31MIyNcjVx7DNqLn9tefX09PKvP63vcq9w+K30bvxtcMzMMz1ssm5utDFz6KhozwvZm9udD48 L2I+PC9mb250Pjxicj7I57n7xPqyu8/rytW1vc7Sw8e1xNPKvP6jrMfrPGEgaHJlZj0ibWFpbHRv OnVuc3Vic2NyaWJlQGlmb29kMS5jb20iPsGqz7XO0sPHPC9hPqOsztLDx9LUuvO9q7K71Nm3otPK vP64+MT6oaM8YnI+sunRr6O6PGEgaHJlZj0ibWFpbHRvOnNhbGVzQGlmb29kMS5jb20iPnNhbGVz QGlmb29kMS5jb208L2E+IA0KoaGhobXnu7CjujA3NTUtMzc4NjMwOaGhz/rK27K/IMny0KG94yC2 xc/Iyfo8YnI+PC9mb250PjwvcD48cD4mbmJzcDs8L3A+PC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0 PSIzMCIgY29sc3Bhbj0iMiIgYWxpZ249IkNFTlRFUiI+PGZvbnQgc2l6ZT0iMiI+PGI+u9ggDQrW tCCjqMfrtKvV5qO6MDc1NS0zMjM5MDQ3u/Igt6K159fT08q8/qO6IDxhIGhyZWY9Im1haWx0bzpz YWxlc0BpZm9vZDEuY29tIj5zYWxlc0BpZm9vZDEuY29tPC9hPiANCqOpPC9iPjwvZm9udD48L3Rk PjwvdHI+PHRyPjx0ZCBoZWlnaHQ9IjEyIiBjb2xzcGFuPSIyIj48Zm9udCBzaXplPSIyIj6h9SCx vrmry77T0NLizai5/dK8yrPGt9bQufrN+LLO1bkgDQqhoaGhIKH1ILG+uavLvsTivfjSu7K9wcu9 4rjDsqnAwLvho6zH69PrztLDx8Gqz7U8YnI+PGJyPrmry77D+7PGo7pfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXzxicj7Bqs+1yMujul9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX188YnI+PC9mb250Pjxmb250IHNpemU9IjIiPrXnu7Cjul9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX188YnI+tKvV5qO6X19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXzxicj5FLW1haWyjul9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX188YnI+PC9mb250PjwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0iMTIiIGNvbHNwYW49 IjIiIGFsaWduPSJMRUZUIj4mbmJzcDs8L3RkPjwvdHI+PHRyPjx0ZCBoZWlnaHQ9IjEyIiBjb2xz cGFuPSIyIiBhbGlnbj0iTEVGVCI+Jm5ic3A7PC90ZD48L3RyPjx0cj48dGQgaGVpZ2h0PSIxMiIg Y29sc3Bhbj0iMiIgYWxpZ249IkxFRlQiPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90 cj48dHI+PHRkPiZuYnNwOzwvdGQ+PC90cj48dHI+PHRkPiZuYnNwOzwvdGQ+PC90cj48L3RhYmxl PjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K ------=_NextPart_000_2DB81_01C10E1F.694FB150-- From guido@digicool.com Mon Jul 16 14:46:41 2001 From: guido@digicool.com (Guido van Rossum) Date: Mon, 16 Jul 2001 09:46:41 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: Your message of "16 Jul 2001 00:07:44 EDT." References: Message-ID: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> > I added a new script, "idles", which causes a Python Shell to open > instead of the default editor window you get when you use "idle". Hm, the 'idles' script references a package 'idlelib' so it can't be run from within the idle source directory. > opens an empty editor window > opens an editor window for foo.py > opens a shell > opens a shell and an editor window for foo.py > executes foo.py in shell before printing prompt > > The last behaviour is questionable, per GvR. > > Should it exit, or edit foo.py? > > It may be that a better name than "idles" can be found. I chose that because > it was short. Suggestions welcomed! I would merge it back idle.py as a separate command line option. Also note that the usage message printed by idle.py now lies about -e. My proposal: idle -i open a shell idle file edit file idle -i file open a shell and edit file idle -r file run file I would like the output window from F5 to be the shell, so that you can examine the globals in the shell. (This is effectively what TeachScheme does.) --Guido van Rossum (home page: http://www.python.org/~guido/) From bas@andrew.cmu.edu Mon Jul 16 16:30:56 2001 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Mon, 16 Jul 2001 11:30:56 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> Message-ID: <3145610990.995283056@muon> --On Monday, July 16, 2001 9:46 AM -0400 Guido van Rossum wrote: > I would like the output window from F5 to be the shell, so that you > can examine the globals in the shell. I'm not sure I understand the context. But just in case, I'll comment that when running from the editor I very much want to press F5 to run, not CTRL-F5. F5 is a pretty standard shortcut in a lot of Windows applications, and I definitely want some single key to trigger execution. Bruce From guido@digicool.com Mon Jul 16 17:20:28 2001 From: guido@digicool.com (Guido van Rossum) Date: Mon, 16 Jul 2001 12:20:28 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: Your message of "Mon, 16 Jul 2001 11:30:56 EDT." <3145610990.995283056@muon> References: <3145610990.995283056@muon> Message-ID: <200107161620.f6GGKSB31380@odiug.digicool.com> > > I would like the output window from F5 to be the shell, so that you > > can examine the globals in the shell. > > I'm not sure I understand the context. But just in case, I'll comment that > when running from the editor I very much want to press F5 to run, not > CTRL-F5. F5 is a pretty standard shortcut in a lot of Windows applications, > and I definitely want some single key to trigger execution. Agreed. All I want is that instead of the relatively braindead output window, the execution output should go into a PyShell window. This is what TeachScheme does. TeachScheme completely resets the ouput window each time you run the program; I prefer to keep the output from the old session around (like your code does now), with some kind of separator, so you can compare. --Guido van Rossum (home page: http://www.python.org/~guido/) From bas@andrew.cmu.edu Mon Jul 16 17:59:40 2001 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Mon, 16 Jul 2001 12:59:40 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: <200107161620.f6GGKSB31380@odiug.digicool.com> Message-ID: <3150935527.995288380@muon> Sounds interesting. And encouraged to add to the wish list, it would be nice to have some keypress take me to the previous separator. This would be particularly useful when the output for a run is quite long. --On Monday, July 16, 2001 12:20 PM -0400 Guido van Rossum wrote: > Agreed. > > All I want is that instead of the relatively braindead output window, > the execution output should go into a PyShell window. This is what > TeachScheme does. > > TeachScheme completely resets the ouput window each time you run the > program; I prefer to keep the output from the old session around (like > your code does now), with some kind of separator, so you can compare. From kbk@shore.net Mon Jul 16 18:23:49 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 16 Jul 2001 13:23:49 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> References: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> Message-ID: Guido van Rossum writes: > Hm, the 'idles' script references a package 'idlelib' so it can't be > run from within the idle source directory. I can't reproduce a problem; I seem to be able to import idlelib when starting idlefork from anywhere on Linux. PyIdle has the same reference to idlelib, isn't this handled by the __init__.py file in the directory? (Starting from random places works as long as site-packages.pth is set up, but that is necessary to start idlefork because of the way imp.find_modules(...) works, it apparently doesn't handle package syntax [yet]). > > opens an empty editor window opens an editor window > > for foo.py opens a shell opens a shell and an > > editor window for foo.py executes foo.py in shell before > > printing prompt > > > > The last behaviour is questionable, per GvR. > > > > Should it exit, or edit foo.py? > > > > It may be that a better name than "idles" can be found. I chose that > > because it was short. Suggestions welcomed! > > I would merge it back idle.py as a separate command line option. ok, we can always use aliases to avoid carpal tunnel ;) > Also note that the usage message printed by idle.py now lies about -e. > > My proposal: > > idle -i open a shell > idle file edit file > idle -i file open a shell and edit file > idle -r file run file Does the -e option disappear? When a file is run, does the output appear before the prompt like it does in now? Btw, there is a bug in idlefork, if you try to run a non-existing file it barfs, the filename needs to be validated. > Also note that the usage message printed by idle.py now lies about -e. Yes. Will fix with the rest above. > I would like the output window from F5 to be the shell, so that you > can examine the globals in the shell. (This is effectively what > TeachScheme does.) That would seem to be very useful, I wonder what the gotcha is? Regards, KBK From kbk@shore.net Mon Jul 16 18:49:00 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 16 Jul 2001 13:49:00 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: <3150935527.995288380@muon> References: <3150935527.995288380@muon> Message-ID: Bruce Sherwood writes: > --On Monday, July 16, 2001 12:20 PM -0400 Guido van Rossum > > wrote: > > > Agreed. > > > > All I want is that instead of the relatively braindead output window, > > the execution output should go into a PyShell window. This is what > > TeachScheme does. > > > > TeachScheme completely resets the ouput window each time you run the > > program; I prefer to keep the output from the old session around (like > > your code does now), with some kind of separator, so you can compare. > > Sounds interesting. And encouraged to add to the wish list, it would be nice > to have some keypress take me to the previous separator. This would be > particularly useful when the output for a run is quite long. Wow! OK, output into an interactive "shell" window which resets its environment with each run, but which keeps the output of previous run(s) around with delimiting separators. I'd suggest that to avoid massive confusion by students, that in that part of the buffer associated with previous runs the left margin be padded with a character to let people know it belongs to a previous environment. Something like, save the previous output, pad those parts not yet padded, append a fairly strident separator, start the new shell, toss in this stuff, then add the new output? Are we keeping all the old sessions, or just the previous one? Hmm, opening a new window will slow things down, I notice that idlefork reuses the output window and it's much faster the second and subsequent runs. I wonder if it's hard to reuse the "shell" window? And if we have to start a new one, we should kill the previous one to avoid clutter and confusion. Any suggestions on what key to use? Should there be a matching forward jump? Is the "hit return to copy text to the end" function supposed to work, i.e. does this buffer do everything a Python IDLE shell does? Regards, KBK From guido@digicool.com Mon Jul 16 19:13:11 2001 From: guido@digicool.com (Guido van Rossum) Date: Mon, 16 Jul 2001 14:13:11 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: Your message of "16 Jul 2001 13:23:49 EDT." References: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> Message-ID: <200107161813.f6GIDC632428@odiug.digicool.com> > Guido van Rossum writes: > > Hm, the 'idles' script references a package 'idlelib' so it can't be > > run from within the idle source directory. > > I can't reproduce a problem; I seem to be able to import idlelib > when starting idlefork from anywhere on Linux. PyIdle has the same > reference to idlelib, isn't this handled by the __init__.py file in > the directory? I've never used the setup.py script to *install* IDLE. AFAIK no other idle start script references idlelib, it's only created by the installer. > > My proposal: > > > > idle -i open a shell > > idle file edit file > > idle -i file open a shell and edit file > > idle -r file run file > > Does the -e option disappear? It's redundant. > When a file is run, does the output appear before the prompt like it > does in now? Sounds right. > > I would like the output window from F5 to be the shell, so that you > > can examine the globals in the shell. (This is effectively what > > TeachScheme does.) > > That would seem to be very useful, I wonder what the gotcha is? I can't see a gotcha, and Bruce already said he liked this. :-) --Guido van Rossum (home page: http://www.python.org/~guido/) From kbk@shore.net Mon Jul 16 19:47:48 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 16 Jul 2001 14:47:48 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: <200107161813.f6GIDC632428@odiug.digicool.com> References: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> <200107161813.f6GIDC632428@odiug.digicool.com> Message-ID: Guido van Rossum writes: > > Guido van Rossum writes: > > > Hm, the 'idles' script references a package 'idlelib' so it can't be > > > run from within the idle source directory. > > > > I can't reproduce a problem; I seem to be able to import idlelib > > when starting idlefork from anywhere on Linux. PyIdle has the same > > reference to idlelib, isn't this handled by the __init__.py file in > > the directory? > > I've never used the setup.py script to *install* IDLE. You should try it, it works great! Just go "python setup.py install", and it moves everything to the standard places including the help.txt file. > AFAIK no other idle start script references idlelib, it's only created by the > installer. The idle script is part of the source, loewis modified it five months ago to "Allow installation of IDLE via distutils (patch #103138)." The setup.py installer just copies it to /usr/local/bin . > > Does the -e option disappear? > > It's redundant. OK, TIOOWTDI, it disappears... > I can't see a gotcha, and Bruce already said he liked this. :-) :-) Regards, KBK From bas@andrew.cmu.edu Mon Jul 16 20:20:49 2001 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Mon, 16 Jul 2001 15:20:49 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: Message-ID: <3159403884.995296849@muon> On Windows at least "Page Up" and "Page Down" would be appropriate. --On Monday, July 16, 2001 1:49 PM -0400 "Kurt B. Kaiser" wrote: > Any suggestions on what key to use? Should there be a matching forward > jump? From guido@digicool.com Mon Jul 16 20:42:17 2001 From: guido@digicool.com (Guido van Rossum) Date: Mon, 16 Jul 2001 15:42:17 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: Your message of "16 Jul 2001 14:47:48 EDT." References: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> <200107161813.f6GIDC632428@odiug.digicool.com> Message-ID: <200107161942.f6GJgHE00908@odiug.digicool.com> > > I've never used the setup.py script to *install* IDLE. > > You should try it, it works great! Just go "python setup.py > install", and it moves everything to the standard places including > the help.txt file. I believe you, but when developing it's a pain when you have to install something before you can test it. We're being very careful that Python itself can be run directly from the build directory, and until you added "idles", the same was true for IDLE! I want that property back, it's useful. (Sorry for not making this clear.) > > AFAIK no other idle start script references idlelib, it's only > > created by the installer. > > The idle script is part of the source, loewis modified it five months ago to > "Allow installation of IDLE via distutils (patch #103138)." Ah, I see. I've always just used idle.py. Note that importing IdleConf is no longer needed, I think. --Guido van Rossum (home page: http://www.python.org/~guido/) From dscherer@vysics.com Tue Jul 17 01:11:15 2001 From: dscherer@vysics.com (David Scherer) Date: Mon, 16 Jul 2001 20:11:15 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: Message-ID: <002901c10e54$fe777d50$8101a8c0@RABBIT> > OK, output into an interactive "shell" window which resets > its environment with each run, but which keeps the output of > previous run(s) around with delimiting separators. > > I'd suggest that to avoid massive confusion by students, that > in that part of the buffer associated with previous runs the > left margin be padded with a character to let people know it > belongs to a previous environment. Sounds like a good use for a different color, which would set things off even better and wouldn't interfere with cut and paste. However, I should also note that (correct me if I'm wrong, Bruce!) we haven't seen that much confusion of this kind given the scrolling behavior (see next paragraph). > Something like, save the previous output, pad those parts not > yet padded, append a fairly strident separator, start the new > shell, toss in this stuff, then add the new output? I made OutputWindow scroll so that the top line is the first line of the new output. This mostly combines the advantages of clearing the window with the advantages of keeping the old stuff. > Are we keeping all the old sessions, or just the previous one? The existing implementation keeps all, and it hasn't been a problem in practice as far as I know. > Hmm, opening a new window will slow things down, I notice > that idlefork reuses the output window and it's much faster > the second and subsequent runs. I wonder if it's hard to > reuse the "shell" window? And if we have to start a new one, > we should kill the previous one to avoid clutter and confusion. Reuse the window for different runs of the same program. For runs of different programs this is debatable, and some kind of fancy tabbed (multi-buffer) window would probably be ideal. I don't suggest confounding that feature with this one, though! > Is the "hit return to copy text to the end" function supposed > to work, i.e. does this buffer do everything a Python IDLE shell does? Well, why not? :) This is where Guido's remote execution patch probably comes in - presumably he found a good way to use all of that PyShell functionality over RPC. Dave From rnd@onego.ru Tue Jul 17 05:16:02 2001 From: rnd@onego.ru (Roman Suzi) Date: Tue, 17 Jul 2001 08:16:02 +0400 (MSD) Subject: [Idle-dev] IDLE is spoiling Python image! Message-ID: This is more appropriate place to post this, so I repost. I was reminded that this is already reported as a bug https://sourceforge.net/tracker/index.php?func=3Ddetail&aid=3D441472&grou= p_id=3D9579&atid=3D109579 but I believe this is more important for Python as a language than MOST other features or missing features of IDLE combined, because IDLE can't b= e used for non-latin1 works AT ALL. Well, all this explained below. Please, note that Kirill Simonov suggests patches and we could produce more patches if needed. * >From rnd@onego.ru Tue Jul 17 08:08:59 2001 Date: Sun, 15 Jul 2001 11:38:04 +0400 (MSD) From: Roman Suzi To: python-list@python.org, python-dev@python.org Cc: guido@python.org Subject: This is spoiling Python image! The problem: it is impossible to use IDLE with non-latin1 encodings under Windows. IDLE is standard IDE for Python and it is what beginner users of Python see in their Start->Programs. Unfortunately, IDLE can't work with non-latin1 characters any more. This could lead beginners to reconsider their choice of language because of unfriendly i18n issues. The problem is explained in detail below. Lets consider all errors one at a time. 1. Tcl can't find encodings (they are in \Python21\tcl\tcl8.3\encoding\). Without them it is impossible to enter cyrillic and other kinds of letter= s in Text and Entry widgets under Windows. Tkinter tries to help Tcl by means of FixTk.py: import sys, os, _tkinter ver =3D str(_tkinter.TCL_VERSION) for t in "tcl", "tk": v =3D os.path.join(sys.prefix, "tcl", t+ver) if os.path.exists(os.path.join(v, "tclIndex")): os.environ[t.upper() + "_LIBRARY"] =3D v This sets env. variables TCL_LIBRARY and TK_LIBRARY to "C:\Python21\tcl\tcl8.3". The problem is that it imports _tkinter which initialises and calls Tcl_FindExecutable before TCL_LIBRARY is set. It is easy to fix this error in FixTk.py: import sys, os if not os.environ.has_key('TCL_LIBRARY'): tcl_library =3D os.path.join(sys.prefix, "tcl", "tclX.Y") os.environ['TCL_LIBRARY'] =3D tcl_library Tcl is smart enough to look into "C:\Python21\tcl\tclX.Y\..\tcl8.3" as well. 2. Now we are able to print in IDLE: >>> print "=F0=D2=C9=D7=C5=D4" and we will see russian letter... before we press Enter, after which: UnicodeError: ASCII decoding error: ordinal not in range(128) appears. Tcl recoded "=F0=D2=C9=D7=C5=D4" into Unicode. Python tries to recode it = back into usual string, assuming usual strings have sys.getdefaultencoding(). Now we need to set default encoding. Lets look into site.py: # Set the string encoding used by the Unicode implementation. The # default is 'ascii', but if you're willing to experiment, you can # change this. encoding =3D "ascii" # Default value set by _PyUnicode_Init() if 0: # Enable to support locale aware default string encodings. import locale loc =3D locale.getdefaultlocale() if loc[1]: encoding =3D loc[1] if 0: # Enable to switch off string to Unicode coercion and implicit # Unicode to string conversion. encoding =3D "undefined" if encoding !=3D "ascii": sys.setdefaultencoding(encoding) The code for setting default encoding is commented (maybe, to allow faste= r startup?) Then goes: # # Run custom site specific code, if available. # try: import sitecustomize except ImportError: pass # # Remove sys.setdefaultencoding() so that users cannot change the # encoding after initialization. The test for presence is needed when # this module is run as a script, because this code is executed twice. # if hasattr(sys, "setdefaultencoding"): del sys.setdefaultencoding So, sys.setdefaultencoding is deleted after we used it in sitecustomize.py. Its too bad, because the program can't set default encoding and implicit string<->unicode conversions are very common in Python and IDLE. The solution could be as follows. Lets put sitecustomize.py in C:\Python21\ with the following: import locale, sys encoding =3D locale.getdefaultlocale()[1] if encoding: sys.setdefaultencoding(encoding) * It would be wonderful if IDLE itself could setup encoding based on locale or issued warnings and pointed t o solution somehow. 3. Now we can try it again in IDLE: >>> print "=F0=D2=C9=D7=C5=D4" after hitting Enter we are getting... latin1. It's time to look at how _tkinter.c communicates with Tcl. The cheap&dirty solution for IDLE is as follows: --- Percolator.py.orig Sat Jul 14 19:38:16 2001 +++ Percolator.py Sat Jul 14 19:38:16 2001 @@ -22,6 +22,8 @@ def insert(self, index, chars, tags=3DNone): # Could go away if inheriting from Delegator + if index !=3D 'insert': + chars =3D unicode(chars) self.top.insert(index, chars, tags) def delete(self, index1, index2=3DNone): --- PyShell.py.orig Sat Jul 14 19:38:37 2001 +++ PyShell.py Sat Jul 14 19:38:37 2001 @@ -469,6 +469,8 @@ finally: self.reading =3D save line =3D self.text.get("iomark", "end-1c") + if type(line) =3D=3D type(u""): + line =3D line.encode() self.resetoutput() if self.canceled: self.canceled =3D 0 But alas these patches only mask the problem. What is really needed? Starting from version 8.1 Tcl is totally unicoded. It is very simple: tt wants us utf-8 strings and returns also utf-8 strings. (As an exception, Tcl could assume latin1 if it is unable to decode string). _tkinter.c just sends Python strings as is to Tcl. And does it correctly for Unicode strings. Receiving side is slightly more complicated: Tkapp_Call function (aka root.tk.call) handles most of the Tkinter Tcl/Tk commands. If the result is 7bit clean, Tkapp_Call returns usual string, if not -- it converts from utf-8 into unicode and returns Unicode string. Only Tkapp_Call does it. All others (Tkapp_Eval, GetVar, PythonCmd) return utf-8 string! IDLE extensively use Tkinter capabilities and all kinds of strings go back and forth between Python and Tcl. Of course, _tkinter.c works incorrectly. i) before sending a string to Tcl, it must recode it FROM default encoding TO utf-8 ii) upon receive of a string from Tcl, it must recode it from utf-8 to default encoding, if possible. [R.S.: Or return it as Unicode, if impossible] It is possible to optimize the conversions. Of course, this will have impact on the speed of Tkinter. But in our opinion correct work is more important than speed. Solution checked under Win98. >From R.S.: yes, IDLE is not ideal and there are better IDEs (Emacs, for example) and "serious" programmers rarely use it. Also Tkinter is critisized much, etc. But the problem indicated above is very bad for Python image as a user-friendly language. That is why it is very important to FIX the problem as soon, as possible. We can prepare patches for _tkinter.c as well. Before we proceed to submitting bug-reports and patches, we will be glad to hear if somebody has better solution to the indicated problem. (The big deal of the problem is the need to patch _tkinter.c and recompil= e it. Everything else even beginner could fix if supplied with clues and files with fixes. But of course, Python's IDLE must run correct out of th= e box). Author: Kirill Simonov Translator: Roman Suzi --=20 http://mail.python.org/mailman/listinfo/python-list Sincerely yours, Roman Suzi --=20 _/ Russia _/ Karelia _/ Petrozavodsk _/ rnd@onego.ru _/ _/ Tuesday, July 17, 2001 _/ Powered by Linux RedHat 6.2 _/ _/ "...put knot yore trust inn spel chequers." _/ From kbk@users.sourceforge.net Tue Jul 17 05:59:03 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Mon, 16 Jul 2001 21:59:03 -0700 Subject: [Idle-dev] CVS: idle PyShell.py,1.6,1.7 idle,1.2,1.3 idles,1.1,NONE Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv11350 Modified Files: PyShell.py idle Removed Files: idles Log Message: Implement idle command interface as suggested by GvR [idle-dev] 16 July **************** PyShell: Added functionality: usage: idle.py [-c command] [-d] [-i] [-r script] [-s] [-t title] [arg] ... idle file(s) (without options) edit the file(s) -c cmd run the command in a shell -d enable the debugger -i open an interactive shell -i file(s) open a shell and also an editor window for each file -r script run a file as a script in a shell -s run $IDLESTARTUP or $PYTHONSTARTUP before anything else -t title set title of shell window Remaining arguments are applied to the command (-c) or script (-r). ****************** idles: Removed the idles script, not needed ****************** idle: Removed the IdleConf references, not required anymore Index: PyShell.py =================================================================== RCS file: /cvsroot/idlefork/idle/PyShell.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** PyShell.py 2001/07/16 05:25:12 1.6 --- PyShell.py 2001/07/17 04:59:01 1.7 *************** *** 710,724 **** usage_msg = """\ ! usage: idle.py [-c command] [-d] [-e] [-s] [-t title] [arg] ... ! -c command run this command ! -d enable debugger ! -e edit mode; arguments are files to be edited ! -s run $IDLESTARTUP or $PYTHONSTARTUP before anything else ! -t title set title of shell window ! ! When neither -c nor -e is used, and there are arguments, and the first ! argument is not '-', the first argument is run as a script. Remaining ! arguments are arguments to the script or to the command run by -c. """ --- 710,726 ---- usage_msg = """\ ! usage: idle.py [-c command] [-d] [-i] [-r script] [-s] [-t title] [arg] ... ! idle file(s) (without options) edit the file(s) ! ! -c cmd run the command in a shell ! -d enable the debugger ! -i open an interactive shell ! -i file(s) open a shell and also an editor window for each file ! -r script run a file as a script in a shell ! -s run $IDLESTARTUP or $PYTHONSTARTUP before anything else ! -t title set title of shell window ! ! Remaining arguments are applied to the command (-c) or script (-r). """ *************** *** 782,789 **** edit = 0 debug = 0 startup = 0 try: ! opts, args = getopt.getopt(argv, "c:deist:") except getopt.error, msg: sys.stderr.write("Error: %s\n" % str(msg)) --- 784,793 ---- edit = 0 debug = 0 + interactive = 0 + script = None startup = 0 try: ! opts, args = getopt.getopt(argv, "c:dir:st:") except getopt.error, msg: sys.stderr.write("Error: %s\n" % str(msg)) *************** *** 792,802 **** for o, a in opts: ! noshell = 0 if o == '-c': cmd = a if o == '-d': debug = 1 ! if o == '-e': ! edit = 1 if o == '-s': startup = 1 --- 796,808 ---- for o, a in opts: ! noshell = 0 # There are options, bring up a shell if o == '-c': cmd = a if o == '-d': debug = 1 ! if o == '-i': ! interactive = 1 ! if o == '-r': ! script = a if o == '-s': startup = 1 *************** *** 805,808 **** --- 811,815 ---- if noshell: edit=1 + if interactive and args and args[0] != "-": edit = 1 for i in range(len(sys.path)): *************** *** 861,867 **** if cmd: interp.execsource(cmd) ! elif not edit and args and args[0] != "-": ! interp.execfile(args[0]) ! shell.begin() --- 868,876 ---- if cmd: interp.execsource(cmd) ! elif script: ! if os.path.isfile(script): ! interp.execfile(script) ! else: ! print "No script file: ", script shell.begin() Index: idle =================================================================== RCS file: /cvsroot/idlefork/idle/idle,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** idle 2001/07/04 03:15:10 1.2 --- idle 2001/07/17 04:59:01 1.3 *************** *** 1,12 **** #! /usr/bin/env python ! import os ! import sys ! from idlelib import IdleConf ! ! idle_dir = os.path.dirname(IdleConf.__file__) ! IdleConf.load(idle_dir) ! ! # defer importing Pyshell until IdleConf is loaded ! from idlelib import PyShell PyShell.main() --- 1,4 ---- #! /usr/bin/env python ! import PyShell PyShell.main() --- idles DELETED --- From kbk@users.sourceforge.net Tue Jul 17 06:01:06 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Mon, 16 Jul 2001 22:01:06 -0700 Subject: [Idle-dev] CVS: idle coexist.patch,1.1,NONE Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv13470 Removed Files: coexist.patch Log Message: Put this in the attic, at least for now... --- coexist.patch DELETED --- From kbk@users.sourceforge.net Tue Jul 17 06:12:44 2001 From: kbk@users.sourceforge.net (Kurt B. Kaiser) Date: Mon, 16 Jul 2001 22:12:44 -0700 Subject: [Idle-dev] CVS: idle INSTALLATION,1.1,1.2 setup.py,1.4,1.5 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv14862 Modified Files: INSTALLATION setup.py Log Message: INSTALLATION: Remove the coexist.patch instructions **************** setup.py: Remove the idles script, add some words on IDLE Fork to the long_description, and clean up some line spacing. Index: INSTALLATION =================================================================== RCS file: /cvsroot/idlefork/idle/INSTALLATION,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** INSTALLATION 2001/07/16 07:08:20 1.1 --- INSTALLATION 2001/07/17 05:12:42 1.2 *************** *** 36,54 **** NOTE that the above procedure will install idlefork IDLE on top of any ! "official" IDLE that may be already installed. If you wish to avoid doing ! that, there is a patch file, coexist.patch, in the idlefork directory. If, ! _*before*_ you install idle, you run ! ! # patch -p0 < coexist.patch ! ! idlefork will be modified so that it installs as .../site-packages/fildlelib, ! idle as fidle, and idles as fidles. (If you previously installed without ! patching, remove the idlefork/build directory before running the install.) ! ! NOTE: You must then append "fidlelib" to site-packages.pth ! ! ! Then "official" IDLE and idlefork IDLE will exist side by side for comparision. ! And if idlefork is temporarily broken :-(, well, you have your old IDLE ways. ! ! This is obviously an expedient development hack, but if popular, I imagine ! there could be a setup option. --- 36,38 ---- NOTE that the above procedure will install idlefork IDLE on top of any ! "official" IDLE that may be already installed. \ No newline at end of file Index: setup.py =================================================================== RCS file: /cvsroot/idlefork/idle/setup.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** setup.py 2001/07/16 04:00:10 1.4 --- setup.py 2001/07/17 05:12:42 1.5 *************** *** 56,59 **** --- 56,60 ---- # Arghhh. install_lib thinks that all files returned from build_py's # get_outputs are bytecode files + class idle_install_lib(install_lib): def _bytecode_filenames(self, files): *************** *** 61,68 **** return install_lib._bytecode_filenames(self,files) - setup(name="IDLE", version = idlever.IDLE_VERSION, ! description = "IDLE, the Python IDE", author = "Guido van Rossum", author_email = "guido@python.org", --- 62,68 ---- return install_lib._bytecode_filenames(self,files) setup(name="IDLE", version = idlever.IDLE_VERSION, ! description = "IDLE Fork, the Forked Python IDE", author = "Guido van Rossum", author_email = "guido@python.org", *************** *** 72,76 **** Python and works both on Windows and Unix. It features a multi-window text editor with multiple undo, Python colorizing, and many other things, ! as well as a Python shell window and a debugger.""", cmdclass = {'build_py':idle_build_py, --- 72,81 ---- Python and works both on Windows and Unix. It features a multi-window text editor with multiple undo, Python colorizing, and many other things, ! as well as a Python shell window and a debugger. ! ! IDLE Fork is a separate line of development which was initiated by D. Scherer ! at CMU as part of Visual Python. It features execution in a separate ! process, with a fresh environment for each run. For further details, ! refer to idlefork.sourceforge.net.""", cmdclass = {'build_py':idle_build_py, *************** *** 78,81 **** package_dir = {idlelib:'.'}, packages = [idlelib], ! scripts = ['idle', 'idles'] ) --- 83,86 ---- package_dir = {idlelib:'.'}, packages = [idlelib], ! scripts = ['idle'] ) From kbk@shore.net Tue Jul 17 06:39:45 2001 From: kbk@shore.net (Kurt B. Kaiser) Date: 17 Jul 2001 01:39:45 -0400 Subject: [Idle-dev] Startup Shell Functionality In-Reply-To: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> References: <200107161346.JAA15232@cj20424-a.reston1.va.home.com> Message-ID: Guido van Rossum writes: > I would merge it [idles] back idle.py as a separate command line option. > > Also note that the usage message printed by idle.py now lies about -e. > > My proposal: > > idle -i open a shell > idle file edit file > idle -i file open a shell and edit file > idle -r file run file OK, I hope I've got that done. Check the new usage message. I killed idles and the coexist.patch, for now at least. I'm out of here, going to drag the boat 1500 miles to the west and sail on some fresh water for a change. See you guys in couple of weeks. Regards, KBK From guido@digicool.com Tue Jul 17 15:17:32 2001 From: guido@digicool.com (Guido van Rossum) Date: Tue, 17 Jul 2001 10:17:32 -0400 Subject: [Idle-dev] IDLE is spoiling Python image! In-Reply-To: Your message of "Tue, 17 Jul 2001 08:16:02 +0400." References: Message-ID: <200107171417.KAA20331@cj20424-a.reston1.va.home.com> > I believe this is more important for Python as a language than MOST > other features or missing features of IDLE combined, because IDLE can't be > used for non-latin1 works AT ALL. Of course, that depends on how large the fraction of IDLE users is that have this need. Here in the US it is perceived as near zero. Of course in Russia it is perceived as near 100%, since Cyrillic is not part of Latin-1. The truth is probably somewhere in the middle, but I want to warn you that you are probably exaggerating the importance, world-wide, at this moment. --Guido van Rossum (home page: http://www.python.org/~guido/) From rnd@onego.ru Tue Jul 17 15:42:07 2001 From: rnd@onego.ru (Roman Suzi) Date: Tue, 17 Jul 2001 18:42:07 +0400 (MSD) Subject: [Idle-dev] IDLE is spoiling Python image! In-Reply-To: <200107171417.KAA20331@cj20424-a.reston1.va.home.com> Message-ID: On Tue, 17 Jul 2001, Guido van Rossum wrote: > > I believe this is more important for Python as a language than MOST > > other features or missing features of IDLE combined, because IDLE can't be > > used for non-latin1 works AT ALL. > > Of course, that depends on how large the fraction of IDLE users is > that have this need. Here in the US it is perceived as near zero. Of > course in Russia it is perceived as near 100%, since Cyrillic is not > part of Latin-1. The truth is probably somewhere in the middle, but I > want to warn you that you are probably exaggerating the importance, > world-wide, at this moment. OK. Maybe latin1 could approximate world-wide. But the problem is that those who want to learn what Python just drop their attempt, because when they try to write in their native language in IDLE they are getting non-sensical errors (like scripts which do not want to open, etc). I am speaking of Windows's users(*): they see IDLE in the main menu. Of course it is not matter for experienced users and programmers: they know that lack of cyrillic in IDLE doesn't mean the language is bad as well. (*)(Linux users are accustomed that cyrillic could not work and this is not of much problem to "cyrillize", making all latin1 fonts cyrillic fonts without any fuss.) So, Inow could not even recommend Python 2.x for those who learn/teach it by means of IDLE! And command line is ugly in Windows, you know. That is why I argue that IDLE is a Python's *visit card* and it could be however simple and featureless, but it must work right for everyone with rightly localised OS setup. That is why me, Kirill and other Python users from Russia like to see this situation corrected as soon as possible and are suggesting to develop patches. 'cause we like Python and want more people here to teach and learn it. It's not only matter of fraction of IDLE users. Its a matter of Python greeting it's new users in a friendly way. Later they will learn that IDLE is probably not the best way to program, but they will never look at Python again remembering that it was wrong and concluding that it could be wrong not only in the such simple thing as right encoding. (Who will explain them that IDLE is dependent on Tcl/Tk and that such misfortune happened with transition to v8 of it. They tried to use Python not some Tcl/Tk they never knew about). I hope I was clear in my explanation why current IDLE makes Python advocacy difficult here in Russia. If we could solve it without too much slowing latin1 people, then there is no arguments why not to do it. Anyway, solution must be simpler than recompiling _tkinter.c. Sincerely yours, Roman A.Suzi -- - Petrozavodsk - Karelia - Russia - mailto:rnd@onego.ru - From bas@andrew.cmu.edu Tue Jul 17 16:05:44 2001 From: bas@andrew.cmu.edu (Bruce Sherwood) Date: Tue, 17 Jul 2001 11:05:44 -0400 Subject: [Idle-dev] Copy buffer? Message-ID: <3230499009.995367944@muon> Forgive me if this is a well-known bug in Idle: Copy something, click to insert somewhere, accidentally hit Copy again, and you lose your copy buffer. In all other editors known to me, a Copy operation from an empty selection is treated as a null operation. I've gotten caught by this a number of times. (I sent this note just to Kurt Kaiser, thinking I would annoy only one person instead of the whole list, then saw his note about a well-deserved vacation!) Bruce Sherwood From guido@digicool.com Tue Jul 17 16:37:36 2001 From: guido@digicool.com (Guido van Rossum) Date: Tue, 17 Jul 2001 11:37:36 -0400 Subject: [Idle-dev] Copy buffer? In-Reply-To: Your message of "Tue, 17 Jul 2001 11:05:44 EDT." <3230499009.995367944@muon> References: <3230499009.995367944@muon> Message-ID: <200107171537.f6HFbab07287@odiug.digicool.com> > Forgive me if this is a well-known bug in Idle: > > Copy something, click to insert somewhere, accidentally hit Copy again, and > you lose your copy buffer. > > In all other editors known to me, a Copy operation from an empty selection > is treated as a null operation. I've gotten caught by this a number of > times. > > (I sent this note just to Kurt Kaiser, thinking I would annoy only one > person instead of the whole list, then saw his note about a well-deserved > vacation!) > > Bruce Sherwood I think it's a Tk text widget ideosyncracy. I don't care much for the default bindings of the text widget; fixing this is somewhere on the TO DO list. --Guido van Rossum (home page: http://www.python.org/~guido/) From elguavas@users.sourceforge.net Thu Jul 19 05:49:15 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 18 Jul 2001 21:49:15 -0700 Subject: [Idle-dev] CVS: idle ChangeLog,1.2,1.3 EditorWindow.py,1.4,1.5 INSTALLATION,1.2,1.3 NEWS.txt,1.2,1.3 README.txt,1.2,1.3 TODO.txt,1.3,1.4 idlever.py,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv13156 Modified Files: ChangeLog EditorWindow.py INSTALLATION NEWS.txt README.txt TODO.txt idlever.py Log Message: minor tidy-ups ready for 0.8.1 alpha tarball release Index: ChangeLog =================================================================== RCS file: /cvsroot/idlefork/idle/ChangeLog,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** ChangeLog 2001/07/04 03:15:10 1.2 --- ChangeLog 2001/07/19 04:49:13 1.3 *************** *** 1,2 **** --- 1,5 ---- + original IDLE ChangeLog: + ======================== + Tue Feb 15 18:08:19 2000 Guido van Rossum Index: EditorWindow.py =================================================================== RCS file: /cvsroot/idlefork/idle/EditorWindow.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** EditorWindow.py 2001/07/14 03:58:25 1.4 --- EditorWindow.py 2001/07/19 04:49:13 1.5 *************** *** 79,93 **** ! about_title = "About IDLE" about_text = """\ ! IDLE %s ! An Integrated DeveLopment Environment for Python ! by Guido van Rossum ! This version of IDLE has been modified by David Scherer ! (dscherer@cmu.edu). See readme.txt for details. ! """ % idlever.IDLE_VERSION class EditorWindow: --- 79,101 ---- ! about_title = "About IDLEfork" about_text = """\ ! IDLEfork %s ! IDLE is an Integrated DeveLopment Environment for Python \ ! by Guido van Rossum. ! IDLEfork is an official experimental development version of IDLE. ! Succesful new features in IDLEfork will be mereged back in to stable IDLE. ! This version of IDLEfork is based on the work in stable IDLE version %s, \ ! IDLEfork 0.7.1 released by David Scherer, and the VPython idle fork. ! ! See README.txt for more details on IDLEfork. ! ! WARNING: IDLEfork is at this stage alpha quality software, expect things \ ! to be broken. ! ! """ % (idlever.IDLEFORK_VERSION, idlever.IDLE_VERSION) class EditorWindow: Index: INSTALLATION =================================================================== RCS file: /cvsroot/idlefork/idle/INSTALLATION,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** INSTALLATION 2001/07/17 05:12:42 1.2 --- INSTALLATION 2001/07/19 04:49:13 1.3 *************** *** 1,2 **** --- 1,5 ---- + INSTALLATION from IDLE fork 0.7.1 : + =================================== + IDLE Fork Installation on Linux: *************** *** 36,38 **** NOTE that the above procedure will install idlefork IDLE on top of any ! "official" IDLE that may be already installed. \ No newline at end of file --- 39,41 ---- NOTE that the above procedure will install idlefork IDLE on top of any ! "official" IDLE that may be already installed. Index: NEWS.txt =================================================================== RCS file: /cvsroot/idlefork/idle/NEWS.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** NEWS.txt 2001/07/04 03:15:10 1.2 --- NEWS.txt 2001/07/19 04:49:13 1.3 *************** *** 1,2 **** --- 1,5 ---- + original IDLE NEWS.txt : + ======================== + (For a more detailed change log, see the file ChangeLog.) Index: README.txt =================================================================== RCS file: /cvsroot/idlefork/idle/README.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** README.txt 2001/07/04 03:15:10 1.2 --- README.txt 2001/07/19 04:49:13 1.3 *************** *** 1,2 **** --- 1,5 ---- + README from IDLE fork 0.7.1 : + ============================= + EXPERIMENTAL LOADER IDLE 2000-05-29 ----------------------------------- Index: TODO.txt =================================================================== RCS file: /cvsroot/idlefork/idle/TODO.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** TODO.txt 2001/07/12 06:38:24 1.3 --- TODO.txt 2001/07/19 04:49:13 1.4 *************** *** 1,3 **** ! TO DO: --- 1,4 ---- ! Original IDLE todo, much of it now outdated: ! ============================================ TO DO: Index: idlever.py =================================================================== RCS file: /cvsroot/idlefork/idle/idlever.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** idlever.py 2001/07/12 04:44:48 1.3 --- idlever.py 2001/07/19 04:49:13 1.4 *************** *** 1 **** --- 1,2 ---- IDLE_VERSION = "0.8" + IDLEFORK_VERSION = "0.8.1" From elguavas@users.sourceforge.net Thu Jul 19 07:39:08 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 18 Jul 2001 23:39:08 -0700 Subject: [Idle-dev] CVS: idle IDLEFORK-index.html,NONE,1.1 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv1222 Added Files: IDLEFORK-index.html Log Message: updated placeholder idlefork homepage --- NEW FILE: IDLEFORK-index.html --- IDLEfork
  
Python Home Page IDLE Home Page Python Download Python Documentation
Python Help Python News Python Community Python SIGs
IDLEfork

Sourceforge Project Page
Downloads
Bug Reports
Submit Patches
Browse CVS
 
Mailing List

IDLE-dev
 



 
 
 
  SourceForge Logo  
  

The IDLEfork Project

Summary

This project is an official experimental development fork of Python's small, light, 'bundled' integrated development environment, IDLE. Changes to this version that are approved by Python's benevolent dictator for life will go back into the stable distribution version. 

The project is hosted by SourceForge and its project page can be found at the following address: http://sourceforge.net/projects/idlefork

Contribution

Everyone interested in IDLE is invited to contribute to the IDLEfork by means of discussion, bug reports and patches. If you want to contribute to the IDLE fork regularly, you can become a developer by mailing the project coordinator, Stephen M. Gava  <elguavas@users.sourceforge.net>

Discussion

Discussion of development for IDLE is carried out on the idle-dev mailing list  <idle-dev@python.org> at the Python Language Website. Subscription information can be found at: http://www.python.org/mailman/listinfo/idle-dev

Bug Reports

IDLEfork uses the Bug Tracking facility provided by SourceForge. It can be found at: http://sourceforge.net/bugs/?group_id=9579

Patches

For patches the Patch Manager at SourceForge is used. This can be found at: http://sourceforge.net/patch/?group_id=9579

From elguavas@users.sourceforge.net Thu Jul 19 07:40:44 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Wed, 18 Jul 2001 23:40:44 -0700 Subject: [Idle-dev] CVS: idle IDLEFORK.html,1.7,NONE Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv1484 Removed Files: IDLEFORK.html Log Message: replaced by IDLEFORK-index.html --- IDLEFORK.html DELETED --- From joonas@olen.to Thu Jul 19 13:32:44 2001 From: joonas@olen.to (Joonas Paalasmaa) Date: Thu, 19 Jul 2001 15:32:44 +0300 (EEST) Subject: [Idle-dev] Strange key for copying text Message-ID: <7636882.995545964852.JavaMail.joonas@olen.to> When I am copying some text in Idle with Alt+W Windows dropdown list is unfolded, because it starts with W. And it's really annoying. Is this a bug or a desired feature? I am running Python2.1 on RH7.0 From mats@laplaza.org Thu Jul 19 15:35:36 2001 From: mats@laplaza.org (Mats Wichmann) Date: Thu, 19 Jul 2001 08:35:36 -0600 Subject: [Idle-dev] Strange key for copying text In-Reply-To: <7636882.995545964852.JavaMail.joonas@olen.to> Message-ID: <5.1.0.14.1.20010719081337.020aeb40@laplaza.org> At 03:32 PM 7/19/2001 +0300, Joonas Paalasmaa wrote: >When I am copying some text in Idle with Alt+W Windows dropdown list is >unfolded, because it starts with W. >And it's really annoying. >Is this a bug or a desired feature? >I am running Python2.1 on RH7.0 I'm not sure it's really either, but it's certainly unfortunate. The keybinding issue on UNIX/Linux machines is complicated by different users, and different window manager styles, wanting different keys for the same thing. For example, on most systems the tty driver - the thing controlling your keyboard input - has bindings for Ctrl-C and Ctrl-V so they're not reasonable available for Copy and Paste, unlike on MS-Windows. The alternative choices are not ideal, as you've found... You can edit the keybindings yourself without too much trouble for a "quick fix" (pick something else for Copy), and it seems to me there was talk about not basing the choice of keybindings purely on operating system - i.e. allowing some user choice, but I don't know if that's on the current TODO list. By the way, it's also irritating, on Linux, that the File, Debug and Windows menus stay up on selection, but the Edit menu does not. Is this some Tk idosyncracy, or it is intentional? Inconsistent behavior like this is always troubling. Mats From guido@digicool.com Thu Jul 19 15:49:14 2001 From: guido@digicool.com (Guido van Rossum) Date: Thu, 19 Jul 2001 10:49:14 -0400 Subject: [Idle-dev] Jonathan Lee: Bug in IDLE Message-ID: <200107191449.f6JEnEb12714@odiug.digicool.com> ------- Forwarded Message Date: Thu, 19 Jul 2001 09:35:59 -0500 From: Jonathan Lee To: "'guido@python.org'" Subject: Bug in IDLE Hi Guido, Here's a bug/"undocumented feature" I found in the IDLE program. I didn't find anything about it mentioned in the documentation, so I thought I would inform you about it. Sorry for bothering you if you already know about it. I'm running IDLE 0.8 with Python 2.1 under Windows 2000 Professional. I was running an example program that I pulled out of a message on a SIG list (full code included below) for the threading.py module and discovered that under IDLE the program never completed. It seemed to get stuck in the following loop under the 'main' conditional: while threading.activeCount() > 1 : print ".", time.sleep(1) At a command line prompt, the program took about 35 seconds to complete. Under IDLE, I finally killed it after it still hadn't completed after ~20 minutes. Is there a different function that should be used as the loop condition, is the activeCount() function including the IDLE threads in its count, or is the execution speed under IDLE really that much slower for this type of code? Sincerely, Jonathan Lee P.S. Is there some place I could obtain example code for the various modules included in the more recent editions of Python. The two modules I've needed so far that I didn't find any example code for were the "SocketServer" and the "threading" modules. I found the demo programs from the python source code on SourceForge, but they only use the more primitive "socket" and "thread" modules. ################################################################## import urllib, time import threading retrieveDoc = 1 numPings = 20 numThreads = 5 url = 'http://www.foo.com/' class ping ( threading.Thread ) : def __init__ ( self, url, numPings, retrieveDoc=1 ) : self.url = url self.numPings = numPings self.retrieveDoc = retrieveDoc threading.Thread.__init__(self) def run ( self ) : StartTime = time.time() for i in range(self.numPings): page = urllib.urlopen ( self.url ) if self.retrieveDoc: page.read() page.close() EndTime = time.time() self.TotalTime = EndTime - StartTime if __name__ == '__main__' : threadList = [] for i in range(numThreads) : thread = ping ( url, numPings, retrieveDoc ) threadList.append ( thread ) StartTime = time.time() for thread in threadList : thread.start() while threading.activeCount() > 1 : print ".", time.sleep(1) EndTime = time.time() TotalTime = EndTime - StartTime print TotalPings = 0 ThreadTime = 0 for thread in threadList : TotalPings = TotalPings + thread.numPings ThreadTime = ThreadTime + thread.TotalTime PingAvg = TotalPings / TotalTime ResponseAvg = ThreadTime / TotalPings print "Threads: ", numThreads print "Pings:", TotalPings print "Total time:", TotalTime print "Pings per second:", PingAvg print "Average response time (secs):", ResponseAvg ------- End of Forwarded Message From StephenM.Gava Fri Jul 20 01:02:31 2001 From: StephenM.Gava (StephenM.Gava) Date: Fri, 20 Jul 2001 10:02:31 +1000 Subject: [Idle-dev] Strange key for copying text In-Reply-To: <5.1.0.14.1.20010719081337.020aeb40@laplaza.org> References: <5.1.0.14.1.20010719081337.020aeb40@laplaza.org> Message-ID: <01072010023100.00298@oberon> Mats Wichmann wrote: > At 03:32 PM 7/19/2001 +0300, Joonas Paalasmaa wrote: > >When I am copying some text in Idle with Alt+W Windows dropdown list is > >unfolded, because it starts with W. > >And it's really annoying. > >Is this a bug or a desired feature? > >I am running Python2.1 on RH7.0 > > I'm not sure it's really either, but it's certainly > unfortunate. The keybinding issue on UNIX/Linux > machines is complicated by different users, and > different window manager styles, wanting different > keys for the same thing. [...] > You can edit the keybindings yourself without too > much trouble for a "quick fix" (pick something else > for Copy), and it seems to me there was talk about > not basing the choice of keybindings purely on > operating system - i.e. allowing some user choice, > but I don't know if that's on the current TODO list. > User configurability of things like keybindings, fonts, and colours are one of the areas we intend to address on the IDLEfork IDLE development branch. -- Stephen M. Gava "More power to those who don't care for it." - anon From elguavas@users.sourceforge.net Fri Jul 20 02:35:49 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Thu, 19 Jul 2001 18:35:49 -0700 Subject: [Idle-dev] CVS: idle README.txt,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv1297 Modified Files: README.txt Log Message: bring up to date for 0.8.1 release Index: README.txt =================================================================== RCS file: /cvsroot/idlefork/idle/README.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** README.txt 2001/07/19 04:49:13 1.3 --- README.txt 2001/07/20 01:35:47 1.4 *************** *** 1,2 **** --- 1,36 ---- + IDLEfork README + =============== + + IDLEfork is an official experimental fork of Python's Integrated + DeveLopment Environment IDLE. Worthwhile and successful changes and + additions will go back into the Python distribution's IDLE at some + later stage. There is no spanish inquisition. + + As David Scherer aptly put it in the original IDLE fork README (below), + "It is alpha software and might be unstable. If it breaks, you get to + keep both pieces." One of the aims of IDLEfork now is for it to be able + to be uncompressed into its own directory and run from there, that way + you can play with (or hack on) IDLEfork without any further installation, + and entirely separately from your stable python IDLE distribution. + + If you find bugs or undesired behaviour please code nifty patches and + submit them to the IDLEfork SourceForge patch manager, 8^) or let us + know about it in one of the appropriate fora. See the IDLEfork home + page at + + http://idlefork.sourceforge.net + + for details on the various ways to give input to or contact the project. + + Please see the files NEWS.txt and ChangeLog for more up to date + information on changes in this release of IDLEfork. + + + Thanks for trying IDLEfork, + Stephen M. Gava. + + + + README from IDLE fork 0.7.1 : ============================= From elguavas@users.sourceforge.net Fri Jul 20 02:36:51 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Thu, 19 Jul 2001 18:36:51 -0700 Subject: [Idle-dev] CVS: idle NEWS.txt,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv1557 Modified Files: NEWS.txt Log Message: bring up to date for 0.8.1 release Index: NEWS.txt =================================================================== RCS file: /cvsroot/idlefork/idle/NEWS.txt,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** NEWS.txt 2001/07/19 04:49:13 1.3 --- NEWS.txt 2001/07/20 01:36:49 1.4 *************** *** 1,8 **** ! original IDLE NEWS.txt : ! ======================== ! (For a more detailed change log, see the file ChangeLog.) ! ---------------------------------------------------------------------- New in IDLE 0.5 (2/15/2000) --- 1,44 ---- ! IDLEfork NEWS ! ============= (For a more detailed change log, see the file ChangeLog.) + --------------------------------------------------------- + + + IDLEfork 0.8.1 (xx JUN 2001) + ---------------------------- + New tarball released as a result of the 'revitalisation' of the IDLEfork + project. + + This release is based on a merging of the earlier IDLE fork work with + current cvs IDLE (post IDLE version 0.8), with some minor additional + coding by Kurt B. Kaiser and Stephen M. Gava. + + This release is basically functional but also contains some known + breakages, for instance with running things from the shell window, that + may well have been introduced in a hasty attempt to change IDLEfork's + previous startup behaviour. + + This release is being made now to mark the point at which IDLEfork is + launching into a new stage of development. ! IDLEfork CVS will now be branched to enable further development and ! exploration of the two "execution in a remote process" patches submitted ! by David Scherer (David's is currently in IDLEfork) and GvR on a branch, ! while stabilisation and development of less heavyweight improvements ! (like user customisation) can continue on the trunk. ! ! ! IDLE fork 0.7.1 (15 AUG 2000) ! ----------------------------- ! First project tarball released. ! ! This was the first release of IDLE fork, which at this stage was a ! combination of IDLE 0.5 and the VPython idle fork, with additional ! changes coded by David Scherer, Peter Schneider-Kamp and ! Nicholas Riley. ! ! ! original IDLE NEWS.txt : ! ======================== New in IDLE 0.5 (2/15/2000) From elguavas@users.sourceforge.net Fri Jul 20 09:53:40 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Fri, 20 Jul 2001 01:53:40 -0700 Subject: [Idle-dev] CVS: idle ChangeLog,1.3,1.4 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv9071 Modified Files: ChangeLog Log Message: update in preparation for 0.8.1 alpha release Index: ChangeLog =================================================================== RCS file: /cvsroot/idlefork/idle/ChangeLog,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** ChangeLog 2001/07/19 04:49:13 1.3 --- ChangeLog 2001/07/20 08:53:38 1.4 *************** *** 1,2 **** --- 1,569 ---- + IDLEfork ChangeLog + ================== + + 2001-07-20 11:35 elguavas + + * README.txt, NEWS.txt: bring up to date for 0.8.1 release + + 2001-07-19 16:40 elguavas + + * IDLEFORK.html: replaced by IDLEFORK-index.html + + 2001-07-19 16:39 elguavas + + * IDLEFORK-index.html: updated placeholder idlefork homepage + + 2001-07-19 14:49 elguavas + + * ChangeLog, EditorWindow.py, INSTALLATION, NEWS.txt, README.txt, + TODO.txt, idlever.py: + minor tidy-ups ready for 0.8.1 alpha tarball release + + 2001-07-17 15:12 kbk + + * INSTALLATION, setup.py: INSTALLATION: Remove the coexist.patch + instructions + + **************** setup.py: + + Remove the idles script, add some words on IDLE Fork to the + long_description, and clean up some line spacing. + + 2001-07-17 15:01 kbk + + * coexist.patch: Put this in the attic, at least for now... + + 2001-07-17 14:59 kbk + + * PyShell.py, idle, idles: Implement idle command interface as + suggested by GvR [idle-dev] 16 July **************** PyShell: Added + functionality: + + usage: idle.py [-c command] [-d] [-i] [-r script] [-s] [-t title] + [arg] ... + + idle file(s) (without options) edit the file(s) + + -c cmd run the command in a shell -d enable the + debugger -i open an interactive shell -i file(s) open a + shell and also an editor window for each file -r script run a file + as a script in a shell -s run $IDLESTARTUP or + $PYTHONSTARTUP before anything else -t title set title of shell + window + + Remaining arguments are applied to the command (-c) or script (-r). + + ****************** idles: Removed the idles script, not needed + + ****************** idle: Removed the IdleConf references, not + required anymore + + 2001-07-16 17:08 kbk + + * INSTALLATION, coexist.patch: Added installation instructions. + + Added a patch which modifies idlefork so that it can co-exist with + "official" IDLE in the site-packages directory. This patch is not + necessary if only idlefork IDLE is installed. See INSTALLATION for + further details. + + 2001-07-16 15:50 kbk + + * idles: Add a script "idles" which opens a Python Shell window. + + The default behaviour of idlefork idle is to open an editor window + instead of a shell. Complex expressions may be run in a fresh + environment by selecting "run". There are times, however, when a + shell is desired. Though one can be started by "idle -t 'foo'", + this script is more convenient. In addition, a shell and an editor + window can be started in parallel by "idles -e foo.py". + + 2001-07-16 15:25 kbk + + * PyShell.py: Call out IDLE Fork in startup message. + + 2001-07-16 14:00 kbk + + * PyShell.py, setup.py: Add a script "idles" which opens a Python + Shell window. + + The default behaviour of idlefork idle is to open an editor window + instead of a shell. Complex expressions may be run in a fresh + environment by selecting "run". There are times, however, when a + shell is desired. Though one can be started by "idle -t 'foo'", + this script is more convenient. In addition, a shell and an editor + window can be started in parallel by "idles -e foo.py". + + 2001-07-15 03:06 kbk + + * pyclbr.py, tabnanny.py: tabnanny and pyclbr are now found in /Lib + + 2001-07-15 02:29 kbk + + * BrowserControl.py: Remove, was retained for 1.5.2 support + + 2001-07-14 15:48 kbk + + * setup.py: Installing Idle to site-packages via Distutils does not + copy the Idle help.txt file. + + Ref SF Python Patch 422471 + + 2001-07-14 15:26 kbk + + * keydefs.py: py-cvs-2001_07_13 (Rev 1.3) merge + + "Make copy, cut and paste events case insensitive. Reported by + Patrick K. O'Brien on idle-dev. (Should other bindings follow + suit?)" --GvR + + 2001-07-14 15:21 kbk + + * idle.py: py-cvs-2001_07_13 (Rev 1.4) merge + + "Move the action of loading the configuration to the IdleConf + module rather than the idle.py script. This has advantages and + disadvantages; the biggest advantage being that we can more easily + have an alternative main program." --GvR + + 2001-07-14 15:18 kbk + + * extend.txt: py-cvs-2001_07_13 (Rev 1.4) merge + + "Quick update to the extension mechanism (extend.py is gone, long + live config.txt)" --GvR + + 2001-07-14 15:15 kbk + + * StackViewer.py: py-cvs-2001_07_13 (Rev 1.16) merge + + "Refactored, with some future plans in mind. This now uses the new + gotofileline() method defined in FileList.py" --GvR + + 2001-07-14 15:10 kbk + + * PyShell.py: py-cvs-2001_07_13 (Rev 1.34) merge + + "Amazing. A very subtle change in policy in descr-branch actually + found a bug here. Here's the deal: Class PyShell derives from + class OutputWindow. Method PyShell.close() wants to invoke its + parent method, but because PyShell long ago was inherited from + class PyShellEditorWindow, it invokes + PyShelEditorWindow.close(self). Now, class PyShellEditorWindow + itself derives from class OutputWindow, and inherits the close() + method from there without overriding it. Under the old rules, + PyShellEditorWindow.close would return an unbound method restricted + to the class that defined the implementation of close(), which was + OutputWindow.close. Under the new rules, the unbound method is + restricted to the class whose method was requested, that is + PyShellEditorWindow, and this was correctly trapped as an error." + --GvR + + 2001-07-14 14:59 kbk + + * PyParse.py: py-cvs-2001_07_13 (Rel 1.9) merge + + "Taught IDLE's autoident parser that "yield" is a keyword that + begins a stmt. Along w/ the preceding change to keyword.py, making + all this work w/ a future-stmt just looks harder and harder." + --tim_one + + (From Rel 1.8: "Hack to make this still work with Python 1.5.2. + ;-( " --fdrake) + + 2001-07-14 14:51 kbk + + * IdleConf.py: py-cvs-2001_07_13 (Rel 1.7) merge + + "Move the action of loading the configuration to the IdleConf + module rather than the idle.py script. This has advantages and + disadvantages; the biggest advantage being that we can more easily + have an alternative main program." --GvR + + 2001-07-14 14:45 kbk + + * FileList.py: py-cvs-2000_07_13 (Rev 1.9) merge + + "Delete goodname() method, which is unused. Add gotofileline(), a + convenience method which I intend to use in a variant. Rename + test() to _test()." --GvR + + This was an interesting merge. The join completely missed removing + goodname(), which was adjacent, but outside of, a small conflict. + I only caught it by comparing the 1.1.3.2/1.1.3.3 diff. CVS ain't + infallible. + + 2001-07-14 13:58 kbk + + * EditorWindow.py: py-cvs-2000_07_13 (Rev 1.38) merge "Remove + legacy support for the BrowserControl module; the webbrowser module + has been included since Python 2.0, and that is the preferred + interface." --fdrake + + 2001-07-14 13:32 kbk + + * EditorWindow.py, FileList.py, IdleConf.py, PyParse.py, + PyShell.py, StackViewer.py, extend.txt, idle.py, keydefs.py: Import + the 2001 July 13 23:59 GMT version of Python CVS IDLE on the + existing 1.1.3 vendor branch named py-cvs-vendor-branch. Release + tag is py-cvs-2001_07_13. + + 2001-07-14 12:02 kbk + + * Icons/python.gif: py-cvs-rel2_1 (Rev 1.2) merge Copied py-cvs rev + 1.2 changed file to idlefork MAIN + + 2001-07-14 11:58 kbk + + * Icons/minusnode.gif: py-cvs-rel2_1 (Rev 1.2) merge Copied py-cvs + 1.2 changed file to idlefork MAIN + + 2001-07-14 11:23 kbk + + * ScrolledList.py: py-cvs-rel2_1 (rev 1.5) merge - whitespace + normalization + + 2001-07-14 11:20 kbk + + * Separator.py: py-cvs-rel2_1 (Rev 1.3) merge - whitespace + normalization + + 2001-07-14 11:16 kbk + + * StackViewer.py: py-cvs-rel2_1 (Rev 1.15) merge - whitespace + normalization + + 2001-07-14 11:14 kbk + + * ToolTip.py: py-cvs-rel2_1 (Rev 1.2) merge - whitespace + normalization + + 2001-07-14 10:13 kbk + + * PyShell.py: cvs-py-rel2_1 (Rev 1.29 - 1.33) merge + + Merged the following py-cvs revs without conflict: 1.29 Reduce + copyright text output at startup 1.30 Delay setting sys.args until + Tkinter is fully initialized 1.31 Whitespace normalization 1.32 + Turn syntax warning into error when interactive 1.33 Fix warning + initialization bug + + Note that module is extensively modified wrt py-cvs + + 2001-07-14 06:33 kbk + + * PyParse.py: py-cvs-rel2_1 (Rev 1.6 - 1.8) merge Fix autoindent + bug and deflect Unicode from text.get() + + 2001-07-14 06:00 kbk + + * Percolator.py: py-cvs-rel2_1 (Rev 1.3) "move "from Tkinter import + *" to module level" --jhylton + + 2001-07-14 05:57 kbk + + * PathBrowser.py: py-cvs-rel2_1 (Rev 1.6) merge - whitespace + normalization + + 2001-07-14 05:49 kbk + + * ParenMatch.py: cvs-py-rel2_1 (Rev 1.5) merge - whitespace + normalization + + 2001-07-14 03:57 kbk + + * ObjectBrowser.py: py-cvs-rel2_1 (Rev 1.3) merge "Make the test + program work outside IDLE." -- GvR + + 2001-07-14 03:52 kbk + + * MultiStatusBar.py: py-cvs-rel2_1 (Rev 1.2) merge - whitespace + normalization + + 2001-07-14 03:44 kbk + + * MultiScrolledLists.py: py-cvs-rel2_1 (Rev 1.2) merge - whitespace + normalization + + 2001-07-14 03:40 kbk + + * IdleHistory.py: py-cvs-rel2_1 (Rev 1.4) merge - whitespace + normalization + + 2001-07-14 03:38 kbk + + * IdleConf.py: py-cvs-rel2_1 (Rev 1.6) merge - whitespace + normalization + + 2001-07-13 14:18 kbk + + * IOBinding.py: py-cvs-rel2_1 (Rev 1.4) merge - move "import *" to + module level + + 2001-07-13 14:12 kbk + + * FormatParagraph.py: py-cvs-rel2_1 (Rev 1.9) merge - whitespace + normalization + + 2001-07-13 14:07 kbk + + * FileList.py: py-cvs-rel2_1 (Rev 1.8) merge - whitespace + normalization + + 2001-07-13 13:35 kbk + + * EditorWindow.py: py-cvs-rel2_1 (Rev 1.33 - 1.37) merge + + VP IDLE version depended on VP's ExecBinding.py and spawn.py to get + the path to the Windows Doc directory (relative to python.exe). + Removed this conflicting code in favor of py-cvs updates which on + Windows use a hard coded path relative to the location of this + module. py-cvs updates include support for webbrowser.py. Module + still has BrowserControl.py for 1.5.2 support. + + At this point, the differences wrt py-cvs relate to menu + functionality. + + 2001-07-13 11:30 kbk + + * ConfigParser.py: py-cvs-rel2_1 merge - Remove, lives in /Lib + + 2001-07-13 10:10 kbk + + * Delegator.py: py-cvs-rel2_1 (Rev 1.3) merge - whitespace + normalization + + 2001-07-13 10:07 kbk + + * Debugger.py: py-cvs-rel2_1 (Rev 1.15) merge - whitespace + normalization + + 2001-07-13 10:04 kbk + + * ColorDelegator.py: py-cvs-rel2_1 (Rev 1.11 and 1.12) merge + Colorize "as" after "import" / use DEBUG instead of __debug__ + + 2001-07-13 09:54 kbk + + * ClassBrowser.py: py-cvs-rel2_1 (Rev 1.12) merge - whitespace + normalization + + 2001-07-13 09:41 kbk + + * BrowserControl.py: py-cvs-rel2_1 (Rev 1.1) merge - New File - + Force HEAD to trunk with -f Note: browser.py was renamed + BrowserControl.py 10 May 2000. It provides a collection of classes + and convenience functions to control external browsers "for 1.5.2 + support". It was removed from py-cvs 18 April 2001. + + 2001-07-13 09:10 kbk + + * CallTips.py: py-cvs-rel2_1 (Rev 1.8) merge - whitespace + normalization + + 2001-07-13 08:26 kbk + + * CallTipWindow.py: py-cvs-rel2_1 (Rev 1.3) merge - whitespace + normalization + + 2001-07-13 08:13 kbk + + * AutoExpand.py: py-cvs-rel1_2 (Rev 1.4) merge, "Add Alt-slash to + Unix keydefs (I somehow need it on RH 6.2). Get rid of assignment + to unused self.text.wordlist." --GvR + + 2001-07-12 16:54 elguavas + + * ReplaceDialog.py: py-cvs merge, python 1.5.2 compatability + + 2001-07-12 16:46 elguavas + + * ScriptBinding.py: py-cvs merge, better error dialog + + 2001-07-12 16:38 elguavas + + * TODO.txt: py-cvs merge, additions + + 2001-07-12 15:35 elguavas + + * WindowList.py: py-cvs merge, correct indentation + + 2001-07-12 15:24 elguavas + + * config.txt: py-cvs merge, correct typo + + 2001-07-12 15:21 elguavas + + * help.txt: py-cvs merge, update colour changing info + + 2001-07-12 14:51 elguavas + + * idle.py: py-cvs merge, idle_dir loading changed + + 2001-07-12 14:44 elguavas + + * idlever.py: py-cvs merge, version update + + 2001-07-11 12:53 kbk + + * BrowserControl.py: Initial revision + + 2001-07-11 12:53 kbk + + * AutoExpand.py, BrowserControl.py, CallTipWindow.py, CallTips.py, + ClassBrowser.py, ColorDelegator.py, Debugger.py, Delegator.py, + EditorWindow.py, FileList.py, FormatParagraph.py, IOBinding.py, + IdleConf.py, IdleHistory.py, MultiScrolledLists.py, + MultiStatusBar.py, ObjectBrowser.py, OutputWindow.py, + ParenMatch.py, PathBrowser.py, Percolator.py, PyParse.py, + PyShell.py, RemoteInterp.py, ReplaceDialog.py, ScriptBinding.py, + ScrolledList.py, Separator.py, StackViewer.py, TODO.txt, + ToolTip.py, WindowList.py, config.txt, help.txt, idle, idle.bat, + idle.py, idlever.py, setup.py, Icons/minusnode.gif, + Icons/python.gif: Import the release 2.1 version of Python CVS IDLE + on the existing 1.1.3 vendor branch named py-cvs-vendor-branch, + with release tag py-cvs-rel2_1. + + 2001-07-11 12:34 kbk + + * AutoExpand.py, AutoIndent.py, Bindings.py, CallTipWindow.py, + CallTips.py, ChangeLog, ClassBrowser.py, ColorDelegator.py, + Debugger.py, Delegator.py, EditorWindow.py, FileList.py, + FormatParagraph.py, FrameViewer.py, GrepDialog.py, IOBinding.py, + IdleConf.py, IdleHistory.py, MultiScrolledLists.py, + MultiStatusBar.py, NEWS.txt, ObjectBrowser.py, OldStackViewer.py, + OutputWindow.py, ParenMatch.py, PathBrowser.py, Percolator.py, + PyParse.py, PyShell.py, README.txt, RemoteInterp.py, + ReplaceDialog.py, ScriptBinding.py, ScrolledList.py, + SearchBinding.py, SearchDialog.py, SearchDialogBase.py, + SearchEngine.py, Separator.py, StackViewer.py, TODO.txt, + ToolTip.py, TreeWidget.py, UndoDelegator.py, WidgetRedirector.py, + WindowList.py, ZoomHeight.py, __init__.py, config-unix.txt, + config-win.txt, config.txt, eventparse.py, extend.txt, help.txt, + idle.bat, idle.py, idle.pyw, idlever.py, keydefs.py, pyclbr.py, + tabnanny.py, testcode.py, Icons/folder.gif, Icons/minusnode.gif, + Icons/openfolder.gif, Icons/plusnode.gif, Icons/python.gif, + Icons/tk.gif: Import the 9 March 2000 version of Python CVS IDLE as + 1.1.3 vendor branch named py-cvs-vendor-branch. + + 2001-07-04 13:43 kbk + + * Icons/: folder.gif, minusnode.gif, openfolder.gif, plusnode.gif, + python.gif, tk.gif: Null commit with -f option to force an uprev + and put HEADs firmly on the trunk. + + 2001-07-04 13:15 kbk + + * AutoExpand.py, AutoIndent.py, Bindings.py, CallTipWindow.py, + CallTips.py, ChangeLog, ClassBrowser.py, ColorDelegator.py, + ConfigParser.py, Debugger.py, Delegator.py, EditorWindow.py, + ExecBinding.py, FileList.py, FormatParagraph.py, FrameViewer.py, + GrepDialog.py, IDLEFORK.html, IOBinding.py, IdleConf.py, + IdleHistory.py, MultiScrolledLists.py, MultiStatusBar.py, NEWS.txt, + ObjectBrowser.py, OldStackViewer.py, OutputWindow.py, + ParenMatch.py, PathBrowser.py, Percolator.py, PyParse.py, + PyShell.py, README.txt, Remote.py, RemoteInterp.py, + ReplaceDialog.py, ScriptBinding.py, ScrolledList.py, + SearchBinding.py, SearchDialog.py, SearchDialogBase.py, + SearchEngine.py, Separator.py, StackViewer.py, TODO.txt, + ToolTip.py, TreeWidget.py, UndoDelegator.py, WidgetRedirector.py, + WindowList.py, ZoomHeight.py, __init__.py, config-unix.txt, + config-win.txt, config.txt, eventparse.py, extend.txt, help.txt, + idle, idle.bat, idle.py, idle.pyw, idlever.py, keydefs.py, + loader.py, protocol.py, pyclbr.py, setup.py, spawn.py, tabnanny.py, + testcode.py: Null commit with -f option to force an uprev and put + HEADs firmly on the trunk. + + 2001-06-27 10:24 elguavas + + * IDLEFORK.html: updated contact details + + 2001-06-25 17:23 elguavas + + * idle, RemoteInterp.py, setup.py: Initial revision + + 2001-06-25 17:23 elguavas + + * idle, RemoteInterp.py, setup.py: import current python cvs idle + as a vendor branch + + 2001-06-24 15:10 elguavas + + * IDLEFORK.html: tiny change to test new syncmail setup + + 2001-06-24 14:41 elguavas + + * IDLEFORK.html: change to new developer contact, also a test + commit for new syncmail setup + + 2001-06-23 18:15 elguavas + + * IDLEFORK.html: tiny test update for revitalised idle-fork + + 2000-09-24 17:29 nriley + + * protocol.py: Fixes for Python 1.6 compatibility - socket bind and + connect get a tuple instead two arguments. + + 2000-09-24 17:28 nriley + + * spawn.py: Change for Python 1.6 compatibility - UNIX's 'os' + module defines 'spawnv' now, so we check for 'fork' first. + + 2000-08-15 22:51 nowonder + + * IDLEFORK.html: + corrected email address + + 2000-08-15 22:47 nowonder + + * IDLEFORK.html: + added .html file for http://idlefork.sourceforge.net + + 2000-08-15 11:13 dscherer + + * AutoExpand.py, AutoIndent.py, Bindings.py, CallTipWindow.py, + CallTips.py, __init__.py, ChangeLog, ClassBrowser.py, + ColorDelegator.py, ConfigParser.py, Debugger.py, Delegator.py, + FileList.py, FormatParagraph.py, FrameViewer.py, GrepDialog.py, + IOBinding.py, IdleConf.py, IdleHistory.py, MultiScrolledLists.py, + MultiStatusBar.py, NEWS.txt, ObjectBrowser.py, OldStackViewer.py, + OutputWindow.py, ParenMatch.py, PathBrowser.py, Percolator.py, + PyParse.py, PyShell.py, README.txt, ReplaceDialog.py, + ScriptBinding.py, ScrolledList.py, SearchBinding.py, + SearchDialog.py, SearchDialogBase.py, SearchEngine.py, + Separator.py, StackViewer.py, TODO.txt, ToolTip.py, TreeWidget.py, + UndoDelegator.py, WidgetRedirector.py, WindowList.py, help.txt, + ZoomHeight.py, config-unix.txt, config-win.txt, config.txt, + eventparse.py, extend.txt, idle.bat, idle.py, idle.pyw, idlever.py, + keydefs.py, loader.py, pyclbr.py, tabnanny.py, testcode.py, + EditorWindow.py, ExecBinding.py, Remote.py, protocol.py, spawn.py, + Icons/folder.gif, Icons/minusnode.gif, Icons/openfolder.gif, + Icons/plusnode.gif, Icons/python.gif, Icons/tk.gif: Initial + revision + + 2000-08-15 11:13 dscherer + + * AutoExpand.py, AutoIndent.py, Bindings.py, CallTipWindow.py, + CallTips.py, __init__.py, ChangeLog, ClassBrowser.py, + ColorDelegator.py, ConfigParser.py, Debugger.py, Delegator.py, + FileList.py, FormatParagraph.py, FrameViewer.py, GrepDialog.py, + IOBinding.py, IdleConf.py, IdleHistory.py, MultiScrolledLists.py, + MultiStatusBar.py, NEWS.txt, ObjectBrowser.py, OldStackViewer.py, + OutputWindow.py, ParenMatch.py, PathBrowser.py, Percolator.py, + PyParse.py, PyShell.py, README.txt, ReplaceDialog.py, + ScriptBinding.py, ScrolledList.py, SearchBinding.py, + SearchDialog.py, SearchDialogBase.py, SearchEngine.py, + Separator.py, StackViewer.py, TODO.txt, ToolTip.py, TreeWidget.py, + UndoDelegator.py, WidgetRedirector.py, WindowList.py, help.txt, + ZoomHeight.py, config-unix.txt, config-win.txt, config.txt, + eventparse.py, extend.txt, idle.bat, idle.py, idle.pyw, idlever.py, + keydefs.py, loader.py, pyclbr.py, tabnanny.py, testcode.py, + EditorWindow.py, ExecBinding.py, Remote.py, protocol.py, spawn.py, + Icons/folder.gif, Icons/minusnode.gif, Icons/openfolder.gif, + Icons/plusnode.gif, Icons/python.gif, Icons/tk.gif: Modified IDLE + from VPython 0.2 + + original IDLE ChangeLog: ======================== From elguavas@users.sourceforge.net Sat Jul 21 10:50:57 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Sat, 21 Jul 2001 02:50:57 -0700 Subject: [Idle-dev] CVS: idle INSTALL.txt,NONE,1.1 NEWS.txt,1.4,1.5 INSTALLATION,1.3,NONE Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv9340 Modified Files: NEWS.txt Added Files: INSTALL.txt Removed Files: INSTALLATION Log Message: new material for 0.8.1 release --- NEW FILE: INSTALL.txt --- IDLEfork INSTALL notes ====================== The emphasis in IDLEfork is now for the project to be able to be run directly from the unpacked source directory. This is to enable easy testing of (and hacking on) IDLEfork, and will also prevent interfering with the stable Python IDLE set up in any way. To install IDLEfork just unpack the archive into its own directory wherever you like. To run IDLEfork just go to the directory you unpacked IDLEfork into and then run 'python idle.py' in an xterm under unix/linux, or 'idle.pyw' under windows 98/2000. Remember that IDLEfork 0.8.1 and greater require python 2.1 or greater. See README.txt and NEWS.txt for more details on this version of IDLEfork. INSTALLATION notes from IDLE fork 0.7.1 : ========================================= IDLE Fork Installation on Linux: Until the tarball is released, you must download a CVS copy. An excellent place for it is /usr/local/src/PythonX.X/Tools/idlefork, assuming that's where your Python source is located. Put the correct version in for X.X . # cd /usr/local/src/PythonX.X/Tools Now do the CVS login and checkout: # cvs -d:pserver:anonymous@cvs.idlefork.sourceforge.net:/cvsroot/idlefork login Type an for the password. # cvs -z3 -d:pserver:anonymous@cvs.idlefork.sourceforge.net:/cvsroot/idlefork \ -d idlefork checkout idle The -d option to checkout puts the files in an idlefork directory, so you don't step on "official" idle. # cd idlefork # su to root # python setup.py install # echo "idle" > /usr/local/lib/pythonX.X/site-packages.pth This last is necessary so idle can find itself. I hope we can create/append this file via setup.py at some point, but it needs to be done manually now, and it only needs to be done once (unless you totally remove and reinstall python itself). # exit from root NOTE that the above procedure will install idlefork IDLE on top of any "official" IDLE that may be already installed. Index: NEWS.txt =================================================================== RCS file: /cvsroot/idlefork/idle/NEWS.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** NEWS.txt 2001/07/20 01:36:49 1.4 --- NEWS.txt 2001/07/21 09:50:55 1.5 *************** *** 5,13 **** ! IDLEfork 0.8.1 (xx JUN 2001) ---------------------------- New tarball released as a result of the 'revitalisation' of the IDLEfork project. This release is based on a merging of the earlier IDLE fork work with current cvs IDLE (post IDLE version 0.8), with some minor additional --- 5,17 ---- ! IDLEfork 0.8.1 (22 JUL 2001) ---------------------------- New tarball released as a result of the 'revitalisation' of the IDLEfork project. + This release requires python 2.1 or better. Compatability with earlier + versions of python (especially ancient ones like 1.5x) is no longer + a priority in IDLEfork development. + This release is based on a merging of the earlier IDLE fork work with current cvs IDLE (post IDLE version 0.8), with some minor additional *************** *** 15,21 **** This release is basically functional but also contains some known ! breakages, for instance with running things from the shell window, that ! may well have been introduced in a hasty attempt to change IDLEfork's ! previous startup behaviour. This release is being made now to mark the point at which IDLEfork is --- 19,25 ---- This release is basically functional but also contains some known ! breakages, particularly with running things from the shell window. Also ! the debugger is not working, but I believe this was the case with the ! previous IDLE fork release (0.7.1) as well. This release is being made now to mark the point at which IDLEfork is *************** *** 24,30 **** IDLEfork CVS will now be branched to enable further development and exploration of the two "execution in a remote process" patches submitted ! by David Scherer (David's is currently in IDLEfork) and GvR on a branch, ! while stabilisation and development of less heavyweight improvements ! (like user customisation) can continue on the trunk. --- 28,34 ---- IDLEfork CVS will now be branched to enable further development and exploration of the two "execution in a remote process" patches submitted ! by David Scherer (David's is currently in IDLEfork) and GvR, while ! stabilisation and development of less heavyweight improvements (like ! user customisation) can continue on the trunk. --- INSTALLATION DELETED --- From elguavas@users.sourceforge.net Sat Jul 21 11:00:00 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Sat, 21 Jul 2001 03:00:00 -0700 Subject: [Idle-dev] CVS: idle EditorWindow.py,1.5,1.6 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv11333 Modified Files: EditorWindow.py Log Message: updated about info for 0.8.1 release Index: EditorWindow.py =================================================================== RCS file: /cvsroot/idlefork/idle/EditorWindow.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** EditorWindow.py 2001/07/19 04:49:13 1.5 --- EditorWindow.py 2001/07/21 09:59:58 1.6 *************** *** 86,96 **** by Guido van Rossum. ! IDLEfork is an official experimental development version of IDLE. Succesful new features in IDLEfork will be mereged back in to stable IDLE. This version of IDLEfork is based on the work in stable IDLE version %s, \ ! IDLEfork 0.7.1 released by David Scherer, and the VPython idle fork. ! See README.txt for more details on IDLEfork. WARNING: IDLEfork is at this stage alpha quality software, expect things \ --- 86,96 ---- by Guido van Rossum. ! IDLEfork is an official experimental development version of IDLE. \ Succesful new features in IDLEfork will be mereged back in to stable IDLE. This version of IDLEfork is based on the work in stable IDLE version %s, \ ! IDLE fork 0.7.1 released by David Scherer, and the VPython idle fork. ! See README.txt and NEWS.txt for more details on this verion of IDLEfork. WARNING: IDLEfork is at this stage alpha quality software, expect things \ From StephenM.Gava Sat Jul 21 14:53:55 2001 From: StephenM.Gava (StephenM.Gava) Date: Sat, 21 Jul 2001 23:53:55 +1000 Subject: [Idle-dev] idlefork - alpha release Message-ID: <01072123535500.01180@oberon> Hello IDLErs, just to let you know there is an alpha release of the current state of IDLEfork now available. This release is primarily to mark the finish of the merge of the current idle cvs back into idlefork. A few things are broken, but if you want to play with it or look at it it is available from the idlefork sourceforge page at: http://sourceforge.net/projects/idlefork Here are the relevant parts of README and NEWS for the new release: IDLEfork README =============== IDLEfork is an official experimental fork of Python's Integrated DeveLopment Environment IDLE. Worthwhile and successful changes and additions will go back into the Python distribution's IDLE at some later stage. There is no spanish inquisition. As David Scherer aptly put it in the original IDLE fork README (below), "It is alpha software and might be unstable. If it breaks, you get to keep both pieces." One of the aims of IDLEfork now is for it to be able to be uncompressed into its own directory and run from there, that way you can play with (or hack on) IDLEfork without any further installation, and entirely separately from your stable python IDLE distribution. If you find bugs or undesired behaviour please code nifty patches and submit them to the IDLEfork SourceForge patch manager, 8^) or let us know about it in one of the appropriate fora. See the IDLEfork home page at http://idlefork.sourceforge.net for details on the various ways to give input to or contact the project. Please see the files NEWS.txt and ChangeLog for more up to date information on changes in this release of IDLEfork. IDLEfork NEWS ============= (For a more detailed change log, see the file ChangeLog.) --------------------------------------------------------- IDLEfork 0.8.1 (22 JUL 2001) ---------------------------- New tarball released as a result of the 'revitalisation' of the IDLEfork project. This release requires python 2.1 or better. Compatability with earlier versions of python (especially ancient ones like 1.5x) is no longer a priority in IDLEfork development. This release is based on a merging of the earlier IDLE fork work with current cvs IDLE (post IDLE version 0.8), with some minor additional coding by Kurt B. Kaiser and Stephen M. Gava. This release is basically functional but also contains some known breakages, particularly with running things from the shell window. Also the debugger is not working, but I believe this was the case with the previous IDLE fork release (0.7.1) as well. This release is being made now to mark the point at which IDLEfork is launching into a new stage of development. IDLEfork CVS will now be branched to enable further development and exploration of the two "execution in a remote process" patches submitted by David Scherer (David's is currently in IDLEfork) and GvR, while stabilisation and development of less heavyweight improvements (like user customisation) can continue on the trunk. Regards, Stephen. -- Stephen M. Gava "More power to those who don't care for it." - anon From noreply@sourceforge.net Sat Jul 21 08:59:41 2001 From: noreply@sourceforge.net (noreply@sourceforge.net) Date: Sat, 21 Jul 2001 00:59:41 -0700 Subject: [Idle-dev] [ idlefork-Bugs-442830 ] idle-0.7.1: bug in protocol.py Message-ID: Bugs item #442830, was opened at 2001-07-19 11:14 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=109579&aid=442830&group_id=9579 Category: None Group: None >Status: Closed Resolution: Fixed Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: idle-0.7.1: bug in protocol.py Initial Comment: tested with python2.0: in protocol.py line 331 wrong parameter assignment (parameter must be tuple) s.bind('', self.port) correct s.bind(('', self.port)) ---------------------------------------------------------------------- Comment By: Stephen M. Gava (elguavas) Date: 2001-07-21 00:22 Message: Logged In: YES user_id=75867 Fixed in cvs IDLEfork. Thanks for the tip. ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=109579&aid=442830&group_id=9579 From jlee@nucorar.com Mon Jul 23 19:32:57 2001 From: jlee@nucorar.com (Jonathan Lee) Date: Mon, 23 Jul 2001 13:32:57 -0500 Subject: [Idle-dev] Bug in IDLE Message-ID: <01C1137B.FDA552E0.jlee@nucorar.com> Here's a bug/"undocumented feature" I found in the IDLE program. I didn't find anything about it mentioned in the documentation, so I thought I would inform you about it. Sorry for bothering you if you already know about it. I'm running IDLE 0.8 with Python 2.1 under Windows 2000 Professional. I was running an example program that I pulled out of a message on a SIG list (full code included below) for the threading.py module and discovered that under IDLE the program never completed. It seemed to get stuck in the following loop under the 'main' conditional: while threading.activeCount() > 1 : print ".", time.sleep(1) At a command line prompt, the program took about 35 seconds to complete. Under IDLE, I finally killed it after it still hadn't completed after ~20 minutes. Is there a different function that should be used as the loop condition, is the activeCount() function including the IDLE threads in its count, or is the execution speed under IDLE really that much slower for this type of code? Sincerely, Jonathan Lee 2jlee*arkansas_net P.S. Is there some place I could obtain example code for the various modules included in the more recent editions of Python. The two modules I've needed so far that I didn't find any example code for were the "SocketServer" and the "threading" modules. I found the demo programs from the python source code on SourceForge, but they only use the more primitive "socket" and "thread" modules. ################################################################## import urllib, time import threading retrieveDoc = 1 numPings = 20 numThreads = 5 url = 'http://www.foo.com/' class ping ( threading.Thread ) : def __init__ ( self, url, numPings, retrieveDoc=1 ) : self.url = url self.numPings = numPings self.retrieveDoc = retrieveDoc threading.Thread.__init__(self) def run ( self ) : StartTime = time.time() for i in range(self.numPings): page = urllib.urlopen ( self.url ) if self.retrieveDoc: page.read() page.close() EndTime = time.time() self.TotalTime = EndTime - StartTime if __name__ == '__main__' : threadList = [] for i in range(numThreads) : thread = ping ( url, numPings, retrieveDoc ) threadList.append ( thread ) StartTime = time.time() for thread in threadList : thread.start() while threading.activeCount() > 1 : print ".", time.sleep(1) EndTime = time.time() TotalTime = EndTime - StartTime print TotalPings = 0 ThreadTime = 0 for thread in threadList : TotalPings = TotalPings + thread.numPings ThreadTime = ThreadTime + thread.TotalTime PingAvg = TotalPings / TotalTime ResponseAvg = ThreadTime / TotalPings print "Threads: ", numThreads print "Pings:", TotalPings print "Total time:", TotalTime print "Pings per second:", PingAvg print "Average response time (secs):", ResponseAvg From elguavas@users.sourceforge.net Tue Jul 24 13:29:30 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 24 Jul 2001 05:29:30 -0700 Subject: [Idle-dev] CVS: website - New directory Message-ID: Update of /cvsroot/idlefork/website In directory usw-pr-cvs1:/tmp/cvs-serv28202/website Log Message: Directory /cvsroot/idlefork/website added to the repository From elguavas@users.sourceforge.net Tue Jul 24 13:33:22 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 24 Jul 2001 05:33:22 -0700 Subject: [Idle-dev] CVS: website PythonPoweredSmall.gif,NONE,1.1 bgtile-idlefork.jpg,NONE,1.1 developer.html,NONE,1.1 index.html,NONE,1.1 mission.html,NONE,1.1 news.html,NONE,1.1 tasklist.txt,NONE,1.1 tasks.php,NONE,1.1 Message-ID: Update of /cvsroot/idlefork/website In directory usw-pr-cvs1:/tmp/cvs-serv29044/website Added Files: PythonPoweredSmall.gif bgtile-idlefork.jpg developer.html index.html mission.html news.html tasklist.txt tasks.php Log Message: new website --- NEW FILE: PythonPoweredSmall.gif --- GIF89a7 R=!!cFÖ¬bE, »áJ˜¯(,iØK` Ž.6zÉCž®“­J†@ÉR¥K“-_6ˆ --- NEW FILE: bgtile-idlefork.jpg --- ÿØÿà   $.' ",#(7),01444'9=82<.342ÿÛ ÌÇWm --- NEW FILE: developer.html --- IDLEfork - Developer Info

The  IDLEfork  Project     --    Developer Info

     Home      News      Mission Statement      Current Tasks      Developer Info     
IDLEfork at
SourceForge
Project Page
Downloads
Bug Reports
Submit Patches
Browse CVS
 
idle-dev
Mailing List
Subscribe
Archives
Post
 
Python
links
www.python.org
IDLE
 
 
Python Powered
SourceForge Logo
 

New Developer Info

If you have coded a neat IDLEfork patch to close a bug, or improve an undesireable feature, or for any other purpose, thanks a lot!   8^)   You can contribute your patch through IDLEfork's SourceForge Patch Manager.

If you want to make an ongoing contribution to IDLEfork you can ask to become a developer on the project. If you think you'd like to become an IDLEfork developer, please follow the steps outlined in the next few paragraphs.

First check out the IDLEfork / IDLE "Mission Statement", to see if your ideas for contributing to IDLEfork fit in with the overall aims of the project.

If so, and if you haven't done so already, now would be a good time to check out a CVS copy of IDLEfork, or at least browse the CVS tree at SourceForge to get a better feel for whether the IDLEfork codebase is something you'd feel happy working on.

Lastly you should have a look at IDLEfork's Current Tasks list, to see which of the items on there, that aren't currently assigned to anyone, you'd like to volunteer for. Of course If you'd like to volunteer your time to bring a whole new task or subtask into IDLEfork, we'd like to hear about that too.

If you made it this far and you're still interested in hacking on IDLEfork (and who wouldn't be?:), then join the idle-dev mailing list and float your ideas there, or email the project coordinator Stephen M. Gava  <elguavas@users.sourceforge.net>. All help welcome!


Developer Resources

For pointers on working on a cooperative development project at SourceForge, there are a couple of good information sources.

Python's own CVS tree is now located at SourceForge, and the Python at SourceForge page contains a great FAQ they have compiled which answers most of the questions you might have about working with a shared CVS codebase in the SourceForge environment. Most of the info in this FAQ is transferable to working on IDLEfork.

Another useful source of info on these topics is of course SourceForge's own Project Documentation Pages, which are fairly exhaustive and cover many of the topics a developer on a project at the site might have questions about.

If your questions aren't answered in either of these places of course you can always ask one of the other developers on IDLEfork about his stuff too!

 
--- NEW FILE: index.html --- IDLEfork - Home

The  IDLEfork  Project

" just like IDLE, only crunchy "
     Home      News      Mission Statement      Current Tasks      Developer Info     
IDLEfork at
SourceForge
Project Page
Downloads
Bug Reports
Submit Patches
Browse CVS
 
idle-dev
Mailing List
Subscribe
Archives
Post
 
Python
links
www.python.org
IDLE
 
 
Python Powered
SourceForge Logo
 

Introduction

The IDLEfork project is an official experimental development fork of Python's small, light, 'bundled' integrated development environment, IDLE. Changes to this version that are approved by Python's benevolent dictator for life (python's creator, Guido van Rossum) will go back into the stable distribution version.

The IDLEfork project is hosted by SourceForge and its project page can be found at: http://sourceforge.net/projects/idlefork .

Python is an open source, general purpose, object oriented computer programming language. Python's power, flexibility, clarity, ease of use and ease of maintenance sees it currently being used by a large and rapidly increasing number of individuals, and organisations large and small, commercial and non-commercial, around the world. It is in use for open and closed source projects ranging in scope from trivial to immensely complex. Python code is automatically byte-compiled to run efficiently in it's interpreter, without change on a wide variety of platforms.


How To Contribute

Everyone interested in IDLE is invited to contribute to the IDLEfork by means of discussion, bug reports and coding nifty patches. If you want to contribute code to IDLEfork regularly, you can become a developer by mailing the project coordinator, Stephen M. Gava. See the Developer Info page first.
 
Discussion

Discussion of development for IDLE is carried out on the idle-dev mailing list  <idle-dev@python.org> at the Python Language Website. Subscription information for idle-dev can be found at: http://www.python.org/mailman/listinfo/idle-dev. The archives of the idle-dev list can be perused at: http://mail.python.org/pipermail/idle-dev.

Bug Reports

IDLEfork uses the Bug Tracking facility provided by SourceForge. It can be found at: http://sourceforge.net/bugs/?group_id=9579.

Patches

To submit patches, the Patch Manager at SourceForge is used. This can be found at: http://sourceforge.net/patch/?group_id=9579.

 
--- NEW FILE: mission.html --- IDLEfork - Mission Statement

The  IDLEfork  Project     --    Mission Statement

     Home      News      Mission Statement      Current Tasks      Developer Info     
IDLEfork at
SourceForge
Project Page
Downloads
Bug Reports
Submit Patches
Browse CVS
 
idle-dev
Mailing List
Subscribe
Archives
Post
 
Python
links
www.python.org
IDLE
 
 
Python Powered
SourceForge Logo
 

The IDLE / IDLEfork Mission Statment

In late June 2001 there was a lot of discussion on the idle-dev mailing list about what the aims of IDLE (and therefore IDLEfork) are. As a result of these discussions, and the imprimatur of Guido van Rossum, the IDLEfork project was reborn in its currrent form, and a general set of guidelines on what IDLE is and should be were nutted out. What follows is an attempt to distill these ideas into point form as a general 'statement of purpose' for IDLE / IDLEfork, useful as a guide to anyone who is interested in the why and wherefore of IDLE.

These points are borrowed from the input of many who participated in the above discussion and are presented here in no particular order. Thanks to all who contributed to this clarification of IDLE's raison d'etre.

  • IDLE aims to be nothing more or less than a small, light, integrated development environment that is bundled by default in the standard Python distribution, with a major emphasis on being simple to use for beginners in Python programming. It should (and does) contain a debugger, editor and interactive shell window that understand the Python syntax and environment and share features such as syntax highlighting. Because of its inclusion with Python it is available to first time, casual, and resource limited users for free.
     
  • IDLE should remain under the ultimate control of GvR, just like the rest of Python. Neither of them would be as good as they are now if weren't for his work and stewardship.
     
  • IDLE's UI is written in Tkinter, and will stay in Tkinter, because it is the default Python GUI toolkit and is bundled with most python versions and is portable to many of the platforms Python runs on.
     
  • IDLE itself provides an extended, non-trivial example of Python and Tkinter programming.
     
  • IDLE should remain at roughly its current (apparent) level of complexity (or less), to avoid harming its usability by beginning / intermediate programmers.
     
  • IDLE development should not get tied in knots trying to be all things to all people or attempting to be completely compatible with every other Python IDE out there. When it comes to IDEs, there is obviously more than one way to do it, but Guido has shown us the IDLE way and development should continue along these lines.
     
  • IDLE's current stability and useability will be improved steadily and incrementally by the merging of proven new features developed in the experimental IDLEfork.
     
  • There's no reason to have just one Python IDE (indeed there are already many available, commercial and non-commercial, and with various approaches to the task, and there are even more in development), however, it is arguable that there should be one basic IDE that ships standard with Python under the same license agreement. IDLE fills this niche.
     
  • As for everyone, everywhere standardising on some same "right" IDE for their Python development work: it's never going to happen, nor should it. IDLE should merely fulfil its own role as outlined above. That role doesn't include being "the" Python IDE, even if it is the one that ships by default, as part of the standard distro.


 
--- NEW FILE: news.html --- IDLEfork - News

The  IDLEfork  Project     --    News

     Home      News      Mission Statement      Current Tasks      Developer Info     
IDLEfork at
SourceForge
Project Page
Downloads
Bug Reports
Submit Patches
Browse CVS
 
idle-dev
Mailing List
Subscribe
Archives
Post
 
Python
links
www.python.org
IDLE
 
 
Python Powered
SourceForge Logo
 

Project News

24th July 2001

New IDLEfork project web pages now online.

21st July 2001

Release 0.8.1 of IDLEfork made. This is an alpha release to mark the finish of the merge of the stable IDLE (now post 0.8) cvs changes, and the beginning of a new phase of development. See the SourceForge release notes for further details.

23rd June 2001

As a result of a lively discussion on idle-dev about the future of IDLE, the IDLEfork project is 'reborn', at the behest of GvR, under a new coordinator, Stephen M. Gava. First cab off the rank in an ambitious list of potential improvements is to bring IDLEfork up to date with the changes made in stable IDLE cvs over the last year.

15th August 2000

Release 0.7.1 of IDLEfork made. This release was based on a merging of stable IDLE version 0.5 and the VPython idle fork, with additional coding by David Scherer, Peter Schneider-Kamp, and Nicholas Riley.

10th August 2000

IDLE fork project is initially set up by Peter Schneider-Kamp, at GvR's suggestion, to encourage further development of IDLE without disturbing stable IDLE.

 
--- NEW FILE: tasklist.txt --- IDLEfork - Current Tasks ================================================================== Task Main Subtask Developer(s) ================================================================== CVS Maintenance Weekly (approx.) merges from stable IDLE. Kurt B. Kaiser ------------------------------------------------------------------ Documentation New Section of Python Standard Documentation Stephen M. Gava on IDLE. For reference and use as in-program help. IDLEfork website. Stephen M. Gava ------------------------------------------------------------------ Separate Process Execution for programs being developed in IDLE (to be worked on in a branch) Compare / evaluate David Scherer (currently ? in IDLEfork) v. GvR code for this and implement best solution. Solve rpc security problems. ? (evaluate xml rpc?) ? ------------------------------------------------------------------ Stabilisation Finish initial merge cleanup / fixup to ? stable state. Get debugging working! Bug fixing. Everyone Testing. Everyone ------------------------------------------------------------------ Edit/Shell/Output window interaction Output window from run to be shell window ? (as done in TeachScheme) so that globals etc. can be examined interactively. Fix shell environment reset for each run ? / delimit and scroll for each run. ------------------------------------------------------------------ User Configuration / UI Improvements Overhaul configuration file handling. Stephen M. Gava Key binding configuration. Stephen M. Gava Font configuration. Stephen M. Gava Colour configuration. Stephen M. Gava General look and feel issues Stephen M. Gava (appearance / consistency / uniform help access, etc.). About box. Stephen M. Gava Context sensitive language/library help ? (by python documentation lookup). ------------------------------------------------------------------ Program Startup Rationalise multiple startup methods/files. Stephen M. Gava Re-implement command line handling sanely. Stephen M. Gava ------------------------------------------------------------------ Releases Release manager. Stephen M. Gava ================================================================== --- NEW FILE: tasks.php --- IDLEfork - Current Tasks

The  IDLEfork  Project     --    Current Tasks

     Home      News      Mission Statement      Current Tasks      Developer Info     
IDLEfork at
SourceForge
Project Page
Downloads
Bug Reports
Submit Patches
Browse CVS
 
idle-dev
Mailing List
Subscribe
Archives
Post
 
Python
links
www.python.org
IDLE
 
 
Python Powered
SourceForge Logo
 

Current Task List

The table below shows the main top level tasks and subtasks that are in the current scope of the IDLEfork project, and who, if anyone, is the main developer these tasks are currently asssigned to.

Some of these tasks are ongoing, but as other subtasks and tasks on this list get satifactorily completed, new items will be moved in to take their places according to a mixture of developer consensus and executive decision by GvR. Please remember that all the developers on IDLEfork are donating their time and effort to the project, so don't expect any miracles overnight.   ;-)

If you'd like to see a new task or subtask move into the project's current scope, please see the Developer Info page and consider donating the effort along with the idea!




 
From elguavas@users.sourceforge.net Tue Jul 24 13:38:07 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 24 Jul 2001 05:38:07 -0700 Subject: [Idle-dev] CVS: idle IDLEFORK-index.html,1.1,NONE Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv30064 Removed Files: IDLEFORK-index.html Log Message: replaced by new website --- IDLEFORK-index.html DELETED --- From StephenM.Gava Tue Jul 24 13:42:39 2001 From: StephenM.Gava (StephenM.Gava) Date: Tue, 24 Jul 2001 22:42:39 +1000 Subject: [Idle-dev] idlefork - new website Message-ID: <01072422423900.01327@oberon> The new IDLEfork website is now online at: http://idlefork.sourceforge.net -- Stephen M. Gava "More power to those who don't care for it." - anon From tony_kinsella@hotmail.com Wed Jul 25 16:27:00 2001 From: tony_kinsella@hotmail.com (Tony Kinsella) Date: Wed, 25 Jul 2001 15:27:00 Subject: [Idle-dev] Make like hans Message-ID: Forks right?Can you guide me out of the maize? _________________________________________________________________ Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp From free@greatbabes.gz.ee Mon Jul 30 11:03:21 2001 From: free@greatbabes.gz.ee (free@greatbabes.gz.ee) Date: 30 Jul 2001 12:03:21 +0200 Subject: [Idle-dev] Special Deal This Week Only !!! Message-ID: ------=_KpqjyiE9_ef7ahRi3_MA Content-Type: text/plain Content-Transfer-Encoding: 8bit -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- (This safeguard is not inserted when using the registered version) -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- (This safeguard is not inserted when using the registered version) -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- -------------------------------------------------------------------- ------=_KpqjyiE9_ef7ahRi3_MA Content-Type: text/html Content-Transfer-Encoding: 8bit Get Acceess to 10 Sites For $1.99 Only !!!

Do not miss out on the opportunity to get a full week of access to 8 websites for the amazing low price of only $1.99,
including Big Tit Fantasies - The Ultimate Tit Lover's Paradise!
You could search the internet for months and you wouldn't find a better deal anywhere!

$1.99 SPECIAL DEAL
THIS WEEK ONLY!

 

 

8 Sites for the Price of One!
Do you really think you're gonna find a better deal somewhere else!?
Click here now and stop wasting valuable jerk-off time!

Powered by GREAT BABES - the best free pics here.


FastCounter by bCentral

------=_KpqjyiE9_ef7ahRi3_MA-- From elguavas@users.sourceforge.net Tue Jul 31 07:58:36 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Mon, 30 Jul 2001 23:58:36 -0700 Subject: [Idle-dev] CVS: idle CREDITS.txt,NONE,1.1 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv19153 Added Files: CREDITS.txt Log Message: some new dialogs and support files for new about and configuration implementations --- NEW FILE: CREDITS.txt --- IDLEfork Credits ================== Guido van Rossum, as well as being the creator of the Python language, was the original creator of IDLE. His great work continues as both a contributor to, and 'benevolent dictator for life' of Python and IDLE/IDLEfork. The main developers who have been so far active on IDLEfork version 0.8.1 and greater are, Guido van Rossum, Stephen M. Gava and Kurt B. Kaiser. The IDLE fork project was initiated and brought up to version 0.7.1 by David Scherer, Peter Schneider-Kamp and Nicholas Riley. There are doubtless others who should be included here, especially those who may have contributed to IDLE versions prior ot 0.8. Please contact the IDLEfork coordinator to have yourself included here if you are one of those I have missed! (contact details at http://idlefork.sourceforge.net) From elguavas@users.sourceforge.net Tue Jul 31 07:58:45 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Mon, 30 Jul 2001 23:58:45 -0700 Subject: [Idle-dev] CVS: idle aboutDialog.py,NONE,1.1 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv19191 Added Files: aboutDialog.py Log Message: some new dialogs and support files for new about and configuration implementations --- NEW FILE: aboutDialog.py --- ##---------------------------------------------------------------------------## ## ## idle - about box ## elguavas ## ##---------------------------------------------------------------------------## """ about box for idle """ from Tkinter import * import string import textView import idlever class AboutDialog(Toplevel): """ modal about dialog for idle """ def __init__(self,parent,title): Toplevel.__init__(self, parent) self.configure(borderwidth=5) self.geometry("+%d+%d" % (parent.winfo_rootx()+30, parent.winfo_rooty()+30)) #elguavas - config placeholders til config stuff completed self.bg="#555555" self.fg="#ffffff" #no ugly bold default text font on *nix self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) self.CreateWidgets() self.resizable(height=FALSE,width=FALSE) self.title(title) self.transient(parent) self.grab_set() self.protocol("WM_DELETE_WINDOW", self.Ok) self.parent = parent self.buttonOk.focus_set() #key bindings for this dialog self.bind('',self.CreditsButtonBinding) #credits button #self.bind('',self.LicenseButtonBinding) #license button self.bind('',self.LicenseButtonBinding) #readme button self.bind('',self.Ok) #dismiss dialog self.bind('',self.Ok) #dismiss dialog self.wait_window() def CreateWidgets(self): frameMain = Frame(self,borderwidth=2,relief=SUNKEN) frameButtons = Frame(self) frameButtons.pack(side=BOTTOM,fill=X) frameMain.pack(side=TOP,expand=TRUE,fill=BOTH) self.buttonOk = Button(frameButtons,text='Ok', command=self.Ok)#,default=ACTIVE self.buttonOk.pack(padx=5,pady=5) #self.picture = Image('photo',data=self.pictureData) frameBg = Frame(frameMain,bg=self.bg) frameBg.pack(expand=TRUE,fill=BOTH) labelTitle = Label(frameBg,text='IDLEfork',fg=self.fg,bg=self.bg, font=('courier', 24, 'bold')) labelTitle.grid(row=0,column=0,sticky=W,padx=10,pady=10) #labelPicture = Label(frameBg,text='[picture]') #image=self.picture,bg=self.bg) #labelPicture.grid(row=0,column=1,sticky=W,rowspan=2,padx=0,pady=3) labelVersion = Label(frameBg,text='version '+idlever.IDLE_VERSION, fg=self.fg,bg=self.bg,font=self.textFont) labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5) labelCopyright = Label(frameBg, text="A development version of Python's lightweight\n"+ 'Integrated DeveLopment Environment, IDLE.', justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) labelCopyright.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5) labelLicense = Label(frameBg, text='Licenced under the Python 2.1.1 PSF Licence\n'+ '(a GPL compatible licence with extra freedoms)', justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) labelLicense.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5) framePad = Frame(frameBg,height=5,bg=self.bg).grid(row=4,column=0) labelEmail = Label(frameBg,text='email: idle-dev@python.org', justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) labelEmail.grid(row=5,column=0,columnspan=2,sticky=W,padx=10,pady=0) labelWWW = Label(frameBg,text='www: http://idlefork.sourceforge.net', justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) labelWWW.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0) frameDivider = Frame(frameBg,borderwidth=1,relief=SUNKEN, height=2,bg=self.bg).grid(row=7,column=0,sticky=(E,W),columnspan=3, padx=5,pady=5) labelPythonVer = Label(frameBg,text='Python version: '+ sys.version.split()[0],fg=self.fg,bg=self.bg,font=self.textFont) labelPythonVer.grid(row=8,column=0,sticky=W,padx=10,pady=0) #handle weird tk version num in windoze python >= 1.6 (?!?) tkVer = `TkVersion`.split('.') tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:] if tkVer[len(tkVer)-1] == '': tkVer[len(tkVer)-1] = '0' tkVer = string.join(tkVer,'.') labelTkVer = Label(frameBg,text='Tk version: '+tkVer,fg=self.fg,bg=self.bg, font=self.textFont) labelTkVer.grid(row=8,column=1,sticky=W,padx=2,pady=0) #labelOs = Label(frameBg,text='python os name: '+pyching.os, # font=self.fontText,fg=self.fg,bg=self.bg) #labelOs.grid(row=6,column=0,sticky=W,padx=10,pady=0) #labelOsType = Label(frameBg,text='python os type: '+pyching.osType, # font=self.fontText,fg=self.fg,bg=self.bg) #labelOsType.grid(row=6,column=1,sticky=W,padx=5,pady=0) #framePad = Frame(frameBg,bg=self.bg,height=5).grid(row=7,column=0) self.buttonLicense = Button(frameBg,text='View Readme',underline=5, width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE self.buttonLicense.grid(row=9,column=0,sticky=W,padx=10,pady=10) self.buttonCredits = Button(frameBg,text='View Credits',underline=5, width=14,highlightbackground=self.bg,command=self.ShowCredits)#takefocus=FALSE self.buttonCredits.grid(row=9,column=1,columnspan=2,sticky=E,padx=10,pady=10) def CreditsButtonBinding(self,event): self.buttonCredits.invoke() def LicenseButtonBinding(self,event): self.buttonLicense.invoke() def ShowLicense(self): textView.TextViewer(self,title='About - Readme', fileName='./README.txt') def ShowCredits(self): textView.TextViewer(self,title='About - Credits', fileName='./CREDITS.txt') def Ok(self, event=None): self.destroy() if __name__ == '__main__': #test the dialog root=Tk() Button(root,text='About',command=lambda:AboutDialog(root,'About')).pack() root.mainloop() From elguavas@users.sourceforge.net Tue Jul 31 07:58:55 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Mon, 30 Jul 2001 23:58:55 -0700 Subject: [Idle-dev] CVS: idle configDialog.py,NONE,1.1 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv19222 Added Files: configDialog.py Log Message: some new dialogs and support files for new about and configuration implementations --- NEW FILE: configDialog.py --- ##---------------------------------------------------------------------------## ## ## idle - configuration dialog ## elguavas ## ##---------------------------------------------------------------------------## """ configuration dialog """ from Tkinter import * import tkMessageBox class ConfigDialog(Toplevel): """ configuration dialog for idle """ def __init__(self,parent,title,configDict): """ configDict - dictionary of configuration items """ Toplevel.__init__(self, parent) self.configure(borderwidth=5) self.geometry("+%d+%d" % (parent.winfo_rootx()+20, parent.winfo_rooty()+30)) self.config=configDict #elguavas - config placeholders til config stuff completed self.bg=self.cget('bg') self.fg=None #no ugly bold default text font on *nix self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) self.CreateWidgets() self.resizable(height=FALSE,width=FALSE) self.ChangePage() self.transient(parent) self.grab_set() self.protocol("WM_DELETE_WINDOW", self.Cancel) self.parent = parent self.framePages.focus_set() #key bindings for this dialog # self.bind('',self.Ok) #dismiss dialog self.bind('',self.CancelBinding) #dismiss dialog, no save self.bind('',self.SaveBinding) #dismiss dialog, save self.bind('',self.RevertBinding) #revert to defaults self.bind('',self.ChangePageBinding) self.bind('',self.ChangePageBinding) self.bind('',self.ChangePageBinding) self.bind('',self.ChangePageBinding) self.wait_window() def Cancel(self): self.destroy() def Save(self): pass def Revert(self): pass def ChangePage(self): self.pages[self.pageNum.get()].lift() self.title('Settings - '+self.pageButtons[self.pageNum.get()].cget('text')) def CancelBinding(self,event): self.Cancel() def SaveBinding(self,event): self.Save() def RevertBinding(self,event): self.Revert() def ChangePageBinding(self,event): pageKeys=('f','c','k','g') pos=0 for key in pageKeys: if event.char == key: self.pageNum.set(pos) self.ChangePage() return pos=pos+1 def CreateWidgets(self): self.framePages = Frame(self,borderwidth=2,relief=SUNKEN) frameActionButtons = Frame(self) framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN) #action buttons self.buttonRevert = Button(frameActionButtons,text='Revert', command=self.Revert,underline=0,takefocus=FALSE) self.buttonSave = Button(frameActionButtons,text='Save', command=self.Save,underline=0,takefocus=FALSE) self.buttonCancel = Button(frameActionButtons,text='Cancel', command=self.Cancel,takefocus=FALSE) #page buttons self.pageNum=IntVar() self.pageNum.set(0) buttonPageFonts = Radiobutton(framePageButtons,value=0,text='Fonts') buttonPageColours = Radiobutton(framePageButtons,value=1,text='Colours') buttonPageKeys = Radiobutton(framePageButtons,value=2,text='Keys') buttonPageGeneral = Radiobutton(framePageButtons,value=3,text='General') self.pageButtons=(buttonPageFonts,buttonPageColours, buttonPageKeys,buttonPageGeneral) for button in self.pageButtons: button.config(command=self.ChangePage,underline=0,takefocus=FALSE, indicatoron=FALSE,highlightthickness=0,variable=self.pageNum, selectcolor=self.bg,borderwidth=1) button.pack(side=LEFT) #pages framePageFonts=Frame(self.framePages) framePageColours=Frame(self.framePages) framePageKeys=Frame(self.framePages) framePageGeneral=Frame(self.framePages) self.pages=(framePageFonts,framePageColours,framePageKeys,framePageGeneral) #pageFonts Button(framePageFonts,text='fonts page test').pack(padx=30,pady=30) #pageColours Button(framePageColours,text='colours page test').pack(padx=60,pady=60) #pageKeys Button(framePageKeys,text='keys page test').pack(padx=90,pady=90) #pageGeneral Button(framePageGeneral,text='general page test').pack(padx=110,pady=110) #grid in framePages so we can overlap pages framePageButtons.grid(row=0,column=0,sticky=W) for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W)) self.buttonRevert.pack(side=LEFT,padx=5,pady=5) self.buttonSave.pack(side=LEFT,padx=5,pady=5) self.buttonCancel.pack(side=LEFT,padx=5,pady=5) frameActionButtons.pack(side=BOTTOM) self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH) if __name__ == '__main__': #test the dialog root=Tk() Button(root,text='Dialog', command=lambda:ConfigDialog(root,'Settings',None)).pack() root.mainloop() From elguavas@users.sourceforge.net Tue Jul 31 07:59:04 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Mon, 30 Jul 2001 23:59:04 -0700 Subject: [Idle-dev] CVS: idle textView.py,NONE,1.1 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv19281 Added Files: textView.py Log Message: some new dialogs and support files for new about and configuration implementations --- NEW FILE: textView.py --- ##---------------------------------------------------------------------------## ## ## idle - simple text view dialog ## elguavas ## ##---------------------------------------------------------------------------## """ simple text browser for idle """ from Tkinter import * import tkMessageBox class TextViewer(Toplevel): """ simple text viewer dialog for idle """ def __init__(self,parent,title,fileName): """ fileName - string,should be an absoulute filename """ Toplevel.__init__(self, parent) self.configure(borderwidth=5) self.geometry("+%d+%d" % (parent.winfo_rootx()+10, parent.winfo_rooty()+10)) #elguavas - config placeholders til config stuff completed self.bg=None self.fg=None self.CreateWidgets() self.title(title) self.transient(parent) self.grab_set() self.protocol("WM_DELETE_WINDOW", self.Ok) self.parent = parent self.textView.focus_set() #key bindings for this dialog self.bind('',self.Ok) #dismiss dialog self.bind('',self.Ok) #dismiss dialog self.LoadTextFile(fileName) self.textView.config(state=DISABLED) self.wait_window() def LoadTextFile(self, fileName): textFile = None try: textFile = open(fileName, 'r') except IOError: tkMessageBox.showerror(title='File Load Error', message='Unable to load file '+`fileName`+' .') else: self.textView.insert(0.0,textFile.read()) def CreateWidgets(self): frameText = Frame(self) frameButtons = Frame(self) self.buttonOk = Button(frameButtons,text='Ok', command=self.Ok,takefocus=FALSE,default=ACTIVE) self.scrollbarView = Scrollbar(frameText,orient=VERTICAL, takefocus=FALSE,highlightthickness=0) self.textView = Text(frameText,wrap=WORD,highlightthickness=0) self.scrollbarView.config(command=self.textView.yview) self.textView.config(yscrollcommand=self.scrollbarView.set) self.buttonOk.pack(padx=5,pady=5) self.scrollbarView.pack(side=RIGHT,fill=Y) self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH) frameButtons.pack(side=BOTTOM,fill=X) frameText.pack(side=TOP,expand=TRUE,fill=BOTH) def Ok(self, event=None): self.destroy() if __name__ == '__main__': #test the dialog root=Tk() Button(root,text='View', command=lambda:TextViewer(root,'Text','./textView.py')).pack() root.mainloop() From elguavas@users.sourceforge.net Tue Jul 31 08:00:41 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 31 Jul 2001 00:00:41 -0700 Subject: [Idle-dev] CVS: idle idlever.py,1.4,1.5 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv19735 Modified Files: idlever.py Log Message: removed redundant separate idlfefork ver Index: idlever.py =================================================================== RCS file: /cvsroot/idlefork/idle/idlever.py,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -r1.4 -r1.5 *** idlever.py 2001/07/19 04:49:13 1.4 --- idlever.py 2001/07/31 07:00:39 1.5 *************** *** 1,2 **** ! IDLE_VERSION = "0.8" ! IDLEFORK_VERSION = "0.8.1" --- 1 ---- ! IDLE_VERSION = "0.8.2" From elguavas@users.sourceforge.net Tue Jul 31 08:01:49 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 31 Jul 2001 00:01:49 -0700 Subject: [Idle-dev] CVS: idle EditorWindow.py,1.6,1.7 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv20059 Modified Files: EditorWindow.py Log Message: activate new about dialog for testing Index: EditorWindow.py =================================================================== RCS file: /cvsroot/idlefork/idle/EditorWindow.py,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** EditorWindow.py 2001/07/21 09:59:58 1.6 --- EditorWindow.py 2001/07/31 07:01:47 1.7 *************** *** 18,21 **** --- 18,22 ---- import WindowList from IdleConf import idleconf + import aboutDialog # The default tab setting for a Text widget, in average-width characters. *************** *** 89,93 **** Succesful new features in IDLEfork will be mereged back in to stable IDLE. ! This version of IDLEfork is based on the work in stable IDLE version %s, \ IDLE fork 0.7.1 released by David Scherer, and the VPython idle fork. --- 90,94 ---- Succesful new features in IDLEfork will be mereged back in to stable IDLE. ! This version of IDLEfork is based on the work in stable IDLE version 0.8, \ IDLE fork 0.7.1 released by David Scherer, and the VPython idle fork. *************** *** 97,101 **** to be broken. ! """ % (idlever.IDLEFORK_VERSION, idlever.IDLE_VERSION) class EditorWindow: --- 98,102 ---- to be broken. ! """ % (idlever.IDLE_VERSION) class EditorWindow: *************** *** 297,303 **** def about_dialog(self, event=None): ! tkMessageBox.showinfo(self.about_title, self.about_text, ! master=self.text) ! helpfile = "help.txt" --- 298,305 ---- def about_dialog(self, event=None): ! #tkMessageBox.showinfo(self.about_title, self.about_text, ! # master=self.text) ! aboutDialog.AboutDialog(self.top,'About IDLEfork') ! helpfile = "help.txt" From elguavas@users.sourceforge.net Tue Jul 31 11:44:37 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 31 Jul 2001 03:44:37 -0700 Subject: [Idle-dev] CVS: idle aboutDialog.py,1.1,1.2 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv1788 Modified Files: aboutDialog.py Log Message: improve viewfile handling indentation style changed to match existing source Index: aboutDialog.py =================================================================== RCS file: /cvsroot/idlefork/idle/aboutDialog.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** aboutDialog.py 2001/07/31 06:58:43 1.1 --- aboutDialog.py 2001/07/31 10:44:35 1.2 *************** *** 9,133 **** """ from Tkinter import * ! import string import textView import idlever class AboutDialog(Toplevel): ! """ ! modal about dialog for idle ! """ ! def __init__(self,parent,title): ! Toplevel.__init__(self, parent) ! self.configure(borderwidth=5) ! self.geometry("+%d+%d" % (parent.winfo_rootx()+30, ! parent.winfo_rooty()+30)) ! #elguavas - config placeholders til config stuff completed ! self.bg="#555555" ! self.fg="#ffffff" ! #no ugly bold default text font on *nix ! self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) ! ! self.CreateWidgets() ! self.resizable(height=FALSE,width=FALSE) ! self.title(title) ! self.transient(parent) ! self.grab_set() ! self.protocol("WM_DELETE_WINDOW", self.Ok) ! self.parent = parent ! self.buttonOk.focus_set() ! #key bindings for this dialog ! self.bind('',self.CreditsButtonBinding) #credits button ! #self.bind('',self.LicenseButtonBinding) #license button ! self.bind('',self.LicenseButtonBinding) #readme button ! self.bind('',self.Ok) #dismiss dialog ! self.bind('',self.Ok) #dismiss dialog ! self.wait_window() ! ! def CreateWidgets(self): ! frameMain = Frame(self,borderwidth=2,relief=SUNKEN) ! frameButtons = Frame(self) ! frameButtons.pack(side=BOTTOM,fill=X) ! frameMain.pack(side=TOP,expand=TRUE,fill=BOTH) ! self.buttonOk = Button(frameButtons,text='Ok', ! command=self.Ok)#,default=ACTIVE ! self.buttonOk.pack(padx=5,pady=5) ! #self.picture = Image('photo',data=self.pictureData) ! frameBg = Frame(frameMain,bg=self.bg) ! frameBg.pack(expand=TRUE,fill=BOTH) ! labelTitle = Label(frameBg,text='IDLEfork',fg=self.fg,bg=self.bg, ! font=('courier', 24, 'bold')) ! labelTitle.grid(row=0,column=0,sticky=W,padx=10,pady=10) ! #labelPicture = Label(frameBg,text='[picture]') ! #image=self.picture,bg=self.bg) ! #labelPicture.grid(row=0,column=1,sticky=W,rowspan=2,padx=0,pady=3) ! labelVersion = Label(frameBg,text='version '+idlever.IDLE_VERSION, ! fg=self.fg,bg=self.bg,font=self.textFont) ! labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5) ! labelCopyright = Label(frameBg, ! text="A development version of Python's lightweight\n"+ ! 'Integrated DeveLopment Environment, IDLE.', ! justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) ! labelCopyright.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5) ! labelLicense = Label(frameBg, ! text='Licenced under the Python 2.1.1 PSF Licence\n'+ ! '(a GPL compatible licence with extra freedoms)', ! justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) ! labelLicense.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5) ! framePad = Frame(frameBg,height=5,bg=self.bg).grid(row=4,column=0) ! labelEmail = Label(frameBg,text='email: idle-dev@python.org', ! justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) ! labelEmail.grid(row=5,column=0,columnspan=2,sticky=W,padx=10,pady=0) ! labelWWW = Label(frameBg,text='www: http://idlefork.sourceforge.net', ! justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) ! labelWWW.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0) ! frameDivider = Frame(frameBg,borderwidth=1,relief=SUNKEN, ! height=2,bg=self.bg).grid(row=7,column=0,sticky=(E,W),columnspan=3, ! padx=5,pady=5) ! labelPythonVer = Label(frameBg,text='Python version: '+ ! sys.version.split()[0],fg=self.fg,bg=self.bg,font=self.textFont) ! labelPythonVer.grid(row=8,column=0,sticky=W,padx=10,pady=0) ! #handle weird tk version num in windoze python >= 1.6 (?!?) ! tkVer = `TkVersion`.split('.') ! tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:] ! if tkVer[len(tkVer)-1] == '': ! tkVer[len(tkVer)-1] = '0' ! tkVer = string.join(tkVer,'.') ! labelTkVer = Label(frameBg,text='Tk version: '+tkVer,fg=self.fg,bg=self.bg, ! font=self.textFont) ! labelTkVer.grid(row=8,column=1,sticky=W,padx=2,pady=0) ! #labelOs = Label(frameBg,text='python os name: '+pyching.os, ! # font=self.fontText,fg=self.fg,bg=self.bg) ! #labelOs.grid(row=6,column=0,sticky=W,padx=10,pady=0) ! #labelOsType = Label(frameBg,text='python os type: '+pyching.osType, ! # font=self.fontText,fg=self.fg,bg=self.bg) ! #labelOsType.grid(row=6,column=1,sticky=W,padx=5,pady=0) ! #framePad = Frame(frameBg,bg=self.bg,height=5).grid(row=7,column=0) ! ! self.buttonLicense = Button(frameBg,text='View Readme',underline=5, ! width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE ! self.buttonLicense.grid(row=9,column=0,sticky=W,padx=10,pady=10) ! self.buttonCredits = Button(frameBg,text='View Credits',underline=5, ! width=14,highlightbackground=self.bg,command=self.ShowCredits)#takefocus=FALSE ! self.buttonCredits.grid(row=9,column=1,columnspan=2,sticky=E,padx=10,pady=10) ! ! def CreditsButtonBinding(self,event): ! self.buttonCredits.invoke() ! ! def LicenseButtonBinding(self,event): ! self.buttonLicense.invoke() ! ! def ShowLicense(self): ! textView.TextViewer(self,title='About - Readme', ! fileName='./README.txt') ! ! def ShowCredits(self): ! textView.TextViewer(self,title='About - Credits', ! fileName='./CREDITS.txt') ! ! def Ok(self, event=None): ! self.destroy() if __name__ == '__main__': ! #test the dialog ! root=Tk() ! Button(root,text='About',command=lambda:AboutDialog(root,'About')).pack() ! root.mainloop() --- 9,138 ---- """ from Tkinter import * ! import string, os import textView import idlever class AboutDialog(Toplevel): ! """ ! modal about dialog for idle ! """ ! def __init__(self,parent,title): ! Toplevel.__init__(self, parent) ! self.configure(borderwidth=5) ! self.geometry("+%d+%d" % (parent.winfo_rootx()+30, ! parent.winfo_rooty()+30)) ! #elguavas - config placeholders til config stuff completed ! self.bg="#555555" ! self.fg="#ffffff" ! #no ugly bold default text font on *nix ! self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) ! ! self.CreateWidgets() ! self.resizable(height=FALSE,width=FALSE) ! self.title(title) ! self.transient(parent) ! self.grab_set() ! self.protocol("WM_DELETE_WINDOW", self.Ok) ! self.parent = parent ! self.buttonOk.focus_set() ! #key bindings for this dialog ! self.bind('',self.CreditsButtonBinding) #credits button ! #self.bind('',self.LicenseButtonBinding) #license button ! self.bind('',self.LicenseButtonBinding) #readme button ! self.bind('',self.Ok) #dismiss dialog ! self.bind('',self.Ok) #dismiss dialog ! self.wait_window() ! ! def CreateWidgets(self): ! frameMain = Frame(self,borderwidth=2,relief=SUNKEN) ! frameButtons = Frame(self) ! frameButtons.pack(side=BOTTOM,fill=X) ! frameMain.pack(side=TOP,expand=TRUE,fill=BOTH) ! self.buttonOk = Button(frameButtons,text='Ok', ! command=self.Ok)#,default=ACTIVE ! self.buttonOk.pack(padx=5,pady=5) ! #self.picture = Image('photo',data=self.pictureData) ! frameBg = Frame(frameMain,bg=self.bg) ! frameBg.pack(expand=TRUE,fill=BOTH) ! labelTitle = Label(frameBg,text='IDLEfork',fg=self.fg,bg=self.bg, ! font=('courier', 24, 'bold')) ! labelTitle.grid(row=0,column=0,sticky=W,padx=10,pady=10) ! #labelPicture = Label(frameBg,text='[picture]') ! #image=self.picture,bg=self.bg) ! #labelPicture.grid(row=0,column=1,sticky=W,rowspan=2,padx=0,pady=3) ! labelVersion = Label(frameBg,text='version '+idlever.IDLE_VERSION, ! fg=self.fg,bg=self.bg,font=self.textFont) ! labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5) ! labelCopyright = Label(frameBg, ! text="A development version of Python's lightweight\n"+ ! 'Integrated DeveLopment Environment, IDLE.', ! justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) ! labelCopyright.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5) ! labelLicense = Label(frameBg, ! text='Licenced under the Python 2.1.1 PSF Licence\n'+ ! '(a GPL compatible licence with extra freedoms)', ! justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) ! labelLicense.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5) ! framePad = Frame(frameBg,height=5,bg=self.bg).grid(row=4,column=0) ! labelEmail = Label(frameBg,text='email: idle-dev@python.org', ! justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) ! labelEmail.grid(row=5,column=0,columnspan=2,sticky=W,padx=10,pady=0) ! labelWWW = Label(frameBg,text='www: http://idlefork.sourceforge.net', ! justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont) ! labelWWW.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0) ! frameDivider = Frame(frameBg,borderwidth=1,relief=SUNKEN, ! height=2,bg=self.bg).grid(row=7,column=0,sticky=(E,W),columnspan=3, ! padx=5,pady=5) ! labelPythonVer = Label(frameBg,text='Python version: '+ ! sys.version.split()[0],fg=self.fg,bg=self.bg,font=self.textFont) ! labelPythonVer.grid(row=8,column=0,sticky=W,padx=10,pady=0) ! #handle weird tk version num in windoze python >= 1.6 (?!?) ! tkVer = `TkVersion`.split('.') ! tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:] ! if tkVer[len(tkVer)-1] == '': ! tkVer[len(tkVer)-1] = '0' ! tkVer = string.join(tkVer,'.') ! labelTkVer = Label(frameBg,text='Tk version: '+tkVer,fg=self.fg,bg=self.bg, ! font=self.textFont) ! labelTkVer.grid(row=8,column=1,sticky=W,padx=2,pady=0) ! #labelOs = Label(frameBg,text='python os name: '+pyching.os, ! # font=self.fontText,fg=self.fg,bg=self.bg) ! #labelOs.grid(row=6,column=0,sticky=W,padx=10,pady=0) ! #labelOsType = Label(frameBg,text='python os type: '+pyching.osType, ! # font=self.fontText,fg=self.fg,bg=self.bg) ! #labelOsType.grid(row=6,column=1,sticky=W,padx=5,pady=0) ! #framePad = Frame(frameBg,bg=self.bg,height=5).grid(row=7,column=0) ! ! self.buttonLicense = Button(frameBg,text='View Readme',underline=5, ! width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE ! self.buttonLicense.grid(row=9,column=0,sticky=W,padx=10,pady=10) ! self.buttonCredits = Button(frameBg,text='View Credits',underline=5, ! width=14,highlightbackground=self.bg,command=self.ShowCredits)#takefocus=FALSE ! self.buttonCredits.grid(row=9,column=1,columnspan=2,sticky=E,padx=10,pady=10) ! ! def CreditsButtonBinding(self,event): ! self.buttonCredits.invoke() ! ! def LicenseButtonBinding(self,event): ! self.buttonLicense.invoke() ! ! def ShowLicense(self): ! self.ViewFile('About - Readme','README.txt') ! ! def ShowCredits(self): ! self.ViewFile('About - Credits','CREDITS.txt') ! ! def ViewFile(self,viewTitle,viewFile): ! fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),viewFile) ! textView.TextViewer(self,viewTitle,fn) + def Ok(self, event=None): + self.destroy() + if __name__ == '__main__': ! #test the dialog ! root=Tk() ! def run(): ! import aboutDialog ! aboutDialog.AboutDialog(root,'About') ! Button(root,text='Dialog',command=run).pack() ! root.mainloop() From elguavas@users.sourceforge.net Tue Jul 31 11:46:31 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 31 Jul 2001 03:46:31 -0700 Subject: [Idle-dev] CVS: idle configDialog.py,1.1,1.2 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv2060 Modified Files: configDialog.py Log Message: indentation style changed to match existing source Index: configDialog.py =================================================================== RCS file: /cvsroot/idlefork/idle/configDialog.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** configDialog.py 2001/07/31 06:58:53 1.1 --- configDialog.py 2001/07/31 10:46:29 1.2 *************** *** 12,138 **** class ConfigDialog(Toplevel): - """ - configuration dialog for idle - """ - def __init__(self,parent,title,configDict): """ ! configDict - dictionary of configuration items ! """ ! Toplevel.__init__(self, parent) ! self.configure(borderwidth=5) ! self.geometry("+%d+%d" % (parent.winfo_rootx()+20, ! parent.winfo_rooty()+30)) ! self.config=configDict ! #elguavas - config placeholders til config stuff completed ! self.bg=self.cget('bg') ! self.fg=None ! #no ugly bold default text font on *nix ! self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) ! self.CreateWidgets() ! self.resizable(height=FALSE,width=FALSE) ! self.ChangePage() ! self.transient(parent) ! self.grab_set() ! self.protocol("WM_DELETE_WINDOW", self.Cancel) ! self.parent = parent ! self.framePages.focus_set() ! #key bindings for this dialog # self.bind('',self.Ok) #dismiss dialog ! self.bind('',self.CancelBinding) #dismiss dialog, no save ! self.bind('',self.SaveBinding) #dismiss dialog, save ! self.bind('',self.RevertBinding) #revert to defaults ! self.bind('',self.ChangePageBinding) ! self.bind('',self.ChangePageBinding) ! self.bind('',self.ChangePageBinding) ! self.bind('',self.ChangePageBinding) ! self.wait_window() ! ! def Cancel(self): ! self.destroy() ! def Save(self): ! pass ! def Revert(self): ! pass ! def ChangePage(self): ! self.pages[self.pageNum.get()].lift() ! self.title('Settings - '+self.pageButtons[self.pageNum.get()].cget('text')) ! def CancelBinding(self,event): ! self.Cancel() ! ! def SaveBinding(self,event): ! self.Save() ! ! def RevertBinding(self,event): ! self.Revert() ! ! def ChangePageBinding(self,event): ! pageKeys=('f','c','k','g') ! pos=0 ! for key in pageKeys: ! if event.char == key: ! self.pageNum.set(pos) ! self.ChangePage() ! return ! pos=pos+1 ! ! def CreateWidgets(self): ! self.framePages = Frame(self,borderwidth=2,relief=SUNKEN) ! frameActionButtons = Frame(self) ! framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN) ! #action buttons ! self.buttonRevert = Button(frameActionButtons,text='Revert', ! command=self.Revert,underline=0,takefocus=FALSE) ! self.buttonSave = Button(frameActionButtons,text='Save', ! command=self.Save,underline=0,takefocus=FALSE) ! self.buttonCancel = Button(frameActionButtons,text='Cancel', ! command=self.Cancel,takefocus=FALSE) ! #page buttons ! self.pageNum=IntVar() ! self.pageNum.set(0) ! buttonPageFonts = Radiobutton(framePageButtons,value=0,text='Fonts') ! buttonPageColours = Radiobutton(framePageButtons,value=1,text='Colours') ! buttonPageKeys = Radiobutton(framePageButtons,value=2,text='Keys') ! buttonPageGeneral = Radiobutton(framePageButtons,value=3,text='General') ! self.pageButtons=(buttonPageFonts,buttonPageColours, ! buttonPageKeys,buttonPageGeneral) ! for button in self.pageButtons: ! button.config(command=self.ChangePage,underline=0,takefocus=FALSE, ! indicatoron=FALSE,highlightthickness=0,variable=self.pageNum, ! selectcolor=self.bg,borderwidth=1) ! button.pack(side=LEFT) ! #pages ! framePageFonts=Frame(self.framePages) ! framePageColours=Frame(self.framePages) ! framePageKeys=Frame(self.framePages) ! framePageGeneral=Frame(self.framePages) ! self.pages=(framePageFonts,framePageColours,framePageKeys,framePageGeneral) ! #pageFonts ! Button(framePageFonts,text='fonts page test').pack(padx=30,pady=30) ! #pageColours ! Button(framePageColours,text='colours page test').pack(padx=60,pady=60) ! #pageKeys ! Button(framePageKeys,text='keys page test').pack(padx=90,pady=90) ! #pageGeneral ! Button(framePageGeneral,text='general page test').pack(padx=110,pady=110) ! #grid in framePages so we can overlap pages ! framePageButtons.grid(row=0,column=0,sticky=W) ! for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W)) ! self.buttonRevert.pack(side=LEFT,padx=5,pady=5) ! self.buttonSave.pack(side=LEFT,padx=5,pady=5) ! self.buttonCancel.pack(side=LEFT,padx=5,pady=5) ! frameActionButtons.pack(side=BOTTOM) ! self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH) if __name__ == '__main__': ! #test the dialog ! root=Tk() ! Button(root,text='Dialog', ! command=lambda:ConfigDialog(root,'Settings',None)).pack() ! root.mainloop() --- 12,138 ---- class ConfigDialog(Toplevel): """ ! configuration dialog for idle ! """ ! def __init__(self,parent,title,configDict): ! """ ! configDict - dictionary of configuration items ! """ ! Toplevel.__init__(self, parent) ! self.configure(borderwidth=5) ! self.geometry("+%d+%d" % (parent.winfo_rootx()+20, ! parent.winfo_rooty()+30)) ! self.config=configDict ! #elguavas - config placeholders til config stuff completed ! self.bg=self.cget('bg') ! self.fg=None ! #no ugly bold default text font on *nix ! self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) ! self.CreateWidgets() ! self.resizable(height=FALSE,width=FALSE) ! self.ChangePage() ! self.transient(parent) ! self.grab_set() ! self.protocol("WM_DELETE_WINDOW", self.Cancel) ! self.parent = parent ! self.framePages.focus_set() ! #key bindings for this dialog # self.bind('',self.Ok) #dismiss dialog ! self.bind('',self.CancelBinding) #dismiss dialog, no save ! self.bind('',self.SaveBinding) #dismiss dialog, save ! self.bind('',self.RevertBinding) #revert to defaults ! self.bind('',self.ChangePageBinding) ! self.bind('',self.ChangePageBinding) ! self.bind('',self.ChangePageBinding) ! self.bind('',self.ChangePageBinding) ! self.wait_window() ! ! def Cancel(self): ! self.destroy() ! def Save(self): ! pass ! def Revert(self): ! pass ! def ChangePage(self): ! self.pages[self.pageNum.get()].lift() ! self.title('Settings - '+self.pageButtons[self.pageNum.get()].cget('text')) ! def CancelBinding(self,event): ! self.Cancel() ! ! def SaveBinding(self,event): ! self.Save() ! def RevertBinding(self,event): ! self.Revert() ! def ChangePageBinding(self,event): ! pageKeys=('f','c','k','g') ! pos=0 ! for key in pageKeys: ! if event.char == key: ! self.pageNum.set(pos) ! self.ChangePage() ! return ! pos=pos+1 + def CreateWidgets(self): + self.framePages = Frame(self,borderwidth=2,relief=SUNKEN) + frameActionButtons = Frame(self) + framePageButtons = Frame(self.framePages,borderwidth=1,relief=SUNKEN) + #action buttons + self.buttonRevert = Button(frameActionButtons,text='Revert', + command=self.Revert,underline=0,takefocus=FALSE) + self.buttonSave = Button(frameActionButtons,text='Save', + command=self.Save,underline=0,takefocus=FALSE) + self.buttonCancel = Button(frameActionButtons,text='Cancel', + command=self.Cancel,takefocus=FALSE) + #page buttons + self.pageNum=IntVar() + self.pageNum.set(0) + buttonPageFonts = Radiobutton(framePageButtons,value=0,text='Fonts') + buttonPageColours = Radiobutton(framePageButtons,value=1,text='Colours') + buttonPageKeys = Radiobutton(framePageButtons,value=2,text='Keys') + buttonPageGeneral = Radiobutton(framePageButtons,value=3,text='General') + self.pageButtons=(buttonPageFonts,buttonPageColours, + buttonPageKeys,buttonPageGeneral) + for button in self.pageButtons: + button.config(command=self.ChangePage,underline=0,takefocus=FALSE, + indicatoron=FALSE,highlightthickness=0,variable=self.pageNum, + selectcolor=self.bg,borderwidth=1) + button.pack(side=LEFT) + #pages + framePageFonts=Frame(self.framePages) + framePageColours=Frame(self.framePages) + framePageKeys=Frame(self.framePages) + framePageGeneral=Frame(self.framePages) + self.pages=(framePageFonts,framePageColours,framePageKeys,framePageGeneral) + #pageFonts + Button(framePageFonts,text='fonts page test').pack(padx=30,pady=30) + #pageColours + Button(framePageColours,text='colours page test').pack(padx=60,pady=60) + #pageKeys + Button(framePageKeys,text='keys page test').pack(padx=90,pady=90) + #pageGeneral + Button(framePageGeneral,text='general page test').pack(padx=110,pady=110) + + #grid in framePages so we can overlap pages + framePageButtons.grid(row=0,column=0,sticky=W) + for page in self.pages: page.grid(row=1,column=0,sticky=(N,S,E,W)) + + self.buttonRevert.pack(side=LEFT,padx=5,pady=5) + self.buttonSave.pack(side=LEFT,padx=5,pady=5) + self.buttonCancel.pack(side=LEFT,padx=5,pady=5) + frameActionButtons.pack(side=BOTTOM) + self.framePages.pack(side=TOP,expand=TRUE,fill=BOTH) + if __name__ == '__main__': ! #test the dialog ! root=Tk() ! Button(root,text='Dialog', ! command=lambda:ConfigDialog(root,'Settings',None)).pack() ! root.mainloop() From elguavas@users.sourceforge.net Tue Jul 31 11:46:55 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 31 Jul 2001 03:46:55 -0700 Subject: [Idle-dev] CVS: idle textView.py,1.1,1.2 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv2137 Modified Files: textView.py Log Message: indentation style changed to match existing source Index: textView.py =================================================================== RCS file: /cvsroot/idlefork/idle/textView.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -r1.1 -r1.2 *** textView.py 2001/07/31 06:59:02 1.1 --- textView.py 2001/07/31 10:46:53 1.2 *************** *** 12,77 **** class TextViewer(Toplevel): - """ - simple text viewer dialog for idle - """ - def __init__(self,parent,title,fileName): """ ! fileName - string,should be an absoulute filename ! """ ! Toplevel.__init__(self, parent) ! self.configure(borderwidth=5) ! self.geometry("+%d+%d" % (parent.winfo_rootx()+10, ! parent.winfo_rooty()+10)) ! #elguavas - config placeholders til config stuff completed ! self.bg=None ! self.fg=None ! self.CreateWidgets() ! self.title(title) ! self.transient(parent) ! self.grab_set() ! self.protocol("WM_DELETE_WINDOW", self.Ok) ! self.parent = parent ! self.textView.focus_set() ! #key bindings for this dialog ! self.bind('',self.Ok) #dismiss dialog ! self.bind('',self.Ok) #dismiss dialog ! self.LoadTextFile(fileName) ! self.textView.config(state=DISABLED) ! self.wait_window() ! ! def LoadTextFile(self, fileName): ! textFile = None ! try: ! textFile = open(fileName, 'r') ! except IOError: ! tkMessageBox.showerror(title='File Load Error', ! message='Unable to load file '+`fileName`+' .') ! else: ! self.textView.insert(0.0,textFile.read()) ! ! def CreateWidgets(self): ! frameText = Frame(self) ! frameButtons = Frame(self) ! self.buttonOk = Button(frameButtons,text='Ok', ! command=self.Ok,takefocus=FALSE,default=ACTIVE) ! self.scrollbarView = Scrollbar(frameText,orient=VERTICAL, ! takefocus=FALSE,highlightthickness=0) ! self.textView = Text(frameText,wrap=WORD,highlightthickness=0) ! self.scrollbarView.config(command=self.textView.yview) ! self.textView.config(yscrollcommand=self.scrollbarView.set) ! self.buttonOk.pack(padx=5,pady=5) ! self.scrollbarView.pack(side=RIGHT,fill=Y) ! self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH) ! frameButtons.pack(side=BOTTOM,fill=X) ! frameText.pack(side=TOP,expand=TRUE,fill=BOTH) ! ! def Ok(self, event=None): ! self.destroy() if __name__ == '__main__': ! #test the dialog ! root=Tk() ! Button(root,text='View', ! command=lambda:TextViewer(root,'Text','./textView.py')).pack() ! root.mainloop() --- 12,77 ---- class TextViewer(Toplevel): """ ! simple text viewer dialog for idle ! """ ! def __init__(self,parent,title,fileName): ! """ ! fileName - string,should be an absoulute filename ! """ ! Toplevel.__init__(self, parent) ! self.configure(borderwidth=5) ! self.geometry("+%d+%d" % (parent.winfo_rootx()+10, ! parent.winfo_rooty()+10)) ! #elguavas - config placeholders til config stuff completed ! self.bg=None ! self.fg=None ! self.CreateWidgets() ! self.title(title) ! self.transient(parent) ! self.grab_set() ! self.protocol("WM_DELETE_WINDOW", self.Ok) ! self.parent = parent ! self.textView.focus_set() ! #key bindings for this dialog ! self.bind('',self.Ok) #dismiss dialog ! self.bind('',self.Ok) #dismiss dialog ! self.LoadTextFile(fileName) ! self.textView.config(state=DISABLED) ! self.wait_window() ! ! def LoadTextFile(self, fileName): ! textFile = None ! try: ! textFile = open(fileName, 'r') ! except IOError: ! tkMessageBox.showerror(title='File Load Error', ! message='Unable to load file '+`fileName`+' .') ! else: ! self.textView.insert(0.0,textFile.read()) ! ! def CreateWidgets(self): ! frameText = Frame(self) ! frameButtons = Frame(self) ! self.buttonOk = Button(frameButtons,text='Ok', ! command=self.Ok,takefocus=FALSE,default=ACTIVE) ! self.scrollbarView = Scrollbar(frameText,orient=VERTICAL, ! takefocus=FALSE,highlightthickness=0) ! self.textView = Text(frameText,wrap=WORD,highlightthickness=0) ! self.scrollbarView.config(command=self.textView.yview) ! self.textView.config(yscrollcommand=self.scrollbarView.set) ! self.buttonOk.pack(padx=5,pady=5) ! self.scrollbarView.pack(side=RIGHT,fill=Y) ! self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH) ! frameButtons.pack(side=BOTTOM,fill=X) ! frameText.pack(side=TOP,expand=TRUE,fill=BOTH) ! ! def Ok(self, event=None): ! self.destroy() if __name__ == '__main__': ! #test the dialog ! root=Tk() ! Button(root,text='View', ! command=lambda:TextViewer(root,'Text','./textView.py')).pack() ! root.mainloop() From elguavas@users.sourceforge.net Tue Jul 31 12:11:40 2001 From: elguavas@users.sourceforge.net (Stephen) Date: Tue, 31 Jul 2001 04:11:40 -0700 Subject: [Idle-dev] CVS: idle EditorWindow.py,1.7,1.8 Message-ID: Update of /cvsroot/idlefork/idle In directory usw-pr-cvs1:/tmp/cvs-serv6589 Modified Files: EditorWindow.py Log Message: A more lightweight (and read only) way to view help text until the new help system is implemented. Removed some commented cruft. Index: EditorWindow.py =================================================================== RCS file: /cvsroot/idlefork/idle/EditorWindow.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -r1.7 -r1.8 *** EditorWindow.py 2001/07/31 07:01:47 1.7 --- EditorWindow.py 2001/07/31 11:11:38 1.8 *************** *** 18,22 **** import WindowList from IdleConf import idleconf ! import aboutDialog # The default tab setting for a Text widget, in average-width characters. --- 18,22 ---- import WindowList from IdleConf import idleconf ! import aboutDialog, textView # The default tab setting for a Text widget, in average-width characters. *************** *** 79,103 **** #$ unix - - about_title = "About IDLEfork" - about_text = """\ - IDLEfork %s - - IDLE is an Integrated DeveLopment Environment for Python \ - by Guido van Rossum. - - IDLEfork is an official experimental development version of IDLE. \ - Succesful new features in IDLEfork will be mereged back in to stable IDLE. - - This version of IDLEfork is based on the work in stable IDLE version 0.8, \ - IDLE fork 0.7.1 released by David Scherer, and the VPython idle fork. - - See README.txt and NEWS.txt for more details on this verion of IDLEfork. - - WARNING: IDLEfork is at this stage alpha quality software, expect things \ - to be broken. - - """ % (idlever.IDLE_VERSION) - class EditorWindow: --- 79,82 ---- *************** *** 110,116 **** from MultiStatusBar import MultiStatusBar - about_title = about_title - about_text = about_text - vars = {} --- 89,92 ---- *************** *** 298,320 **** def about_dialog(self, event=None): - #tkMessageBox.showinfo(self.about_title, self.about_text, - # master=self.text) aboutDialog.AboutDialog(self.top,'About IDLEfork') - helpfile = "help.txt" - def good_advice(self, event=None): tkMessageBox.showinfo('Advice', "Don't Panic!", master=self.text) def help_dialog(self, event=None): ! try: ! helpfile = os.path.join(os.path.dirname(__file__), self.helpfile) ! except NameError: ! helpfile = self.helpfile ! if self.flist: ! self.flist.open(helpfile) ! else: ! self.io.loadfile(helpfile) ! help_url = "http://www.python.org/doc/current/" if sys.platform[:3] == "win": --- 274,286 ---- def about_dialog(self, event=None): aboutDialog.AboutDialog(self.top,'About IDLEfork') def good_advice(self, event=None): tkMessageBox.showinfo('Advice', "Don't Panic!", master=self.text) def help_dialog(self, event=None): ! fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),'help.txt') ! textView.TextViewer(self.top,'Help',fn) ! help_url = "http://www.python.org/doc/current/" if sys.platform[:3] == "win":