[PR #7667] Introduce TerminalSettingsModel project #26966

Open
opened 2026-01-31 09:19:10 +00:00 by claunia · 0 comments
Owner

Original Pull Request: https://github.com/microsoft/terminal/pull/7667

State: closed
Merged: Yes


Introduces a new TerminalSettingsModel (TSM) project. This project is
responsible for (de)serializing and exposing Windows Terminal's settings
as WinRT objects.

References

#885: TSM epic
#1564: Settings UI is dependent on this for data binding and settings access
#6904: TSM Spec

In the process of ripping out TSM from TerminalApp, a few other changes
were made to make this possible:

  1. AppLogic's ApplicationDisplayName and ApplicationVersion was
    moved to CascadiaSettings
    • These are defined as static functions. They also no longer check if
      AppLogic::Current() is nullptr.
  2. enum LaunchMode was moved from TerminalApp to TSM
  3. AzureConnectionType and TelnetConnectionType were moved from the
    profile generators to their respective TerminalConnections
  4. CascadiaSettings' SettingsPath and DefaultSettingsPath are
    exposed as hstring instead of std::filesystem::path
  5. Command::ExpandCommands() was exposed via the IDL
    • This required some of the warnings to be saved to an IVector
      instead of std::vector, among some other small changes.
  6. The localization resources had to be split into two halves.
    • Resource file linked in init.cpp. Verified at runtime thanks to the
      StaticResourceLoader.
  7. Added constructors to some ActionArgs
  8. Utils.h/cpp were moved to cascadia/inc. JsonKey() was moved to
    JsonUtils. Both TermApp and TSM need access to Utils.h/cpp.

A large amount of work includes moving to the new namespace
(TerminalApp --> Microsoft::Terminal::Settings::Model).

Fixing the tests had its own complications. Testing required us to split
up TSM into a DLL and LIB, similar to TermApp. Discussion on creating a
non-local test variant can be found in #7743.

Closes #885

**Original Pull Request:** https://github.com/microsoft/terminal/pull/7667 **State:** closed **Merged:** Yes --- Introduces a new TerminalSettingsModel (TSM) project. This project is responsible for (de)serializing and exposing Windows Terminal's settings as WinRT objects. ## References #885: TSM epic #1564: Settings UI is dependent on this for data binding and settings access #6904: TSM Spec In the process of ripping out TSM from TerminalApp, a few other changes were made to make this possible: 1. AppLogic's `ApplicationDisplayName` and `ApplicationVersion` was moved to `CascadiaSettings` - These are defined as static functions. They also no longer check if `AppLogic::Current()` is nullptr. 2. `enum LaunchMode` was moved from TerminalApp to TSM 3. `AzureConnectionType` and `TelnetConnectionType` were moved from the profile generators to their respective TerminalConnections 4. CascadiaSettings' `SettingsPath` and `DefaultSettingsPath` are exposed as `hstring` instead of `std::filesystem::path` 5. `Command::ExpandCommands()` was exposed via the IDL - This required some of the warnings to be saved to an `IVector` instead of `std::vector`, among some other small changes. 6. The localization resources had to be split into two halves. - Resource file linked in init.cpp. Verified at runtime thanks to the StaticResourceLoader. 7. Added constructors to some `ActionArgs` 8. Utils.h/cpp were moved to `cascadia/inc`. `JsonKey()` was moved to `JsonUtils`. Both TermApp and TSM need access to Utils.h/cpp. A large amount of work includes moving to the new namespace (`TerminalApp` --> `Microsoft::Terminal::Settings::Model`). Fixing the tests had its own complications. Testing required us to split up TSM into a DLL and LIB, similar to TermApp. Discussion on creating a non-local test variant can be found in #7743. Closes #885
claunia added the pull-request label 2026-01-31 09:19:10 +00:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#26966