Top / Eclipse / プラグイン開発のTIPS集 / キーバインディングを設定する(Eclipse3.3版)

Eclipse3.3になって、キーバインドの設定方法が変わった

キーバインディングを設定する で、Eclipseのキーバインドをどのように設定するか、ちゃんというとあるアクションに対してどうやってキーバインドを関連づけるかについて書きました。

Eclipse3.2までは、org.eclipse.ui.commands 拡張ポイントで「コマンド」を定義し、org.eclipse.ui.bindings 拡張ポイントでキーとコマンドIDを関連づけました。さらに、org.eclipse.ui.actionSets 拡張ポイントのactionタグつまりアクションクラスの設定側で

<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="sampleMenu/sampleGroup" style="push"
 toolbarPath="sampleGroup"/>

などとしてアクションとコマンドIDを関連づけることで、キーバインドを設定しました。

Eclipse3.3からはアクション関連の機構が、アクションクラスを使うのではなく、org.eclipse.ui.handlers 拡張ポイントと、org.eclipse.core.commands.AbstractHandler? クラスを拡張するように変更されているようで、キーバインド設定もそのように機構が変更されています。org.eclipse.ui.commands,org.eclipse.ui.bindings 拡張ポイントでコマンドとキーバインドを定義するまでは同じですが、コマンドIDに関連づけるのがアクションでなく、ハンドラに変更されています。具体的には以下の通り。

やってみる

  • org.eclipse.ui.handlers 拡張ポイント
    <extension point="org.eclipse.ui.handlers">
      <handler
        commandId="nu.mine.kino.plugin.samples.rcp.command"
        class="nu.mine.kino.plugin.newaction.handlers.SampleHandler">
      </handler>  ↑コマンドIDとハンドラクラスの関連づけ
    </extension>
  • AbstractHandler?のサブクラスSampleHandler?
    package nu.mine.kino.plugin.newaction.handlers;
    
    public class SampleHandler extends AbstractHandler {
      public Object execute(ExecutionEvent event) throws ExecutionException {
        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
        MessageDialog.openInformation(
            window.getShell(),
            "Newaction Plug-in",
            "Hello, Eclipse world");
        return null;
      }
    }

ちなみにorg.eclipse.ui.commands,org.eclipse.ui.bindings 拡張ポイントは以下のように設定しました。

  • org.eclipse.ui.commands 拡張ポイント
    <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" 
       id="nu.mine.kino.plugin.samples.rcp.command" name="サンプルコマンド"/>
    </extension>
  • org.eclipse.ui.bindings 拡張ポイント
    <extension point="org.eclipse.ui.bindings">
      <key sequence="M1+9" ctrl+9とかCommand+9とか
       commandId="nu.mine.kino.plugin.samples.rcp.command" 
       schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
    </extension>

以上で、キーバインドの設定は完了です。このままだとメニューに表示されないので、キーボードショートカットからしかハンドラを起動できませんが、ctrl+9とかcommand+9で先のハンドラクラスが実行されます。

handlerExecute.png

もちろんコマンドとキーバインドの関連については何も変わってないので、キーバインドの設定画面には上記バインドが表示されています。

keybinding.png

TIPS集

関連リンク


この記事は

選択肢 投票
おもしろかった 2  
そうでもない 0  
  • キーバインドの設定はもちろん、メニューバーやツールバー、ポップアップメニューへの追加機構も変わってるですよねー。 -- きの? 2009-02-19 (木) 11:30:54
  • CopyやPasteなどで、自分のプラグインがアクティブなときにはキーバインドが自分のプラグインで登録した動作をするようにするやり方で苦心してます。。。アクションのときは登録が簡単だったのに。。。 -- YOU? 2009-09-09 (水) 16:32:40

Top / Eclipse / プラグイン開発のTIPS集 / キーバインディングを設定する(Eclipse3.3版)

現在のアクセス:9685


添付ファイル: filekeybinding.png 959件 [詳細] filehandlerExecute.png 829件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-09-09 (水) 16:33:41 (5505d)