我正在开发一个Eclipse RCP应用程序,并为我的编辑器定义了一个自定义上下文(org.eclipse.ui.contexts)。每当我调用我的一个编辑器时,都会激活此上下文。
此外,我已经定义了一个单键键绑定(org.eclipse.ui.bindings),我已将其作用于此上下文,当在编辑器上下文中键入时,调用命令/处理程序(我将使用这个例子的字母'J'。
一切都按预期工作。当我启动/选择我的一个自定义编辑器时,上下文被激活,'J'执行我的处理程序。当我启动/选择一个视图部件时,我的自定义编辑器的上下文被停用,'J'不再执行处理程序。但是,当我在窗口修剪区域的某处单击文本窗口小部件时 - 让我们说快速访问字段 - 并键入字母'J',按键击中并执行我的处理程序,我不想要的行为。
原因是选择另一个工作台部件会激活其上下文并停用前一个上下文。但是,单击工作台窗口区域中的任何其他位置(除了其他部分之外)不会取消激活先前的上下文。我确信这是设计的,是一种非常合理的方法。但是,它阻止我定义单键键绑定。
有没有人a)之前遇到过这个问题b)如果是这样,你是怎么解决的?
现在我正在使用一个完整的hack,它涉及使用全局侦听器完全禁用键绑定服务,检测进入Text小部件,并在退出Text小部件时重新启用它。
答案 0 :(得分:0)
在扩展点<extension point="org.eclipse.ui.bindings">
中,不指定将替换现有密钥的命令ID。
有关详细信息,请参阅documentation。
commandId - 分配了此键绑定指定的键序列的命令的唯一标识符。如果此属性的值为空字符串,则将键序列分配给内部“无操作”命令。这对于可能从父母那里借用的特定密钥配置和上下文中的“取消定义”键绑定非常有用。