Eclipse插件 – 访问编辑器
所以,我正在为eclipse IDE开发一个插件。 简而言之,该插件是一个协作的实时代码编辑器,其中编辑器是eclipse(这类似于Google文档,但有代码和eclipse)。 这意味着当我安装插件时,我可以连接 – 使用我的Gmail帐户日食到合作伙伴的日食。 当我开始在我的机器上编码时,我的伙伴会看到我写的东西,反之亦然。
我目前面临的问题是访问eclipse的编辑器。 例如,我必须监视活动文档中的所有更改,以便每次发生更改时,将通过此更改通知另一个合作伙伴的IDE。
我发现并阅读了IDcoumentProvider , IDocument和IEditorInput类,它们以某种方式连接但我无法理解这种连接或如何使用它。 所以,如果有人能解释这种联系,我会非常感激。 如果有另一种方法来实现我的目标?
您可以通过IWorkbenchPage
访问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
添加一个侦听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"); } } });