@samitouri / QOSAMI-WSL / commits / 17bd3716

Remove hardcoded `--cd ~` from WSL terminal fragment profiles to support Terminal's startingDirectory (#13350)

* Initial plan * Fix WSL terminal fragment profiles to support Terminal's startingDirectory Co-authored-by: benhillis <17727402+benhillis@users.noreply.github.com> * clang format --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: benhillis <17727402+benhillis@users.noreply.github.com> Co-authored-by: Ben Hillis <benhill@ntdev.microsoft.com>

Copilot committed Aug 11, 2025 at 14:08 UTC 17bd3716b4470bb70b74497774940f5ee42b6437
2 files changed +13 -3
src/windows/service/exe/LxssUserSession.cpp
+9 -2
@@ -2678,13 +2678,20 @@ try
2678 std::wstring systemDirectory;
2679 THROW_IF_FAILED(wil::GetSystemDirectory(systemDirectory));
2680
2681 - e["commandline"] = WideToMultiByte(std::format(
2682 - L"{}\\{} {} {} {} {}", systemDirectory, WSL_BINARY_NAME, WSL_DISTRIBUTION_ID_ARG, distributionIdString, WSL_CHANGE_DIRECTORY_ARG, WSL_CWD_HOME));
2681 + e["commandline"] =
2682 + WideToMultiByte(std::format(L"{}\\{} {} {}", systemDirectory, WSL_BINARY_NAME, WSL_DISTRIBUTION_ID_ARG, distributionIdString));
2683
2684 e["name"] = WideToMultiByte(Configuration.Name);
2685 e["guid"] = WideToMultiByte(distributionProfileId);
2686 e["icon"] = WideToMultiByte(IconPath.native());
2687
2688 + // Set default starting directory to home directory if not already specified
2689 + // This allows Windows Terminal to override with startingDirectory setting
2690 + if (e.find("startingDirectory") == e.end())
2691 + {
2692 + e["startingDirectory"] = "~";
2693 + }
2694 +
2695 // See https://github.com/microsoft/terminal/pull/18195. Supported in terminal >= 1.23
2696 e["pathTranslationStyle"] = "wsl";
2697
test/windows/UnitTests.cpp
+4 -1
@@ -2539,9 +2539,12 @@ Error code: Wsl/InstallDistro/WSL_E_DISTRO_NOT_FOUND
2539 wil::GetSystemDirectoryW(systemDir);
2540
2541 VERIFY_ARE_EQUAL(
2542 - std::format("{}\\{} {} {} {} {}", systemDir, WSL_BINARY_NAME, WSL_DISTRIBUTION_ID_ARG, distroIdString, WSL_CHANGE_DIRECTORY_ARG, WSL_CWD_HOME),
2542 + std::format("{}\\{} {} {}", systemDir, WSL_BINARY_NAME, WSL_DISTRIBUTION_ID_ARG, distroIdString),
2543 launchProfile["commandline"].get<std::string>());
2544
2545 + // Verify that startingDirectory is set to home directory
2546 + VERIFY_ARE_EQUAL(launchProfile["startingDirectory"].get<std::string>(), "~");
2547 +
2548 auto iconLocation = wsl::shared::string::MultiByteToWide(launchProfile["icon"].get<std::string>());
2549 if (defaultIcon)
2550 {