如何在Eclipse插件中获得“活动编辑器”?
在我的Eclipse插件中,我需要知道屏幕上可见的编辑器何时发生更改。我目前得到的活动编辑器,如下所示:如何在Eclipse插件中获得“活动编辑器”?
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()
这适用于大多数情况下,除了当绿色Continue按钮被按下:
如果我使用F8快捷键则活动编辑器按预期更新。
似乎活动编辑器属性不会更新,直到编辑器选项卡获得焦点(按下继续按钮时不会发生这种情况)。
有没有其他的途径可以拿到“可见编辑器”?
在此先感谢。
艾伦
- 编辑器是积极的,只有当它具有焦点,所以你越来越是通过API输出的权利。你的插件的用户将不会在调试模式下运行,所以不是一个面向最终用户的关注
- 或者,让所有打开的编辑器,你可以做到以下几点:
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences()
感谢您的回复。我实际上是指用户在他们的Eclipse副本中运行调试器,所以这对于最终用户来说是一个问题。 – 2012-02-19 12:17:40
它的可能性很小,在你的代码中有一个断点,这样执行就停滞在那一点了吗? – codejammer 2012-02-19 12:21:05
我正在谈论用户自己的代码。我想要在用户通过代码中的调试器时执行这些操作。这种特殊的情况只是我不喜欢它的工作。如果我有权访问可见的编辑器,那么我可以处理它。 – 2012-02-19 12:35:47
的IWorkbenchPage interface has an
isPartVisible()`方法,指示指定部分是否可见。结果不取决于指定部分当前是否处于活动状态,即是否具有焦点。
要找到一个可见但当前不活动的编辑器,可能不足以在活动工作台页面上简单调用此方法。相反,您可能需要遍历所有工作台窗口,并检查编辑器在每个窗口页面上的可见性。
该问题与以下链接中发布的问题类似。实现此目的的一种方法是通过创建Part Listener来跟踪以前打开过哪个编辑器。 Eclipse Plugin - How to get the last worked on editor
活动编辑器列表中进行更多详细信息,请访问这个问题:
Eclipse RCP : have the same editor open in editor window
包名称:rcp_demo.Editor
类名称:EmpCommand.java,EmployeeEditor。 java和EmployeeEditorInput.java
package rcp_demo.Editor;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
public class EmpCommand extends AbstractHandler {
public static final String Id = "rcp_demo.Editor.EmpCommand";
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
IEditorReference[] editors = page.getEditorReferences();
EmployeeEditorInput input = new EmployeeEditorInput();
//All Comments are easily understand
//public class EmployeeEditorInput implements IEditorInput{}
for (int i=0; i<editors.length; i++) {
//List out all Exist editor
//compare with EmployeeEditor.Id="rcp_demo.Editor.emp";
if (editors[i].getId().equals(EmployeeEditor.Id)) {
//public class EmployeeEditor extends EditorPart
//{
// public static final String Id="rcp_demo.Editor.emp";
// public void createPartControl(Composite parent) {.....}
//}
page.activate(editors[i].getEditor(true));
System.out.println("set focus an existing editor(Employee)");
return null;
}
}
try {
//open new Editor like EmployeeEditor.Id="rcp_demo.Editor.emp";
page.openEditor(input,EmployeeEditor.Id);
System.out.println("open Editor(Employee) ");
} catch (PartInitException e) {
e.printStackTrace();
}
return null;
}
}
鉴于下面的讨论,我假设你的插件是对现有调试插件的_extension_。正确? – 2012-02-19 14:52:16
它不是调试插件的扩展,但是我会连接到各种有关断点的调试事件等。 – 2012-02-19 15:09:04