Schemes

Schemes are used to represent a general style or theme of bindings. For example, the Workbench provides a "Default" scheme and an "Emacs" scheme.  Only one scheme is active at any given time.  End users control which one is active using the command link General > Keys preference page.

From an implementation point of view, schemes are simply named groupings of bindings.  A scheme won't accomplish anything on its own unless there are bindings associated with it.  

Let's look again at the workbench markup for org.eclipse.ui.bindings to find the binding definitions and how a scheme gets associated with a binding.

...
<key
       sequence="Ctrl+S"
       commandId="org.eclipse.ui.file.save"
       schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
</key>
...
<key
       sequence="Ctrl+X Ctrl+S"
       commandId="org.eclipse.ui.file.save"
       schemeId="org.eclipse.ui.emacsAcceleratorConfiguration">
</key>
...

There are two different key bindings defined for the "org.eclipse.ui.file.save" command.  Note that each one has a different schemeId defined.  When the default scheme is active, the "Ctrl+S" key binding will invoke the command.  When the emacs scheme is active, the sequence "Ctrl+X Ctrl+S" will invoke the command.

Defining new schemes

When your plug-in defines a binding, it will most likely assign it to an existing scheme.  However, your plug-in may want to define a completely new style of scheme.  If this is the case, you can define a new type of scheme inside the org.eclipse.ui.bindings definition.  The workbench markup that defines the default and emacs key configurations are shown below:

...
<scheme
       name="%keyConfiguration.default.name"
       description="%keyConfiguration.default.description"
       id="org.eclipse.ui.defaultAcceleratorConfiguration">
</scheme>
<scheme
       name="%keyConfiguration.emacs.name"
       parentId="org.eclipse.ui.defaultAcceleratorConfiguration"
       description="%keyConfiguration.emacs.description"
       id="org.eclipse.ui.emacsAcceleratorConfiguration">
</scheme>
...

Note that the name defined here is the one used in the preferences page in the list of schemes.

Activating a scheme

The user controls the active scheme via the preferences page.  However, you can define the default active scheme as a part of the "plugin_customization.ini" file. It is a preference:

org.eclipse.ui/KEY_CONFIGURATION_ID=org.eclipse.ui.defaultAcceleratorConfiguration