2022-10-14 16:28:03 +08:00
|
|
|
#include "fastfetch.h"
|
|
|
|
|
#include "common/processing.h"
|
|
|
|
|
|
|
|
|
|
static void getShellVersionBash(FFstrbuf* exe, FFstrbuf* version)
|
|
|
|
|
{
|
|
|
|
|
ffProcessAppendStdOut(version, (char* const[]) {
|
|
|
|
|
exe->chars,
|
2022-10-14 22:58:56 +08:00
|
|
|
"--version",
|
2022-10-14 16:28:03 +08:00
|
|
|
NULL
|
2022-10-14 22:58:56 +08:00
|
|
|
}); // GNU bash, version 5.1.16(1)-release (x86_64-pc-msys)\nCopyright...
|
|
|
|
|
ffStrbufSubstrBeforeFirstC(version, '\n'); // GNU bash, version 5.1.16(1)-release (x86_64-pc-msys)
|
|
|
|
|
ffStrbufSubstrBeforeLastC(version, ' '); // GNU bash, version 5.1.16(1)-release
|
|
|
|
|
ffStrbufSubstrAfterLastC(version, ' '); // 5.1.16(1)-release
|
|
|
|
|
ffStrbufSubstrBeforeFirstC(version, '('); // 5.1.16
|
2022-10-14 16:28:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void getShellVersionZsh(FFstrbuf* exe, FFstrbuf* version)
|
|
|
|
|
{
|
|
|
|
|
ffProcessAppendStdOut(version, (char* const[]) {
|
|
|
|
|
exe->chars,
|
|
|
|
|
"--version",
|
|
|
|
|
NULL
|
|
|
|
|
});
|
|
|
|
|
ffStrbufSubstrBeforeLastC(version, ' ');
|
|
|
|
|
ffStrbufSubstrAfterFirstC(version, ' ');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void getShellVersionFishPwsh(FFstrbuf* exe, FFstrbuf* version)
|
|
|
|
|
{
|
|
|
|
|
ffProcessAppendStdOut(version, (char* const[]) {
|
|
|
|
|
exe->chars,
|
|
|
|
|
"--version",
|
|
|
|
|
NULL
|
|
|
|
|
});
|
|
|
|
|
ffStrbufTrimRight(version, '\n');
|
|
|
|
|
ffStrbufSubstrAfterLastC(version, ' ');
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-15 21:44:28 +08:00
|
|
|
#ifdef _WIN32
|
|
|
|
|
static void getShellVersionWinPowerShell(FFstrbuf* exe, FFstrbuf* version)
|
|
|
|
|
{
|
|
|
|
|
ffProcessAppendStdOut(version, (char* const[]) {
|
|
|
|
|
exe->chars,
|
|
|
|
|
"-NoLogo",
|
|
|
|
|
"-NoProfile",
|
|
|
|
|
"-Command",
|
|
|
|
|
"$PSVersionTable.PSVersion.ToString()",
|
|
|
|
|
NULL
|
|
|
|
|
});
|
|
|
|
|
ffStrbufTrimRight(version, '\n');
|
|
|
|
|
ffStrbufSubstrAfterLastC(version, ' ');
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
2022-10-14 16:28:03 +08:00
|
|
|
static void getShellVersionNu(FFstrbuf* exe, FFstrbuf* version)
|
|
|
|
|
{
|
|
|
|
|
ffProcessAppendStdOut(version, (char* const[]) {
|
|
|
|
|
exe->chars,
|
|
|
|
|
"--version",
|
|
|
|
|
NULL
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool fftsGetShellVersion(FFstrbuf* exe, const char* exeName, FFstrbuf* version)
|
|
|
|
|
{
|
|
|
|
|
bool ok = true;
|
|
|
|
|
if(strcasecmp(exeName, "bash") == 0 || strcasecmp(exeName, "sh") == 0)
|
|
|
|
|
getShellVersionBash(exe, version);
|
|
|
|
|
else if(strcasecmp(exeName, "zsh") == 0)
|
|
|
|
|
getShellVersionZsh(exe, version);
|
|
|
|
|
else if(strcasecmp(exeName, "fish") == 0 || strcasecmp(exeName, "pwsh") == 0)
|
|
|
|
|
getShellVersionFishPwsh(exe, version);
|
|
|
|
|
else if(strcasecmp(exeName, "nu") == 0)
|
|
|
|
|
getShellVersionNu(exe, version);
|
2022-10-15 21:44:28 +08:00
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
else if(strcasecmp(exeName, "powershell") == 0 || strcasecmp(exeName, "powershell_ise") == 0)
|
|
|
|
|
getShellVersionWinPowerShell(exe, version);
|
|
|
|
|
#endif
|
|
|
|
|
|
2022-10-14 16:28:03 +08:00
|
|
|
else
|
|
|
|
|
ok = false;
|
|
|
|
|
return ok;
|
|
|
|
|
}
|