| SimpleCommands |

    package ij.plugin;
    import ij.*;
    import ij.process.*;
    import ij.gui.*;

    /** This plugin implements the Plugins/Utilities/Unlock, Image/Rename
        and Plugins/Utilities/Search commands. */
    public class SimpleCommands implements PlugIn {
        static String searchArg;
        private static String[] choices = {"Locked Image", "Clipboard", "Undo Buffer"};
        private static int choiceIndex = 0;

        public void run(String arg) {
            if (arg.equals("search"))
                search();
            if (arg.equals("import"))
                IJ.runMacroFile("ij.jar:ImportResultsTable");
            else if (arg.equals("rename"))
                rename();
            else if (arg.equals("reset"))
                reset();
            else if (arg.equals("about"))
                aboutPluginsHelp();
            else if (arg.equals("install"))
                installation();
        }

        void reset() {
            GenericDialog gd = new GenericDialog("");
            gd.addChoice("Reset:", choices, choices[choiceIndex]);
            gd.showDialog();
            if (gd.wasCanceled()) return;
            choiceIndex = gd.getNextChoiceIndex();
            switch (choiceIndex) {
                case 0: unlock(); break;
                case 1: resetClipboard(); break;
                case 2: resetUndo(); break;
            }
        }

        void unlock() {
            ImagePlus imp = WindowManager.getCurrentImage();
            if (imp==null)
                {IJ.noImage(); return;}
            boolean wasUnlocked = imp.lockSilently();
            if (wasUnlocked)
                IJ.showStatus("\""+imp.getTitle()+"\" is not locked");
            else {
                IJ.showStatus("\""+imp.getTitle()+"\" is now unlocked");
                IJ.beep();
            }
            imp.unlock();
        }

        void resetClipboard() {
            ImagePlus.resetClipboard();
            IJ.showStatus("Clipboard reset");
        }

        void resetUndo() {
            Undo.setup(Undo.NOTHING, null);
            IJ.showStatus("Undo reset");
        }

        void rename() {
            ImagePlus imp = WindowManager.getCurrentImage();
            if (imp==null)
                {IJ.noImage(); return;}
            GenericDialog gd = new GenericDialog("Rename");
            gd.addStringField("Title:", imp.getTitle(), 30);
            gd.showDialog();
            if (gd.wasCanceled())
                return;
            else
                imp.setTitle(gd.getNextString());
        }

        void search() {
            searchArg = IJ.runMacroFile("ij.jar:Search", searchArg);
        }

        void installation() {
            String url = "http://rsb.info.nih.gov/ij/docs/install/";
            if (IJ.isMacintosh())
                url += "osx.html";
            else if (IJ.isWindows())
                url += "windows.html";
            else if (IJ.isLinux())
                url += "linux.html";
            IJ.runPlugIn("ij.plugin.BrowserLauncher", url);
        }

        void aboutPluginsHelp() {
            IJ.showMessage("\"About Plugins\" Submenu",
                "Plugins packaged as JAR files can add entries\n"+
                "to this submenu. There is an example at\n \n"+
                "http://rsb.info.nih.gov/ij/plugins/jar-demo.html");
        }

    }

| SimpleCommands |