From 278543d5392967fb4bfe2d3b3f71c2281500c458 Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Tue, 10 Dec 2013 16:21:58 -0800 Subject: [PATCH] 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 | 3 +++ 2 files changed, 17 insertions(+), 11 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 89f32a7ebf..be64acaf90 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -1546,20 +1546,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: @@ -1567,7 +1569,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 @@ -1578,13 +1580,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 7d7d9bf705..b7e51a5ae5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -74,6 +74,9 @@ IDLE - Issue #19481: print() of unicode, str or bytearray subclass instance in IDLE no more hangs. +- Issue #18270: Prevent possible IDLE AttributeError on OS X when no initial + shell window is present. + Tests ----- -- 2.50.1