From: Roger Serwy Date: Wed, 3 Apr 2013 05:42:24 +0000 (-0500) Subject: #14254: IDLE now handles readline correctly across shell restarts. X-Git-Tag: v2.7.5~115 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ad8cad3c6d18f1455de9b4d3d370702eb3a1ee9f;p=thirdparty%2FPython%2Fcpython.git #14254: IDLE now handles readline correctly across shell restarts. --- diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index d144a51b725d..9451d2e6c929 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -469,6 +469,7 @@ class ModifiedInterpreter(InteractiveInterpreter): self.display_no_subprocess_error() return None self.transfer_path(with_cwd=with_cwd) + console.stop_readline() # annotate restart in shell window and mark it console.text.delete("iomark", "end-1c") if was_executing: @@ -908,6 +909,7 @@ class PyShell(OutputWindow): canceled = False endoffile = False closing = False + _stop_readline_flag = False def set_warning_stream(self, stream): global warning_stream @@ -983,8 +985,7 @@ class PyShell(OutputWindow): parent=self.text) if response is False: return "cancel" - if self.reading: - self.top.quit() + self.stop_readline() self.canceled = True self.closing = True # Wait for poll_subprocess() rescheduling to stop @@ -1036,6 +1037,12 @@ class PyShell(OutputWindow): Tkinter._default_root = None # 03Jan04 KBK What's this? return True + def stop_readline(self): + if not self.reading: # no nested mainloop to exit. + return + self._stop_readline_flag = True + self.top.quit() + def readline(self): save = self.reading try: @@ -1043,6 +1050,9 @@ class PyShell(OutputWindow): self.top.mainloop() # nested mainloop() finally: self.reading = save + if self._stop_readline_flag: + self._stop_readline_flag = False + return "" line = self.text.get("iomark", "end-1c") if len(line) == 0: # may be EOF if we quit our mainloop with Ctrl-C line = "\n" diff --git a/Misc/NEWS b/Misc/NEWS index 75141c61062a..b5dcdeb96b4c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ Core and Builtins Library ------- +- Issue #14254: IDLE now handles readline correctly across shell restarts. + - Issue #17614: IDLE no longer raises exception when quickly closing a file. - Issue #13163: Rename operands in smtplib.SMTP._get_socket to correct names;