diff --git a/.github/actions/spelling/expect/expect.txt b/.github/actions/spelling/expect/expect.txt index 150c544111a..9d38873e30c 100644 --- a/.github/actions/spelling/expect/expect.txt +++ b/.github/actions/spelling/expect/expect.txt @@ -341,6 +341,7 @@ CXVIRTUALSCREEN CXVSCROLL CYFRAME CYFULLSCREEN +cygdrive CYHSCROLL CYMIN CYPADDEDBORDER diff --git a/doc/cascadia/profiles.schema.json b/doc/cascadia/profiles.schema.json index 9774c51844c..45ae9c79acc 100644 --- a/doc/cascadia/profiles.schema.json +++ b/doc/cascadia/profiles.schema.json @@ -3095,6 +3095,17 @@ "default": false, "description": "When set to true, the window will have an acrylic material background. When set to false, the window will have a plain, untextured background.", "type": "boolean" + }, + "pathTranslationStyle": { + "default": "none", + "description": "Controls how file paths are transformed when they are dragged and dropped on the terminal. Possible values are \"none\", \"wsl\", \"cygwin\" and \"msys2\".", + "enum": [ + "none", + "wsl", + "cygwin", + "msys2" + ], + "type": "string" } } }, diff --git a/src/cascadia/TerminalControl/ControlInteractivity.cpp b/src/cascadia/TerminalControl/ControlInteractivity.cpp index f4259e1dd3b..5342d155f85 100644 --- a/src/cascadia/TerminalControl/ControlInteractivity.cpp +++ b/src/cascadia/TerminalControl/ControlInteractivity.cpp @@ -725,16 +725,4 @@ namespace winrt::Microsoft::Terminal::Control::implementation { return _core->GetRenderData(); } - - // Method Description: - // - Used by the TermControl to know if it should translate drag-dropped - // paths into WSL-friendly paths. - // Arguments: - // - - // Return Value: - // - true if the connection we were created with was a WSL profile. - bool ControlInteractivity::ManglePathsForWsl() - { - return _core->Settings().ProfileSource() == L"Windows.Terminal.Wsl"; - } } diff --git a/src/cascadia/TerminalControl/ControlInteractivity.h b/src/cascadia/TerminalControl/ControlInteractivity.h index 241d1b3cb7c..4f7b7f42935 100644 --- a/src/cascadia/TerminalControl/ControlInteractivity.h +++ b/src/cascadia/TerminalControl/ControlInteractivity.h @@ -86,7 +86,6 @@ namespace winrt::Microsoft::Terminal::Control::implementation const Windows::Foundation::IReference& formats); void RequestPasteTextFromClipboard(); void SetEndSelectionPoint(const Core::Point pixelPosition); - bool ManglePathsForWsl(); uint64_t Id(); void AttachToNewControl(const Microsoft::Terminal::Control::IKeyBindings& keyBindings); diff --git a/src/cascadia/TerminalControl/ControlInteractivity.idl b/src/cascadia/TerminalControl/ControlInteractivity.idl index 4cda6e3e66f..11e4f919ecb 100644 --- a/src/cascadia/TerminalControl/ControlInteractivity.idl +++ b/src/cascadia/TerminalControl/ControlInteractivity.idl @@ -66,8 +66,6 @@ namespace Microsoft.Terminal.Control void UpdateScrollbar(Single newValue); - Boolean ManglePathsForWsl { get; }; - event Windows.Foundation.TypedEventHandler OpenHyperlink; event Windows.Foundation.TypedEventHandler ScrollPositionChanged; event Windows.Foundation.TypedEventHandler PasteFromClipboard; diff --git a/src/cascadia/TerminalControl/IControlSettings.idl b/src/cascadia/TerminalControl/IControlSettings.idl index 96b5b6b95f8..ccd4445c483 100644 --- a/src/cascadia/TerminalControl/IControlSettings.idl +++ b/src/cascadia/TerminalControl/IControlSettings.idl @@ -21,6 +21,14 @@ namespace Microsoft.Terminal.Control Aliased }; + enum PathTranslationStyle + { + None = 0, + WSL, + Cygwin, + MSYS2 + }; + // Class Description: // TerminalSettings encapsulates all settings that control the // TermControl's behavior. In these settings there is both the entirety @@ -30,7 +38,6 @@ namespace Microsoft.Terminal.Control Microsoft.Terminal.Control.IControlAppearance { String ProfileName; - String ProfileSource; Boolean EnableUnfocusedAcrylic { get; }; Guid SessionId { get; }; @@ -69,6 +76,8 @@ namespace Microsoft.Terminal.Control Boolean RightClickContextMenu { get; }; Boolean RepositionCursorWithMouse { get; }; + PathTranslationStyle PathTranslationStyle { get; }; + // NOTE! When adding something here, make sure to update ControlProperties.h too! }; } diff --git a/src/cascadia/TerminalControl/TermControl.cpp b/src/cascadia/TerminalControl/TermControl.cpp index 65fb41dcfff..cbd80bc0e61 100644 --- a/src/cascadia/TerminalControl/TermControl.cpp +++ b/src/cascadia/TerminalControl/TermControl.cpp @@ -58,6 +58,54 @@ static Microsoft::Console::TSF::Handle& GetTSFHandle() namespace winrt::Microsoft::Terminal::Control::implementation { + static void _translatePathInPlace(std::wstring& fullPath, PathTranslationStyle translationStyle) + { + static constexpr wil::zwstring_view s_pathPrefixes[] = { + {}, + /* WSL */ L"/mnt/", + /* Cygwin */ L"/cygdrive/", + /* MSYS2 */ L"/", + }; + + if (translationStyle == PathTranslationStyle::None) + { + return; + } + + // All of the other path translation modes current result in /-delimited paths + std::replace(fullPath.begin(), fullPath.end(), L'\\', L'/'); + + if (fullPath.size() >= 2 && fullPath.at(1) == L':') + { + // C:/foo/bar -> Cc/foo/bar + fullPath.at(1) = til::tolower_ascii(fullPath.at(0)); + // Cc/foo/bar -> [PREFIX]c/foo/bar + fullPath.replace(0, 1, s_pathPrefixes[static_cast(translationStyle)]); + } + else if (translationStyle == PathTranslationStyle::WSL) + { + // Stripping the UNC name and distribution prefix only applies to WSL. + static constexpr std::wstring_view wslPathPrefixes[] = { L"//wsl.localhost/", L"//wsl$/" }; + for (auto prefix : wslPathPrefixes) + { + if (til::starts_with(fullPath, prefix)) + { + if (const auto idx = fullPath.find(L'/', prefix.size()); idx != std::wstring::npos) + { + // //wsl.localhost/Ubuntu-18.04/foo/bar -> /foo/bar + fullPath.erase(0, idx); + } + else + { + // //wsl.localhost/Ubuntu-18.04 -> / + fullPath = L"/"; + } + break; + } + } + } + } + TsfDataProvider::TsfDataProvider(TermControl* termControl) noexcept : _termControl{ termControl } { @@ -3215,54 +3263,12 @@ namespace winrt::Microsoft::Terminal::Control::implementation allPathsString += L" "; } - // Fix path for WSL - // In the fullness of time, we should likely plumb this up - // to the TerminalApp layer, and have it make the decision - // if this control should have its path mangled (and do the - // mangling), rather than exposing the source concept to the - // Control layer. - // - // However, it's likely that the control layer may need to - // know about the source anyways in the future, to support - // GH#3158 - const auto isWSL = _interactivity.ManglePathsForWsl(); - - if (isWSL) - { - std::replace(fullPath.begin(), fullPath.end(), L'\\', L'/'); - - if (fullPath.size() >= 2 && fullPath.at(1) == L':') - { - // C:/foo/bar -> Cc/foo/bar - fullPath.at(1) = til::tolower_ascii(fullPath.at(0)); - // Cc/foo/bar -> /mnt/c/foo/bar - fullPath.replace(0, 1, L"/mnt/"); - } - else - { - static constexpr std::wstring_view wslPathPrefixes[] = { L"//wsl.localhost/", L"//wsl$/" }; - for (auto prefix : wslPathPrefixes) - { - if (til::starts_with(fullPath, prefix)) - { - if (const auto idx = fullPath.find(L'/', prefix.size()); idx != std::wstring::npos) - { - // //wsl.localhost/Ubuntu-18.04/foo/bar -> /foo/bar - fullPath.erase(0, idx); - } - else - { - // //wsl.localhost/Ubuntu-18.04 -> / - fullPath = L"/"; - } - break; - } - } - } - } + const auto translationStyle{ _core.Settings().PathTranslationStyle() }; + _translatePathInPlace(fullPath, translationStyle); - const auto quotesNeeded = isWSL || fullPath.find(L' ') != std::wstring::npos; - const auto quotesChar = isWSL ? L'\'' : L'"'; + // All translated paths get quotes, and all strings spaces get quotes; all translated paths get single quotes + const auto quotesNeeded = translationStyle != PathTranslationStyle::None || fullPath.find(L' ') != std::wstring::npos; + const auto quotesChar = translationStyle != PathTranslationStyle::None ? L'\'' : L'"'; // Append fullPath and also wrap it in quotes if needed if (quotesNeeded) diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp index ab927bd890b..2dc89d90b98 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp @@ -39,6 +39,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation INITIALIZE_BINDABLE_ENUM_SETTING(AntiAliasingMode, TextAntialiasingMode, winrt::Microsoft::Terminal::Control::TextAntialiasingMode, L"Profile_AntialiasingMode", L"Content"); INITIALIZE_BINDABLE_ENUM_SETTING_REVERSE_ORDER(CloseOnExitMode, CloseOnExitMode, winrt::Microsoft::Terminal::Settings::Model::CloseOnExitMode, L"Profile_CloseOnExit", L"Content"); INITIALIZE_BINDABLE_ENUM_SETTING(ScrollState, ScrollbarState, winrt::Microsoft::Terminal::Control::ScrollbarState, L"Profile_ScrollbarVisibility", L"Content"); + INITIALIZE_BINDABLE_ENUM_SETTING(PathTranslationStyle, PathTranslationStyle, winrt::Microsoft::Terminal::Control::PathTranslationStyle, L"Profile_PathTranslationStyle", L"Content"); // Add a property changed handler to our own property changed event. // This propagates changes from the settings model to anybody listening to our @@ -76,6 +77,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { _NotifyChanges(L"HideIcon"); } + else if (viewModelProperty == L"PathTranslationStyle") + { + _NotifyChanges(L"CurrentPathTranslationStyle"); + } }); // Do the same for the starting directory diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h index 0b84a515ead..3e3be7286a5 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h @@ -126,12 +126,14 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation OBSERVABLE_PROJECTED_SETTING(_profile, AllowVtChecksumReport); OBSERVABLE_PROJECTED_SETTING(_profile, AnswerbackMessage); OBSERVABLE_PROJECTED_SETTING(_profile, RainbowSuggestions); + OBSERVABLE_PROJECTED_SETTING(_profile, PathTranslationStyle); WINRT_PROPERTY(bool, IsBaseLayer, false); WINRT_PROPERTY(bool, FocusDeleteButton, false); GETSET_BINDABLE_ENUM_SETTING(AntiAliasingMode, Microsoft::Terminal::Control::TextAntialiasingMode, AntialiasingMode); GETSET_BINDABLE_ENUM_SETTING(CloseOnExitMode, Microsoft::Terminal::Settings::Model::CloseOnExitMode, CloseOnExit); GETSET_BINDABLE_ENUM_SETTING(ScrollState, Microsoft::Terminal::Control::ScrollbarState, ScrollState); + GETSET_BINDABLE_ENUM_SETTING(PathTranslationStyle, Microsoft::Terminal::Control::PathTranslationStyle, PathTranslationStyle); private: Model::Profile _profile; diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl index 08f0108a8a9..dd4cbd6d5a5 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl @@ -58,6 +58,9 @@ namespace Microsoft.Terminal.Settings.Editor IInspectable CurrentScrollState; Windows.Foundation.Collections.IObservableVector ScrollStateList { get; }; + IInspectable CurrentPathTranslationStyle; + Windows.Foundation.Collections.IObservableVector PathTranslationStyleList { get; }; + Boolean CanDeleteProfile { get; }; Boolean FocusDeleteButton; Boolean IsBaseLayer; @@ -117,5 +120,6 @@ namespace Microsoft.Terminal.Settings.Editor OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AllowVtChecksumReport); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, AnswerbackMessage); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, RainbowSuggestions); + OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Control.PathTranslationStyle, PathTranslationStyle); } } diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml index d7abab4f733..15505919307 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml @@ -164,6 +164,19 @@ + + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw index 86c0ae46144..52e359a946f 100644 --- a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw @@ -1961,6 +1961,34 @@ Display a shield in the title bar when Windows Terminal is running as Administrator Header for a control to toggle displaying a shield in the title bar of the app. "Admin" refers to elevated sessions like "run as Admin" + + Path translation + Name for a control to select how file and directory paths are translated. + + + Path translation + Name for a control to select how file and directory paths are translated. + + + Controls how file and directory paths are translated during drag-and-drop operations. + A description for what the "path translation" setting does. Presented near "Profile_PathTranslationStyle.Header". + + + None + An option to choose from for the "path translation" setting. + + + WSL (C:\ -> /mnt/c) + {Locked="WSL","C:\","/mnt/c"} An option to choose from for the "path translation" setting. + + + Cygwin (C:\ -> /cygdrive/c) + {Locked="Cygwin","C:\","/cygdrive/c"} An option to choose from for the "path translation" setting. + + + MSYS2 (C:\ -> /c) + {Locked="MSYS2","C:\","/c"} An option to choose from for the "path translation" setting. + Profile no longer detected diff --git a/src/cascadia/TerminalSettingsModel/EnumMappings.cpp b/src/cascadia/TerminalSettingsModel/EnumMappings.cpp index 2ab4afc15c7..7895bec7d95 100644 --- a/src/cascadia/TerminalSettingsModel/EnumMappings.cpp +++ b/src/cascadia/TerminalSettingsModel/EnumMappings.cpp @@ -51,6 +51,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation DEFINE_ENUM_MAP(Microsoft::Terminal::Core::CursorStyle, CursorStyle); DEFINE_ENUM_MAP(Microsoft::Terminal::Settings::Model::IntenseStyle, IntenseTextStyle); DEFINE_ENUM_MAP(Microsoft::Terminal::Core::AdjustTextMode, AdjustIndistinguishableColors); + DEFINE_ENUM_MAP(Microsoft::Terminal::Control::PathTranslationStyle, PathTranslationStyle); // FontWeight is special because the JsonUtils::ConversionTrait for it // creates a FontWeight object, but we need to use the uint16_t value. diff --git a/src/cascadia/TerminalSettingsModel/EnumMappings.h b/src/cascadia/TerminalSettingsModel/EnumMappings.h index 57f5681de8f..15fbf50a403 100644 --- a/src/cascadia/TerminalSettingsModel/EnumMappings.h +++ b/src/cascadia/TerminalSettingsModel/EnumMappings.h @@ -48,6 +48,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation static winrt::Windows::Foundation::Collections::IMap FontWeight(); static winrt::Windows::Foundation::Collections::IMap IntenseTextStyle(); static winrt::Windows::Foundation::Collections::IMap AdjustIndistinguishableColors(); + static winrt::Windows::Foundation::Collections::IMap PathTranslationStyle(); }; } diff --git a/src/cascadia/TerminalSettingsModel/EnumMappings.idl b/src/cascadia/TerminalSettingsModel/EnumMappings.idl index 8b4fc9493ac..57735eccd5b 100644 --- a/src/cascadia/TerminalSettingsModel/EnumMappings.idl +++ b/src/cascadia/TerminalSettingsModel/EnumMappings.idl @@ -30,5 +30,6 @@ namespace Microsoft.Terminal.Settings.Model static Windows.Foundation.Collections.IMap AdjustIndistinguishableColors { get; }; static Windows.Foundation.Collections.IMap FontWeight { get; }; static Windows.Foundation.Collections.IMap IntenseTextStyle { get; }; + static Windows.Foundation.Collections.IMap PathTranslationStyle { get; }; } } diff --git a/src/cascadia/TerminalSettingsModel/MTSMSettings.h b/src/cascadia/TerminalSettingsModel/MTSMSettings.h index 19e763e1c4f..820e426c4d3 100644 --- a/src/cascadia/TerminalSettingsModel/MTSMSettings.h +++ b/src/cascadia/TerminalSettingsModel/MTSMSettings.h @@ -102,7 +102,8 @@ Author(s): X(bool, RainbowSuggestions, "experimental.rainbowSuggestions", false) \ X(bool, ForceVTInput, "compatibility.input.forceVT", false) \ X(bool, AllowVtChecksumReport, "compatibility.allowDECRQCRA", false) \ - X(bool, AllowKeypadMode, "compatibility.allowDECNKM", false) + X(bool, AllowKeypadMode, "compatibility.allowDECNKM", false) \ + X(Microsoft::Terminal::Control::PathTranslationStyle, PathTranslationStyle, "pathTranslationStyle", Microsoft::Terminal::Control::PathTranslationStyle::None) // Intentionally omitted Profile settings: // * Name diff --git a/src/cascadia/TerminalSettingsModel/Profile.idl b/src/cascadia/TerminalSettingsModel/Profile.idl index 331fc1345cf..4c927aa08d6 100644 --- a/src/cascadia/TerminalSettingsModel/Profile.idl +++ b/src/cascadia/TerminalSettingsModel/Profile.idl @@ -94,5 +94,7 @@ namespace Microsoft.Terminal.Settings.Model INHERITABLE_PROFILE_SETTING(Boolean, ForceVTInput); INHERITABLE_PROFILE_SETTING(Boolean, AllowVtChecksumReport); INHERITABLE_PROFILE_SETTING(Boolean, AllowKeypadMode); + + INHERITABLE_PROFILE_SETTING(Microsoft.Terminal.Control.PathTranslationStyle, PathTranslationStyle); } } diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp b/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp index 3716288e3ea..a5944e9cdc7 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp @@ -288,7 +288,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation // Fill in the remaining properties from the profile _ProfileName = profile.Name(); - _ProfileSource = profile.Source(); const auto fontInfo = profile.FontInfo(); _FontFace = fontInfo.FontFace(); @@ -349,6 +348,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation _RainbowSuggestions = profile.RainbowSuggestions(); _ForceVTInput = profile.ForceVTInput(); _AllowVtChecksumReport = profile.AllowVtChecksumReport(); + _PathTranslationStyle = profile.PathTranslationStyle(); } // Method Description: diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettings.h b/src/cascadia/TerminalSettingsModel/TerminalSettings.h index e47e8da81d1..e7cd26d7f4e 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettings.h +++ b/src/cascadia/TerminalSettingsModel/TerminalSettings.h @@ -119,7 +119,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation // ------------------------ End of Core Settings ----------------------- INHERITABLE_SETTING(Model::TerminalSettings, hstring, ProfileName); - INHERITABLE_SETTING(Model::TerminalSettings, hstring, ProfileSource); INHERITABLE_SETTING(Model::TerminalSettings, guid, SessionId); INHERITABLE_SETTING(Model::TerminalSettings, bool, EnableUnfocusedAcrylic, false); @@ -178,6 +177,8 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation INHERITABLE_SETTING(Model::TerminalSettings, bool, ReloadEnvironmentVariables, true); + INHERITABLE_SETTING(Model::TerminalSettings, Microsoft::Terminal::Control::PathTranslationStyle, PathTranslationStyle, Microsoft::Terminal::Control::PathTranslationStyle::None); + private: std::optional> _ColorTable; std::span _getColorTableImpl(); diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h b/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h index d497489c79d..ca5b86cc53b 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h +++ b/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h @@ -790,3 +790,13 @@ JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Control::DefaultInputScope) pair_type{ "alphanumericHalfWidth", ValueType::AlphanumericHalfWidth }, }; }; + +JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Control::PathTranslationStyle) +{ + static constexpr std::array mappings = { + pair_type{ "none", ValueType::None }, + pair_type{ "wsl", ValueType::WSL }, + pair_type{ "cygwin", ValueType::Cygwin }, + pair_type{ "msys2", ValueType::MSYS2 }, + }; +}; diff --git a/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp b/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp index 50285fd8243..cb1d220a904 100644 --- a/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp +++ b/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp @@ -66,6 +66,7 @@ static winrt::com_ptr makeProfile(const std::wstring& d WSLDistro->StartingDirectory(winrt::hstring{ DEFAULT_STARTING_DIRECTORY }); } WSLDistro->Icon(L"ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png"); + WSLDistro->PathTranslationStyle(winrt::Microsoft::Terminal::Control::PathTranslationStyle::WSL); return WSLDistro; } diff --git a/src/cascadia/inc/ControlProperties.h b/src/cascadia/inc/ControlProperties.h index f2c13a67c59..671d2de8012 100644 --- a/src/cascadia/inc/ControlProperties.h +++ b/src/cascadia/inc/ControlProperties.h @@ -58,7 +58,6 @@ // All of these settings are defined in IControlSettings. #define CONTROL_SETTINGS(X) \ X(winrt::hstring, ProfileName) \ - X(winrt::hstring, ProfileSource) \ X(winrt::guid, SessionId) \ X(bool, EnableUnfocusedAcrylic, false) \ X(winrt::hstring, Padding, DEFAULT_PADDING) \ @@ -84,4 +83,5 @@ X(bool, UseBackgroundImageForWindow, false) \ X(bool, ShowMarks, false) \ X(winrt::Microsoft::Terminal::Control::CopyFormat, CopyFormatting, 0) \ - X(bool, RightClickContextMenu, false) + X(bool, RightClickContextMenu, false) \ + X(winrt::Microsoft::Terminal::Control::PathTranslationStyle, PathTranslationStyle, winrt::Microsoft::Terminal::Control::PathTranslationStyle::None)