mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-30 00:37:23 +01:00
better handling of WM / DE
This commit is contained in:
+31
-51
@@ -5,10 +5,8 @@
|
||||
#define FF_DE_MODULE_NAME "DE"
|
||||
#define FF_DE_NUM_FORMAT_ARGS 3
|
||||
|
||||
static void getKDE(FFstrbuf* name, FFstrbuf* version, FFstrbuf* type)
|
||||
static void getKDE(FFstrbuf* name, FFstrbuf* version)
|
||||
{
|
||||
UNUSED(type);
|
||||
|
||||
ffStrbufSetS(name, "KDE Plasma");
|
||||
|
||||
char versionBuf[256];
|
||||
@@ -19,76 +17,58 @@ static void getKDE(FFstrbuf* name, FFstrbuf* version, FFstrbuf* type)
|
||||
|
||||
void ffPrintDesktopEnvironment(FFinstance* instance)
|
||||
{
|
||||
FF_STRBUF_CREATE(sessionDesktop);
|
||||
ffStrbufAppendS(&sessionDesktop, getenv("XDG_CURRENT_DESKTOP"));
|
||||
const char* sessionDesktop = ffGetSessionDesktop();
|
||||
|
||||
if(sessionDesktop.length == 0)
|
||||
ffStrbufSetS(&sessionDesktop, getenv("XDG_SESSION_DESKTOP"));
|
||||
|
||||
FF_STRBUF_CREATE(sessionVersion);
|
||||
FF_STRBUF_CREATE(sessionType);
|
||||
|
||||
if(ffStrbufIgnCaseCompS(&sessionDesktop, "KDE") == 0)
|
||||
getKDE(&sessionDesktop, &sessionVersion, &sessionType);
|
||||
|
||||
if(sessionType.length == 0)
|
||||
{
|
||||
const char* xdgSessionType = getenv("XDG_SESSION_TYPE");
|
||||
if(strcasecmp(xdgSessionType, "wayland") == 0)
|
||||
ffStrbufSetS(&sessionType, "Wayland");
|
||||
else if(strcasecmp(xdgSessionType, "x11") == 0)
|
||||
ffStrbufSetS(&sessionType, "X11");
|
||||
else if(strcasecmp(xdgSessionType, "tty") == 0)
|
||||
ffStrbufSetS(&sessionType, "TTY");
|
||||
else if(strcasecmp(xdgSessionType, "mir") == 0)
|
||||
ffStrbufSetS(&sessionType, "Mir");
|
||||
else if(xdgSessionType != NULL)
|
||||
ffStrbufSetS(&sessionType, xdgSessionType);
|
||||
}
|
||||
|
||||
if(sessionDesktop.length == 0 && sessionType.length == 0)
|
||||
if(sessionDesktop == NULL)
|
||||
{
|
||||
ffPrintError(instance, FF_DE_MODULE_NAME, 0, &instance->config.deKey, &instance->config.deFormat, FF_DE_NUM_FORMAT_ARGS, "No relevant XDG_SESSION_* environment variable set");
|
||||
ffStrbufDestroy(&sessionDesktop);
|
||||
ffStrbufDestroy(&sessionVersion);
|
||||
ffStrbufDestroy(&sessionType);
|
||||
return;
|
||||
}
|
||||
|
||||
const FFWMResult* wm = ffCalculateWM(instance);
|
||||
|
||||
// test if we are running only a WM
|
||||
if(
|
||||
ffStrbufIgnCaseCompS(&wm->processName, sessionDesktop) == 0 ||
|
||||
ffStrbufIgnCaseCompS(&wm->prettyName, sessionDesktop) == 0
|
||||
) return;
|
||||
|
||||
FFstrbuf sessionName;
|
||||
ffStrbufInit(&sessionName);
|
||||
|
||||
FFstrbuf sessionVersion;
|
||||
ffStrbufInit(&sessionVersion);
|
||||
|
||||
if(strcasecmp(sessionDesktop, "KDE") == 0)
|
||||
getKDE(&sessionName, &sessionVersion);
|
||||
|
||||
if(instance->config.deFormat.length == 0)
|
||||
{
|
||||
|
||||
ffPrintLogoAndKey(instance, FF_DE_MODULE_NAME, 0, &instance->config.deKey);
|
||||
|
||||
if(sessionDesktop.length > 0)
|
||||
if(sessionName.length > 0)
|
||||
ffStrbufWriteTo(&sessionName, stdout);
|
||||
else
|
||||
fputs(sessionDesktop, stdout);
|
||||
|
||||
if(sessionVersion.length > 0)
|
||||
{
|
||||
ffStrbufWriteTo(&sessionDesktop, stdout);
|
||||
|
||||
if(sessionVersion.length > 0)
|
||||
{
|
||||
putchar(' ');
|
||||
ffStrbufWriteTo(&sessionVersion, stdout);
|
||||
}
|
||||
|
||||
if(sessionType.length > 0)
|
||||
putchar(' ');
|
||||
putchar(' ');
|
||||
ffStrbufWriteTo(&sessionVersion, stdout);
|
||||
}
|
||||
|
||||
if(sessionType.length > 0)
|
||||
printf("(%s)", sessionType.chars);
|
||||
|
||||
putchar('\n');
|
||||
}
|
||||
else
|
||||
{
|
||||
ffPrintFormatString(instance, FF_DE_MODULE_NAME, 0, &instance->config.deKey, &instance->config.deFormat, NULL, FF_DE_NUM_FORMAT_ARGS, (FFformatarg[]){
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &sessionDesktop},
|
||||
{FF_FORMAT_ARG_TYPE_STRING, sessionDesktop},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &sessionName},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &sessionVersion},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &sessionType}
|
||||
});
|
||||
}
|
||||
|
||||
ffStrbufDestroy(&sessionDesktop);
|
||||
ffStrbufDestroy(&sessionName);
|
||||
ffStrbufDestroy(&sessionVersion);
|
||||
ffStrbufDestroy(&sessionType);
|
||||
}
|
||||
|
||||
+23
-11
@@ -1,7 +1,7 @@
|
||||
#include "fastfetch.h"
|
||||
|
||||
#define FF_WM_MODULE_NAME "WM"
|
||||
#define FF_WM_NUM_FORMAT_ARGS 2
|
||||
#define FF_WM_NUM_FORMAT_ARGS 3
|
||||
|
||||
void ffPrintWM(FFinstance* instance)
|
||||
{
|
||||
@@ -13,25 +13,37 @@ void ffPrintWM(FFinstance* instance)
|
||||
return;
|
||||
}
|
||||
|
||||
if(result->prettyName.length == 0 && result->processName.length == 0)
|
||||
{
|
||||
ffPrintError(instance, FF_WM_MODULE_NAME, 0, &instance->config.wmKey, &instance->config.wmFormat, FF_WM_NUM_FORMAT_ARGS, "No wm name provided");
|
||||
return;
|
||||
}
|
||||
|
||||
if(instance->config.wmFormat.length == 0)
|
||||
{
|
||||
ffPrintLogoAndKey(instance, "WM", 0, &instance->config.wmKey);
|
||||
if(result->prettyName.length > 0)
|
||||
ffStrbufPutTo(&result->prettyName, stdout);
|
||||
|
||||
if(result->prettyName.length == 0 && result->processName.length == 0)
|
||||
{
|
||||
ffStrbufPutTo(&result->protocolName, stdout);
|
||||
}
|
||||
else
|
||||
ffStrbufPutTo(&result->processName, stdout);
|
||||
{
|
||||
if(result->prettyName.length > 0)
|
||||
ffStrbufWriteTo(&result->prettyName, stdout);
|
||||
else
|
||||
ffStrbufWriteTo(&result->processName, stdout);
|
||||
|
||||
if(result->protocolName.length > 0)
|
||||
{
|
||||
fputs(" (", stdout);
|
||||
ffStrbufWriteTo(&result->protocolName, stdout);
|
||||
putchar(')');
|
||||
}
|
||||
|
||||
putchar('\n');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ffPrintFormatString(instance, FF_WM_MODULE_NAME, 0, &instance->config.wmKey, &instance->config.wmFormat, NULL, FF_WM_NUM_FORMAT_ARGS, (FFformatarg[]){
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &result->processName},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &result->prettyName}
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &result->prettyName},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &result->protocolName}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user