如何在自己的插件中连接Eclipse编辑器事件?

如何在自己的插件中连接Eclipse编辑器事件?,eclipse,plugins,Eclipse,Plugins,我不想创建自己的编辑器,但我想通过连接到现有编辑器的编辑事件来扩展它们 例如,每当文本或xml编辑器中的文本发生更改时,我都会得到一个回调,并能够对更改做出反应 是否存在这样一个合适的扩展点?您可以通过访问IEditorPart,使用getAdapter(IDocument.class)来实现这一点,然后向该扩展点添加一个侦听器 但这真的是一个黑客…;-) 编辑:根据要求,这里有更多的代码 public void hookToEditor() { IWorkbenchPage page

我不想创建自己的编辑器,但我想通过连接到现有编辑器的编辑事件来扩展它们

例如,每当文本或xml编辑器中的文本发生更改时,我都会得到一个回调,并能够对更改做出反应


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

您可以通过访问
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编辑器

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

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

如果没有其他东西,黑客就可以了;)@你能举个更具体的例子吗?