Top / Eclipse / プラグイン開発のTIPS集 / キーバインディングを設定する

Eclipse/RCPはplugin.xmlで宣言的にキーバインディング*1を設定することができます。Eclipseの ウィンドウ >> 設定 の 一般 >> キー に表示されるヤツですね。これでCtrl+Sで保存とか、いわゆるキーボードのショートカットを定義することができます。

key.png

コマンドの定義

キーをバインドする仕組みについてですが、まず「コマンド」というモノを定義して、そのコマンドにキーをバインディングします。で、さらにそのコマンドに対してアクションを関連づければ、

あるキーを押す-> コマンドが決まる -> そのコマンドのアクションが実行される

となります。

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>

さてこれで、コマンドとそのキーバインドが定義されました。

view.png



mod.png

アクションの関連づけ

次にこのコマンドにアクションを関連づけますが、それはアクションの拡張ポイントにコマンドの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"/>

以上で、あるアクションに対してキーをバインドすることができました。

F10.png

キーシーケンスの値について

キーのバインドで

<key sequence="F10" <-F10を割当

としましたが、たとえば「Ctrl+S」の場合は

<key sequence="Ctrl+S"

とします。複数書く場合は

<key sequence="Ctrl+X Ctrl+S" 

などとなります。

Ctrlなど特殊なキーは、プラットフォームに独立に設定するには

M1 (WindowsはCtrl、MacはCommand)
M2 (Shift)
M3 (WindowsはAlt、MacはOption)
M4 (MacはCtrl、その他は未定義)

などがあるようです。詳細はEclipseヘルプを「M1 M2」で検索しましょう。

すでにあるヤツとバッティングしてるみたいでCtrl+Sとかはうまくいかないなあ。この辺の解決方法がまだわかんない。。。

プログラマティカルにアクションを追加した場合は、そのアクションクラス内で

Action#setActionDefinitionId("org.eclipse.ui.file.save");

リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Eclipse / プラグイン開発のTIPS集 / キーバインディングを設定する

現在のアクセス:18658


*1 ショートカットキーといえばよい?キーボード・アクセラレーターというヒトもいる

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS