-
Notifications
You must be signed in to change notification settings - Fork 8.9k
Description
TerminalSettings.dll exists because it is difficult to coerce the C++/WinRT build infrastructure to produce a type library and a set of headers without either statically linking (which rolls up the generated types into the consuming project) or dynamically linking (which forces us to put a DLL on disk).
I posit that the ideal representation of settings is the ICoreSettings and IControlSettings interfaces only. No classes need to be implemented in TerminalSettings.dll, because all they'd do is ferry data back and forth.
By dropping the classes and switching to the interfaces, we can remove the setters from the interfaces, and remove the runtime classes completely. Cascadia (or TerminalApp::<something>) can implement ICoreSettings and IControlSettings as views over existing profile data.
This will reduce both the number of runtime hops required for loading and saving settings and the number of code authoring hops required for adding new settings.
Approach
- Introduce/Move TerminalApp bridge #7139: Introduce/Move TerminalApp bridge
- Move
TerminalSettings::TerminalSettingstoTerminalApp::TerminalSettings
- Move
- Move
TerminalSettingsinterfaces #7140: MoveTerminalSettingsinterfaces- Move
TerminalSettings::ICoreSettingsto TerminalControl project - Move
TerminalSettings::IControlSettingsto TerminalControl project
- Move
- Transform TerminalApp settings objects into WinRT objects #7141: Transform TerminalApp settings objects into WinRT objects
- Profile
- ColorScheme
- GlobalSettings
- Keybindings (this may be moved out to be its own PR)
- Move the new WinRT settings objects into TerminalSettings project
- I'll close the scenario when this is complete