Eclipse插件 - 访问编辑器

时间:2013-02-27 14:54:30

标签: java eclipse-plugin editor

所以,我正在为eclipse IDE开发一个插件。简而言之,该插件是一个协作的实时代码编辑器,其中编辑器是eclipse(类似于Google文档,但有代码和eclipse)。这意味着当我安装插件时,我可以连接 - 使用我的Gmail帐户日食到合作伙伴的日食。当我开始在我的机器上编码时,我的伙伴会看到我写的东西,反之亦然。

我目前面临的问题是访问eclipse的编辑器。例如,我必须监视活动文档中的所有更改,以便每次发生更改时,将通过此更改通知另一个合作伙伴的IDE。

我发现并阅读了 IDcoumentProvider IDocument IEditorInput 类,它们以某种方式连接但我无法理解这种连接或者如何使用它。所以,如果有人能解释这种联系,我会非常感激。如果有另一种方法来实现我的目标?

1 个答案:

答案 0 :(得分:3)

您可以通过IEditorPart访问IWorkbenchPage

IEditorPart editor =  ((IWorkbenchPage) PlatformUI.getWorkbench()
        .getActiveWorkbenchWindow().getActivePage()).getActiveEditor();

从那里,您可以访问各种其他类,包括编辑器的IEditorInput,该编辑器加载的File或基础GUI Control元素。 (请注意,根据编辑器的类型(文本文件,图表等),您可能需要转换为不同的类。)

FileEditorInput input = (FileEditorInput) editor.getEditorInput();
StyledText editorControl = ((StyledText) editor.getAdapter(Control.class));
String path = input.getFile().getRawLocationURI().getRawPath();

现在,您可以向Control添加一个监听器,例如一个KeyAdapter用于监控相应编辑器中发生的所有击键。

editorControl.addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("Editing in file " + path);
    }
});

或者,如果监控所有击键过多,您可以将IPropertyListener注册到编辑器。这个听众将例如每当编辑器“脏”或保存时都会收到通知。 propId的含义可以在IWorkbenchPartConstants中找到。

editor.addPropertyListener(new IPropertyListener() {
    @Override
    public void propertyChanged(Object source, int propId) {
        if (propId == IWorkbenchPartConstants.PROP_DIRTY) {
            System.out.println("'Dirty' Property Changed");
        }
    }
});