def RemoveKeybindings(self): # SUBCLASS to catch errors "Remove the keybindings before they are changed." EditorWindow._invalid_keybindings = [] # Called from configDialog.py self.Bindings.default_keydefs = keydefs = idleConf.GetCurrentKeySet() for event, keylist in keydefs.items(): for key in keylist: try: self.text.event_delete(event, key) except Exception as err: print(' Caught event_delete error:', err) print(' For %s, %s' % (event, key)) pass for extensionName in self.get_standard_extension_names(): xkeydefs = idleConf.GetExtensionBindings(extensionName) if xkeydefs: for event, keylist in xkeydefs.items(): for key in keylist: try: self.text.event_delete(event, key) except Exception as err: print(' Caught event_delete error:', err) print(' For %s, %s' % (event, key)) pass
def load_idlex_extension(self, name): # import from idlex mod = extensionManager.load_extension(name) if mod is None: print("\nFailed to import IDLEX extension: %s" % name) return cls = getattr(mod, name) keydefs = idleConf.GetExtensionBindings(name) if hasattr(cls, "menudefs"): self.fill_menus(cls.menudefs, keydefs) ins = cls(self) self.extensions[name] = ins if keydefs: self.apply_bindings(keydefs) for vevent in keydefs.keys(): methodname = vevent.replace("-", "_") while methodname[:1] == '<': methodname = methodname[1:] while methodname[-1:] == '>': methodname = methodname[:-1] methodname = methodname + "_event" if hasattr(ins, methodname): self.text.bind(vevent, getattr(ins, methodname))
def load_extension(self, name): try: mod = __import__(name, globals(), locals(), []) except ImportError: print '\nFailed to import extension: ', name return cls = getattr(mod, name) keydefs = idleConf.GetExtensionBindings(name) if hasattr(cls, 'menudefs'): self.fill_menus(cls.menudefs, keydefs) ins = cls(self) self.extensions[name] = ins if keydefs: self.apply_bindings(keydefs) for vevent in keydefs.keys(): methodname = vevent.replace('-', '_') while methodname[:1] == '<': methodname = methodname[1:] while methodname[-1:] == '>': methodname = methodname[:-1] methodname = methodname + '_event' if hasattr(ins, methodname): self.text.bind(vevent, getattr(ins, methodname))
def ApplyKeybindings(self): """Update the keybindings after they are changed""" self.Bindings.default_keydefs = keydefs = idleConf.GetCurrentKeySet() self.apply_bindings() for extensionName in self.get_standard_extension_names(): xkeydefs = idleConf.GetExtensionBindings(extensionName) if xkeydefs: self.apply_bindings(xkeydefs) menuEventDict = {} for menu in self.Bindings.menudefs: menuEventDict[menu[0]] = {} for item in menu[1]: if item: menuEventDict[menu[0]][prepstr(item[0])[1]] = item[1] for menubarItem in self.menudict.keys(): menu = self.menudict[menubarItem] end = menu.index(END) + 1 for index in range(0, end): if menu.type(index) == 'command': accel = menu.entrycget(index, 'accelerator') if accel: itemName = menu.entrycget(index, 'label') event = '' if menubarItem in menuEventDict: if itemName in menuEventDict[menubarItem]: event = menuEventDict[menubarItem][itemName] if event: accel = get_accelerator(keydefs, event) menu.entryconfig(index, accelerator=accel)
def RemoveKeybindings(self): """Remove the keybindings before they are changed.""" self.Bindings.default_keydefs = keydefs = idleConf.GetCurrentKeySet() for event, keylist in keydefs.items(): self.text.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)
def show(self, tag_filter=None): if self.hidden == False: self.hide() return self.hidden = False # add a text widget, left of code text widget self.text_frame = text_frame = Frame(self.editwin.text_frame) self.vbar = vbar = Scrollbar(text_frame, name='vbar') vbar.pack(side=RIGHT, fill=Y) theme = idleConf.GetOption('main', 'Theme', 'name') normal_colors = idleConf.GetHighlight(theme, 'normal') text_options = { 'padx': 5, 'wrap': 'none', 'cursor': 'arrow', 'wrap': 'none', 'foreground': normal_colors['foreground'], 'background': normal_colors['background'], } self.textln = textln = Text(text_frame, **text_options) textln.pack(side='left', fill=BOTH, expand=YES) vbar['command'] = textln.yview textln['yscrollcommand'] = vbar.set # adjust font textln.config( font=(idleConf.GetOption('main', 'EditorWindow', 'font'), idleConf.GetOption('main', 'EditorWindow', 'font-size'))) textln.bind("<ButtonRelease>", self.focus_in_event) textln.bind("<Return>", self.enter_callback) textln.bind("<Escape>", self.escape_callback) textln.bind('<FocusOut>', self.focus_out, '+') # pass through keybindings for classdefbrowser keydefs = idleConf.GetExtensionBindings('CodeBrowser') for event, keylist in list(keydefs.items()): for k in keylist: def passthru(event, evName=event, text=self.text): text.event_generate(evName) try: textln.bind(k, passthru) except TclError as err: print(err) pass # start the line numbers self.per = per = Percolator(textln) self.color = ColorDelegator() self.per.insertfilter(self.color) self.line_delegator = LineDelegator() per.insertfilter(self.line_delegator) textln._insert = self.line_delegator.delegate.insert textln._delete = self.line_delegator.delegate.delete self.update_display(tag_filter) self.textfont = "" self.font_timer_event() self.nearest() text_frame.place(x=0, rely=1, relheight=1, relwidth=1, anchor=SW) text_frame.lift()
def __init__(self, editwin): ## Install the SubCode Color Delegator def getColorDelegator(): """ Returns a SubCodeColorDelegator instance, properly initialized. """ def f(*args, **kwargs): a = { 'subcode_enable': self.enable, 'subcode_indented': self.indented } kwargs.update(a) return SubcodeColorDelegator(*args, **kwargs) return f self.ColorDelegatorOrig = editwin.ColorDelegator editwin.ColorDelegator = getColorDelegator() if SUBCODE_MENU: mbar = editwin.menubar menudict = editwin.menudict label = 'SubCode' underline = 0 menudict['subcode'] = menu = Menu(mbar, name='subcode') index = 5 # magic number - place SubCode after Run menu mbar.insert_cascade(index, label=label, menu=menu, underline=underline) keydefs = idleConf.GetExtensionBindings('SubCode') editwin.fill_menus(self.menudefs, keydefs) self.editwin = editwin self.text = editwin.text self.reset_id = None self.runmanager = RunManager(editwin) self.enable = False self.indented = False self.uncomment = False self.highlighting = False self.highlighter_init() self.subcode_indented(get_cfg("indented"), init=True) self.subcode_uncomment(get_cfg("uncomment")) self.subcode_highlighting(get_cfg("highlighting")) self.startup_enable() text = self.text text.bind('<FocusOut>', self.focus_out, '+') text.bind('<FocusIn>', self.focus_in, '+') text.bind('<<subcode-focus-editor>>', self.focus_editor) text.bind('<<toggle-tabs>>', self.using_tabs, '+') SubCode.SC_INSTANCES.append(self) text.bind("<<restart-shell>>", self.restart_shell_event, '+') text.bind("<<interrupt-execution>>", self.cancel_callback) self._BUG_FIX() if self.enable: self.ResetColorizer()