Подтвердить что ты не робот

Как получить "активный редактор" в плагине Eclipse?

В моем плагине Eclipse мне нужно знать, когда изменился редактор, видимый на экране. В настоящее время я получаю активный редактор следующим образом:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()

Это работает в большинстве случаев, за исключением тех случаев, когда нажата кнопка "Продолжить":

Debugger buttons

Если я использую ярлык F8, тогда активный редактор обновляется, как ожидалось.

Кажется, что активное свойство редактора не обновляется до тех пор, пока вкладка редактора не получит фокус (что не происходит при нажатии кнопки "Продолжить" ).

Есть ли какой-либо другой маршрут, который я могу сделать, чтобы получить "видимый редактор"?

Спасибо заранее.

Алан

4b9b3361

Ответ 1

  • Редактор активен только тогда, когда он имеет фокус, поэтому вы получаете правильный вывод API. Пользователь вашего плагина не будет запускать его в режиме отладки, поэтому не беспокоить конечного пользователя
  • В качестве альтернативы, чтобы получить все открытые редакторы, вы можете сделать следующее:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences()

Ответ 2

Метод IWorkbenchPage interface has an isPartVisible() `, который указывает, видима ли указанная часть. Результат не зависит от того, активна ли указанная часть в данный момент, т.е. Имеет фокус или нет.

Чтобы найти видимый, но в настоящее время неактивный редактор, может быть недостаточно, чтобы просто вызвать этот метод на странице активного рабочего места. Вместо этого вам придется перебирать все окна рабочего стола и проверять видимость вашего редактора на странице каждого из них.

Ответ 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;
    }
}