diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt index 81bfde277..8d751a187 100644 --- a/.github/actions/spelling/excludes.txt +++ b/.github/actions/spelling/excludes.txt @@ -67,6 +67,7 @@ SUMS$ ^src/terminal/parser/ft_fuzzer/run\.bat$ ^src/terminal/parser/ft_fuzzer/VTCommandFuzzer\.cpp$ ^src/terminal/parser/ft_fuzzwrapper/run\.bat$ +^src/terminal/parser/ut_parser/Base64Test.cpp$ ^src/terminal/parser/ut_parser/run\.bat$ ^src/tools/integrity/packageuwp/ConsoleUWP\.appxSources$ ^src/tools/lnkd/lnkd\.bat$ diff --git a/.github/actions/spelling/expect/expect.txt b/.github/actions/spelling/expect/expect.txt index dccd6d740..c18d880e4 100644 --- a/.github/actions/spelling/expect/expect.txt +++ b/.github/actions/spelling/expect/expect.txt @@ -938,6 +938,7 @@ GTP guc gui guidatom +guiddef GValue GWL GWLP @@ -1535,6 +1536,7 @@ NOCOLOR NOCOMM NOCONTEXTHELP NOCOPYBITS +nodefaultlib nodiscard NODUP noexcept @@ -2232,6 +2234,7 @@ STARTWPARMSW Statusline stdafx STDAPI +stdc stdcall stdcpp stderr diff --git a/doc/terminal-v2-roadmap.md b/doc/terminal-v2-roadmap.md index 34fe686ee..9db0aa652 100644 --- a/doc/terminal-v2-roadmap.md +++ b/doc/terminal-v2-roadmap.md @@ -2,7 +2,7 @@ ## Overview -This document outlines the roadmap towards delivering Windows Terminal 2.0 by Winter 2021. +This document outlines the roadmap towards delivering Windows Terminal 2.0. ## Milestones @@ -32,8 +32,8 @@ Below is the schedule for when milestones will be included in release builds of | 2021-07-14 | [1.10] in Windows Terminal Preview
[1.9] in Windows Terminal | [Windows Terminal Preview 1.10 Release](https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-10-release/) | | 2021-08-31 | [1.11] in Windows Terminal Preview
[1.10] in Windows Terminal | [Windows Terminal Preview 1.11 Release](https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-11-release/) | | 2021-10-20 | [1.12] in Windows Terminal Preview
[1.11] in Windows Terminal | [Windows Terminal Preview 1.12 Release](https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-12-release/) | -| 2021-11-30 | 2.0 RC in Windows Terminal Preview
2.0 RC in Windows Terminal | | -| 2021-12-31 | [2.0] in Windows Terminal Preview
[2.0] in Windows Terminal | | +| | 2.0 RC in Windows Terminal Preview
2.0 RC in Windows Terminal | | +| | [2.0] in Windows Terminal Preview
[2.0] in Windows Terminal | | ## Issue Triage & Prioritization @@ -49,28 +49,32 @@ The following are a list of the key scenarios we're aiming to deliver for Termin > πŸ‘‰ Note: There are many other features that don't fit within 2.0, but will be re-assessed and prioritized for 3.0, the plan for which will be published in 2021. -| Priority\* | Scenario | Description/Notes | -| ---------- | -------- | ----------------- | -| 0 | Settings UI | A user interface that connects to settings.json. This provides a way for people to edit their settings without having to edit a JSON file.

