From f3c6589ea3890d10d6774ec7699a419313a6fb0f Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Tue, 10 Dec 2013 16:24:01 -0800 Subject: Issue #18270: Prevent possible IDLE AttributeError on OS X when no initial shell window is present. (Original patch by Terry Reedy) --- Lib/idlelib/PyShell.py | 25 ++++++++++++++----------- Misc/NEWS | 5 ++++- 2 files changed, 18 insertions(+), 12 deletions(-) mode change 100644 => 100755 Lib/idlelib/PyShell.py diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py old mode 100644 new mode 100755 index f50ca28..6674f4e --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -1534,20 +1534,22 @@ def main(): args.remove(filename) if not args: flist.new() + if enable_shell: shell = flist.open_shell() if not shell: return # couldn't open shell - if macosxSupport.runningAsOSXApp() and flist.dict: # On OSX: when the user has double-clicked on a file that causes # IDLE to be launched the shell window will open just in front of # the file she wants to see. Lower the interpreter window when # there are open files. shell.top.lower() + else: + shell = flist.pyshell - shell = flist.pyshell - # handle remaining options: + # Handle remaining options. If any of these are set, enable_shell + # was set also, so shell must be true to reach here. if debug: shell.open_debugger() if startup: @@ -1555,7 +1557,7 @@ def main(): os.environ.get("PYTHONSTARTUP") if filename and os.path.isfile(filename): shell.interp.execfile(filename) - if shell and cmd or script: + if cmd or script: shell.interp.runcommand("""if 1: import sys as _sys _sys.argv = %r @@ -1566,13 +1568,14 @@ def main(): elif script: shell.interp.prepend_syspath(script) shell.interp.execfile(script) - - # Check for problematic OS X Tk versions and print a warning message - # in the IDLE shell window; this is less intrusive than always opening - # a separate window. - tkversionwarning = macosxSupport.tkVersionWarning(root) - if tkversionwarning: - shell.interp.runcommand(''.join(("print('", tkversionwarning, "')"))) + elif shell: + # If there is a shell window and no cmd or script in progress, + # check for problematic OS X Tk versions and print a warning + # message in the IDLE shell window; this is less intrusive + # than always opening a separate window. + tkversionwarning = macosxSupport.tkVersionWarning(root) + if tkversionwarning: + shell.interp.runcommand("print('%s')" % tkversionwarning) while flist.inversedict: # keep IDLE running while files are open. root.mainloop() diff --git a/Misc/NEWS b/Misc/NEWS index 9026e75..5a94af3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -109,7 +109,10 @@ Library IDLE ---- -- Issue #19481: print() of string subclass instance in IDLE no more hangs. +- Issue #19481: print() of string subclass instance in IDLE no longer hangs. + +- Issue #18270: Prevent possible IDLE AttributeError on OS X when no initial + shell window is present. Tests ----- -- cgit v0.12