4

パッケージ エクスプローラーのポップアップ コンテキスト メニューにエントリを追加しようとしています。このメニューでは、エントリが選択されたときにエディタでファイルの変更されたバージョンが開きます。

Fedora 15 ラップトップで Eclipse Indigo を使用しています。

これは非常に具体的な質問であり、十分に焦点が絞られており、私が抱えている一般的な問題に取り組むために必要な助けを提供する可能性があります.

Eclipse には、org.eclipse.ui.examples.readmetool という名前のサンプル プラグインが用意されています。これは、[ヘルプ] -> [ようこそ] ページからセットアップできます。

このプラグインは、ReadmeEditor.java という名前のエディターを定義します。また、plugin.xml で拡張ポイント「org.eclipse.ui.popupMenus」を定義します。サフィックス「.readme」が付いたファイルで Eclipse Project Explorer ビューからこのアクションを使用すると、小さなポップアップ ウィンドウが表示されます。

上記で定義した Project Explorer メニュー項目を foo.readme ファイルで選択すると、代わりに foo.readme を含む新しい ReadmeEditor が Eclipse で取得されるように、readmetool プラグインを変更するにはどうすればよいですか??

私が苦労しているより具体的なプロジェクトのニーズは次のとおりです。

  • パッケージ エクスプローラーから、ファイルに移動します。

  • ファイルを右クリックして、ポップアップ コンテキスト メニューを表示します。

  • 新しいエントリ "バージョン ビュー" を参照してください

  • そのエントリを選択したら、ファイルを見つけ、それを外部プログラムで実行して一時ファイルを作成し、その一時ファイルの内容を新しい TextEditor ウィンドウに表示します。(また、必要がなくなった後に孤立した一時ファイルを残さないでください。)

上記の部品のいくつかが配置されています。MultiPageEditor の例を拡張して、外部プログラムの実行、一時ファイルの作成、テキスト エディターでの一時ファイルのオープンを実行できるようにしました。

ただし、現在その機能にアクセスできる唯一の方法は、Project Explorer のファイルのポップアップ コンテキスト ウィンドウで [Open With] オプションを選択し、そのウィンドウ内の [Other] に移動して、新しいエディター オプションを選択することです。 .

そのため、現時点で行き詰まっているのは、適切な魔法を plugin.xml に追加して、プロジェクト マネージャーのポップアップ コンテキスト ウィンドウで新しいオプションを取得し、それを新しい TextEditor ウィンドウに接続する方法です。

これは、バニラの「開く」オプションが行うことと非常によく似ており、Eclipse 内で行うのはかなり基本的なことのようです。例やガイダンスをいただければ幸いです。

グレッグ

4

3 に答える 3

6

これは、プロジェクトの設定と使用の簡潔で完全な例です。(ネットを精練すると、日食について多くのアドバイスがありましたが、それはかなりばらばらで断片的である傾向があり、問題を解決するのに苦労していたときは、完全な自己完結型のHOWTOがあれば役に立ちました。それ..)

このレシピは、EclipseIndigoまたはJunoを以下で使用していることを前提としています。

  • Java開発者向けのEclipseIDE
  • Eclipseプラグイン開発環境。

日食の中から上記を確認するには、を参照してください。

