I am trying to add an entry to the Package Explorer pop-up context menu that opens a modified version of a file in an editor when the entry is selected.
I am using Eclipse Indigo on a Fedora 15 laptop.
Here's a very specific question that may be adequately well-focused, and might provide the help I need to tackle the general problem I have.
Eclipse provides a sample plugin named org.eclipse.ui.examples.readmetool, which can be set up from the Help->Welcome page.
This plugin defines an editor named ReadmeEditor.java. It also defines an extension point "org.eclipse.ui.popupMenus" in plugin.xml. When you use this action from the eclipse Project Explorer view on a file with the suffix ".readme", you just get a little pop-up window.
How can I change the readmetool plugin so that when you select the above-defined Project Explorer menu item on a foo.readme file, you instead get a new ReadmeEditor in eclipse, with foo.readme in it??
The more specific project need I am struggling with is as follows:
From the Package Explorer, navigate to a file.
Right-click the file to get a pop-up context menu
See a new entry "Version view"
On selecting that entry, find the file, run it through an external program to create a temporary file, and display the contents of that temporary file in a new TextEditor window. (And, don't leave an orphan temporary file around after it is no longer needed.)
I have some of the above pieces in place; I augmented the MultiPageEditor example so that it does the work of running the external program, creating the temporary file, and opening the temporary file in a text editor.
However, the only way I can currently access that functionality is to select the "Open With" option in the pop-up context window for the file in the Project Explorer, and go to "Other" within that window and select my new editor option.
So, where I am stuck at the moment is how to add the right magic to plugin.xml so that I get a new option on the Project Manager pop-up context window, and connect that with a new TextEditor window.
This seems very much like what the vanilla "Open" option would do, and it seems like this should be a pretty basic thing to do within eclipse. Any examples and/or guidance would be greatly appreciated.
Greg
Here is a terse but complete example of setting up and using a project. (Scouring the net, there was much advice about eclipse, but it tended to be rather splintered and piecemeal, and when I was struggling to solve my problem it would have been helpful to have a complete, self-contained HOWTO. So, this is that..)
This recipe assumes you are using Eclipse Indigo or Juno with:
To confirm the above from within eclipse, see
Help -> About Eclipse -> Installation Details -> Installed Software
start up Ecipse Indigo, with a fresh, empty workspace:
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"
create a new project, using the Plug-in Project as a handy starting place:
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
in "Package Explorer, navigate to NewActions.java and double-click to open:
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) { }
}
add dependencies to the project to be able to resolve imports:
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
run the new project, with a fresh empty target directory:
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
the big moment: open the file with your new pop-up menu entry:
in Project Explorer, right-click popup_test -> test_file1
select New Submenu -> New Action
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With