--pipe option

This commit is contained in:
Linus Dierheimer
2022-06-06 14:02:21 +02:00
parent 008cf3b83d
commit 1e3cabff2d
8 changed files with 78 additions and 41 deletions
-3
View File
@@ -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);
+23 -18
View File
@@ -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
+1
View File
@@ -19,6 +19,7 @@ General options:
--multithreading <?value>: use multiple threads to detect values
--allow-slow-operations <?value>: allow operations that are usually very slow for more detailed output
--escape-bedrock <?value>: on bedrock linux, sets if it should escape the bedrock jail or not
--pipe <?value>: disable logo and all escape sequences
Logo options:
-l,--logo <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
+11
View File
@@ -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)
+1
View File
@@ -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;
+24 -17
View File
@@ -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);
}
+9
View File
@@ -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
+9 -3
View File
@@ -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)