作用域用来为键绑定定义适当的上下文。工作台定义两个键绑定作用域:
作用域指示何时键绑定(在活动键配置中)被认为是活动的。在键绑定标记中声明了作用域:
... <keyBinding string="Ctrl+S" scope="org.eclipse.ui.globalScope" command="org.eclipse.ui.file.save" configuration="org.eclipse.ui.defaultAcceleratorConfiguration"> </keyBinding> ... <keyBinding string="Ctrl+X Ctrl+S" scope="org.eclipse.ui.globalScope" command="org.eclipse.ui.file.save" configuration="org.eclipse.ui.emacsAcceleratorConfiguration"> </keyBinding>
当前作用域是如何确定的?缺省情况下,工作台在全局作用域中运作。当文本编辑器变成活动的时,它负责将作用域重新设置为文本编辑器作用域。这全都由工作台和文本编辑器代码处理。大多数插件仅在定义其键绑定时才需要确定这些键绑定的适当作用域。
当插件定义键绑定时,插件通常将该键绑定指定给现有作用域。但是,如果插件定义新的编辑器样式,则您有可能还想要为键绑定引入新的作用域。例如,对于编辑器中的各个页面,多页面编辑器可能会有不同的作用域。
定义自已的作用域时,由您的插件来确保将相应的作用域根据编辑器的需要设置到 IKeyBindingService 中。 如何进行的详细讨论已超出了此文档的范围(双关语)。有关更多详细信息, 参考 IKeyBindingService 及其实现器。
插件在 org.eclipse.ui.commands 扩展点内(或别的什么地方?)定义它们的作用域。全局作用域和文本编辑器作用域的工作台标记位于扩展定义的底部:
<extension point="org.eclipse.ui.commands"> ... <scope name="%scope.global.name" description="%scope.global.description" id="org.eclipse.ui.globalScope"> </scope> <scope name="%scope.text.name" parent="org.eclipse.ui.globalScope" description="%scope.text.description" id="org.eclipse.ui.textEditorScope"> </scope> </extension>