diff --git a/Lib/idlelib/IOBinding.py b/Lib/idlelib/IOBinding.py --- a/Lib/idlelib/IOBinding.py +++ b/Lib/idlelib/IOBinding.py @@ -10,6 +10,7 @@ from tkinter.simpledialog import askstring from idlelib.configHandler import idleConf +from idlelib import macosxSupport from codecs import BOM_UTF8 @@ -108,7 +109,13 @@ self.text = editwin.text self.__id_open = self.text.bind("<>", self.open) self.__id_save = self.text.bind("<>", self.save) - self.__id_saveas = self.text.bind("<>", + if macosxSupport.runningAsOSXApp() and not macosxSupport.isCarbonAquaTk(): + # Tk-Cocoa on MacOSX causes a second window to be opened when + # we explicitly add a keybinding. Why this is so is not yet known, + # this test is therefore a hack. + self.__id_saveas = None + else: + self.__id_saveas = self.text.bind("<>", self.save_as) self.__id_savecopy = self.text.bind("<>", self.save_a_copy) @@ -119,7 +126,8 @@ # Undo command bindings self.text.unbind("<>", self.__id_open) self.text.unbind("<>", self.__id_save) - self.text.unbind("<>",self.__id_saveas) + if self.__id_saveas is not None: + self.text.unbind("<>",self.__id_saveas) self.text.unbind("<>", self.__id_savecopy) self.text.unbind("<>", self.__id_print) # Break cycles