From 5f23f2b027ff6509da83fda1e9427383232f7e16 Mon Sep 17 00:00:00 2001 From: Linus Dierheimer Date: Tue, 6 Apr 2021 11:36:05 +0200 Subject: [PATCH] small refactoring --- CMakeLists.txt | 4 +- src/common.c | 90 ++++++++++++++++++++++++++- src/fastfetch.h | 8 +-- src/helpers/{gtk.c => calculateGtk.c} | 80 ------------------------ src/helpers/calculateTerminal.c | 79 +++++++++++++++++++++++ src/helpers/calculateWM.c | 62 ++++++++++++++++++ src/modules/terminal.c | 78 ----------------------- src/modules/wm.c | 61 ------------------ 8 files changed, 234 insertions(+), 228 deletions(-) rename src/helpers/{gtk.c => calculateGtk.c} (78%) create mode 100644 src/helpers/calculateTerminal.c create mode 100644 src/helpers/calculateWM.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 609aeab93..e51ac9536 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,9 @@ set(SRCS src/common.c src/logo.c src/util/FFstrbuf.c - src/helpers/gtk.c + src/helpers/calculateGtk.c + src/helpers/calculateTerminal.c + src/helpers/calculateWM.c src/modules/break.c src/modules/custom.c src/modules/title.c diff --git a/src/common.c b/src/common.c index 64043e7de..2127f77ed 100644 --- a/src/common.c +++ b/src/common.c @@ -399,6 +399,86 @@ void ffPrintFormatString(FFinstance* instance, FFstrbuf* customKey, const char* ffStrbufDestroy(&buffer); } +void ffFormatGtkPretty(FFstrbuf* buffer, FFstrbuf* gtk2, FFstrbuf* gtk3, FFstrbuf* gtk4) +{ + if(gtk2->length > 0 && gtk3->length > 0 && gtk4->length > 0) + { + if((ffStrbufIgnCaseComp(gtk2, gtk3) == 0) && (ffStrbufIgnCaseComp(gtk2, gtk4) == 0)) + { + ffStrbufAppend(buffer, gtk4); + ffStrbufAppendS(buffer, " [GTK2/3/4]"); + } + else if(ffStrbufIgnCaseComp(gtk2, gtk3) == 0) + { + ffStrbufAppend(buffer, gtk3); + ffStrbufAppendS(buffer, " [GTK2/3], "); + ffStrbufAppend(buffer, gtk4); + ffStrbufAppendS(buffer, " [GTK4]"); + } + else if(ffStrbufIgnCaseComp(gtk3, gtk4) == 0) + { + ffStrbufAppend(buffer, gtk2); + ffStrbufAppendS(buffer, " [GTK2], "); + ffStrbufAppend(buffer, gtk4); + ffStrbufAppendS(buffer, " [GTK3/4]"); + } + else + { + ffStrbufAppend(buffer, gtk2); + ffStrbufAppendS(buffer, " [GTK2], "); + ffStrbufAppend(buffer, gtk3); + ffStrbufAppendS(buffer, " [GTK3], "); + ffStrbufAppend(buffer, gtk4); + ffStrbufAppendS(buffer, " [GTK4]"); + } + } + else if(gtk2->length > 0 && gtk3->length > 0) + { + if(ffStrbufIgnCaseComp(gtk2, gtk3) == 0) + { + ffStrbufAppend(buffer, gtk3); + ffStrbufAppendS(buffer, " [GTK2/3]"); + } + else + { + ffStrbufAppend(buffer, gtk2); + ffStrbufAppendS(buffer, " [GTK2], "); + ffStrbufAppend(buffer, gtk3); + ffStrbufAppendS(buffer, " [GTK3]"); + } + } + else if(gtk3->length > 0 && gtk4->length > 0) + { + if(ffStrbufIgnCaseComp(gtk3, gtk4) == 0) + { + ffStrbufAppend(buffer, gtk4); + ffStrbufAppendS(buffer, " [GTK3/4]"); + } + else + { + ffStrbufAppend(buffer, gtk3); + ffStrbufAppendS(buffer, " [GTK3], "); + ffStrbufAppend(buffer, gtk4); + ffStrbufAppendS(buffer, " [GTK4]"); + } + } + else if(gtk2->length > 0) + { + ffStrbufAppend(buffer, gtk2); + ffStrbufAppendS(buffer, " [GTK2]"); + } + else if(gtk3->length > 0) + { + ffStrbufAppend(buffer, gtk3); + ffStrbufAppendS(buffer, " [GTK3]"); + } + else if(gtk4->length > 0) + { + ffStrbufAppend(buffer, gtk4); + ffStrbufAppendS(buffer, " [GTK4]"); + } +} + void ffParseFont(const char* font, FFstrbuf* name, double* size) { ffStrbufEnsureCapacity(name, 32); @@ -417,7 +497,11 @@ void ffParseFont(const char* font, FFstrbuf* name, double* size) void ffFontPretty(FFstrbuf* buffer, const FFstrbuf* name, double size) { ffStrbufAppend(buffer, name); - ffStrbufAppendS(buffer, " ("); - ffStrbufAppendF(buffer, "%g", size); - ffStrbufAppendS(buffer, "pt)"); + + if(size > 0) + { + ffStrbufAppendS(buffer, " ("); + ffStrbufAppendF(buffer, "%g", size); + ffStrbufAppendS(buffer, "pt)"); + } } diff --git a/src/fastfetch.h b/src/fastfetch.h index c9237bc09..cf6006891 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -143,6 +143,7 @@ void ffParsePropFileHome(FFinstance* instance, const char* relativeFile, const c void ffParseFormatStringV(FFstrbuf* buffer, FFstrbuf* formatstr, uint32_t numArgs, va_list argp); void ffParseFormatString(FFstrbuf* buffer, FFstrbuf* formatstr, uint32_t numArgs, ...); void ffPrintFormatString(FFinstance* instance, FFstrbuf* customKey, const char* defKey, FFstrbuf* formatstr, uint32_t numArgs, ...); +void ffFormatGtkPretty(FFstrbuf* buffer, FFstrbuf* gtk2, FFstrbuf* gtk3, FFstrbuf* gtk4); void ffParseFont(const char* font, FFstrbuf* name, double* size); void ffFontPretty(FFstrbuf* buffer, const FFstrbuf* name, double size); void ffFinish(FFinstance* instance); @@ -163,14 +164,11 @@ void ffPrintLogos(bool color); void ffCalculateGTK2(FFinstance* instance, FFstrbuf** themeNamePtr, FFstrbuf** iconsNamePtr, FFstrbuf** fontNamePtr); void ffCalculateGTK4(FFinstance* instance, FFstrbuf** themeNamePtr, FFstrbuf** iconsNamePtr, FFstrbuf** fontNamePtr); void ffCalculateGTK3(FFinstance* instance, FFstrbuf** themeNamePtr, FFstrbuf** iconsNamePtr, FFstrbuf** fontNamePtr); - -void ffFormatGtkPretty(FFstrbuf* buffer, FFstrbuf* gtk2, FFstrbuf* gtk3, FFstrbuf* gtk4); +void ffCalculateWM(FFinstance* instance, FFstrbuf** prettyNamePtr, FFstrbuf** processNamePtr, FFstrbuf** errorPtr); +void ffCalculateTerminal(FFinstance* instance, FFstrbuf** exeNamePtr, FFstrbuf** processNamePtr, FFstrbuf** errorPtr); //Module functions -void ffCalculateTerminal(FFinstance* instance, FFstrbuf** exeNamePtr, FFstrbuf** processNamePtr, FFstrbuf** errorPtr); -void ffCalculateWM(FFinstance* instance, FFstrbuf** prettyNamePtr, FFstrbuf** processNamePtr, FFstrbuf** errorPtr); - void ffPrintCustom(FFinstance* instance, const char* key, const char* value); void ffPrintBreak(FFinstance* instance); void ffPrintTitle(FFinstance* instance); diff --git a/src/helpers/gtk.c b/src/helpers/calculateGtk.c similarity index 78% rename from src/helpers/gtk.c rename to src/helpers/calculateGtk.c index a11e90631..8b259fb52 100644 --- a/src/helpers/gtk.c +++ b/src/helpers/calculateGtk.c @@ -279,83 +279,3 @@ void ffCalculateGTK4(FFinstance* instance, FFstrbuf** themeNamePtr, FFstrbuf** i } #undef FF_CALCULATE_GTK_IMPL - -void ffFormatGtkPretty(FFstrbuf* buffer, FFstrbuf* gtk2, FFstrbuf* gtk3, FFstrbuf* gtk4) -{ - if(gtk2->length > 0 && gtk3->length > 0 && gtk4->length > 0) - { - if((ffStrbufIgnCaseComp(gtk2, gtk3) == 0) && (ffStrbufIgnCaseComp(gtk2, gtk4) == 0)) - { - ffStrbufAppend(buffer, gtk4); - ffStrbufAppendS(buffer, " [GTK2/3/4]"); - } - else if(ffStrbufIgnCaseComp(gtk2, gtk3) == 0) - { - ffStrbufAppend(buffer, gtk3); - ffStrbufAppendS(buffer, " [GTK2/3], "); - ffStrbufAppend(buffer, gtk4); - ffStrbufAppendS(buffer, " [GTK4]"); - } - else if(ffStrbufIgnCaseComp(gtk3, gtk4) == 0) - { - ffStrbufAppend(buffer, gtk2); - ffStrbufAppendS(buffer, " [GTK2], "); - ffStrbufAppend(buffer, gtk4); - ffStrbufAppendS(buffer, " [GTK3/4]"); - } - else - { - ffStrbufAppend(buffer, gtk2); - ffStrbufAppendS(buffer, " [GTK2], "); - ffStrbufAppend(buffer, gtk3); - ffStrbufAppendS(buffer, " [GTK3], "); - ffStrbufAppend(buffer, gtk4); - ffStrbufAppendS(buffer, " [GTK4]"); - } - } - else if(gtk2->length > 0 && gtk3->length > 0) - { - if(ffStrbufIgnCaseComp(gtk2, gtk3) == 0) - { - ffStrbufAppend(buffer, gtk3); - ffStrbufAppendS(buffer, " [GTK2/3]"); - } - else - { - ffStrbufAppend(buffer, gtk2); - ffStrbufAppendS(buffer, " [GTK2], "); - ffStrbufAppend(buffer, gtk3); - ffStrbufAppendS(buffer, " [GTK3]"); - } - } - else if(gtk3->length > 0 && gtk4->length > 0) - { - if(ffStrbufIgnCaseComp(gtk3, gtk4) == 0) - { - ffStrbufAppend(buffer, gtk4); - ffStrbufAppendS(buffer, " [GTK3/4]"); - } - else - { - ffStrbufAppend(buffer, gtk3); - ffStrbufAppendS(buffer, " [GTK3], "); - ffStrbufAppend(buffer, gtk4); - ffStrbufAppendS(buffer, " [GTK4]"); - } - } - else if(gtk2->length > 0) - { - ffStrbufAppend(buffer, gtk2); - ffStrbufAppendS(buffer, " [GTK2]"); - } - else if(gtk3->length > 0) - { - ffStrbufAppend(buffer, gtk3); - ffStrbufAppendS(buffer, " [GTK3]"); - } - else if(gtk4->length > 0) - { - ffStrbufAppend(buffer, gtk4); - ffStrbufAppendS(buffer, " [GTK4]"); - } -} diff --git a/src/helpers/calculateTerminal.c b/src/helpers/calculateTerminal.c new file mode 100644 index 000000000..479e0e490 --- /dev/null +++ b/src/helpers/calculateTerminal.c @@ -0,0 +1,79 @@ +#include "fastfetch.h" + +static void getTerminalName(FFinstance* instance, const char* pid, FFstrbuf* exeName, FFstrbuf* processName, FFstrbuf* error) +{ + char statFile[234]; + sprintf(statFile, "/proc/%s/stat", pid); + + FILE* stat = fopen(statFile, "r"); + if(stat == NULL) + { + ffStrbufSetF(error, "fopen(\"%s\", \"r\") == NULL", statFile); + return; + } + + char name[256]; + char ppid[256]; + if(fscanf(stat, "%*s (%[^)])%*s%s", name, ppid) != 2) + { + ffStrbufSetS(error, "fscanf(stat, \"%*s (%[^)])%*s%s\", name, ppid) != 2"); + return; + } + + fclose(stat); + + if ( + strcasecmp(name, "bash") == 0 || + strcasecmp(name, "sh") == 0 || + strcasecmp(name, "zsh") == 0 || + strcasecmp(name, "ksh") == 0 || + strcasecmp(name, "fish") == 0 || + strcasecmp(name, "sudo") == 0 || + strcasecmp(name, "su") == 0 || + strcasecmp(name, "doas") == 0 || + strcasecmp(name, "strace") == 0 ) + { + getTerminalName(instance, ppid, exeName, processName, error); + return; + } + + char cmdlineFile[234]; + sprintf(cmdlineFile, "/proc/%s/cmdline", pid); + + ffGetFileContent(cmdlineFile, exeName); + ffStrbufSubstrBeforeFirstC(exeName, '\0'); + ffStrbufSubstrAfterLastC(exeName, '/'); + + ffStrbufSetS(processName, name); +} + +void ffCalculateTerminal(FFinstance* instance, FFstrbuf** exeNamePtr, FFstrbuf** processNamePtr, FFstrbuf** errorPtr) +{ + static FFstrbuf exeName; + static FFstrbuf processName; + static FFstrbuf error; + static bool init = false; + + if(exeNamePtr != NULL) + *exeNamePtr = &exeName; + + if(processNamePtr != NULL) + *processNamePtr = &processName; + + if(errorPtr != NULL) + *errorPtr = &error; + + if(init) + return; + init = true; + + ffStrbufInit(&exeName); + ffStrbufInit(&processName); + ffStrbufInit(&error); + + char ppid[256]; + sprintf(ppid, "%i", getppid()); + + getTerminalName(instance, ppid, &exeName, &processName, &error); + +} diff --git a/src/helpers/calculateWM.c b/src/helpers/calculateWM.c new file mode 100644 index 000000000..4545f227f --- /dev/null +++ b/src/helpers/calculateWM.c @@ -0,0 +1,62 @@ +#include "fastfetch.h" + +#include + +void ffCalculateWM(FFinstance* instance, FFstrbuf** prettyNamePtr, FFstrbuf** processNamePtr, FFstrbuf** errorPtr) +{ + static FFstrbuf prettyName; + static FFstrbuf processName; + static FFstrbuf error; + static bool init = false; + + if(prettyNamePtr != NULL) + *prettyNamePtr = &prettyName; + + if(processNamePtr != NULL) + *processNamePtr = &processName; + + if(errorPtr != NULL) + *errorPtr = &error; + + if(init) + return; + init = true; + + ffStrbufInit(&prettyName); + ffStrbufInit(&processName); + ffStrbufInit(&error); + + DIR* proc = opendir("/proc/"); + if(proc == NULL) + { + ffStrbufSetS(&error, "opendir(\"/proc/\") == NULL"); + return; + } + + struct dirent* dirent; + + while((dirent = readdir(proc)) != NULL) + { + if(dirent->d_type != DT_DIR) + continue; + + char path[20]; + sprintf(path, "/proc/%.8s/comm", dirent->d_name); + + ffGetFileContent(path, &processName); + + if(ffStrbufIgnCaseCompS(&processName, "kwin_wayland") == 0 || ffStrbufIgnCaseCompS(&processName, "kwin_x11") == 0) + ffStrbufSetS(&prettyName, "KWin"); + + if(prettyName.length > 0) + break; + } + + closedir(proc); + + if(prettyName.length == 0) + { + ffStrbufSetS(&error, "No process name matches the name of known display managers"); + return; + } +} diff --git a/src/modules/terminal.c b/src/modules/terminal.c index 4b6883a60..d102ba31a 100644 --- a/src/modules/terminal.c +++ b/src/modules/terminal.c @@ -1,83 +1,5 @@ #include "fastfetch.h" -static void getTerminalName(FFinstance* instance, const char* pid, FFstrbuf* exeName, FFstrbuf* processName, FFstrbuf* error) -{ - char statFile[234]; - sprintf(statFile, "/proc/%s/stat", pid); - - FILE* stat = fopen(statFile, "r"); - if(stat == NULL) - { - ffStrbufSetF(error, "fopen(\"%s\", \"r\") == NULL", statFile); - return; - } - - char name[256]; - char ppid[256]; - if(fscanf(stat, "%*s (%[^)])%*s%s", name, ppid) != 2) - { - ffStrbufSetS(error, "fscanf(stat, \"%*s (%[^)])%*s%s\", name, ppid) != 2"); - return; - } - - fclose(stat); - - if ( - strcasecmp(name, "bash") == 0 || - strcasecmp(name, "sh") == 0 || - strcasecmp(name, "zsh") == 0 || - strcasecmp(name, "ksh") == 0 || - strcasecmp(name, "fish") == 0 || - strcasecmp(name, "sudo") == 0 || - strcasecmp(name, "su") == 0 || - strcasecmp(name, "doas") == 0 || - strcasecmp(name, "strace") == 0 ) - { - getTerminalName(instance, ppid, exeName, processName, error); - return; - } - - char cmdlineFile[234]; - sprintf(cmdlineFile, "/proc/%s/cmdline", pid); - - ffGetFileContent(cmdlineFile, exeName); - ffStrbufSubstrBeforeFirstC(exeName, '\0'); - ffStrbufSubstrAfterLastC(exeName, '/'); - - ffStrbufSetS(processName, name); -} - -void ffCalculateTerminal(FFinstance* instance, FFstrbuf** exeNamePtr, FFstrbuf** processNamePtr, FFstrbuf** errorPtr) -{ - static FFstrbuf exeName; - static FFstrbuf processName; - static FFstrbuf error; - static bool init = false; - - if(exeNamePtr != NULL) - *exeNamePtr = &exeName; - - if(processNamePtr != NULL) - *processNamePtr = &processName; - - if(errorPtr != NULL) - *errorPtr = &error; - - if(init) - return; - init = true; - - ffStrbufInit(&exeName); - ffStrbufInit(&processName); - ffStrbufInit(&error); - - char ppid[256]; - sprintf(ppid, "%i", getppid()); - - getTerminalName(instance, ppid, &exeName, &processName, &error); - -} - void ffPrintTerminal(FFinstance* instance) { FFstrbuf* exeName; diff --git a/src/modules/wm.c b/src/modules/wm.c index ed724ea6e..1dea0aabd 100644 --- a/src/modules/wm.c +++ b/src/modules/wm.c @@ -1,66 +1,5 @@ #include "fastfetch.h" -#include - -void ffCalculateWM(FFinstance* instance, FFstrbuf** prettyNamePtr, FFstrbuf** processNamePtr, FFstrbuf** errorPtr) -{ - static FFstrbuf prettyName; - static FFstrbuf processName; - static FFstrbuf error; - static bool init = false; - - if(prettyNamePtr != NULL) - *prettyNamePtr = &prettyName; - - if(processNamePtr != NULL) - *processNamePtr = &processName; - - if(errorPtr != NULL) - *errorPtr = &error; - - if(init) - return; - init = true; - - ffStrbufInit(&prettyName); - ffStrbufInit(&processName); - ffStrbufInit(&error); - - DIR* proc = opendir("/proc/"); - if(proc == NULL) - { - ffStrbufSetS(&error, "opendir(\"/proc/\") == NULL"); - return; - } - - struct dirent* dirent; - - while((dirent = readdir(proc)) != NULL) - { - if(dirent->d_type != DT_DIR) - continue; - - char path[20]; - sprintf(path, "/proc/%.8s/comm", dirent->d_name); - - ffGetFileContent(path, &processName); - - if(ffStrbufIgnCaseCompS(&processName, "kwin_wayland") == 0 || ffStrbufIgnCaseCompS(&processName, "kwin_x11") == 0) - ffStrbufSetS(&prettyName, "KWin"); - - if(prettyName.length > 0) - break; - } - - closedir(proc); - - if(prettyName.length == 0) - { - ffStrbufSetS(&error, "No process name matches the name of known display managers"); - return; - } -} - void ffPrintWM(FFinstance* instance) { FFstrbuf* prettyName;