当前位置: 代码迷 >> Eclipse >> RCP 快捷键 有关问题:怎么屏蔽掉Eclipse插件本身的快捷键,而只自定义的快捷键功能有效
  详细解决方案

RCP 快捷键 有关问题:怎么屏蔽掉Eclipse插件本身的快捷键,而只自定义的快捷键功能有效

热度:9588   发布时间:2013-02-25 21:52:43.0
RCP 快捷键 问题:如何屏蔽掉Eclipse插件本身的快捷键,而只自定义的快捷键功能有效
比如要实现Ctrl+S的Save快捷键时,会出现插件本身的快捷键和自定义的两个快捷键,这样显然不是我们想要的效果。

方案(1)

 
  //屏蔽快捷键   ((IBindingService)PlatformUI.getWorkbench().getAdapter(IBindingService.class)).setKeyFilterEnabled(false);

PS.:这个能屏蔽所有的Binding 包括自定义的,这显然不合适。

方案(2)

采用默认的ContextID:org.eclipse.ui.contexts.window

  在plugin.xml中实现:

   <extension         point="org.eclipse.ui.bindings">      <key            commandId="org.xxx.SaveConfigHandler"            contextId="org.eclipse.ui.contexts.window"            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"            sequence="CTRL+S">      </key>   </extension>


PS:这就导致了标题中提到的问题,同时有两个快捷键。

方案(3)(有效解决方案)

指定自定义ContextID,只有在该ContextID下快捷键才有效,而非默认的ContextID

  在plugin.xml中实现:

 <extension         point="org.eclipse.ui.bindings">      <key            commandId="org.xxxx.SaveConfigHandler"            contextId="MyConfigEditor.Context"            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"            sequence="CTRL+S">      </key>   </extension>


同时扩展:

  <extension         point="org.eclipse.ui.contexts">      <context            id="MyConfigEditor.Context"            name="MyConfigEditor  Context"            parentId="org.eclipse.ui.contexts.window">      </context>   </extension>


(以Editor下Ctrl+S为例:)

在相应的Editor中

重写起init方法如下:

@Override public void init(IEditorSite site, IEditorInput input) throws PartInitException {  super.init(site, input);   IContextService contextService =(IContextService) getSite().getService(IContextService.class);   contextService.activateContext("MyConfigEditor.Context"); }
  相关解决方案