From 1e3cabff2dbe97e39937ce5515008acb262f807c Mon Sep 17 00:00:00 2001 From: Linus Dierheimer Date: Mon, 6 Jun 2022 14:02:21 +0200 Subject: [PATCH] --pipe option --- src/common/caching.c | 3 --- src/common/init.c | 41 +++++++++++++++++++++++------------------ src/data/help.txt | 1 + src/fastfetch.c | 11 +++++++++++ src/fastfetch.h | 1 + src/logo/logo.c | 41 ++++++++++++++++++++++++----------------- src/modules/colors.c | 9 +++++++++ src/modules/title.c | 12 +++++++++--- 8 files changed, 78 insertions(+), 41 deletions(-) diff --git a/src/common/caching.c b/src/common/caching.c index 5e09c4be5..e5e95ba8d 100644 --- a/src/common/caching.c +++ b/src/common/caching.c @@ -35,9 +35,6 @@ static void writeCacheFile(FFinstance* instance, const char* moduleName, const c void ffCacheValidate(FFinstance* instance) { - if(instance->config.recache) - return; - FFstrbuf content; ffStrbufInit(&content); readCacheFile(instance, "cacheversion", "ffv", &content); diff --git a/src/common/init.c b/src/common/init.c index 17faaf42c..006c2ffa8 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -126,6 +126,7 @@ static void defaultConfig(FFinstance* instance) instance->config.hideCursor = true; instance->config.escapeBedrock = true; instance->config.glType = FF_GL_TYPE_AUTO; + instance->config.pipe = false; ffStrbufInitA(&instance->config.osFormat, 0); ffStrbufInitA(&instance->config.osKey, 0); @@ -240,29 +241,29 @@ void ffInitInstance(FFinstance* instance) defaultConfig(instance); } -static void resetConsole(bool disableLinewrap, bool hideCursor) -{ - if(disableLinewrap) - fputs("\033[?7h", stdout); - - if(hideCursor) - fputs("\033[?25h", stdout); -} - static volatile bool ffDisableLinewrap = true; static volatile bool ffHideCursor = true; +static void resetConsole() +{ + if(ffDisableLinewrap) + fputs("\033[?7h", stdout); + + if(ffHideCursor) + fputs("\033[?25h", stdout); +} + static void exitSignalHandler(int signal) { FF_UNUSED(signal); - resetConsole(ffDisableLinewrap, ffHideCursor); + resetConsole(); exit(0); } void ffStart(FFinstance* instance) { - ffDisableLinewrap = instance->config.disableLinewrap; - ffHideCursor = instance->config.hideCursor; + ffDisableLinewrap = instance->config.disableLinewrap && !instance->config.pipe; + ffHideCursor = instance->config.hideCursor && !instance->config.pipe; struct sigaction action = {}; action.sa_handler = exitSignalHandler; @@ -272,15 +273,17 @@ void ffStart(FFinstance* instance) sigaction(SIGQUIT, &action, NULL); //We do the cache validation here, so we can skip it if --recache is given - ffCacheValidate(instance); + if(!instance->config.recache) + ffCacheValidate(instance); //reset everything to default before we start printing - fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); + if(!instance->config.pipe) + fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); - if(instance->config.hideCursor) + if(ffHideCursor) fputs("\033[?25l", stdout); - if(instance->config.disableLinewrap) + if(ffDisableLinewrap) fputs("\033[?7l", stdout); ffPrintLogo(instance); @@ -288,8 +291,10 @@ void ffStart(FFinstance* instance) void ffFinish(FFinstance* instance) { - ffPrintRemainingLogo(instance); - resetConsole(instance->config.disableLinewrap, instance->config.hideCursor); + if(instance->config.logoPrintRemaining) + ffPrintRemainingLogo(instance); + + resetConsole(); } //Must be in a file compiled with the libfastfetch target, because the FF_HAVE* macros are not defined for the executable targets diff --git a/src/data/help.txt b/src/data/help.txt index 9dfe911a3..979859824 100644 --- a/src/data/help.txt +++ b/src/data/help.txt @@ -19,6 +19,7 @@ General options: --multithreading : use multiple threads to detect values --allow-slow-operations : allow operations that are usually very slow for more detailed output --escape-bedrock : on bedrock linux, sets if it should escape the bedrock jail or not + --pipe : disable logo and all escape sequences Logo options: -l,--logo : set the logo to use. The type is specified by --logo-type. If default: the name of a builtin logo or a path to a file diff --git a/src/fastfetch.c b/src/fastfetch.c index 39c3645f2..8b811cbc2 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -737,13 +737,24 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con instance->config.allowSlowOperations = optionParseBoolean(value); else if(strcasecmp(key, "--escape-bedrock") == 0) instance->config.escapeBedrock = optionParseBoolean(value); + else if(strcasecmp(key, "--pipe") == 0) + instance->config.pipe = optionParseBoolean(value); //////////////// //Logo options// //////////////// else if(strcasecmp(key, "-l") == 0 || strcasecmp(key, "--logo") == 0) + { optionParseString(key, value, &instance->config.logoSource); + + //this is usally wanted when using the none logo + if(strcasecmp(value, "none") == 0) + { + instance->config.logoPaddingRight = 0; + instance->config.logoPaddingLeft = 0; + } + } else if(strcasecmp(key, "--logo-type") == 0) { if(value == NULL) diff --git a/src/fastfetch.h b/src/fastfetch.h index 711c57f68..4e75023fe 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -72,6 +72,7 @@ typedef struct FFconfig bool hideCursor; bool escapeBedrock; FFGLType glType; + bool pipe; //disables logo and all escape sequences FFstrbuf osFormat; FFstrbuf osKey; diff --git a/src/logo/logo.c b/src/logo/logo.c index 366b8ce42..be555c914 100644 --- a/src/logo/logo.c +++ b/src/logo/logo.c @@ -199,6 +199,13 @@ static void logoPrintDetected(FFinstance* instance) void ffPrintLogo(FFinstance* instance) { + if(instance->config.pipe) + { + instance->state.logoHeight = 0; + instance->state.logoWidth = 0; + return; + } + if(instance->config.mainColor.length == 0) ffLogoSetMainColor(instance); @@ -225,37 +232,33 @@ void ffPrintLogo(FFinstance* instance) logoPrintDetected(instance); } -static inline void printLogoWidth(const FFinstance* instance) + +void ffPrintLogoLine(FFinstance* instance) { if(instance->state.logoWidth > 0) printf("\033[%uC", instance->state.logoWidth); + + ++instance->state.keysHeight; } void ffPrintRemainingLogo(FFinstance* instance) { - if(!instance->config.logoPrintRemaining) - return; - - for(uint32_t i = instance->state.keysHeight; i <= instance->state.logoHeight; i++) + while(instance->state.keysHeight < instance->state.logoHeight) { - printLogoWidth(instance); + ffPrintLogoLine(instance); putchar('\n'); } } -void ffPrintLogoLine(FFinstance* instance) -{ - printLogoWidth(instance); - ++instance->state.keysHeight; - fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); -} - void ffPrintLogoAndKey(FFinstance* instance, const char* moduleName, uint8_t moduleIndex, const FFstrbuf* customKeyFormat) { ffPrintLogoLine(instance); - fputs(FASTFETCH_TEXT_MODIFIER_BOLT, stdout); - ffPrintColor(&instance->config.mainColor); + if(!instance->config.pipe) + { + fputs(FASTFETCH_TEXT_MODIFIER_RESET FASTFETCH_TEXT_MODIFIER_BOLT, stdout); + ffPrintColor(&instance->config.mainColor); + } if(customKeyFormat == NULL || customKeyFormat->length == 0) { @@ -275,7 +278,11 @@ void ffPrintLogoAndKey(FFinstance* instance, const char* moduleName, uint8_t mod ffStrbufDestroy(&key); } - fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); + if(!instance->config.pipe) + fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); + ffStrbufWriteTo(&instance->config.separator, stdout); - fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); + + if(!instance->config.pipe) + fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); } diff --git a/src/modules/colors.c b/src/modules/colors.c index c6b2f22f6..c85df3371 100644 --- a/src/modules/colors.c +++ b/src/modules/colors.c @@ -2,6 +2,15 @@ void ffPrintColors(FFinstance* instance) { + if(instance->config.pipe) + { + ffPrintLogoLine(instance); + puts("████████████████████████"); + ffPrintLogoLine(instance); + puts("████████████████████████"); + return; + } + ffPrintLogoLine(instance); // 4%d: Set the background color diff --git a/src/modules/title.c b/src/modules/title.c index 84c71f298..0447c30ed 100644 --- a/src/modules/title.c +++ b/src/modules/title.c @@ -30,10 +30,16 @@ const FFTitleResult* ffDetectTitle(FFinstance* instance) static inline void printTitlePart(FFinstance* instance, const FFstrbuf* content) { - fputs(FASTFETCH_TEXT_MODIFIER_BOLT, stdout); - ffPrintColor(&instance->config.mainColor); + if(!instance->config.pipe) + { + fputs(FASTFETCH_TEXT_MODIFIER_BOLT, stdout); + ffPrintColor(&instance->config.mainColor); + } + ffStrbufWriteTo(content, stdout); - fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); + + if(!instance->config.pipe) + fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); } void ffPrintTitle(FFinstance* instance)