The sunshade suite of eclipse plugins is my attempt to make the eclipse IDE work the way I want it to. YMMV =)

If you want to read more about other projects I'm working on, feel free to visit my blog


  • Plug the update site into eclipse's "Help->Software Updates->Find and Install..."
  • Grab the full release from the Project Page and unzip it into your eclipse install directory or extension location
  • Filedrag

    Drag and Drop files from the OS file explorer or desktop into eclipse. If the file already exists in the workspace, then that file is opened, otherwise the equivalent of "File->Open External File..." is performed.

    Under windows, this only works if one drops the file into the title bar of the eclipse window.
    Under linux, this only works if one drops the file into the editor area of the window
    I haven't figure out how to get this to work under OS X yet, suggestions appreciated.

    One can also open files inside eclipse from the command line by using one of the eclipseclient-* scripts included with this plugin. This works for external files as well as those that live in the workspace. The client/server code for this was adapted from the fileopen plugin by Ed Burnette, so it uses the same protocol for requesting a file open. If you request to open a file that does not exist, it will be created for you.

    You can also pipe the results of a command into the eclipseclient-* scripts and an untitled eclipse buffer will be created to display the data from that pipe.


    This plugin allows you to match against lines from console output, and hyperlink them to a file and line number (think clicking on compile error messages to navigate to the source file they came from).

    This allows you to have hyperlinked error messages for text strings that eclipse does not know how to handle.

    Currently, the only consoles for which this will be active are the ant integration, and any external tools with executables named ant.*, make.*, build.*, cmd.*, bash.* or sh.*. If you want to be able to create links from the output of some other executable, either create a wrapper script with such a name, or add that executable's name to the list of known executables in the plugin.xml where this plugin is installed


    Associate scripts with keybindings and launch variables. Configure the bsf engine. The default configuration uses the included javascript interpreter as the default

    If you hit the Edit button, you are presented with a simple dialog for editing the included function library file. Shown is a function written in javascript that uses the eclipse API to produce a dialog that prompts the user for a string.

    Configure the action bindings. Keybindings for Bsf can be confgured in the Workbench->Keys preference page, under the Sunshade category

    Use the action bindings. Select an action from the Bsf menu, or hit the associated key binding for that action.

    You can also use bsf scriptlets anywhere you can use a launch variable. For example, here is a dialog configuring a simple external tool that uses bsf to prompt the user for a value, and echos that value to the console using the bash executable (on linux).

    The dialog produced when the external tool is run (Run->External Tools)

    The external tool console which shows the value echoed by bash


    This plugin adds some builders which makes it easier to integrate eclipse with an existing build system.

    I like to setup eclipse to incremental build, but having it call ant for auto builds is just too slow, so I instead make it call the executables directly. For this to work, I needed eclipse to be able to only run the executables for given file patterns in the change list. To use this builder, Right click on a project -> Properties -> Builders -> New... -> Pattern Builder. This works hand in hand with the ${build_files} build variable also defined by this plugin. This variable can take an argument which will replace each matched file with the given string, and backreferences (\0 is the entire match) to the original builder pattern are allowed within this argument. For Example:

    Files changed: /foo/bar.sql /foo/baz.sql
    Pattern: ([^/]+)\.sql
    ${build_files}: /foo/bar.sql /foo/baz.sql
    ${build_files:hi\1there}: hibarthere hibazthere