From d112bc7958151fa17c4ccb27413c43e45b8476fb Mon Sep 17 00:00:00 2001 From: "Kurt B. Kaiser" Date: Wed, 16 Aug 2006 05:01:42 +0000 Subject: [PATCH] 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 --- Lib/idlelib/CREDITS.txt | 4 ++-- Lib/idlelib/NEWS.txt | 6 +++++- Lib/idlelib/PyShell.py | 16 ++++++++-------- Lib/site.py | 6 ++++++ Misc/NEWS | 3 +++ 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/Lib/idlelib/CREDITS.txt b/Lib/idlelib/CREDITS.txt index e838c03987..30561a9ea9 100644 --- a/Lib/idlelib/CREDITS.txt +++ b/Lib/idlelib/CREDITS.txt @@ -24,8 +24,8 @@ Noam Raphael (Code Context, Call Tips, many other patches), and Chui Tey (RPC integration, debugger integration and persistent breakpoints). Scott David Daniels, Tal Einat, Hernan Foffani, Christos Georgiou, -Martin v. Löwis, Jason Orendorff, Josh Robb, Nigel Rowe, Bruce Sherwood, -and Jeff Shute have submitted useful patches. Thanks, guys! +Jim Jewett, Martin v. Löwis, Jason Orendorff, Josh Robb, Nigel Rowe, +Bruce Sherwood, and Jeff Shute have submitted useful patches. Thanks, guys! For additional details refer to NEWS.txt and Changelog. diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 90b57e67a6..dfdb0cb10c 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,7 +3,11 @@ What's New in IDLE 1.2c1? *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 (since 1.2a1) Patch 1528468 Tal Einat. diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index 12a45a4503..5790483e41 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -478,9 +478,6 @@ class ModifiedInterpreter(InteractiveInterpreter): import sys as _sys _sys.path = %r 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,)) active_seq = None @@ -514,7 +511,10 @@ class ModifiedInterpreter(InteractiveInterpreter): print >>sys.__stderr__, errmsg, what print >>console, errmsg, what # 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 if not self.tkconsole.closing: self.tkconsole.text.after(self.tkconsole.pollinterval, @@ -730,7 +730,10 @@ class ModifiedInterpreter(InteractiveInterpreter): self.tkconsole.endexecuting() finally: if not use_subprocess: - self.tkconsole.endexecuting() + try: + self.tkconsole.endexecuting() + except AttributeError: # shell may have closed + pass def write(self, s): "Override base class method" @@ -804,9 +807,6 @@ class PyShell(OutputWindow): # 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.usetabs = True # indentwidth must be 8 when using tabs. See note in EditorWindow: diff --git a/Lib/site.py b/Lib/site.py index e2ad3b92c5..113f2215e5 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -242,6 +242,12 @@ def setquit(): def __repr__(self): return 'Use %s() or %s to exit' % (self.name, eof) 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) __builtin__.quit = Quitter('quit') __builtin__.exit = Quitter('exit') diff --git a/Misc/NEWS b/Misc/NEWS index e308b7dae4..621245915e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -64,6 +64,9 @@ Core and builtins 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. - Patch #1536071: trace.py should now find the full module name of a -- 2.40.0