Могут ли плагины Gedit связываться с событием OnSave? - PullRequest
1 голос
/ 18 февраля 2012

Я пишу плагин gedit 3 , похожий на плагин phlilva's PyLint , который вызывает внешнюю программу lint и выделяет строки кода в текущем документе.У меня вопрос: если у моего плагина есть действие run_lint, можно ли связать это с событием OnSave в gedit?Список доступных сигналов в документации, которую я связал выше, все еще имеет уведомление FIXME против него, и я изо всех сил пытаюсь выяснить, где в супе документации API можно найти полный список.

1 Ответ

2 голосов
/ 19 февраля 2012

Ну, никто не ответил на это, но я понял это в конце концов. Для этого есть два шага, когда в окне создается новая вкладка, содержащая документ. В документе есть сигналы loaded и saved, которые можно подключить к действиям. Важно помнить, что каждая вкладка имеет отдельный документ, для каждого из которых требуется свой набор сигналов и обработчиков.

Вот общее решение, если оно пригодится другим:

class FooPlugin(GObject.Object, Gedit.WindowActivatable):

    __gtype_name__ = 'Foo'
    ...

    def do_activate(self):
        self._add_ui()
        self.window.connect('tab-added', self.on_tab_added)
        ...
        return

    def on_tab_added(self, window, tab, data=None):
        doc = tab.get_document()
        doc.connect('saved', self.on_document_saved)
        doc.connect('loaded', self.on_document_loaded)
        return

    def on_document_loaded(self, document, data=None):
        # do something here...
        return

    def on_document_saved(self, document, data=None):
        # do something here...
        return
...