From 8a34341cb2f2038392a7117377dfb910fea08e84 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Mon, 9 Sep 2024 15:48:15 -0700 Subject: [PATCH 01/21] Add a Compatibility page to the Settings UI --- .../TerminalSettingsEditor/Compatibility.cpp | 28 +++++++++++++ .../TerminalSettingsEditor/Compatibility.h | 42 +++++++++++++++++++ .../TerminalSettingsEditor/Compatibility.idl | 20 +++++++++ .../TerminalSettingsEditor/Compatibility.xaml | 30 +++++++++++++ .../TerminalSettingsEditor/MainPage.cpp | 8 ++++ .../TerminalSettingsEditor/MainPage.xaml | 7 ++++ ...Microsoft.Terminal.Settings.Editor.vcxproj | 13 ++++++ .../Resources/en-US/Resources.resw | 12 ++++++ 8 files changed, 160 insertions(+) create mode 100644 src/cascadia/TerminalSettingsEditor/Compatibility.cpp create mode 100644 src/cascadia/TerminalSettingsEditor/Compatibility.h create mode 100644 src/cascadia/TerminalSettingsEditor/Compatibility.idl create mode 100644 src/cascadia/TerminalSettingsEditor/Compatibility.xaml diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp new file mode 100644 index 00000000000..5da88d6288e --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#include "pch.h" +#include "Compatibility.h" +#include "Compatibility.g.cpp" +#include "CompatibilityViewModel.g.cpp" + +using namespace winrt::Windows::UI::Xaml::Navigation; +using namespace winrt::Microsoft::Terminal::Settings::Model; + +namespace winrt::Microsoft::Terminal::Settings::Editor::implementation +{ + CompatibilityViewModel::CompatibilityViewModel(Model::GlobalAppSettings globalSettings) : + _GlobalSettings{ globalSettings } + { + } + + Compatibility::Compatibility() + { + InitializeComponent(); + } + + void Compatibility::OnNavigatedTo(const NavigationEventArgs& e) + { + _ViewModel = e.Parameter().as(); + } +} diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.h b/src/cascadia/TerminalSettingsEditor/Compatibility.h new file mode 100644 index 00000000000..51a34bdcdc1 --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.h @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#pragma once + +#include "Compatibility.g.h" +#include "CompatibilityViewModel.g.h" +#include "ViewModelHelpers.h" +#include "Utils.h" + +namespace winrt::Microsoft::Terminal::Settings::Editor::implementation +{ + struct CompatibilityViewModel : CompatibilityViewModelT, ViewModelHelper + { + public: + CompatibilityViewModel(Model::GlobalAppSettings globalSettings); + + // DON'T YOU DARE ADD A `WINRT_CALLBACK(PropertyChanged` TO A CLASS DERIVED FROM ViewModelHelper. Do this instead: + using ViewModelHelper::PropertyChanged; + + PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, ForceVTInput); + + private: + Model::GlobalAppSettings _GlobalSettings; + }; + + struct Compatibility : public HasScrollViewer, CompatibilityT + { + Compatibility(); + + void OnNavigatedTo(const winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs& e); + + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Editor::CompatibilityViewModel, ViewModel, PropertyChanged.raise, nullptr); + }; +} + +namespace winrt::Microsoft::Terminal::Settings::Editor::factory_implementation +{ + BASIC_FACTORY(Compatibility); + BASIC_FACTORY(CompatibilityViewModel); +} diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.idl b/src/cascadia/TerminalSettingsEditor/Compatibility.idl new file mode 100644 index 00000000000..dcafcd1b86f --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.idl @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#include "ViewModelHelpers.idl.h" + +namespace Microsoft.Terminal.Settings.Editor +{ + runtimeclass CompatibilityViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged + { + CompatibilityViewModel(Microsoft.Terminal.Settings.Model.GlobalAppSettings globalSettings); + + PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, ForceVTInput); + } + + [default_interface] runtimeclass Compatibility : Windows.UI.Xaml.Controls.Page + { + Compatibility(); + CompatibilityViewModel ViewModel { get; }; + } +} diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml new file mode 100644 index 00000000000..5999043dbfc --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.cpp b/src/cascadia/TerminalSettingsEditor/MainPage.cpp index 76bbeacb248..d197542b53f 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.cpp +++ b/src/cascadia/TerminalSettingsEditor/MainPage.cpp @@ -6,6 +6,7 @@ #include "MainPage.g.cpp" #include "Launch.h" #include "Interaction.h" +#include "Compatibility.h" #include "Rendering.h" #include "RenderingViewModel.h" #include "Actions.h" @@ -39,6 +40,7 @@ using namespace winrt::Windows::Foundation::Collections; static const std::wstring_view launchTag{ L"Launch_Nav" }; static const std::wstring_view interactionTag{ L"Interaction_Nav" }; static const std::wstring_view renderingTag{ L"Rendering_Nav" }; +static const std::wstring_view compatibilityTag{ L"Compatibility_Nav" }; static const std::wstring_view actionsTag{ L"Actions_Nav" }; static const std::wstring_view globalProfileTag{ L"GlobalProfile_Nav" }; static const std::wstring_view addProfileTag{ L"AddProfile" }; @@ -372,6 +374,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation const auto crumb = winrt::make(box_value(clickedItemTag), RS_(L"Nav_Rendering/Content"), BreadcrumbSubPage::None); _breadcrumbs.Append(crumb); } + else if (clickedItemTag == compatibilityTag) + { + contentFrame().Navigate(xaml_typename(), winrt::make(_settingsClone.GlobalSettings())); + const auto crumb = winrt::make(box_value(clickedItemTag), RS_(L"Nav_Compatibility/Content"), BreadcrumbSubPage::None); + _breadcrumbs.Append(crumb); + } else if (clickedItemTag == actionsTag) { contentFrame().Navigate(xaml_typename(), winrt::make(_settingsClone)); diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.xaml b/src/cascadia/TerminalSettingsEditor/MainPage.xaml index d63d634d2e0..7d96589f0ec 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.xaml +++ b/src/cascadia/TerminalSettingsEditor/MainPage.xaml @@ -135,6 +135,13 @@ + + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj index 836ec79a904..1cf12b4bea5 100644 --- a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj +++ b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj @@ -64,6 +64,9 @@ Interaction.xaml + + Compatibility.xaml + KeyChordListener.xaml @@ -154,6 +157,9 @@ Designer + + Designer + Designer @@ -204,6 +210,9 @@ Interaction.xaml + + Compatibility.xaml + KeyChordListener.xaml @@ -311,6 +320,10 @@ Interaction.xaml Code + + Compatibility.xaml + Code + Rendering.xaml Code diff --git a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw index cffae127f5a..686bdf40e40 100644 --- a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw @@ -539,10 +539,18 @@ Always on top Header for a control to toggle if the app will always be presented on top of other windows, or is treated normally (when disabled). + + Force the terminal to use the legacy input encoding + Header for a control to toggle legacy input encoding for the terminal. + Terminal will always be the topmost window on the desktop. A description for what the "always on top" setting does. Presented near "Globals_AlwaysOnTop.Header". + + Certain keys in some applications may stop working when enabling this setting. + Additional description for what the "force vt input" setting does. Presented near "Globals_ForceVTInput.Header". + Tab width mode Header for a control to choose how wide the tabs are. @@ -611,6 +619,10 @@ Interaction Header for the "interaction" menu item. This navigates to a page that lets you see and modify settings related to the user's mouse and touch interactions with the app. + + Compatibility + Header for the "compatibility" menu item. This navigates to a page that lets you see and modify settings related to compatibility with command line scenarios. + Startup Header for the "startup" menu item. This navigates to a page that lets you see and modify settings related to the app's launch experience (i.e. screen position, mode, etc.) From b7569e075464b063518b9c44be6bb0c1ade18e37 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Mon, 9 Sep 2024 15:53:21 -0700 Subject: [PATCH 02/21] experimental.input.forceVT -> compatibility.input.forceVT --- src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp | 3 +++ src/cascadia/TerminalSettingsModel/MTSMSettings.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp index e7f930c175a..25b19a83f09 100644 --- a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp @@ -23,6 +23,7 @@ static constexpr std::string_view ThemeKey{ "theme" }; static constexpr std::string_view DefaultProfileKey{ "defaultProfile" }; static constexpr std::string_view LegacyUseTabSwitcherModeKey{ "useTabSwitcher" }; static constexpr std::string_view LegacyReloadEnvironmentVariablesKey{ "compatibility.reloadEnvironmentVariables" }; +static constexpr std::string_view LegacyForceVTInputKey{ "experimental.input.forceVT" }; // Method Description: // - Copies any extraneous data from the parent before completing a CreateChild call @@ -133,6 +134,8 @@ void GlobalAppSettings::LayerJson(const Json::Value& json, const OriginTag origi // "useTabSwitcher" to "tabSwitcherMode". Continue supporting // "useTabSwitcher", but prefer "tabSwitcherMode" JsonUtils::GetValueForKey(json, LegacyUseTabSwitcherModeKey, _TabSwitcherMode); + + JsonUtils::GetValueForKey(json, LegacyForceVTInputKey, _ForceVTInput); #define GLOBAL_SETTINGS_LAYER_JSON(type, name, jsonKey, ...) \ JsonUtils::GetValueForKey(json, jsonKey, _##name); \ diff --git a/src/cascadia/TerminalSettingsModel/MTSMSettings.h b/src/cascadia/TerminalSettingsModel/MTSMSettings.h index 85e091077a8..8d8bfb242f3 100644 --- a/src/cascadia/TerminalSettingsModel/MTSMSettings.h +++ b/src/cascadia/TerminalSettingsModel/MTSMSettings.h @@ -29,7 +29,7 @@ Author(s): X(bool, SoftwareRendering, "rendering.software", false) \ X(winrt::Microsoft::Terminal::Control::TextMeasurement, TextMeasurement, "compatibility.textMeasurement") \ X(bool, UseBackgroundImageForWindow, "experimental.useBackgroundImageForWindow", false) \ - X(bool, ForceVTInput, "experimental.input.forceVT", false) \ + X(bool, ForceVTInput, "compatibility.input.forceVT", false) \ X(bool, TrimBlockSelection, "trimBlockSelection", true) \ X(bool, DetectURLs, "experimental.detectURLs", true) \ X(bool, AlwaysShowTabs, "alwaysShowTabs", true) \ From b1536729adc92872a63d6be9c2e20b83bc3c48eb Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 10 Sep 2024 14:21:19 -0700 Subject: [PATCH 03/21] Add compatibility.allowVtChecksumReport global setting --- src/cascadia/TerminalCore/ICoreSettings.idl | 1 + src/cascadia/TerminalCore/Terminal.cpp | 11 +++++++++++ src/cascadia/TerminalCore/Terminal.hpp | 1 + src/cascadia/TerminalSettingsEditor/Compatibility.h | 1 + src/cascadia/TerminalSettingsEditor/Compatibility.idl | 1 + .../TerminalSettingsEditor/Compatibility.xaml | 11 ++++++++--- .../Resources/en-US/Resources.resw | 8 ++++++++ .../TerminalSettingsModel/GlobalAppSettings.cpp | 2 +- .../TerminalSettingsModel/GlobalAppSettings.idl | 1 + src/cascadia/TerminalSettingsModel/MTSMSettings.h | 5 +++-- .../TerminalSettingsModel/TerminalSettings.cpp | 1 + src/cascadia/TerminalSettingsModel/TerminalSettings.h | 1 + src/cascadia/inc/ControlProperties.h | 3 ++- src/terminal/adapter/ITermDispatch.hpp | 1 + src/terminal/adapter/adaptDispatch.cpp | 7 ++++++- src/terminal/adapter/adaptDispatch.hpp | 3 +++ 16 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/cascadia/TerminalCore/ICoreSettings.idl b/src/cascadia/TerminalCore/ICoreSettings.idl index 112a6f6b1f2..ff6588c2ead 100644 --- a/src/cascadia/TerminalCore/ICoreSettings.idl +++ b/src/cascadia/TerminalCore/ICoreSettings.idl @@ -21,6 +21,7 @@ namespace Microsoft.Terminal.Core String WordDelimiters; Boolean ForceVTInput; + Boolean AllowVtChecksumReport; Boolean TrimBlockSelection; Boolean DetectURLs; diff --git a/src/cascadia/TerminalCore/Terminal.cpp b/src/cascadia/TerminalCore/Terminal.cpp index c5876e1497c..be5e2290f1e 100644 --- a/src/cascadia/TerminalCore/Terminal.cpp +++ b/src/cascadia/TerminalCore/Terminal.cpp @@ -90,6 +90,11 @@ void Terminal::UpdateSettings(ICoreSettings settings) _autoMarkPrompts = settings.AutoMarkPrompts(); _rainbowSuggestions = settings.RainbowSuggestions(); + if (_stateMachine) + { + SetVtChecksumReportSupport(settings.AllowVtChecksumReport()); + } + _getTerminalInput().ForceDisableWin32InputMode(settings.ForceVTInput()); if (settings.TabColor() == nullptr) @@ -215,6 +220,12 @@ void Terminal::EraseScrollback() engine.Dispatch().EraseInDisplay(DispatchTypes::EraseType::Scrollback); } +void Terminal::SetVtChecksumReportSupport(const bool enabled) +{ + auto& engine = reinterpret_cast(_stateMachine->Engine()); + engine.Dispatch().SetVtChecksumReportSupport(enabled); +} + bool Terminal::IsXtermBracketedPasteModeEnabled() const noexcept { return _systemMode.test(Mode::BracketedPaste); diff --git a/src/cascadia/TerminalCore/Terminal.hpp b/src/cascadia/TerminalCore/Terminal.hpp index e9d3f1abd0a..ae56247e102 100644 --- a/src/cascadia/TerminalCore/Terminal.hpp +++ b/src/cascadia/TerminalCore/Terminal.hpp @@ -95,6 +95,7 @@ class Microsoft::Terminal::Core::Terminal final : void SetFontInfo(const FontInfo& fontInfo); void SetCursorStyle(const ::Microsoft::Console::VirtualTerminal::DispatchTypes::CursorStyle cursorStyle); void EraseScrollback(); + void SetVtChecksumReportSupport(const bool enabled); bool IsXtermBracketedPasteModeEnabled() const noexcept; std::wstring_view GetWorkingDirectory() noexcept; diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.h b/src/cascadia/TerminalSettingsEditor/Compatibility.h index 51a34bdcdc1..437a726e574 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.h +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.h @@ -19,6 +19,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation using ViewModelHelper::PropertyChanged; PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, ForceVTInput); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowVtChecksumReport); private: Model::GlobalAppSettings _GlobalSettings; diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.idl b/src/cascadia/TerminalSettingsEditor/Compatibility.idl index dcafcd1b86f..b8820284caf 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.idl +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.idl @@ -10,6 +10,7 @@ namespace Microsoft.Terminal.Settings.Editor CompatibilityViewModel(Microsoft.Terminal.Settings.Model.GlobalAppSettings globalSettings); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, ForceVTInput); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowVtChecksumReport); } [default_interface] runtimeclass Compatibility : Windows.UI.Xaml.Controls.Page diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml index 5999043dbfc..83cb2743ee7 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -20,11 +20,16 @@ - - + - + + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw index 686bdf40e40..0119d9b43d8 100644 --- a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw @@ -543,6 +543,10 @@ Force the terminal to use the legacy input encoding Header for a control to toggle legacy input encoding for the terminal. + + Allow VT checksum report + Header for a control to toggle support for a virtual terminal (VT) sequence that reports a checksum of a portion of the terminal buffer. + Terminal will always be the topmost window on the desktop. A description for what the "always on top" setting does. Presented near "Globals_AlwaysOnTop.Header". @@ -551,6 +555,10 @@ Certain keys in some applications may stop working when enabling this setting. Additional description for what the "force vt input" setting does. Presented near "Globals_ForceVTInput.Header". + + Enables support for the DECRQRCA escape sequence + Additional description for what the "allow vt checksum report" setting does. Presented near "Globals_AllowVtChecksumReport.Header". + Tab width mode Header for a control to choose how wide the tabs are. diff --git a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp index 25b19a83f09..eaa70132ad5 100644 --- a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.cpp @@ -134,7 +134,7 @@ void GlobalAppSettings::LayerJson(const Json::Value& json, const OriginTag origi // "useTabSwitcher" to "tabSwitcherMode". Continue supporting // "useTabSwitcher", but prefer "tabSwitcherMode" JsonUtils::GetValueForKey(json, LegacyUseTabSwitcherModeKey, _TabSwitcherMode); - + JsonUtils::GetValueForKey(json, LegacyForceVTInputKey, _ForceVTInput); #define GLOBAL_SETTINGS_LAYER_JSON(type, name, jsonKey, ...) \ diff --git a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.idl b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.idl index 1a1bab60b9b..509ed562b37 100644 --- a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.idl +++ b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.idl @@ -104,6 +104,7 @@ namespace Microsoft.Terminal.Settings.Model INHERITABLE_SETTING(Boolean, IsolatedMode); INHERITABLE_SETTING(Boolean, AllowHeadless); INHERITABLE_SETTING(String, SearchWebDefaultQueryUrl); + INHERITABLE_SETTING(Boolean, AllowVtChecksumReport); Windows.Foundation.Collections.IMapView ColorSchemes(); void AddColorScheme(ColorScheme scheme); diff --git a/src/cascadia/TerminalSettingsModel/MTSMSettings.h b/src/cascadia/TerminalSettingsModel/MTSMSettings.h index 8d8bfb242f3..b5f4382531f 100644 --- a/src/cascadia/TerminalSettingsModel/MTSMSettings.h +++ b/src/cascadia/TerminalSettingsModel/MTSMSettings.h @@ -29,7 +29,7 @@ Author(s): X(bool, SoftwareRendering, "rendering.software", false) \ X(winrt::Microsoft::Terminal::Control::TextMeasurement, TextMeasurement, "compatibility.textMeasurement") \ X(bool, UseBackgroundImageForWindow, "experimental.useBackgroundImageForWindow", false) \ - X(bool, ForceVTInput, "compatibility.input.forceVT", false) \ + X(bool, ForceVTInput, "compatibility.input.forceVT", false) \ X(bool, TrimBlockSelection, "trimBlockSelection", true) \ X(bool, DetectURLs, "experimental.detectURLs", true) \ X(bool, AlwaysShowTabs, "alwaysShowTabs", true) \ @@ -69,7 +69,8 @@ Author(s): X(winrt::Windows::Foundation::Collections::IVector, NewTabMenu, "newTabMenu", winrt::single_threaded_vector({ Model::RemainingProfilesEntry{} })) \ X(bool, AllowHeadless, "compatibility.allowHeadless", false) \ X(bool, IsolatedMode, "compatibility.isolatedMode", false) \ - X(hstring, SearchWebDefaultQueryUrl, "searchWebDefaultQueryUrl", L"https://www.bing.com/search?q=%22%s%22") + X(hstring, SearchWebDefaultQueryUrl, "searchWebDefaultQueryUrl", L"https://www.bing.com/search?q=%22%s%22") \ + X(bool, AllowVtChecksumReport, "compatibility.allowVtChecksumReport", false) // Also add these settings to: // * Profile.idl diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp b/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp index 9e4c0ba9864..3f7e881e219 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp @@ -373,6 +373,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation _TrimBlockSelection = globalSettings.TrimBlockSelection(); _DetectURLs = globalSettings.DetectURLs(); _EnableUnfocusedAcrylic = globalSettings.EnableUnfocusedAcrylic(); + _AllowVtChecksumReport = globalSettings.AllowVtChecksumReport(); } // Method Description: diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettings.h b/src/cascadia/TerminalSettingsModel/TerminalSettings.h index dc478ddb838..86de4b16146 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettings.h +++ b/src/cascadia/TerminalSettingsModel/TerminalSettings.h @@ -94,6 +94,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation INHERITABLE_SETTING(Model::TerminalSettings, bool, CopyOnSelect, false); INHERITABLE_SETTING(Model::TerminalSettings, Microsoft::Terminal::Control::CopyFormat, CopyFormatting, 0); INHERITABLE_SETTING(Model::TerminalSettings, bool, FocusFollowMouse, false); + INHERITABLE_SETTING(Model::TerminalSettings, bool, AllowVtChecksumReport, false); INHERITABLE_SETTING(Model::TerminalSettings, bool, TrimBlockSelection, true); INHERITABLE_SETTING(Model::TerminalSettings, bool, DetectURLs, true); diff --git a/src/cascadia/inc/ControlProperties.h b/src/cascadia/inc/ControlProperties.h index bc5e3748b4b..b6d9ffaf888 100644 --- a/src/cascadia/inc/ControlProperties.h +++ b/src/cascadia/inc/ControlProperties.h @@ -51,7 +51,8 @@ X(bool, DetectURLs, true) \ X(bool, AutoMarkPrompts) \ X(bool, RepositionCursorWithMouse, false) \ - X(bool, RainbowSuggestions) + X(bool, RainbowSuggestions) \ + X(bool, AllowVtChecksumReport) // --------------------------- Control Settings --------------------------- // All of these settings are defined in IControlSettings. diff --git a/src/terminal/adapter/ITermDispatch.hpp b/src/terminal/adapter/ITermDispatch.hpp index 3df5ef30178..859800dff2f 100644 --- a/src/terminal/adapter/ITermDispatch.hpp +++ b/src/terminal/adapter/ITermDispatch.hpp @@ -129,6 +129,7 @@ class Microsoft::Console::VirtualTerminal::ITermDispatch virtual void ScreenAlignmentPattern() = 0; // DECALN virtual void SetCursorStyle(const DispatchTypes::CursorStyle cursorStyle) = 0; // DECSCUSR + virtual void SetVtChecksumReportSupport(const bool enabled) = 0; virtual void SetClipboard(wil::zwstring_view content) = 0; // OSCSetClipboard diff --git a/src/terminal/adapter/adaptDispatch.cpp b/src/terminal/adapter/adaptDispatch.cpp index edbda3f514a..1f2d15e1e93 100644 --- a/src/terminal/adapter/adaptDispatch.cpp +++ b/src/terminal/adapter/adaptDispatch.cpp @@ -1304,6 +1304,11 @@ void AdaptDispatch::SelectAttributeChangeExtent(const DispatchTypes::ChangeExten } } +void AdaptDispatch::SetVtChecksumReportSupport(const bool enabled) +{ + _vtChecksumReportEnabled = enabled; +} + // Routine Description: // - DECRQCRA - Computes and reports a checksum of the specified area of // the buffer memory. @@ -1318,7 +1323,7 @@ void AdaptDispatch::RequestChecksumRectangularArea(const VTInt id, const VTInt p { uint16_t checksum = 0; // If this feature is not enabled, we'll just report a zero checksum. - if constexpr (Feature_VtChecksumReport::IsEnabled()) + if (Feature_VtChecksumReport::IsEnabled() && _vtChecksumReportEnabled) { // If the page number is 0, then we're meant to return a checksum of all // of the pages, but we have no need for that, so we'll just return 0. diff --git a/src/terminal/adapter/adaptDispatch.hpp b/src/terminal/adapter/adaptDispatch.hpp index 4fc85ebc92a..280a1656070 100644 --- a/src/terminal/adapter/adaptDispatch.hpp +++ b/src/terminal/adapter/adaptDispatch.hpp @@ -184,6 +184,8 @@ namespace Microsoft::Console::VirtualTerminal void PlaySounds(const VTParameters parameters) override; // DECPS + void SetVtChecksumReportSupport(const bool enabled) override; + private: enum class Mode { @@ -303,6 +305,7 @@ namespace Microsoft::Console::VirtualTerminal std::unique_ptr _fontBuffer; std::shared_ptr _macroBuffer; std::optional _initialCodePage; + bool _vtChecksumReportEnabled = false; // We have two instances of the saved cursor state, because we need // one for the main buffer (at index 0), and another for the alt buffer From d609f140b60d547add44cc2aa4d30b7c6a28c34c Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 10 Sep 2024 15:12:42 -0700 Subject: [PATCH 04/21] Add compatibility.allowKeypadMode global setting --- src/cascadia/TerminalCore/ICoreSettings.idl | 1 + src/cascadia/TerminalCore/Terminal.cpp | 1 + src/cascadia/TerminalSettingsEditor/Compatibility.cpp | 10 ++++++++++ src/cascadia/TerminalSettingsEditor/Compatibility.h | 4 ++++ src/cascadia/TerminalSettingsEditor/Compatibility.idl | 4 ++++ src/cascadia/TerminalSettingsEditor/Compatibility.xaml | 10 +++++++++- .../Resources/en-US/Resources.resw | 8 ++++++++ .../TerminalSettingsModel/GlobalAppSettings.idl | 1 + src/cascadia/TerminalSettingsModel/MTSMSettings.h | 3 ++- .../TerminalSettingsModel/TerminalSettings.cpp | 1 + src/cascadia/TerminalSettingsModel/TerminalSettings.h | 1 + src/cascadia/inc/ControlProperties.h | 3 ++- src/terminal/input/terminalInput.cpp | 9 +++++++-- src/terminal/input/terminalInput.hpp | 2 ++ 14 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/cascadia/TerminalCore/ICoreSettings.idl b/src/cascadia/TerminalCore/ICoreSettings.idl index ff6588c2ead..12da1e6c27d 100644 --- a/src/cascadia/TerminalCore/ICoreSettings.idl +++ b/src/cascadia/TerminalCore/ICoreSettings.idl @@ -22,6 +22,7 @@ namespace Microsoft.Terminal.Core Boolean ForceVTInput; Boolean AllowVtChecksumReport; + Boolean AllowKeypadMode; Boolean TrimBlockSelection; Boolean DetectURLs; diff --git a/src/cascadia/TerminalCore/Terminal.cpp b/src/cascadia/TerminalCore/Terminal.cpp index be5e2290f1e..7b27e93f3ab 100644 --- a/src/cascadia/TerminalCore/Terminal.cpp +++ b/src/cascadia/TerminalCore/Terminal.cpp @@ -96,6 +96,7 @@ void Terminal::UpdateSettings(ICoreSettings settings) } _getTerminalInput().ForceDisableWin32InputMode(settings.ForceVTInput()); + _getTerminalInput().SetKeypadModeSupport(settings.AllowKeypadMode()); if (settings.TabColor() == nullptr) { diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp index 5da88d6288e..a07927b4732 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp @@ -16,6 +16,16 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { } + bool CompatibilityViewModel::AllowVtChecksumReportAvailable() const noexcept + { + return Feature_VtChecksumReport::IsEnabled(); + } + + bool CompatibilityViewModel::AllowKeypadModeAvailable() const noexcept + { + return Feature_KeypadModeEnabled::IsEnabled(); + } + Compatibility::Compatibility() { InitializeComponent(); diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.h b/src/cascadia/TerminalSettingsEditor/Compatibility.h index 437a726e574..509c71dae17 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.h +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.h @@ -15,11 +15,15 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation public: CompatibilityViewModel(Model::GlobalAppSettings globalSettings); + bool AllowVtChecksumReportAvailable() const noexcept; + bool AllowKeypadModeAvailable() const noexcept; + // DON'T YOU DARE ADD A `WINRT_CALLBACK(PropertyChanged` TO A CLASS DERIVED FROM ViewModelHelper. Do this instead: using ViewModelHelper::PropertyChanged; PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, ForceVTInput); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowVtChecksumReport); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowKeypadMode); private: Model::GlobalAppSettings _GlobalSettings; diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.idl b/src/cascadia/TerminalSettingsEditor/Compatibility.idl index b8820284caf..e77b3b14c27 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.idl +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.idl @@ -9,8 +9,12 @@ namespace Microsoft.Terminal.Settings.Editor { CompatibilityViewModel(Microsoft.Terminal.Settings.Model.GlobalAppSettings globalSettings); + Boolean AllowVtChecksumReportAvailable { get; }; + Boolean AllowKeypadModeAvailable { get; }; + PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, ForceVTInput); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowVtChecksumReport); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowKeypadMode); } [default_interface] runtimeclass Compatibility : Windows.UI.Xaml.Controls.Page diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml index 83cb2743ee7..5c50dbff736 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -29,7 +29,15 @@ + Style="{StaticResource ToggleSwitchInExpanderStyle}" + Visibility="{x:Bind ViewModel.AllowVtChecksumReportAvailable}" /> + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw index 0119d9b43d8..ad0cf6923d1 100644 --- a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw @@ -547,6 +547,10 @@ Allow VT checksum report Header for a control to toggle support for a virtual terminal (VT) sequence that reports a checksum of a portion of the terminal buffer. + + Allow keypad mode + Header for a control to toggle support for VT keypad modes. + Terminal will always be the topmost window on the desktop. A description for what the "always on top" setting does. Presented near "Globals_AlwaysOnTop.Header". @@ -559,6 +563,10 @@ Enables support for the DECRQRCA escape sequence Additional description for what the "allow vt checksum report" setting does. Presented near "Globals_AllowVtChecksumReport.Header". + + Enables support for the DECKPAM and DECKPNM escape sequences to work as intended + Additional description for what the "allow keypad mode" setting does. Presented near "Globals_AllowKeypadMode.Header". + Tab width mode Header for a control to choose how wide the tabs are. diff --git a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.idl b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.idl index 509ed562b37..2fafbc56069 100644 --- a/src/cascadia/TerminalSettingsModel/GlobalAppSettings.idl +++ b/src/cascadia/TerminalSettingsModel/GlobalAppSettings.idl @@ -105,6 +105,7 @@ namespace Microsoft.Terminal.Settings.Model INHERITABLE_SETTING(Boolean, AllowHeadless); INHERITABLE_SETTING(String, SearchWebDefaultQueryUrl); INHERITABLE_SETTING(Boolean, AllowVtChecksumReport); + INHERITABLE_SETTING(Boolean, AllowKeypadMode); Windows.Foundation.Collections.IMapView ColorSchemes(); void AddColorScheme(ColorScheme scheme); diff --git a/src/cascadia/TerminalSettingsModel/MTSMSettings.h b/src/cascadia/TerminalSettingsModel/MTSMSettings.h index b5f4382531f..5c9db36477f 100644 --- a/src/cascadia/TerminalSettingsModel/MTSMSettings.h +++ b/src/cascadia/TerminalSettingsModel/MTSMSettings.h @@ -70,7 +70,8 @@ Author(s): X(bool, AllowHeadless, "compatibility.allowHeadless", false) \ X(bool, IsolatedMode, "compatibility.isolatedMode", false) \ X(hstring, SearchWebDefaultQueryUrl, "searchWebDefaultQueryUrl", L"https://www.bing.com/search?q=%22%s%22") \ - X(bool, AllowVtChecksumReport, "compatibility.allowVtChecksumReport", false) + X(bool, AllowVtChecksumReport, "compatibility.allowVtChecksumReport", false) \ + X(bool, AllowKeypadMode, "compatibility.allowKeypadMode", false) // Also add these settings to: // * Profile.idl diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp b/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp index 3f7e881e219..1db01b08126 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp @@ -374,6 +374,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation _DetectURLs = globalSettings.DetectURLs(); _EnableUnfocusedAcrylic = globalSettings.EnableUnfocusedAcrylic(); _AllowVtChecksumReport = globalSettings.AllowVtChecksumReport(); + _AllowKeypadMode = globalSettings.AllowKeypadMode(); } // Method Description: diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettings.h b/src/cascadia/TerminalSettingsModel/TerminalSettings.h index 86de4b16146..b22b2a8e990 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettings.h +++ b/src/cascadia/TerminalSettingsModel/TerminalSettings.h @@ -95,6 +95,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation INHERITABLE_SETTING(Model::TerminalSettings, Microsoft::Terminal::Control::CopyFormat, CopyFormatting, 0); INHERITABLE_SETTING(Model::TerminalSettings, bool, FocusFollowMouse, false); INHERITABLE_SETTING(Model::TerminalSettings, bool, AllowVtChecksumReport, false); + INHERITABLE_SETTING(Model::TerminalSettings, bool, AllowKeypadMode, false); INHERITABLE_SETTING(Model::TerminalSettings, bool, TrimBlockSelection, true); INHERITABLE_SETTING(Model::TerminalSettings, bool, DetectURLs, true); diff --git a/src/cascadia/inc/ControlProperties.h b/src/cascadia/inc/ControlProperties.h index b6d9ffaf888..d126a71e5c3 100644 --- a/src/cascadia/inc/ControlProperties.h +++ b/src/cascadia/inc/ControlProperties.h @@ -52,7 +52,8 @@ X(bool, AutoMarkPrompts) \ X(bool, RepositionCursorWithMouse, false) \ X(bool, RainbowSuggestions) \ - X(bool, AllowVtChecksumReport) + X(bool, AllowVtChecksumReport) \ + X(bool, AllowKeypadMode) // --------------------------- Control Settings --------------------------- // All of these settings are defined in IControlSettings. diff --git a/src/terminal/input/terminalInput.cpp b/src/terminal/input/terminalInput.cpp index 7c09ef46155..5b04baa49f0 100644 --- a/src/terminal/input/terminalInput.cpp +++ b/src/terminal/input/terminalInput.cpp @@ -78,6 +78,11 @@ void TerminalInput::ForceDisableWin32InputMode(const bool win32InputMode) noexce _forceDisableWin32InputMode = win32InputMode; } +void TerminalInput::SetKeypadModeSupport(const bool enabled) noexcept +{ + _keypadModeSupported = enabled; +} + TerminalInput::OutputType TerminalInput::MakeUnhandled() noexcept { return {}; @@ -438,7 +443,7 @@ try // the ASCII character assigned by the keyboard layout, but when set // they transmit SS3 escape sequences. When used with a modifier, the // modifier is embedded as a parameter value (not standard). - if (Feature_KeypadModeEnabled::IsEnabled() && _inputMode.test(Mode::Keypad)) + if (Feature_KeypadModeEnabled::IsEnabled() && _keypadModeSupported && _inputMode.test(Mode::Keypad)) { defineNumericKey(VK_MULTIPLY, L'j'); defineNumericKey(VK_ADD, L'k'); @@ -490,7 +495,7 @@ try // Keypad keys also depend on Keypad mode, the same as ANSI mappings, // but the sequences use an ESC ? prefix instead of SS3. - if (Feature_KeypadModeEnabled::IsEnabled() && _inputMode.test(Mode::Keypad)) + if (Feature_KeypadModeEnabled::IsEnabled() && _keypadModeSupported && _inputMode.test(Mode::Keypad)) { defineKeyWithUnusedModifiers(VK_MULTIPLY, L"\033?j"s); defineKeyWithUnusedModifiers(VK_ADD, L"\033?k"s); diff --git a/src/terminal/input/terminalInput.hpp b/src/terminal/input/terminalInput.hpp index e8ae53267e2..0d32eaeedd8 100644 --- a/src/terminal/input/terminalInput.hpp +++ b/src/terminal/input/terminalInput.hpp @@ -51,6 +51,7 @@ namespace Microsoft::Console::VirtualTerminal bool GetInputMode(const Mode mode) const noexcept; void ResetInputModes() noexcept; void ForceDisableWin32InputMode(const bool win32InputMode) noexcept; + void SetKeypadModeSupport(const bool enabled) noexcept; #pragma region MouseInput // These methods are defined in mouseInput.cpp @@ -79,6 +80,7 @@ namespace Microsoft::Console::VirtualTerminal til::enumset _inputMode{ Mode::Ansi, Mode::AutoRepeat, Mode::AlternateScroll }; bool _forceDisableWin32InputMode{ false }; + bool _keypadModeSupported{ false }; // In the future, if we add support for "8-bit" input mode, these prefixes // will sometimes be replaced with equivalent C1 control characters. From 47cd42ddff0c39c0c1955b7cf729dfea38ce8773 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 10 Sep 2024 15:47:26 -0700 Subject: [PATCH 05/21] Add a few more compatibility settings to SUI --- .../TerminalSettingsEditor/Compatibility.h | 2 ++ .../TerminalSettingsEditor/Compatibility.idl | 2 ++ .../TerminalSettingsEditor/Compatibility.xaml | 12 ++++++++++++ .../Resources/en-US/Resources.resw | 16 ++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.h b/src/cascadia/TerminalSettingsEditor/Compatibility.h index 509c71dae17..8b26cc56278 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.h +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.h @@ -24,6 +24,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, ForceVTInput); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowVtChecksumReport); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowKeypadMode); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowHeadless); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, IsolatedMode); private: Model::GlobalAppSettings _GlobalSettings; diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.idl b/src/cascadia/TerminalSettingsEditor/Compatibility.idl index e77b3b14c27..8032838185b 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.idl +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.idl @@ -15,6 +15,8 @@ namespace Microsoft.Terminal.Settings.Editor PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, ForceVTInput); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowVtChecksumReport); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowKeypadMode); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowHeadless); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, IsolatedMode); } [default_interface] runtimeclass Compatibility : Windows.UI.Xaml.Controls.Page diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml index 5c50dbff736..8fb0bfb02da 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -20,6 +20,18 @@ + + + + + + + + + + Allow keypad mode Header for a control to toggle support for VT keypad modes. + + Allow Windows Terminal to run in the background + Header for a control to toggle support for Windows Terminal to run in the background. + + + Force each window to be its own process + Header for a control to toggle making each window be its own process. + Terminal will always be the topmost window on the desktop. A description for what the "always on top" setting does. Presented near "Globals_AlwaysOnTop.Header". @@ -567,6 +575,14 @@ Enables support for the DECKPAM and DECKPNM escape sequences to work as intended Additional description for what the "allow keypad mode" setting does. Presented near "Globals_AllowKeypadMode.Header". + + This allows Global Summon and Quake Mode actions to work even when no windows are open. + Additional description for what the "allow headless" setting does. Presented near "Globals_AllowHeadless.Header". + + + Certain features including but not limited to global hotkeys and tab tearout won't work. + Additional description for what the "isolated mode" setting does. Presented near "Globals_IsolatedMode.Header". + Tab width mode Header for a control to choose how wide the tabs are. From 60ac05f6f04eb4a290dc85b020cb0d331a6a49a6 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 10 Sep 2024 15:58:51 -0700 Subject: [PATCH 06/21] update schema --- doc/cascadia/profiles.schema.json | 15 +++++++++++++++ .../Resources/en-US/Resources.resw | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/cascadia/profiles.schema.json b/doc/cascadia/profiles.schema.json index 325e73f2d07..12269a82759 100644 --- a/doc/cascadia/profiles.schema.json +++ b/doc/cascadia/profiles.schema.json @@ -2355,11 +2355,26 @@ "description": "When set to true, the terminal will focus the pane on mouse hover.", "type": "boolean" }, + "compatibility.allowHeadless": { + "default": false, + "description": "When set to true, Windows Terminal will run in the background. This allows globalSummon and quakeMode actions to work even when no windows are open.", + "type": "boolean" + }, "compatibility.isolatedMode": { "default": false, "description": "When set to true, Terminal windows will not be able to interact with each other (including global hotkeys, tab drag/drop, running commandlines in existing windows, etc.). This is a compatibility escape hatch for users who are running into certain windowing issues.", "type": "boolean" }, + "compatibility.allowVtChecksumReport": { + "default": false, + "description": "When set to true, the terminal will support the DECQRCA escape sequence.", + "type": "boolean" + }, + "compatibility.allowKeypadMode": { + "default": false, + "description": "When set to true, the terminal will support the DECKPAM and DECKPNM escape sequences.", + "type": "boolean" + }, "copyFormatting": { "default": true, "description": "When set to `true`, the color and font formatting of selected text is also copied to your clipboard. When set to `false`, only plain text is copied to your clipboard. An array of specific formats can also be used. Supported array values include `html` and `rtf`. Plain text is always copied.", diff --git a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw index 1726c8b1a43..fe0e2ede75a 100644 --- a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw @@ -580,7 +580,7 @@ Additional description for what the "allow headless" setting does. Presented near "Globals_AllowHeadless.Header". - Certain features including but not limited to global hotkeys and tab tearout won't work. + Certain features including but not limited to global hotkeys, tab drag and drop, and running commandlines in existing windows won't work. Additional description for what the "isolated mode" setting does. Presented near "Globals_IsolatedMode.Header". From 44f0e7958860750e2df193251b177112ad3cf373 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 10 Sep 2024 16:18:52 -0700 Subject: [PATCH 07/21] fix build --- src/terminal/adapter/termDispatch.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/terminal/adapter/termDispatch.hpp b/src/terminal/adapter/termDispatch.hpp index bb12dc32880..e5e8170a9c2 100644 --- a/src/terminal/adapter/termDispatch.hpp +++ b/src/terminal/adapter/termDispatch.hpp @@ -173,6 +173,8 @@ class Microsoft::Console::VirtualTerminal::TermDispatch : public Microsoft::Cons StringHandler RestorePresentationState(const DispatchTypes::PresentationReportFormat /*format*/) override { return nullptr; } // DECRSPS void PlaySounds(const VTParameters /*parameters*/) override{}; // DECPS + + void SetVtChecksumReportSupport(const bool /*enabled*/) override{}; }; #pragma warning(default : 26440) // Restore "can be declared noexcept" warning From 92b0bf1a6e6f89ceaa9b8c76497488bae6310171 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Tue, 10 Sep 2024 16:26:20 -0700 Subject: [PATCH 08/21] spell --- .github/actions/spelling/allow/apis.txt | 1 + doc/cascadia/profiles.schema.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/actions/spelling/allow/apis.txt b/.github/actions/spelling/allow/apis.txt index b60e1b26a30..7d9f2c65359 100644 --- a/.github/actions/spelling/allow/apis.txt +++ b/.github/actions/spelling/allow/apis.txt @@ -35,6 +35,7 @@ dataobject dcomp debugbreak delayimp +DECRQRCA DERR dlldata DNE diff --git a/doc/cascadia/profiles.schema.json b/doc/cascadia/profiles.schema.json index 12269a82759..02fd85bbdf5 100644 --- a/doc/cascadia/profiles.schema.json +++ b/doc/cascadia/profiles.schema.json @@ -2367,7 +2367,7 @@ }, "compatibility.allowVtChecksumReport": { "default": false, - "description": "When set to true, the terminal will support the DECQRCA escape sequence.", + "description": "When set to true, the terminal will support the DECRQRCA escape sequence.", "type": "boolean" }, "compatibility.allowKeypadMode": { From 1dc0714076c4fcc932981e88dfa784e2c6c8e0c9 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Wed, 11 Sep 2024 09:22:36 -0700 Subject: [PATCH 09/21] audit mode --- src/terminal/adapter/adaptDispatch.cpp | 2 +- src/terminal/adapter/adaptDispatch.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/terminal/adapter/adaptDispatch.cpp b/src/terminal/adapter/adaptDispatch.cpp index 1f2d15e1e93..712e10db4b7 100644 --- a/src/terminal/adapter/adaptDispatch.cpp +++ b/src/terminal/adapter/adaptDispatch.cpp @@ -1304,7 +1304,7 @@ void AdaptDispatch::SelectAttributeChangeExtent(const DispatchTypes::ChangeExten } } -void AdaptDispatch::SetVtChecksumReportSupport(const bool enabled) +void AdaptDispatch::SetVtChecksumReportSupport(const bool enabled) noexcept { _vtChecksumReportEnabled = enabled; } diff --git a/src/terminal/adapter/adaptDispatch.hpp b/src/terminal/adapter/adaptDispatch.hpp index 280a1656070..1810ba061ea 100644 --- a/src/terminal/adapter/adaptDispatch.hpp +++ b/src/terminal/adapter/adaptDispatch.hpp @@ -184,7 +184,7 @@ namespace Microsoft::Console::VirtualTerminal void PlaySounds(const VTParameters parameters) override; // DECPS - void SetVtChecksumReportSupport(const bool enabled) override; + void SetVtChecksumReportSupport(const bool enabled) noexcept override; private: enum class Mode From 55533d19bf08de506905c6f7b5fb7a1bbe35f5e3 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 12 Sep 2024 15:15:43 -0700 Subject: [PATCH 10/21] fix tests --- src/cascadia/UnitTests_SettingsModel/SerializationTests.cpp | 2 +- src/terminal/adapter/ut_adapter/adapterTest.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cascadia/UnitTests_SettingsModel/SerializationTests.cpp b/src/cascadia/UnitTests_SettingsModel/SerializationTests.cpp index 57dc4e1f868..ba1444aa95c 100644 --- a/src/cascadia/UnitTests_SettingsModel/SerializationTests.cpp +++ b/src/cascadia/UnitTests_SettingsModel/SerializationTests.cpp @@ -128,7 +128,7 @@ namespace SettingsModelUnitTests "multiLinePasteWarning": true, "trimPaste": true, - "experimental.input.forceVT": false, + "compatibility.input.forceVT": false, "actions": [], "keybindings": [] diff --git a/src/terminal/adapter/ut_adapter/adapterTest.cpp b/src/terminal/adapter/ut_adapter/adapterTest.cpp index ab2e08d3b85..8cdf72fc4a1 100644 --- a/src/terminal/adapter/ut_adapter/adapterTest.cpp +++ b/src/terminal/adapter/ut_adapter/adapterTest.cpp @@ -405,6 +405,7 @@ class AdapterTest auto& renderer = _testGetSet->_renderer; auto& renderSettings = renderer._renderSettings; auto adapter = std::make_unique(*_testGetSet, &renderer, renderSettings, _terminalInput); + adapter->SetVtChecksumReportSupport(true); fSuccess = adapter.get() != nullptr; if (fSuccess) From 7123a37f3256b424dcb0ed0c7e4816e1289e1867 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 12 Sep 2024 15:34:13 -0700 Subject: [PATCH 11/21] move 'textMeasurement' to compat page --- src/cascadia/TerminalSettingsEditor/Compatibility.cpp | 2 ++ src/cascadia/TerminalSettingsEditor/Compatibility.h | 1 + src/cascadia/TerminalSettingsEditor/Compatibility.idl | 5 +++++ src/cascadia/TerminalSettingsEditor/Compatibility.xaml | 9 +++++++++ src/cascadia/TerminalSettingsEditor/Rendering.xaml | 8 -------- .../TerminalSettingsEditor/RenderingViewModel.cpp | 1 - src/cascadia/TerminalSettingsEditor/RenderingViewModel.h | 1 - .../TerminalSettingsEditor/RenderingViewModel.idl | 2 -- 8 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp index a07927b4732..62c5d306be5 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp @@ -3,6 +3,7 @@ #include "pch.h" #include "Compatibility.h" +#include "EnumEntry.h" #include "Compatibility.g.cpp" #include "CompatibilityViewModel.g.cpp" @@ -14,6 +15,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation CompatibilityViewModel::CompatibilityViewModel(Model::GlobalAppSettings globalSettings) : _GlobalSettings{ globalSettings } { + INITIALIZE_BINDABLE_ENUM_SETTING(TextMeasurement, TextMeasurement, winrt::Microsoft::Terminal::Control::TextMeasurement, L"Globals_TextMeasurement_", L"Text"); } bool CompatibilityViewModel::AllowVtChecksumReportAvailable() const noexcept diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.h b/src/cascadia/TerminalSettingsEditor/Compatibility.h index 8b26cc56278..ebf8d3fad96 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.h +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.h @@ -26,6 +26,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowKeypadMode); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowHeadless); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, IsolatedMode); + GETSET_BINDABLE_ENUM_SETTING(TextMeasurement, winrt::Microsoft::Terminal::Control::TextMeasurement, _GlobalSettings.TextMeasurement); private: Model::GlobalAppSettings _GlobalSettings; diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.idl b/src/cascadia/TerminalSettingsEditor/Compatibility.idl index 8032838185b..d105435ce62 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.idl +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.idl @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. +import "EnumEntry.idl"; + #include "ViewModelHelpers.idl.h" namespace Microsoft.Terminal.Settings.Editor @@ -17,6 +19,9 @@ namespace Microsoft.Terminal.Settings.Editor PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowKeypadMode); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowHeadless); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, IsolatedMode); + + IInspectable CurrentTextMeasurement; + Windows.Foundation.Collections.IObservableVector TextMeasurementList { get; }; } [default_interface] runtimeclass Compatibility : Windows.UI.Xaml.Controls.Page diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml index 8fb0bfb02da..f50874f7e3b 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -51,5 +51,14 @@ Style="{StaticResource ToggleSwitchInExpanderStyle}" Visibility="{x:Bind ViewModel.AllowKeypadMode}" /> + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/Rendering.xaml b/src/cascadia/TerminalSettingsEditor/Rendering.xaml index 6285ebc4ff2..4b9534167d0 100644 --- a/src/cascadia/TerminalSettingsEditor/Rendering.xaml +++ b/src/cascadia/TerminalSettingsEditor/Rendering.xaml @@ -41,13 +41,5 @@ - - - - diff --git a/src/cascadia/TerminalSettingsEditor/RenderingViewModel.cpp b/src/cascadia/TerminalSettingsEditor/RenderingViewModel.cpp index f369e0f14ff..74c4d5922a8 100644 --- a/src/cascadia/TerminalSettingsEditor/RenderingViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/RenderingViewModel.cpp @@ -17,6 +17,5 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _settings{ std::move(settings) } { INITIALIZE_BINDABLE_ENUM_SETTING(GraphicsAPI, GraphicsAPI, winrt::Microsoft::Terminal::Control::GraphicsAPI, L"Globals_GraphicsAPI_", L"Text"); - INITIALIZE_BINDABLE_ENUM_SETTING(TextMeasurement, TextMeasurement, winrt::Microsoft::Terminal::Control::TextMeasurement, L"Globals_TextMeasurement_", L"Text"); } } diff --git a/src/cascadia/TerminalSettingsEditor/RenderingViewModel.h b/src/cascadia/TerminalSettingsEditor/RenderingViewModel.h index 1eda9e515fe..b3042d893a1 100644 --- a/src/cascadia/TerminalSettingsEditor/RenderingViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/RenderingViewModel.h @@ -16,7 +16,6 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation GETSET_BINDABLE_ENUM_SETTING(GraphicsAPI, winrt::Microsoft::Terminal::Control::GraphicsAPI, _settings.GlobalSettings().GraphicsAPI); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_settings.GlobalSettings(), DisablePartialInvalidation); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_settings.GlobalSettings(), SoftwareRendering); - GETSET_BINDABLE_ENUM_SETTING(TextMeasurement, winrt::Microsoft::Terminal::Control::TextMeasurement, _settings.GlobalSettings().TextMeasurement); private: Model::CascadiaSettings _settings{ nullptr }; diff --git a/src/cascadia/TerminalSettingsEditor/RenderingViewModel.idl b/src/cascadia/TerminalSettingsEditor/RenderingViewModel.idl index a9fa2ddb352..1ca164fbd97 100644 --- a/src/cascadia/TerminalSettingsEditor/RenderingViewModel.idl +++ b/src/cascadia/TerminalSettingsEditor/RenderingViewModel.idl @@ -15,7 +15,5 @@ namespace Microsoft.Terminal.Settings.Editor Windows.Foundation.Collections.IObservableVector GraphicsAPIList { get; }; PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, DisablePartialInvalidation); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, SoftwareRendering); - IInspectable CurrentTextMeasurement; - Windows.Foundation.Collections.IObservableVector TextMeasurementList { get; }; } } From 302e0728290678c0bee5e20c6561983ad8993bae Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 12 Sep 2024 15:46:08 -0700 Subject: [PATCH 12/21] remove feature flag --- src/cascadia/TerminalSettingsEditor/Compatibility.cpp | 5 ----- src/cascadia/TerminalSettingsEditor/Compatibility.h | 1 - src/cascadia/TerminalSettingsEditor/Compatibility.idl | 1 - src/cascadia/TerminalSettingsEditor/Compatibility.xaml | 3 +-- src/features.xml | 10 ---------- src/terminal/adapter/adaptDispatch.cpp | 2 +- 6 files changed, 2 insertions(+), 20 deletions(-) diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp index 62c5d306be5..9982eae8ca3 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp @@ -18,11 +18,6 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation INITIALIZE_BINDABLE_ENUM_SETTING(TextMeasurement, TextMeasurement, winrt::Microsoft::Terminal::Control::TextMeasurement, L"Globals_TextMeasurement_", L"Text"); } - bool CompatibilityViewModel::AllowVtChecksumReportAvailable() const noexcept - { - return Feature_VtChecksumReport::IsEnabled(); - } - bool CompatibilityViewModel::AllowKeypadModeAvailable() const noexcept { return Feature_KeypadModeEnabled::IsEnabled(); diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.h b/src/cascadia/TerminalSettingsEditor/Compatibility.h index ebf8d3fad96..eb8c03b3af8 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.h +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.h @@ -15,7 +15,6 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation public: CompatibilityViewModel(Model::GlobalAppSettings globalSettings); - bool AllowVtChecksumReportAvailable() const noexcept; bool AllowKeypadModeAvailable() const noexcept; // DON'T YOU DARE ADD A `WINRT_CALLBACK(PropertyChanged` TO A CLASS DERIVED FROM ViewModelHelper. Do this instead: diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.idl b/src/cascadia/TerminalSettingsEditor/Compatibility.idl index d105435ce62..39d281b5a8b 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.idl +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.idl @@ -11,7 +11,6 @@ namespace Microsoft.Terminal.Settings.Editor { CompatibilityViewModel(Microsoft.Terminal.Settings.Model.GlobalAppSettings globalSettings); - Boolean AllowVtChecksumReportAvailable { get; }; Boolean AllowKeypadModeAvailable { get; }; PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, ForceVTInput); diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml index f50874f7e3b..85bad2cc1e6 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -41,8 +41,7 @@ + Style="{StaticResource ToggleSwitchInExpanderStyle}" /> diff --git a/src/features.xml b/src/features.xml index b87e09bb7c4..82d84faa4ee 100644 --- a/src/features.xml +++ b/src/features.xml @@ -124,16 +124,6 @@ - - Feature_VtChecksumReport - Enables the DECRQCRA checksum report, which can be used to read the screen contents - 14974 - AlwaysDisabled - - Dev - - - Feature_ScratchpadPane Allow the user to create scratchpad panes. Mostly just exists to validate non-terminal panes. diff --git a/src/terminal/adapter/adaptDispatch.cpp b/src/terminal/adapter/adaptDispatch.cpp index 712e10db4b7..3e8a04d4d59 100644 --- a/src/terminal/adapter/adaptDispatch.cpp +++ b/src/terminal/adapter/adaptDispatch.cpp @@ -1323,7 +1323,7 @@ void AdaptDispatch::RequestChecksumRectangularArea(const VTInt id, const VTInt p { uint16_t checksum = 0; // If this feature is not enabled, we'll just report a zero checksum. - if (Feature_VtChecksumReport::IsEnabled() && _vtChecksumReportEnabled) + if (_vtChecksumReportEnabled) { // If the page number is 0, then we're meant to return a checksum of all // of the pages, but we have no need for that, so we'll just return 0. From 90d8fa12432e921ed01cec1ee244690f92936680 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Thu, 12 Sep 2024 16:59:33 -0700 Subject: [PATCH 13/21] add debugFeatures too --- src/cascadia/TerminalSettingsEditor/Compatibility.h | 1 + .../TerminalSettingsEditor/Compatibility.idl | 1 + .../TerminalSettingsEditor/Compatibility.xaml | 12 ++++++++++++ .../Resources/en-US/Resources.resw | 8 ++++++++ 4 files changed, 22 insertions(+) diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.h b/src/cascadia/TerminalSettingsEditor/Compatibility.h index eb8c03b3af8..8ee50400d91 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.h +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.h @@ -25,6 +25,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowKeypadMode); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowHeadless); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, IsolatedMode); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, DebugFeaturesEnabled); GETSET_BINDABLE_ENUM_SETTING(TextMeasurement, winrt::Microsoft::Terminal::Control::TextMeasurement, _GlobalSettings.TextMeasurement); private: diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.idl b/src/cascadia/TerminalSettingsEditor/Compatibility.idl index 39d281b5a8b..e56fc4639c0 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.idl +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.idl @@ -18,6 +18,7 @@ namespace Microsoft.Terminal.Settings.Editor PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowKeypadMode); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowHeadless); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, IsolatedMode); + PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, DebugFeaturesEnabled); IInspectable CurrentTextMeasurement; Windows.Foundation.Collections.IObservableVector TextMeasurementList { get; }; diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml index 85bad2cc1e6..1eb0cea4eb3 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -16,6 +16,11 @@ + + + + @@ -59,5 +64,12 @@ SelectedItem="{x:Bind ViewModel.CurrentTextMeasurement, Mode=TwoWay}" Style="{StaticResource ComboBoxSettingStyle}" /> + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw index fe0e2ede75a..824511740b9 100644 --- a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw @@ -559,6 +559,10 @@ Force each window to be its own process Header for a control to toggle making each window be its own process. + + Debug Mode + Header for a control to toggle debug features. + Terminal will always be the topmost window on the desktop. A description for what the "always on top" setting does. Presented near "Globals_AlwaysOnTop.Header". @@ -583,6 +587,10 @@ Certain features including but not limited to global hotkeys, tab drag and drop, and running commandlines in existing windows won't work. Additional description for what the "isolated mode" setting does. Presented near "Globals_IsolatedMode.Header". + + Enables features to help debug Windows Terminal + Additional description for what the "debug features enabled" setting does. Presented near "Globals_DebugFeaturesEnabled.Header". + Tab width mode Header for a control to choose how wide the tabs are. From bc84a4ce013b9ebad4b222b3b2f7b62722bfce73 Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Mon, 23 Sep 2024 17:04:32 -0700 Subject: [PATCH 14/21] apply feedback; create Profile>Terminal page --- .github/actions/spelling/allow/apis.txt | 1 - .../TerminalSettingsEditor/Compatibility.cpp | 4 +- .../TerminalSettingsEditor/Compatibility.h | 5 +- .../TerminalSettingsEditor/Compatibility.idl | 5 +- .../TerminalSettingsEditor/Compatibility.xaml | 22 +--- .../TerminalSettingsEditor/MainPage.cpp | 15 +++ .../TerminalSettingsEditor/MainPage.idl | 1 + ...Microsoft.Terminal.Settings.Editor.vcxproj | 15 +++ .../ProfileViewModel.cpp | 4 + .../TerminalSettingsEditor/ProfileViewModel.h | 4 + .../ProfileViewModel.idl | 7 +- .../Profiles_Advanced.xaml | 9 -- .../TerminalSettingsEditor/Profiles_Base.cpp | 6 ++ .../TerminalSettingsEditor/Profiles_Base.h | 1 + .../TerminalSettingsEditor/Profiles_Base.xaml | 13 +-- .../Profiles_Terminal.cpp | 31 ++++++ .../Profiles_Terminal.h | 31 ++++++ .../Profiles_Terminal.idl | 13 +++ .../Profiles_Terminal.xaml | 74 +++++++++++++ .../Resources/en-US/Resources.resw | 28 +++-- .../CascadiaSettingsSerialization.cpp | 8 ++ .../GlobalAppSettings.cpp | 3 - .../GlobalAppSettings.idl | 3 - .../TerminalSettingsModel/MTSMSettings.h | 10 +- .../TerminalSettingsModel/Profile.idl | 4 +- .../TerminalSettings.cpp | 6 +- src/features.xml | 17 +++ src/terminal/adapter/adaptDispatch.cpp | 101 +++++++++--------- 28 files changed, 312 insertions(+), 129 deletions(-) create mode 100644 src/cascadia/TerminalSettingsEditor/Profiles_Terminal.cpp create mode 100644 src/cascadia/TerminalSettingsEditor/Profiles_Terminal.h create mode 100644 src/cascadia/TerminalSettingsEditor/Profiles_Terminal.idl create mode 100644 src/cascadia/TerminalSettingsEditor/Profiles_Terminal.xaml diff --git a/.github/actions/spelling/allow/apis.txt b/.github/actions/spelling/allow/apis.txt index 7d9f2c65359..b60e1b26a30 100644 --- a/.github/actions/spelling/allow/apis.txt +++ b/.github/actions/spelling/allow/apis.txt @@ -35,7 +35,6 @@ dataobject dcomp debugbreak delayimp -DECRQRCA DERR dlldata DNE diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp index 9982eae8ca3..9534c8ee852 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.cpp +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.cpp @@ -18,9 +18,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation INITIALIZE_BINDABLE_ENUM_SETTING(TextMeasurement, TextMeasurement, winrt::Microsoft::Terminal::Control::TextMeasurement, L"Globals_TextMeasurement_", L"Text"); } - bool CompatibilityViewModel::AllowKeypadModeAvailable() const noexcept + bool CompatibilityViewModel::DebugFeaturesAvailable() const noexcept { - return Feature_KeypadModeEnabled::IsEnabled(); + return Feature_DebugMode::IsEnabled(); } Compatibility::Compatibility() diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.h b/src/cascadia/TerminalSettingsEditor/Compatibility.h index 8ee50400d91..018bb276ceb 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.h +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.h @@ -15,14 +15,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation public: CompatibilityViewModel(Model::GlobalAppSettings globalSettings); - bool AllowKeypadModeAvailable() const noexcept; + bool DebugFeaturesAvailable() const noexcept; // DON'T YOU DARE ADD A `WINRT_CALLBACK(PropertyChanged` TO A CLASS DERIVED FROM ViewModelHelper. Do this instead: using ViewModelHelper::PropertyChanged; - PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, ForceVTInput); - PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowVtChecksumReport); - PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowKeypadMode); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, AllowHeadless); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, IsolatedMode); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_GlobalSettings, DebugFeaturesEnabled); diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.idl b/src/cascadia/TerminalSettingsEditor/Compatibility.idl index e56fc4639c0..a05ed30e7ad 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.idl +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.idl @@ -11,11 +11,8 @@ namespace Microsoft.Terminal.Settings.Editor { CompatibilityViewModel(Microsoft.Terminal.Settings.Model.GlobalAppSettings globalSettings); - Boolean AllowKeypadModeAvailable { get; }; + Boolean DebugFeaturesAvailable { get; }; - PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, ForceVTInput); - PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowVtChecksumReport); - PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowKeypadMode); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, AllowHeadless); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, IsolatedMode); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Boolean, DebugFeaturesEnabled); diff --git a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml index 1eb0cea4eb3..dd121dbc588 100644 --- a/src/cascadia/TerminalSettingsEditor/Compatibility.xaml +++ b/src/cascadia/TerminalSettingsEditor/Compatibility.xaml @@ -37,25 +37,6 @@ Style="{StaticResource ToggleSwitchInExpanderStyle}" /> - - - - - - - - - - - - - - - - + diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.cpp b/src/cascadia/TerminalSettingsEditor/MainPage.cpp index d197542b53f..696579ae950 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.cpp +++ b/src/cascadia/TerminalSettingsEditor/MainPage.cpp @@ -341,6 +341,13 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _breadcrumbs.Append(crumb); SettingsMainPage_ScrollViewer().ScrollToVerticalOffset(0); } + else if (currentPage == ProfileSubPage::Terminal) + { + contentFrame().Navigate(xaml_typename(), profile); + const auto crumb = winrt::make(breadcrumbTag, RS_(L"Profile_Terminal/Header"), BreadcrumbSubPage::Profile_Terminal); + _breadcrumbs.Append(crumb); + SettingsMainPage_ScrollViewer().ScrollToVerticalOffset(0); + } else if (currentPage == ProfileSubPage::Advanced) { contentFrame().Navigate(xaml_typename(), profile); @@ -403,6 +410,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { profileVM.CurrentPage(ProfileSubPage::Appearance); } + else if (subPage == BreadcrumbSubPage::Profile_Terminal) + { + profileVM.CurrentPage(ProfileSubPage::Terminal); + } else if (subPage == BreadcrumbSubPage::Profile_Advanced) { profileVM.CurrentPage(ProfileSubPage::Advanced); @@ -460,6 +471,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { profile.CurrentPage(ProfileSubPage::Appearance); } + else if (subPage == BreadcrumbSubPage::Profile_Terminal) + { + profile.CurrentPage(ProfileSubPage::Terminal); + } else if (subPage == BreadcrumbSubPage::Profile_Advanced) { profile.CurrentPage(ProfileSubPage::Advanced); diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.idl b/src/cascadia/TerminalSettingsEditor/MainPage.idl index 419981d94de..d02251f7a4d 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.idl +++ b/src/cascadia/TerminalSettingsEditor/MainPage.idl @@ -17,6 +17,7 @@ namespace Microsoft.Terminal.Settings.Editor { None = 0, Profile_Appearance, + Profile_Terminal, Profile_Advanced, ColorSchemes_Edit }; diff --git a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj index 1cf12b4bea5..7d2aed1b744 100644 --- a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj +++ b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj @@ -121,6 +121,10 @@ Profiles_Appearance.xaml Code + + Profiles_Terminal.xaml + Code + Appearances.xaml Code @@ -178,6 +182,9 @@ Designer + + Designer + Designer @@ -270,6 +277,10 @@ Profiles_Appearance.xaml Code + + Profiles_Terminal.xaml + Code + Appearances.xaml Code @@ -351,6 +362,10 @@ Profiles_Appearance.xaml Code + + Profiles_Terminal.xaml + Code + Appearances.xaml Code diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp index 66d8371c3ea..0c98992eaea 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp @@ -281,6 +281,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { return Feature_ScrollbarMarks::IsEnabled(); } + bool ProfileViewModel::AllowKeypadModeAvailable() const noexcept + { + return Feature_KeypadModeEnabled::IsEnabled(); + } bool ProfileViewModel::UseParentProcessDirectory() { diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h index f0ce84f1f05..5b0b0d2149e 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h @@ -84,6 +84,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation bool ShowMarksAvailable() const noexcept; bool AutoMarkPromptsAvailable() const noexcept; bool RepositionCursorWithMouseAvailable() const noexcept; + bool AllowKeypadModeAvailable() const noexcept; til::typed_event DeleteProfileRequested; @@ -120,6 +121,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation OBSERVABLE_PROJECTED_SETTING(_profile, ShowMarks); OBSERVABLE_PROJECTED_SETTING(_profile, AutoMarkPrompts); OBSERVABLE_PROJECTED_SETTING(_profile, RepositionCursorWithMouse); + OBSERVABLE_PROJECTED_SETTING(_profile, ForceVTInput); + OBSERVABLE_PROJECTED_SETTING(_profile, AllowVtChecksumReport); + OBSERVABLE_PROJECTED_SETTING(_profile, AllowKeypadMode); WINRT_PROPERTY(bool, IsBaseLayer, false); WINRT_PROPERTY(bool, FocusDeleteButton, false); diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl index c0bc407c7ae..04bfd030129 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl @@ -29,7 +29,8 @@ namespace Microsoft.Terminal.Settings.Editor { Base = 0, Appearance = 1, - Advanced = 2 + Terminal = 2, + Advanced = 3 }; runtimeclass ProfileViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged @@ -74,6 +75,7 @@ namespace Microsoft.Terminal.Settings.Editor Boolean ShowMarksAvailable { get; }; Boolean AutoMarkPromptsAvailable { get; }; Boolean RepositionCursorWithMouseAvailable { get; }; + Boolean AllowKeypadModeAvailable { get; }; String EvaluatedIcon { get; }; @@ -111,5 +113,8 @@ namespace Microsoft.Terminal.Settings.Editor OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, ShowMarks); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AutoMarkPrompts); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, RepositionCursorWithMouse); + OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, ForceVTInput); + OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AllowVtChecksumReport); + OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AllowKeypadMode); } } diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml index add8fb2cf77..347f909d061 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml @@ -37,15 +37,6 @@ Visibility="{x:Bind Profile.IsBaseLayer}" /> - - - - - - Appearance - + Style="{StaticResource NavigatorButtonStyle}" /> + + Style="{StaticResource NavigatorButtonStyle}" />