Help -> About Eclipse -> Installation Details -> Installed Software
  1. 新鮮な空のワークスペースでEcipseIndigoを起動します。

    you, before starting eclipse:
              move or delete ~/eclipse.d/popup_workspace.d
              mkdir -p ~/eclipse.d/popup_workspace.d
    start eclipse:  eclipse
    eclipse:  "Select a workspace"
    you:      "Browse", navigate to above-created popup_workspace.d; "OK" "OK"
    eclipse:  "Welcome to Eclipse IDE for Java Developers"
    you:      select "Workbench"
    
  2. プラグインプロジェクトを便利な出発点として使用して、新しいプロジェクトを作成します。

    you:      File -> New -> Project
    eclipse:  "Select a wizard:
    you:      Plug-in Development -> Plug-in Project;  Next>
    eclipse:  "Plug-in Project"
    you:      Project name:  org.mypopup.popup_editor  Next>
    eclipse:  "Content"
    you:      Next>
    eclipse:  "Templates"
    you:      Plug-in with a popup menu                Finish
    eclipse:  "This kind of project is associated with the
              Plug-in Development perspective..."
    you:      Yes
    
  3. 「パッケージエクスプローラー」で、NewActions.javaに移動し、ダブルクリックして開きます。

    org.mypopup.popup_editor
        -> src
            -> org.mypopup.popup_editor.popup.actions
                -> NewAction.java
    
    delete entire contents and replace with:
    
    package org.mypopup.popup_editor.popup.actions;
    
    import org.eclipse.jface.viewers.TreeSelection;
    import org.eclipse.jface.viewers.TreePath;
    import org.eclipse.core.resources.IFile;
    import org.eclipse.core.filesystem.EFS;
    import org.eclipse.core.runtime.IPath;
    import org.eclipse.jface.action.IAction;
    import org.eclipse.jface.viewers.ISelection;
    import org.eclipse.ui.IObjectActionDelegate;
    import org.eclipse.ui.IWorkbenchPage;
    import org.eclipse.ui.IWorkbenchPart;
    import org.eclipse.ui.IWorkbenchWindow;
    import org.eclipse.ui.PlatformUI;
    import org.eclipse.ui.ide.IDE;
    
    public class NewAction implements IObjectActionDelegate {
        public NewAction() {
            super();
        }
    
        public void run(IAction action) {
            try {
                IWorkbenchWindow window =
                        PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    
                ISelection selection = window.getSelectionService()
                        .getSelection("org.eclipse.ui.navigator.ProjectExplorer");
    
                TreePath[] paths = ((TreeSelection) selection).getPaths();
                TreePath p = paths[0];
                Object last = p.getLastSegment();
    
                if (last instanceof IFile) {
                    IPath ipath = ((IFile) last).getLocation();
    
                    IWorkbenchPage page = window.getActivePage();
    
                    IDE.openEditorOnFileStore(page,
                            EFS.getLocalFileSystem().getStore(ipath));
                }
            } catch (Exception blah) {
            }
        }
    
        public void setActivePart(IAction action, IWorkbenchPart targetPart) { }
    
        public void selectionChanged(IAction action, ISelection selection) { }
    }
    
  4. プロジェクトに依存関係を追加して、インポートを解決できるようにします。

    in Package Explorer, navigate to and open META-INF -> MANIFEST.MF
    
    Select "Dependencies" tab along the bottom of the resulting
    "org.mypopup.plugin_editor" window
    
    "Add..."; "Select a Plug-in:" enter org.eclipse.core.filesystem; "OK"
    "Add..."; "Select a Plug-in:" enter org.eclipse.ui.ide; "OK"
    
    File -> Save my.popup.popup_editor
    
  5. 新しい空のターゲットディレクトリを使用して、新しいプロジェクトを実行します。

    outside of eclipse, browse to the directory containing popup_workspace.d,
    in this case ~/eclipse.d, and if a folder "runtime-EclipseApplication"
    exists, move it or delete it.
    
    right-click META-INF -> MANIFEST.MF, select Run As -> Eclipse Application
    
    in new eclipse window:
    eclipse:  "Welcome to Eclipse"
    you:      select "Workbench"
    you:      File -> New -> Project
    eclipse:  "Select a wizard"
    you:      General -> Project              Next>
    eclipse:  "Project"
    you:      project name popup_test         Finish
    you:      in Project Explorer, right-click popup_test, select New -> File
    eclipse:  "File"
    you:      File name:  test_file1          Finish
    you:      enter a little text in test_file1, File -> Save; File -> Close
    
  6. 大きな瞬間:新しいポップアップメニューエントリでファイルを開きます。

    in Project Explorer, right-click popup_test -> test_file1
    select New Submenu -> New Action
    
于 2012-07-07T20:10:25.880 に答える
2

このreadmetool例では、.readme ファイルのコンテキスト メニュー アクションが既に提供されています。

<extension
     point="org.eclipse.ui.popupMenus">
  <objectContribution
        objectClass="org.eclipse.core.resources.IFile"
        nameFilter="*.readme"
        id="org.eclipse.ui.examples.readmetool">
     <action
           label="%PopupMenus.action"
           icon="$nl$/icons/ctool16/openbrwsr.gif"
           helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
           class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate"
           menubarPath="additions"
           enablesFor="1"
           id="org.eclipse.ui.examples.readmetool.action1">
     </action>
  </objectContribution>
  ...
</extension>

名前が付けられていますが、対応するラベル名を含む plugin.properties を編集Show Readme Actionして名前を変更できます。Version view

PopupMenus.action = &Version view

PopupMenuActionDelegate次に、その実装を編集して変更するだけで、必要なことを実行できます。

public class PopupMenuActionDelegate implements IObjectActionDelegate {

    public void run(IAction action) {
        // invoke the external tool and open the result in a new editor
    }
    ...
}
于 2012-07-02T07:05:40.717 に答える
1

以下は、ポップアップ ウィンドウ オプションの選択に応じてエディター ウィンドウを開く小さな自己完結型の例です。テストとして、固定された名前のファイルを開きます。

public void run(IAction action) {
    try {
        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        File f = new File("/tmp/testum");
        IPath ipath = new Path(f.getAbsolutePath());
        IWorkbenchPage page = window.getActivePage();
        IDE.openEditorOnFileStore(page, EFS.getLocalFileSystem().getStore(ipath));
    } catch (Exception blah) {
        System.err.println("Exception!");
    }
}
于 2012-07-04T20:52:01.123 に答える