Commands und Bindings

Ich habe mich heute mit der Problematik beschäftigt, wie man eigene Keybindings implementieren kann, im folgenden sind die Schritte dokumentiert.

Zur Definition von Bindings braucht man prinzipiell folgende Elemente:

Ein Command (org.eclipse.ui.commands)

Einen Handler (org.eclipse.ui.handlers)

Ein Scheme (org.eclipse.ui.bindings)

Evtl. einen Kontext (org.eclipse.ui.contexts)

Ein Keybinding (org.eclipse.ui.bindings)

Was hier mal gezeigt wird ist, wie man das STRG+N Command überschreiben kann. Wenn man eine normale RCP-Anwendung nach einem Template erstellt, und mal probeweise STRG+N drückt, sieht man sofort, das dieses Binding bereits belegt ist, wie auch folgendes Bild zeigt:

Es öffnet sich der „New-Wizard-Dialog“.

Das wollen wir aber nicht, sondern wir möchten, das beim Drücken von STRG+N ein wunderschönes „Hello World!“ ausgegeben wird.

Also definiert man ein Command, der Einfachheit halber mit einem Defaulthandler.

<extension

point=“org.eclipse.ui.commands“>

<command

defaultHandler=„de.md.bindings.handlers.MyDefaultHandler“

id=„de.md.bindings.newCommand“

name=„name“>

</command>

</extension>

Zusätzlich definieren wir ein Binding und ein Schema:

<extension

point=“org.eclipse.ui.bindings“>

<scheme

id=“de.md.bindings.scheme“

name=“name“>

</scheme>

<key

commandId=„de.md.bindings.newCommand“

schemeId=„de.md.bindings.scheme“

sequence=„M1+N“>

</key>

</extension>

Mit Hilfe der Extension:

<key

commandId=„de.md.bindings.newCommand“

schemeId=„de.md.bindings.scheme“

sequence=„M1+N“>

</key>

Haben wir hiermit ein Binding für STRG+N definiert.

Startet man die Anwendung jetzt, dann hat sich aber noch nichts geändert, denn noch immer öffnet sich der entsprechende New-Wizard.

Was noch geschehen muss ist die Aktivierung des entsprechendes Schemes. Dies geht witzigerweise nicht programmatisch, sondern hierfür legt man eine eigene Datei im root des Plugins mit dem Namen „plugin_customization.ini“ mit folgendem Inhalt an:

org.eclipse.ui/KEY_CONFIGURATION_ID=de.md.bindings.scheme

Wobei der Value hierbei das Binding des zu aktivierenden Schemes ist. Wird die Anwendung jetzt gestartet, dann wird beim Drücken von STRG+N ein „Hello World!“ ausgegeben. Das funktioniert deswegen, weil eben durch die Zuordnung des Schemes zum Binding diese erst aktiv sind, wenn ein entsprechendes Scheme aktiviert wird.

Die Definitino eines Schemes ist hierbei einfach eine Menge an Commands, die logisch in einem Schema angeordnet sind.

Advertisements

Ein Gedanke zu „Commands und Bindings

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s