Как получить "активный редактор" в плагине Eclipse?
В моем плагине Eclipse мне нужно знать, когда изменился редактор, видимый на экране. В настоящее время я получаю активный редактор следующим образом:
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()
Это работает в большинстве случаев, за исключением тех случаев, когда нажата кнопка "Продолжить":
![Debugger buttons]()
Если я использую ярлык F8, тогда активный редактор обновляется, как ожидалось.
Кажется, что активное свойство редактора не обновляется до тех пор, пока вкладка редактора не получит фокус (что не происходит при нажатии кнопки "Продолжить" ).
Есть ли какой-либо другой маршрут, который я могу сделать, чтобы получить "видимый редактор"?
Спасибо заранее.
Алан
Ответы
Ответ 1
- Редактор активен только тогда, когда он имеет фокус, поэтому вы получаете правильный вывод API. Пользователь вашего плагина не будет запускать его в режиме отладки, поэтому не беспокоить конечного пользователя
- В качестве альтернативы, чтобы получить все открытые редакторы, вы можете сделать следующее:
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences()
Ответ 2
Метод IWorkbenchPage interface has an
isPartVisible() `, который указывает, видима ли указанная часть. Результат не зависит от того, активна ли указанная часть в данный момент, т.е. Имеет фокус или нет.
Чтобы найти видимый, но в настоящее время неактивный редактор, может быть недостаточно, чтобы просто вызвать этот метод на странице активного рабочего места. Вместо этого вам придется перебирать все окна рабочего стола и проверять видимость вашего редактора на странице каждого из них.
Ответ 3
Вопрос аналогичен вопросу, указанному в приведенной ниже ссылке. Один из способов добиться этого - следить за тем, какой редактор был ранее открыт, создав прослушиватель частей.
Плагин Eclipse - как получить последний отработанный редактор
Ответ 4
Список активных редакторов Подробнее см. на этом вопрос:
Eclipse RCP: в редакторе открыт тот же редактор
имя пакета: 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;
}
}