2012-02-19 5 views
12

Eclipseプラグインでは、画面に表示されているエディタがいつ変更されたかを知る必要があります。これは、緑色のボタンを続行する場合を除き、ほとんどの場合のために働くEclipseプラグインで「アクティブエディタ」を取得する方法は?

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

が押されている:

Debugger buttons

私はその後、アクティブF8ショートカットを使用する場合は、次のように私は、現在アクティブなエディタを取得していますエディタが期待通りに更新されます。

アクティブなエディタプロパティは、エディタタブがフォーカスを取得するまで更新されないようです(継続ボタンが押されたときには発生しません)。

"可視エディタ"を入手するために他にルートがありますか?

ありがとうございます。

アラン

+0

以下の説明では、プラグインが既存のデバッグプラグインの_extension_であると仮定します。正しい? –

+0

これはデバッグプラグインの拡張ではありませんが、私はブレークポイントなどについてさまざまなデバッグイベントにフックします。 –

答えて

2
  1. エディタは、それが集中した場合にのみ有効ですので、何を得ていることはAPIによって右の出力です。

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

+0

あなたの返事をありがとう。私は実際にEclipseのコピーでデバッガを実行しているユーザを指していたので、エンドユーザにとっては問題です。 –

+0

あなたのコードにブレークポイントがあるため、その時点で実行が停止することはほとんどありません。 – codejammer

+0

私は自分のコードについて話しています。私はユーザーがコード内でデバッガをステップ実行している間、何かをしたい。この特定のシナリオは、私が望むように機能しません。私が目に見えるエディタにアクセスできたら、それに対処できます。 –

1

:プラグインの使用者は、次の操作を行うことができ、開いているすべてのエディターを取得するには、代わりにエンドユーザー

  • ためそうではないの懸念、デバッグモードでそれを実行していることはありませんIWorkbenchPage interface has an isPartVisible() `指定された部分が可視かどうかを示すメソッド。結果は、指定された部分が現在アクティブであるかどうか、つまりフォーカスがあるかどうかに依存しません。

    現在表示されていないアクティブなエディタを見つけるには、アクティブなワークベンチページでこのメソッドを呼び出すだけでは不十分です。代わりに、すべてのワークベンチウィンドウを繰り返して、それぞれのページでエディタの可視性をチェックする必要があります。

  • 0

    質問は、以下のリンクに掲載されている質問に似ています。これを達成する1つの方法は、パートリスナーを作成して以前に開いたエディタを追跡することです。 Eclipse Plugin - How to get the last worked on editor

    1

    アクティブエディタリストアウト詳細は、この質問を参照してください:

    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; 
        } 
    } 
    
    関連する問題