Exemplo n.º 1
0
        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
Exemplo n.º 2
0
        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)
Exemplo n.º 6
0
    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()
Exemplo n.º 7
0
    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()