From 70d8b2a2ef70cd4148759e695d6a9eeee8c94764 Mon Sep 17 00:00:00 2001 From: "Dustin L. Howett" Date: Tue, 1 Feb 2022 17:23:44 -0600 Subject: [PATCH] Set the default WSL starting directory to ~ (#12315) The update that enables this on 20H1+, [KB5007253], went out in November 2021. [KB5007253]: https://support.microsoft.com/en-us/topic/november-22-2021-kb5007253-os-builds-19041-1387-19042-1387-19043-1387-and-19044-1387-preview-d1847be9-46c1-49fc-bf56-1d469fc1b3af --- .../WslDistroGenerator.cpp | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp b/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp index 8c7ba896c5a..ba385df42c0 100644 --- a/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp +++ b/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp @@ -11,6 +11,7 @@ #include #include "DynamicProfileUtils.h" +static constexpr std::wstring_view WslHomeDirectory{ L"~" }; static constexpr std::wstring_view DockerDistributionPrefix{ L"docker-desktop" }; // The WSL entries are structured as such: @@ -23,6 +24,18 @@ static constexpr wchar_t RegKeyDistroName[] = L"DistributionName"; using namespace ::Microsoft::Terminal::Settings::Model; using namespace winrt::Microsoft::Terminal::Settings::Model; +static bool isWslDashDashCdAvailableForLinuxPaths() noexcept +{ + OSVERSIONINFOEXW osver{}; + osver.dwOSVersionInfoSize = sizeof(osver); + osver.dwBuildNumber = 19041; + + DWORDLONG dwlConditionMask = 0; + VER_SET_CONDITION(dwlConditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL); + + return VerifyVersionInfoW(&osver, VER_BUILDNUMBER, dwlConditionMask) != FALSE; +} + // Legacy GUIDs: // - Debian 58ad8b0c-3ef8-5f4d-bc6f-13e4c00f2530 // - Ubuntu 2c4de342-38b7-51cf-b940-2309a097f518 @@ -43,7 +56,14 @@ static winrt::com_ptr makeProfile(const std::wstring& d THROW_IF_FAILED(wil::GetSystemDirectoryW(command)); WSLDistro->Commandline(winrt::hstring{ command + L"\\wsl.exe -d " + distName }); WSLDistro->DefaultAppearance().ColorSchemeName(L"Campbell"); - WSLDistro->StartingDirectory(winrt::hstring{ DEFAULT_STARTING_DIRECTORY }); + if (isWslDashDashCdAvailableForLinuxPaths()) + { + WSLDistro->StartingDirectory(winrt::hstring{ WslHomeDirectory }); + } + else + { + WSLDistro->StartingDirectory(winrt::hstring{ DEFAULT_STARTING_DIRECTORY }); + } WSLDistro->Icon(L"ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png"); return WSLDistro; }