Commands
A command is the declaration of a behaviour by id.
Commands are used to declare semantic behaviour so that action implementations defined
elsewhere by handlers, or linked to the action extension points (see
Basic workbench extension points using actions)
can associate themselves with a particular semantic
command. The separation of the command from the action
implementation allows multiple plug-ins to define actions that implement the
same semantic command. The command is what gets associated with a
particular key binding.
The workbench defines many common commands in its plugin.xml
file, and plug-ins are encouraged to associate their own actions with these
commands where it makes sense. In this way, semantically similar
actions implemented in different plug-ins may share the same key binding.
Defining a command
Commands are defined using the
org.eclipse.ui.commands
extension point. The following comes from the Info example markup:
<extension
point="org.eclipse.ui.commands">
...
<command
categoryId="org.eclipse.ui.examples.contributions.commands.category"
id="org.eclipse.ui.examples.contributions.view.count"
description="%contributions.view.count.desc"
name="%contributions.view.count.name">
</command>
...
The command definition specifies a name, description, and id for
the action. It also specifies the id of a category for the command, which is
used to group commands in the preferences dialog. The categories are also
defined in the
org.eclipse.ui.commands
extension point:
...
<category
name="%contributions.commands.category.name"
description="%contributions.commands.category.desc"
id="org.eclipse.ui.examples.contributions.commands.category">
</category>
...
Note that there is no implementation specified for a
command. A command only becomes concrete when a plug-in
associates its handler or action with the command id. We'll
talk about the different ways to associate handler implementations
with commands in the
org.eclipse.ui.handlers section. We'll talk about
binding key sequences to commands in the
org.eclipse.ui.bindings section.