From 5869d4ae8caf704a8354e92f42b10d0b36402476 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Wed, 16 Oct 2019 14:50:53 -0700 Subject: [PATCH 01/18] Spec for Search Experience --- doc/specs/#605 - Search/spec.md | 76 +++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 doc/specs/#605 - Search/spec.md diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md new file mode 100644 index 00000000000..8a90123a7d8 --- /dev/null +++ b/doc/specs/#605 - Search/spec.md @@ -0,0 +1,76 @@ +--- +author: Kaiyu Wang KaiyuWang16/kawa@microsoft.com +created on: 2019-10-16 +last updated: 2019-10-16 +issue id: #605 +--- + +# Search in Terminal + +## Abstract + +This spec is for feature request #605 "Search". It goes over the details of a new feature that allows users to search text in Terminal, within one tab or from all tabs. Expected behavior and design of this feature is included. Besides, future possible follow-up works are also addressed. + +## Inspiration + +One of the superior features of iTerm2 is it's content search. The search comes in two variants: search from active tab and search from all tabs. In almost any editor, there is an roughly equivalent string search. We also want to realize search experience in Terminal. There will be two variants, search within one tab or from multiple tabs. We will start with one-tab search implementation. + +## Solution Design + +Our ultimate goal is to provide both search within one tab and search from all tabs experiences. But we can start with one-tab search. The search experience should have following features: + +1. The search is triggered by keybindings "Ctrl + F". This coincides with other editors. In the future we will also consider adding a "Find" in the dropdown menu. +2. The user search in a +3. We can have multiple search methods. The simplest one is text exact match with case insensitive. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case-insensitive exact match. +4. The search starts from the line that the cursor is on, and go up from most recent lines. We automatically go around if we reach the end of the text buffer. +5. The search dialog should not block terminal's view. + +Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select and color found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. + +## UI/UX Design + +[comment]: # What will this fix/feature look like? How will it affect the end user? + +## Capabilities + +[comment]: # Discuss how the proposed fixes/features impact the following key considerations: + +### Accessibility + +This feature could help multitaksing terminal users. + +### Security + +This should not introduce any new security issues. + +### Reliability + +This feature enable users to search for text in the terminal input/output history. This is a widely-used feature in most editors and thus improve the reliability of Terminal once added. + +### Compatibility + +This feature won't break existing features of Terminal. + +### Performance, Power, and Efficiency + +This feature only launch in need. It does not impact the performance of Terminal. + +## Potential Issues + +1. The search bar should not block command line view. +2. Search should not block any program the Terminal is currently executing. + +## Future considerations + +In version 1, we want realize a case sensitive/insensitive exact text match. But we may consider the following features in version 2: + +1. Add "Find" button in dropdown menu to trigger search. +2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. We put in our goals for Version 2. +3. Regular experssion match. +4. Search history. +5. High-light while you type. + + +## Resources + +Github Issue: https://github.com/microsoft/terminal/issues/605 From 0773361ffc543f58f46182659f3ab38073fe53b2 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Tue, 22 Oct 2019 18:15:05 -0700 Subject: [PATCH 02/18] Finish Solution design --- doc/specs/#605 - Search/images/SearchBox.jpg | Bin 0 -> 18810 bytes doc/specs/#605 - Search/spec.md | 24 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 doc/specs/#605 - Search/images/SearchBox.jpg diff --git a/doc/specs/#605 - Search/images/SearchBox.jpg b/doc/specs/#605 - Search/images/SearchBox.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1aaf41713437828015956fc248039542b27e6402 GIT binary patch literal 18810 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 literal 0 HcmV?d00001 diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 8a90123a7d8..0232534b19a 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -20,20 +20,32 @@ One of the superior features of iTerm2 is it's content search. The search comes Our ultimate goal is to provide both search within one tab and search from all tabs experiences. But we can start with one-tab search. The search experience should have following features: 1. The search is triggered by keybindings "Ctrl + F". This coincides with other editors. In the future we will also consider adding a "Find" in the dropdown menu. -2. The user search in a -3. We can have multiple search methods. The simplest one is text exact match with case insensitive. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case-insensitive exact match. -4. The search starts from the line that the cursor is on, and go up from most recent lines. We automatically go around if we reach the end of the text buffer. +2. The user search in a XAML AutoSuggestBox on the top right corner of the Terminal window. +3. We can have multiple search methods. The simplest one is text exact match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. +4. If currently there is no active selection, the search starts from the line that the cursor is on. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 5. The search dialog should not block terminal's view. -Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select and color found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. +Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. + +Search process: + +Search is performed on a XAML AutoSuggestBox. Once the user click the "Find" icon, we start from the cursor (or the current selection), and try to find the exact text in the text buffer. The nearest searched one will be selected. And we set the search start point to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. +The user can choose to search up or down by choosing up arrow or down arrow buttons. +The user can choose to do case sensitive or insensitive match by clicking a button. +If the user click the "X" button, the search stopped and the search box disappears. In phrase one we do not store any state, but in the future we can consider storing the search history. ## UI/UX Design -[comment]: # What will this fix/feature look like? How will it affect the end user? + ## Capabilities -[comment]: # Discuss how the proposed fixes/features impact the following key considerations: +1. The user can search exact matched text in the text buffer of the Terminal Screen. +2. The user can choose to search case sensitively and insensitively. +3. The user can search up or down. +4. Found text will be selected. +5. The search will start from the active selected text (inclusive) if there is one, or where the cursor is. +5. The search will automatically go around when it reaches the starting point. ### Accessibility From 5103f2c6c3cefd4b189c7ce07218f8338953f917 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Wed, 23 Oct 2019 11:42:44 -0700 Subject: [PATCH 03/18] Spec for Search --- .../#605 - Search/images/AutoSuggestBox.png | Bin 0 -> 8524 bytes doc/specs/#605 - Search/images/SearchBox.jpg | Bin 18810 -> 0 bytes doc/specs/#605 - Search/spec.md | 9 ++++++--- 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 doc/specs/#605 - Search/images/AutoSuggestBox.png delete mode 100644 doc/specs/#605 - Search/images/SearchBox.jpg diff --git a/doc/specs/#605 - Search/images/AutoSuggestBox.png b/doc/specs/#605 - Search/images/AutoSuggestBox.png new file mode 100644 index 0000000000000000000000000000000000000000..003f154817df29dd0ec1cc3b84c8db651ada74ca GIT binary patch literal 8524 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 diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 0232534b19a..8999cb97a2b 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -28,7 +28,6 @@ Our ultimate goal is to provide both search within one tab and search from all t Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. Search process: - Search is performed on a XAML AutoSuggestBox. Once the user click the "Find" icon, we start from the cursor (or the current selection), and try to find the exact text in the text buffer. The nearest searched one will be selected. And we set the search start point to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. The user can choose to search up or down by choosing up arrow or down arrow buttons. The user can choose to do case sensitive or insensitive match by clicking a button. @@ -36,7 +35,11 @@ If the user click the "X" button, the search stopped and the search box disappea ## UI/UX Design +![Sol Design](images/AutoSuggestBox.png) + +Above is the XAML AutoSuggestBox. We also need to add at least two more buttons, one for case sensitive/insensitive switch, and one for search direction switch. We can consider adding the buttons on the right side of the AutoSuggestBox. +The search box should be on the top right corner of the Terminal window. We need to avoid it blocking too much screen contents. ## Capabilities @@ -53,7 +56,7 @@ This feature could help multitaksing terminal users. ### Security -This should not introduce any new security issues. +This feature should not introduce any new security issues. ### Reliability @@ -65,7 +68,7 @@ This feature won't break existing features of Terminal. ### Performance, Power, and Efficiency -This feature only launch in need. It does not impact the performance of Terminal. +This feature only launches in need. It does not impact the performance of Terminal. ## Potential Issues From 92d06ec4531fb6484d98e64fa67da04cbd7a20ac Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Fri, 1 Nov 2019 19:37:41 -0700 Subject: [PATCH 04/18] Add UI design of SearchBoxControl --- .../#605 - Search/images/AutoSuggestBox.png | Bin 8524 -> 0 bytes .../#605 - Search/images/SearchBoxControl.png | Bin 0 -> 16142 bytes .../images/SearchBoxUpSelected.png | Bin 0 -> 13269 bytes doc/specs/#605 - Search/spec.md | 22 ++++++++++++------ 4 files changed, 15 insertions(+), 7 deletions(-) delete mode 100644 doc/specs/#605 - Search/images/AutoSuggestBox.png create mode 100644 doc/specs/#605 - Search/images/SearchBoxControl.png create mode 100644 doc/specs/#605 - Search/images/SearchBoxUpSelected.png diff --git a/doc/specs/#605 - Search/images/AutoSuggestBox.png b/doc/specs/#605 - Search/images/AutoSuggestBox.png deleted file mode 100644 index 003f154817df29dd0ec1cc3b84c8db651ada74ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8524 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 literal 0 HcmV?d00001 diff --git a/doc/specs/#605 - Search/images/SearchBoxUpSelected.png b/doc/specs/#605 - Search/images/SearchBoxUpSelected.png new file mode 100644 index 0000000000000000000000000000000000000000..4b97eb5a8cea6e085f1458051d5b4145f7461727 GIT binary patch literal 13269 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 literal 0 HcmV?d00001 diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 8999cb97a2b..eed5f8e4e0c 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -27,19 +27,27 @@ Our ultimate goal is to provide both search within one tab and search from all t Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. +We will create a SearchBoxControl Xaml UserControl element. When a search process begins, a SearchBoxControl object will be created and attach to TermControl root grid. In other words, one SearchBox is added for each TermControl. The reasons for this design is: + +1. Each TermControl corresponds to an iterative Terminal Window and has a individual text buffer. In phrase 1 we are going to search witin the current terminal text buffer. +2. If we put the search box under TerminalApp, then the search can only happen on the current focused Terminal. +3. If the community does not like the current design, we can lift SearchBox to a higher level. + Search process: -Search is performed on a XAML AutoSuggestBox. Once the user click the "Find" icon, we start from the cursor (or the current selection), and try to find the exact text in the text buffer. The nearest searched one will be selected. And we set the search start point to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. -The user can choose to search up or down by choosing up arrow or down arrow buttons. -The user can choose to do case sensitive or insensitive match by clicking a button. -If the user click the "X" button, the search stopped and the search box disappears. In phrase one we do not store any state, but in the future we can consider storing the search history. +1. Search is performed on a XAML AutoSuggestBox. Once the user click the "Find" icon, we start from the cursor (the current input line on the Terminal) or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. And we set the search start point to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. +2. The user can choose to search up or down by choosing up arrow or down arrow buttons. A blue border will appear on the chosen button. +3. The user can choose to do case sensitive or insensitive match by checking a check box. +4. If the user click the "X" button, the search stopped and the search box disappears. In phrase one we do not store any state, but in the future we can consider storing the search history. ## UI/UX Design -![Sol Design](images/AutoSuggestBox.png) +![Sol Design](images/SearchBoxControl.png) + +Above is the SearchBoxControl. The two buttons with up/down arrows controls the search direction, a blue border will appear on the current selected direction. The checkbox, if checked, means that we are searching case-sensitivily. -Above is the XAML AutoSuggestBox. We also need to add at least two more buttons, one for case sensitive/insensitive switch, and one for search direction switch. We can consider adding the buttons on the right side of the AutoSuggestBox. +![Sol Design](images/SearchBoxUpSelected.png) -The search box should be on the top right corner of the Terminal window. We need to avoid it blocking too much screen contents. +The search box should be on the top right corner of the Terminal window. If the current tab is splitted into panes, each pane can have a individual searchbox. We need to avoid it blocking too much screen contents. ## Capabilities From 097988d6f381c10dd1513dbf3a6bc122b6182eb5 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Mon, 4 Nov 2019 11:51:21 -0800 Subject: [PATCH 05/18] Add new details to spec according to feedbacks --- doc/specs/#605 - Search/spec.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index eed5f8e4e0c..53a19c73053 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -19,11 +19,12 @@ One of the superior features of iTerm2 is it's content search. The search comes Our ultimate goal is to provide both search within one tab and search from all tabs experiences. But we can start with one-tab search. The search experience should have following features: -1. The search is triggered by keybindings "Ctrl + F". This coincides with other editors. In the future we will also consider adding a "Find" in the dropdown menu. +1. The search is triggered by KeyBindings. A new setting property named "Search" will be enabled in the Json file. The user can set their own key bindings for search. The default is "ctrl + F". 2. The user search in a XAML AutoSuggestBox on the top right corner of the Terminal window. 3. We can have multiple search methods. The simplest one is text exact match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. 4. If currently there is no active selection, the search starts from the line that the cursor is on. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 5. The search dialog should not block terminal's view. +6. The user should be able to fully interact with the terminal when the search box is on screen. Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. @@ -33,21 +34,22 @@ We will create a SearchBoxControl Xaml UserControl element. When a search proces 2. If we put the search box under TerminalApp, then the search can only happen on the current focused Terminal. 3. If the community does not like the current design, we can lift SearchBox to a higher level. -Search process: -1. Search is performed on a XAML AutoSuggestBox. Once the user click the "Find" icon, we start from the cursor (the current input line on the Terminal) or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. And we set the search start point to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. -2. The user can choose to search up or down by choosing up arrow or down arrow buttons. A blue border will appear on the chosen button. +### Search process +1. Search is performed on a XAML AutoSuggestBox. Once the user click the "Find" icon or press Enter, we start from the cursor (the current input line on the Terminal) or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. +2. The user can choose to search up or down by choosing up arrow or down arrow buttons. A blue border will appear on the chosen button. If the user does not click the arrows buttons, the default direction is up. 3. The user can choose to do case sensitive or insensitive match by checking a check box. -4. If the user click the "X" button, the search stopped and the search box disappears. In phrase one we do not store any state, but in the future we can consider storing the search history. +4. If the user click the "X" button or press Esc, the search stopped and the search box disappears. In phrase one we do not store any state. +5. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. ## UI/UX Design -![Sol Design](images/SearchBoxControl.png) +![SearchBox mockup](images/SearchBoxControl.png) Above is the SearchBoxControl. The two buttons with up/down arrows controls the search direction, a blue border will appear on the current selected direction. The checkbox, if checked, means that we are searching case-sensitivily. -![Sol Design](images/SearchBoxUpSelected.png) +![SearchBox mockup, arrow button clicked](images/SearchBoxUpSelected.png) -The search box should be on the top right corner of the Terminal window. If the current tab is splitted into panes, each pane can have a individual searchbox. We need to avoid it blocking too much screen contents. +The search box should be on the top right corner of the Terminal window. If the current tab is splitted into panes, each pane will have a individual searchbox. We need to avoid it blocking too much screen contents. ## Capabilities From 50d65ff4163e03e9b416d67e0b91995b89ce15bd Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Mon, 4 Nov 2019 16:23:47 -0800 Subject: [PATCH 06/18] Minor typos fix --- doc/specs/#605 - Search/spec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 53a19c73053..bcb0eacd9d2 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -49,7 +49,7 @@ Above is the SearchBoxControl. The two buttons with up/down arrows controls the ![SearchBox mockup, arrow button clicked](images/SearchBoxUpSelected.png) -The search box should be on the top right corner of the Terminal window. If the current tab is splitted into panes, each pane will have a individual searchbox. We need to avoid it blocking too much screen contents. +The search box should be on the top right corner of the Terminal window. If the current tab is split into panes, each pane will have a individual searchbox. We need to avoid it blocking too much screen contents. ## Capabilities From 6b7ed3bb50cebbabb583405d121e3f31f153a0b4 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Fri, 15 Nov 2019 14:35:42 -0800 Subject: [PATCH 07/18] Spec updates on 11/15 --- doc/specs/#605 - Search/spec.md | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index bcb0eacd9d2..5c20848909b 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -20,11 +20,12 @@ One of the superior features of iTerm2 is it's content search. The search comes Our ultimate goal is to provide both search within one tab and search from all tabs experiences. But we can start with one-tab search. The search experience should have following features: 1. The search is triggered by KeyBindings. A new setting property named "Search" will be enabled in the Json file. The user can set their own key bindings for search. The default is "ctrl + F". -2. The user search in a XAML AutoSuggestBox on the top right corner of the Terminal window. -3. We can have multiple search methods. The simplest one is text exact match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. +2. The user search in a XAML AutoSuggestBox, which is contained in a custom SearchBoxControl. The default position of the search box is the top right corner, the user can also move it to bottom right corner to avoid blocking text. +3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. 4. If currently there is no active selection, the search starts from the line that the cursor is on. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. -5. The search dialog should not block terminal's view. +5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The user can move the search box to the bottom right corner. 6. The user should be able to fully interact with the terminal when the search box is on screen. +7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. @@ -36,20 +37,21 @@ We will create a SearchBoxControl Xaml UserControl element. When a search proces ### Search process 1. Search is performed on a XAML AutoSuggestBox. Once the user click the "Find" icon or press Enter, we start from the cursor (the current input line on the Terminal) or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. -2. The user can choose to search up or down by choosing up arrow or down arrow buttons. A blue border will appear on the chosen button. If the user does not click the arrows buttons, the default direction is up. +2. The user can choose to search up or down by choosing up arrow or down arrow buttons. The chosen button will be styled to indicate it is clicked. If the user does not click the arrows buttons, the default direction is up. 3. The user can choose to do case sensitive or insensitive match by checking a check box. -4. If the user click the "X" button or press Esc, the search stopped and the search box disappears. In phrase one we do not store any state. -5. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. +4. If the search box is focused, the user can navigte all the elements on the search box using tab. When selected, press Enter equals to click. +5. If the user click the "X" button or press Esc, the search stopped and the search box disappears. In phrase one we do not store any state. +6. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. ## UI/UX Design ![SearchBox mockup](images/SearchBoxControl.png) -Above is the SearchBoxControl. The two buttons with up/down arrows controls the search direction, a blue border will appear on the current selected direction. The checkbox, if checked, means that we are searching case-sensitivily. +Above is the SearchBoxControl. The two buttons with up/down arrows controls the search direction, a blue border will appear on the current selected direction. The checkbox, if checked, means that we are searching case-sensitivily. The Dockbottom button on the right of the checkbox is for moving the search box to top/bottom. ![SearchBox mockup, arrow button clicked](images/SearchBoxUpSelected.png) -The search box should be on the top right corner of the Terminal window. If the current tab is split into panes, each pane will have a individual searchbox. We need to avoid it blocking too much screen contents. +The search box defaults to be on the top right corner of the Terminal window. If the current tab is split into panes, each pane will have a individual searchbox. The user can move it to bottom to avoid it blocking too much screen contents. ## Capabilities @@ -58,11 +60,13 @@ The search box should be on the top right corner of the Terminal window. If the 3. The user can search up or down. 4. Found text will be selected. 5. The search will start from the active selected text (inclusive) if there is one, or where the cursor is. -5. The search will automatically go around when it reaches the starting point. +5. The search will automatically go around when it reaches the starting point. +7. The search box can be positioned at either the top left or the bottom left of the terminal. ### Accessibility -This feature could help multitaksing terminal users. +The user should be able to use search by keyboard only. +Once the searchbox is focused, the user can navigate between elements in the search box using Tab. And "click" using Enter. ### Security @@ -70,7 +74,8 @@ This feature should not introduce any new security issues. ### Reliability -This feature enable users to search for text in the terminal input/output history. This is a widely-used feature in most editors and thus improve the reliability of Terminal once added. +1. The key input of Terminal command line and the search box should be separated. search box should not block interaction with the command line when it is open. +2. The search box should not block text. This issue could be addressed by make search box movable. ### Compatibility From a462f56b0f9301f0663833049160f74203a7ad76 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Mon, 25 Nov 2019 11:38:57 -0800 Subject: [PATCH 08/18] update button behavior --- doc/specs/#605 - Search/spec.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 5c20848909b..885fabc6b2a 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -25,7 +25,8 @@ Our ultimate goal is to provide both search within one tab and search from all t 4. If currently there is no active selection, the search starts from the line that the cursor is on. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The user can move the search box to the bottom right corner. 6. The user should be able to fully interact with the terminal when the search box is on screen. -7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. +7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. +8. To avoid searchBox from blocking the terminal window, the search box could be moved to the bottom right by clicking a button. Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. @@ -36,18 +37,18 @@ We will create a SearchBoxControl Xaml UserControl element. When a search proces 3. If the community does not like the current design, we can lift SearchBox to a higher level. ### Search process -1. Search is performed on a XAML AutoSuggestBox. Once the user click the "Find" icon or press Enter, we start from the cursor (the current input line on the Terminal) or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. +1. Search is performed on a XAML TextBox. Once the user presses Enter, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. 2. The user can choose to search up or down by choosing up arrow or down arrow buttons. The chosen button will be styled to indicate it is clicked. If the user does not click the arrows buttons, the default direction is up. 3. The user can choose to do case sensitive or insensitive match by checking a check box. 4. If the search box is focused, the user can navigte all the elements on the search box using tab. When selected, press Enter equals to click. 5. If the user click the "X" button or press Esc, the search stopped and the search box disappears. In phrase one we do not store any state. -6. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. +6. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. ## UI/UX Design ![SearchBox mockup](images/SearchBoxControl.png) -Above is the SearchBoxControl. The two buttons with up/down arrows controls the search direction, a blue border will appear on the current selected direction. The checkbox, if checked, means that we are searching case-sensitivily. The Dockbottom button on the right of the checkbox is for moving the search box to top/bottom. +Above is the SearchBoxControl. The two buttons with up/down arrows controls the search direction, it will be styled once clicked. The checkbox, if checked, means that we are searching case-sensitivily. The Dockbottom button on the right of the checkbox is for moving the search box to top/bottom. ![SearchBox mockup, arrow button clicked](images/SearchBoxUpSelected.png) From 754ced40fccc88c3107334e084d73db90a667da5 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Mon, 25 Nov 2019 13:51:17 -0800 Subject: [PATCH 09/18] Update sepc images --- .../#605 - Search/images/SearchBoxControl.png | Bin 16142 -> 42171 bytes .../images/SearchBoxUpSelected.png | Bin 13269 -> 68878 bytes doc/specs/#605 - Search/spec.md | 7 ++++--- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/specs/#605 - Search/images/SearchBoxControl.png b/doc/specs/#605 - Search/images/SearchBoxControl.png index 92352b0ac0681ae9ae63cdec4dec3780153a4928..58128772721b36605d8feac1aaadb1fa179afaf9 100644 GIT binary patch literal 42171 zcmeFZXH-*byEPn8bPKXkq$r43KxqM`NCy!S2p}cYKqw*t2~Fu8K|w&p4Fsfx-V;Jg zfY1~RQUqxUgr*=;LXi@Bc~@}n=RD^b=X~G$=ll0Dh9hHPLRRj3t$EFB&Uq!;;GQNc zGY>Ne1Y*_Jx?=98LPsEj6tM`eT-@0Pul9AcO1d67)x*v(eo2 zM~)XCSm=+;cPHo{6U207nGtvh3;)ZH0eHOi?*D&zmaSgq!S3{Q$R0T~coFuTKwlUT zGk5+a(YyYn&CSh`BWz07YrgOAEM*4HK{JV$C|vYs+~PYg=V9x%G}gG-6BkmA4A}f0 zl{-ZLpRj=KMc-y>qNmK4o=G1LAAj#oUY?G;S>OBQ zX5KIK?E&>ei$8WKzjTkMKQrvI(DDk{+Dqmr{osBgkthE5=G}mRt$U>D&(G@my^prf zUjNVgT3!%1PVp2UYP#A47dx=oT+vJ$a_514O`TOd{U`oHUpbsK?T!5!xxY?A~ z45W``#Zz(3DmT1xfNdinaNR8 z7S)IAV!oQFJInjoW+guPj;Bc9V`Ut=E&2D7nXg{(`^K;_XVy$7Xeo zH=}=9+*xyBYJUsIrWp%d zvgOvV{p^%07oYi#`4e!@GCh+MWsG1=GZ}|>Jt$#0+xlK#AS8;v^k&oio6m#nk z6l_O})--s&1ILi2e?BWJUL5MRGT^mT@1vPZU(WKI%CusAJzb*io1ob(+MQTByoAXt zJvn~CW0>Hoqf2~|MD-5{QT`1q=G-e+p|pF%r~eE5I9#>n-<#1Kl|nDSaAHP2>v9H9 z6G$`=M&;VQ^j{lQk?*6}G(EYOR>!xo<1s&hx0<5-N=%C@;q#b+E%7H;EtCOnxlPXU9=g+@LN*u29Eac_ki7DV>7hzh5>8t14>P}Ge8`12d zOm47(>7pQ{uny(8ASZ$K=I1)k>0SHN>kGqX0bp0$x^P@I4FQJE`^_1)S~675nA6tQ zHkaY`K3lT{!cA3HV;yqWR7Y}d@#7Mu9vQ7(Cd`%Yv8j=`rl9>Vb``y+g!<2feyv-O z@LW7@bLxxvPExg>g`T4p!$q)lX&lUCv3{wk(zNt7{(^8Av+(P2qIW6p*|X1oiV0{( z{mBPW?naSVp5Y1~3GybrwTRVgcqWeIPds%~R`y!c!$y+;K}&-bS5hD62P%x+K0jtdO!E2y6J6h0o!*lv zq8gqEPKW#2AzgP<LGeRb0*y|8Dt1WJs3crcL zadS7J*|BA1;;Lm^!!_={+!EGS@nH`Z-b3J_0eolljr-Vf)wJFu!4n(guGq!auCA_` zb1aF^wPBZE;MKIrpI-7NkFp7Ti1GI&!@7DADKXj z(mw)j>-fPYiCej+aa*2uPtG8(CiwoR#-B%Qtlr42bUte}!7RdAX>rDx3);*WPF-qd z9qV?ht7*Ww-q}In=$PY3h1R~lK8I=Zws=F^0=teRaMMYsbE82%IV~k+`CVFgJuF;` zDIEebyF6R7XZp1S3C;^9RYI_EXKFrJCl_SV%@*NgSefsJR_N03Y5XvklT>Ek`bq;D zORTRCzVASeT0AoLS0Eq6^fwv=Wuc{I`AK+N^e>A0ZOzl7eb;)_F+@ za=|yX@Pn7|a@u}Dw4u0PtLi9{6w2ED{{5EYFGPkB{iv`nU0vJDV$7%T`wKPW7rt1W zW4>>)m360z$C+wkS@0?szRG1x9gJpl`ciWX2EOzbVtBuhWMgu2#t>@*0$t2BnxN$+ zwQgUukV!QaEg>;WbK#jqPB2G!=B`qDdne9NUZV>?Ty*(v)GMW+FxQ$uO2{KuJ$=`1 z(3>s!UgD=#-}rd*eJuQvYvCfpa7d35Q|kBS=+bJmw&k(2a2sOR1b7EA(7Si4&{RK| zt78m@t!!DW3xIARPSijcSgra%G39peBb`oC+u!Mvea$rz9i#OdtPfUg9=GmOtJxmY zF1E`lk{-e;I0z(;EG6gAxq6n$I2`b z=SB<}+M#EzSmx%Lq$RizVIEH~!omroJZmYOOo{$^*kl5R3k4(empsSokNTp1JtZg3 zSoa3=_~@}N4a1&o6f|C&LHARO>nmI%Sd%sxKw<5`i5)zC>HZ?aOCM4HPI-?>M^!Tn zulDXQ#wx^_Fc|qrIYDU4hzYW3ZL3P`sfy2+`Lf=cgrQ}iOVDW{Af33QvM$gs-uYX9uA^-A9xvSG8c}60nF#pkP!@$lir{UGG-P!{X z#&lyW5VsSZxq0FM{D{YzR$^9Xvo~P#GU-0}1n^1}@JdLN(=y_EiMG)6#?sqL4gwtcC}*G4|@p@P!{eT!OE`9q}Zj*0<7)=^1^x$ z@BE;-1;w=ICPHCWiQ)0YhiIbB6^+Cbwyu7ZKJ?EBkJW~0); zimrbC>xzQ|*Cki}N}W4m2y52%Qg&=+vbd&U3fz*GF)#~jD|yWrNaMBI-mn)=eZBdtZ6J7Kbo!>-$V_WmTH5F{7Vcd+5}|tI zLH$kFa;{#0*zC-{diAFbgKfuxN^fnMV;XKc%B3l?!GY1-2BVmLY{v#GFz0@-?yj@C z)UbL_)yA!9>u04m#$le$m^*%!4xB8t+?9eacL!nb@*ixr0;Nw*T6C-Tv9f+QIe_-d zj8|oWKUu)~nm&3Bd(spdH=qZ;Tr(aLD2*?wsUg37@!}42mNGm%y0%u$Z}vLhdtfE^ zn@Xa|Lq|u);;C!yDUZ&aIipf8#r)@Fw8393!Jl((NzeN@a|j{Ry!&7tJZvtj2J#AA zkYn$E=(P5Y4OYIo#$(ePSc(60SQ2^3Rh}uytvdp~{cAgeXSWg?gqD zpU!Il>yXuVwa+ihHxKL`OTc;$Cd~%lS~^~$^m%fy!hXMJOf~WIEX~;2mYj7=uk<%cYW^?X`Ws!tf z?qPROFqZ0Wc5B?+Bzj}j+zuJBP=j|7)*=P5Bw?wS3?v|H^V?NwOCLe6HKI)iT@9k& z1b<>dM#Psww3FLlO+3bsCezEa@s%HR7;?j{m}og9X3V|4y**CLdap$o3|7LNC{}Bh zeA5tH6MuDw{bjYJNmc&SE4s%7N;?}8KNm4!w17*$dI3__!X=82dG@5(yScJER@jd< z6Bk@#&tRNG)gY&oX(p_rF{b*0y9C`hR9O|GDNJJnYc0{>Bl=wj4g$Rt(`|Yn7%wiY z)4*|EwtU~w{AGAhk~-(W2NTGxUQZ-IP^?wNO!Bq-q+SL zN?~3ze&wXhE9RjqD&=bFk`h_v*v&=hO~JF_d%4|&QmR%G6TyW8WkwxIFwP1>e&aP{ zN?B<+60xgLRaWf7H`jP2c5(O@W#CjvK0s7Vd3BohX*LJ=UwPEl&_(F}qxXY@gCmVL zUW=OOx;Ag6MwM}sIHbDv({Ks=+kTzX4ve6%fvIfrZbWDhH5NT%y_b$0ehJTHgPLhz zT-|p*ya@bqJZF4XVMTZPPw}8to6(|91>*iTHMe38zCC}$ZH^@qwX? zM=GrE(u;eH3mSXbW0fW6zV$hHQ3^Wl<2GTFvD0^O;S0Pmsc+zy`@#2^z<${!ORa`Q zrNB63NKk3uB(Cu~>?FMnpUD2AI%PE-n-SQ;HC?vTOftTGioon)`Ba9Ga6o{-qmRqB+3Idb}K!lI8~; zqN_4BRCo7^(RJKKt7cq&wo$Jj^JY|JWRCFk z`uxyj0y8!@EX2d(I;`^bEurURNoCC`GsHlNSqkL(y$ppZaX1WCRWNOl!b5Nwnn=ja z$y-oQtqwlrx(YOAXOgc~xc20}s)-jjl&6=zAaWTzgowp{(LVwL*?L>X`&pPt@|JH4 zy)iRD-+f1f#k3^x3Oe0X23V^l;zK-7>FDC(;(8qOqB>0s8vP9BCSu599U9uqPezt> z=1r5-dsWUZ#4a-Fgy~XLp2K?nYi zukY`B;-5L#F=@-Wl3nFKkn!(em3XT@K0dxC#t%uud%$&qs1aB;+7R@1G%_e=D2)vl z5j+O56%%5P5bhfurry1KH>WsXK~Yf$d}Co@!7U(w5+@4kBOLa%ZC-WAU!6P);Znu{7X*!W$gv;#;D=nDh;lc}f$D9$y&hUVRhMipgW*(~e~bw<1%LnU?X;11!CT(} z-W~J^P#9?@Nq)jJ{nJJmmKc~E#}9k&9`2h$hF|4-v$Dp*MS_JtevIYb^V53rhFBDh zEqoWQgs*&xpPZX`sI7I{p@gQnI>3`BDP4BUpaZW;Kp%rA5JG85csA$w_3S@@UMEKP zZqHdS_rb;-(u2TeQgB|`J0IoYEGpc~J#y(1&uvovK+-eLOMpUpGo^X**{AF*h;|jC zhMEsxE{9HZJbUG@COp>->L(V^rI1z@t=1*K>=%eSYQ{x6kH2rSopaJ#xpVu4APD2I zJ@{dGeBWnd02eaw<;#}==^35owP%{LBOdC;BCq)Y$r5v8Td6?B@~n?wfAX(iOd23k z)w_3UHVk;@zNYW$$O~-ab1|R4`|da<>goBh4E(`9T;q0qcP_OVj)Z(=dzK z2iLwp++(}Qj;cFDP9n|M?S4vGBh&Y8x##n*>RCSYS)fdX+RB`KQ%ULz0_$&I`sSCi z-FQ)X{MgPD(=+0+$tl%f3kTA0^qFhz*0@yuSUp8F#YPm`-SHmn9)UtS3=wAEIMJIR zP#ALQnM6=_U|-r8hn^txa?X!i>J2+K4S}|U0SN@LMID>%`1<8fyt&2gz3tGB40dg0 z%8K8{I}eLmejc+S5&e#}fqlCEx?B6x!uO7HN$2K`Q-NjX@;8g-#Vl*wumMG~>^KvM z8m$;wxNCO1H6P5fFjCjY%F3z%9ij>sjW-1cBI=eUH-H*}d{48qfqY&w!QO5Alp^K0 zE2&(F!{HL|2)f25QAJ_c&MTU)5>XaUgLl@q$h}z$11eL0`6!{TJBMONM(cewbt;FN zsD`b>@uH3Q^!4NT%@{GiH9LU3aO<#RN@47RtcX3sj+kSDT62s-BI+k%z&m)G9T`=d zYU`jO{=FXltsnXEHBB_E%4y@r#@gtW>ZbOJsZ_!g<>&0|Z0|Nu=4vwedn>+5DtEU> z^Jl7VMyURZw%8<6Zenw%=iWHgqc<9+w`jDY1;S)wDppa(<)kFjHl=XB3EIUa( z`bEf+P#&4oc*-3PQA9&*QF7p@S88vpilZq_MAPvCukS5Ps;}@mCxROAYe1C>dA+%V z|00|EXEJYnf$JZZE>-)-pLU4g*BC)u!WN%%7JclJ>)Ap#->WR2^7dxwFqp85ZU=U~ zxAKne>OjV#H!ct^U6`IEYUsZ^$-iV7EmkMx-@fzVnu=jSurgveWHvdZO&^&CbOd{~ z4Ko@NF`r6Sm*YZ%+Nk@T-MhNNe?jB(^YpsUC?o2t_ew|OKj>tR8;VARLs*@38yg$l z9y}08Z7%?U$G|tlOFIGi&xooY7#KMF^7gwFlF62ZO|!y{8{ZWa6mp86J?M_FyKHf> zn5*E)lP6AYt{k<9G}HrF-Ex>58!Fd6`{_;HCNCu{AqH0kA6|=S1yoP)+2B96*N5FV zCXfGlUI;IO`~wGvdqVnMQyMc%#Y`#(cN*{**wkIh0Z8x(>2j$W=Sfi$VMfr)&+J8F zh@J{JPl#CJ`DnohC}Ll+3x0PnfG4pCVA)?1!<47xyM?K}$%PHqE8@#{a_~jYjZ;P| z#oeExVNKP1h!bb{c=>WY6!8)-v*M>N0}jGNe{6{qKHN|BXLTv{UE`l*rCda#FBUyI)b zJE`8GgDdpKiov&1*K*L{tGcoI{x8tht&uvrQHxtouD47sg2n|aTK2c4DMiiK|F@ntJG7q*g_w0?xs=4jPc#_b$-mIfn z^X{|}`-I#6=%`xs`Tn{lU%MN1J=^l0KPhLOJ9L>lL@|LV{WJS1G&*bD1dKp1RB?$L zc31@|RyAc9X7ZK#6xIB$@Qi@Ynbp+W@mg06CNuh#NF)Yz#4tg5%&v3$Jc5Wq-({is zeX!6DlpBaC(v$^v)Wye#6j#{ePw*`B<{U9$J{p@vHvCq6vC5R}Iba0noqn8tPy`;@{5mSCNnKp7WrLZHUMh}Tj{POcVFcAiqLw$uj-%g1!2tFWQ( zV&zp2R#o}+>SAodvMUpZpBqEp%B7RZlPeDfD0=G=>Uh zn`@QE%l(!oG&VXNRr=iRccnZO?tXt{NHwk#F@K2=w{r!}q4U`mnnmNzOj$|t?6rrl;H^b;Lc6WWbE3fwdwK@!(SHdo4rt;Y6B ztAl9;wqzl@7~fdqx24@5KGX=h@=xrbeO0T$%vqBgmb>ZC2|D1v>^AO6izDR;JJ%97 zcsgNa%mefqTIXHrP1OicWs8ufrGT4&U9rNpUE_IwF7n|L;| z;|}(gU9y7UdAl4gn+rx0`2tt-l8Vb&Y+(MdgTBmtFAMT}59@{?@8i`H6JH(MTE-Wc zH*~t8;p-J~!7gp!p%p9I<^#Yvqa(4mvuXhkXz?oz7Nj{ICdKl4e1qy9XHos zB_@3g_zwr;EAW3h)G%7)p__*slWpG8+nCW*RY)xvWtAOyP3>q2lRK18G5)?IkD>x6 zdB

  • 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 diff --git a/doc/specs/#605 - Search/images/SearchBoxUpSelected.png b/doc/specs/#605 - Search/images/SearchBoxUpSelected.png index 4b97eb5a8cea6e085f1458051d5b4145f7461727..54f38155ac33e0e67d51f6b0f550b5b432e43e80 100644 GIT binary patch literal 68878 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 diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 885fabc6b2a..46fcf349a9b 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -19,10 +19,10 @@ One of the superior features of iTerm2 is it's content search. The search comes Our ultimate goal is to provide both search within one tab and search from all tabs experiences. But we can start with one-tab search. The search experience should have following features: -1. The search is triggered by KeyBindings. A new setting property named "Search" will be enabled in the Json file. The user can set their own key bindings for search. The default is "ctrl + F". -2. The user search in a XAML AutoSuggestBox, which is contained in a custom SearchBoxControl. The default position of the search box is the top right corner, the user can also move it to bottom right corner to avoid blocking text. +1. The search is triggered by KeyBindings. A new setting property named "openFind" will be enabled in the Json file. The user can set their own key bindings for search. The default is "ctrl + F". +2. The user search in a XAML TextBox, which is contained in a custom SearchBoxControl. The default position of the search box is the top right corner, the user can also move it to bottom right corner to avoid blocking text. 3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. -4. If currently there is no active selection, the search starts from the line that the cursor is on. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. +4. If currently there is no active selection, the search starts from the last line of the viewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The user can move the search box to the bottom right corner. 6. The user should be able to fully interact with the terminal when the search box is on screen. 7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. @@ -63,6 +63,7 @@ The search box defaults to be on the top right corner of the Terminal window. If 5. The search will start from the active selected text (inclusive) if there is one, or where the cursor is. 5. The search will automatically go around when it reaches the starting point. 7. The search box can be positioned at either the top left or the bottom left of the terminal. +8. The user can use Tab to navigate all the elements in the search box. ### Accessibility From e7c525ca8dfe52321fbb0b34af908066be5eede9 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Mon, 25 Nov 2019 14:10:52 -0800 Subject: [PATCH 10/18] Add Esc key binding explnanation --- doc/specs/#605 - Search/spec.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 46fcf349a9b..3c6063fe680 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -25,7 +25,7 @@ Our ultimate goal is to provide both search within one tab and search from all t 4. If currently there is no active selection, the search starts from the last line of the viewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The user can move the search box to the bottom right corner. 6. The user should be able to fully interact with the terminal when the search box is on screen. -7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. +7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually binding to Esc. 8. To avoid searchBox from blocking the terminal window, the search box could be moved to the bottom right by clicking a button. Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. @@ -37,12 +37,13 @@ We will create a SearchBoxControl Xaml UserControl element. When a search proces 3. If the community does not like the current design, we can lift SearchBox to a higher level. ### Search process -1. Search is performed on a XAML TextBox. Once the user presses Enter, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. -2. The user can choose to search up or down by choosing up arrow or down arrow buttons. The chosen button will be styled to indicate it is clicked. If the user does not click the arrows buttons, the default direction is up. -3. The user can choose to do case sensitive or insensitive match by checking a check box. -4. If the search box is focused, the user can navigte all the elements on the search box using tab. When selected, press Enter equals to click. -5. If the user click the "X" button or press Esc, the search stopped and the search box disappears. In phrase one we do not store any state. -6. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. +1. The user press Ctrl+F (or user's custom key binding) to open the search box. Focus will move to the TextBox. +2. Search is performed on a XAML TextBox. Once the user presses Enter, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. +3. The user can choose to search up or down by choosing up arrow or down arrow buttons. The chosen button will be styled to indicate it is clicked. If the user does not click the arrows buttons, the default direction is up. +4. The user can choose to do case sensitive or insensitive match by checking a check box. +5. If the search box is focused, the user can navigte all the elements on the search box using tab. When selected, press Enter equals to click. +6. If the user click the "X" button or press Esc, the search stopped and the search box disappears and focus will move back to Terminal. In phrase one we do not store any state. +7. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. ## UI/UX Design From 8fb0d51f9fd7e37fbb0039bd1a61ac8047a9fe1c Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Mon, 25 Nov 2019 15:21:48 -0800 Subject: [PATCH 11/18] PR feedback changes --- doc/specs/#605 - Search/spec.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 3c6063fe680..729ad8931a3 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -22,7 +22,7 @@ Our ultimate goal is to provide both search within one tab and search from all t 1. The search is triggered by KeyBindings. A new setting property named "openFind" will be enabled in the Json file. The user can set their own key bindings for search. The default is "ctrl + F". 2. The user search in a XAML TextBox, which is contained in a custom SearchBoxControl. The default position of the search box is the top right corner, the user can also move it to bottom right corner to avoid blocking text. 3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. -4. If currently there is no active selection, the search starts from the last line of the viewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. +4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The user can move the search box to the bottom right corner. 6. The user should be able to fully interact with the terminal when the search box is on screen. 7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually binding to Esc. @@ -32,17 +32,17 @@ Conhost already has a module for search. It realizes case sensitive or insensiti We will create a SearchBoxControl Xaml UserControl element. When a search process begins, a SearchBoxControl object will be created and attach to TermControl root grid. In other words, one SearchBox is added for each TermControl. The reasons for this design is: -1. Each TermControl corresponds to an iterative Terminal Window and has a individual text buffer. In phrase 1 we are going to search witin the current terminal text buffer. +1. Each TermControl object is a Terminal Window and has a individual text buffer. In phrase 1 we are going to search witin the current terminal text buffer. 2. If we put the search box under TerminalApp, then the search can only happen on the current focused Terminal. 3. If the community does not like the current design, we can lift SearchBox to a higher level. ### Search process 1. The user press Ctrl+F (or user's custom key binding) to open the search box. Focus will move to the TextBox. -2. Search is performed on a XAML TextBox. Once the user presses Enter, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next time "Find" button is clicked, the search will start before or after the previous searched text. -3. The user can choose to search up or down by choosing up arrow or down arrow buttons. The chosen button will be styled to indicate it is clicked. If the user does not click the arrows buttons, the default direction is up. -4. The user can choose to do case sensitive or insensitive match by checking a check box. +2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next search will start before or after the previous searched text. +3. The user can choose to search up or down by choosing up arrow or down arrow buttons. The chosen button will be styled to indicate it is selected. If the user does not click the arrows buttons, the default direction is up. +4. The user can choose to do case sensitive or insensitive match by checking a check box. The default is case insensitive. 5. If the search box is focused, the user can navigte all the elements on the search box using tab. When selected, press Enter equals to click. -6. If the user click the "X" button or press Esc, the search stopped and the search box disappears and focus will move back to Terminal. In phrase one we do not store any state. +6. If the user click the "X" button or press Esc, the search stopped and the search box disappears and focus will move back to Terminal. In phrase one we do not store any state. 7. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. ## UI/UX Design @@ -101,7 +101,7 @@ In version 1, we want realize a case sensitive/insensitive exact text match. But 2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. We put in our goals for Version 2. 3. Regular experssion match. 4. Search history. -5. High-light while you type. +5. High-light while you type. Emphasizing all the other matches in the buffer with an outline or selection with another color. ## Resources From 3f0a1151ee7c4b6834fbe709716612b09d93d34e Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Tue, 26 Nov 2019 18:37:53 -0800 Subject: [PATCH 12/18] spec review changes --- doc/specs/#605 - Search/spec.md | 64 ++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 729ad8931a3..29fcc9d3a27 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -19,41 +19,56 @@ One of the superior features of iTerm2 is it's content search. The search comes Our ultimate goal is to provide both search within one tab and search from all tabs experiences. But we can start with one-tab search. The search experience should have following features: -1. The search is triggered by KeyBindings. A new setting property named "openFind" will be enabled in the Json file. The user can set their own key bindings for search. The default is "ctrl + F". -2. The user search in a XAML TextBox, which is contained in a custom SearchBoxControl. The default position of the search box is the top right corner, the user can also move it to bottom right corner to avoid blocking text. +1. The search is triggered by KeyBindings. A new setting property named "openFind" will be enabled in the Json file. The user can set their own key bindings for search. The default is ctrl+shift+f. +2. The user search in a XAML TextBox, which is contained in a custom `SearchBoxControl`. The default position of the search box is the top right corner, the user can also move it to bottom right corner to avoid blocking text. 3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. 4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. -5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The user can move the search box to the bottom right corner. +5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The search box could be moved to the bottom right by clicking a button. It will be moved back to the top right corner by clicking the button again. The button should be styled with the first click. 6. The user should be able to fully interact with the terminal when the search box is on screen. -7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually binding to Esc. -8. To avoid searchBox from blocking the terminal window, the search box could be moved to the bottom right by clicking a button. +7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually binding to Esc. -Conhost already has a module for search. It realizes case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. +Conhost already has a module for search. It implements case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. -We will create a SearchBoxControl Xaml UserControl element. When a search process begins, a SearchBoxControl object will be created and attach to TermControl root grid. In other words, one SearchBox is added for each TermControl. The reasons for this design is: +We will create a `SearchBoxControl` Xaml `UserControl` element. When a search process begins, a `SearchBoxControl` object will be created and attach to `TermControl` root grid. In other words, one SearchBox is added for each `TermControl`. The reasons for this design is: -1. Each TermControl object is a Terminal Window and has a individual text buffer. In phrase 1 we are going to search witin the current terminal text buffer. +1. Each `TermControl` object is a Terminal Window and has a individual text buffer. In phrase 1 we are going to search witin the current terminal text buffer. 2. If we put the search box under TerminalApp, then the search can only happen on the current focused Terminal. 3. If the community does not like the current design, we can lift SearchBox to a higher level. -### Search process -1. The user press Ctrl+F (or user's custom key binding) to open the search box. Focus will move to the TextBox. +### Search process implementation +1. Once the user press ctrl+shift+f (or user's custom key binding), a new `SearchBoxControl` object will be created and attached as a child of `TermControl`, Focus will move to the TextBox within the `SearchBoxControl`. 2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next search will start before or after the previous searched text. -3. The user can choose to search up or down by choosing up arrow or down arrow buttons. The chosen button will be styled to indicate it is selected. If the user does not click the arrows buttons, the default direction is up. -4. The user can choose to do case sensitive or insensitive match by checking a check box. The default is case insensitive. -5. If the search box is focused, the user can navigte all the elements on the search box using tab. When selected, press Enter equals to click. -6. If the user click the "X" button or press Esc, the search stopped and the search box disappears and focus will move back to Terminal. In phrase one we do not store any state. -7. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. +3. We re-use the Search module in conhost. It performs the search in a brute-force approach. Starting from every position in the text buffer, the search algorithm compares the span of the searched string with buffer characters, and if the current buffer text matches the whole string, it will return store the position of the text in the buffer and return. The stored position information will be used for selection. +3. The user can choose to search up or down. Search module realizes this, we just need to set a boolean flag. Default is search up. +4. The user can choose to do case sensitive or insensitive match. This also realized by Search module by setting a boolean flag. Default is search case-insensitively. +5. Tab navigation is realized by XAML. We just need to set TabNavigation="Cycle" in `SearchBoxControl`. +6. If the user click the "X" button or press Esc, the search box will disappear and the object will be destructed and detached from the `TermControl` XAML tree. In phrase one we do not store any state. +7. We need to guarantee full interaction with the terminal when the search box is open. To achieve this, search box and terminal input should be separated. If the current keyboard focus is on the search box, then keydown events will be handled on "search box level". ## UI/UX Design ![SearchBox mockup](images/SearchBoxControl.png) -Above is the SearchBoxControl. The two buttons with up/down arrows controls the search direction, it will be styled once clicked. The checkbox, if checked, means that we are searching case-sensitivily. The Dockbottom button on the right of the checkbox is for moving the search box to top/bottom. +Above is the `SearchBoxControl`. + - The two buttons with up/down arrows controls the search direction, Each button will be styled to indicate which search direction is currently selected. + - The checkbox, if checked, means that we are searching case-sensitivily. + - The `Dockbottom` button on the right of the checkbox is for moving the search box to top/bottom. ![SearchBox mockup, arrow button clicked](images/SearchBoxUpSelected.png) -The search box defaults to be on the top right corner of the Terminal window. If the current tab is split into panes, each pane will have a individual searchbox. The user can move it to bottom to avoid it blocking too much screen contents. +The search box defaults to be on the top right corner of the Terminal window. If the current tab is split into panes, each pane will have a individual searchbox. The user can quick toggle the search box between the top and bottom to avoid it blocking too much screen contents. + +#### Search process +1. The user presses ctrl+shift+f (or user's custom key binding) to open the search box. Focus will move to the TextBox. +2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, the search starts and searched text will be selected. Next search will be performed beginning from the current selection and go towards up/down. +3. The user can choose to search up or down by selecting up arrow or down arrow buttons. The chosen button will be styled to indicate it is selected. If the user does not click the arrows buttons, the default direction is up. +4. The user can choose to do case sensitive or insensitive match by checking a check box. The default is case insensitive. +5. If the search box is focused, the user can navigte all the elements on the search box using tab. When selected, press Enter equals to click. +6. If the user click the "X" button or press Esc, the search stopped and the search box disappears and focus will move back to Terminal. +7. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. +8. If the user clicks on the terminal when the search box is open, it will draw focus back to the terminal from the search box. The search box will still stay open. +9. The user can interact with the terminal when the search box is open, which means that ther user can scroll the terminal content, or input text. +10. If the user switches tabs while the search box is open, the re-focusing will move focus to the terminal. ## Capabilities @@ -89,19 +104,18 @@ This feature won't break existing features of Terminal. This feature only launches in need. It does not impact the performance of Terminal. ## Potential Issues - -1. The search bar should not block command line view. -2. Search should not block any program the Terminal is currently executing. + +There is no potential issues. ## Future considerations In version 1, we want realize a case sensitive/insensitive exact text match. But we may consider the following features in version 2: -1. Add "Find" button in dropdown menu to trigger search. -2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. We put in our goals for Version 2. -3. Regular experssion match. -4. Search history. -5. High-light while you type. Emphasizing all the other matches in the buffer with an outline or selection with another color. +1. Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phrase one. +2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phrase. +3. Regular expression match. This is a useful search pattern and is implemented in some editors. However, this use scenario is not used as much as exact text search, thus, we put it in future phrase. +4. Search history. Sometimes users would do the same search for several times, thus, storing the search history is useful. This is not realized by VSCode so it would be a good highlighting point in the future. +5. High-light while you type. Emphasizing all the other matches in the buffer with an outline or selection with another color. This provides a clearer view of searched text. But we need to change the search and selection algorithm, so we put it in the future phrase. ## Resources From ae50bb73b12faa4d4f753cc02ec450ce971024e2 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Mon, 2 Dec 2019 17:57:24 -0800 Subject: [PATCH 13/18] add reliability concerns and some other code review changes --- doc/specs/#605 - Search/spec.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 29fcc9d3a27..dce96b9e84d 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -23,7 +23,7 @@ Our ultimate goal is to provide both search within one tab and search from all t 2. The user search in a XAML TextBox, which is contained in a custom `SearchBoxControl`. The default position of the search box is the top right corner, the user can also move it to bottom right corner to avoid blocking text. 3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. 4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. -5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The search box could be moved to the bottom right by clicking a button. It will be moved back to the top right corner by clicking the button again. The button should be styled with the first click. +5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The search box could be moved to the bottom right by clicking a button. It will be moved back to the top right corner by clicking the button again. The button contains a `DockBottom` icon and it will turn upside-down when the search box is on the bottom. 6. The user should be able to fully interact with the terminal when the search box is on screen. 7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually binding to Esc. @@ -53,6 +53,7 @@ Above is the `SearchBoxControl`. - The two buttons with up/down arrows controls the search direction, Each button will be styled to indicate which search direction is currently selected. - The checkbox, if checked, means that we are searching case-sensitivily. - The `Dockbottom` button on the right of the checkbox is for moving the search box to top/bottom. + - The current style puts the `X` button, the text box and the case sensitivity check box on three different lines. This ensures that the `SearchBoxControl` won't be too wide and block terminal text. Another possible layout style is to put all the elements on one line and collapse the `SearchBoxControl` to a single row. However, this will make the whole search box too wide. If the community provides feedbacks in the future that single-row layout is prefered, we can change in the future. ![SearchBox mockup, arrow button clicked](images/SearchBoxUpSelected.png) @@ -105,18 +106,19 @@ This feature only launches in need. It does not impact the performance of Termin ## Potential Issues -There is no potential issues. +1. If the terminal window is not wide enough for the search box to be visible, the buttons on the right of the `TextBox` will become invisible, but the `TextBox` is still visible and the window could not be narrower than the `TextBox`. This is similar to the behavior of other editors. +2. If the terminal window is not high enough for the search box to be visible, the whole terminal screen, inlcuding the `SearchBoxControl` can disappear. This is similar to the behavior of other editors. ## Future considerations In version 1, we want realize a case sensitive/insensitive exact text match. But we may consider the following features in version 2: 1. Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phrase one. -2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phrase. +2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phrase. To implement multi-tab search, we can let TerminalPage or App own a `SearchBoxControl` object, and provide the text buffer of the current focused terminal. We need to change the search algorithm. 3. Regular expression match. This is a useful search pattern and is implemented in some editors. However, this use scenario is not used as much as exact text search, thus, we put it in future phrase. 4. Search history. Sometimes users would do the same search for several times, thus, storing the search history is useful. This is not realized by VSCode so it would be a good highlighting point in the future. 5. High-light while you type. Emphasizing all the other matches in the buffer with an outline or selection with another color. This provides a clearer view of searched text. But we need to change the search and selection algorithm, so we put it in the future phrase. - +6. Enable shift + Enter for search in the opposite direction. This helps users to search in either direction with simple key bindings. However, tab navigation can help users to change search direction without mouse, so we put it in the future phrase. ## Resources From 85eca9acdc40b0d02ebcc4544bbdb7b8d4055374 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Tue, 10 Dec 2019 14:26:08 -0800 Subject: [PATCH 14/18] Update for new UI experience --- .../#605 - Search/images/SearchBoxControl.png | Bin 42171 -> 42171 bytes .../images/SearchBoxUpSelected.png | Bin 68878 -> 68878 bytes doc/specs/#605 - Search/spec.md | 29 ++++++++---------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/doc/specs/#605 - Search/images/SearchBoxControl.png b/doc/specs/#605 - Search/images/SearchBoxControl.png index 58128772721b36605d8feac1aaadb1fa179afaf9..04b4263bf55ff8b4c6940d95e03c793eb92fbde6 100644 GIT binary patch delta 10309 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 delta 9779 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 diff --git a/doc/specs/#605 - Search/images/SearchBoxUpSelected.png b/doc/specs/#605 - Search/images/SearchBoxUpSelected.png index 54f38155ac33e0e67d51f6b0f550b5b432e43e80..22366df878dbe57009ef66dde0beec1b5009d652 100644 GIT binary patch delta 16674 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 diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index dce96b9e84d..59d8b885c41 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -19,17 +19,16 @@ One of the superior features of iTerm2 is it's content search. The search comes Our ultimate goal is to provide both search within one tab and search from all tabs experiences. But we can start with one-tab search. The search experience should have following features: -1. The search is triggered by KeyBindings. A new setting property named "openFind" will be enabled in the Json file. The user can set their own key bindings for search. The default is ctrl+shift+f. -2. The user search in a XAML TextBox, which is contained in a custom `SearchBoxControl`. The default position of the search box is the top right corner, the user can also move it to bottom right corner to avoid blocking text. +1. The search is triggered by KeyBindings. A new setting property named "find" will be enabled in the Json file. The user can set their own key bindings for search. The default is ctrl+shift+f. +2. The user search in a XAML TextBox, which is contained in a custom `SearchBoxControl`. The default position of the search box is the top right corner. 3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. -4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. -5. The search dialog should not block terminal's view. In phrase one, this is achieved by make search box movable. The search box could be moved to the bottom right by clicking a button. It will be moved back to the top right corner by clicking the button again. The button contains a `DockBottom` icon and it will turn upside-down when the search box is on the bottom. -6. The user should be able to fully interact with the terminal when the search box is on screen. -7. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually binding to Esc. +4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. +5. The user should be able to fully interact with the terminal when the search box is on screen. +6. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually binding to Esc. Conhost already has a module for search. It implements case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. -We will create a `SearchBoxControl` Xaml `UserControl` element. When a search process begins, a `SearchBoxControl` object will be created and attach to `TermControl` root grid. In other words, one SearchBox is added for each `TermControl`. The reasons for this design is: +We will create a `SearchBoxControl` Xaml `UserControl` element. When a search process begins, a `SearchBoxControl` object will be created and attached to `TermControl` root grid. In other words, one SearchBox is added for each `TermControl`. The reasons for this design is: 1. Each `TermControl` object is a Terminal Window and has a individual text buffer. In phrase 1 we are going to search witin the current terminal text buffer. 2. If we put the search box under TerminalApp, then the search can only happen on the current focused Terminal. @@ -51,9 +50,8 @@ We will create a `SearchBoxControl` Xaml `UserControl` element. When a search pr Above is the `SearchBoxControl`. - The two buttons with up/down arrows controls the search direction, Each button will be styled to indicate which search direction is currently selected. - - The checkbox, if checked, means that we are searching case-sensitivily. - - The `Dockbottom` button on the right of the checkbox is for moving the search box to top/bottom. - - The current style puts the `X` button, the text box and the case sensitivity check box on three different lines. This ensures that the `SearchBoxControl` won't be too wide and block terminal text. Another possible layout style is to put all the elements on one line and collapse the `SearchBoxControl` to a single row. However, this will make the whole search box too wide. If the community provides feedbacks in the future that single-row layout is prefered, we can change in the future. + - The button with a "Aa" icon, if pressed, means that we are searching case-sensitivily. + - The current style puts all elements - the `X` button, the text box and the search pattern control buttons on one single line. This ensures that the `SearchBoxControl` won't be too high and block terminal text. This is similar with VSCode. Another possible layout style is to put elements in multiple layers. This will occupy more lines, but the search dialog will narrower. Considering that there is not many elements, we do not need multiple layers. ![SearchBox mockup, arrow button clicked](images/SearchBoxUpSelected.png) @@ -77,10 +75,10 @@ The search box defaults to be on the top right corner of the Terminal window. If 2. The user can choose to search case sensitively and insensitively. 3. The user can search up or down. 4. Found text will be selected. -5. The search will start from the active selected text (inclusive) if there is one, or where the cursor is. -5. The search will automatically go around when it reaches the starting point. -7. The search box can be positioned at either the top left or the bottom left of the terminal. -8. The user can use Tab to navigate all the elements in the search box. +5. The search will start from the active selected text (inclusive) if there is one, or the end of the written text. +6. The search will automatically go around when it reaches the starting point. +7. The user can use Tab to navigate all the elements in the search box. +8. The user can search in the opposite direction with Shift + Enter ### Accessibility @@ -94,7 +92,7 @@ This feature should not introduce any new security issues. ### Reliability 1. The key input of Terminal command line and the search box should be separated. search box should not block interaction with the command line when it is open. -2. The search box should not block text. This issue could be addressed by make search box movable. +2. The search box should not block too much text. The search box only occupies one line, so it won't have big impact on the readibility of the terminal output. ### Compatibility @@ -118,7 +116,6 @@ In version 1, we want realize a case sensitive/insensitive exact text match. But 3. Regular expression match. This is a useful search pattern and is implemented in some editors. However, this use scenario is not used as much as exact text search, thus, we put it in future phrase. 4. Search history. Sometimes users would do the same search for several times, thus, storing the search history is useful. This is not realized by VSCode so it would be a good highlighting point in the future. 5. High-light while you type. Emphasizing all the other matches in the buffer with an outline or selection with another color. This provides a clearer view of searched text. But we need to change the search and selection algorithm, so we put it in the future phrase. -6. Enable shift + Enter for search in the opposite direction. This helps users to search in either direction with simple key bindings. However, tab navigation can help users to change search direction without mouse, so we put it in the future phrase. ## Resources From 388d6ca23178f87664efec13ad5635e746c44b88 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Tue, 10 Dec 2019 16:54:54 -0800 Subject: [PATCH 15/18] Fix typos and replace images --- doc/specs/#605 - Search/spec.md | 35 +++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 59d8b885c41..ab17b9ee9f4 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -1,7 +1,7 @@ --- author: Kaiyu Wang KaiyuWang16/kawa@microsoft.com -created on: 2019-10-16 -last updated: 2019-10-16 +created on: 2019-12-10 +last updated: 2019-12-10 issue id: #605 --- @@ -21,27 +21,27 @@ Our ultimate goal is to provide both search within one tab and search from all t 1. The search is triggered by KeyBindings. A new setting property named "find" will be enabled in the Json file. The user can set their own key bindings for search. The default is ctrl+shift+f. 2. The user search in a XAML TextBox, which is contained in a custom `SearchBoxControl`. The default position of the search box is the top right corner. -3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phrase, we will focus on case sensitive/insensitive text exact match. +3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phase, we will focus on case sensitive/insensitive text exact match. 4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 5. The user should be able to fully interact with the terminal when the search box is on screen. -6. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually binding to Esc. +6. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually bound to Esc. Conhost already has a module for search. It implements case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. We will create a `SearchBoxControl` Xaml `UserControl` element. When a search process begins, a `SearchBoxControl` object will be created and attached to `TermControl` root grid. In other words, one SearchBox is added for each `TermControl`. The reasons for this design is: -1. Each `TermControl` object is a Terminal Window and has a individual text buffer. In phrase 1 we are going to search witin the current terminal text buffer. +1. Each `TermControl` object is a Terminal Window and has a individual text buffer. In phase 1 we are going to search witin the current terminal text buffer. 2. If we put the search box under TerminalApp, then the search can only happen on the current focused Terminal. 3. If the community does not like the current design, we can lift SearchBox to a higher level. ### Search process implementation -1. Once the user press ctrl+shift+f (or user's custom key binding), a new `SearchBoxControl` object will be created and attached as a child of `TermControl`, Focus will move to the TextBox within the `SearchBoxControl`. +1. Once the user press ctrl+shift+f (or user's custom key binding), a new `SearchBoxControl` object will be created and attached as a child of `TermControl`. Focus will move to the TextBox within the `SearchBoxControl`. 2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, we start to search from the last line of the current viewport or the current selection, and try to find the exact text in the text buffer. The nearest searched one will be selected. Then the search start point will be set to the selected text. The next search will start before or after the previous searched text. 3. We re-use the Search module in conhost. It performs the search in a brute-force approach. Starting from every position in the text buffer, the search algorithm compares the span of the searched string with buffer characters, and if the current buffer text matches the whole string, it will return store the position of the text in the buffer and return. The stored position information will be used for selection. 3. The user can choose to search up or down. Search module realizes this, we just need to set a boolean flag. Default is search up. 4. The user can choose to do case sensitive or insensitive match. This also realized by Search module by setting a boolean flag. Default is search case-insensitively. 5. Tab navigation is realized by XAML. We just need to set TabNavigation="Cycle" in `SearchBoxControl`. -6. If the user click the "X" button or press Esc, the search box will disappear and the object will be destructed and detached from the `TermControl` XAML tree. In phrase one we do not store any state. +6. If the user clicks on the "X" button or press Esc, the search box will disappear and the object will be destructed and detached from the `TermControl` XAML tree. In phase one we do not store any state. 7. We need to guarantee full interaction with the terminal when the search box is open. To achieve this, search box and terminal input should be separated. If the current keyboard focus is on the search box, then keydown events will be handled on "search box level". ## UI/UX Design @@ -55,19 +55,19 @@ Above is the `SearchBoxControl`. ![SearchBox mockup, arrow button clicked](images/SearchBoxUpSelected.png) -The search box defaults to be on the top right corner of the Terminal window. If the current tab is split into panes, each pane will have a individual searchbox. The user can quick toggle the search box between the top and bottom to avoid it blocking too much screen contents. +The search box defaults to be on the top right corner of the Terminal window. If the current tab is split into panes, each pane will have a individual searchbox. #### Search process 1. The user presses ctrl+shift+f (or user's custom key binding) to open the search box. Focus will move to the TextBox. 2. Search is performed on a XAML TextBox. Once the user presses Enter or click up/down arrow button, the search starts and searched text will be selected. Next search will be performed beginning from the current selection and go towards up/down. 3. The user can choose to search up or down by selecting up arrow or down arrow buttons. The chosen button will be styled to indicate it is selected. If the user does not click the arrows buttons, the default direction is up. 4. The user can choose to do case sensitive or insensitive match by checking a check box. The default is case insensitive. -5. If the search box is focused, the user can navigte all the elements on the search box using tab. When selected, press Enter equals to click. +5. If the search box is focused, the user can navigate all the elements on the search box using tab. When selected, press Enter equals to click. 6. If the user click the "X" button or press Esc, the search stopped and the search box disappears and focus will move back to Terminal. 7. Once the search box is closed (exiting search mode), the selection will still be there. This coincides with the current VS Code and cmd experience. To get rid of the selection, the user can just click other area of the window. 8. If the user clicks on the terminal when the search box is open, it will draw focus back to the terminal from the search box. The search box will still stay open. -9. The user can interact with the terminal when the search box is open, which means that ther user can scroll the terminal content, or input text. -10. If the user switches tabs while the search box is open, the re-focusing will move focus to the terminal. +9. The user can interact with the terminal when the search box is open, which means that the user can scroll the terminal content, or input text when the focus is on the terminal control. +10. If the user switches tabs while the search box is open, the focus will be moved back to the terminal. ## Capabilities @@ -91,7 +91,7 @@ This feature should not introduce any new security issues. ### Reliability -1. The key input of Terminal command line and the search box should be separated. search box should not block interaction with the command line when it is open. +1. The key input of Terminal command line and the search box should be separated. Search box should not block interaction with the command line when it is open. 2. The search box should not block too much text. The search box only occupies one line, so it won't have big impact on the readibility of the terminal output. ### Compatibility @@ -104,18 +104,19 @@ This feature only launches in need. It does not impact the performance of Termin ## Potential Issues -1. If the terminal window is not wide enough for the search box to be visible, the buttons on the right of the `TextBox` will become invisible, but the `TextBox` is still visible and the window could not be narrower than the `TextBox`. This is similar to the behavior of other editors. +1. If the terminal window is not wide enough for the search box to be visible, the buttons on the right of the `TextBox` will become invisible, but the `TextBox` is still visible and the window could not be narrower than the `TextBox`. This is similar to the behavior of other editors. 2. If the terminal window is not high enough for the search box to be visible, the whole terminal screen, inlcuding the `SearchBoxControl` can disappear. This is similar to the behavior of other editors. ## Future considerations In version 1, we want realize a case sensitive/insensitive exact text match. But we may consider the following features in version 2: -1. Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phrase one. -2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phrase. To implement multi-tab search, we can let TerminalPage or App own a `SearchBoxControl` object, and provide the text buffer of the current focused terminal. We need to change the search algorithm. -3. Regular expression match. This is a useful search pattern and is implemented in some editors. However, this use scenario is not used as much as exact text search, thus, we put it in future phrase. +1. Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phase one. +2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phase. To implement multi-tab search, we can let TerminalPage or App own a `SearchBoxControl` object, and provide the text buffer of the current focused terminal. We need to change the search algorithm. +3. Regular expression match. This is a useful search pattern and is implemented in some editors. However, this use scenario is not used as much as exact text search, thus, we put it in future phase. 4. Search history. Sometimes users would do the same search for several times, thus, storing the search history is useful. This is not realized by VSCode so it would be a good highlighting point in the future. -5. High-light while you type. Emphasizing all the other matches in the buffer with an outline or selection with another color. This provides a clearer view of searched text. But we need to change the search and selection algorithm, so we put it in the future phrase. +5. High-light while you type. Emphasizing all the other matches in the buffer with an outline or selection with another color. This provides a clearer view of searched text. But we need to change the search and selection algorithm, so we put it in the future phase. +6. Add size handle. Some text editors let the user resize the search box, and there is a size handle on the left side of the search box. This helps user when they search for long text. If the community desires it we may add a similar feature. ## Resources From c1f17e01ca52e960347c5c953223cc1cbe1eca98 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Tue, 10 Dec 2019 17:52:55 -0800 Subject: [PATCH 16/18] Replace images and add new future works --- .../#605 - Search/images/SearchBoxControl.png | Bin 42171 -> 42171 bytes .../images/SearchBoxControlNoEnoughWidth.png | Bin 0 -> 11460 bytes .../images/SearchBoxUpSelected.png | Bin 68878 -> 68878 bytes doc/specs/#605 - Search/spec.md | 5 +++-- 4 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 doc/specs/#605 - Search/images/SearchBoxControlNoEnoughWidth.png diff --git a/doc/specs/#605 - Search/images/SearchBoxControl.png b/doc/specs/#605 - Search/images/SearchBoxControl.png index 04b4263bf55ff8b4c6940d95e03c793eb92fbde6..27fd0292abb4d40cb52e881070d4b5f6c4e9e01f 100644 GIT binary patch delta 3350 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 diff --git a/doc/specs/#605 - Search/images/SearchBoxControlNoEnoughWidth.png b/doc/specs/#605 - Search/images/SearchBoxControlNoEnoughWidth.png new file mode 100644 index 0000000000000000000000000000000000000000..05fba3c4ae4e8f41780e857a3548d9a80b236e1e GIT binary patch literal 11460 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 literal 0 HcmV?d00001 diff --git a/doc/specs/#605 - Search/images/SearchBoxUpSelected.png b/doc/specs/#605 - Search/images/SearchBoxUpSelected.png index 22366df878dbe57009ef66dde0beec1b5009d652..b6c4faf4c2fc5ae0a9fa14596bf087e03bc4533d 100644 GIT binary patch delta 12727 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 ODpa1ls<9I<9sNHkTqz&` delta 10448 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 diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index ab17b9ee9f4..1b9f0409f8a 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -48,7 +48,7 @@ We will create a `SearchBoxControl` Xaml `UserControl` element. When a search pr ![SearchBox mockup](images/SearchBoxControl.png) -Above is the `SearchBoxControl`. +Above is the `SearchBoxControl` in dark theme and light theme. - The two buttons with up/down arrows controls the search direction, Each button will be styled to indicate which search direction is currently selected. - The button with a "Aa" icon, if pressed, means that we are searching case-sensitivily. - The current style puts all elements - the `X` button, the text box and the search pattern control buttons on one single line. This ensures that the `SearchBoxControl` won't be too high and block terminal text. This is similar with VSCode. Another possible layout style is to put elements in multiple layers. This will occupy more lines, but the search dialog will narrower. Considering that there is not many elements, we do not need multiple layers. @@ -104,7 +104,8 @@ This feature only launches in need. It does not impact the performance of Termin ## Potential Issues -1. If the terminal window is not wide enough for the search box to be visible, the buttons on the right of the `TextBox` will become invisible, but the `TextBox` is still visible and the window could not be narrower than the `TextBox`. This is similar to the behavior of other editors. +1. If the terminal window is not wide enough for the search box to be visible, the buttons on the right of the `TextBox` will become invisible, but the `TextBox` is still visible and the window could not be narrower than the `TextBox`. This is similar to the behavior of other editors. Please see the image below: + ![SearchBox width not enough](images/SearchBoxControlNoEnoughWidth.png) 2. If the terminal window is not high enough for the search box to be visible, the whole terminal screen, inlcuding the `SearchBoxControl` can disappear. This is similar to the behavior of other editors. ## Future considerations From 0b785e9851109cd95835d2af8635888047052233 Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Wed, 11 Dec 2019 14:52:09 -0800 Subject: [PATCH 17/18] Add issue link for tracking future features --- doc/specs/#605 - Search/spec.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 1b9f0409f8a..3ec0f3486f8 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -1,5 +1,5 @@ --- -author: Kaiyu Wang KaiyuWang16/kawa@microsoft.com +author: Kaiyu Wang KaiyuWang16 created on: 2019-12-10 last updated: 2019-12-10 issue id: #605 @@ -24,7 +24,7 @@ Our ultimate goal is to provide both search within one tab and search from all t 3. We can have multiple search methods. The simplest one is exact text match. Other match methods include case-sensitive exact match and regex match. In the first phase, we will focus on case sensitive/insensitive text exact match. 4. If currently there is no active selection, the search starts from the last line of the mutableViewport. If there is an active selection, we start from the previous or the next text of the selected text. We automatically go around if we reach the start point of the search. 5. The user should be able to fully interact with the terminal when the search box is on screen. -6. For accessibility concerns, the user should be able to navigate all the iteractive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually bound to Esc. +6. For accessibility concerns, the user should be able to navigate all the interactive elements on the search box using keyboard tab if the search box is focused. Searchbox could be created and closed with keyboard bindings. Close is usually bound to Esc. Conhost already has a module for search. It implements case sensitive or insensitive exact text match search, and it provides methods to select the found word. However, we want to make search as a shared component between Terminal and Console host. Now search module is part of Conhost, and its dependencies include BufferOut and some other types in ConHost such as SCREEN_INFORMATION. In order to make Search a shared component, we need to remove its dependency on ConHost types. BufferOut is already a shared component, but we need to make sure there is no other Conhost dependency. @@ -112,13 +112,15 @@ This feature only launches in need. It does not impact the performance of Termin In version 1, we want realize a case sensitive/insensitive exact text match. But we may consider the following features in version 2: -1. Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phase one. +1. Add "Find" button in dropdown menu to trigger search.Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phase one. 2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phase. To implement multi-tab search, we can let TerminalPage or App own a `SearchBoxControl` object, and provide the text buffer of the current focused terminal. We need to change the search algorithm. 3. Regular expression match. This is a useful search pattern and is implemented in some editors. However, this use scenario is not used as much as exact text search, thus, we put it in future phase. 4. Search history. Sometimes users would do the same search for several times, thus, storing the search history is useful. This is not realized by VSCode so it would be a good highlighting point in the future. 5. High-light while you type. Emphasizing all the other matches in the buffer with an outline or selection with another color. This provides a clearer view of searched text. But we need to change the search and selection algorithm, so we put it in the future phase. 6. Add size handle. Some text editors let the user resize the search box, and there is a size handle on the left side of the search box. This helps user when they search for long text. If the community desires it we may add a similar feature. +This open issue tracks the phase features of Search: https://github.com/microsoft/terminal/issues/3920 + ## Resources Github Issue: https://github.com/microsoft/terminal/issues/605 From a16ba7830e0c539988fa40ba144438469f1452ac Mon Sep 17 00:00:00 2001 From: Kaiyu Wang Date: Fri, 13 Dec 2019 16:35:39 -0800 Subject: [PATCH 18/18] remove duplicate text --- doc/specs/#605 - Search/spec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/specs/#605 - Search/spec.md b/doc/specs/#605 - Search/spec.md index 3ec0f3486f8..a874c17eeb5 100644 --- a/doc/specs/#605 - Search/spec.md +++ b/doc/specs/#605 - Search/spec.md @@ -112,7 +112,7 @@ This feature only launches in need. It does not impact the performance of Termin In version 1, we want realize a case sensitive/insensitive exact text match. But we may consider the following features in version 2: -1. Add "Find" button in dropdown menu to trigger search.Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phase one. +1. Add "Find" button in dropdown menu to trigger search. This enables the search feature to be operated with mouse only. However, this is not required by Accessibility so we do not cover this in phase one. 2. Search from all tabs. For Version 1 we just want to realize search within one tab. However, the community also requests search from all tabs. This may require a big change to the search algorithm, but it is not seen as a popular use scenario, so we put it future phase. To implement multi-tab search, we can let TerminalPage or App own a `SearchBoxControl` object, and provide the text buffer of the current focused terminal. We need to change the search algorithm. 3. Regular expression match. This is a useful search pattern and is implemented in some editors. However, this use scenario is not used as much as exact text search, thus, we put it in future phase. 4. Search history. Sometimes users would do the same search for several times, thus, storing the search history is useful. This is not realized by VSCode so it would be a good highlighting point in the future.