Issue: [#1564]
Specs: [#6720], [#6904]
Implementation: [#7283], [#7370], [#8048] | -| 0 | Command palette | A popup menu to list possible actions and commands.

Issues: [#5400], [#2046]
Spec: [#2193]
Implementation: [#6635] | -| 1 | Tab tear-off | The ability to tear a tab out of the current window and spawn a new window or attach it to a separate window.

Issue: [#1256], [#5000]
Spec: [#2080], [#7240] | -| 1 | Clickable links | Hyperlinking any links that appear in the text buffer. When clicking on the link, the link will open in your default browser.

Issue: [#574]
Implementation: [#7251] | -| 1 | Default terminal | If a command-line application is spawned, it should open in Windows Terminal (if installed) or your preferred terminal

Issue: [#492]
Spec: [#2080], [#7414] | -| 1 | Overall theme support | Tab coloring, title bar coloring, pane border coloring, pane border width, definition of what makes a theme

Issue: [#3327]
Spec: [#5772] | -| 1 | Open profile elevated | Configure profiles to always open elevated (if Terminal was run unelevated)

Issue: [#5000], [#632]
Spec: [#8455] | -| 1 | Open tab in existing window | Open new tabs in existing Terminal windows

Issue: [#5000], [#4472]
Spec: [#8135] | -| 1 | Traditional opacity | Have a transparent background without the acrylic blur.

Issue: [#603]
**Current State**: Blocked on WinUI 3.0 | -| 2 | SnapOnOutput, scroll lock | Pause output or scrolling on click.

Issue: [#980]
Spec: [#2529]
Implementation: [#6062] | -| 2 | Infinite scrollback | Have an infinite history for the text buffer.

Issue: [#1410] | -| 2 | Pane management | All issues listed out in the original issue. Some features include pane resizing with mouse, pane zooming, and opening a pane by prompting which profile to use.

Issue: [#1000] | -| 2 | Theme marketplace | Marketplace for creation and distribution of themes.
Dependent on overall theming | -| 2 | Jump list | Show profiles from task bar (on right click)/start menu.

Issue: [#576]
Implementation: [#7515] | -| 2 | Open with multiple tabs | A setting that allows Windows Terminal to launch with a specific tab configuration (not using only command line arguments).

Issue: [#756] | -| 3 | Open in Windows Terminal | Functionality to right click on a file or folder and select Open in Windows Terminal.

Issue: [#1060]
Implementation: [#6100] | -| 3 | Session restoration | Launch Windows Terminal and the previous session is restored with the proper tab and pane configuration and starting directories.

Issues: [#961], [#960], [#766] | -| 3 | Quake mode | Provide a quick launch terminal that appears and disappears when a hotkey is pressed.

Issue: [#653] | -| 3 | Settings migration infrastructure | Migrate people's settings without breaking them. Hand-in-hand with settings UI. | -| 3 | Pointer bindings | Provide settings that can be bound to the mouse.

Issue: [#1553] | +| Priority\* | Scenario | Description/Notes | State | +| ---------- | -------- | ----------------- | ----- | +| 0 | Settings UI | A user interface that connects to settings.json. This provides a way for people to edit their settings without having to edit a JSON file.

Issue: [#1564]
Specs: [#6720], [#6904]
Implementation: [#7283], [#7370], [#8048] | βœ”οΈ | +| 0 | Command palette | A popup menu to list possible actions and commands.

Issues: [#5400], [#2046]
Spec: [#2193]
Implementation: [#6635] | βœ”οΈ | +| 1 | Tab tear-off | The ability to tear a tab out of the current window and spawn a new window or attach it to a separate window.

Issue: [#1256], [#5000]
Spec: [#2080], [#7240] | πŸ“ | +| 1 | Clickable links | Hyperlinking any links that appear in the text buffer. When clicking on the link, the link will open in your default browser.

Issue: [#574]
Implementation: [#7251] | βœ”οΈ | +| 1 | Default terminal | If a command-line application is spawned, it should open in Windows Terminal (if installed) or your preferred terminal

Issue: [#492]
Spec: [#2080], [#7414] | βœ”οΈ | +| 1 | Overall theme support | Tab coloring, title bar coloring, pane border coloring, pane border width, definition of what makes a theme

Issue: [#3327]
Spec: [#5772] | 🦢 | +| 1 | Open profile elevated | Configure profiles to always open elevated (if Terminal was run unelevated)

Issue: [#5000], [#632]
Spec: [#8455] | πŸ“ | +| 1 | Open tab in existing window | Open new tabs in existing Terminal windows

Issue: [#5000], [#4472]
Spec: [#8135] | βœ”οΈ | +| 1 | Traditional opacity | Have a transparent background without the acrylic blur.

Issue: [#603] | βœ”οΈ | +| 2 | SnapOnOutput, scroll lock | Pause output or scrolling on click.

Issue: [#980]
Spec: [#2529]
Implementation: [#6062] | βœ”οΈ | +| 2 | Infinite scrollback | Have an infinite history for the text buffer.

Issue: [#1410] | 🦢 | +| 2 | Pane management | All issues listed out in the original issue. Some features include pane resizing with mouse, pane zooming, and opening a pane by prompting which profile to use.

Issue: [#1000] | πŸ“ | +| 2 | Theme marketplace | Marketplace for creation and distribution of themes.
Dependent on overall theming | 🦢 | +| 2 | Jump list | Show profiles from task bar (on right click)/start menu.

Issue: [#576]
Implementation: [#7515] | βœ”οΈ | +| 2 | Open with multiple tabs | A setting that allows Windows Terminal to launch with a specific tab configuration (not using only command line arguments).

Issue: [#756] | βœ”οΈ | +| 3 | Open in Windows Terminal | Functionality to right click on a file or folder and select Open in Windows Terminal.

Issue: [#1060]
Implementation: [#6100] | βœ”οΈ | +| 3 | Session restoration | Launch Windows Terminal and the previous session is restored with the proper tab and pane configuration and starting directories.

Issues: [#961], [#960], [#766] | βœ”οΈ | +| 3 | Quake mode | Provide a quick launch terminal that appears and disappears when a hotkey is pressed.

Issue: [#653] | βœ”οΈ | +| 3 | Settings migration infrastructure | Migrate people's settings without breaking them. Hand-in-hand with settings UI. | 🦢 | +| 3 | Pointer bindings | Provide settings that can be bound to the mouse.

Issue: [#1553] | 🦢 | + +* πŸ“: The feature is currently in progress +* βœ”οΈ: The feature is complete and shipped in a Preview build +* 🦢: The feature is at risk of being punted to a future release cycle (beyond 2.0) Feature Notes: diff --git a/src/cascadia/LocalTests_SettingsModel/DeserializationTests.cpp b/src/cascadia/LocalTests_SettingsModel/DeserializationTests.cpp index ea603c942..c20a9a853 100644 --- a/src/cascadia/LocalTests_SettingsModel/DeserializationTests.cpp +++ b/src/cascadia/LocalTests_SettingsModel/DeserializationTests.cpp @@ -7,7 +7,9 @@ #include "../TerminalSettingsModel/CascadiaSettings.h" #include "JsonTestClass.h" #include "TestUtils.h" + #include +#include using namespace Microsoft::Console; using namespace WEX::Logging; @@ -70,6 +72,7 @@ namespace SettingsModelLocalTests TEST_METHOD(TestCloneInheritanceTree); TEST_METHOD(TestValidDefaults); TEST_METHOD(TestInheritedCommand); + TEST_METHOD(LoadFragmentsWithMultipleUpdates); private: static winrt::com_ptr createSettings(const std::string_view& userJSON) @@ -1979,4 +1982,34 @@ namespace SettingsModelLocalTests VERIFY_IS_NULL(actualKeyChord); } } + + // This test ensures GH#11597 doesn't regress. + void DeserializationTests::LoadFragmentsWithMultipleUpdates() + { + static constexpr std::wstring_view fragmentSource{ L"fragment" }; + static constexpr std::string_view fragmentJson{ R"({ + "profiles": [ + { + "updates": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", + "cursorShape": "filledBox" + }, + { + "updates": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", + "cursorShape": "filledBox" + }, + { + "guid": "{6239a42c-0000-49a3-80bd-e8fdd045185c}", + "commandline": "cmd.exe" + } + ] + })" }; + + implementation::SettingsLoader loader{ std::string_view{}, DefaultJson }; + loader.MergeInboxIntoUserSettings(); + loader.MergeFragmentIntoUserSettings(winrt::hstring{ fragmentSource }, fragmentJson); + loader.FinalizeLayering(); + + VERIFY_IS_FALSE(loader.duplicateProfile); + VERIFY_ARE_EQUAL(3u, loader.userSettings.profiles.size()); + } } diff --git a/src/cascadia/TerminalApp/TerminalPage.xaml b/src/cascadia/TerminalApp/TerminalPage.xaml index ef16f6a7a..6c0705437 100644 --- a/src/cascadia/TerminalApp/TerminalPage.xaml +++ b/src/cascadia/TerminalApp/TerminalPage.xaml @@ -15,6 +15,7 @@ + @@ -22,8 +23,50 @@ + + + +