From 28805365135f59120fc969ceba034f9fd60935fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 8 May 2024 15:01:57 +0800 Subject: [PATCH] Fastfetch: support `--module-ouput-color` (WIP) --- doc/json_schema.json | 83 +++++++++++++++++++++++++++++++++++++++++ src/common/jsonconfig.c | 5 +++ src/common/option.c | 12 ++++++ src/common/printing.c | 7 +++- src/options/display.c | 10 +++++ src/options/display.h | 1 + 6 files changed, 117 insertions(+), 1 deletion(-) diff --git a/doc/json_schema.json b/doc/json_schema.json index 65d80d8aa..8017c24f2 100644 --- a/doc/json_schema.json +++ b/doc/json_schema.json @@ -27,6 +27,10 @@ "description": "Output format of the module", "type": "string" }, + "outputColor": { + "description": "Output color of the module", + "$ref": "#/$defs/colors" + }, "percent": { "description": "Threshold of percentage colors", "type": "object", @@ -380,6 +384,10 @@ "title": { "description": "Set the color of the title", "$ref": "#/$defs/colors" + }, + "output": { + "description": "Set the color of the module output", + "$ref": "#/$defs/colors" } } } @@ -893,6 +901,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -927,6 +938,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -958,6 +972,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1002,6 +1019,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1035,6 +1055,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1142,6 +1165,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1166,6 +1192,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1215,6 +1244,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1275,6 +1307,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1307,6 +1342,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1335,6 +1373,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1361,6 +1402,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1406,6 +1450,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1468,6 +1515,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1494,6 +1544,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1531,6 +1584,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1564,6 +1620,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1618,6 +1677,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1648,6 +1710,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1683,6 +1748,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1735,6 +1803,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1761,6 +1832,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1808,6 +1882,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1846,6 +1923,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, @@ -1874,6 +1954,9 @@ "keyColor": { "$ref": "#/$defs/keyColor" }, + "outputColor": { + "$ref": "#/$defs/outputColor" + }, "keyWidth": { "$ref": "#/$defs/keyWidth" }, diff --git a/src/common/jsonconfig.c b/src/common/jsonconfig.c index de34b2b10..735b93032 100644 --- a/src/common/jsonconfig.c +++ b/src/common/jsonconfig.c @@ -22,6 +22,11 @@ bool ffJsonConfigParseModuleArgs(const char* key, yyjson_val* val, FFModuleArgs* ffStrbufSetNS(&moduleArgs->outputFormat, (uint32_t) yyjson_get_len(val), yyjson_get_str(val)); return true; } + else if(ffStrEqualsIgnCase(key, "outputColor")) + { + ffOptionParseColor(yyjson_get_str(val), &moduleArgs->outputColor); + return true; + } else if(ffStrEqualsIgnCase(key, "keyColor")) { ffOptionParseColor(yyjson_get_str(val), &moduleArgs->keyColor); diff --git a/src/common/option.c b/src/common/option.c index 81efd69d1..9ebc2f33e 100644 --- a/src/common/option.c +++ b/src/common/option.c @@ -39,6 +39,16 @@ bool ffOptionParseModuleArgs(const char* argumentKey, const char* subKey, const ffOptionParseString(argumentKey, value, &result->outputFormat); return true; } + else if(ffStrEqualsIgnCase(subKey, "output-color")) + { + if(value == NULL) + { + fprintf(stderr, "Error: usage: %s \n", argumentKey); + exit(477); + } + ffOptionParseColor(value, &result->outputColor); + return true; + } else if(ffStrEqualsIgnCase(subKey, "key-color")) { if(value == NULL) @@ -180,6 +190,7 @@ void ffOptionInitModuleArg(FFModuleArgs* args) ffStrbufInit(&args->key); ffStrbufInit(&args->keyColor); ffStrbufInit(&args->outputFormat); + ffStrbufInit(&args->outputColor); args->keyWidth = 0; } @@ -188,4 +199,5 @@ void ffOptionDestroyModuleArg(FFModuleArgs* args) ffStrbufDestroy(&args->key); ffStrbufDestroy(&args->keyColor); ffStrbufDestroy(&args->outputFormat); + ffStrbufDestroy(&args->outputColor); } diff --git a/src/common/printing.c b/src/common/printing.c index 2eaf41a16..846d49122 100644 --- a/src/common/printing.c +++ b/src/common/printing.c @@ -49,8 +49,13 @@ void ffPrintLogoAndKey(const char* moduleName, uint8_t moduleIndex, const FFModu ffStrbufWriteTo(&instance.config.display.keyValueSeparator, stdout); if(!instance.config.display.pipe) + { fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); - + if (moduleArgs->outputColor.length) + ffPrintColor(&moduleArgs->outputColor); + else if (instance.config.display.colorOutput.length) + ffPrintColor(&instance.config.display.colorOutput); + } if (!instance.config.display.pipe && !(printType & FF_PRINT_TYPE_NO_CUSTOM_KEY_WIDTH)) { diff --git a/src/options/display.c b/src/options/display.c index 2ef919fc0..292ced618 100644 --- a/src/options/display.c +++ b/src/options/display.c @@ -48,6 +48,9 @@ const char* ffOptionsParseDisplayJsonConfig(FFOptionsDisplay* options, yyjson_va const char* colorTitle = yyjson_get_str(yyjson_obj_get(val, "title")); if (colorTitle) ffOptionParseColor(colorTitle, &options->colorTitle); + const char* colorOutput = yyjson_get_str(yyjson_obj_get(val, "output")); + if (colorOutput) + ffOptionParseColor(colorOutput, &options->colorOutput); } else return "display.color must be either a string or an object"; @@ -244,6 +247,11 @@ bool ffOptionsParseDisplayCommandLine(FFOptionsDisplay* options, const char* key optionCheckString(key, value, &options->colorTitle); ffOptionParseColor(value, &options->colorTitle); } + else if(ffStrEqualsIgnCase(subkey, "output")) + { + optionCheckString(key, value, &options->colorOutput); + ffOptionParseColor(value, &options->colorOutput); + } else return false; } @@ -346,6 +354,7 @@ void ffOptionsInitDisplay(FFOptionsDisplay* options) { ffStrbufInit(&options->colorKeys); ffStrbufInit(&options->colorTitle); + ffStrbufInit(&options->colorOutput); options->brightColor = true; ffStrbufInitStatic(&options->keyValueSeparator, ": "); @@ -389,6 +398,7 @@ void ffOptionsDestroyDisplay(FFOptionsDisplay* options) { ffStrbufDestroy(&options->colorKeys); ffStrbufDestroy(&options->colorTitle); + ffStrbufDestroy(&options->colorOutput); ffStrbufDestroy(&options->keyValueSeparator); ffStrbufDestroy(&options->barCharElapsed); ffStrbufDestroy(&options->barCharTotal); diff --git a/src/options/display.h b/src/options/display.h index eb3a7c68c..b29df43eb 100644 --- a/src/options/display.h +++ b/src/options/display.h @@ -21,6 +21,7 @@ typedef struct FFOptionsDisplay //If one of those is empty, ffLogoPrint will set them FFstrbuf colorKeys; FFstrbuf colorTitle; + FFstrbuf colorOutput; bool brightColor;