Eclipse 如何确保我的密钥绑定优先于其他定义

Eclipse 如何确保我的密钥绑定优先于其他定义,eclipse,keyboard-shortcuts,rcp,Eclipse,Keyboard Shortcuts,Rcp,我正在开发一个RCP应用程序。该应用程序有一个执行模式,我想在其中启用各种键绑定来控制开始、停止、继续、重复等。绑定将使用“ExecutionContext”启用,该“ExecutionContext”是在激活任何相关视图时设置的 上下文切换在每个“执行”视图中完成 @凌驾 公共最终无效createPartControlComposite父级 { addPartListener; ... } 私有void addPartListener { this.getViewSite.getPage.ad

我正在开发一个RCP应用程序。该应用程序有一个执行模式,我想在其中启用各种键绑定来控制开始、停止、继续、重复等。绑定将使用“ExecutionContext”启用,该“ExecutionContext”是在激活任何相关视图时设置的

上下文切换在每个“执行”视图中完成

@凌驾 公共最终无效createPartControlComposite父级 { addPartListener; ... } 私有void addPartListener { this.getViewSite.getPage.addPartListenernew IPartListener2 { IContextActivation令牌=null; @凌驾 公共无效零件停用EdiWorkbenchPartReference零件参考 { 如果令牌!=null { System.out.printlend执行上下文; IContextService contextService=IContextService PlatformUI.getWorkbench.getService IContextService.class; contextService.deactivateContexttoken; 令牌=null; } } @凌驾 公共无效零件激活工作台零件参考零件参考 { System.out.printlnSet执行上下文; IContextService contextService=IContextService PlatformUI.getWorkbench.getService IContextService.class; 令牌=contextService.activateContextAtfExecutionContext; } }; } 我可以通过控制台消息看到我的上下文正在设置,一些键绑定正在按预期工作

但是,如果已经从另一个插件分配了密钥绑定,则该绑定具有优先级。例如,我想使用Ctrl+F8停止,但当按下该键时,我会得到“下一个透视图”操作,这是工作台的默认操作

绑定定义是


似乎只有以前未定义的加速器才起作用。设置上下文后,如何覆盖现有定义并激活我的定义?

每个部分都有单独的上下文服务,您必须使用正确的上下文服务

无需在零件激活/停用时激活/停用上下文。单独的上下文服务将自动处理该问题

因此,在createPartControl中通过以下方式激活:

IContextService contextService=getSite.getServiceIContextService.class; 令牌=contextService.activateContextAtfExecutionContext; 并在零件关闭时停用


您还定义了一个新的密钥绑定方案——它必须单独激活,而不是您想要的。只需删除该选项,然后使用org.eclipse.ui.defaultAcceleratorConfiguration作为schemeId

您到底如何启用上下文?@greg-449添加了代码谢谢。我照你的建议做了,但还是不高兴。我收到一条调试消息,确认上下文已设置。我点击了部件以确保其具有焦点。我需要设置上下文parentId还是可选的?父项是可选的,但通常是org.eclipse.ui.contexts.Windows或org.eclipse.ui.contexts.dialogAndWindow Dialog和Windows。您还需要在密钥绑定方案中定义密钥,该方案必须单独激活。这适用于“Emacs”密钥绑定之类的情况删除密钥方案,只需使用org.eclipse.ui.defaultAcceleratorConfiguration即可得出相同的结论:-非常感谢您的帮助。现在开始工作了!