Global: add --bar-char-elapsed, --bar-char-total and --bar-border options

This commit is contained in:
李通洲
2023-08-16 14:41:56 +08:00
parent 8ed28673a9
commit 559bca4223
9 changed files with 101 additions and 28 deletions
+30 -20
View File
@@ -1,5 +1,6 @@
#include "common/bar.h"
#include "common/color.h"
#include "util/textModifier.h"
#include "bar.h"
// green, yellow, red: print the color on nth (0~9) block
// set its value == 10 means the color will not be printed
@@ -15,37 +16,46 @@ void ffAppendPercentBar(FFstrbuf* buffer, uint8_t percent, uint8_t green, uint8_
percent = (uint8_t)(percent + 5) / 10;
assert(percent <= 10);
if(!instance.config.pipe)
ffStrbufAppendS(buffer, "\033[97m[ ");
else
ffStrbufAppendS(buffer, "[ ");
if(instance.config.barBorder)
{
if(!instance.config.pipe)
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_WHITE "m[ ");
else
ffStrbufAppendS(buffer, "[ ");
}
for (uint8_t i = 0; i < percent; ++i)
{
if(!instance.config.pipe)
{
if (i == green)
ffStrbufAppendS(buffer, "\033[32m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_GREEN "m");
else if (i == yellow)
ffStrbufAppendS(buffer, "\033[93m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_YELLOW "m");
else if (i == red)
ffStrbufAppendS(buffer, "\033[91m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_RED "m");
}
ffStrbufAppendS(buffer, "■");
ffStrbufAppend(buffer, &instance.config.barCharElapsed);
}
if (percent < 10)
{
if(!instance.config.pipe)
ffStrbufAppendS(buffer, "\033[97m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_WHITE "m");
for (uint8_t i = percent; i < 10; ++i)
ffStrbufAppendS(buffer, "-");
ffStrbufAppend(buffer, &instance.config.barCharTotal);
}
if(instance.config.barBorder)
{
if(!instance.config.pipe)
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_WHITE "m ]");
else
ffStrbufAppendS(buffer, " ]");
}
if(!instance.config.pipe)
ffStrbufAppendS(buffer, "\033[97m ]" FASTFETCH_TEXT_MODIFIER_RESET);
else
ffStrbufAppendS(buffer, " ]");
ffStrbufAppendS(buffer, FASTFETCH_TEXT_MODIFIER_RESET);
}
// if (green < yellow)
@@ -71,20 +81,20 @@ void ffAppendPercentNum(FFstrbuf* buffer, uint8_t percent, uint8_t green, uint8_
if(green < yellow)
{
if (percent <= green)
ffStrbufAppendS(buffer, "\033[32m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_GREEN "m");
else if (percent <= yellow)
ffStrbufAppendS(buffer, "\033[93m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_YELLOW "m");
else
ffStrbufAppendS(buffer, "\033[91m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_RED "m");
}
else
{
if (percent >= green)
ffStrbufAppendS(buffer, "\033[32m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_GREEN "m");
else if (percent >= yellow)
ffStrbufAppendS(buffer, "\033[93m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_YELLOW "m");
else
ffStrbufAppendS(buffer, "\033[91m");
ffStrbufAppendS(buffer, "\e[" FF_COLOR_FG_LIGHT_RED "m");
}
}
ffStrbufAppendF(buffer, "%u%%", (unsigned) percent);
+7 -2
View File
@@ -70,6 +70,11 @@ static void defaultConfig(void)
instance.config.noBuffer = false;
instance.config.keyWidth = 0;
ffStrbufInitStatic(&instance.config.barCharElapsed, "■");
ffStrbufInitStatic(&instance.config.barCharTotal, "-");
instance.config.barBorder = true;
instance.config.percentType = 1;
ffInitTitleOptions(&instance.config.title);
ffInitOSOptions(&instance.config.os);
ffInitHostOptions(&instance.config.host);
@@ -146,8 +151,6 @@ static void defaultConfig(void)
ffStrbufInit(&instance.config.libPulse);
ffStrbufInit(&instance.config.libnm);
ffStrbufInit(&instance.config.libDdcutil);
instance.config.percentType = 1;
}
void ffInitInstance(void)
@@ -273,6 +276,8 @@ static void destroyConfig(void)
ffStrbufDestroy(&instance.config.colorKeys);
ffStrbufDestroy(&instance.config.colorTitle);
ffStrbufDestroy(&instance.config.keyValueSeparator);
ffStrbufDestroy(&instance.config.barCharElapsed);
ffStrbufDestroy(&instance.config.barCharTotal);
#if defined(__linux__) || defined(__FreeBSD__)
ffStrbufDestroy(&instance.config.playerName);
+17
View File
@@ -436,6 +436,23 @@ const char* ffParseDisplayJsonConfig(void)
}
else if (ffStrEqualsIgnCase(key, "percentType"))
config->percentType = (uint32_t) yyjson_get_uint(val);
else if (ffStrEqualsIgnCase(key, "bar"))
{
if (yyjson_is_obj(val))
{
const char* charElapsed = yyjson_get_str(yyjson_obj_get(val, "charElapsed"));
if (charElapsed)
ffStrbufSetS(&config->barCharElapsed, charElapsed);
const char* charTotal = yyjson_get_str(yyjson_obj_get(val, "charTotal"));
if (charTotal)
ffStrbufSetS(&config->barCharTotal, charTotal);
yyjson_val* border = yyjson_obj_get(val, "border");
if (border)
config->barBorder = yyjson_get_bool(border);
}
else
return "display.bar must be an object";
}
else if (ffStrEqualsIgnCase(key, "noBuffer"))
config->noBuffer = yyjson_get_bool(val);
else if (ffStrEqualsIgnCase(key, "keyWidth"))