From 51e8b1a34e040b68e006c137890d133b111d4036 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Fri, 20 Sep 2019 16:21:00 -0700 Subject: [PATCH 01/24] Keyboard Selection Spec --- doc/specs/Keyboard-Selection.md | 141 ++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 doc/specs/Keyboard-Selection.md diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md new file mode 100644 index 00000000000..f2816fe0895 --- /dev/null +++ b/doc/specs/Keyboard-Selection.md @@ -0,0 +1,141 @@ +--- +author: Carlos Zamora @cazamor +created on: 2019-08-30 +last updated: 2019-09-21 +issue id: +--- + +# Keyboard Selection + +## Abstract + +This spec describes a new set of keybindings that allows the user to create and update a selection without the use of a mouse or stylus. + +## Inspiration + +ConHost allows the user to edit an existing selection using the keyboard. Holding `Shift` allows the user to move the second selection anchor in accordance with the arrow keys. The selection anchor updates by one cell per key event, allowing the user to refine the selected region. However, mouse selection seems to be superior in that it provides access to the following special selection modes: +- Double Click: word selection +- Triple Click: line selection + +Mark mode allows the users to update the selection anchors sequentially, and create a block selection. + + +## Solution Design + +The fundamental solution design for keyboard selection is that the responsibilities between the Terminal Control and Terminal Core must be very distinct. The Terminal Control is responsible for handling user interaction and directing the Terminal Core to update the selection. The Terminal Core will need to update the selection according to the preferences of the Terminal Control. + +### Fundamental Terminal Control Changes + +`TermControl::_KeyDownHandler()` is responsible for interpretting the key events. At the time of writing this spec, there are 3 cases handled in this order: +- Alt+Gr events +- Keybindings +- Send Key Event (also clears selection) + +Conditionally effective keybindings can be introduced to update the selection accordingly. A well known conditionally effective keybinding is the `Copy` action where text is copied if a selection is active, otherwise the key event is marked as `handled = false`. See "UI/UX Design" --> "Keybindings" for more information regarding keybindings. + +### Fundamental Terminal Core Changes + +The Terminal Core will need to expose a `KeyboardSelection()` function that is called by the keybinding handler. The following parameters will need to be passed in: +- `enum Direction`: the direction that the selection anchor will attempt to move to. Possible values include `Up`, `Down`, `Left`, and `Right`. +- `enum SelectionExpansionMode`: the selection expansion mode that the selection anchor will adhere to. Possible values include `Cell`, `Word`, and `Viewport`. + +For `SelectionExpansionMode = Cell`, the selection anchor will be updated according to the buffer's output pattern. For **horizontal movements**, the selection anchor will attempt to move left or right. If a viewport boundary is hit, the anchor will wrap appropriately (i.e.: hitting the left boundary moves it to the last cell of the line above it). + +For **vertical movements**, the selection anchor will attempt to move up or down. If a **viewport boundary** is hit and there is a scroll buffer, the anchor will move and scroll accordingly by a line. If a **buffer boundary** is hit, the anchor will not move. In this case, however, the event will still be considered handled. + +For `SelectionExpansionMode = Word`, the selection anchor will also be updated according to the buffer's output pattern, as above. However, the selection will be updated in accordance with "chunk selection" (performing a double-click and dragging the mouse to expand the selection). For **horizontal movements**, the selection anchor will be updated according to the `_ExpandDoubleClickSelection` functions. The result must be saved to the anchor. As before, if a boundary is hit, the anchor will wrap appropriately. + +For **vertical movements**, the movement is a little more complicated than before. The selection will still respond to buffer and viewport boundaries as before. If the user is trying to move up, the selection anchor will attempt to move up by one line, then selection will be expanded leftwards. Alternatively, if the user is trying to move down, the selection anchor will attempt to move down by one line, then the selection will be expanded rightwards. + +For `SelectionExpansionMode = Viewport`, the selection anchor will be updated according to the viewport's height. Horizontal movements will be updated according to the viewport's width, thus resulting in the anchor being moved to the left/right boundary of the viewport. + +**NOTE**: An important thing to handle properly in all cases is wide glyphs. The user should not be allowed to select a portion of a wide glyph; it should be all or none of it. When calling `_ExpandWideGlyphSelection` functions, the result must be saved to the anchor. + +**NOTE**: In all cases, horizontal movements attempting to move past the left/right viewport boundaries result in a wrap. Vertical movements attempting to move past the top/bottom viewport boundaries will scroll such that the selection is at the edge of the screen. Vertical movements attempting to move past the top/bottom buffer boundaries will be clamped to be within buffer boundaries. + +Every combination of the `Direction` and `SelectionExpansionMode` will map to a keybinding. These pairings are shown below in the UI/UX Design --> Keybindings section. + +### Mark Mode +Upon mark mode being enabled by a user keybinding, the current cursor position becomes the selection anchor. The arrow keys move the selection anchor by cell. + + +## UI/UX Design + +### Keybindings + +By default, the following keybindings will be set: +| Action | Keychord | `KeyboardSelection(Direction, SelectionExpansionMode)` Parameters | +|--|--|--| +| `MoveSelectionAnchorUp` | `Shift` + `↑` | `Up` , `Cell` +| `MoveSelectionAnchorDown` | `Shift` + `↓` | `Down` , `Cell` +| `MoveSelectionAnchorLeft` | `Shift` + `←` | `Left` , `Cell` +| `MoveSelectionAnchorRight` | `Shift` + `→` | `Right` , `Cell` +| `MoveSelectionAnchorUpOneScreen` | `Shift` + `Page Up` | `Up` , `Viewport` +| `MoveSelectionAnchorDownOneScreen` | `Shift` + `Page Down` | `Down` , `Viewport` +| `MoveSelectionAnchorToLeftMargin` | `Shift` + `Home` | `Left` , `Viewport` +| `MoveSelectionAnchorToRightMargin` | `Shift` + `End` | `Right` , `Viewport` +| `MoveSelectionAnchorUpByWord` | `Ctrl` + `Shift` + `↑` | `Up` , `Word` +| `MoveSelectionAnchorDownByWord` | `Ctrl` + `Shift` + `↓` | `Down` , `Word` +| `MoveSelectionAnchorLeftByWord` | `Ctrl` + `Shift` + `←` | `Left` , `Word` +| `MoveSelectionAnchorRightByWord` | `Ctrl` + `Shift` + `→` | `Right` , `Word` +| `MoveSelectionAnchorToBufferStart` | `Ctrl` + `Shift` + `Home` | N/A +| `MoveSelectionAnchorToBufferEnd` | `Ctrl` + `Shift` + `End` | N/A +| `SelectEntireBuffer` | `Ctrl` + `A` | N/A +| `ToggleMarkMode` | `Ctrl` + `M` | N/A + + +## Capabilities + +### Accessibility + +Being able to create and update a selection without the use of a mouse is a very important feature to users with disabilities. The UI Automation system (particularly with the use of the signaling model), should be aware that a new selection exists. Thus, the bounding rects should be updated and the associated text regions should be reread appropriately. + +### Security + +N/A + +### Reliability + +With regards to the Terminal Core, the newly introduced code should rely on already existing and tested code. Thus no crash-related bugs are expected. + +With regards to Terminal Control and the settings model, crash-related bugs are not expected. However, ensuring that the selection is updated and cleared in general use-case scenarious must be ensured. + +### Compatibility + +N/A + +### Performance, Power, and Efficiency + +## Potential Issues + +The settings model makes all of these features easy to disable, if the user wishes to do so. So, no. + +## Future considerations + +### Impact from Keybinding Args +A lot of the introduced keybindings will have a significant impact from the Keybinding Args feature. This will make most of the keybindings collapse to the following format: + +```JS +{ + "command": "MoveSelectionAnchor", + "keybinding": "Shift + Up", + "args": { + "direction": "Up", + "expansionMode": "Cell" + } +} +``` + +The introduced `enum direction` and `enum expansionMode` args should be able to handle all of the `MoveSelectionAnchor...` commands. + +### Expanding Mark Mode functionality +This spec currently limits mark mode functionality to the following: +- only move by cell (no other expansion modes) +- no rebinding arrow keys allowed +In addition to the `enum direction` and `enum expansionMode` args introduced above, a `bool markMode` arg can be added. If set to `true`, the selection anchor will adjust to these commands when in mark mode. This will allow the selection anchor to be able to be adjusted by different expansion modes. + + +## Resources + +- https://blogs.windows.com/windowsdeveloper/2014/10/07/console-improvements-in-the-windows-10-technical-preview/ +- From bc668e0cbd47f96478d365a27a7f121ebca4f003 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Fri, 27 Sep 2019 10:49:18 -0700 Subject: [PATCH 02/24] PR changes (first of many) --- doc/specs/Keyboard-Selection.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index f2816fe0895..68db8480084 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -2,7 +2,7 @@ author: Carlos Zamora @cazamor created on: 2019-08-30 last updated: 2019-09-21 -issue id: +issue id: #715 --- # Keyboard Selection @@ -55,8 +55,10 @@ For `SelectionExpansionMode = Viewport`, the selection anchor will be updated ac Every combination of the `Direction` and `SelectionExpansionMode` will map to a keybinding. These pairings are shown below in the UI/UX Design --> Keybindings section. +**NOTE**: If `copyOnSelect` is enabled, we need to make sure we update the clipboard on every change in selection. + ### Mark Mode -Upon mark mode being enabled by a user keybinding, the current cursor position becomes the selection anchor. The arrow keys move the selection anchor by cell. +Upon mark mode being enabled by a user keybinding (`ToggleMarkMode`), the current cursor position becomes the selection anchor. The arrow keys move the selection anchor by cell. Using the arrow keys while holding `Shift` moves the second selection anchor by cell. Additionally, using the arrow keys while holding `Ctrl` and `Shift` moves the second selection anchor by word. This allows the user to make a selection of their choice. The user can exit mark mode by using the `ToggleMarkMode` keybinding. ## UI/UX Design @@ -88,7 +90,7 @@ By default, the following keybindings will be set: ### Accessibility -Being able to create and update a selection without the use of a mouse is a very important feature to users with disabilities. The UI Automation system (particularly with the use of the signaling model), should be aware that a new selection exists. Thus, the bounding rects should be updated and the associated text regions should be reread appropriately. +Being able to create and update a selection without the use of a mouse is a very important feature to users with disabilities. The UI Automation system (particularly with the use of the signaling model), should be aware that a new selection exists. Thus, the bounding rects should be updated and the associated text regions should be reread appropriately. ### Security @@ -138,4 +140,4 @@ In addition to the `enum direction` and `enum expansionMode` args introduced abo ## Resources - https://blogs.windows.com/windowsdeveloper/2014/10/07/console-improvements-in-the-windows-10-technical-preview/ -- +- From 67c6334cd3d2d501631592df278380300538a654 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 21 Nov 2019 17:34:38 -0800 Subject: [PATCH 03/24] Updated to reflect Keybinding Args change --- doc/specs/Keyboard-Selection.md | 70 ++++++++++++++++----------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 68db8480084..3c454859f36 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -65,26 +65,43 @@ Upon mark mode being enabled by a user keybinding (`ToggleMarkMode`), the curren ### Keybindings -By default, the following keybindings will be set: -| Action | Keychord | `KeyboardSelection(Direction, SelectionExpansionMode)` Parameters | +Thanks to Keybinding Args, there will only be 3 new commands that need to be added: +| Action | Keybinding Args | Description | |--|--|--| -| `MoveSelectionAnchorUp` | `Shift` + `↑` | `Up` , `Cell` -| `MoveSelectionAnchorDown` | `Shift` + `↓` | `Down` , `Cell` -| `MoveSelectionAnchorLeft` | `Shift` + `←` | `Left` , `Cell` -| `MoveSelectionAnchorRight` | `Shift` + `→` | `Right` , `Cell` -| `MoveSelectionAnchorUpOneScreen` | `Shift` + `Page Up` | `Up` , `Viewport` -| `MoveSelectionAnchorDownOneScreen` | `Shift` + `Page Down` | `Down` , `Viewport` -| `MoveSelectionAnchorToLeftMargin` | `Shift` + `Home` | `Left` , `Viewport` -| `MoveSelectionAnchorToRightMargin` | `Shift` + `End` | `Right` , `Viewport` -| `MoveSelectionAnchorUpByWord` | `Ctrl` + `Shift` + `↑` | `Up` , `Word` -| `MoveSelectionAnchorDownByWord` | `Ctrl` + `Shift` + `↓` | `Down` , `Word` -| `MoveSelectionAnchorLeftByWord` | `Ctrl` + `Shift` + `←` | `Left` , `Word` -| `MoveSelectionAnchorRightByWord` | `Ctrl` + `Shift` + `→` | `Right` , `Word` -| `MoveSelectionAnchorToBufferStart` | `Ctrl` + `Shift` + `Home` | N/A -| `MoveSelectionAnchorToBufferEnd` | `Ctrl` + `Shift` + `End` | N/A -| `SelectEntireBuffer` | `Ctrl` + `A` | N/A -| `ToggleMarkMode` | `Ctrl` + `M` | N/A +| `moveSelectionAnchor` | | If a selection exists, moves the last selection anchor. +| | `Enum direction { up, down, left, right}` | The direction the selection will be moved in. | +| | `Enum expansionMode { cell, word, line, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) +| `selectEntireBuffer` | | Select the entire text buffer. +| `toggleMarkMode` | | Enter or exit mark mode. This allows you to create an entire selection using only the keyboard. | +By default, the following keybindings will be set: +```JS +// Cell Selection +{ "command": { "action": "moveSelectionAnchor", "direction": "down" }, "keys": ["shift+down"] }, +{ "command": { "action": "moveSelectionAnchor", "direction": "up" }, "keys": ["shift+up"] }, +{ "command": { "action": "moveSelectionAnchor", "direction": "left" }, "keys": ["shift+left"] }, +{ "command": { "action": "moveSelectionAnchor", "direction": "right" }, "keys": ["shift+right"] }, + +// Word Selection +{ "command": { "action": "moveSelectionAnchor", "direction": "left", "expansionMode": "word" }, "keys": ["ctrl+shift+left"] }, +{ "command": { "action": "moveSelectionAnchor", "direction": "right", "expansionMode": "word" }, "keys": ["ctrl+shift+right"] }, + +// Viewport Selection +{ "command": { "action": "moveSelectionAnchor", "direction": "left", "expansionMode": "viewport" }, "keys": ["shift+home"] }, +{ "command": { "action": "moveSelectionAnchor", "direction": "right", "expansionMode": "viewport" }, "keys": ["shift+end"] }, +{ "command": { "action": "moveSelectionAnchor", "direction": "up", "expansionMode": "viewport" }, "keys": ["ctrl+shift+up"] }, +{ "command": { "action": "moveSelectionAnchor", "direction": "down", "expansionMode": "viewport" }, "keys": ["ctrl+shift+down"] }, + +// Buffer Corner Selection +{ "command": { "action": "moveSelectionAnchor", "direction": "up", "expansionMode": "buffer" }, "keys": ["ctrl+shift+home"] }, +{ "command": { "action": "moveSelectionAnchor", "direction": "down", "expansionMode": "buffer" }, "keys": ["ctrl+shift+end"] }, + +// Select All +{ "command": "selectEntireBuffer", "keys": ["ctrl+a"] }, + +// Mark Mode +{ "command": "toggleMarkMode", "keys": ["ctrl+m"] }, +``` ## Capabilities @@ -114,22 +131,6 @@ The settings model makes all of these features easy to disable, if the user wish ## Future considerations -### Impact from Keybinding Args -A lot of the introduced keybindings will have a significant impact from the Keybinding Args feature. This will make most of the keybindings collapse to the following format: - -```JS -{ - "command": "MoveSelectionAnchor", - "keybinding": "Shift + Up", - "args": { - "direction": "Up", - "expansionMode": "Cell" - } -} -``` - -The introduced `enum direction` and `enum expansionMode` args should be able to handle all of the `MoveSelectionAnchor...` commands. - ### Expanding Mark Mode functionality This spec currently limits mark mode functionality to the following: - only move by cell (no other expansion modes) @@ -140,4 +141,3 @@ In addition to the `enum direction` and `enum expansionMode` args introduced abo ## Resources - https://blogs.windows.com/windowsdeveloper/2014/10/07/console-improvements-in-the-windows-10-technical-preview/ -- From 4f38557626f3bf084c5dc2b4fc6ee956a21f6de4 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Fri, 22 Nov 2019 11:21:00 -0800 Subject: [PATCH 04/24] include 'shift' in keybindings --- doc/specs/Keyboard-Selection.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 3c454859f36..b577341bc2b 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -97,10 +97,10 @@ By default, the following keybindings will be set: { "command": { "action": "moveSelectionAnchor", "direction": "down", "expansionMode": "buffer" }, "keys": ["ctrl+shift+end"] }, // Select All -{ "command": "selectEntireBuffer", "keys": ["ctrl+a"] }, +{ "command": "selectEntireBuffer", "keys": ["ctrl+shift+a"] }, // Mark Mode -{ "command": "toggleMarkMode", "keys": ["ctrl+m"] }, +{ "command": "toggleMarkMode", "keys": ["ctrl+shift+m"] }, ``` ## Capabilities @@ -127,7 +127,7 @@ N/A ## Potential Issues -The settings model makes all of these features easy to disable, if the user wishes to do so. So, no. +The settings model makes all of these features easy to disable, if the user wishes to do so. ## Future considerations From de95782692a8fe6e0e30118046cd67613cbed047 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 26 Nov 2019 19:04:57 -0800 Subject: [PATCH 05/24] more mark mode details. Added responses to PR feedback into the spec --- doc/specs/Keyboard-Selection.md | 40 ++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index b577341bc2b..1f17161b019 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -13,9 +13,7 @@ This spec describes a new set of keybindings that allows the user to create and ## Inspiration -ConHost allows the user to edit an existing selection using the keyboard. Holding `Shift` allows the user to move the second selection anchor in accordance with the arrow keys. The selection anchor updates by one cell per key event, allowing the user to refine the selected region. However, mouse selection seems to be superior in that it provides access to the following special selection modes: -- Double Click: word selection -- Triple Click: line selection +ConHost allows the user to edit an existing selection using the keyboard. Holding `Shift` allows the user to move the second selection anchor in accordance with the arrow keys. The selection anchor updates by one cell per key event, allowing the user to refine the selected region. Mark mode allows the users to update the selection anchors sequentially, and create a block selection. @@ -33,6 +31,11 @@ The fundamental solution design for keyboard selection is that the responsibilit Conditionally effective keybindings can be introduced to update the selection accordingly. A well known conditionally effective keybinding is the `Copy` action where text is copied if a selection is active, otherwise the key event is marked as `handled = false`. See "UI/UX Design" --> "Keybindings" for more information regarding keybindings. +#### Idea: Make keyboard selection a simulation of mouse selection +It may seem that some effort can be saved by making the keyboard selection act as a simulation of mouse selection. There is a union of mouse and keyboard activity that can be represented in a single set of selection motion interfaces that are commanded by the TermControl's Mouse/Keyboard handler and adapted into appropriate motions in the Terminal Core. + +However, the mouse handler operates by translating a pixel coordinate on the screen to a text buffer coordinate. This would have to be rewritten and the approach was deemed unworthy. + ### Fundamental Terminal Core Changes The Terminal Core will need to expose a `KeyboardSelection()` function that is called by the keybinding handler. The following parameters will need to be passed in: @@ -58,14 +61,40 @@ Every combination of the `Direction` and `SelectionExpansionMode` will map to a **NOTE**: If `copyOnSelect` is enabled, we need to make sure we update the clipboard on every change in selection. ### Mark Mode -Upon mark mode being enabled by a user keybinding (`ToggleMarkMode`), the current cursor position becomes the selection anchor. The arrow keys move the selection anchor by cell. Using the arrow keys while holding `Shift` moves the second selection anchor by cell. Additionally, using the arrow keys while holding `Ctrl` and `Shift` moves the second selection anchor by word. This allows the user to make a selection of their choice. The user can exit mark mode by using the `ToggleMarkMode` keybinding. +Mark Mode is a mode where the user can create more complete and complex selections using only the keyboard. It can be cycled int an enabled/disabled state through a user keybinding (`toggleMarkMode`). + +Upon being enabled, the current cursor position becomes the selection anchor. The user can move the selection anchor using the same keybindings defined for keyboard selection (`moveSelectionAnchor` action). + +#### `toggleMarkMode` +`toggleMarkMode` has two keybinding arguments: +| Parameter | Accepted Values | Default Value | Description | +|--|--|--|--| +| `anchorKeybinding` | regular keybindings and plain modifier keys | `Shift` | The keybinding used to anchor the selection anchor to it's current text buffer position. While holding down that keybinding, any `moveSelectionAnchor` actions will move the other selection anchor (`endSelectionPosition`). | +| `anchorMode` | `Hold`, `Toggle` | `Hold` | If `Hold`, the user needs to hold the `anchorKeybinding` keybinding to move the second selection anchor. If `Toggle`, the user switches between selection anchors when they press it. | + +#### Rendering during Mark Mode +Since we are just moving the selection anchors, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection anchor past the top of bottom of the viewport. + +In ConHost, output would be paused when a selection was present. This is a completely separate issue that is being tracked in (#2529)[https://github.com/microsoft/terminal/pull/2529]. + +#### Exiting Mark Mode +There are multiple ways to exit mark mode. The user can press... +- the `toggleMarkMode` keybinding +- the `ESC` key +- the `copy` keybinding (which also copies the contents of the selection to the user's clipboard) + + + + ## UI/UX Design ### Keybindings -Thanks to Keybinding Args, there will only be 3 new commands that need to be added: +Thanks to Keybinding Args, there will only be 4 new commands that need to be added: | Action | Keybinding Args | Description | |--|--|--| | `moveSelectionAnchor` | | If a selection exists, moves the last selection anchor. @@ -73,6 +102,7 @@ Thanks to Keybinding Args, there will only be 3 new commands that need to be add | | `Enum expansionMode { cell, word, line, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) | `selectEntireBuffer` | | Select the entire text buffer. | `toggleMarkMode` | | Enter or exit mark mode. This allows you to create an entire selection using only the keyboard. | +| `holdSelectionAnchor` | | Enter or exit mark mode. This allows you to create an entire selection using only the keyboard. | By default, the following keybindings will be set: ```JS From 23b425eaae2b259cedaf6c5139ceb2bfdf939a95 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 7 May 2020 22:04:45 -0700 Subject: [PATCH 06/24] remove mark mode for separate PR (easier discussion) --- doc/specs/Keyboard-Selection.md | 83 ++++++++++----------------------- 1 file changed, 24 insertions(+), 59 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 1f17161b019..659bd6ebfbf 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -1,7 +1,7 @@ --- -author: Carlos Zamora @cazamor +author: Carlos Zamora @carlos-zamora created on: 2019-08-30 -last updated: 2019-09-21 +last updated: 2020-05-7 issue id: #715 --- @@ -13,15 +13,16 @@ This spec describes a new set of keybindings that allows the user to create and ## Inspiration -ConHost allows the user to edit an existing selection using the keyboard. Holding `Shift` allows the user to move the second selection anchor in accordance with the arrow keys. The selection anchor updates by one cell per key event, allowing the user to refine the selected region. +ConHost allows the user to modify a selection using the keyboard. Holding `Shift` allows the user to move the second selection endpoint in accordance with the arrow keys. The selection anchor updates by one cell per key event, allowing the user to refine the selected region. -Mark mode allows the users to update the selection anchors sequentially, and create a block selection. +Mark mode allows the user to create a selection using only the keyboard. Then edit it as mentioned above. ## Solution Design The fundamental solution design for keyboard selection is that the responsibilities between the Terminal Control and Terminal Core must be very distinct. The Terminal Control is responsible for handling user interaction and directing the Terminal Core to update the selection. The Terminal Core will need to update the selection according to the preferences of the Terminal Control. + ### Fundamental Terminal Control Changes `TermControl::_KeyDownHandler()` is responsible for interpretting the key events. At the time of writing this spec, there are 3 cases handled in this order: @@ -36,11 +37,12 @@ It may seem that some effort can be saved by making the keyboard selection act a However, the mouse handler operates by translating a pixel coordinate on the screen to a text buffer coordinate. This would have to be rewritten and the approach was deemed unworthy. + ### Fundamental Terminal Core Changes -The Terminal Core will need to expose a `KeyboardSelection()` function that is called by the keybinding handler. The following parameters will need to be passed in: +The Terminal Core will need to expose a `MoveSelectionEndpoint()` function that is called by the keybinding handler. The following parameters will need to be passed in: - `enum Direction`: the direction that the selection anchor will attempt to move to. Possible values include `Up`, `Down`, `Left`, and `Right`. -- `enum SelectionExpansionMode`: the selection expansion mode that the selection anchor will adhere to. Possible values include `Cell`, `Word`, and `Viewport`. +- `enum SelectionExpansionMode`: the selection expansion mode that the selection anchor will adhere to. Possible values include `Cell`, `Word`, `Viewport`, `Buffer`. For `SelectionExpansionMode = Cell`, the selection anchor will be updated according to the buffer's output pattern. For **horizontal movements**, the selection anchor will attempt to move left or right. If a viewport boundary is hit, the anchor will wrap appropriately (i.e.: hitting the left boundary moves it to the last cell of the line above it). @@ -60,35 +62,6 @@ Every combination of the `Direction` and `SelectionExpansionMode` will map to a **NOTE**: If `copyOnSelect` is enabled, we need to make sure we update the clipboard on every change in selection. -### Mark Mode -Mark Mode is a mode where the user can create more complete and complex selections using only the keyboard. It can be cycled int an enabled/disabled state through a user keybinding (`toggleMarkMode`). - -Upon being enabled, the current cursor position becomes the selection anchor. The user can move the selection anchor using the same keybindings defined for keyboard selection (`moveSelectionAnchor` action). - -#### `toggleMarkMode` -`toggleMarkMode` has two keybinding arguments: -| Parameter | Accepted Values | Default Value | Description | -|--|--|--|--| -| `anchorKeybinding` | regular keybindings and plain modifier keys | `Shift` | The keybinding used to anchor the selection anchor to it's current text buffer position. While holding down that keybinding, any `moveSelectionAnchor` actions will move the other selection anchor (`endSelectionPosition`). | -| `anchorMode` | `Hold`, `Toggle` | `Hold` | If `Hold`, the user needs to hold the `anchorKeybinding` keybinding to move the second selection anchor. If `Toggle`, the user switches between selection anchors when they press it. | - -#### Rendering during Mark Mode -Since we are just moving the selection anchors, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection anchor past the top of bottom of the viewport. - -In ConHost, output would be paused when a selection was present. This is a completely separate issue that is being tracked in (#2529)[https://github.com/microsoft/terminal/pull/2529]. - -#### Exiting Mark Mode -There are multiple ways to exit mark mode. The user can press... -- the `toggleMarkMode` keybinding -- the `ESC` key -- the `copy` keybinding (which also copies the contents of the selection to the user's clipboard) - - - - - ## UI/UX Design @@ -97,47 +70,43 @@ There are multiple ways to exit mark mode. The user can press... Thanks to Keybinding Args, there will only be 4 new commands that need to be added: | Action | Keybinding Args | Description | |--|--|--| -| `moveSelectionAnchor` | | If a selection exists, moves the last selection anchor. +| `moveSelectionPoint` | | If a selection exists, moves the last selection anchor. | | `Enum direction { up, down, left, right}` | The direction the selection will be moved in. | | | `Enum expansionMode { cell, word, line, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) | `selectEntireBuffer` | | Select the entire text buffer. -| `toggleMarkMode` | | Enter or exit mark mode. This allows you to create an entire selection using only the keyboard. | -| `holdSelectionAnchor` | | Enter or exit mark mode. This allows you to create an entire selection using only the keyboard. | + By default, the following keybindings will be set: ```JS // Cell Selection -{ "command": { "action": "moveSelectionAnchor", "direction": "down" }, "keys": ["shift+down"] }, -{ "command": { "action": "moveSelectionAnchor", "direction": "up" }, "keys": ["shift+up"] }, -{ "command": { "action": "moveSelectionAnchor", "direction": "left" }, "keys": ["shift+left"] }, -{ "command": { "action": "moveSelectionAnchor", "direction": "right" }, "keys": ["shift+right"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "down" }, "keys": ["shift+down"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "up" }, "keys": ["shift+up"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "left" }, "keys": ["shift+left"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "right" }, "keys": ["shift+right"] }, // Word Selection -{ "command": { "action": "moveSelectionAnchor", "direction": "left", "expansionMode": "word" }, "keys": ["ctrl+shift+left"] }, -{ "command": { "action": "moveSelectionAnchor", "direction": "right", "expansionMode": "word" }, "keys": ["ctrl+shift+right"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "left", "expansionMode": "word" }, "keys": ["ctrl+shift+left"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "right", "expansionMode": "word" }, "keys": ["ctrl+shift+right"] }, // Viewport Selection -{ "command": { "action": "moveSelectionAnchor", "direction": "left", "expansionMode": "viewport" }, "keys": ["shift+home"] }, -{ "command": { "action": "moveSelectionAnchor", "direction": "right", "expansionMode": "viewport" }, "keys": ["shift+end"] }, -{ "command": { "action": "moveSelectionAnchor", "direction": "up", "expansionMode": "viewport" }, "keys": ["ctrl+shift+up"] }, -{ "command": { "action": "moveSelectionAnchor", "direction": "down", "expansionMode": "viewport" }, "keys": ["ctrl+shift+down"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "left", "expansionMode": "viewport" }, "keys": ["shift+home"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "right", "expansionMode": "viewport" }, "keys": ["shift+end"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "up", "expansionMode": "viewport" }, "keys": ["ctrl+shift+up"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "down", "expansionMode": "viewport" }, "keys": ["ctrl+shift+down"] }, // Buffer Corner Selection -{ "command": { "action": "moveSelectionAnchor", "direction": "up", "expansionMode": "buffer" }, "keys": ["ctrl+shift+home"] }, -{ "command": { "action": "moveSelectionAnchor", "direction": "down", "expansionMode": "buffer" }, "keys": ["ctrl+shift+end"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "up", "expansionMode": "buffer" }, "keys": ["ctrl+shift+home"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "down", "expansionMode": "buffer" }, "keys": ["ctrl+shift+end"] }, // Select All { "command": "selectEntireBuffer", "keys": ["ctrl+shift+a"] }, - -// Mark Mode -{ "command": "toggleMarkMode", "keys": ["ctrl+shift+m"] }, ``` ## Capabilities ### Accessibility -Being able to create and update a selection without the use of a mouse is a very important feature to users with disabilities. The UI Automation system (particularly with the use of the signaling model), should be aware that a new selection exists. Thus, the bounding rects should be updated and the associated text regions should be reread appropriately. +Using the keyboard is generally a more accessible experience than using the mouse. Being able to modify a selection by using the keyboard is a good first step towards making selecting text more accessible. ### Security @@ -161,11 +130,7 @@ The settings model makes all of these features easy to disable, if the user wish ## Future considerations -### Expanding Mark Mode functionality -This spec currently limits mark mode functionality to the following: -- only move by cell (no other expansion modes) -- no rebinding arrow keys allowed -In addition to the `enum direction` and `enum expansionMode` args introduced above, a `bool markMode` arg can be added. If set to `true`, the selection anchor will adjust to these commands when in mark mode. This will allow the selection anchor to be able to be adjusted by different expansion modes. +This functionality will be expanded to create a feature similar to Mark Mode. This will allow a user to create a selection using only the keyboard. ## Resources From f71275c8c015907224d862366fe08a92b2870996 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Fri, 8 May 2020 10:50:20 -0700 Subject: [PATCH 07/24] PR changes --- .github/actions/spell-check/expect/expect.txt | 3 +++ doc/specs/Keyboard-Selection.md | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/actions/spell-check/expect/expect.txt b/.github/actions/spell-check/expect/expect.txt index 32d4bc08b06..ecf4fd4cd58 100644 --- a/.github/actions/spell-check/expect/expect.txt +++ b/.github/actions/spell-check/expect/expect.txt @@ -203,6 +203,8 @@ CARETBLINKINGENABLED CARRIAGERETURN cascadia catid +carlos +zamora cazamor CBash cbegin @@ -2642,6 +2644,7 @@ WINDOWPOSCHANGING windowproc windowrect windowsapp +windowsdeveloper windowsinternalstring WINDOWSIZE windowsx diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 659bd6ebfbf..37953770038 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -15,7 +15,7 @@ This spec describes a new set of keybindings that allows the user to create and ConHost allows the user to modify a selection using the keyboard. Holding `Shift` allows the user to move the second selection endpoint in accordance with the arrow keys. The selection anchor updates by one cell per key event, allowing the user to refine the selected region. -Mark mode allows the user to create a selection using only the keyboard. Then edit it as mentioned above. +Mark mode allows the user to create a selection using only the keyboard, then edit it as mentioned above. ## Solution Design @@ -25,7 +25,7 @@ The fundamental solution design for keyboard selection is that the responsibilit ### Fundamental Terminal Control Changes -`TermControl::_KeyDownHandler()` is responsible for interpretting the key events. At the time of writing this spec, there are 3 cases handled in this order: +`TermControl::_KeyDownHandler()` is responsible for interpreting the key events. At the time of writing this spec, there are 3 cases handled in this order: - Alt+Gr events - Keybindings - Send Key Event (also clears selection) @@ -67,7 +67,7 @@ Every combination of the `Direction` and `SelectionExpansionMode` will map to a ### Keybindings -Thanks to Keybinding Args, there will only be 4 new commands that need to be added: +Thanks to Keybinding Args, there will only be 2 new commands that need to be added: | Action | Keybinding Args | Description | |--|--|--| | `moveSelectionPoint` | | If a selection exists, moves the last selection anchor. @@ -116,7 +116,7 @@ N/A With regards to the Terminal Core, the newly introduced code should rely on already existing and tested code. Thus no crash-related bugs are expected. -With regards to Terminal Control and the settings model, crash-related bugs are not expected. However, ensuring that the selection is updated and cleared in general use-case scenarious must be ensured. +With regards to Terminal Control and the settings model, crash-related bugs are not expected. However, ensuring that the selection is updated and cleared in general use-case scenarios must be ensured. ### Compatibility From 3af5ae6b5957b03f50033d3da21d42cbbeb93781 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 23 Jun 2020 16:04:39 -0700 Subject: [PATCH 08/24] update default bindings --- doc/specs/Keyboard-Selection.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 37953770038..8906656157b 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -1,8 +1,8 @@ --- author: Carlos Zamora @carlos-zamora created on: 2019-08-30 -last updated: 2020-05-7 -issue id: #715 +last updated: 2020-06-23 +issue id: 715 --- # Keyboard Selection @@ -72,34 +72,34 @@ Thanks to Keybinding Args, there will only be 2 new commands that need to be add |--|--|--| | `moveSelectionPoint` | | If a selection exists, moves the last selection anchor. | | `Enum direction { up, down, left, right}` | The direction the selection will be moved in. | -| | `Enum expansionMode { cell, word, line, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) +| | `Enum expansionMode { cell, word, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) | `selectEntireBuffer` | | Select the entire text buffer. By default, the following keybindings will be set: ```JS // Cell Selection -{ "command": { "action": "moveSelectionPoint", "direction": "down" }, "keys": ["shift+down"] }, -{ "command": { "action": "moveSelectionPoint", "direction": "up" }, "keys": ["shift+up"] }, -{ "command": { "action": "moveSelectionPoint", "direction": "left" }, "keys": ["shift+left"] }, -{ "command": { "action": "moveSelectionPoint", "direction": "right" }, "keys": ["shift+right"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "down" }, "keys": "shift+down" }, +{ "command": { "action": "moveSelectionPoint", "direction": "up" }, "keys": "shift+up" }, +{ "command": { "action": "moveSelectionPoint", "direction": "left" }, "keys": "shift+left" }, +{ "command": { "action": "moveSelectionPoint", "direction": "right" }, "keys": "shift+right" }, // Word Selection -{ "command": { "action": "moveSelectionPoint", "direction": "left", "expansionMode": "word" }, "keys": ["ctrl+shift+left"] }, -{ "command": { "action": "moveSelectionPoint", "direction": "right", "expansionMode": "word" }, "keys": ["ctrl+shift+right"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "left", "expansionMode": "word" }, "keys": "ctrl+shift+left" }, +{ "command": { "action": "moveSelectionPoint", "direction": "right", "expansionMode": "word" }, "keys": "ctrl+shift+right" }, // Viewport Selection -{ "command": { "action": "moveSelectionPoint", "direction": "left", "expansionMode": "viewport" }, "keys": ["shift+home"] }, -{ "command": { "action": "moveSelectionPoint", "direction": "right", "expansionMode": "viewport" }, "keys": ["shift+end"] }, -{ "command": { "action": "moveSelectionPoint", "direction": "up", "expansionMode": "viewport" }, "keys": ["ctrl+shift+up"] }, -{ "command": { "action": "moveSelectionPoint", "direction": "down", "expansionMode": "viewport" }, "keys": ["ctrl+shift+down"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "left", "expansionMode": "viewport" }, "keys": "shift+home" }, +{ "command": { "action": "moveSelectionPoint", "direction": "right", "expansionMode": "viewport" }, "keys": "shift+end" }, +{ "command": { "action": "moveSelectionPoint", "direction": "up", "expansionMode": "viewport" }, "keys": "shift+pgup" }, +{ "command": { "action": "moveSelectionPoint", "direction": "down", "expansionMode": "viewport" }, "keys": "shift+pgdn" }, // Buffer Corner Selection -{ "command": { "action": "moveSelectionPoint", "direction": "up", "expansionMode": "buffer" }, "keys": ["ctrl+shift+home"] }, -{ "command": { "action": "moveSelectionPoint", "direction": "down", "expansionMode": "buffer" }, "keys": ["ctrl+shift+end"] }, +{ "command": { "action": "moveSelectionPoint", "direction": "up", "expansionMode": "buffer" }, "keys": "ctrl+shift+home" }, +{ "command": { "action": "moveSelectionPoint", "direction": "down", "expansionMode": "buffer" }, "keys": "ctrl+shift+end" }, // Select All -{ "command": "selectEntireBuffer", "keys": ["ctrl+shift+a"] }, +{ "command": "selectEntireBuffer", "keys": "ctrl+shift+a" }, ``` ## Capabilities From 29b00b973e79b8fbdcf55795f721da6ad41de37d Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 7 May 2020 23:01:45 -0700 Subject: [PATCH 09/24] Introduce Mark Mode Spec (add-on) --- doc/specs/Keyboard-Selection.md | 48 +++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 8906656157b..bc6b91b5ac5 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -15,7 +15,12 @@ This spec describes a new set of keybindings that allows the user to create and ConHost allows the user to modify a selection using the keyboard. Holding `Shift` allows the user to move the second selection endpoint in accordance with the arrow keys. The selection anchor updates by one cell per key event, allowing the user to refine the selected region. -Mark mode allows the user to create a selection using only the keyboard, then edit it as mentioned above. +### Creating a selection +Mark Mode is a ConHost feature that allows the user to create a selection using only the keyboard. In CMD, pressing ctrl+m toggles mark mode. The current cursor position becomes a selection endpoint. The user can use the arrow keys to move that endpoint. While the user then holds shift, the selection endpoint ('start') is anchored to it's current position, and the arrow keys move the other selection endpoint ('end'). After a selection is made, the user can copy the selected text. + +Other terminal emulators have different approaches to this feature. iTerm2, for example, has Copy Mode (documentation [linked here](https://iterm2.com/documentation-copymode.html)). Here, cmd+shift+c makes the current cursor position become a selection endpoint. The arrow keys can be used to move that endpoint. However, unlike Mark Mode, a keybinding c+space is used to change the start/stop selecting. The first time it's pressed, the 'start' endpoint is anchored. The second time it's pressed, the 'end' endpoint is set. After this, you can still move a cursor, but the selection persists until a new selection is created (either by pressing the keybinding again, or using the mouse). + +Though tmux is not a terminal emulator, it does also have Copy Mode that behaves fairly similarly to that of iTerm2's. ## Solution Design @@ -63,6 +68,39 @@ Every combination of the `Direction` and `SelectionExpansionMode` will map to a **NOTE**: If `copyOnSelect` is enabled, we need to make sure we update the clipboard on every change in selection. + +### Mark Mode +Mark Mode is a mode where the user can begin a selection using only the keyboard. It can be cycled into an enabled/disabled state through a user keybinding (`toggleMarkMode`). + +Upon being enabled, the current cursor position becomes the selection endpoint. The user can move the selection anchor using the same keybindings defined for keyboard selection (`moveSelectionPoint` action). + +#### `toggleMarkMode` +`toggleMarkMode` has two keybinding arguments: +| Parameter | Accepted Values | Default Value | Description | +|--|--|--|--| +| `anchorModifier` | regular keybindings and plain modifier keys | `Shift` | The keybinding used to anchor the selection endpoint to it's current text buffer position. While holding down that keybinding, any `moveSelectionPoint` actions will move the other selection anchor (`endSelectionPosition`). | +| `anchorMode` | `Hold`, `Toggle` | `Hold` | If `Hold`, the user needs to hold the `anchorModifier` key to anchor the 'start' selection endpoint and move the second selection endpoint (like Mark Mode). If `Toggle`, the user switches between selection endpoints when they press it (like Copy Mode). | + +#### Rendering during Mark Mode +Since we are just moving the selection anchors, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection anchor past the top/bottom of the viewport. + +In ConHost, output would be paused when a selection was present. This is a completely separate issue that is being tracked in (#2529)[https://github.com/microsoft/terminal/pull/2529]. + +#### Interaction with CopyOnSelect +If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". If `anchorMode=Hold`, the user has to use the `copy` keybinding to signify that they have finished creating a selection. If `anchorMode=Toggle`, the selection is copied either when the `copy` keybinding is used, or when the user presses the `anchorModifier` key and the 'end' endpoint is set. + +#### Exiting Mark Mode +There are multiple ways to exit mark mode. The user can press... +- the `toggleMarkMode` keybinding +- the `ESC` key +- the `copy` keybinding (which also copies the contents of the selection to the user's clipboard) + + + + + + + ## UI/UX Design ### Keybindings @@ -74,6 +112,7 @@ Thanks to Keybinding Args, there will only be 2 new commands that need to be add | | `Enum direction { up, down, left, right}` | The direction the selection will be moved in. | | | `Enum expansionMode { cell, word, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) | `selectEntireBuffer` | | Select the entire text buffer. +| `toggleMarkMode` | | Enter or exit mark mode. This allows you to create an entire selection using only the keyboard. | By default, the following keybindings will be set: @@ -100,6 +139,9 @@ By default, the following keybindings will be set: // Select All { "command": "selectEntireBuffer", "keys": "ctrl+shift+a" }, + +// Mark Mode +{ "command": { "action": "toggleMarkMode", "anchorModifier": "shift", "anchorMode": "toggle" }, "keys": "ctrl+shift+m" }, ``` ## Capabilities @@ -108,6 +150,8 @@ By default, the following keybindings will be set: Using the keyboard is generally a more accessible experience than using the mouse. Being able to modify a selection by using the keyboard is a good first step towards making selecting text more accessible. +Being able to create and update a selection without the use of a mouse is a very important feature to users with disabilities. The UI Automation system is already set up to detect changes to the active selection, so as long as the UiaRenderer is notified of changes to the selection, this experience should be accessible. + ### Security N/A @@ -130,7 +174,7 @@ The settings model makes all of these features easy to disable, if the user wish ## Future considerations -This functionality will be expanded to create a feature similar to Mark Mode. This will allow a user to create a selection using only the keyboard. +None ## Resources From f23c033798519234ee30b6c53eba9333a327e592 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Wed, 13 May 2020 14:10:27 -0700 Subject: [PATCH 10/24] add mouse interaction + corner cases --- .github/actions/spell-check/expect/expect.txt | 1 + doc/specs/Keyboard-Selection.md | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/actions/spell-check/expect/expect.txt b/.github/actions/spell-check/expect/expect.txt index ecf4fd4cd58..7fe9b08c3e8 100644 --- a/.github/actions/spell-check/expect/expect.txt +++ b/.github/actions/spell-check/expect/expect.txt @@ -378,6 +378,7 @@ conwinuserrefs coord coordnew COPYCOLOR +copymode CORESYSTEM cotaskmem countof diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index bc6b91b5ac5..45b9b88c34b 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -78,7 +78,7 @@ Upon being enabled, the current cursor position becomes the selection endpoint. `toggleMarkMode` has two keybinding arguments: | Parameter | Accepted Values | Default Value | Description | |--|--|--|--| -| `anchorModifier` | regular keybindings and plain modifier keys | `Shift` | The keybinding used to anchor the selection endpoint to it's current text buffer position. While holding down that keybinding, any `moveSelectionPoint` actions will move the other selection anchor (`endSelectionPosition`). | +| `anchorModifier` | regular keybindings and plain modifier keys | `Shift` | The keybinding used to anchor the selection endpoint to its current text buffer position. While holding down that keybinding, any `moveSelectionPoint` actions will move the other selection anchor (`endSelectionPosition`). | | `anchorMode` | `Hold`, `Toggle` | `Hold` | If `Hold`, the user needs to hold the `anchorModifier` key to anchor the 'start' selection endpoint and move the second selection endpoint (like Mark Mode). If `Toggle`, the user switches between selection endpoints when they press it (like Copy Mode). | #### Rendering during Mark Mode @@ -89,13 +89,22 @@ In ConHost, output would be paused when a selection was present. This is a compl #### Interaction with CopyOnSelect If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". If `anchorMode=Hold`, the user has to use the `copy` keybinding to signify that they have finished creating a selection. If `anchorMode=Toggle`, the selection is copied either when the `copy` keybinding is used, or when the user presses the `anchorModifier` key and the 'end' endpoint is set. +#### Mouse Interaction and Mark Mode +If a selection exists prior to entering Mark Mode, upon entering Mark Mode, the user should be modifying the "end" endpoint of the selection, instead of the cursor. The existing selection should not be cleared (contrary to prior behavior). + +During Mark Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Mark Mode. The target endpoint being modified in Mark Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier). + + #### Exiting Mark Mode There are multiple ways to exit mark mode. The user can press... - the `toggleMarkMode` keybinding - the `ESC` key - the `copy` keybinding (which also copies the contents of the selection to the user's clipboard) +In all three cases, the selection will be cleared. +NOTE - Related to #3884: + If the user has chosen to have selections persist after a copy operation, the selection created by Mark Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. From 8e1cebd41ba37b0f27e7b5878bf1e2d098883a1c Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Wed, 13 May 2020 14:47:17 -0700 Subject: [PATCH 11/24] whoops. Forgot to save haha --- doc/specs/Keyboard-Selection.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 45b9b88c34b..47feb4461c7 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -89,7 +89,7 @@ In ConHost, output would be paused when a selection was present. This is a compl #### Interaction with CopyOnSelect If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". If `anchorMode=Hold`, the user has to use the `copy` keybinding to signify that they have finished creating a selection. If `anchorMode=Toggle`, the selection is copied either when the `copy` keybinding is used, or when the user presses the `anchorModifier` key and the 'end' endpoint is set. -#### Mouse Interaction and Mark Mode +#### Interaction with Mouse Selection If a selection exists prior to entering Mark Mode, upon entering Mark Mode, the user should be modifying the "end" endpoint of the selection, instead of the cursor. The existing selection should not be cleared (contrary to prior behavior). During Mark Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Mark Mode. The target endpoint being modified in Mark Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier). @@ -103,8 +103,10 @@ There are multiple ways to exit mark mode. The user can press... In all three cases, the selection will be cleared. +If `copyOnSelect` is enabled, `ESC` is interpreted as "cancelling" the selection, so nothing is copied. Whereas the other two operations count as "completing" the selection, and copying the content to the clipboard. + NOTE - Related to #3884: - If the user has chosen to have selections persist after a copy operation, the selection created by Mark Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. + If the user has chosen to have selections persist after a copy operation, the selection created by Mark Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. However, if the user exits Mark Mode in any of the other situations, the selection is cleared. From dd0720e9198eb842b4e8557f3442c9c35d8deaaa Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Wed, 27 May 2020 17:00:13 -0700 Subject: [PATCH 12/24] remove 'hold' mode --- doc/specs/Keyboard-Selection.md | 46 +++++++++++++++++++------------- doc/specs/MarkModeFlowchart.jpg | Bin 0 -> 18300 bytes 2 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 doc/specs/MarkModeFlowchart.jpg diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 47feb4461c7..a204e482d95 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -70,40 +70,48 @@ Every combination of the `Direction` and `SelectionExpansionMode` will map to a ### Mark Mode -Mark Mode is a mode where the user can begin a selection using only the keyboard. It can be cycled into an enabled/disabled state through a user keybinding (`toggleMarkMode`). +Mark Mode is a mode where the user can create and modify a selection using only the keyboard. The following flowchart covers how the new `markMode` keybinding works: -Upon being enabled, the current cursor position becomes the selection endpoint. The user can move the selection anchor using the same keybindings defined for keyboard selection (`moveSelectionPoint` action). +![Mark Mode Flowchart][MarkModeFlowchart.jpg] -#### `toggleMarkMode` -`toggleMarkMode` has two keybinding arguments: -| Parameter | Accepted Values | Default Value | Description | -|--|--|--|--| -| `anchorModifier` | regular keybindings and plain modifier keys | `Shift` | The keybinding used to anchor the selection endpoint to its current text buffer position. While holding down that keybinding, any `moveSelectionPoint` actions will move the other selection anchor (`endSelectionPosition`). | -| `anchorMode` | `Hold`, `Toggle` | `Hold` | If `Hold`, the user needs to hold the `anchorModifier` key to anchor the 'start' selection endpoint and move the second selection endpoint (like Mark Mode). If `Toggle`, the user switches between selection endpoints when they press it (like Copy Mode). | +If a selection is not active, a "start" selection point is created at the cursor position. `moveSelectionPoint` calls then move "start". + +If a selection is active, `markMode` leaves the selection untouched, all subsequent `moveSelectionPoint` calls move "start". + +Pressing `markMode` again, will then anchor "start". Subsequent `moveSelectionPoint` calls move the "end" selection point. + +Pressing `markMode` essentially cycles between which selection point is targetted. + +#### Block Selection +A user can normally create a block selection by holding alt then creating a selection. + +If the user is in Mark Mode, and desires to make a block selection, they can use the `toggleBlockSelection` keybinding. `toggleBlockSelection` takes an existing selection, and transforms it into a block selection. + +All selections created in Mark Mode will have block selection disabled by default. #### Rendering during Mark Mode -Since we are just moving the selection anchors, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection anchor past the top/bottom of the viewport. +Since we are just moving the selection points, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection point past the top/bottom of the viewport. In ConHost, output would be paused when a selection was present. This is a completely separate issue that is being tracked in (#2529)[https://github.com/microsoft/terminal/pull/2529]. #### Interaction with CopyOnSelect -If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". If `anchorMode=Hold`, the user has to use the `copy` keybinding to signify that they have finished creating a selection. If `anchorMode=Toggle`, the selection is copied either when the `copy` keybinding is used, or when the user presses the `anchorModifier` key and the 'end' endpoint is set. +If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". Thus, the selection is copied when the `copy` keybinding is used or the selection is copied using the mouse. #### Interaction with Mouse Selection -If a selection exists prior to entering Mark Mode, upon entering Mark Mode, the user should be modifying the "end" endpoint of the selection, instead of the cursor. The existing selection should not be cleared (contrary to prior behavior). +If a selection exists, the user is already in Mark Mode. The user should be modifying the "end" endpoint of the selection. The existing selection should not be cleared (contrary to prior behavior). -During Mark Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Mark Mode. The target endpoint being modified in Mark Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier). +During Mark Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Mark Mode. The target endpoint being modified in Mark Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier in the flowchart). #### Exiting Mark Mode -There are multiple ways to exit mark mode. The user can press... -- the `toggleMarkMode` keybinding +The user exits mark mode when the selection is cleared. Thus, the user can press... - the `ESC` key - the `copy` keybinding (which also copies the contents of the selection to the user's clipboard) +- keys that generate input and clear a selection -In all three cases, the selection will be cleared. +In all of these cases, the selection will be cleared. -If `copyOnSelect` is enabled, `ESC` is interpreted as "cancelling" the selection, so nothing is copied. Whereas the other two operations count as "completing" the selection, and copying the content to the clipboard. +If `copyOnSelect` is enabled, `ESC` is interpreted as "cancelling" the selection, so nothing is copied. Keys that generate input are also interpreted as "cancelling" the selection. Only the `copy` keybinding or copying using the mouse is considered "completing" the selection operation, and copying the content to the clipboard. NOTE - Related to #3884: If the user has chosen to have selections persist after a copy operation, the selection created by Mark Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. However, if the user exits Mark Mode in any of the other situations, the selection is cleared. @@ -123,7 +131,8 @@ Thanks to Keybinding Args, there will only be 2 new commands that need to be add | | `Enum direction { up, down, left, right}` | The direction the selection will be moved in. | | | `Enum expansionMode { cell, word, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) | `selectEntireBuffer` | | Select the entire text buffer. -| `toggleMarkMode` | | Enter or exit mark mode. This allows you to create an entire selection using only the keyboard. | +| `markMode` | | Cycle the selection point targetted by `moveSelectionPoint`. If no selection exists, a selection is created at the cursor. | +| `toggleBlockSelection` | | Transform the existing selection between a block selection and a line selection. | By default, the following keybindings will be set: @@ -152,7 +161,8 @@ By default, the following keybindings will be set: { "command": "selectEntireBuffer", "keys": "ctrl+shift+a" }, // Mark Mode -{ "command": { "action": "toggleMarkMode", "anchorModifier": "shift", "anchorMode": "toggle" }, "keys": "ctrl+shift+m" }, +{ "command": "markMode", "keys": "ctrl+shift+m" }, +{ "command": "toggleBlockSelection", "keys": "alt+shift+m" }, ``` ## Capabilities diff --git a/doc/specs/MarkModeFlowchart.jpg b/doc/specs/MarkModeFlowchart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a47adbac6a34cb327c28043fa1ab9a58c1cef114 GIT binary patch literal 18300 zcmd^n2UHZ<)@~yx2nwPgnI?VM z5Xm`115Jll&b>3E{?7mIo&UbK-dYb6zGg*_l|bvC`9X zh;m-L&Mzb+1ZEeP788)-6%-Qq_7J?YXV0D^IY)i|JhcEbJ+r{S{e$}mA}2ca6weeN zj|Fs!91ouy57!6+gFtwv0cyVy{Lde}Q}_g@&kz!wB_;s|lwAOw!o$ZuMSy?$GywrH z+86j7L_mJ}A~V12nM)cLge*=J0?#5-iCAwIf1=dv+h!BI=j?Zu_%anW4egby>>Qk2 zLc$`VV&W2Vx8xNRm2N9*Y3u0f=^GeY-nV*SZDVWa;_CL;-NVz%|M`o6z?VV6QPHns zV&mS#C#0okWM*aO#qs=!PQniOl?1w?`lxTtnWx|>@4M~( z>)qW95kHFq zp-6C``BF2qshpg~lda4e(^SN5V=ewi03cdXNdl z0KWSf){}z+edR`nm0&Mh10*f;;6PD*upQyz47BMmPo~b`SHE3)bZ7nt^^ai?_2$YA zOC@Z(s(399B)U;<>vkxzKB;fN>T>9{GhD*yEW0n@`GmMsD68Ov8y2~b4J;b<2vk+s zkTKawrcpl^I;HZHp)H6(AZl$MMYP-w@Ue!dUqjr^!jz?rZ1y~ueo=?Cz`v? z<*`;V`8LyY$~2lk!5=Pv*B`m{=)hy3Nvvaon@=;aVP)Q5!JQ>8Ij` z?HS~`EPAnNx9w`KJo-0=|xDMU;|Qdattq^S`Tp5B8(O_Ez9wW==J zJy)7*kQeeF_H7WoxFE^AKf?<-x~iEjIR8Go%9!nIq? z$>obi;0wnn#>G0<$4<0eIW$C~)o=DeN)hi5AV&&_c~MO6$rhhuJkrN01P3C;R-!!$ z#rH7TvvM(kxKA5|(2Z0b+CO_q1xyX*E?>Vi zh#I*hPn=xAK#v$33^^{}J(w`LTyy!F&h*`KeZ;U(9@Sc8Fe>%Qa!;m*Vgui~j{GA( zX$AdJ1N}n(E~v7Wp4&G-e^T_RD#glNt#YbO@@e|wbOcu>6JRcb05nWk_t6rO3eJiFn;_@&B~=E>oGCAg&} zG;2)W+WM57@O|f4v$GcPi)2*bG?3hXjf!YVG)D6mXgK
  • sRjVU%l4d3z;|W$AQ-R`7j{eP-`3TF0U=@V1)|% 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 gq(k_SOoO!OXuF2Hw Date: Wed, 27 May 2020 17:22:13 -0700 Subject: [PATCH 13/24] better images and structure --- .../Keyboard-Selection.md | 2 +- .../images/MarkModeFlowchart.png | Bin 0 -> 11736 bytes doc/specs/MarkModeFlowchart.jpg | Bin 18300 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) rename doc/specs/{ => #4993 - Keyboard Selection}/Keyboard-Selection.md (98%) create mode 100644 doc/specs/#4993 - Keyboard Selection/images/MarkModeFlowchart.png delete mode 100644 doc/specs/MarkModeFlowchart.jpg diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md similarity index 98% rename from doc/specs/Keyboard-Selection.md rename to doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index a204e482d95..816e3018078 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -72,7 +72,7 @@ Every combination of the `Direction` and `SelectionExpansionMode` will map to a ### Mark Mode Mark Mode is a mode where the user can create and modify a selection using only the keyboard. The following flowchart covers how the new `markMode` keybinding works: -![Mark Mode Flowchart][MarkModeFlowchart.jpg] +![Mark Mode Flowchart][images/MarkModeFlowchart.png] If a selection is not active, a "start" selection point is created at the cursor position. `moveSelectionPoint` calls then move "start". diff --git a/doc/specs/#4993 - Keyboard Selection/images/MarkModeFlowchart.png b/doc/specs/#4993 - Keyboard Selection/images/MarkModeFlowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..836295c68299991dcd9d30a4962bd8235a41d66e GIT binary patch literal 11736 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 S@x<5I0Ci<8rT2?VM z5Xm`115Jll&b>3E{?7mIo&UbK-dYb6zGg*_l|bvC`9X zh;m-L&Mzb+1ZEeP788)-6%-Qq_7J?YXV0D^IY)i|JhcEbJ+r{S{e$}mA}2ca6weeN zj|Fs!91ouy57!6+gFtwv0cyVy{Lde}Q}_g@&kz!wB_;s|lwAOw!o$ZuMSy?$GywrH z+86j7L_mJ}A~V12nM)cLge*=J0?#5-iCAwIf1=dv+h!BI=j?Zu_%anW4egby>>Qk2 zLc$`VV&W2Vx8xNRm2N9*Y3u0f=^GeY-nV*SZDVWa;_CL;-NVz%|M`o6z?VV6QPHns zV&mS#C#0okWM*aO#qs=!PQniOl?1w?`lxTtnWx|>@4M~( z>)qW95kHFq zp-6C``BF2qshpg~lda4e(^SN5V=ewi03cdXNdl z0KWSf){}z+edR`nm0&Mh10*f;;6PD*upQyz47BMmPo~b`SHE3)bZ7nt^^ai?_2$YA zOC@Z(s(399B)U;<>vkxzKB;fN>T>9{GhD*yEW0n@`GmMsD68Ov8y2~b4J;b<2vk+s zkTKawrcpl^I;HZHp)H6(AZl$MMYP-w@Ue!dUqjr^!jz?rZ1y~ueo=?Cz`v? z<*`;V`8LyY$~2lk!5=Pv*B`m{=)hy3Nvvaon@=;aVP)Q5!JQ>8Ij` z?HS~`EPAnNx9w`KJo-0=|xDMU;|Qdattq^S`Tp5B8(O_Ez9wW==J zJy)7*kQeeF_H7WoxFE^AKf?<-x~iEjIR8Go%9!nIq? z$>obi;0wnn#>G0<$4<0eIW$C~)o=DeN)hi5AV&&_c~MO6$rhhuJkrN01P3C;R-!!$ z#rH7TvvM(kxKA5|(2Z0b+CO_q1xyX*E?>Vi zh#I*hPn=xAK#v$33^^{}J(w`LTyy!F&h*`KeZ;U(9@Sc8Fe>%Qa!;m*Vgui~j{GA( zX$AdJ1N}n(E~v7Wp4&G-e^T_RD#glNt#YbO@@e|wbOcu>6JRcb05nWk_t6rO3eJiFn;_@&B~=E>oGCAg&} zG;2)W+WM57@O|f4v$GcPi)2*bG?3hXjf!YVG)D6mXgK
  • sRjVU%l4d3z;|W$AQ-R`7j{eP-`3TF0U=@V1)|% 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 gq(k_SOoO!OXuF2Hw Date: Wed, 27 May 2020 17:25:56 -0700 Subject: [PATCH 14/24] update date and misspelling --- doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index 816e3018078..7f95ccc979a 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -80,7 +80,7 @@ If a selection is active, `markMode` leaves the selection untouched, all subsequ Pressing `markMode` again, will then anchor "start". Subsequent `moveSelectionPoint` calls move the "end" selection point. -Pressing `markMode` essentially cycles between which selection point is targetted. +Pressing `markMode` essentially cycles between which selection point is targeted. #### Block Selection A user can normally create a block selection by holding alt then creating a selection. @@ -131,7 +131,7 @@ Thanks to Keybinding Args, there will only be 2 new commands that need to be add | | `Enum direction { up, down, left, right}` | The direction the selection will be moved in. | | | `Enum expansionMode { cell, word, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) | `selectEntireBuffer` | | Select the entire text buffer. -| `markMode` | | Cycle the selection point targetted by `moveSelectionPoint`. If no selection exists, a selection is created at the cursor. | +| `markMode` | | Cycle the selection point targeted by `moveSelectionPoint`. If no selection exists, a selection is created at the cursor. | | `toggleBlockSelection` | | Transform the existing selection between a block selection and a line selection. | From db0e1d359c2cd8765e007c06a154bdb695958568 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Fri, 26 Jun 2020 15:52:37 -0700 Subject: [PATCH 15/24] update with meeting results --- doc/specs/Keyboard-Selection.md | 50 +++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md index 8906656157b..acdf5508028 100644 --- a/doc/specs/Keyboard-Selection.md +++ b/doc/specs/Keyboard-Selection.md @@ -1,7 +1,7 @@ --- author: Carlos Zamora @carlos-zamora created on: 2019-08-30 -last updated: 2020-06-23 +last updated: 2020-06-26 issue id: 715 --- @@ -44,17 +44,25 @@ The Terminal Core will need to expose a `MoveSelectionEndpoint()` function that - `enum Direction`: the direction that the selection anchor will attempt to move to. Possible values include `Up`, `Down`, `Left`, and `Right`. - `enum SelectionExpansionMode`: the selection expansion mode that the selection anchor will adhere to. Possible values include `Cell`, `Word`, `Viewport`, `Buffer`. +#### Moving by Cell For `SelectionExpansionMode = Cell`, the selection anchor will be updated according to the buffer's output pattern. For **horizontal movements**, the selection anchor will attempt to move left or right. If a viewport boundary is hit, the anchor will wrap appropriately (i.e.: hitting the left boundary moves it to the last cell of the line above it). For **vertical movements**, the selection anchor will attempt to move up or down. If a **viewport boundary** is hit and there is a scroll buffer, the anchor will move and scroll accordingly by a line. If a **buffer boundary** is hit, the anchor will not move. In this case, however, the event will still be considered handled. -For `SelectionExpansionMode = Word`, the selection anchor will also be updated according to the buffer's output pattern, as above. However, the selection will be updated in accordance with "chunk selection" (performing a double-click and dragging the mouse to expand the selection). For **horizontal movements**, the selection anchor will be updated according to the `_ExpandDoubleClickSelection` functions. The result must be saved to the anchor. As before, if a boundary is hit, the anchor will wrap appropriately. +**NOTE**: An important thing to handle properly in all cases is wide glyphs. The user should not be allowed to select a portion of a wide glyph; it should be all or none of it. When calling `_ExpandWideGlyphSelection` functions, the result must be saved to the anchor. + +#### Moving by Word +For `SelectionExpansionMode = Word`, the selection anchor will also be updated according to the buffer's output pattern, as above. However, the selection will be updated in accordance with "chunk selection" (performing a double-click and dragging the mouse to expand the selection). For **horizontal movements**, the selection anchor will be updated according to the `_ExpandDoubleClickSelection` functions. The result must be saved to the anchor. As before, if a boundary is hit, the anchor will wrap appropriately. See [Future Considerations](#FutureConsiderations) for how this will interact with line wrapping. For **vertical movements**, the movement is a little more complicated than before. The selection will still respond to buffer and viewport boundaries as before. If the user is trying to move up, the selection anchor will attempt to move up by one line, then selection will be expanded leftwards. Alternatively, if the user is trying to move down, the selection anchor will attempt to move down by one line, then the selection will be expanded rightwards. +#### Moving by Viewport For `SelectionExpansionMode = Viewport`, the selection anchor will be updated according to the viewport's height. Horizontal movements will be updated according to the viewport's width, thus resulting in the anchor being moved to the left/right boundary of the viewport. -**NOTE**: An important thing to handle properly in all cases is wide glyphs. The user should not be allowed to select a portion of a wide glyph; it should be all or none of it. When calling `_ExpandWideGlyphSelection` functions, the result must be saved to the anchor. +#### Moving by Buffer + +For `SelectionExpansionMode = Buffer`, the selection anchor will be moved to the beginning or end of all the text within the buffer. If moving up or left, set the position to 0,0 (the origin of the buffer). If moving down or right, set the position to the last character in the buffer. + **NOTE**: In all cases, horizontal movements attempting to move past the left/right viewport boundaries result in a wrap. Vertical movements attempting to move past the top/bottom viewport boundaries will scroll such that the selection is at the edge of the screen. Vertical movements attempting to move past the top/bottom buffer boundaries will be clamped to be within buffer boundaries. @@ -71,9 +79,9 @@ Thanks to Keybinding Args, there will only be 2 new commands that need to be add | Action | Keybinding Args | Description | |--|--|--| | `moveSelectionPoint` | | If a selection exists, moves the last selection anchor. -| | `Enum direction { up, down, left, right}` | The direction the selection will be moved in. | -| | `Enum expansionMode { cell, word, viewport, buffer }` | The context for which to move the selection anchor to. (defaults to `cell`) -| `selectEntireBuffer` | | Select the entire text buffer. +| | `Enum direction { up, down, left, right }` | The direction the selection will be moved in. | +| | `Enum expandBy { cell, word, page, all }` | The context for which to move the selection anchor to. (defaults to `cell`) +| `selectAll` | | Select the entire text buffer. By default, the following keybindings will be set: @@ -85,22 +93,23 @@ By default, the following keybindings will be set: { "command": { "action": "moveSelectionPoint", "direction": "right" }, "keys": "shift+right" }, // Word Selection -{ "command": { "action": "moveSelectionPoint", "direction": "left", "expansionMode": "word" }, "keys": "ctrl+shift+left" }, -{ "command": { "action": "moveSelectionPoint", "direction": "right", "expansionMode": "word" }, "keys": "ctrl+shift+right" }, +{ "command": { "action": "moveSelectionPoint", "direction": "left", "expandBy": "word" }, "keys": "ctrl+shift+left" }, +{ "command": { "action": "moveSelectionPoint", "direction": "right", "expandBy": "word" }, "keys": "ctrl+shift+right" }, // Viewport Selection -{ "command": { "action": "moveSelectionPoint", "direction": "left", "expansionMode": "viewport" }, "keys": "shift+home" }, -{ "command": { "action": "moveSelectionPoint", "direction": "right", "expansionMode": "viewport" }, "keys": "shift+end" }, -{ "command": { "action": "moveSelectionPoint", "direction": "up", "expansionMode": "viewport" }, "keys": "shift+pgup" }, -{ "command": { "action": "moveSelectionPoint", "direction": "down", "expansionMode": "viewport" }, "keys": "shift+pgdn" }, +{ "command": { "action": "moveSelectionPoint", "direction": "left", "expandBy": "page" }, "keys": "shift+home" }, +{ "command": { "action": "moveSelectionPoint", "direction": "right", "expandBy": "page" }, "keys": "shift+end" }, +{ "command": { "action": "moveSelectionPoint", "direction": "up", "expandBy": "page" }, "keys": "shift+pgup" }, +{ "command": { "action": "moveSelectionPoint", "direction": "down", "expandBy": "page" }, "keys": "shift+pgdn" }, // Buffer Corner Selection -{ "command": { "action": "moveSelectionPoint", "direction": "up", "expansionMode": "buffer" }, "keys": "ctrl+shift+home" }, -{ "command": { "action": "moveSelectionPoint", "direction": "down", "expansionMode": "buffer" }, "keys": "ctrl+shift+end" }, +{ "command": { "action": "moveSelectionPoint", "direction": "up", "expandBy": "all" }, "keys": "ctrl+shift+home" }, +{ "command": { "action": "moveSelectionPoint", "direction": "down", "expandBy": "all" }, "keys": "ctrl+shift+end" }, // Select All -{ "command": "selectEntireBuffer", "keys": "ctrl+shift+a" }, +{ "command": "selectAll", "keys": "ctrl+shift+a" }, ``` +These are in accordance with ConHost's keyboard selection model. ## Capabilities @@ -130,6 +139,17 @@ The settings model makes all of these features easy to disable, if the user wish ## Future considerations +### Graphene Clusters +When graphene cluster support is inevitably added to the Text Buffer, moving by "cell" is expected to move by "character" or "cluster". This is similar to how wide glyphs are handled today. Either all of it is selected, or none of it. + +### Word Selection Wrap +At the time of writing this spec, expanding or moving by word is interrupted by the beginning or end of the line, regardless of the wrap flag being set. In the future, selection and the accessibility models will respect the wrap flag on the text buffer. + +### Contextual Keybindings +This feature introduces a large number of keybindings that only work if a selection is active. Currently, key bindings cannot be bound to a context, so if a user binds `moveSelectionPoint` to `shift+up` and there is no selection, `shift+up` is sent directly to the Terminal. In the future, a `context` key could be added to new bindings to get around this problem. That way, users could bind other actions to `shift+up` to run specifically when a selection is not active. + +## Mark Mode + This functionality will be expanded to create a feature similar to Mark Mode. This will allow a user to create a selection using only the keyboard. From 7e46f8b841494a9868e39e2341d1c5e33e1e1c21 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Fri, 17 Jul 2020 16:14:55 -0700 Subject: [PATCH 16/24] Y-Beam Mockups and Design --- .../Keyboard-Selection.md | 34 +++++++++++------- .../images/CopyModeFlowchart.png | Bin 0 -> 15506 bytes .../images/CopyModeFlowchart.vsdx | Bin 0 -> 32618 bytes .../images/Half-Y-Beam.png | Bin 0 -> 90291 bytes .../images/MarkModeFlowchart.png | Bin 11736 -> 0 bytes .../images/Split-Y-Beam.png | Bin 0 -> 90420 bytes .../images/Y-Beam.png | Bin 0 -> 90355 bytes 7 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.png create mode 100644 doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.vsdx create mode 100644 doc/specs/#4993 - Keyboard Selection/images/Half-Y-Beam.png delete mode 100644 doc/specs/#4993 - Keyboard Selection/images/MarkModeFlowchart.png create mode 100644 doc/specs/#4993 - Keyboard Selection/images/Split-Y-Beam.png create mode 100644 doc/specs/#4993 - Keyboard Selection/images/Y-Beam.png diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index b8bcca7cf5a..04a7c299c6d 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -77,38 +77,46 @@ Every combination of the `Direction` and `SelectionExpansionMode` will map to a -### Mark Mode -Mark Mode is a mode where the user can create and modify a selection using only the keyboard. The following flowchart covers how the new `markMode` keybinding works: +### Copy Mode +Copy Mode is a mode where the user can create and modify a selection using only the keyboard. The following flowchart covers how the new `copyMode` keybinding works: -![Mark Mode Flowchart][images/MarkModeFlowchart.png] +![Copy Mode Flowchart][images/CopyModeFlowchart.png] -If a selection is not active, a "start" selection point is created at the cursor position. `moveSelectionPoint` calls then move "start". +If a selection is not active, a "start" and "end" selection point is created at the cursor position. `moveSelectionPoint` calls then move "start" and "end" together as one position. This position will be denoted with a "y-beam". -If a selection is active, `markMode` leaves the selection untouched, all subsequent `moveSelectionPoint` calls move "start". +![Y-Beam Example][images/Y-Beam.png] -Pressing `markMode` again, will then anchor "start". Subsequent `moveSelectionPoint` calls move the "end" selection point. +If a selection is active, `copyMode` leaves the selection untouched, all subsequent `moveSelectionPoint` calls move "start". The y-beam is then cut vertically in half, where one half is drawn on the "start" endpoint, and the other half is drawn on the "end" endpoint. Since the user is moving "start", only the half-y-beam is drawn on the "start" endpoint. -Pressing `markMode` essentially cycles between which selection point is targeted. +![Separated Y-Beam Example][images/Half-Y-Beam.png] + +**NOTE:** Both half y-beams could have been presented as shown in the image below. This idea was omitted because then there is no indication for which half y-beam is currently focused. + +![Both Separated Y-Beams Example][images/Split-Y-Beam.png] + +Pressing `copyMode` again, will then anchor "start". Subsequent `moveSelectionPoint` calls move the "end" selection point. As before, the half-y-beam is only drawn on the "end" to denote that this is the endpoint that is being moved. + +Pressing `copyMode` essentially cycles between which selection point is targeted. The half-y-beam is drawn on the targeted endpoint. #### Block Selection A user can normally create a block selection by holding alt then creating a selection. -If the user is in Mark Mode, and desires to make a block selection, they can use the `toggleBlockSelection` keybinding. `toggleBlockSelection` takes an existing selection, and transforms it into a block selection. +If the user is in Copy Mode, and desires to make a block selection, they can use the `toggleBlockSelection` keybinding. `toggleBlockSelection` takes an existing selection, and transforms it into a block selection. -All selections created in Mark Mode will have block selection disabled by default. +All selections created in Copy Mode will have block selection disabled by default. -#### Rendering during Mark Mode +#### Rendering during Copy Mode Since we are just moving the selection points, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection point past the top/bottom of the viewport. -In ConHost, output would be paused when a selection was present. This is a completely separate issue that is being tracked in (#2529)[https://github.com/microsoft/terminal/pull/2529]. +In ConHost, output would be paused when a selection was present. Windows Terminal does not pause the output when a selection is present, however, it does not scroll to the new output. #### Interaction with CopyOnSelect If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". Thus, the selection is copied when the `copy` keybinding is used or the selection is copied using the mouse. #### Interaction with Mouse Selection -If a selection exists, the user is already in Mark Mode. The user should be modifying the "end" endpoint of the selection. The existing selection should not be cleared (contrary to prior behavior). +If a selection exists, the user is basically already in Copy Mode. The user should be modifying the "end" endpoint of the selection when using the `moveSelectionPoint` keybindings. The existing selection should not be cleared (contrary to prior behavior). However, the half-y-beam will not be drawn. Once the user presses the `copyMode` or `moveSelectionPoint` keybinding, the half-y-beam is drawn on the targeted endpoint (which will then be "start"). -During Mark Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Mark Mode. The target endpoint being modified in Mark Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier in the flowchart). +During Copy Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Copy Mode. The target endpoint being modified in Copy Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier in the flowchart). #### Exiting Mark Mode diff --git a/doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.png b/doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..fe66bf616e03e2a6d3b534ff1e3186d8a3872e3f GIT binary patch literal 15506 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%0D_Co$Qj%X( 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 F{{|k-_6h(1 literal 0 HcmV?d00001 diff --git a/doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.vsdx b/doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..638c6bfd0f88fe3c28c2cc72814ebf6b0501f1cf GIT binary patch literal 32618 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 literal 0 HcmV?d00001 diff --git a/doc/specs/#4993 - Keyboard Selection/images/Half-Y-Beam.png b/doc/specs/#4993 - Keyboard Selection/images/Half-Y-Beam.png new file mode 100644 index 0000000000000000000000000000000000000000..1cfbdde30359c4478a5d0d610b51ca285a391060 GIT binary patch literal 90291 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 M07*qoM6N<$f~d|eHUIzs literal 0 HcmV?d00001 diff --git a/doc/specs/#4993 - Keyboard Selection/images/MarkModeFlowchart.png b/doc/specs/#4993 - Keyboard Selection/images/MarkModeFlowchart.png deleted file mode 100644 index 836295c68299991dcd9d30a4962bd8235a41d66e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11736 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

    GYCpH6_78udi&b!n!L% zqV}$p!Z1pi;dR<@g79j0ToXM}y@8`CEs4yUmdE~&qNFTGb+`KkMwjk4eHpuxoNv>b zYq79*RJ)%K0}U0+?Kk@vZSI+*Rza zrY08DyB4I4v@S4L=D0ErMoPV_l3$V$@BM(h;t6_`uQy4F--J8(*h;~F-&>02A`#Oy zOVSl08N%BNP0=d`1Gi%P01cz&nS9XLPjYH;-snBfdJ@bw{>Ovtx&|Cfb@>-i`f2(f1EAX#& zG{1*5Ns9kDtw2Z_g_3!&{ET=A-!<;k7$P=|S9rGCQQhb0 zWP;=8SN|zEyaE?GNE(*Na_5?^p`mg{kB`K_Wn&FO>XTJ+aJ(&Ld&5Tr;{tK3oTAx_ zCNcu|;~D$Nf~Q9q2)jQlJ{bp+5vEhqzK^mO@B`?a~9Y@#5W!7Ce^N~Y$H^Ls_(27yP)C(VOd691&Y zb<@29xYM{EyG4_Up$@mr4DS!=Q3m})MO#mA4&*cAVcyg)G2W-1DZLrBGzWcFkh*jl zmeEt&w%$K1wJ!W{Avg-V@@T=_S&vx1ugE)0rP>Q43?yAi3s!E8_g~Nc?oF^2-un;y z6OHS6e*S%;+%t3K8l3Xge0+Up0bhmuJ2xWQTu)T+UCB-vE2^cGb5ZkBW4CsMbTr6A5tKfJZ7P9%NFK$*Jd z)69YxS_@<@zD0gnCmbjFj=;ylrYVj5GRH)&ifxjHi}X+Z;Q7t7>)gvoSRp86k1en~CZjfFBV8>mf|jK`U2viFuzcC|KhoK5P+_ zQy^;f>Ybfh$M9n{(K836_C$^SCwU1?kU#^dv%aVB+z6$<*(yUB`lrS|hGECrnz}lN z{V@~Qgm$3@#ub!5>J1#%nI9`?JVU5c4Sggkx?^;*|GV?oKlQua;9+s;K{PG9tEW0}H%6d1UEd_%4;XnE)(k<>eDKaX@-pRhEBU=WPwgYqP2Bj8=mBmJG z8?^<`le0jZPaPS$pynQNC69=$9KM7y)2mFLuHGzqhF{2W#l!yMxwtQHO{F7(g3HeC z6wh(5@LPYpGXs@_X#YFyr3E(`dYNNpC$M&raB{+|{c6_Ot-T8~F*WP3mEk(?|A-8u z?i4ye+4^`~CT|=7_loO${9{4pS6PU^6R=qTgNaz>Q<2s@(OHp|Oft*;r_LTUvWL2( zzwe)M*HH)7%vDoCm#c9M)2rgk51^3h2!vr8wLr>wiUl0;uyC;D*H`$CJ8LI1^`~z) zhv(m>?ONE((+)d&4Fm9m_VA#T{8#}kfy;x^=Zw8@tfV)%E~W{NR+}(1>nhH-DU36} z$g!UFigkvIbW0w<^h`#bMkQ{{#y+s9|S$%e1UQmxuXAqD9 zTD78?gboZ1#7>DEpRXsJt~!w+?!)u>_6?q>TiA`p*UnU*zK0cq9Gmvs>M>2Y^11K) zik&+a4E1GUS!aKnVb1Gu6y~_olBQqT4H!KA4kBPtpfH@9$NCMRi<6Lp6fM|2HO=Sh zY;Jll*uV?hg7Y%fVn%u|wPDMJX*(`!sh5Rm?>gr99eX7M{3jj=y+ISr&l;(*>}YJ` zxWEW7wr^`6e+l5Xo}H5%$W{a~$C1a`$*xF?j_0h`)2D(XoW3Wv$~RfBr@6_D_0%e27VH*c?xC1y#q9zg|CGOs?Q8j8K3g#{Aqe<+RP!Y zShIMX?>)h3hxkk|nH$w_=B$rNtr>JoUiM{GMmC{g<@(IsweecVNi+UgsGYPV%`~k0bVE2XRwR#{kh`Cw@E5Fi10HrBxbzw!%r$YXue zzdJIy=h<-xdN`S4a8V$DvBk|55@0uS_1`~;&^+(8g0dG%N3_#rb49rWbwaXRxbQi< zpwa&gUPQ0ujm;4cV7t8UT;gVPnKHQhbIRK+dXaW!02gJw<8Byhx=OC|U;1LO+Sjjb zRAsh!h+;l-)?WVK$ORe6t0V;&1P@LCJmh5hXf7f(mWs&KpsmUyFGoKTGe1Q#aXP(# zcb*F`#EIzX^G<<^O-QBa4=iw}jXL`*DQXOh8}i!c_4V==75MI^;}!i>*nmT`(uDg@ z2=f|*FzfFqU_veY*gyTra@XSpfdS$$3#p{(xNVKbt3K~LXB`@+`5A?sgRO7(1VPFe z*P8C7^&u@C?H*78H$-)IAKlA<-=*H%LT&;(S4C@ z&+*$WpjV(VjQlTRA%4LhmL~GbNpEmyP)=6X-UNN*J1@9Yp!EJ6Ynf9tQ?-L^h6k|6 zd7DCQMOtAcQ3+K=fj7#QE?aR(7{&UGlb~-`M|*N=fmfhH*X;L#py`(6x4bBHTrRh9 zmUI!vAHN+$K8WT%2zht%H?V^@%v&Y;83BR@JW1#4SesT;O3f1hauRAf{vurzYG;5C z=YS|RnCHH=vleWN{LY9^Gx6_|MYticUv1j^B>SOMr04lzgXVMd9%s`g;vFR*;0&$k zZfw?K~U#&%6q{Bj^_>lP*njU z&)%VetXK5TI*D%NxiZMctNJ`XGJcHu3Xg79ApgL%Dk13+v0pj1Hyqpt_Y-b;3tBU?pu!=8B**=JFChjO zB5e0>^^jKzqOBFD4bi(!_fZ4TFHhDFHd|1oMx^;A3yTNnhW}R9)csTC&YPhHVNj8i z(<2FlN;nb3eZ+w}KeiVhX&bWU;eu*;JoFFyGg^Whkd6VRf1js!R14Sbap1gooZ)hF zF()D68W(adJY*`~MZ;40Y&`~3hh%sj3UfAiv*F+nrk7^v(gK8B7neqm@!sReC5Lpo zykDzSb2T@w>@7Jwp|WNH{}X>`?vJpdBNx9+GA8n5g<)3a0|b(;a3sv;_8AsjkGs;h z?9>B_2%LCZZkM!r2bwFh?K<4KjH+iNhkL&B!XNFe#QEtxRQ`nUl!+>yu^$ioHncsA zD%8#E8>rM}v0`#0@&ShXkQm z92r0T(bUvTPc@wb;(UTW!?!l0x<8m8;7pvEXm9!IVe!_$aKqJJ`{7!&qrI55?zl5liA9 z|CsDL@_m0w_R%I46)rAe(qZQJ?qXShH#85gd2F#E^l*9Ff5QvnM2PIGaK;|7j38#MLswho^IzI+-Col;*1?*HXb|PNSyp2J47e=q;bcZZqIFU;>AbarP)Nj1}FJohJArQ8?1WL zF0ZQk=3u?+-PeCZCzlszm2@gR?|_L{nnEU(Hab2YQtwpaZuqI}O}Nd`PwlG}2D^*| zROPXgjcEkX{B%!9{K$3m&_U=KTTlvu8ciu(B{ z;;X5Xl5154uEb~s|LZTi@D&Gl4*Wa!>S|Zk#~0ohDCf|AZ0X{%$X`yi*^+IxV8=O? z%>=a?e*)WiGL?SOuZHKO{3Zq-}$av1XH5dlyW`% z4WGW$+>WCMj-3c>QPn$B^%1i;^v~k;T)0(Z1MLhytU_$bx{Uczk<{TKeROy@zr?0R zPLv3PsKHgYIX@LC7Y*57g})J1cAN?NoR?zP(5!NnR<7m8zE{(4i8*07;jooi4R>c6 zOZ8zJ?a3nCAFN5b^rwFqPjYz26jU-%CEf1GN4ZGKdC2U}mS7Sso6|1K?-@AcE(So3f1m^-5*^OC00U@TGjceT$3}gw3`q- zDn2z|?VEAnJGE_AP=34lJGkO&@b;GLcTQD3p)yDR;sWQ4`p&rDj5=lD}MK63c`gbBO-=s$V{2Z5iz214KaP()E zssaZMetII$WbBWSBs_DeWJ^EDr#jdgPau}d4X z#KgA45rqg0jIr7gkyHUa4P)(>xsPIkAtB%J3stJ=!sjNU=Yl@h)=H})kxpzvj=QUdIsyuDFfAQ}gEs5BdMv=F|4SM;#7_lUGBl0%7 zi$&*Gyp!>@#XOR63WAD(cH+DU^xjEafM`>|Ni6(tRIhM_S=S+=?=pm6pvER zQ5AzNgap?XbDMD}_c6I=4mL6Eb2_z}PB1z@1Q5=w+J-g?=N2O>>o!~rkmU0X6jtxo zrF?z};w`{a!)l4==1227lZ)G#LS9lZ;5qD@{*^F{;1E9>LNiu95;s;T=RzBfZ{oh3*Rn2Sk}s%wH9_*&_k(80)(L!Ub&s2%rfb{4W>4mG=|zf3MBVFI;} z^3uJHcBm~e&0Miq(T*@%?}#I!THA8&RkydN?iin{G1?nDtMB?nvIf7tuOw2k^e-UL zx)3q{Tz5gOaj!j{;Tz??W&RTY>(U^9UI2lmJ&^Fb0*9M0)=A!9-+4ms43TYY?9;jD zS!LDo{lgm1(P0i*_hJvSu&P#D!KR#IOxc>+q(JGry`@>+%Y;j1SUM^Uep(zbte32f zq1RFj{FR%hnWxah&|Cjv!wETyHcY1ab(eue3>|fik!;<&AcAWPzBzSRcJYIZvpQKd zvFGX<>`Nv>+`nN`JK-uxeS?efG^M4(=i?M^JI<d@%MQ1vWSCwqS3`?gBb8{WUZbiT?tGdm*_e!PU=ak1%e7(h!vC8sJ%y}yzZQWJ&i+FiX*&8*Mr*)whKU>0>^H>&4$CwWVjH#xn z$Tk?da^8DbI_zr1=|Zp(SB{LcnR+t4J>C)S&Nrsg%BQnTY*{`E&p|4vSNG`Y!@~u} z2G_mO3gt=s3HB}%ATI}C;?ko;MuPY!{OB@AkWvMe^=d|Qp2s6DqLPx{p}Lgx36Y4{ z9u-Ww6RYFJ3e2a+-*b9gq~AZ?8!k03RUhrt9cF<{)AP0n<0z-MV{6@SE|J37Eg^64 z@IO|iZ>*x! z$mQP}E7-^?GTy7)7*M%3NYmsWMU}6s9dzuAp3hZAEpw-vU_587)bf#!%l2N^a~O)u zsC^F3sH=TJvC5sD0Ev484;b5OsbB`=Hp(M2le6%_;lg6pubu?rCXHT>(4PX=LX$Bw zl2|QFYZfx+J1VLajNr5CdX7Fj*iVlZUtc6vT>j^CU#V708o67&;5-aWh#B2nx}fXB zBXQv{9FmSwz(;DonD9gft>(rrw+6WhWcM62y=zO48ngj~u2*lr!oNf7dR@k?7N$^O z)76Q?v3;VHS#PH05gk}1|LJdWmhZUk->v1 z=5}1EQaH5WQsKL}q?5$VteQuRfPaZ0kd~Qx)1OOfpz=ZIFa28uUJddf6b9GPq-1qG zR1!wrCXF3a5PID#qrB`ADEd#ngZ*CXp-2K=^rjMp4OCUq~>&}Ud=cp zv@$fgS`5GZ$HIQ?Nk@-iO+_9Q6c&c`S6=gDpWwV_U76o2UkSoSi z%O~gO@ZwFe%tXdhIlhv@mnu@jMHRYC=QoJDE7##A6p#|T@6~be2EE%;6^8iMp0m}f zKPZK*8u$aJeo0Y}5i5xgnMyliSfeNWaV_zws*TqVH->9_D)}{;9j2KoQG=sII@nhZ z3qL=v0b#U%A4j9k`dCPklbwCGPAOGsMnwK?+ZNyW6V2P>=2qtIUCs3 zjD1^Y#8&%G+Xs455^Di1*fAXQr8D=u;-bLgt=(LIWRaSZ7i@h+n=_VaZT!FOg*wmV zop8AjfTJGIMSCeRx1g1z`Iuc+9FNJcBVZ`A=xU<6ar7G2yJ3lwe7?LLZ;_C!sMQWK z2068rjtg}Ut4Xhn2@G1g9U#1j2pISb(STH8^~486_$2KBJAQ?eX+xY$zfI%hpVvU)s$W)@7df}UArc1lRpd$rF#A){68K)SuXTE zum-f;XfuXr?|lnk5~8B>DWRA*ysA76`Qe_%wc57K<7?*lGtGoTJPc0Fs~n5bNS}rS zADd+Q|4=9f6C9YRtj|Lby{rCM2BMG2d7Bx$|GfVUBUjZ zh#wrPAX$UKlJ7G8eA+q0UV3?~5cu@n&XV12PZP30_C@&QO|d7n*sZUd?(u*3mumgM zBs=l$iHF}HM;&2`poPX{(bxa={e)VL&%&bJu*f|Ax6nQpnMa3Pu9<;H1EMhBzO`htL9a!nLRD$7!nQrE1_WDwnEpKx7*h;Jw|tW4 z!I+j@Zt;E%qYsROe6_IccE~lMqnKkJIbiF@5W+y?7n@B}adMiX5!^!*`6B&DGq^?E z^S;@gj)gCp`0VJX9+z~8`@^6b_d3p*p#{dY4(XpSuA$%~oH>uU-;`-Q_N&kHo`U?_ zb(>h!=Uy{wYyF@gQ!_I&9ksw98waoRTq`>ci`cJw-`ZaBHp#tC@NPpF24IFavg+~^ zr4!ezQ&Z2xk%k9-8hTmr@D`LniC^`B=1VOp(Jpbl`#1<5FmHz!np8D10pYSc)tsW! z{GTZ6k#GOKpH{7z$~H|x=qB#j0PXWx{hsw^Lil&DrUOiWA~e4d64UbYJ>1d6m6ZjTlr#uRMJ^gIc( zl5SjjDwe!Gw>zVZHhe&%B-DE3iUfotnu6#P0=|yTvh&IBLD2=9Ok;U^WFN4^@Qy9X zpWT{LeALOIeMMmvxS(8y;HTiXcc~1q3fGkP^onP7u|bc zH}ao+U!NQfyBVoQrI1di{Cn|o+PWgwb?ODxmx4oR2Og*#*X@QYpf(Te%2`&|e9hB% zX(>t(rjd=08#*pQcoj2?s;s+eKv;>9Q#pPLxf%(Of21~=ZZX7>5X-q}h^f|=22Dbr|UJ#p0<;iK6i* zeJ8>I&g7B-94Z->EYp*qrkz$gcq0GO`otiiZQx$@b8*yD91Uu)U2e$Sig6fIVo{1d zUd;GZTW>)1O|o1U)JERCyD%%~=1q0lbBEp7vbxdbYN%(QhcNnt<704Kh&7`6!f|#7MpcYzHL*B*zhM5o^8?zP#kN3S41Me+qrHFRM=Q$nihSUsVFlhOarZWT)GzEk#~D}Dw|Jwz zHJ>nWzPmQD!6C}7)@V)Ef7D>E<`J*yZiW-$m+`z59VN4*uxeHx4R++|HZKzU}=;x(6 zwDu)8ie8N`nn!$oJh&mp&W89#LM4w=`NUnrXkAVx@c!))T~O$*gV(n=Z9XsQo~RR*W5w8Doz8pd0j#r@lCh*;uEd}5-a zF@}MdfhrgX$C(NdnCmU5tC5g4Q~o>q$-fT*03JgpZJ`;rR9U=nM93AVaim;+F z{zk>e$LA?pg?!i@qFG#9x=lfGoWlRwjnK7maRQxv+Q81qf`{yob_k8L$u@mAG7?)j z*w6>oro9MUE2T=ADEo8oAJ{n9Wv3qzw&Qm8vOnN|xo{-8FkWLJicW|iLT@NBz!;u2 ziG=di{ZWsGwj@C240)ga+Y!w=>%^8IugkX9icq|tIuX#;f4MTMR_T}ZqFvgcCyabU z%*r{dwSAI|(6hie+f#f;BV?Of%6uT>Z^~4?>kTw zhr@{NQ(~`n?%|QjSEn1axSy|q)bv*`xCt#Jv9S|A+s(_@lIBia?6XnUD_$-ibzv_R zXIJIvk_l7)AFAFlysn0e+6|hdaT_O%8?!-UGz}Wtwr$%s8{4*R+qUiGtn_`p@0`zMft3>=j%|$tqn; z4do7Df6$}a4G63XJ-y?m?yWIh>X?*UaN*JJ@tSNveCU<-26={)cil+yOQt6cSI2i@ zcS)L28ve!lQ}@TD&&X!0ls-MCE#(6Hf=v3K6p`7hTao*ey6^Ejwf*hmRxfgETzi>= zvZdy%LF>R|!cYmeN>%$!A%nRco6pO1(`rBNe)rk~{r*RV@uYchbF!epNKrYZ1FfL^ zWS$DOkYT0Wsa8zf8P@&b&W`NSLUnkLh?$CmFO7f(-Jq5i2!y)G#Y2-+NZP-T7?X#G zhXu^T$lk54y@U}{F_LjdbW!?Bq(GRHzM|&R z61mTc^&~$A0){GgcVyH-nG%dvYx4#Yn_;soVks12pAap0(oD&n+;$?WaFVLNe3L0E z!E1d!5v5RClA!v5KBg}==e;nbJ>YsXr5Xb_2A?FMoJ+g2)q#3Yo7?-MTy4zAj!)X#tfT>uJ)^sf6Eamc2`S%A6c@Xz{Y@rz6CGo=yhWuQ z~iE_tFat$x;cNI?v>lA&rfNcIyi%Z+qxMJFXD8YU!641V7yW{?RPn>}19R2*!uJ#1+*Uxmkq zu$(>OiEbV0?DPWeXKv4Kh}im46Y5bu$ymKnk%p_q7E`_4oHhiUEIcHHpy+O#(H}4W zL@SIMmLnG*k2vKI4@aPfhP6=Sq0+0EGu=krN8mi3+7*G8Z53Av=CTVSL`;uiiAmr- zG>I<6mJbHzy2!YLS9bAW(Unk0Bb-vwVX_5z}erR$z-@v z6&24W(o2lta@7USIjgpZveg6)YOd}NwNPVfytUd^O~vPpofG`{Shg@qnUh|YU@Z|5 zV{10b)3bjHdazlK0xVW&dOBWjPtT4M{tEg=@oJR~eDHqUQDAC5QKDkw_2q?iwz%8T zz@Ys9`#@3`53~o` zcyG}sJtM5NCD+2{7Aqhf?tV=9E4d|lUrfOKw)%r8ogmobuxbj1=A!rjaVN>P8e_f_ z)+lWh=sS#&K17lr(y5;224BxglMP2@)J5vvvA&C~t+CXfD{@@jlT!qx{O-Zdwm8hd zIXsj|-MiZpWn;^ABpiNfDYHDjJ%}F_*ZMzbf<^8C6&OWWt%ujp30bMFNI=pPQ|~=gYQy39o`+T zFD41E-e5i`B7W>lxJYqMKRshz@GRQ97+-Q}7;UyF*xXr~e$iVZyM&igBzCNq-2O}Q z1LL2m);_9O$efr!U6wCUsZJ!XJ{5Z4NJgtXzRL}{McMaik;Xsa<}SD?5I;zbEAZdY z_(l`SLPbY6nUjqX49m0-b(OyTAL{tuO!=*oY&JTTZ)A+irCIp{+WdPp##Bs5oQyK9 zMfUdACkDvMDx7f@%~Sv3O*0}*YB5L6`Grg0gdfG(H%S+GAz}<`l2MlQE0>}+m`XPx#LE!e#YzrDH^`Vof4gT#iIJ# z>i174DVw;MnkjMn`K0#*X{55vl!>DHJ@5qkwmB99{5Rsmh%~ z)L=6FkcdD1@$mv!VNR+Vc5d5{k3>zL8@t2=AkOWwi7oj{KT?3!n7w{ge(rB`9k*N0 z5RlEwYJUl%(*LG_oe`KyS}3}^HB+ddw$y%%Qo4V4=T^fS(I@)!HjEnE)lcp~8XkTp zTck?Yg!GN}QnwzQjB32a4ex%MFuL}9_fI>eWcwTGlKht+xM{B0>|&Vpv3G`5ALyOf zL9_{miUw=h8eJ-@CSBANT;x%*8X;b;7K(c|eChUc{z4*)(B|{N!5!<47ACn`CI)qK zs$6l7%Dca8tulF$RQq3)2*zJ`6;Gp-GS=2uso^bT<-@M(CTthJF5SVOg|3yWc_5rE zWlav%=CzRzqYRd-36Tl=Z?RW=n-C50%_vm{)775}B1{9MuR1FBWRppMG~l7+F&=Q% zU{XR6*j}!n!f5jE^dde*h7=<&W+79u0UvU)!uN7TP)T*$Y`~O8)k~97hgjPnuD-Ci z93)zeFuUV+N`hLb8ux43PT8TDd>**wgOr+9j3RYO2u<`@PJnzFfio7mZ~7 zheoa&6?Vt^hL=;<9<1^GP%1oD;P%JWGwBc|GJ9?6*CMf(?p9nlokA5dJz{oxP?~Jd zlF5miK0YNCeWIyjQ=yf-uYvQtr-X!rS8|%c5Ga{n)U_ho<3-2D#H%PuUaB+tx*1;E z^NdRpIUbdnr|s9Xa8Z<-;a)Fxt(C8??U!1PzO-H`aVHg|v)OmruDl}t%%d(woZb~t z5*`>SSD5U*RyYh%>b7ZJTPZXVLp>`cSL%~M$x-lkBRzMhtlhgMbgM zFHm8WCBDufZ*@{`gtM?LR++irl(lcjkin>*jdIJ?gz%yIsq`+V{7kYI$Q)=TC5vZi zNPos^;!yXX{h4W9YS_v+`Qw4G&Hst&%U?EUuW+1D5{Q6TpR;RXY0t}d<;a;^> zB$OvCdn1<^6zW4Ma}{<~k;M$NX39~2VOgj9YPzfx`qg$csfVGdXj{+yndi!D1saGvza3U6_Zd7U(is*hLQIN#f zwy9*?wM+E|W9B525%~Lc#Z@w+%C26yCK|PN52stO(Zy<;4mlp@-jA@%oC6ZB7vd~H zqHRqL#R28o@8^ZzpS*#bmqO;VY*bi>AmW`*l#H3R-Up?m1_L`UkCm-@uAQ?;+m2YY zU?b_3i{g&Tc!1vWf2k%VQP9lTq!{ui&kR z)${IJA}63t@11=!cWstzT{>%}HUv_!bGprP@^IArxr;+8KGd}?bpraRm%5r(zTUnN z^q~rhHX1l|YB1JZxB7@h%GoHys>8<14(Zg{dhKT)3f}Ho&+2Nbw)PtgvgZ~d1MhWM z<0Jrfl)T(q_CH;Yd)%!)i#?~gA9GQh7-1H)8(*pibGU{B2#ch@G40@1FO5FYGQ$12 zO;wMkXe*jDTs&O5v{~9v$oZ!6?q+tukDe86SdnSJ|)T~sUj!JztlL~Mgy*qA1Ue%jb>{g06+>Cv1jAU{j+hH zZk<)Ggqbbg^y6QvP)u3C+F0Rjof`k%7IMT?DEhIta=l*CDX{>=NpOA<>H6#-smk%k zL6H1Ro(pwKFl^t#!oGn>3pyH;I_A8@)5_j#fZ^5x#Le4IfYGe?DpIq)WYDu~;}Gc0 zN`{5r*TQ8_$gN~&&3mKAw?u9m*wK_aag+pT8-YMVYdSU)*H8}=E}WpiEQfZdKyM0^ zn8ebu*W>93jnW(l2Ik>fD~=9}&uE`F2%oqjpiIiH?#B;6*8^+!W@#Y@vLMjZFW!{Q zzft{2eV)suaXT*D`gkHB#zaQq(`W+*7r~&vM(UnZG|MP4l!=boaxAPWPQOmTy{|hX z#ka3wRp=d5%9hOrZ;Y;R$(bQba4N_;k}pR*%MWdJ;o#lsILnjuOM#MF*$4$IZg(Sd zud)3NLkUVpX`c+o3gb&$b?8!~rS%-Of(9ogsN?Qih#2G^f7edr@@msUFK*5y`^yzM zqh;3k=J!m2yt-XT`9xB;7DbZZ6?eo|?Z@0%#QYbZj_fNv`h`O7`N3Oywx(m2VKjMu zQ%wv(G?VSU{A|LkFjga1A^7d>4ZKg%ukmtvcmM*D8`C4qUujK@9y36eElX5HYD>QN zHCiqk?Z4tgq+0cNp^07I!zo_oz>QDKUq7HJ)1G(w3NDY{P@+^bI>dtk1GRK_c^{En z$DbaA%G#rGi?I;dbXRP!1O>6DZ7Z*}G&56kVy~~CzAO&+jB$>i+Hb25x*DQ&8fCNj zV2atZ*XeiDDug)v>M7Ew$O{-iVqIV^VTQ}LwWU0#@`^D?k{%{6?rt}Ptm#<+M07O{ z-rF%a=!Gf-m4wj&0l~c`NjP@(DO)Z9t15W?tj+TBXMoG+jyuW(B*XOCot4qg()Gh^ z%xk>RUB>47T(<{FUh9(5zbWJZ;o{Pj%Tsm%Knz*@C9zm%I33l2#k!y-qw~rvCa`A8 zR=-M!E{eHbo{;J@N!)I(RMoA@1QUHQ&ANYz-ODWam2V4@lOL84NIm3=o; zcZ$ps??E|u)a2SbF|}yI6HUCRkFlBKx;_ROoSS3gE5Q{I9bco4(tf1tAc7Hs`XR*7 z9v-r2Gi;#^>F^iY;$3{Gl^<9_rvgGtTtP1JEQ9#|&eYWg45m>>1aZV~XfNNjDc`Kw zR39)>;v*o~w|t4Ed0jz62uH~B#s99z%0-G64L3oW$>(^1(PJe9Jvb9xx>JGX&Y~aQ z;M>Y@$-^+;!xtPtX|b5KGp5sNxC~kst!ZWa(tJ&>{VXK2+##jT=SjKX>#!$7VbR^z zU^19Bu>;u$w&cf02y)3*54PlgUSq+f%(py`TWR=lQ{8%8yRApxfQ)8mds_$n+qabb z8UJ0Vf}axl>yLXpNh6#6bnQYpSNAe)RotA<>a=O5DA5a1;|B2P=~kaw$5WbsC*^AV z(a&P4=QdZ1Oi}R-lBo(gxu@G_c-Aqfd)ktVZo=tn0@}fopLdOmH8%-3D1GrU_fB@x zX{5r53oWcif1-FiIaHbFDp33W(xbi@;j8d}`Mgr;fa8?Pi6c^ukS;#W^&TV8Iv3VA zj!VGPDM;v9r-k~EZ4{AswqHB`Je^ibdT`C`t_Lfn2RxGzwupasv_@u!?u z#4VplUB|cu$Km`UHp(uWe@}vl){6x**wL>tnG{2ZG=p%geh#c&IO@K?=soWR49KND zMwZ3LTPAr+aKlRuzQ^km*Wd4-&j}svLffQ$L1%6-;L(g*Dk-8VPMozf7u&zRp3zOglda{?ld(Y3ZZN7Aj? z+xkZx<w8OOyFO( zjtMeI5{$p3-Xl*sp;2oYl8^L;=vG-rWa*p#-F)4I&>?KABoAYSa~)@D<81;txfqi` zB*;>JyikW!`6XQWmktb6fA6=f%vfu1i$Js@k2aDMO$bh+=%YiAnna(TZh2N&#Jr2!=qbBs+7Y#2-!!kZTF}*dBq`3QWOvmvBgGX7MkpN`Q3y z>Uo17)n>mb;w^2SCE88@gA(CMD9hME4^NKrl}PfJv$Ra|w(2j)oc#3`33@+NS;+Y= zyHc;NtKO2Yvg9SPEq^Acmi*DB5mIzi`|}I_c%4C!*MH5h7`2 zFi>h6f;>WMr}F;0*kPMj*uZGFABkH{4-q)A)&Rrl!9%7^jdmvu7PkuvAOce@wLUiV zJ}%vt@cxJKgj<89${k{axT?T1r|wlG-pG>Te|L#Y7br9fE$PhgKK{q(qU{dDpuww+ z6)V)~OPE@K9}c{c6}rEjG;{89NsUAJ(Q~`JGP9D<{{L~^wbNMO zI(Oex;=RkX|L#}D#~5zIlbwLw2hwMEI|T@B%6G1TE@pfC66Nt2Z9{YoX zE`8=G8KT7{(UR|8$JpNn__Zfp#>cZ5qR_8n&!2vQH(|KV$_CO?&M9Ha9@J)_Q+ zFcxD`?LhZY^<9Kp6+F2Te8$9$RxZp>V|7Pe7%@i&E=tu}r)WGuW^m&kzyp@LRYroY z2*~#dP4I@l)?FI{)iLP#VMOf#pYF*qR|WxK9{o*wbyv=<$OmvW$xEcQ$24Sq)_%Ao zQH#(Qp0S9o415Bvq+K^6c>1)#+vEBF3FrKeu!^dDT0vo9qa)`VxIS3Y{pxnPl2{~G zbGKx%%j1AVUx#Fx?_cU;bE5KY;QNxIaA}XC!6!A4q)|>!4t<{QwyK1~J~!DBgK1=i5Nl*8z>xM9Xm`VFWp~a~#Fo0>sZQ$FgTr2OQAYcM zRS*9amI$LCEt*s1yWR@CYt~Pdy`e80-|I^`MP;}(NaXv&O;=B5@)1}YS*G^n0t}Dx zMRN6FVa7gmLDW0jxF!347eSk9XL0ds6to^e>Bk^a1WT zc<=K$2%^y|J{qY69TV>hY)8mLh`fy*g!NEdpp2dbM5CA>$J?Z@t zvVZ~TfO}FK&(;tKm1l-gvt&@dGKT{tah3OK2`|R1v7%H-s`}d5N`!q-^FCVL#0|!b zAaJi&s~G-0;C!*l^fJ_dALcB*=-*K?2Us8+oz!BOniLzWTh)LOkCuW4aLX_%*(7;$ zei6r6TG}fLcS8}9`V8ycIl~ze-(rRk9_V+Lx&0bvzstiC#p%$u z3hd^S=?m!{(D~NMdg)&S>hUG&%38Rt{w${T!GMsco89O(nb9Fin2GyE=6>+5xl6zKsWh@+LE64k{Ja0`-=Ji8aqQ%bByXox>Mq@m2GkGUNOeN%A{hLsDdPP3F!6oZQ zy;z|r@$8Cew!u%}THk~|wu*GPbE0X*c|(A|KHP|%K4R8M2v!nmdCEDy4Zkh<0ea5R zA`up6XXC1>gOwVB7i$`@!veF~cvGbE+w92BtdZi#c8lp~-oX+r=gpLr=%uuzrwSd^ z*xU&Hfg_&cVaiYHkJ~GkkNZ824Kvde=IfK1u8<1(CGrHN0kBBw>}HB{!!&; zLNP~!wuTzn(hsZ&oq>t05JVZr(@4>4H1ga!&^hTPe<^HfqmJso`$;~*PUK$Z`PsO7 zmnyDkmb@Rvtfpa<<FL42Y0 zE!rSfBJh!Rd~$p%(;n!^OL{ot#KoQ!=-Xo-f6-lnoR@ES=j?;Apucy~%?2l4kX|gX zE9ikC=_3wO$tf;o=&kau)OrLpp3WvwGl11wiQ~gW9%!pKxwdM0&+Lodr3v3Hx>Dqy z`rMs+)dux#a!SKNa=R`w@3B*Ya41j>fiWC-LZv)tdp#vH-rR4 zDjRrhZ5iX?QYj#3vBbz(O$6~1S<*aye5-{fen(o{g0$T{(Novr;vM3KdYL=-D2P&I z{PKdpoJ-ka93dnXkXBo$|9Z7${z=3uy&e5@$uShz5%bb~QYL!t(E^*}S^eR-RBSL! z&?`5RbB(T#d~AO*@l4TlOIH})p@rzQxN(x@$Qwz;N^T&T+3dw_mYN_;gVyokmx0fB zHAb;v(1Gwfb*gPT4NO8b|l6y0AjM9n5(PQOz#nSZ~1Pv5uFC+-z0}?mVj@iN}10e#Im@4!J zDO7yeI>q*uVN=?jtY}}U>GUMSCp{+9eJCDmJZO8@!MSXMQ7@{UhzkCt+S#E2I~$6X z>2?1L=?dnCex#8j2L2YtEEp%-|E0SD!0y5y^h+RnWW+V5fAJF>z# z--R$>4PFmRRbZr6X2x6$t~d&xDLvexm}_ym4t0CJi%KFFXbe!K^H3;h9KCNzosOUj1t$!D7=}=p$m;zv&WCs;#YSf1}5Dm6Rf;6crWwd$aQs`98q9H0ObQ&m*&^$L(g41WQvaG=BTnzZQXJpYZGTu^ zGFbt%jtJzfE-<=IS}-u}s(4Ne+xe`&O6nB4)ix{olLh&uk) z&R0aHJ)6hGIx{63!7-)(;%G+fM-HN|wnk|X?7%ltgUHbe5YrG5!^w#$Q!OR3JCaMd zJ7?oReq3?GGaKV&h-rJbh5%-ta``hVnCjn?O)6p(YLgl$0R!Lna|BS0A#ZV~LOEJg ziEHWT_cAroBdS(C+(Mj$^V+pR`ExXP(%Vlz(4EvHMekv5#PejuS-ME&%t`@@y!Xfa z+Sh)&Os(g_$99`lLX^sedtKk0^zlXw!AD~P8W|=wwki78uLNb<9pTK;))wB3?L4T# zLTqv^KMH9T$UV#Yl*N~#_8b8&o1{ByBJW4KP)eSP8rai-;=HqXC!4L_h`oQ-fo#s3 zr|$zp2%g?;;%YvSae@1bZ4dB-Nt%lO&4F+~%;u`XF$x;hd*Ym1A({q^8&O_UV3;$3 zgAssZL+Z2-wNQE0S~k}?(ulo`;c4}GaI%x9Y}!Rorf66=l=|;q?3^h_NXoB$)x64< zo(2mwyoo5Gv2LW=Ie7x^jD}KiSan6hfLfjaO-QERm7;80ByQF;_u+mk8JLaq&MYev z&skZVF_#vKJ$^75jD~D^*P$+SKCQ~SncHuZ35+`zSuwz>gUch;I2UhwOLIzt{ps~X zKiRH8VA4RFU&-mI^qKFG{4?e}!{OEFLUG1Gf4%0))sc)91SMnYb1Yj2W9m z2EEdk)l37NWM;Qk{&+evNI9ph_t|FHomb;J0qivg0T^-bU;;1Mcv5MVIo!I)!o>`Z zFek(4mOnViGt8|0#X~F(vsk$WNGixo)p1#X?Lm2ja*~0hEC;`?$@S+s^dq_*WtxE# zFC+}w6Pzw!>eeSXt*X1uuVy3j^ z4MGSWsp{_4ZogRebh(hbiN4*hv0cKH!Tfa_TqbX&fnCKWZwnuRk+eJ-OltXdAQ!RY zOf%zBsGd(1=H||Hx`-uoomZNF{)Qn&up)tsTvf6uSCoK6DM5A5nXL~OyINtYFnZe( z7^$m&dwpde<3>~BoAFTSL`|d!FH-q)IxV4G9J{dtEj|Qgtpe;rWal!qGFqbxrB0vE z4WFvyo!se&7rxQZz-6yc?iy+U*4uwhqxukE-%lYsT9T^t)fzi{@%0{z6zuIcLK;nJ z@jSrYIq8Cl#F0$JWSWD9YYUWgPh2j&enDS(W3X(ZUmR)})X9 z3_u)(bdXqdc|+Jn_Z%|`gN(U<#6oJ5%Y;oXj+9FgVy%AFns5zp*DbZZ1&XS}!R111 zT!#m>#q;igP=2b@tt;oIC?2=m{C(MccR!Ej_xWG`t!h-YuX{QUp(+{z^Bsv_*Q5El zE7$P5s)3~4O8l1hpsc!LO)1O$da1{3CNz*MjCe1nq(uE6a!tvu_US?6=#Ni6K5R*L z+k_E&evxQ<6S8`wP+o~?dozn|_-qCk7EwxedRo+)Ih>H7>nnutXrkn78%ihW)g=#*Vgz>2Kp+IW7l)us@Phr%7Ohuw#Tb5(wDGRE znJ{jX&c8VTJgTa+k43?8E%*%-;IB~qT9|}jbKMke){JGYnrl!k62sL{0f3#kYNC4Is?zr+~xqiyf z@uWTg=i#6v)NvXEaSW9q2N$+?gq)m$4~mwxVo(42@yJRcd`dJdV5RoFS+QQrP}#1LAQpQ*+!n6y|b^9^9U+YyBN8aifjy zsK33|_{jsl#|DGZ3{Swoamxo)-X~h`r2w-WrTwi3v2m#WBODj;5srgT`o~K#0bZ(q zI_0*bY0;0y_9yMYWs+B-PRnE*@=bNRs>EKNo_P34Xaz-A)iDb)>5W4vncJpXwCW4H zWwEAQBj7n^JPpyyGwXMf!$huU&=*z&ymHhV$7iedzqL)$oSwOyfmxKXW;oyWM3Yg> z(FL?r@$<3J|4qz|T{qK5hv$gQWS*dA;y$RD-It*X*Cr)%t64IA@ZS8kTCCLu%-E&nc1cFA$5)Q}C zpVj>t0yn)W?J7N{T0Dnf8YaMWE!k5h;~}C(_8}t~T08SV1b;aASDmga$$+X8Iz*n{0QaDmrPd zr716NG!*hEaG%C4lmRX$p`pz`%DHaxeY4}h!FkA-1&PG*@r4-N1W`S%TR7VK-tumT zIQeOj-pTFtn5-^dE`K(}hN1!pD-hcg)0X8MShkb#nd>iNZ9?jkbsLp57*s@qe(BdX zu#l+pT+U5zCv|&y&CWAx;G!zCl=01S<$QLPR2=a_olI^l(ftl-Hgmk%^90V!8mh4U z?}Vpy$`AM0D(~yjDT4h*Uw$ z22=<<>^ed37=9`KivfE!2H3R%?II~1qR7KjP!Rb{h7+pvnfk@!w#(P|rw6A<LG%MvC3q`5{{UUxFzmyv-CDQhPZv`A59?G^Wp|av_WqdKQ-s>R_*|u!mJLM(6 zvaA`c!_h4MtPS0N4b~O-+&?|AhI|0T%tP3}BMEnO1y!1^_<(Mee)$HT3-x>frpV!m z`kDk_ek9#00fHMzy@BQ* zTY0hSel&`E^Bj@lNNkNr{*Dl)91!Ti4(0-X#8}o-TwjPb1V<**nGP9lC^TP2BqbqF zb>SU?xiW|k-u~92tBHEJ&>Y?}mKKhBkJjTKs%_Hyu=t&*Z99NAA>^C`1;PZ=)T3yf z&uZFxq{r#|M~G&MAf=v@xq@&dwv=a$Bgl6d9wp5o?JWpN@vHO6W4QJsPaSPbftBsKto)czpVOaPwF$&6alTa-x{$BIc|qr^GATT zXU<5G)ZT1J<{iZ89wCu%tBcJL8>5TqQ{7H5G&HiSfJN<~%a5Q0Sv{;Ss*RNu5Tr7| z3WfoL+DPA+th|gY7%2vAgmHOBi$`S=eM3TuCg;3$4u=!n>ln?%koXKgb{VnKd$NQx z#El4cO{*4|4ZBz?`Ni>VPr=8q_q^F~({$KV>x5FFw+c_S`7i#N6rLEKu*stJ#WCWy zt2myC$Dr>0U5g%&2MEU?#P+Y%u_fPci&DlwZ+6&~@~gAJi>NHEwGQ*ZHtExx~R~%L^u8A zqCk-^!x5wg+%9s%J$`VX=jm*CG3n$b*lFm#+9$iUCxRcB&A=Lh#{1m)?B0H5e7lUO z3dvTA{#i(rkW$caIcXr#^%(76=4({@f6iru9q!9+2=sJYDOGPDpHy1ah7BZSWE~kR zsWa*gTtBKmfFpXC4tfYy^rHKl8~{Pbf{_4z*FFp$Q5!k4EokBDj~cU&`vRDbf$h{B z3fOl6z(_(u(iadAKx(nx#wqrK8Ja~i$>SNv3|jS@)v3q1MYI=6k#7){|WQQpt<6fXkaY+u{*e+U?>q4C%*77fnCSFBMi{* zXrX?$X4n1rqk$JO9#OHPJ>-rkxyrc3Np^O&mYY=}hO7x=uH%kNJVNV{VB9V+R7F`E z$S`IElA(S6!t6l+*byMX!ym8qqih}D0mnZMrPsCKfTst;Be(2i-JXDM1y1J)jo)9g z!IG|*(Se1o$ib0;*d=tx&jo*YL{#o|;ETet^Fl92LTv~S8VlOcg2C|7_kEZKCop$L%tJkB5o46WOi-IA6wmK@VYa4~Sid z)AdMk+-5<5E5s27cB`N8^@=8Pz2iIv;?%RBdk=rm^kBT_8z=4lIN$maYJATC&L7gdpH zcWv+7Yh^lD36auG!>K)-HfR9!11%$WvB7% z>Pdz)7-Upsw)vNuF=E*(nTpnRfxS3G6H-VlJ^}Ytoc_lmVTm}Vv%wZ`wAPUyfeaC) zOzWPUA)rGNr(W$yyk%6z;Kl2tpFE?g1&QJBj`dDXrU6y-f`HW_>WOS%!j9yMu$5bX zOw7$5H?55EA}Ahcu>oCby=7UYxNS`LpMlB3)F{>N)nM@a`0jT=545_xyv#hY9Z<4U z)pQRE4P`WwJ>#5vZ`3#v^aP}!Xyf%Dpawu!GO@~Lz3C(Cq(mpKPprLOhkSE6%pDSi zU=#!B#s--Uzw!V`$Y}B89Od;J3{%$QkF(ss$8^ikt|ZnPz?f}gKr@|iPLl!n)Tbro z^WtCYcuAc1=(E=w(?7OvZui<~zynW7zwTP0Nb&+0Q1Sq8=H%=`OB^^#&tDdM0=r|4 zb#3-C@Z$}IbLvQCRA57a1@wj9ye;jETc{9GqnPdTS3SALk>HKQfc%T=O_%nxr1B{+ zcp8Y6FBpfq$P3Eg#9xgfPft&YdaJDWeds3Le(@&Xo*Eb0`O!%M^)Vst z*55NU^#BQ@#^Ra$iT#)H?u4>lWar0`NU1Y6OUazN%KzXZ`KEGo z!|9Gf3B59f|S>ppQ!g#ya-xX1bEwR(LSC)GQE=%%%w0iS{N z?ea`rVo4olhWzlf#a*PgTgaYioLNC3!L1rarQKw2P??%|&T2|^6;r1iT=A*arrr+c z6z}%mI2*eCsISa#Lma^w~CZ%KEckCqG7NHX=W6cHbDiTlwY z@TEMNIrq}yb*#9X{N~4d0aozv@itUoMEeJn%+zRK|Fz!IE~siOS&4IoJl^KQJ!>Jw zPZ6s!{Q58p)6`cy2ZRDlm*SJ71(4U2eof}nL|NOs+}swG6fKDYQAJZs!Hm{riNw2X zWBdP-j8yVZVL=!qB0%0V5Vc2Hf3u{taj0V*kN)AW)~RQ-r*`=EK8JY7zUd}cY^>bK zm~fu$qjn7-9Y&F#>{8IDk75gmIC&#FP+{9tCu-yiE0QNO*p(XLQT;raztp#)5O<9* z$EC@d!SBmc3ittd-91A=&$IlFh{aFeN?eTtzb8S6aD)anw_9yAnys78xy4L3lmTOYJEo*tWPYrLM5J5lA6+n-&N zdQ>`zuYq*(WI>xo(9|_BASr$&C)md3mt(&v>)!77;&RzWKN=l!4{O>z@Il`Tv_pKw z{#AK@XOn-az(gmrzJnK`a8KjfNb`V>KGWVfdR zR;vKFw5pJDS23l1cD`01SJ7idrAge4C6Pu(FsC;@C%DvjX^4=tQi2zWN#B$@P@>wP z0+zr)PoLxb;9l2~%Hr$=G?VwV4k_>1?(oOJsrKVnn`~P}Ro2%hG$g5X`ov`dH5Fe> zCZ2Mifr61kr_;-G>hRt=0-XM&weR*?8v}D$4I`;l^6D8t4j?R@)0>(v*NlQj(I_AV zi;A{lt>#!t1%<&!F2p`W?*uLa2ar-=LT(-KF7_*>8kNZ_T}w3TG|<$!l9^~yyppazERoHWIg|H?<#f^hFVnR{#Tm6|o zme7V{5eeL{D+5M?BgFwO8}JGd!Z4y(>8Lqh$e0~Yv`yD+j)PYrg1+loxXiNU=tnl3 za$L64T&*pa|A;GAU8%vlC~EA!+EZ@v}w;fDaB~tKU=m? zSxCt6vLk!+FlsD4NaVwmnzcf%i=M#)MW?N5s)x#s^_AZ(fC-2y9!sw55>ZGE zF|T8wi+<561btv;C6A*KSdN!6#{&YS35vlu`tdO^a$t&?m#7XLHbX$V6L8=Y$AA4a z#(e&T1at>zKl++v{Q`uT+JsME-#QH%B1GS9d4YplYUWo z+*i7~W-=a_>wgb(!7om~1VfCyQi_qEwwH%%x+x_Ey$@5C*WF`$h9_H6zSp`GTg)s{CM!8Ui&oL?_V%rCV&jbT1VLEwb zg6)ywR+V||Ja8BB5TF#&-HDYHiLqlHmqx2hq+X}ML`voK&I55)yfQLnC#uc z(t&Mgn=z3WBGC3qDq+CfNaiX4TblO;oH;wSWqaAH=`|2JJZ_Dd-UDLLpPg zg0p=m`s5fyl;?SzOj#bx3k@u?8I3Y?lR*34l_@$(c1D$Z35pr=JWgX?2(r^NO8m2} zolVsKr^qB2%)U9=h{!~U-7$z)w9X5zmHaRD-nPphF`&9YwfsUNk3E8)-Usye%j4?< zN7ofi5EaB$sP~+%ZCReCL5z+5T2@f6xx$Ljb-$ZJtigIQ?W%#X4qyIHLt>{Kau6t! zHMfwsc>YoC@X!`$A4;@r#}bmmPoX~XAC!l?PI!I2Yi6Vcdi_Vy*kJp<5c@zr_ppOT zF5|4=d3(;$QeC|s2P%| zh==2a(?r6lYJAacvE18pEyeplkig5D;lo;bl*#~(1pHF65?X3=b7|Uqgv0at4TMfV zoWnA`z`hBWQnAaSIF!`Ba03tDfA{M-D1ue6KTH%7LsEx`;8_ILGK zu(NPwQMOzq+@E7wyr^rP;`7Cy*EnOlq3HkpeY0LhcM7(xyY*t8|5bc)JL%z)J3tNy z_?as8Bc|p9wpYHS#D}#m?EVjf7$EZhT50tjLeC9vJ*xQ2J(}K_#H5Rkfpg(V3B+d2 z2m-K>HCi51__a86kBrwcu|}WtYjr_*#X<_zsE~?M0$2cRJk^EEz?nMK^XeJqieW)~O7|X2Gz4=Oh zz`=v{V#_YH+yaz3D*rI4){O=ev|6dMu`8O*0LvxHpQ?A2=xbZ~CH7ZXi+JaJr$_eb z`aZSB?v~)A4i8|8f9*|KNRpOt-P(Lmh+eKvAEP;i8>@Mi?w@f@`En_rM7*R>=G5Mn z#SicQy|pVG7m(esXWF89n-nC;p?wW2s~Li;0}4%5sJ;W`iKKBG(Ct4Z^}&2voV4TQ z^qN1St9ja1TyqM#aKZ_+0%_`H(Qg>EGdAR^4U*w(9Dvm}x~8?@Q#c#3q@(s&|74V# z0kN4iFgRMPj(3VF@)S`QCTbPBd~nd!{&Alt&ZWN`t*f~k*{qVvkrYnvV=+4&!dKH4 zHw}l%$PHsUI&4Bw!`^6)zJ#|+=->sC1O{yO8zm@5zFA;@)&3szB0f*}d|wt^+68YO zAIOHYV#i&X({3Q`IUQB>Ut+ho^=MOlR1lyjV^x3staJ*Y2zhF#a>Sq#N0q#osCNUz=q zZ_LhXA1c&A&!&wn%~3G6LahLK;Yh2~C;|BtaOs!nqk#j(^u>4$`Rcq-2mJt8l*vP> z=_K0bMs3YS_oPCvmJ!i~yg13eYP_=rV= z{Xx!O(Cqz01LCKkg~N9_XXc8d=we(kh3Cc=U+U*K;Db&8)G{P2Q3JI**;^&}3UJgy zho=0Tb}wKmM&pA{mTy%+o$X8z206|DL)TjXRoS*(|B4clA|+DN4T6AzbO>y^yEok+ z-5}E4DcxOyw6f`t?k;KRhVR7texC1r|KI#)7<3qCBkaAe^E!^T)^BMPS;!TdL&tVl zTL;riyK*@a{@!XZ&CSoh#d`5V(lxj~_%Ov?3#O@+w)JmblvZ_P^8iL48db#%(xTd! z-#}W_l{S6lqU$>}DYf_xusc=RU#lcZ;H~D+xmmH&io3{kBAZ>=Jp$^9rP3)bvxhhu7sO4mc8Yu;VBiYGOjHKfUL8^&AZaVuv_ z@KYEK0=d36mmpv{q{aPBIjieYf#CXxL6phAipo@$LAL+JxpOsCtBZQl!^gtb^?#u| zv81t6PL9uGjcsn0IOQ1liIj^52_y9ArA3eE_i4{B=kxolXe2aP&y7LTxWa6>u&`W+ z^tkDI7SC9d!An{v-ioYDuI2^_l33hdK5@zIGIf|D*sGhHraN2tKi&HeO^F*F?RmVdH|X{h{HI!1>>9`$NHnbfWZZ$;NrOQj;UT1 z(QBNjI}{3(N8AX^F*6J6MESOZ)W^udTaHnMa;JRIuJwoG0q02^L9K%S^=s>83Jtf2 z`+VWflT()_&ORPW>YPCORghfFMz(+_Jk+O#1j=Bp?^4k3*8js01H(cklBv%MS(!dK zN50&vma*+9N_mQr9B>LyX@W7f)pT*xdY-!2bwgK)J6dJ&@TcVfR&z_gf)Tj2W4qeB zwu@^h2$o3K#i;>q&*Zbq9`1;(iPp!Ki#D<0#DQ5i?;V%QePb))b$vgrbiA-a7~i|bt5Bi+Y1&a>8qQ8MKm>xQ})|Pn9pY8vYTK62eJkve7ctdn+7%Yf#qb^B*@xrLijot4OBhB=G>2sv+t*rnXRyiSIgZl#el;M|)-oT?TN(A_i_&oMh zwv3;M)j6l<>2WQ z3K5KvG3okk%ZC?O42=FNOq7W&J6>xo5ii*~bdq!sO^n1J?vWfxn>G(`g?cd?ZLsBZ8j3>Q%W>5(T#Fd{k{(-X>-U!z(cM zfkIgHq!k$eKkIrnNm^Bp?oF@$bAq(W)q?x2DrzR1-jUOdF59=(S44C6>St*@`1G?X z%roTp({E^D!Yq7uH-N|BeC;H^k2Z0f)s~3is!&|UZc0u+jjum%lb47x`TNB=B88ea z<&#QEu$(S=ubJg7zYv`}7=nY~RLAwxY~{Db2lj^S7@j>qi5^_`$k%GRsr3Z~NLI z3m}ncyK1|n^x>%uofCrW>o>FDK2F(uzJ5khGlcne(v5KlI(z# zT{&c^26;sFA>b@63P<}%hm&qr3y`Hl?BkZ7aVz_+mQl$8Yu}nfyo$395pPcDxHZ!-GNz4;zWrT%j@#V= zNMTu-*|Wny>kN7EloGLh639bO2ZwI0(kRTGbye;6i#s5FO0SOpVDF34{~q4_5F9O= zcs;ikaUbc7r}|reP%E=C206>bahV+_5?Js?XHz2WoB_ zw+tCCv_w$#y9hE!+043UohSU`k;44&xjL3fOC9bc%o~s9O~s|#Ckt*0x??l`vS=G| z@2~80o!ZxNKGL*ZMsJJmzR{a&Qe&w?;;uN*Q9oafre(1;`mgGf3xN2** z|MANXHocrM19PXt!)&OyQe zM0_e2uKweHOuk{!DJx{~Gyp0?IS5k@4Y50iJCA4;GJV`FR^xI?`rpyh>uL5QN^Cqi zb$567k|(B)Fa#mbP>cacCt_IR6Dgy(@7FzRTJ-&>RY`C?7e zFwzwVKkDd-z_B46F1gA(ybyjjD0VTnvS67)K_m*uOe7vO^xBbNu(~;lNqgIq#i)*( z#gw&~qWR?uV1V0P8H_j~1i2?)rqZi&{T5eaqq&U z2Pp;fCre6X- zDe2^R%;97xiW$%2jvLC32?Ecn95 zx!TvQKsMZ!=rhnU#ckm$md1*7qQZ%}C3sti^&ME`2Y&QEeb6!GvVV$+md;)BtGV3! zb6O1BXJro6<&$R5j;3UL=Cr2B8{X2?DC1Wt1ZY28AoxBvH+wt;ivR2+m||z-_^N8U zqMFeZA3d9l&iU@@xsM8twoE<5&mWu8abxx*0;LW}=ef5rxLnJSaWOqqqhwWX{b<+O>TP1q616oG%bcuR2eL zO!|Zs(>;=FlQsJJ0{1xn!rzumPtIwD5MpXbs2DaKb#Rh^OD7v_sE!xij+<1nkti4h zHc}(L3+hykK+QBHm1j|9^=`J_x%~=;Z!{fFEv*^|$3ZGQkf-G@O3`Ud6>EG)662vt z~Ur?mg3FzT484}Wc-tz3a0n*m78tep?u`Zz&2@rDne z+eTuuEa=4*P%KU;G>G)3`_}Gdyl(2pTrRQvykAd3LK0Drg3vE$mTCUdu_AncpLv^qn~1(%*JckXR}ISq=EVQl-v+q{=0^ z4gjQZNyQzS{^3C*t~pU+2swsY4n#MTDNOY#L3vX+L*tL0lI*L#-!Ninm5!^BXEWYb zALUgw`&GU=uwtHiK|If`DO@N(+G|Ag!vy5VSP_~+aPt5-KZryyYEb`i>F>RKuPg(O z5$Wt;mmt=bEHUCaw`7p8XKzr?JATVuan0tiuM%M-saY7@r-h9CQLslOR37Asa^J77 z$;69gPUfp-x)?2edqFT|0Ob9{0f@4)e(rlH8?v(cFu+Kbunq(G>B%%ftE{#1ocS1| zC`p9_BILytL+lQsXdSo-=4Er4BYEIox~?B1nurD1+J!?%DPeHWiZ`=|oHFtkzel8d znY{RGBbpZk!TikP$n4AT4&Z^-qI-%6v}_fV+pm~McYp3^f@~kBC=cqqtEvF`%AO9I4R@-H%_+b=Ia`3F)dWU2D*n7Q^Z_Zn(Be-^PVT4T7h}Swu^>&@ z+=j)4Xj@(t&q?GmOz~urrF(bASrhsuNNBFVbg8{pwzW$=klo~VO6FRq|lSW)>mbf-$&nj@En~{<$Kb=NVGn^SHXgdc|Uek8@+XETF`MBr~1^9%C9UEk~UknfU~jR8Q;2~gAHp$vKU z8!tm)@q6?QMS;8A)!MpC)f=02c`mID-jMfi++|)deTi&$0AbvZI|+OFV*6eou@UpK zdxzOpb1OdGNusqfhG}%M>oyxl2M&B6ZZT9eM^MQu7;C5z3MEPoLADKk#E; z+zr>jQxyazRZuZ=)@#ss@%aewzW9TFPXDBy+hJMh&VhSNpzZr(-c2ykR~eQPWoo$p z`Jst|U*EvrIj8k2a*MCY9|~-G50Ye3-Tz0D4A?>TmI!^&BT=ceBa<%f1fvd@#Al{8 zDwqmj5F&Jf_e$o>&x0_I=u7f}GO~DVW9{^VNdln-h5Drab4vG2YjiLru%>kR` z#j*FUP#fR$EIKbzAwESJugndz`B5N);yNAPyFJmH=h|YS8FOi4R+>>|RX+$ScN8bi zDR!n+|2)Q8&}u{B!V@O-+|RTIwNXb8=}R$wmc3&`{edR|Q%8>O zH|y~=3$)kojaBk@4eX7wtDS8AA^)e?I5`b{0#-%Xa>xo?E<8Mqi$VI^@@!1GF(;F^ z+Gr(0wh1u>!nBL-2AXdKKIbAV>6F}Qg-)=2y~jE*2j+AN*?7(o{DvUGatm_x-1}k()HJg#PpEAJeD-c!ri=Kd5*F@Nv#hy4s%&6w}kJsi&qFl^z2*Q1wQOuQWp> zl0<_3YPS4tW=GXXg>vd;PnOJ%|Cb6`D-cq&@;_zB*5Z`6^a6VY1zwnPO_4ZzG#c2) zKhopwlF{fY;NGXGOhrXPk9}#!; zjsxc(NB*%fQ;2Vkr^wTXwVS$AA#K-KiH`OP5=&jAS~=M5BU`J=bvoxSIGCL0t^Q+h zL1{uViMo6#VdDr2$k6kp)9h^Q?d@r?p2wRL;XQREZ>y0@kuBWu5ufp|POvmGe1J99 z?kZ~ehGP=C#;H_CAt+xunM~JGS*m&bV!Qm}pR-u8QAK9)G>5?X+ErGpbR^3edvl1O zl2DeZ?l|Y#M~_kXu{xWZ#6GKq7Hubl9-8Xn@4S=z^ONq7sT{?d${(Cj8IO6dY@Wqf z8nNC{Hk+QVG_R;5C7IRs1)0x+Wm|ktGULn%Qoic|U62I+3e={hS%aKX0k0~F^b0cl zTY$=~(AUaUkL*a&T|s;^E&SbJP9X^b+j{xUc%(~$f(2f4Qgc34`2W!%U#AB$rB_SM zd8{QfNw4iGsP1F28~;gt5EqH{ec2?$qCe__PmeivdGlNGBh zH9LJxHw59qUe-zh{X7p*%?J_I+1D6`aEHn-BW&n}>=2;0Lby$@PJ0jahj6&uxZ+pJ zjMR|ijuAJ1Uf-7VFMXJr9~D{AiEgm=yz4ypbSckGzvW**6cOM|tg(#N8^Y?3>hinw zuUMFGFlKvrd@Laa+LttBzv$`tcs(Y|{U7N}5*iAO2rJQ1zWbQL)Ii!uR0fKIao=RR z#5MY0J7c(zbK|!Gqlp335`UZjvgV{7)Wm_T8J`p7O{?||acMA3Y(-R2X#UoBFL|Ik=OEBs*o zfHTVK;qI>J@?V`%S^)02x|#$FJE4DRNjD_$*4O)yvEsY`0pnF#w#IpioqY$Xy761ajhWa?Vq5D8q@K| zw30z&PDF0wnIiy_b=N;&*Yuc`Fw^mA6=w69i&rwIDLYYBFIj-3763_Qt1Xtq1MK=t zfZWfCcKIE{|5tVF)Dq7DBrq}ub^b=;T1i&7I^mHf(;Y@AxWCA}C=NQgO`y-I*c$Nu zRLj^n)?MlGWA@lGy;`ogD7p}J{8v<%B`=>uj^RhNcu>$K9=x@;gFZSmw{i2Y-e?W= z`j6aLxITPPxlv>Alci_u3-YG_#X{>^omLNZNb=EvZ|vfp%gv*lcMCP!kvSMc^`7Sb z^49MFW%njcPLh?EOeo{8NCOWIhQW}W8!%xa4b?XGPRru9;#}YPAo92ei=NTG=COIl zaw-hreuflpx>Mrs>m(MOb`~RXVpkLaR^$@rn2kuKAQFq`($$If2NHlmi4TjJ17aK`e*cFwT4F+67v!yr#-yZrYK2Fx7#UD zb;mMN)-H^XA*eIRl;?E9*mpJJcnMfLde*6h&%Xd+Hw8gi*izr2g_eZxMT{=srU)k`|#h+P4 z)VxRN?T8-_*gDF6?{YtY7?M-gjaU6egAnj(B%%a{8=Gh}dUP0=fb)&wK<@JTL7xnd zqf|sI2k1?uBIRg~a!z414fxR&K(hrNI{AvjVjzjNVuBuuV+QN)rt7$&@2vgR7n3CupzxF!bW_0AcIc^&m0DqT!HKVu88I|C={|Os``u&WGfYBf8Em? zs?>gc>w-35gfeD-aGFK1ytF{0K(KIQ_gtqMZg1|Bq;d;N!*^NoI_}Jh;>G|JfCk6A zY_tR~hg@E{1JPvp2t)#LJ%!M&=gJqu))`aQT5eO&Ab~KP6Z;%IQ8aSwq|dcA99K&| zCR}dY(W-JG2`8DQ+_=8ebOBeq{>_@X7f@T}L>Z!H{w~!*MAb(~G+T@?2HUcn97VY^ zp+gT3_N1Xz#`qs;1QBwt>31DoDUo6Ds+c(ALnQjHnC_0hr5!PE(`G88mUupbxW%Hu z|8*@`;Q?pFXB*tlwZg)}P(vJgq`d#lF+nT5cDXgYhklT_n&%%X6}PU$2~%p-Ha z$JeKrQK^)$T@$Br#zM>LJ^mOsmU%JBdd3J_s0INy6);SaLf1vQ7EVooGwV}t|2SPT zpOc^dw;Q=J5>{y@BBl@V8a4N328oA^*(#~CODkY zh8DDs3(cQCm9r7R;$gH(*V_} zbdp(#Slb-30GK^Mp|Ck^tGn7j%|RyEkA{h+f9CGaMotsdZ(*&&80eo)7oTCeG9H zkwiaWyW#X@WL9LC7yr#g-Vn4Ape{2YnYUlV(KAWS1Vp2hLt2mfB?}+j?lzvMoRR)& ztjIUaxGRFWZ52D={dyqS^bL-i-d5dal@QL^C%>qo{yAZ{s(tIPf*51cA(19ETj6`r zSwNy>+k;3G1o}qQRGOAtJCIlVt(7$hM}4T-K5(ehy>gKQ%1K=>g{-{$ey{{+_$+Z& z&V2|;PTm4)_nKq<;U=*FI(NG-nS4z>-s!8k&%l;R17fv=X@vIOz=xO&)znNA$va=l zTkD-bqNz=^m`631f%T&3;&AyK&>zXxnBE`yZT_Age!C?}Jd`JBlTq(_dvOZ+j+2q7 zWK@hs^|c`Q?)LL~o(Fhq%cW7pIYc|-`EiLl&N( z+*@%}YcYErwtGxTPoSbIFjN)${{58nt~2iy^4^LFp{iv#@q2m*TIZ88zxQ=6qZ2`K zhMm1ES??)3sYB)ff$^g#S=R5Lra~~tcRiP<8b*`HWb%eHKOmT~u1^vKrLh(3Xl_pi z=+xPa=_xxXWB#5Sv|={A+P{qS^^cf@fA?d_)K~MHK2~kFA53>f2NB2#cBp)qen6Xz zXa(hDe$WJQJ@v3}GXp7~TR zo*$tTnTTVbkuheetQI?h(b*p#XHc@DKh6OfYSDHM;lX0H4O!A)G^bnBXl2SD1R?2z zrdhvA?7b}E(rI)zw^bcv3eSoy)%c!Jrk-Z*MQmjoIPU@gQEX{(sK>^xZ^um4)#hw$ z_(nUK^Z7uN@D*cmFYi-_RVB_@BB_RJZyZYCZDxc`_N0`O{OtgYAPS^1Rz?On^s4ny zo!H=uU0CAr^kSIjUHYf&wltKragz@Epw1=$!E zaFgGctcd=87IB+*f%dCjiU!t6@e4SSal3v{N>=pAzy8BZ%c4|eY^m+=huKA&h1X*j zj`C0#p|Aq*$t6NItg2O`PC-DDNUgzifW8gIb4If9n=r)aO?}FL1;YsvOc?2{E0xT~ zVDI+HZAr&VRsi~8?;-r~X;84!uhibHjyPW<6T6%$p9TV)K5PdOW|>D&nly1dib5U`YzKM(J*hcaB+T_d3$VSc^rAz@~>JU(&6`o@$)Rkv|??+}IK zSzmneUvY3?kVOvv%EE1?nNc1)IB!qT@YFeM-1r&El@Gaku!hcGZSd?911PKFdWgJN zE`$PQ(AW1t8I(+2GPh>*+mks>5d&r++@zr6k4GK9l00J+JHEw#uXW5u*01FpghX-H z--}MIRNGA8UfJr$e|Sk1F2;gpF6U9FyzI}`DRXisKZ3W)>3r?dUF2B%-H_7J{D4s% z8rz6bFV(`gt|zB0^EEWnw){qr*23`4b_Llr_FBddSE;Zl_#6uU6M#;_aE%#}SjyAyVQoo}9a|!51Wn1i#%DJ?cWiE-;8UjYX4zN7m@$ z*=4U$3Mt}0pjB`k%RxH`OQ&4itH;YB53oZw-2Fzv5&3X20ayDK{qXuA0GIqAA}suR zD#xa)Qz(nI9AS+PHR0)vm;qTrWTYf0qcMi+_M(+s;H;8p``L2`H79B{3N`Rt{1JX- z>UmzZ-j*@%v8>PO3?w~PIo5p5^+$H^Lf%5whj9OLP;tB3neXeNZ>kK|Pf3$b7+8

    AyD>3p!t~)wG?x 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 literal 0 HcmV?d00001 diff --git a/doc/specs/#4993 - Keyboard Selection/images/Y-Beam.png b/doc/specs/#4993 - Keyboard Selection/images/Y-Beam.png new file mode 100644 index 0000000000000000000000000000000000000000..da0f58929515084b75d9da7fb06ed83d0e9fa844 GIT binary patch literal 90355 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

    ;|EpiV5PPZjly%*06!$71np$y2zkJ5n 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 DhhIZ@ literal 0 HcmV?d00001 From e2cad94ce30a982e41728305c9f9540e41aebd42 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 4 Aug 2020 11:15:15 -0700 Subject: [PATCH 17/24] address zadji comments --- .../Keyboard-Selection.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index 04a7c299c6d..076e26c2607 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -73,8 +73,6 @@ For `SelectionExpansionMode = Buffer`, the selection anchor will be moved to the Every combination of the `Direction` and `SelectionExpansionMode` will map to a keybinding. These pairings are shown below in the UI/UX Design --> Keybindings section. -**NOTE**: If `copyOnSelect` is enabled, we need to make sure we update the clipboard on every change in selection. - ### Copy Mode @@ -119,8 +117,8 @@ If a selection exists, the user is basically already in Copy Mode. The user shou During Copy Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Copy Mode. The target endpoint being modified in Copy Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier in the flowchart). -#### Exiting Mark Mode -The user exits mark mode when the selection is cleared. Thus, the user can press... +#### Exiting Copy Mode +The user exits copy mode when the selection is cleared. Thus, the user can press... - the `ESC` key - the `copy` keybinding (which also copies the contents of the selection to the user's clipboard) - keys that generate input and clear a selection @@ -130,7 +128,7 @@ In all of these cases, the selection will be cleared. If `copyOnSelect` is enabled, `ESC` is interpreted as "cancelling" the selection, so nothing is copied. Keys that generate input are also interpreted as "cancelling" the selection. Only the `copy` keybinding or copying using the mouse is considered "completing" the selection operation, and copying the content to the clipboard. NOTE - Related to #3884: - If the user has chosen to have selections persist after a copy operation, the selection created by Mark Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. However, if the user exits Mark Mode in any of the other situations, the selection is cleared. + If the user has chosen to have selections persist after a copy operation, the selection created by Copy Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. However, if the user exits Copy Mode in any of the other situations, the selection is cleared. @@ -147,7 +145,7 @@ Thanks to Keybinding Args, there will only be 2 new commands that need to be add | | `Enum direction { up, down, left, right }` | The direction the selection will be moved in. | | | `Enum expandBy { cell, word, page, all }` | The context for which to move the selection anchor to. (defaults to `cell`) | `selectAll` | | Select the entire text buffer. -| `markMode` | | Cycle the selection point targeted by `moveSelectionPoint`. If no selection exists, a selection is created at the cursor. | +| `copyMode` | | Cycle the selection point targeted by `moveSelectionPoint`. If no selection exists, a selection is created at the cursor. | | `toggleBlockSelection` | | Transform the existing selection between a block selection and a line selection. | @@ -176,8 +174,8 @@ By default, the following keybindings will be set: // Select All { "command": "selectAll", "keys": "ctrl+shift+a" }, -// Mark Mode -{ "command": "markMode", "keys": "ctrl+shift+m" }, +// Copy Mode +{ "command": "copyMode", "keys": "ctrl+shift+m" }, { "command": "toggleBlockSelection", "keys": "alt+shift+m" }, ``` These are in accordance with ConHost's keyboard selection model. @@ -221,6 +219,9 @@ At the time of writing this spec, expanding or moving by word is interrupted by ### Contextual Keybindings This feature introduces a large number of keybindings that only work if a selection is active. Currently, key bindings cannot be bound to a context, so if a user binds `moveSelectionPoint` to `shift+up` and there is no selection, `shift+up` is sent directly to the Terminal. In the future, a `context` key could be added to new bindings to get around this problem. That way, users could bind other actions to `shift+up` to run specifically when a selection is not active. +### Copy Mode - Start in Block Selection +If requested by a user, a boolean `blockMode` keybinding argument can be added to `copyMode`. It will default to false. A user can set it to true to have `copyMode` start in block selection mode. + ## Resources From 246583b78d531c9e5fcde2490948367f0cf52e99 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 4 Aug 2020 13:42:44 -0700 Subject: [PATCH 18/24] exclude vsdx from spell checker --- .github/actions/spell-check/excludes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/spell-check/excludes.txt b/.github/actions/spell-check/excludes.txt index 97eb58e3ff7..43b1e837ab3 100644 --- a/.github/actions/spell-check/excludes.txt +++ b/.github/actions/spell-check/excludes.txt @@ -61,3 +61,4 @@ SUMS$ ^src/tools/U8U16Test/(?:fr|ru|zh)\.txt$ ^\.github/actions/spell-check/ ^\.gitignore$ +\.vsdx$ From 314d70cd693c5125cd3a4afabec10792fcd15b38 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 23 Sep 2021 16:03:01 -0700 Subject: [PATCH 19/24] update with upstream changes and address some missed feedback from Dustin --- .../Keyboard-Selection.md | 172 ++++++++++-------- .../images/CopyModeFlowchart.png | Bin 15506 -> 24288 bytes .../images/CopyModeFlowchart.vsdx | Bin 32618 -> 32486 bytes doc/specs/Keyboard-Selection.md | 171 ----------------- 4 files changed, 93 insertions(+), 250 deletions(-) delete mode 100644 doc/specs/Keyboard-Selection.md diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index 076e26c2607..f1c56f42309 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -1,7 +1,7 @@ --- author: Carlos Zamora @carlos-zamora created on: 2019-08-30 -last updated: 2020-06-26 +last updated: 2021-09-23 issue id: 715 --- @@ -9,33 +9,77 @@ issue id: 715 ## Abstract -This spec describes a new set of keybindings that allows the user to create and update a selection without the use of a mouse or stylus. +This spec describes a new set of key bindings that allows the user to create and update a selection without the use of a mouse or stylus. ## Inspiration -ConHost allows the user to modify a selection using the keyboard. Holding `Shift` allows the user to move the second selection endpoint in accordance with the arrow keys. The selection anchor updates by one cell per key event, allowing the user to refine the selected region. +ConHost allows the user to modify a selection using the keyboard. Holding `Shift` allows the user to move the second selection endpoint in accordance with the arrow keys. The selection endpoint updates by one cell per key event, allowing the user to refine the selected region. ### Creating a selection -Mark Mode is a ConHost feature that allows the user to create a selection using only the keyboard. In CMD, pressing ctrl+m toggles mark mode. The current cursor position becomes a selection endpoint. The user can use the arrow keys to move that endpoint. While the user then holds shift, the selection endpoint ('start') is anchored to it's current position, and the arrow keys move the other selection endpoint ('end'). After a selection is made, the user can copy the selected text. +Mark Mode is a ConHost feature that allows the user to create a selection using only the keyboard. In CMD, pressing ctrl+m enters mark mode. The current cursor position becomes a selection endpoint. The user can use the arrow keys to move that endpoint. While the user then holds shift, the selection endpoint ('start') is anchored to it's current position, and the arrow keys move the other selection endpoint ('end'). -Other terminal emulators have different approaches to this feature. iTerm2, for example, has Copy Mode (documentation [linked here](https://iterm2.com/documentation-copymode.html)). Here, cmd+shift+c makes the current cursor position become a selection endpoint. The arrow keys can be used to move that endpoint. However, unlike Mark Mode, a keybinding c+space is used to change the start/stop selecting. The first time it's pressed, the 'start' endpoint is anchored. The second time it's pressed, the 'end' endpoint is set. After this, you can still move a cursor, but the selection persists until a new selection is created (either by pressing the keybinding again, or using the mouse). +Additionally, pressing shift+arrow also initiates a selection, but it anchors the first selection endpoint to the cursor position. + +Other terminal emulators have different approaches to this feature. iTerm2, for example, has Copy Mode (documentation [linked here](https://iterm2.com/documentation-copymode.html)). Here, cmd+shift+c makes the current cursor position become a selection endpoint. The arrow keys can be used to move that endpoint. However, unlike Mark Mode, a key binding c+space is used to change the start/stop selecting. The first time it's pressed, the 'start' endpoint is anchored. The second time it's pressed, the 'end' endpoint is set. After this, you can still move a cursor, but the selection persists until a new selection is created (either by pressing the key binding again, or using the mouse). Though tmux is not a terminal emulator, it does also have Copy Mode that behaves fairly similarly to that of iTerm2's. ## Solution Design -The fundamental solution design for keyboard selection is that the responsibilities between the Terminal Control and Terminal Core must be very distinct. The Terminal Control is responsible for handling user interaction and directing the Terminal Core to update the selection. The Terminal Core will need to update the selection according to the preferences of the Terminal Control. +The fundamental solution design for keyboard selection is that the responsibilities between the Terminal Control and Terminal Core must be very distinct. The Terminal Control is responsible for handling user interaction and directing the Terminal Core to update the selection. The Terminal Core will need to update the selection according to the direction of the Terminal Control. Terminal Core maintains the state of the selection. +Relatively recently, TerminalControl was split into `TerminalControl`, `ControlInteractivity`, and `ControlCore`. Changes made to `ControlInteractivity`, `ControlCore`, and below propagate functionality to all consumers, meaning that the WPF terminal would benefit from these changes with no additional work required. ### Fundamental Terminal Control Changes -`TermControl::_KeyDownHandler()` is responsible for interpreting the key events. At the time of writing this spec, there are 3 cases handled in this order: -- Alt+Gr events -- Keybindings -- Send Key Event (also clears selection) +`ControlCore::TrySendKeyEvent()` is responsible for handling the key events after key bindings are dealt with in `TermControl`. At the time of writing this spec, there are 2 cases handled in this order: +- Clear the selection (except in a few key scenarios) +- Send Key Event + +The first branch will be updated to _modify_ the selection instead of usually _clearing_ it. This will happen by converting the key event into parameters to forward to `TerminalCore`, which then updates the selection appropriately. + +#### Idea: Make keyboard selection a collection of standard keybindings +One idea is to introduce an `updateSelection` action that conditionally works if a selection is active (similar to the `copy` action). For these key bindings, if there is no selection, the key events are forwarded to the application. + +Thanks to Keybinding Args, there would only be 1 new command: +| Action | Keybinding Args | Description | +|--|--|--| +| `updateSelection` | | If a selection exists, moves the last selection endpoint. | +| | `Enum direction { up, down, left, right }` | The direction the selection will be moved in. | +| | `Enum mode { char, word, view, buffer }` | The context for which to move the selection endpoint to. (defaults to `char`) | + + +By default, the following keybindings will be set: +```JS +// Character Selection +{ "command": {"action": "updateSelection", "direction": "left", "mode": "char" }, "keys": "shift+left" }, +{ "command": {"action": "updateSelection", "direction": "right", "mode": "char" }, "keys": "shift+right" }, +{ "command": {"action": "updateSelection", "direction": "up", "mode": "char" }, "keys": "shift+up" }, +{ "command": {"action": "updateSelection", "direction": "down", "mode": "char" }, "keys": "shift+down" }, + +// Word Selection +{ "command": {"action": "updateSelection", "direction": "left", "mode": "word" }, "keys": "ctrl+shift+left" }, +{ "command": {"action": "updateSelection", "direction": "right", "mode": "word" }, "keys": "ctrl+shift+right" }, + +// Viewport Selection +{ "command": {"action": "updateSelection", "direction": "left", "mode": "view" }, "keys": "shift+home" }, +{ "command": {"action": "updateSelection", "direction": "right", "mode": "view" }, "keys": "shift+end" }, +{ "command": {"action": "updateSelection", "direction": "up", "mode": "view" }, "keys": "shift+pgup" }, +{ "command": {"action": "updateSelection", "direction": "down", "mode": "view" }, "keys": "shift+pgdn" }, + +// Buffer Corner Selection +{ "command": {"action": "updateSelection", "direction": "up", "mode": "buffer" }, "keys": "ctrl+shift+home" }, +{ "command": {"action": "updateSelection", "direction": "down", "mode": "buffer" }, "keys": "ctrl+shift+end" }, +``` +These are in accordance with ConHost's keyboard selection model. -Conditionally effective keybindings can be introduced to update the selection accordingly. A well known conditionally effective keybinding is the `Copy` action where text is copied if a selection is active, otherwise the key event is marked as `handled = false`. See "UI/UX Design" --> "Keybindings" for more information regarding keybindings. +This idea was abandoned due to several reasons: +1. Keyboard selection should be a standard way to interact with a terminal across all consumers (i.e. WPF control, etc.) +2. There isn't really another set of key bindings that makes sense for this. We already hardcoded ESC as a way to clear the selection. This is just an extension of that. +3. Adding 12 conditionally effective key bindings takes the spot of 12 potential non-conditional key bindings. It would be nice if a different key binding could be set when the selection is not active, but that makes the settings design much more complicated. +4. 12 new items in the command palette is also pretty excessive. +5. If proven wrong when this is in WT Preview, we can revisit this and make them customizable then. It's better to add the ability to customize it later than take it away. #### Idea: Make keyboard selection a simulation of mouse selection It may seem that some effort can be saved by making the keyboard selection act as a simulation of mouse selection. There is a union of mouse and keyboard activity that can be represented in a single set of selection motion interfaces that are commanded by the TermControl's Mouse/Keyboard handler and adapted into appropriate motions in the Terminal Core. @@ -45,46 +89,48 @@ However, the mouse handler operates by translating a pixel coordinate on the scr ### Fundamental Terminal Core Changes -The Terminal Core will need to expose a `MoveSelectionEndpoint()` function that is called by the keybinding handler. The following parameters will need to be passed in: -- `enum Direction`: the direction that the selection anchor will attempt to move to. Possible values include `Up`, `Down`, `Left`, and `Right`. -- `enum SelectionExpansionMode`: the selection expansion mode that the selection anchor will adhere to. Possible values include `Cell`, `Word`, `Viewport`, `Buffer`. +The Terminal Core will need to expose a `UpdateSelection()` function that is called by the keybinding handler. The following parameters will need to be passed in: +- `enum SelectionDirection`: the direction that the selection endpoint will attempt to move to. Possible values include `Up`, `Down`, `Left`, and `Right`. +- `enum SelectionExpansion`: the selection expansion mode that the selection endpoint will adhere to. Possible values include `Char`, `Word`, `View`, `Buffer`. #### Moving by Cell -For `SelectionExpansionMode = Cell`, the selection anchor will be updated according to the buffer's output pattern. For **horizontal movements**, the selection anchor will attempt to move left or right. If a viewport boundary is hit, the anchor will wrap appropriately (i.e.: hitting the left boundary moves it to the last cell of the line above it). +For `SelectionExpansion = Char`, the selection endpoint will be updated according to the buffer's output pattern. For **horizontal movements**, the selection endpoint will attempt to move left or right. If a viewport boundary is hit, the endpoint will wrap appropriately (i.e.: hitting the left boundary moves it to the last cell of the line above it). -For **vertical movements**, the selection anchor will attempt to move up or down. If a **viewport boundary** is hit and there is a scroll buffer, the anchor will move and scroll accordingly by a line. If a **buffer boundary** is hit, the anchor will not move. In this case, however, the event will still be considered handled. +For **vertical movements**, the selection endpoint will attempt to move up or down. If a **viewport boundary** is hit and there is a scroll buffer, the endpoint will move and scroll accordingly by a line. -**NOTE**: An important thing to handle properly in all cases is wide glyphs. The user should not be allowed to select a portion of a wide glyph; it should be all or none of it. When calling `_ExpandWideGlyphSelection` functions, the result must be saved to the anchor. +If a **buffer boundary** is hit, the endpoint will not move. In this case, however, the event will still be considered handled. + +**NOTE**: An important thing to handle properly in all cases is wide glyphs. The user should not be allowed to select a portion of a wide glyph; it should be all or none of it. When calling `_ExpandWideGlyphSelection` functions, the result must be saved to the endpoint. #### Moving by Word -For `SelectionExpansionMode = Word`, the selection anchor will also be updated according to the buffer's output pattern, as above. However, the selection will be updated in accordance with "chunk selection" (performing a double-click and dragging the mouse to expand the selection). For **horizontal movements**, the selection anchor will be updated according to the `_ExpandDoubleClickSelection` functions. The result must be saved to the anchor. As before, if a boundary is hit, the anchor will wrap appropriately. See [Future Considerations](#FutureConsiderations) for how this will interact with line wrapping. +For `SelectionExpansion = Word`, the selection endpoint will also be updated according to the buffer's output pattern, as above. However, the selection will be updated in accordance with "chunk selection" (performing a double-click and dragging the mouse to expand the selection). For **horizontal movements**, the selection endpoint will be updated according to the `_ExpandDoubleClickSelection` functions. The result must be saved to the endpoint. As before, if a boundary is hit, the endpoint will wrap appropriately. See [Future Considerations](#FutureConsiderations) for how this will interact with line wrapping. -For **vertical movements**, the movement is a little more complicated than before. The selection will still respond to buffer and viewport boundaries as before. If the user is trying to move up, the selection anchor will attempt to move up by one line, then selection will be expanded leftwards. Alternatively, if the user is trying to move down, the selection anchor will attempt to move down by one line, then the selection will be expanded rightwards. +For **vertical movements**, the movement is a little more complicated than before. The selection will still respond to buffer and viewport boundaries as before. If the user is trying to move up, the selection endpoint will attempt to move up by one line, then selection will be expanded leftwards. Alternatively, if the user is trying to move down, the selection endpoint will attempt to move down by one line, then the selection will be expanded rightwards. #### Moving by Viewport -For `SelectionExpansionMode = Viewport`, the selection anchor will be updated according to the viewport's height. Horizontal movements will be updated according to the viewport's width, thus resulting in the anchor being moved to the left/right boundary of the viewport. +For `SelectionExpansion = View`, the selection endpoint will be updated according to the viewport's height. Horizontal movements will be updated according to the viewport's width, thus resulting in the endpoint being moved to the left/right boundary of the viewport. #### Moving by Buffer -For `SelectionExpansionMode = Buffer`, the selection anchor will be moved to the beginning or end of all the text within the buffer. If moving up or left, set the position to 0,0 (the origin of the buffer). If moving down or right, set the position to the last character in the buffer. +For `SelectionExpansion = Buffer`, the selection endpoint will be moved to the beginning or end of all the text within the buffer. If moving up or left, set the position to 0,0 (the origin of the buffer). If moving down or right, set the position to the last character in the buffer. **NOTE**: In all cases, horizontal movements attempting to move past the left/right viewport boundaries result in a wrap. Vertical movements attempting to move past the top/bottom viewport boundaries will scroll such that the selection is at the edge of the screen. Vertical movements attempting to move past the top/bottom buffer boundaries will be clamped to be within buffer boundaries. -Every combination of the `Direction` and `SelectionExpansionMode` will map to a keybinding. These pairings are shown below in the UI/UX Design --> Keybindings section. - - +**NOTE**: If `copyOnSelect` is enabled, we need to make sure we **DO NOT** update the clipboard on every change in selection. The user must explicitly choose to copy the selected text from the buffer. ### Copy Mode -Copy Mode is a mode where the user can create and modify a selection using only the keyboard. The following flowchart covers how the new `copyMode` keybinding works: +Copy Mode is a mode where the user can create and modify a selection using only the keyboard. The following flowchart covers how the new `copymode()` action works: ![Copy Mode Flowchart][images/CopyModeFlowchart.png] -If a selection is not active, a "start" and "end" selection point is created at the cursor position. `moveSelectionPoint` calls then move "start" and "end" together as one position. This position will be denoted with a "y-beam". +**NOTE**: `copyMode()` refers to the action, whereas `updateSelection()` refers to the underlying function that is being called in the code. + +If a selection is not active, a "start" and "end" selection point is created at the cursor position. `updateSelection()` calls then move "start" and "end" together as one position. This position will be denoted with a "y-beam". ![Y-Beam Example][images/Y-Beam.png] -If a selection is active, `copyMode` leaves the selection untouched, all subsequent `moveSelectionPoint` calls move "start". The y-beam is then cut vertically in half, where one half is drawn on the "start" endpoint, and the other half is drawn on the "end" endpoint. Since the user is moving "start", only the half-y-beam is drawn on the "start" endpoint. +If a selection is active, `copyMode` leaves the selection untouched, all subsequent `updateSelection()` calls move "start". The y-beam is then cut vertically in half, where one half is drawn on the "start" endpoint, and the other half is drawn on the "end" endpoint. Since the user is moving "start", only the half-y-beam is drawn on the "start" endpoint. ![Separated Y-Beam Example][images/Half-Y-Beam.png] @@ -92,19 +138,19 @@ If a selection is active, `copyMode` leaves the selection untouched, all subsequ ![Both Separated Y-Beams Example][images/Split-Y-Beam.png] -Pressing `copyMode` again, will then anchor "start". Subsequent `moveSelectionPoint` calls move the "end" selection point. As before, the half-y-beam is only drawn on the "end" to denote that this is the endpoint that is being moved. +Invoking `copyMode()` again, will then anchor "start" (meaning that it will be kept in place). Subsequent `updateSelection()` calls move the "end" selection point. As before, the half-y-beam is only drawn on the "end" to denote that this is the endpoint that is being moved. -Pressing `copyMode` essentially cycles between which selection point is targeted. The half-y-beam is drawn on the targeted endpoint. +Invoking `copyMode()` essentially cycles between which selection point is targeted. The half-y-beam is drawn on the targeted endpoint. #### Block Selection A user can normally create a block selection by holding alt then creating a selection. -If the user is in Copy Mode, and desires to make a block selection, they can use the `toggleBlockSelection` keybinding. `toggleBlockSelection` takes an existing selection, and transforms it into a block selection. +If the user is in Copy Mode, and desires to make a block selection, they can use the `toggleBlockSelection()` action. `toggleBlockSelection()` takes an existing selection, and transforms it into a block selection (or vice-versa). All selections created in Copy Mode will have block selection disabled by default. #### Rendering during Copy Mode -Since we are just moving the selection points, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection point past the top/bottom of the viewport. +Since we are just moving the selection endpoints, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection point past the top/bottom of the viewport. In ConHost, output would be paused when a selection was present. Windows Terminal does not pause the output when a selection is present, however, it does not scroll to the new output. @@ -112,73 +158,44 @@ In ConHost, output would be paused when a selection was present. Windows Termina If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". Thus, the selection is copied when the `copy` keybinding is used or the selection is copied using the mouse. #### Interaction with Mouse Selection -If a selection exists, the user is basically already in Copy Mode. The user should be modifying the "end" endpoint of the selection when using the `moveSelectionPoint` keybindings. The existing selection should not be cleared (contrary to prior behavior). However, the half-y-beam will not be drawn. Once the user presses the `copyMode` or `moveSelectionPoint` keybinding, the half-y-beam is drawn on the targeted endpoint (which will then be "start"). +If a selection exists, the user is basically already in Copy Mode. The user should be modifying the "end" endpoint of the selection when using the `updateSelection()` bindings. The existing selection should not be cleared (contrary to prior behavior). However, the half-y-beam will not be drawn. Once the user presses the `copyMode` or `moveSelectionPoint` keybinding, the half-y-beam is drawn on the targeted endpoint (which will then be "start"). During Copy Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Copy Mode. The target endpoint being modified in Copy Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier in the flowchart). - #### Exiting Copy Mode The user exits copy mode when the selection is cleared. Thus, the user can press... - the `ESC` key -- the `copy` keybinding (which also copies the contents of the selection to the user's clipboard) +- the `copy()` action (which also copies the contents of the selection to the user's clipboard) - keys that generate input and clear a selection In all of these cases, the selection will be cleared. If `copyOnSelect` is enabled, `ESC` is interpreted as "cancelling" the selection, so nothing is copied. Keys that generate input are also interpreted as "cancelling" the selection. Only the `copy` keybinding or copying using the mouse is considered "completing" the selection operation, and copying the content to the clipboard. -NOTE - Related to #3884: +**NOTE** - Related to #3884: If the user has chosen to have selections persist after a copy operation, the selection created by Copy Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. However, if the user exits Copy Mode in any of the other situations, the selection is cleared. - - ## UI/UX Design -### Keybindings +### Key Bindings -Thanks to Keybinding Args, there will only be 2 new commands that need to be added: +There will only be 1 new command that needs to be added: | Action | Keybinding Args | Description | |--|--|--| -| `moveSelectionPoint` | | If a selection exists, moves the last selection anchor. -| | `Enum direction { up, down, left, right }` | The direction the selection will be moved in. | -| | `Enum expandBy { cell, word, page, all }` | The context for which to move the selection anchor to. (defaults to `cell`) -| `selectAll` | | Select the entire text buffer. +| `selectAll` | | Select the entire text buffer. | | `copyMode` | | Cycle the selection point targeted by `moveSelectionPoint`. If no selection exists, a selection is created at the cursor. | | `toggleBlockSelection` | | Transform the existing selection between a block selection and a line selection. | - -By default, the following keybindings will be set: +By default, the following key binding will be set: ```JS -// Cell Selection -{ "command": { "action": "moveSelectionPoint", "direction": "down" }, "keys": "shift+down" }, -{ "command": { "action": "moveSelectionPoint", "direction": "up" }, "keys": "shift+up" }, -{ "command": { "action": "moveSelectionPoint", "direction": "left" }, "keys": "shift+left" }, -{ "command": { "action": "moveSelectionPoint", "direction": "right" }, "keys": "shift+right" }, - -// Word Selection -{ "command": { "action": "moveSelectionPoint", "direction": "left", "expandBy": "word" }, "keys": "ctrl+shift+left" }, -{ "command": { "action": "moveSelectionPoint", "direction": "right", "expandBy": "word" }, "keys": "ctrl+shift+right" }, - -// Viewport Selection -{ "command": { "action": "moveSelectionPoint", "direction": "left", "expandBy": "page" }, "keys": "shift+home" }, -{ "command": { "action": "moveSelectionPoint", "direction": "right", "expandBy": "page" }, "keys": "shift+end" }, -{ "command": { "action": "moveSelectionPoint", "direction": "up", "expandBy": "page" }, "keys": "shift+pgup" }, -{ "command": { "action": "moveSelectionPoint", "direction": "down", "expandBy": "page" }, "keys": "shift+pgdn" }, - -// Buffer Corner Selection -{ "command": { "action": "moveSelectionPoint", "direction": "up", "expandBy": "all" }, "keys": "ctrl+shift+home" }, -{ "command": { "action": "moveSelectionPoint", "direction": "down", "expandBy": "all" }, "keys": "ctrl+shift+end" }, - -// Select All { "command": "selectAll", "keys": "ctrl+shift+a" }, // Copy Mode { "command": "copyMode", "keys": "ctrl+shift+m" }, { "command": "toggleBlockSelection", "keys": "alt+shift+m" }, ``` -These are in accordance with ConHost's keyboard selection model. ## Capabilities @@ -186,8 +203,6 @@ These are in accordance with ConHost's keyboard selection model. Using the keyboard is generally a more accessible experience than using the mouse. Being able to modify a selection by using the keyboard is a good first step towards making selecting text more accessible. -Being able to create and update a selection without the use of a mouse is a very important feature to users with disabilities. The UI Automation system is already set up to detect changes to the active selection, so as long as the UiaRenderer is notified of changes to the selection, this experience should be accessible. - ### Security N/A @@ -204,23 +219,22 @@ N/A ### Performance, Power, and Efficiency -## Potential Issues - -The settings model makes all of these features easy to disable, if the user wishes to do so. +N/A -## Future considerations +## Potential Issues ### Grapheme Clusters When grapheme cluster support is inevitably added to the Text Buffer, moving by "cell" is expected to move by "character" or "cluster". This is similar to how wide glyphs are handled today. Either all of it is selected, or none of it. -### Word Selection Wrap -At the time of writing this spec, expanding or moving by word is interrupted by the beginning or end of the line, regardless of the wrap flag being set. In the future, selection and the accessibility models will respect the wrap flag on the text buffer. +### Circling the buffer +As usual, if the buffer is circling, the selection should be updated to follow the content (and "scroll up" appropriately). + +In the event that one endpoint "scrolls" off the buffer, we must clamp "start" to the buffer origin. Conversely, in the event that both endpoints "scroll" off the buffer, the selection must be considered cleared. -### Contextual Keybindings -This feature introduces a large number of keybindings that only work if a selection is active. Currently, key bindings cannot be bound to a context, so if a user binds `moveSelectionPoint` to `shift+up` and there is no selection, `shift+up` is sent directly to the Terminal. In the future, a `context` key could be added to new bindings to get around this problem. That way, users could bind other actions to `shift+up` to run specifically when a selection is not active. +## Future considerations -### Copy Mode - Start in Block Selection -If requested by a user, a boolean `blockMode` keybinding argument can be added to `copyMode`. It will default to false. A user can set it to true to have `copyMode` start in block selection mode. +### Word Selection Wrap +At the time of writing this spec, expanding or moving by word is interrupted by the beginning or end of the line, regardless of the wrap flag being set. In the future, selection and the accessibility models will respect the wrap flag on the text buffer. ## Resources diff --git a/doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.png b/doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.png index fe66bf616e03e2a6d3b534ff1e3186d8a3872e3f..65854f71d034a08776fcde19af40f03bb9749c9b 100644 GIT binary patch literal 24288 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%0D_Co$Qj%X( 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 F{{|k-_6h(1 diff --git a/doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.vsdx b/doc/specs/#4993 - Keyboard Selection/images/CopyModeFlowchart.vsdx index 638c6bfd0f88fe3c28c2cc72814ebf6b0501f1cf..3611bc7f97df6f63561b6ea2ca7e4733fe4cdb44 100644 GIT binary patch delta 14660 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 delta 14859 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 diff --git a/doc/specs/Keyboard-Selection.md b/doc/specs/Keyboard-Selection.md deleted file mode 100644 index f9954fca715..00000000000 --- a/doc/specs/Keyboard-Selection.md +++ /dev/null @@ -1,171 +0,0 @@ ---- -author: Carlos Zamora @carlos-zamora -created on: 2019-08-30 -last updated: 2021-09-17 -issue id: 715 ---- - -# Keyboard Selection - -## Abstract - -This spec describes a new set of non-configurable keybindings that allows the user to update a selection without the use of a mouse or stylus. - -## Inspiration - -ConHost allows the user to modify a selection using the keyboard. Holding `Shift` allows the user to move the second selection endpoint in accordance with the arrow keys. The selection endpoint updates by one cell per key event, allowing the user to refine the selected region. - -Mark mode allows the user to create a selection using only the keyboard, then edit it as mentioned above. - - -## Solution Design - -The fundamental solution design for keyboard selection is that the responsibilities between the Terminal Control and Terminal Core must be very distinct. The Terminal Control is responsible for handling user interaction and directing the Terminal Core to update the selection. The Terminal Core will need to update the selection according to the preferences of the Terminal Control. - -Relatively recently, TerminalControl was split into `TerminalControl`, `ControlInteractivity`, and `ControlCore`. Changes made to `ControlInteractivity`, `ControlCore`, and below propagate functionality to all consumers, meaning that the WPF terminal would benefit from these changes with no additional work required. - -### Fundamental Terminal Control Changes - -`ControlCore::TrySendKeyEvent()` is responsible for handling the key events after key bindings are dealt with in `TermControl`. At the time of writing this spec, there are 2 cases handled in this order: -- Clear the selection (except in a few key scenarios) -- Send Key Event - -The first branch will be updated to _modify_ the selection instead of usually _clearing_ it. This will happen by converting the key event into parameters to forward to `TerminalCore`, which then updates the selection appropriately. - -#### Idea: Make keyboard selection a collection of standard keybindings -One idea is to introduce an `updateSelection` action that conditionally works if a selection is active (similar to the `copy` action). For these key bindings, if there is no selection, the key events are forwarded to the application. - -Thanks to Keybinding Args, there would only be 1 new command: -| Action | Keybinding Args | Description | -|--|--|--| -| `updateSelection` | | If a selection exists, moves the last selection endpoint. | -| | `Enum direction { up, down, left, right }` | The direction the selection will be moved in. | -| | `Enum mode { char, word, view, buffer }` | The context for which to move the selection endpoint to. (defaults to `char`) | - - -By default, the following keybindings will be set: -```JS -// Character Selection -{ "command": {"action": "updateSelection", "direction": "left", "mode": "char" }, "keys": "shift+left" }, -{ "command": {"action": "updateSelection", "direction": "right", "mode": "char" }, "keys": "shift+right" }, -{ "command": {"action": "updateSelection", "direction": "up", "mode": "char" }, "keys": "shift+up" }, -{ "command": {"action": "updateSelection", "direction": "down", "mode": "char" }, "keys": "shift+down" }, - -// Word Selection -{ "command": {"action": "updateSelection", "direction": "left", "mode": "word" }, "keys": "ctrl+shift+left" }, -{ "command": {"action": "updateSelection", "direction": "right", "mode": "word" }, "keys": "ctrl+shift+right" }, - -// Viewport Selection -{ "command": {"action": "updateSelection", "direction": "left", "mode": "view" }, "keys": "shift+home" }, -{ "command": {"action": "updateSelection", "direction": "right", "mode": "view" }, "keys": "shift+end" }, -{ "command": {"action": "updateSelection", "direction": "up", "mode": "view" }, "keys": "shift+pgup" }, -{ "command": {"action": "updateSelection", "direction": "down", "mode": "view" }, "keys": "shift+pgdn" }, - -// Buffer Corner Selection -{ "command": {"action": "updateSelection", "direction": "up", "mode": "buffer" }, "keys": "ctrl+shift+home" }, -{ "command": {"action": "updateSelection", "direction": "down", "mode": "buffer" }, "keys": "ctrl+shift+end" }, -``` -These are in accordance with ConHost's keyboard selection model. - -This idea was abandoned due to several reasons: -1. Keyboard selection should be a standard way to interact with a terminal across all consumers (i.e. WPF control, etc.) -2. There isn't really another set of key bindings that makes sense for this. We already hardcoded ESC as a way to clear the selection. This is just an extension of that. -3. Adding 12 conditionally effective key bindings takes the spot of 12 potential non-conditional key bindings. It would be nice if a different key binding could be set when the selection is not active, but that makes the settings design much more complicated. -4. 12 new items in the command palette is also pretty excessive. -5. If proven wrong when this is in WT Preview, we can revisit this and make them customizable then. It's better to add the ability to customize it later than take it away. - -#### Idea: Make keyboard selection a simulation of mouse selection -It may seem that some effort can be saved by making the keyboard selection act as a simulation of mouse selection. There is a union of mouse and keyboard activity that can be represented in a single set of selection motion interfaces that are commanded by the TermControl's Mouse/Keyboard handler and adapted into appropriate motions in the Terminal Core. - -However, the mouse handler operates by translating a pixel coordinate on the screen to a text buffer coordinate. This would have to be rewritten and the approach was deemed unworthy. - - -### Fundamental Terminal Core Changes - -The Terminal Core will need to expose a `UpdateSelection()` function that is called by the keybinding handler. The following parameters will need to be passed in: -- `enum SelectionDirection`: the direction that the selection endpoint will attempt to move to. Possible values include `Up`, `Down`, `Left`, and `Right`. -- `enum SelectionExpansion`: the selection expansion mode that the selection endpoint will adhere to. Possible values include `Char`, `Word`, `View`, `Buffer`. - -#### Moving by Cell -For `SelectionExpansion = Char`, the selection endpoint will be updated according to the buffer's output pattern. For **horizontal movements**, the selection endpoint will attempt to move left or right. If a viewport boundary is hit, the endpoint will wrap appropriately (i.e.: hitting the left boundary moves it to the last cell of the line above it). - -For **vertical movements**, the selection endpoint will attempt to move up or down. If a **viewport boundary** is hit and there is a scroll buffer, the endpoint will move and scroll accordingly by a line. - -If a **buffer boundary** is hit, the endpoint will not move. In this case, however, the event will still be considered handled. - -**NOTE**: An important thing to handle properly in all cases is wide glyphs. The user should not be allowed to select a portion of a wide glyph; it should be all or none of it. When calling `_ExpandWideGlyphSelection` functions, the result must be saved to the endpoint. - -#### Moving by Word -For `SelectionExpansion = Word`, the selection endpoint will also be updated according to the buffer's output pattern, as above. However, the selection will be updated in accordance with "chunk selection" (performing a double-click and dragging the mouse to expand the selection). For **horizontal movements**, the selection endpoint will be updated according to the `_ExpandDoubleClickSelection` functions. The result must be saved to the endpoint. As before, if a boundary is hit, the endpoint will wrap appropriately. See [Future Considerations](#FutureConsiderations) for how this will interact with line wrapping. - -For **vertical movements**, the movement is a little more complicated than before. The selection will still respond to buffer and viewport boundaries as before. If the user is trying to move up, the selection endpoint will attempt to move up by one line, then selection will be expanded leftwards. Alternatively, if the user is trying to move down, the selection endpoint will attempt to move down by one line, then the selection will be expanded rightwards. - -#### Moving by Viewport -For `SelectionExpansion = View`, the selection endpoint will be updated according to the viewport's height. Horizontal movements will be updated according to the viewport's width, thus resulting in the endpoint being moved to the left/right boundary of the viewport. - -#### Moving by Buffer - -For `SelectionExpansion = Buffer`, the selection endpoint will be moved to the beginning or end of all the text within the buffer. If moving up or left, set the position to 0,0 (the origin of the buffer). If moving down or right, set the position to the last character in the buffer. - - -**NOTE**: In all cases, horizontal movements attempting to move past the left/right viewport boundaries result in a wrap. Vertical movements attempting to move past the top/bottom viewport boundaries will scroll such that the selection is at the edge of the screen. Vertical movements attempting to move past the top/bottom buffer boundaries will be clamped to be within buffer boundaries. - -Every combination of the `SelectionDirection` and `SelectionExpansion` will map to a keybinding. These pairings are shown below in the UI/UX Design --> Keybindings section. - -**NOTE**: If `copyOnSelect` is enabled, we need to make sure we **DO NOT** update the clipboard on every change in selection. The user must explicitly choose to copy the selected text from the buffer. - - -## UI/UX Design - -### Key Bindings - -There will only be 1 new command that needs to be added: -| Action | Keybinding Args | Description | -|--|--|--| -| `selectAll` | | Select the entire text buffer. - -By default, the following key binding will be set: -```JS -{ "command": "selectAll", "keys": "ctrl+shift+a" }, -``` - -## Capabilities - -### Accessibility - -Using the keyboard is generally a more accessible experience than using the mouse. Being able to modify a selection by using the keyboard is a good first step towards making selecting text more accessible. - -### Security - -N/A - -### Reliability - -With regards to the Terminal Core, the newly introduced code should rely on already existing and tested code. Thus no crash-related bugs are expected. - -With regards to Terminal Control and the settings model, crash-related bugs are not expected. However, ensuring that the selection is updated and cleared in general use-case scenarios must be ensured. - -### Compatibility - -N/A - -### Performance, Power, and Efficiency - -## Potential Issues - -### Grapheme Clusters -When grapheme cluster support is inevitably added to the Text Buffer, moving by "cell" is expected to move by "character" or "cluster". This is similar to how wide glyphs are handled today. Either all of it is selected, or none of it. - -## Future considerations - -### Word Selection Wrap -At the time of writing this spec, expanding or moving by word is interrupted by the beginning or end of the line, regardless of the wrap flag being set. In the future, selection and the accessibility models will respect the wrap flag on the text buffer. - -## Mark Mode - -This functionality will be expanded to create a feature similar to Mark Mode. This will allow a user to create a selection using only the keyboard. - - -## Resources - -- https://blogs.windows.com/windowsdeveloper/2014/10/07/console-improvements-in-the-windows-10-technical-preview/ From ec24abfb5654a6ecf908176e89bae35a8d0bb819 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Wed, 1 Jun 2022 15:58:11 -0700 Subject: [PATCH 20/24] update spec to use simpler mark mode design --- .../Keyboard-Selection.md | 105 ++++++++++++------ 1 file changed, 68 insertions(+), 37 deletions(-) diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index f1c56f42309..aa6781be2a8 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -1,7 +1,7 @@ --- author: Carlos Zamora @carlos-zamora created on: 2019-08-30 -last updated: 2021-09-23 +last updated: 2022-06-1 issue id: 715 --- @@ -39,7 +39,7 @@ Relatively recently, TerminalControl was split into `TerminalControl`, `ControlI The first branch will be updated to _modify_ the selection instead of usually _clearing_ it. This will happen by converting the key event into parameters to forward to `TerminalCore`, which then updates the selection appropriately. -#### Idea: Make keyboard selection a collection of standard keybindings +#### Abandoned Idea: Make keyboard selection a collection of standard keybindings One idea is to introduce an `updateSelection` action that conditionally works if a selection is active (similar to the `copy` action). For these key bindings, if there is no selection, the key events are forwarded to the application. Thanks to Keybinding Args, there would only be 1 new command: @@ -81,7 +81,7 @@ This idea was abandoned due to several reasons: 4. 12 new items in the command palette is also pretty excessive. 5. If proven wrong when this is in WT Preview, we can revisit this and make them customizable then. It's better to add the ability to customize it later than take it away. -#### Idea: Make keyboard selection a simulation of mouse selection +#### Abandoned Idea: Make keyboard selection a simulation of mouse selection It may seem that some effort can be saved by making the keyboard selection act as a simulation of mouse selection. There is a union of mouse and keyboard activity that can be represented in a single set of selection motion interfaces that are commanded by the TermControl's Mouse/Keyboard handler and adapted into appropriate motions in the Terminal Core. However, the mouse handler operates by translating a pixel coordinate on the screen to a text buffer coordinate. This would have to be rewritten and the approach was deemed unworthy. @@ -119,74 +119,84 @@ For `SelectionExpansion = Buffer`, the selection endpoint will be moved to the b **NOTE**: If `copyOnSelect` is enabled, we need to make sure we **DO NOT** update the clipboard on every change in selection. The user must explicitly choose to copy the selected text from the buffer. -### Copy Mode -Copy Mode is a mode where the user can create and modify a selection using only the keyboard. The following flowchart covers how the new `copymode()` action works: - -![Copy Mode Flowchart][images/CopyModeFlowchart.png] +### Mark Mode -**NOTE**: `copyMode()` refers to the action, whereas `updateSelection()` refers to the underlying function that is being called in the code. +Mark Mode is a mode where the user can create and modify a selection using only the keyboard. -If a selection is not active, a "start" and "end" selection point is created at the cursor position. `updateSelection()` calls then move "start" and "end" together as one position. This position will be denoted with a "y-beam". +When no selection is present, the user may use the `markMode` action to enter mark mode. Upon doing so, a selection will be created at the current cursor position. -![Y-Beam Example][images/Y-Beam.png] +When in mark mode, the user may... +- press ESC to clear the selection and exit mark mode +- invoke the `markMode` action to exit mark mode +- invoke the `copy` action (this includes right-clicking the terminal) to copy the selected text, clear the selection, and exit mark mode +- move the cursor in the following ways: + - arrow keys --> move by character + - ctrl + left/right --> move by word + - ctrl + home/end --> move to the beginning/end of the buffer + - home/end --> move to the beginning/end of the line respectively + - pgup/pgdn --> move up/down by viewport respectively +- expand the selection in the following ways: + - shift + arrow keys --> move the "end" endpoint by character + - ctrl + shift + left/right --> move the "end" endpoint by word + - ctrl + shift + home/end --> move the "end" endpoint to the beginning/end of the buffer + - shift + home/end --> move the "end" endpoint to the beginning/end of the line respectively + - shift + pgup/pgdn --> move the "end" endpoint up/down by viewport respectively -If a selection is active, `copyMode` leaves the selection untouched, all subsequent `updateSelection()` calls move "start". The y-beam is then cut vertically in half, where one half is drawn on the "start" endpoint, and the other half is drawn on the "end" endpoint. Since the user is moving "start", only the half-y-beam is drawn on the "start" endpoint. - -![Separated Y-Beam Example][images/Half-Y-Beam.png] - -**NOTE:** Both half y-beams could have been presented as shown in the image below. This idea was omitted because then there is no indication for which half y-beam is currently focused. +As with mouse selections, keybindings are still respected and pressing a key that is not bound to a keybinding (or mentioned above) will clear the selection and exit mark mode. -![Both Separated Y-Beams Example][images/Split-Y-Beam.png] +#### Corner cases -Invoking `copyMode()` again, will then anchor "start" (meaning that it will be kept in place). Subsequent `updateSelection()` calls move the "end" selection point. As before, the half-y-beam is only drawn on the "end" to denote that this is the endpoint that is being moved. +- In mark mode, if a selection was created via the keyboard, moving the cursor moves at the "end" endpoint. This is consistent with conhost. +- If a user creates a selection using the mouse, then enters mark mode, mark mode inherits the existing selection as if it was made using the keyboard. +- If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". Thus, the selection is copied when the `copy` keybinding is used or the selection is copied using the mouse. +- If `copyOnSelect` is enabled, `ESC` is interpreted as "cancelling" the selection, so nothing is copied. Keys that generate input are also interpreted as "cancelling" the selection. Only the `copy` keybinding or copying using the mouse is considered "completing" the selection operation, and copying the content to the clipboard. -Invoking `copyMode()` essentially cycles between which selection point is targeted. The half-y-beam is drawn on the targeted endpoint. +**NOTE** - Related to #3884: + If the user has chosen to have selections persist after a copy operation, the selection created by Copy Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. However, if the user exits Copy Mode in any of the other situations, the selection is cleared. #### Block Selection A user can normally create a block selection by holding alt then creating a selection. -If the user is in Copy Mode, and desires to make a block selection, they can use the `toggleBlockSelection()` action. `toggleBlockSelection()` takes an existing selection, and transforms it into a block selection (or vice-versa). +If the user is in Mark Mode, and desires to make a block selection, they can use the `toggleBlockSelection()` action. `toggleBlockSelection()` takes an existing selection, and transforms it into a block selection (or vice-versa). -All selections created in Copy Mode will have block selection disabled by default. +All selections created in Mark Mode will have block selection disabled by default. #### Rendering during Copy Mode Since we are just moving the selection endpoints, rendering the selection rects should operate normally. We need to ensure that we still scroll when we move a selection point past the top/bottom of the viewport. In ConHost, output would be paused when a selection was present. Windows Terminal does not pause the output when a selection is present, however, it does not scroll to the new output. -#### Interaction with CopyOnSelect -If `copyOnSelect` is enabled, the selection is copied when the selection operation is "complete". Thus, the selection is copied when the `copy` keybinding is used or the selection is copied using the mouse. - #### Interaction with Mouse Selection If a selection exists, the user is basically already in Copy Mode. The user should be modifying the "end" endpoint of the selection when using the `updateSelection()` bindings. The existing selection should not be cleared (contrary to prior behavior). However, the half-y-beam will not be drawn. Once the user presses the `copyMode` or `moveSelectionPoint` keybinding, the half-y-beam is drawn on the targeted endpoint (which will then be "start"). During Copy Mode, if the user attempts to create a selection using the mouse, any existing selections are cleared and the mouse creates a selection normally. However, contrary to prior behavior, the user will still be in Copy Mode. The target endpoint being modified in Copy Mode, however, will be the "end" endpoint of the selection, instead of the cursor (as explained earlier in the flowchart). -#### Exiting Copy Mode -The user exits copy mode when the selection is cleared. Thus, the user can press... -- the `ESC` key -- the `copy()` action (which also copies the contents of the selection to the user's clipboard) -- keys that generate input and clear a selection -In all of these cases, the selection will be cleared. +#### Abandoned Idea: Copy Mode +Copy Mode is a more complex version of Mark Mode that is intended to provide a built-in way to switch the active selection endpoint. This idea was abandoned because we would then run into a user education issue. Rather than reinventing the wheel, selection should feel natural like that of a text editor, and any diversion from that model should be introduced separately (i.e. keybindings). Doing so ensures that users can "hit the ground running" when trying to make a selection, but won't be hindered by new functionality that is available. -If `copyOnSelect` is enabled, `ESC` is interpreted as "cancelling" the selection, so nothing is copied. Keys that generate input are also interpreted as "cancelling" the selection. Only the `copy` keybinding or copying using the mouse is considered "completing" the selection operation, and copying the content to the clipboard. +Copy Mode is a mode where the user can create and modify a selection using only the keyboard. The following flowchart covers how the new `copymode()` action works: -**NOTE** - Related to #3884: - If the user has chosen to have selections persist after a copy operation, the selection created by Copy Mode is treated no differently than one created with the mouse. The selection will persist after a copy operation. However, if the user exits Copy Mode in any of the other situations, the selection is cleared. +![Copy Mode Flowchart][images/CopyModeFlowchart.png] +**NOTE**: `copyMode()` refers to the action, whereas `updateSelection()` refers to the underlying function that is being called in the code. + +If a selection is not active, a "start" and "end" selection point is created at the cursor position. `updateSelection()` calls then move "start" and "end" together as one position. +Invoking `copyMode()` again, will then anchor "start" (meaning that it will be kept in place). Subsequent `updateSelection()` calls move the "end" selection point. + +Invoking `copyMode()` essentially cycles between which selection point is targeted. ## UI/UX Design ### Key Bindings -There will only be 1 new command that needs to be added: | Action | Keybinding Args | Description | |--|--|--| -| `selectAll` | | Select the entire text buffer. | -| `copyMode` | | Cycle the selection point targeted by `moveSelectionPoint`. If no selection exists, a selection is created at the cursor. | -| `toggleBlockSelection` | | Transform the existing selection between a block selection and a line selection. | +| `selectAll` | none | Select the entire text buffer. | +| `markMode` | none | Toggle mark mode. If no selection exists, create a selection at the cursor position. Otherwise, use the existing selection as one in mark mode. | +| `toggleBlockSelection` | none | Transform the existing selection between a block selection and a line selection. | +| `switchSelectionEndpoint` | none | If a selection is present, switch which selection endpoint is targetted when in mark mode or quick edit mode. | By default, the following key binding will be set: ```JS @@ -194,9 +204,30 @@ By default, the following key binding will be set: // Copy Mode { "command": "copyMode", "keys": "ctrl+shift+m" }, -{ "command": "toggleBlockSelection", "keys": "alt+shift+m" }, +{ "command": "toggleBlockSelection" }, +{ "command": "switchSelectionEndpoint" }, ``` +### Y-Beam + +A y-beam will be used to identify which selection endpoint is currently being moved when in mark mode. + +When we're moving the cursor (this happens when mark mode is entered from no existing selection), a full y-beam will be displayed at the cursor position. + +![Y-Beam Example][./images/Y-Beam.png] + +When shift is held, we're expanding the selection. In this case, the y-beam will be split, and the relevant half will be rendered on the active endpoint. + +![Separated Y-Beam Example][./images/Half-Y-Beam.png] + +**NOTE:** Both half y-beams could have been presented as shown in the image below. This idea was omitted because then there is no indication for which half y-beam is currently focused. + +![Both Separated Y-Beams Example][./images/Split-Y-Beam.png] + +### Miscellaneous + +When mark mode is enabled, the cursor will stop blinking. + ## Capabilities ### Accessibility From 6ff24a61a8e11dd19706032465eca8e533b97b12 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 2 Jun 2022 14:22:08 -0700 Subject: [PATCH 21/24] spellcheck --- doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index aa6781be2a8..2022eec859b 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -196,7 +196,7 @@ Invoking `copyMode()` essentially cycles between which selection point is target | `selectAll` | none | Select the entire text buffer. | | `markMode` | none | Toggle mark mode. If no selection exists, create a selection at the cursor position. Otherwise, use the existing selection as one in mark mode. | | `toggleBlockSelection` | none | Transform the existing selection between a block selection and a line selection. | -| `switchSelectionEndpoint` | none | If a selection is present, switch which selection endpoint is targetted when in mark mode or quick edit mode. | +| `switchSelectionEndpoint` | none | If a selection is present, switch which selection endpoint is targeted when in mark mode or quick edit mode. | By default, the following key binding will be set: ```JS From 27022e7bcd807de73661a12c8b7f64b719645f54 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Wed, 6 Jul 2022 10:04:39 -0700 Subject: [PATCH 22/24] add more details on the selection markers --- .../Keyboard-Selection.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index 2022eec859b..b69f09ffff5 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -1,7 +1,7 @@ --- author: Carlos Zamora @carlos-zamora created on: 2019-08-30 -last updated: 2022-06-1 +last updated: 2022-07-06 issue id: 715 --- @@ -196,7 +196,7 @@ Invoking `copyMode()` essentially cycles between which selection point is target | `selectAll` | none | Select the entire text buffer. | | `markMode` | none | Toggle mark mode. If no selection exists, create a selection at the cursor position. Otherwise, use the existing selection as one in mark mode. | | `toggleBlockSelection` | none | Transform the existing selection between a block selection and a line selection. | -| `switchSelectionEndpoint` | none | If a selection is present, switch which selection endpoint is targeted when in mark mode or quick edit mode. | +| `switchSelectionEndpoint` | none | If a selection is present, switch which selection endpoint is targeted when in mark mode or another keyboard selection mode (i.e. modified a mouse selection using the keyboard). | By default, the following key binding will be set: ```JS @@ -208,18 +208,24 @@ By default, the following key binding will be set: { "command": "switchSelectionEndpoint" }, ``` -### Y-Beam +### Selection Markers -A y-beam will be used to identify which selection endpoint is currently being moved when in mark mode. +A y-beam will be used to identify which selection endpoint is currently being moved when in mark mode. The y-beam will match the cursor color and the font size so that it essentially fills a cell in the buffer. When we're moving the cursor (this happens when mark mode is entered from no existing selection), a full y-beam will be displayed at the cursor position. ![Y-Beam Example][./images/Y-Beam.png] -When shift is held, we're expanding the selection. In this case, the y-beam will be split, and the relevant half will be rendered on the active endpoint. +When shift is held, we're expanding the selection. In this case, the y-beam will be split, and the relevant half will be rendered on the active endpoint functioning as a selection marker. ![Separated Y-Beam Example][./images/Half-Y-Beam.png] +If the selection is up against the end (or beginning) of the line, the selection marker can't be rendered normally because ther is no space to render it off the side of the terminal. Instead, the selection marker will be horizontally flipped. Alternatively, it can be rendered on the next available cell (i.e. end of line translates to the beginning of the next line), but that would cause issues when the selection is positioned at the beginning or end of the buffer, thus the idea was abandoned. + +If the active endpoint crosses the inactive endpoint, the selection marker will be flipped. In a sense, the flag will always point away from the selection. + +The y-beam doesn't make as much sense for block selections, so instead an L-shaped marker will be placed hugging the corner of the active selection endpoint. + **NOTE:** Both half y-beams could have been presented as shown in the image below. This idea was omitted because then there is no indication for which half y-beam is currently focused. ![Both Separated Y-Beams Example][./images/Split-Y-Beam.png] From c34cce1c33e03f160f9b68b2f868578bc45dff6b Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Mon, 18 Jul 2022 11:11:39 -0700 Subject: [PATCH 23/24] address feedback from zadji --- .../#4993 - Keyboard Selection/Keyboard-Selection.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index b69f09ffff5..723fb350205 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -214,11 +214,11 @@ A y-beam will be used to identify which selection endpoint is currently being mo When we're moving the cursor (this happens when mark mode is entered from no existing selection), a full y-beam will be displayed at the cursor position. -![Y-Beam Example][./images/Y-Beam.png] +![Y-Beam Example](./images/Y-Beam.png) When shift is held, we're expanding the selection. In this case, the y-beam will be split, and the relevant half will be rendered on the active endpoint functioning as a selection marker. -![Separated Y-Beam Example][./images/Half-Y-Beam.png] +![Separated Y-Beam Example](./images/Half-Y-Beam.png) If the selection is up against the end (or beginning) of the line, the selection marker can't be rendered normally because ther is no space to render it off the side of the terminal. Instead, the selection marker will be horizontally flipped. Alternatively, it can be rendered on the next available cell (i.e. end of line translates to the beginning of the next line), but that would cause issues when the selection is positioned at the beginning or end of the buffer, thus the idea was abandoned. @@ -228,7 +228,7 @@ The y-beam doesn't make as much sense for block selections, so instead an L-shap **NOTE:** Both half y-beams could have been presented as shown in the image below. This idea was omitted because then there is no indication for which half y-beam is currently focused. -![Both Separated Y-Beams Example][./images/Split-Y-Beam.png] +![Both Separated Y-Beams Example](./images/Split-Y-Beam.png) ### Miscellaneous @@ -240,6 +240,8 @@ When mark mode is enabled, the cursor will stop blinking. Using the keyboard is generally a more accessible experience than using the mouse. Being able to modify a selection by using the keyboard is a good first step towards making selecting text more accessible. +We will be expected to send "selection changed" events via UIA every time the cursor moves or selection updates (both are considered the same event). + ### Security N/A From f730f17ace9d5cc367b82d94ee294cccb0d16515 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Mon, 18 Jul 2022 11:12:44 -0700 Subject: [PATCH 24/24] words are hadr --- doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md index 723fb350205..0d9116d44ee 100644 --- a/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md +++ b/doc/specs/#4993 - Keyboard Selection/Keyboard-Selection.md @@ -220,7 +220,7 @@ When shift is held, we're expanding the selection. In this case, the ![Separated Y-Beam Example](./images/Half-Y-Beam.png) -If the selection is up against the end (or beginning) of the line, the selection marker can't be rendered normally because ther is no space to render it off the side of the terminal. Instead, the selection marker will be horizontally flipped. Alternatively, it can be rendered on the next available cell (i.e. end of line translates to the beginning of the next line), but that would cause issues when the selection is positioned at the beginning or end of the buffer, thus the idea was abandoned. +If the selection is up against the end (or beginning) of the line, the selection marker can't be rendered normally because there is no space to render it off the side of the terminal. Instead, the selection marker will be horizontally flipped. Alternatively, it can be rendered on the next available cell (i.e. end of line translates to the beginning of the next line), but that would cause issues when the selection is positioned at the beginning or end of the buffer, thus the idea was abandoned. If the active endpoint crosses the inactive endpoint, the selection marker will be flipped. In a sense, the flag will always point away from the selection.

    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�W1>QhSGP@9s`@XVZ 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