Un ámbito sirve para definir el contexto apropiado de un enlace de teclas. El entorno de trabajo define dos ámbitos de enlaces de teclas:
El ámbito indica cuándo un enlace de teclas (en la configuración de teclas activa) se considera activo. El ámbito se declara en el código del enlace de teclas:
... <keyBinding string="Control+S" scope="org.eclipse.ui.globalScope" command="org.eclipse.ui.file.save" configuration="org.eclipse.ui.defaultAcceleratorConfiguration"> </keyBinding> ... <keyBinding string="Control+X Control+S" scope="org.eclipse.ui.globalScope" command="org.eclipse.ui.file.save" configuration="org.eclipse.ui.emacsAcceleratorConfiguration"> </keyBinding>
¿Cómo se determina el ámbito actual? Por omisión, el entorno de trabajo opera en un ámbito global. Cuando se activa un editor de texto, éste es responsable de restablecer el ámbito en el ámbito del editor de texto. El código del editor de texto y el entorno de trabajo manejan todo este proceso. La mayoría de los conectores sólo necesitan determinar el ámbito adecuado para sus enlaces de teclas al definirlos.
Cuando un conector defina un enlace de teclas, probablemente lo asignará a un ámbito existente. No obstante, si el conector define un estilo de editor nuevo, es posible que también le interese proporcionar un ámbito nuevo para los enlaces de teclas. Por ejemplo, un editor multipágina puede tener ámbitos distintos para cada una de sus páginas.
Cuando defina un ámbito propio, el conector será el que se encargue de asegurar que se establezcan los debidos ámbitos en la interfaz IKeyBindingService en función de cómo sea el editor. Aquí no ofrecemos un estudio completo de cómo funciona todo esto, porque está más allá del ámbito (valga la redundancia) de esta documentación. Hallará más detalles en el tema dedicado a la interfaz IKeyBindingService y a sus implementadores.
Los conectores definen sus ámbitos dentro (¿dónde si no?) del punto de extensión org.eclipse.ui.commands. El código del entorno de trabajo de los ámbitos global y de editor de texto se encuentra al final de la definición de la extensión:
<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>