#14254: IDLE now handles readline correctly across shell restarts.
This commit is contained in:
parent
d7c9d9cdcd
commit
ad8cad3c6d
|
@ -469,6 +469,7 @@ class ModifiedInterpreter(InteractiveInterpreter):
|
||||||
self.display_no_subprocess_error()
|
self.display_no_subprocess_error()
|
||||||
return None
|
return None
|
||||||
self.transfer_path(with_cwd=with_cwd)
|
self.transfer_path(with_cwd=with_cwd)
|
||||||
|
console.stop_readline()
|
||||||
# annotate restart in shell window and mark it
|
# annotate restart in shell window and mark it
|
||||||
console.text.delete("iomark", "end-1c")
|
console.text.delete("iomark", "end-1c")
|
||||||
if was_executing:
|
if was_executing:
|
||||||
|
@ -908,6 +909,7 @@ class PyShell(OutputWindow):
|
||||||
canceled = False
|
canceled = False
|
||||||
endoffile = False
|
endoffile = False
|
||||||
closing = False
|
closing = False
|
||||||
|
_stop_readline_flag = False
|
||||||
|
|
||||||
def set_warning_stream(self, stream):
|
def set_warning_stream(self, stream):
|
||||||
global warning_stream
|
global warning_stream
|
||||||
|
@ -983,8 +985,7 @@ class PyShell(OutputWindow):
|
||||||
parent=self.text)
|
parent=self.text)
|
||||||
if response is False:
|
if response is False:
|
||||||
return "cancel"
|
return "cancel"
|
||||||
if self.reading:
|
self.stop_readline()
|
||||||
self.top.quit()
|
|
||||||
self.canceled = True
|
self.canceled = True
|
||||||
self.closing = True
|
self.closing = True
|
||||||
# Wait for poll_subprocess() rescheduling to stop
|
# Wait for poll_subprocess() rescheduling to stop
|
||||||
|
@ -1036,6 +1037,12 @@ class PyShell(OutputWindow):
|
||||||
Tkinter._default_root = None # 03Jan04 KBK What's this?
|
Tkinter._default_root = None # 03Jan04 KBK What's this?
|
||||||
return True
|
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):
|
def readline(self):
|
||||||
save = self.reading
|
save = self.reading
|
||||||
try:
|
try:
|
||||||
|
@ -1043,6 +1050,9 @@ class PyShell(OutputWindow):
|
||||||
self.top.mainloop() # nested mainloop()
|
self.top.mainloop() # nested mainloop()
|
||||||
finally:
|
finally:
|
||||||
self.reading = save
|
self.reading = save
|
||||||
|
if self._stop_readline_flag:
|
||||||
|
self._stop_readline_flag = False
|
||||||
|
return ""
|
||||||
line = self.text.get("iomark", "end-1c")
|
line = self.text.get("iomark", "end-1c")
|
||||||
if len(line) == 0: # may be EOF if we quit our mainloop with Ctrl-C
|
if len(line) == 0: # may be EOF if we quit our mainloop with Ctrl-C
|
||||||
line = "\n"
|
line = "\n"
|
||||||
|
|
|
@ -12,6 +12,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #14254: IDLE now handles readline correctly across shell restarts.
|
||||||
|
|
||||||
- Issue #17614: IDLE no longer raises exception when quickly closing a file.
|
- Issue #17614: IDLE no longer raises exception when quickly closing a file.
|
||||||
|
|
||||||
- Issue #13163: Rename operands in smtplib.SMTP._get_socket to correct names;
|
- Issue #13163: Rename operands in smtplib.SMTP._get_socket to correct names;
|
||||||
|
|
Loading…
Reference in New Issue