方案(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"); }