def on_new_tab(tab: tabs.Tab) -> None: if isinstance(tab, tabs.FileTab): tab.settings.add_option("langserver", None, Optional[LangServerConfig]) tab.bind( "<<TabSettingChanged:langserver>>", partial(switch_langservers, tab, False), add=True ) tab.bind("<<PathChanged>>", partial(switch_langservers, tab, True), add=True) switch_langservers(tab, False)
def __init__(self, master: tkinter.BaseWidget, tab: tabs.Tab): super().__init__(master) self.tab = tab # one label for each tab-separated thing self.labels = [ttk.Label(self)] self.labels[0].pack(side='left') tab.bind('<<StatusChanged>>', self.do_update, add=True) self.do_update()
def on_new_tab(tab: tabs.Tab) -> None: if isinstance(tab, tabs.FileTab): setup_displayers(tab) # https://github.com/python/mypy/issues/9658 tab.bind("<<Reloaded>>", (lambda event: setup_displayers(tab)), add=True) # type: ignore tab.textwidget.bind( "<Enter>", ( # This runs after clicking "Use this" button, mouse <Enter>s text widget # Don't know why this needs a small timeout instead of after_idle lambda event: tab.after(50, tab.textwidget.event_generate, "<<UpdateLineNumbers>>") # type: ignore ), add=True, )
def on_new_tab(tab: tabs.Tab) -> None: if isinstance(tab, tabs.FileTab): # needed because pygments_lexer might change def on_lexer_changed(junk: object = None) -> None: assert isinstance(tab, tabs.FileTab) # f u mypy highlighter.set_lexer(tab.settings.get("pygments_lexer", LexerMeta)()) highlighter = Highlighter(tab.textwidget) tab.bind("<<TabSettingChanged:pygments_lexer>>", on_lexer_changed, add=True) on_lexer_changed() utils.bind_with_data(tab.textwidget, "<<ContentChanged>>", highlighter.on_change, add=True) utils.add_scroll_command( tab.textwidget, "yscrollcommand", debounce(tab, highlighter.highlight_visible, 100) ) highlighter.highlight_visible()
def on_new_tab(tab: tabs.Tab) -> None: if not isinstance(tab, tabs.FileTab): return tab.settings.add_option("autocomplete_chars", [], List[str]) completer = AutoCompleter(tab) # no idea why backspace has to be bound separately utils.bind_with_data(tab.textwidget, "<Key>", completer.on_any_key, add=True) tab.textwidget.bind("<BackSpace>", completer.on_any_key, add=True) utils.bind_tab_key(tab.textwidget, completer.on_tab, add=True) tab.textwidget.bind("<Return>", completer.on_enter, add=True) tab.textwidget.bind("<Escape>", completer.on_escape, add=True) tab.textwidget.bind("<Prior>", completer.popup.on_page_up_down, add=True) tab.textwidget.bind("<Next>", completer.popup.on_page_up_down, add=True) tab.textwidget.bind("<Up>", completer.popup.on_arrow_key_up_down, add=True) tab.textwidget.bind("<Down>", completer.popup.on_arrow_key_up_down, add=True) completer.popup.treeview.bind("<Button-1>", (lambda event: completer._accept()), add=True) # avoid weird corner cases tab.winfo_toplevel().bind("<FocusOut>", (lambda event: completer._reject()), add=True) tab.textwidget.bind( # any mouse button "<Button>", lambda event: completer._reject(), add=True, ) tab.bind("<Destroy>", (lambda event: completer.popup.toplevel.destroy()), add=True)
def on_new_tab(tree: DirectoryTree, tab: tabs.Tab) -> None: if isinstance(tab, tabs.FileTab): def path_callback(junk: object = None) -> None: assert isinstance(tab, tabs.FileTab) if tab.path is not None: tree.add_project(utils.find_project_root(tab.path)) tree.refresh_everything( when_done=partial(tree.select_file, tab.path)) path_callback() tab.bind("<<AfterSave>>", path_callback, add=True) tab.bind("<<AfterSave>>", tree.hide_old_projects, add=True) tab.bind("<Destroy>", tree.hide_old_projects, add=True)
def on_new_tab(tab: tabs.Tab) -> None: if isinstance(tab, tabs.FileTab): get_config_and_apply_to_tab(tab) tab.bind("<<PathChanged>>", partial(get_config_and_apply_to_tab, tab), add=True)
def on_new_tab(self, tab: tabs.Tab) -> None: self._frame.pack_forget() tab.bind("<Destroy>", self._on_tab_closed, add=True)
def on_new_tab(tab: tabs.Tab) -> None: if isinstance(tab, tabs.FileTab): tab.settings.add_option("insert_final_newline", True) tab.bind("<<BeforeSave>>", on_save, add=True)
def on_new_tab(tab: tabs.Tab) -> None: if isinstance(tab, tabs.FileTab): on_path_changed(tab) tab.bind("<<PathChanged>>", partial(on_path_changed, tab), add=True)
def on_new_tab(tab: tabs.Tab) -> None: if isinstance(tab, tabs.FileTab): callback = partial(reload_if_necessary, tab) tab.bind("<<TabSelected>>", callback, add=True) tab.textwidget.bind("<FocusIn>", callback, add=True) tab.textwidget.bind("<Button-1>", callback, add=True)