diff --git a/docs/Command_Core_Expressions.md b/docs/Command_Core_Expressions.md index 5133241cf651..ea28663c6001 100644 --- a/docs/Command_Core_Expressions.md +++ b/docs/Command_Core_Expressions.md @@ -7,14 +7,14 @@ Core expressions are declarative or programmatic expressions based on the org.ec Expressions and the Command Framework ===================================== -The [Platform Command Framework](PlatformCommandFramework.md) uses [core expressions](Platform_Expression_Framework.md) for enabledWhen and activeWhen for handlers, programmatic activation of contexts, and for visibleWhen for menu contributions. -The command framework provides the IEvaluationContext that command core expressions are evaluate against. +The [Platform Command Framework](PlatformCommandFramework.md) uses [core expressions](Platform_Expression_Framework.md) for `enabledWhen` and `activeWhen` for handlers, programmatic activation of contexts, and for `visibleWhen` for menu contributions. +The command framework provides the `IEvaluationContext` that command core expressions are evaluate against. -The IEvaluationContext provides a default variable for evaluations, and a number of named variables. +The `IEvaluationContext` provides a default variable for evaluations, and a number of named variables. In the command framework, we provide the global selection as a `java.util.Collection` as the default variable. It can either be empty, have one entry (if the ISelection was something like an ITextSelection), or have the contents of an IStructuredSelection. -The element can be used to change which variable the child expression elements are evaluating against. +The `` element can be used to change which variable the child expression elements are evaluating against. Variables and the Command Framework =================================== @@ -25,7 +25,7 @@ Some of the variables may not be set, depending on the current application conte | Name | Type | Description | Since | | --- | --- | --- | --- | -| activeContexts | A `java.util.Collection` of `java.lang.String` | This is a collection of the active context IDs as strings. Most commonly used with , , and with a combined `org.eclipse.common.expressions.PropertyTester`. In **3.3** action sets are mirrored by contexts whose parent is `org.eclipse.ui.actionSet`, and the active action sets show up in the list of active contexts. | 3.2 | +| activeContexts | A `java.util.Collection` of `java.lang.String` | This is a collection of the active context IDs as strings. Most commonly used with ``, ``, and `` with a combined `org.eclipse.common.expressions.PropertyTester`. In **3.3** action sets are mirrored by contexts whose parent is `org.eclipse.ui.actionSet`, and the active action sets show up in the list of active contexts. | 3.2 | | activeActionSets | An `IActionSetDescriptor\[\]` | **Note:** This is currently not used as it points to an internal class and the type might change in any release. | 3.2 | | activeShell | `org.eclipse.swt.widgets.Shell` | The currently active shell. It can be a dialog or workbench window shell. | 3.2 | | activeWorkbenchWindowShell | `org.eclipse.swt.widgets.Shell` | The active workbench window shell. | 3.2 | @@ -38,14 +38,15 @@ Some of the variables may not be set, depending on the current application conte | activePart | `org.eclipse.ui.IWorkbenchPart` | The active part, which can be the same as the active editor. | 3.2 | | activePartId | `java.lang.String` | The ID of the currently active part. | 3.2 | | activeSite | `org.eclipse.ui.IWorkbenchPartSite` | The site of the currently active part. | 3.2 | -| selection | `org.eclipse.jface.viewers.ISelection` | The current global selection. It is often used with elements with `org.eclipse.core.expressions.PropertyTester`, in programmatic core expressions, and in **3.3** with and elements. | 3.2 | -| activeMenu | A `java.util.Collection` of `java.lang.String` | This is the list of IDs of the showing context menu. Examples are like #TextEditorRuler or a part ID. Most commonly used with , , and with a combined `org.eclipse.common.expressions.PropertyTester`. | 3.2 | +| org.eclipse.ui.selection | `Object` | The current global selection if the `ESelectionService` is used. It is often used with `` elements with `org.eclipse.core.expressions.PropertyTester`, in programmatic core expressions, potentially with `` and `` elements. | 4.0 | +| selection | `org.eclipse.jface.viewers.ISelection` | The current global selection. It is often used with `` elements with `org.eclipse.core.expressions.PropertyTester`, in programmatic core expressions, and in **3.3** with `` and `` elements. | 3.2 | +| activeMenu | A `java.util.Collection` of `java.lang.String` | This is the list of IDs of the showing context menu. Examples are like #TextEditorRuler or a part ID. Most commonly used with ``, ``, and `` with a combined `org.eclipse.common.expressions.PropertyTester`. | 3.2 | | activeMenuSelection | `org.eclipse.jface.viewers.ISelection` | This is a selection that is available while a context menu is showing. It is the selection from the selection provider used to register the context menu, usually from `getSite().registerContextMenu(*)`. It is usually the same as the `selection`variable, but not always. This is more for legacy compatibility. | 3.3 | | activeMenuEditorInput | `org.eclipse.jface.viewers.ISelection` | This is a selection that is available while a context menu is showing. It is the selection from the editor input, usually if includeEditorInput was set to `true` during `getEditorSite().registerContextMenu(*)`. This is more for legacy compatibility. | 3.3 | | activeFocusControl | `org.eclipse.swt.widgets.Control` | A control that has focus and has been registered with the [IFocusService](https://github.com/eclipse-platform/eclipse.platform.ui/blob/master/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/swt/IFocusService.java). | 3.3 | | activeFocusControlId | `java.lang.String` | The ID of a control that has focus and has been registered with the `org.eclipse.ui.swt.IFocusService`. | 3.3 | -Note: All these variables can be used with and a `org.eclipse.common.expressions.PropertyTester`. +Note: All these variables can be used with `` and a `org.eclipse.common.expressions.PropertyTester`. Property Testers ================ @@ -104,7 +105,7 @@ For example, to test an IResource name the property would be `org.eclipse.core.r | **Property** | **Description** | | | isPerspectiveOpen | Tests if any perspective is open. | | -Expression examples +Expression Examples =================== Here are some examples. I'll pretend all of the examples are deciding when a handler is active. @@ -118,7 +119,7 @@ You can browse the [plugin.xml](https://github.com/eclipse-platform/eclipse.plat The InfoView provides an `IStructuredSelection` with 0 or more `org.eclipse.ui.examples.contributions.model.Person`. When using the default variable, you must treat it as an `java.util.Collection`. -That means using or +That means using `` or `` ```xml @@ -150,7 +151,7 @@ For example: ``` -Active editor type +Active Editor Type ------------------ If you want your handler to be active for a specific type of editor, you can use **activeEditorId** to target your handler. @@ -162,7 +163,7 @@ If you want your handler to be active for a specific type of editor, you can use ``` -Complex nested boolean expressions +Complex Nested Boolean Expressions ---------------------------------- You can also write complex nested boolean expressions, like **(a & b & (c | d | (!e)))**: @@ -188,16 +189,16 @@ New Core Expressions in 3.3 In 3.3 there were 2 additions to the core expressions framework. -count and iterate +Count and Iterate ----------------- Count and iterate have always worked against `java.util.Collection`. -The and elements can now be used on any variable that adapts to `org.eclipse.core.expressions.ICountable` and `org.eclipse.core.expressions.IIterable` or implements the interfaces directly. +The `` and `` elements can now be used on any variable that adapts to `org.eclipse.core.expressions.ICountable` and `org.eclipse.core.expressions.IIterable` or implements the interfaces directly. It wasn't possible to use the java 1.5 constructs for iterable. The workbench provides an adapter for `ISelection` and `IStructuredSelection`. -definitions +Definitions ----------- The **org.eclipse.core.expressions.definitions** extension point was introduced.