Patch #1540892: site.py Quitter() class attempts to close sys.stdin

before raising SystemExit, allowing IDLE to honor quit() and exit().

M    Lib/site.py
M    Lib/idlelib/PyShell.py
M    Lib/idlelib/CREDITS.txt
M    Lib/idlelib/NEWS.txt
M    Misc/NEWS
This commit is contained in:
Kurt B. Kaiser 2006-08-16 05:01:42 +00:00
parent 798ed8f076
commit d112bc7958
5 changed files with 24 additions and 11 deletions

View File

@ -24,8 +24,8 @@ Noam Raphael (Code Context, Call Tips, many other patches), and Chui Tey (RPC
integration, debugger integration and persistent breakpoints). integration, debugger integration and persistent breakpoints).
Scott David Daniels, Tal Einat, Hernan Foffani, Christos Georgiou, Scott David Daniels, Tal Einat, Hernan Foffani, Christos Georgiou,
Martin v. Löwis, Jason Orendorff, Josh Robb, Nigel Rowe, Bruce Sherwood, Jim Jewett, Martin v. Löwis, Jason Orendorff, Josh Robb, Nigel Rowe,
and Jeff Shute have submitted useful patches. Thanks, guys! Bruce Sherwood, and Jeff Shute have submitted useful patches. Thanks, guys!
For additional details refer to NEWS.txt and Changelog. For additional details refer to NEWS.txt and Changelog.

View File

@ -3,7 +3,11 @@ What's New in IDLE 1.2c1?
*Release date: 17-AUG-2006* *Release date: 17-AUG-2006*
- The 'with' statement is now a Code Context block opener - IDLE honors new quit() and exit() commands from site.py Quitter() object.
Patch 1540892, Jim Jewett
- The 'with' statement is now a Code Context block opener.
Patch 1540851, Jim Jewett
- Retrieval of previous shell command was not always preserving indentation - Retrieval of previous shell command was not always preserving indentation
(since 1.2a1) Patch 1528468 Tal Einat. (since 1.2a1) Patch 1528468 Tal Einat.

View File

@ -478,9 +478,6 @@ def transfer_path(self):
import sys as _sys import sys as _sys
_sys.path = %r _sys.path = %r
del _sys del _sys
_msg = 'Use File/Exit or your end-of-file key to quit IDLE'
__builtins__.quit = __builtins__.exit = _msg
del _msg
\n""" % (sys.path,)) \n""" % (sys.path,))
active_seq = None active_seq = None
@ -514,7 +511,10 @@ def poll_subprocess(self):
print >>sys.__stderr__, errmsg, what print >>sys.__stderr__, errmsg, what
print >>console, errmsg, what print >>console, errmsg, what
# we received a response to the currently active seq number: # we received a response to the currently active seq number:
self.tkconsole.endexecuting() try:
self.tkconsole.endexecuting()
except AttributeError: # shell may have closed
pass
# Reschedule myself # Reschedule myself
if not self.tkconsole.closing: if not self.tkconsole.closing:
self.tkconsole.text.after(self.tkconsole.pollinterval, self.tkconsole.text.after(self.tkconsole.pollinterval,
@ -730,7 +730,10 @@ def runcode(self, code):
self.tkconsole.endexecuting() self.tkconsole.endexecuting()
finally: finally:
if not use_subprocess: if not use_subprocess:
self.tkconsole.endexecuting() try:
self.tkconsole.endexecuting()
except AttributeError: # shell may have closed
pass
def write(self, s): def write(self, s):
"Override base class method" "Override base class method"
@ -804,9 +807,6 @@ def __init__(self, flist=None):
# #
OutputWindow.__init__(self, flist, None, None) OutputWindow.__init__(self, flist, None, None)
# #
import __builtin__
__builtin__.quit = __builtin__.exit = "To exit, type Ctrl-D."
#
## self.config(usetabs=1, indentwidth=8, context_use_ps1=1) ## self.config(usetabs=1, indentwidth=8, context_use_ps1=1)
self.usetabs = True self.usetabs = True
# indentwidth must be 8 when using tabs. See note in EditorWindow: # indentwidth must be 8 when using tabs. See note in EditorWindow:

View File

@ -242,6 +242,12 @@ def __init__(self, name):
def __repr__(self): def __repr__(self):
return 'Use %s() or %s to exit' % (self.name, eof) return 'Use %s() or %s to exit' % (self.name, eof)
def __call__(self, code=None): def __call__(self, code=None):
# Shells like IDLE catch the SystemExit, but listen when their
# stdin wrapper is closed.
try:
sys.stdin.close()
except:
pass
raise SystemExit(code) raise SystemExit(code)
__builtin__.quit = Quitter('quit') __builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit') __builtin__.exit = Quitter('exit')

View File

@ -64,6 +64,9 @@ Core and builtins
Library Library
------- -------
- Patch #1540892: site.py Quitter() class attempts to close sys.stdin
before raising SystemExit, allowing IDLE to honor quit() and exit().
- Bug #1224621: make tabnanny recognize IndentationErrors raised by tokenize. - Bug #1224621: make tabnanny recognize IndentationErrors raised by tokenize.
- Patch #1536071: trace.py should now find the full module name of a - Patch #1536071: trace.py should now find the full module name of a