diff --git a/src/core/Tools.cpp b/src/core/Tools.cpp index 1b3eafcca..d29e92bff 100644 --- a/src/core/Tools.cpp +++ b/src/core/Tools.cpp @@ -331,11 +331,15 @@ namespace Tools #if defined(Q_OS_WIN) QRegularExpression varRe("\\%([A-Za-z][A-Za-z0-9_]*)\\%"); + QString homeEnv = "USERPROFILE"; #else QRegularExpression varRe("\\$([A-Za-z][A-Za-z0-9_]*)"); - subbed.replace("~", environment.value("HOME")); + QString homeEnv = "HOME"; #endif + if (subbed.startsWith("~/") || subbed.startsWith("~\\")) + subbed.replace(0, 1, environment.value(homeEnv)); + QRegularExpressionMatch match; do { diff --git a/tests/TestTools.cpp b/tests/TestTools.cpp index 4809a8bc9..cdce6e04e 100644 --- a/tests/TestTools.cpp +++ b/tests/TestTools.cpp @@ -72,10 +72,14 @@ void TestTools::testEnvSubstitute() #if defined(Q_OS_WIN) environment.insert("HOMEDRIVE", "C:"); environment.insert("HOMEPATH", "\\Users\\User"); + environment.insert("USERPROFILE", "C:\\Users\\User"); QCOMPARE(Tools::envSubstitute("%HOMEDRIVE%%HOMEPATH%\\.ssh\\id_rsa", environment), QString("C:\\Users\\User\\.ssh\\id_rsa")); QCOMPARE(Tools::envSubstitute("start%EMPTY%%EMPTY%%%HOMEDRIVE%%end", environment), QString("start%C:%end")); + QCOMPARE(Tools::envSubstitute("%USERPROFILE%\\.ssh\\id_rsa", environment), + QString("C:\\Users\\User\\.ssh\\id_rsa")); + QCOMPARE(Tools::envSubstitute("~\\.ssh\\id_rsa", environment), QString("C:\\Users\\User\\.ssh\\id_rsa")); #else environment.insert("HOME", QString("/home/user")); environment.insert("USER", QString("user"));