Adapted to modern times.  Cosmetic and comment changes.
diff --git a/Demo/stdwin/python.py b/Demo/stdwin/python.py
index c43fd48..e362074 100755
--- a/Demo/stdwin/python.py
+++ b/Demo/stdwin/python.py
@@ -1,4 +1,6 @@
-#! /usr/local/python
+#! /usr/local/bin/python
+
+# :set tabsize=4:
 
 # A STDWIN-based front end for the Python interpreter.
 #
@@ -9,6 +11,11 @@
 #
 # BUGS AND CAVEATS:
 #
+# I wrote this about two years ago.  There are now some features in
+# Python that make it possible to overcome some of the bugs below,
+# but I haven't the time to adapt it; it's just meant as a little
+# thing to get you started...
+#
 # Although this supports multiple windows, the whole application
 # is deaf and dumb when a command is running in one window.
 #
@@ -150,6 +157,7 @@
 	type, win, detail = event
 	if type == WE_CLOSE:
 		do_close(win)
+		return
 	elif type == WE_SIZE:
 		win.editor.move((0, 0), win.getwinsize())
 	elif type == WE_COMMAND and detail == WC_RETURN:
@@ -168,7 +176,7 @@
 		mp.callback[item](win)
 	else:
 		void = win.editor.event(event)
-	if win.editor:
+	if win in mainloop.windows:
 		# May have been deleted by close...
 		win.setdocsize(0, win.editor.getrect()[1][1])
 		if type in (WE_CHAR, WE_COMMAND):
@@ -190,7 +198,7 @@
 	win.editor.replace(text)
 	# Resize the window to display the text
 	win.setdocsize(0, win.editor.getrect()[1][1])	# update the size before..
-	win.editor.setfocus(win.editor.getfocus())		# move focus to the change - dml
+	win.editor.setfocus(win.editor.getfocus())		# move focus to the change
 
 
 # File menu handlers
@@ -238,12 +246,13 @@
 	except os.error:
 		pass
 	mainloop.unregister(win)
+	win.close()
 #
 def do_quit(win):
 	# Call win.dispatch instead of do_close because there
 	# may be 'alien' windows in the list.
-	for win in mainloop.windows:
-		mainloop.dispatch(WE_CLOSE, win, None)	# need to catch failed close
+	for win in mainloop.windows[:]:
+		mainloop.dispatch((WE_CLOSE, win, None)) # need to catch failed close
 
 
 # Edit menu handlers
@@ -314,14 +323,14 @@
 	if a == b:
 		# There is no selected text, just an insert point;
 		# so execute the current line.
-		while 0 < a and alltext[a-1] <> '\n': a = a-1	# Find beginning of line.
+		while 0 < a and alltext[a-1] <> '\n': a = a-1 # Find beginning of line.
 		while b < n and alltext[b] <> '\n':		# Find end of line after b.
 			b = b+1
 		text = alltext[a:b] + '\n'
 	else:
 		# Execute exactly the selected text.
 		text = win.editor.getfocustext()
-		if text[-1:] <> '\n':					# Make sure text ends with newline.
+		if text[-1:] <> '\n':					# Make sure text ends with \n.
 			text = text + '\n'
 		while b < n and alltext[b] <> '\n':		# Find end of line after b.
 			b = b+1
@@ -502,3 +511,10 @@
 # Call the main program.
 #
 main()
+
+
+# This was originally coded on a Mac, so...
+# Local variables:
+# py-indent-offset: 4
+# tab-width: 4
+# end: