如何在我自己的插件中挂钩Eclipse编辑器事件?

时间:2011-06-28 14:18:12

标签: eclipse plugins

我不想创建自己的编辑器,但我想通过挂钩编辑事件来扩展现有的编辑器。

例如,每当文本或xml编辑器中的文本发生变化时,我都会收到回调并能够对更改作出反应。

是否存在这样一个合适的扩展点?

2 个答案:

答案 0 :(得分:8)

您可以访问IEditorPart,使用getAdapter(IDocument.class),然后为此添加一个监听器来执行此操作...

但这真的是一个黑客...; - )

编辑:根据要求,这里有更多代码。

public void hookToEditor() {
    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
    if (page == null) return;
    IEditorPart editor = page.getActiveEditor();
    if (editor == null) return;
    IDocument doc = (IDocument) editor.getAdapter(IDocument.class);
    if (doc == null) return;

    doc.addDocumentListener(new IDocumentListener() {
        @Override
        public void documentChanged(DocumentEvent event) {
            // Do something
        }

        @Override
        public void documentAboutToBeChanged(DocumentEvent event) {
            // About to do something
        }
    });
}

请注意

  • 有很多方法可以获取页面 - 例如通过当前网站
  • 有很多方法可以获得编辑器部分 - 例如通过处理程序
  • 许多编辑都没有嵌入式文档 - 例如PDE编辑

答案 1 :(得分:2)

您可以添加资源更改侦听器。

IResourceChangeListener listener =  new IResourceChangeListener() {
    @Override
    public void resourceChanged(IResourceChangeEvent arg0) {
        System.out.println("Text changed");
    }   
};
ResourcesPlugin.getWorkspace().addResourceChangeListener(listener);