| 1138 | } |
| 1139 | |
| 1140 | def load_extension(self, name): |
| 1141 | fname = self.extfiles.get(name, name) |
| 1142 | try: |
| 1143 | try: |
| 1144 | mod = importlib.import_module('.' + fname, package=__package__) |
| 1145 | except (ImportError, TypeError): |
| 1146 | mod = importlib.import_module(fname) |
| 1147 | except ImportError: |
| 1148 | print("\nFailed to import extension: ", name) |
| 1149 | raise |
| 1150 | cls = getattr(mod, name) |
| 1151 | keydefs = idleConf.GetExtensionBindings(name) |
| 1152 | if hasattr(cls, "menudefs"): |
| 1153 | self.fill_menus(cls.menudefs, keydefs) |
| 1154 | ins = cls(self) |
| 1155 | self.extensions[name] = ins |
| 1156 | if keydefs: |
| 1157 | self.apply_bindings(keydefs) |
| 1158 | for vevent in keydefs: |
| 1159 | methodname = vevent.replace("-", "_") |
| 1160 | while methodname[:1] == '<': |
| 1161 | methodname = methodname[1:] |
| 1162 | while methodname[-1:] == '>': |
| 1163 | methodname = methodname[:-1] |
| 1164 | methodname = methodname + "_event" |
| 1165 | if hasattr(ins, methodname): |
| 1166 | self.text.bind(vevent, getattr(ins, methodname)) |
| 1167 | |
| 1168 | def apply_bindings(self, keydefs=None): |
| 1169 | """Add events with keys to self.text.""" |