mirror of https://github.com/python/cpython
Fixes #11088: IDLE crashes when using F5 to run a script on OSX with Tk 8.5
Without this patch IDLE will crash reliably on OSX when Tkinter is linked to TkCocoa 8.5.x. To reproduce: * Create a new file (script.py) with the following two lines: x = input('prompt: ') print(x) * Save the script * Run the script using the F5 keyboard shortcut (running from the menu works fine) The patch is a fairly crude hack, but we haven't found a better workaround for this Tk bug yet.
This commit is contained in:
parent
6edd8c1faf
commit
5ee0567bb2
|
@ -27,6 +27,7 @@ from idlelib.EditorWindow import EditorWindow
|
||||||
from idlelib import PyShell, IOBinding
|
from idlelib import PyShell, IOBinding
|
||||||
|
|
||||||
from idlelib.configHandler import idleConf
|
from idlelib.configHandler import idleConf
|
||||||
|
from idlelib import macosxSupport
|
||||||
|
|
||||||
indent_message = """Error: Inconsistent indentation detected!
|
indent_message = """Error: Inconsistent indentation detected!
|
||||||
|
|
||||||
|
@ -52,6 +53,9 @@ class ScriptBinding:
|
||||||
self.flist = self.editwin.flist
|
self.flist = self.editwin.flist
|
||||||
self.root = self.editwin.root
|
self.root = self.editwin.root
|
||||||
|
|
||||||
|
if macosxSupport.runningAsOSXApp():
|
||||||
|
self.editwin.text_frame.bind('<<run-module-event-2>>', self._run_module_event)
|
||||||
|
|
||||||
def check_module_event(self, event):
|
def check_module_event(self, event):
|
||||||
filename = self.getfilename()
|
filename = self.getfilename()
|
||||||
if not filename:
|
if not filename:
|
||||||
|
@ -116,14 +120,27 @@ class ScriptBinding:
|
||||||
shell.set_warning_stream(saved_stream)
|
shell.set_warning_stream(saved_stream)
|
||||||
|
|
||||||
def run_module_event(self, event):
|
def run_module_event(self, event):
|
||||||
|
if macosxSupport.runningAsOSXApp():
|
||||||
|
# Tk-Cocoa in MacOSX is broken until at least
|
||||||
|
# Tk 8.5.9, and without this rather
|
||||||
|
# crude workaround IDLE would hang when a user
|
||||||
|
# tries to run a module using the keyboard shortcut
|
||||||
|
# (the menu item works fine).
|
||||||
|
self.editwin.text_frame.after(200,
|
||||||
|
lambda: self.editwin.text_frame.event_generate('<<run-module-event-2>>'))
|
||||||
|
return 'break'
|
||||||
|
else:
|
||||||
|
return self._run_module_event(event)
|
||||||
|
|
||||||
|
def _run_module_event(self, event):
|
||||||
"""Run the module after setting up the environment.
|
"""Run the module after setting up the environment.
|
||||||
|
|
||||||
First check the syntax. If OK, make sure the shell is active and
|
First check the syntax. If OK, make sure the shell is active and
|
||||||
then transfer the arguments, set the run environment's working
|
then transfer the arguments, set the run environment's working
|
||||||
directory to the directory of the module being executed and also
|
directory to the directory of the module being executed and also
|
||||||
add that directory to its sys.path if not already included.
|
add that directory to its sys.path if not already included.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
filename = self.getfilename()
|
filename = self.getfilename()
|
||||||
if not filename:
|
if not filename:
|
||||||
return 'break'
|
return 'break'
|
||||||
|
|
|
@ -23,6 +23,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #11088: don't crash when using F5 to run a script in IDLE on MacOSX
|
||||||
|
with Tk 8.5.
|
||||||
|
|
||||||
- Issue #9516: Issue #9516: avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET
|
- Issue #9516: Issue #9516: avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET
|
||||||
is set in shell.
|
is set in shell.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue