eclipse rcp 插件快捷键设置 冲突解决方案

此解决方案来自网络,个人备用 


快捷键的数量是有限的,何况Eclipse预定义了为数不少的快捷键,所以你开发的RCP程序自定义的快捷键与Eclipse默认定义出现冲突是寻常情况,这时候如何让我们自定义的快捷键优先被接受?方法有几种,在此,我向大家介绍一种万全之策。 

    一般给Action绑定快捷键的方法是自定义binding和command。例如我们实现了文件保存的动作代码,将这个动作与快捷键CTRL+S绑定,我们在该应用的plugin.xml文件中添加了以下代码: 

<extension 
          point="org.eclipse.ui.bindings"> 
        <key 
              commandId="miner.file.save" 
              schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" 
              sequence="CTRL+S"> 
        </key> 
    </extension> 

    <extension 
          point="org.eclipse.ui.commands"> 
        <command 
              id="miner.file.save" 
              name="Save"> 
        </command> 
    </extension> 

    一般情况下,如上XML片段绑定的快捷键都可以正常使用。但是遇到快捷键冲突,就像org.eclipse.ui插件已经提供了一个Ctrl+S的快捷键,按下Ctrl+S将不能如我们所愿直接激活miner.file.save动作。遇到这种情况,我们可以选择改用另一个快捷键,也可以自定义动作的 commandId,将miner.file.save改成org.eclipse.ui.file.save。因为在Eclipse默认定义里,CTRL+S是与org.eclipse.ui.file.save绑定的,我们自定义了org.eclipse.ui.file.save的新实现。以上两种方法都不甚便利,最理想的解决之道是下面的自定义schema办法。 
    注意到,在之前定义的bindings用到的schemaId都是 org.eclipse.ui.defaultAcceleratorConfiguration,这个schema存储了Eclipse用到的所有默认快捷键。为何我们不自定义一个自己的schema文件,并把它设成当前使用的schema文件,那么Eclipse就会调用自定义的schema文件。且看下面修改后的plugin.xml片段: 

<extension 
          point="org.eclipse.ui.bindings"> 
        <scheme 
            id="miner.accelerator" 
            name="myAccelerator" 
            parentId="org.eclipse.ui.defaultAcceleratorConfiguration"> 
       </scheme> 

        <key 
              commandId="miner.file.save" 
              schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" 
              sequence="CTRL+S"> 
        </key> 
    </extension> 

    <extension 
          point="org.eclipse.ui.commands"> 
        <command 
              id="miner.file.save" 
              name="Save"> 
        </command> 
    </extension> 

    miner.accelerator是一个新的schema文件,它在org.eclipse.ui.bindings扩展点中定义。请注意,在定义新 schema的时候有一个parentID属性,如果定义了它,新的schema会像类继承一样把parent schema里面的key binding全继承下来。如果不定义,则是一个全新的schema。 
    至此是否大功告成?不行,还差重要的一步——让新建的schema文件生效。这需要plugin配置文件的支持,过程有些复杂,我简要的介绍三个实现步骤。RCP新手希望更深入的理解,可以从网上搜索RCP product配置方面的知识。 
    1. 新建一个plugin配置文件,遵循习惯,我们将这个文本文件命名为 plugin_customization.ini; 
    2. 在上述配置文件中加入以下语句: 
        org.eclipse.ui/KEY_CONFIGURATION_ID=miner.accelerator 
    KEY_CONFIGURATION_ID属性指示你将激活的schema; 
    3. 在plugin.xml中加入product扩展,将这个扩展的preferenceCustomization属性值赋予plugin_customization.ini。就如以下的XML片段: 

<extension id="product" point="org.eclipse.core.runtime.products"> 
   <product application="miner.application" name="miner"> 
      <property name="preferenceCustomization" value="plugin_customization.ini"> 
      </property> 
   </product> 
</extension> 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值