|
Eclipse/RCPはplugin.xmlで宣言的にキーバインディング*1を設定することができます。Eclipseの ウィンドウ >> 設定 の 一般 >> キー に表示されるヤツですね。これでCtrl+Sで保存とか、いわゆるキーボードのショートカットを定義することができます。 コマンドの定義 †キーをバインドする仕組みについてですが、まず「コマンド」というモノを定義して、そのコマンドにキーを関連づけます。さらにそのコマンドに対して、アクションを関連づけることで あるキーを押す-> コマンドが決まる -> そのコマンドのアクションが実行される といった流れになります。 plugin.xml †<extension point="org.eclipse.ui.commands">
<category id="nu.mine.kino.plugin.samples.rcp.category" name="Sample"/>
<command categoryId="nu.mine.kino.plugin.samples.rcp.category" <-categoryのid属性
id="nu.mine.kino.plugin.samples.rcp.command" name="サンプルコマンド"/>
</extension>
<extension point="org.eclipse.ui.bindings">
<key sequence="F10" <-F10を割当
commandId="nu.mine.kino.plugin.samples.rcp.command" <-commandのid属性
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
</key> ↑ デフォルトのスキーム
ほかに org.eclipse.ui.emacsAcceleratorConfiguration がある
</extension>
これで、コマンドとそのキーバインドが定義されました。 カテゴリが「Sample」、コマンドが「サンプルコマンド」、キーが「F10」という設定が追加されている。 さらに、スキームは「デフォルト」になっている アクションの関連づけ †次にこのコマンドにアクションを関連づけますが、それはアクションの拡張ポイントにコマンドのIDを与えてやることで実現します。たとえばこんな感じです。 <action class="nu.mine.kino.plugin.samples.rcp.actions.HogeAction" definitionId="nu.mine.kino.plugin.samples.rcp.command" <- commandのid id="nu.mine.kino.plugin.samples.rcp.actions.HogeAction" label="アクション。" menubarPath="topmenu/sepa01" style="push"/> 以上で、あるアクションに対してキーをバインドすることができました。 TIPS †キーシーケンスの値について †キーのバインドで <key sequence="F10" <-F10を割当 としましたが、たとえば「Ctrl+S」の場合は <key sequence="Ctrl+S" とします。複数書く場合は <key sequence="Ctrl+X Ctrl+S" などとなります。 Ctrlなど特殊なキーをプラットフォームに依存しないで設定するには †Ctrlなど特殊なキーは、プラットフォーム非依存にするためにエイリアスがきってあります。 M1 (WindowsはCtrl、MacはCommand) M2 (Shift) M3 (WindowsはAlt、MacはOption) M4 (MacはCtrl、その他は未定義) などがあるようです。詳細はEclipseヘルプを「M1 M2」などで検索しましょう。 プログラマティカルにアクションを追加した場合 †プログラマティカルにアクションを追加した場合は、そのアクションクラス内で Action#setActionDefinitionId("nu.mine.kino.plugin.samples.rcp.command");
としてコマンドのIDと関連づけましょう。 Ctrl+Qで、アプリケーションを終了する †<key
sequence="M1+Q"
commandId="org.eclipse.ui.file.exit" <- QuitActionのコマンドID
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
</key>
ちなみにQuitAction?のコンストラクタのソースはこんな感じ public QuitAction(IWorkbenchWindow window) {
// Although window is not currently used,
// this follows the same pattern as other ActionFactory actions.
if (window == null) {
throw new IllegalArgumentException();
}
this.workbenchWindow = window;
setText(WorkbenchMessages.Exit_text);
setToolTipText(WorkbenchMessages.Exit_toolTip);
setActionDefinitionId("org.eclipse.ui.file.exit"); //$NON-NLS-1$
window.getWorkbench().getHelpSystem().setHelp(this,
IWorkbenchHelpContextIds.QUIT_ACTION);
}
リンク †
この記事は
現在のアクセス:19216 |