diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py index fcc8a3f08ccfe3..8e43420d8fbe95 100644 --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -300,14 +300,15 @@ def __init__(self, flist=None, filename=None, key=None, root=None): self.showerror = messagebox.showerror # Add pseudoevents for former extension fixed keys. - # (This probably needs to be done once in the process.) - text.event_add('<>', '') - text.event_add('<>', '', - '', '') - text.event_add('<>', '') - text.event_add('<>', '') - text.event_add('<>', '', - '', '') + self.extra_events = [] + self.add_extra_event('<>', '') + self.add_extra_event('<>', '', + '', '') + self.add_extra_event('<>', '') + self.add_extra_event('<>', '') + self.add_extra_event('<>', '', + '', + '') # Former extension bindings depends on frame.text being packed # (called from self.ResetColorizer()). @@ -849,20 +850,25 @@ def ResetFont(self): def RemoveKeybindings(self): "Remove the keybindings before they are changed." # Called from configdialog.py + event_delete = self.text.event_delete + for event_name, keylist in self.extra_events: + event_delete(event_name, *keylist) self.mainmenu.default_keydefs = keydefs = idleConf.GetCurrentKeySet() for event, keylist in keydefs.items(): - self.text.event_delete(event, *keylist) + event_delete(event, *keylist) for extensionName in self.get_standard_extension_names(): xkeydefs = idleConf.GetExtensionBindings(extensionName) if xkeydefs: for event, keylist in xkeydefs.items(): - self.text.event_delete(event, *keylist) + event_delete(event, *keylist) def ApplyKeybindings(self): "Update the keybindings after they are changed" # Called from configdialog.py self.mainmenu.default_keydefs = keydefs = idleConf.GetCurrentKeySet() self.apply_bindings() + for event_name, keylist in self.extra_events: + self.text.event_add(event_name, *keylist) for extensionName in self.get_standard_extension_names(): xkeydefs = idleConf.GetExtensionBindings(extensionName) if xkeydefs: @@ -1154,6 +1160,11 @@ def apply_bindings(self, keydefs=None): if keylist: text.event_add(event, *keylist) + def add_extra_event(self, event_name, *keylist): + "Register a key binding for what was once a built-in extension" + self.extra_events.append((event_name, keylist)) + self.text.event_add(event_name, *keylist) + def fill_menus(self, menudefs=None, keydefs=None): """Add appropriate entries to the menus and submenus diff --git a/Misc/NEWS.d/next/IDLE/2021-05-27-17-47-46.bpo-43654.bOCBdB.rst b/Misc/NEWS.d/next/IDLE/2021-05-27-17-47-46.bpo-43654.bOCBdB.rst new file mode 100644 index 00000000000000..209df884299423 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-05-27-17-47-46.bpo-43654.bOCBdB.rst @@ -0,0 +1 @@ +Fix the config dialog breaking tab completion.