From a0e913a14ca8e92d8ef38117dedb82ee32401533 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 13 Aug 2026 09:46:58 +0800 Subject: [PATCH] Display: fixes bright colours incorrectly active in light theme Fixes #2509 --- src/common/impl/init.c | 12 ------------ src/fastfetch.h | 1 - src/options/display.c | 29 ++++++++++++++++++++++------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/common/impl/init.c b/src/common/impl/init.c index 95e6cfd76..c33ddb814 100644 --- a/src/common/impl/init.c +++ b/src/common/impl/init.c @@ -5,7 +5,6 @@ #include "common/textModifier.h" #include "common/strutil.h" #include "detection/displayserver/displayserver.h" -#include "detection/terminaltheme/terminaltheme.h" #include "logo/logo.h" #include @@ -27,21 +26,10 @@ static void initState(FFstate* state) { state->logoWidth = 0; state->logoHeight = 0; state->keysHeight = 0; - state->terminalLightTheme = false; state->titleFqdn = false; ffPlatformInit(&state->platform); state->dynamicInterval = 0; - - #if !FF_MODULE_DISABLE_TERMINALTHEME - { - // don't enable bright color if the terminal is in light mode - FFTerminalThemeResult result; - if (ffDetectTerminalTheme(&result, true /* forceEnv for performance */) && !result.bg.dark) { - state->terminalLightTheme = true; - } - } - #endif } static void defaultConfig(void) { diff --git a/src/fastfetch.h b/src/fastfetch.h index ac9fa6c26..a8d34869f 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -31,7 +31,6 @@ typedef struct FFstate { uint32_t logoWidth; uint32_t logoHeight; uint32_t keysHeight; - bool terminalLightTheme; bool titleFqdn; uint32_t dynamicInterval; FFPlatform platform; diff --git a/src/options/display.c b/src/options/display.c index fe9481909..90418de11 100644 --- a/src/options/display.c +++ b/src/options/display.c @@ -5,6 +5,10 @@ #include "common/strutil.h" #include "options/display.h" +#if !FF_MODULE_DISABLE_TERMINALTHEME + #include "detection/terminaltheme/terminaltheme.h" +#endif + #include const char* ffOptionsParseDisplayJsonConfig(FFOptionsDisplay* options, yyjson_val* root, yyjson_val** pkey) { @@ -825,11 +829,22 @@ bool ffOptionsParseDisplayCommandLine(FFOptionsDisplay* options, const char* key } void ffOptionsInitDisplay(FFOptionsDisplay* options) { + bool terminalLightTheme = false; + #if !FF_MODULE_DISABLE_TERMINALTHEME + { + // don't enable bright color if the terminal is in light mode + FFTerminalThemeResult result; + if (ffDetectTerminalTheme(&result, true /* forceEnv for performance */) && !result.bg.dark) { + terminalLightTheme = true; + } + } + #endif + ffStrbufInit(&options->colorKeys); ffStrbufInit(&options->colorTitle); ffStrbufInit(&options->colorOutput); ffStrbufInit(&options->colorSeparator); - options->brightColor = !instance.state.terminalLightTheme; + options->brightColor = !terminalLightTheme; ffStrbufInitStatic(&options->keyValueSeparator, ": "); options->showErrors = false; @@ -856,8 +871,8 @@ void ffOptionsInitDisplay(FFOptionsDisplay* options) { options->tempUnit = FF_TEMPERATURE_UNIT_DEFAULT; options->tempNdigits = 1; ffStrbufInitStatic(&options->tempColorGreen, FF_COLOR_FG_GREEN); - ffStrbufInitStatic(&options->tempColorYellow, instance.state.terminalLightTheme ? FF_COLOR_FG_YELLOW : FF_COLOR_FG_LIGHT_YELLOW); - ffStrbufInitStatic(&options->tempColorRed, instance.state.terminalLightTheme ? FF_COLOR_FG_RED : FF_COLOR_FG_LIGHT_RED); + ffStrbufInitStatic(&options->tempColorYellow, terminalLightTheme ? FF_COLOR_FG_YELLOW : FF_COLOR_FG_LIGHT_YELLOW); + ffStrbufInitStatic(&options->tempColorRed, terminalLightTheme ? FF_COLOR_FG_RED : FF_COLOR_FG_LIGHT_RED); options->tempSpaceBeforeUnit = FF_SPACE_BEFORE_UNIT_DEFAULT; ffStrbufInitStatic(&options->barCharElapsed, "■"); @@ -867,8 +882,8 @@ void ffOptionsInitDisplay(FFOptionsDisplay* options) { ffStrbufInit(&options->barBorderLeftElapsed); ffStrbufInit(&options->barBorderRightElapsed); ffStrbufInitStatic(&options->barColorElapsed, "auto"); - ffStrbufInitStatic(&options->barColorTotal, instance.state.terminalLightTheme ? FF_COLOR_FG_WHITE : FF_COLOR_FG_LIGHT_WHITE); - ffStrbufInitStatic(&options->barColorBorder, instance.state.terminalLightTheme ? FF_COLOR_FG_WHITE : FF_COLOR_FG_LIGHT_WHITE); + ffStrbufInitStatic(&options->barColorTotal, terminalLightTheme ? FF_COLOR_FG_WHITE : FF_COLOR_FG_LIGHT_WHITE); + ffStrbufInitStatic(&options->barColorBorder, terminalLightTheme ? FF_COLOR_FG_WHITE : FF_COLOR_FG_LIGHT_WHITE); options->barWidth = 10; options->durationAbbreviation = false; @@ -876,8 +891,8 @@ void ffOptionsInitDisplay(FFOptionsDisplay* options) { options->percentType = FF_PERCENTAGE_TYPE_NUM_BIT | FF_PERCENTAGE_TYPE_NUM_COLOR_BIT; options->percentNdigits = 0; ffStrbufInitStatic(&options->percentColorGreen, FF_COLOR_FG_GREEN); - ffStrbufInitStatic(&options->percentColorYellow, instance.state.terminalLightTheme ? FF_COLOR_FG_YELLOW : FF_COLOR_FG_LIGHT_YELLOW); - ffStrbufInitStatic(&options->percentColorRed, instance.state.terminalLightTheme ? FF_COLOR_FG_RED : FF_COLOR_FG_LIGHT_RED); + ffStrbufInitStatic(&options->percentColorYellow, terminalLightTheme ? FF_COLOR_FG_YELLOW : FF_COLOR_FG_LIGHT_YELLOW); + ffStrbufInitStatic(&options->percentColorRed, terminalLightTheme ? FF_COLOR_FG_RED : FF_COLOR_FG_LIGHT_RED); options->percentSpaceBeforeUnit = FF_SPACE_BEFORE_UNIT_DEFAULT; options->percentWidth = 0;