diff --git a/src/common/color.h b/src/common/color.h index 7f8c539cc..340d4ee57 100644 --- a/src/common/color.h +++ b/src/common/color.h @@ -10,6 +10,16 @@ #define FF_COLOR_MODE_HIDDEN "8;" #define FF_COLOR_MODE_STRIKETHROUGH "9;" +#define FF_COLOR_MODE_RESET_ "0" +#define FF_COLOR_MODE_BOLD_ "1" +#define FF_COLOR_MODE_DIM_ "2" +#define FF_COLOR_MODE_ITALIC_ "3" +#define FF_COLOR_MODE_UNDERLINE_ "4" +#define FF_COLOR_MODE_BLINK_ "5" +#define FF_COLOR_MODE_INVERSE_ "7" +#define FF_COLOR_MODE_HIDDEN_ "8" +#define FF_COLOR_MODE_STRIKETHROUGH_ "9" + #define FF_COLOR_FG_BLACK "30" #define FF_COLOR_FG_RED "31" #define FF_COLOR_FG_GREEN "32" diff --git a/src/common/impl/genconfig.c b/src/common/impl/genconfig.c index 7e9a276dc..616966dd8 100644 --- a/src/common/impl/genconfig.c +++ b/src/common/impl/genconfig.c @@ -506,39 +506,41 @@ static void drawModuleItem(FFRow* row, const FFGenConfigItem* item, uint32_t cel const uint32_t nameMax = cellWidth > 4 ? cellWidth - 4 : 0; if (item->baseInfo == &ffBreakModuleInfo) { - rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_BOLD FF_COLOR_MODE_INVERSE FF_COLOR_FG_LIGHT_MAGENTA "m" : "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_MAGENTA "m"); + rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_INVERSE FF_COLOR_FG_MAGENTA "m" : "\e[" FF_COLOR_FG_MAGENTA "m"); ffStrbufAppendS(&row->buf, "[-]"); row->visualCol += 3; rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); rowAppendVisual(row, " "); - rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_BOLD FF_COLOR_MODE_INVERSE FF_COLOR_FG_LIGHT_MAGENTA "m" : "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_MAGENTA "m"); + rowAppendRaw(row, "\e[" FF_COLOR_FG_MAGENTA "m"); rowAppendVisualTruncated(row, item->baseInfo->name, nameMax); rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); return; } if (item->baseInfo == &ffSeparatorModuleInfo) { - rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_BOLD FF_COLOR_MODE_INVERSE FF_COLOR_FG_LIGHT_CYAN "m" : "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_CYAN "m"); + rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_INVERSE FF_COLOR_FG_CYAN "m" : "\e[" FF_COLOR_FG_CYAN "m"); ffStrbufAppendS(&row->buf, "[-]"); row->visualCol += 3; rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); rowAppendVisual(row, " "); - rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_BOLD FF_COLOR_MODE_INVERSE FF_COLOR_FG_LIGHT_CYAN "m" : "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_CYAN "m"); + rowAppendRaw(row, "\e[" FF_COLOR_FG_CYAN "m"); rowAppendVisualTruncated(row, item->baseInfo->name, nameMax); rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); return; } if (item->status == FF_GEN_CONFIG_ITEM_STATUS_SELECTED) { - rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_BOLD FF_COLOR_MODE_INVERSE FF_COLOR_FG_LIGHT_GREEN "m" : "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_GREEN "m"); + rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_INVERSE FF_COLOR_FG_GREEN "m" : "\e[" FF_COLOR_FG_GREEN "m"); ffStrbufAppendS(&row->buf, "[x]"); row->visualCol += 3; rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); rowAppendVisual(row, " "); - rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_BOLD FF_COLOR_MODE_INVERSE FF_COLOR_FG_LIGHT_WHITE "m" : "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_WHITE "m"); + rowAppendRaw(row, "\e[" FF_COLOR_FG_GREEN "m"); rowAppendVisualTruncated(row, item->baseInfo->name, nameMax); rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); } else { - rowAppendRaw(row, highlight ? "\e[" FF_COLOR_MODE_INVERSE FF_COLOR_FG_LIGHT_BLACK "m" : "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); + if (highlight) { + rowAppendRaw(row, "\e[" FF_COLOR_MODE_INVERSE_ "m"); + } ffStrbufAppendS(&row->buf, "[ ]"); row->visualCol += 3; rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); @@ -556,17 +558,15 @@ static void drawItemCell(FFRow* row, uint32_t startCol, uint32_t cellWidth, cons static void drawLogoOption(FFRow* row, const char* name, bool active) { if (active) { - rowAppendRaw(row, "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_GREEN "m"); + rowAppendRaw(row, "\e[" FF_COLOR_FG_GREEN "m"); rowAppendVisual(row, "● "); rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); - rowAppendRaw(row, "\e[" FF_COLOR_MODE_BOLD "m"); + rowAppendRaw(row, "\e[" FF_COLOR_FG_GREEN "m"); rowAppendVisual(row, name); rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); } else { - rowAppendRaw(row, "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); rowAppendVisual(row, "○ "); rowAppendVisual(row, name); - rowAppendRaw(row, FASTFETCH_TEXT_MODIFIER_RESET); } } @@ -588,16 +588,13 @@ static void renderFrame(FFGenConfigUI* ui, FFstrbuf* out) { // Row 0: title rowInit(&row, cols); rowAppendVisual(&row, " "); - rowAppendRaw(&row, "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_CYAN "m"); + rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_BOLT); rowAppendVisual(&row, "fastfetch"); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); - rowAppendRaw(&row, "\e[" FF_COLOR_MODE_BOLD "m"); rowAppendVisual(&row, " configuration"); - rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); if (cols >= 48) { - rowAppendVisual(&row, " "); - rowAppendRaw(&row, "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); - rowAppendVisual(&row, "interactive config generator"); + rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_SOFT); + rowAppendVisual(&row, " interactive config generator"); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); } finishRow(&row, out, ++rowCount == ui->rows); @@ -609,8 +606,11 @@ static void renderFrame(FFGenConfigUI* ui, FFstrbuf* out) { // Row 2: logo type rowInit(&row, cols); rowAppendVisual(&row, " "); - rowAppendRaw(&row, "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_WHITE "m"); - rowAppendVisual(&row, "Logo type:"); + rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_BOLT); + rowAppendRaw(&row, "\e[" FF_COLOR_MODE_UNDERLINE_ "m"); + rowAppendVisual(&row, "L"); + rowAppendRaw(&row, "\e[24m"); // Reset underline + rowAppendVisual(&row, "ogo type:"); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); rowAppendVisual(&row, " "); drawLogoOption(&row, "default", ui->logoType == FF_LOGO_TYPE_AUTO); @@ -619,9 +619,18 @@ static void renderFrame(FFGenConfigUI* ui, FFstrbuf* out) { rowAppendVisual(&row, " "); drawLogoOption(&row, "none", ui->logoType == FF_LOGO_TYPE_NONE); if (cols >= 72) { - rowAppendVisual(&row, " "); - rowAppendRaw(&row, "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); - rowAppendVisual(&row, "(l)"); + rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_SOFT); + switch (ui->logoType) { + case FF_LOGO_TYPE_AUTO: + rowAppendVisual(&row, " - Built-in ASCII art"); + break; + case FF_LOGO_TYPE_SMALL: + rowAppendVisual(&row, " - Built-in ASCII art, small version"); + break; + default: + rowAppendVisual(&row, " - Disable logo printing"); + break; + } rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); } finishRow(&row, out, ++rowCount == ui->rows); @@ -629,17 +638,23 @@ static void renderFrame(FFGenConfigUI* ui, FFstrbuf* out) { // Row 3: output mode rowInit(&row, cols); rowAppendVisual(&row, " "); - rowAppendRaw(&row, "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_WHITE "m"); - rowAppendVisual(&row, "Output:"); + rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_BOLT); + rowAppendRaw(&row, "\e[" FF_COLOR_MODE_UNDERLINE_ "m"); + rowAppendVisual(&row, "O"); + rowAppendRaw(&row, "\e[24m"); // Reset underline + rowAppendVisual(&row, "utput:"); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); rowAppendVisual(&row, " "); drawLogoOption(&row, "minimal", !ui->fullConfig); rowAppendVisual(&row, " "); drawLogoOption(&row, "full", ui->fullConfig); if (cols >= 64) { - rowAppendVisual(&row, " "); - rowAppendRaw(&row, "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); - rowAppendVisual(&row, "(o)"); + rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_SOFT); + if (ui->fullConfig) { + rowAppendVisual(&row, " - Full JSON config with all module options"); + } else { + rowAppendVisual(&row, " - Minimal JSON config"); + } rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); } finishRow(&row, out, ++rowCount == ui->rows); @@ -651,12 +666,11 @@ static void renderFrame(FFGenConfigUI* ui, FFstrbuf* out) { // Row 5: modules title rowInit(&row, cols); rowAppendVisual(&row, " "); - rowAppendRaw(&row, "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_WHITE "m"); + rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_BOLT); rowAppendVisual(&row, "Modules:"); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); - rowAppendRaw(&row, "\e[" FF_COLOR_FG_LIGHT_GREEN "m"); - FF_STRBUF_AUTO_DESTROY counter = ffStrbufCreateA(32); - ffStrbufAppendF(&counter, " [%u/%u selected]", selectedCount, moduleCount); + rowAppendRaw(&row, "\e[" FF_COLOR_FG_GREEN "m"); + FF_STRBUF_AUTO_DESTROY counter = ffStrbufCreateF(" [%u/%u selected]", selectedCount, moduleCount); rowAppendVisual(&row, counter.chars); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); finishRow(&row, out, ++rowCount == ui->rows); @@ -689,7 +703,7 @@ static void renderFrame(FFGenConfigUI* ui, FFstrbuf* out) { const FFGenConfigItem* item = FF_LIST_GET(FFGenConfigItem, ui->items, ui->cursor); if (item->baseInfo && item->baseInfo->description) { rowAppendVisual(&row, " "); - rowAppendRaw(&row, "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); + rowAppendRaw(&row, "\e[" FF_COLOR_MODE_DIM_ "m"); rowAppendVisualTruncated(&row, item->baseInfo->description, cols > 4 ? cols - 4 : 1); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); } @@ -698,7 +712,7 @@ static void renderFrame(FFGenConfigUI* ui, FFstrbuf* out) { // Help lines rowInit(&row, cols); - rowAppendRaw(&row, "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); + rowAppendRaw(&row, "\e[" FF_COLOR_MODE_DIM_ "m"); rowAppendVisual(&row, " " #if _WIN32 || __APPLE__ || __linux__ || (__FreeBSD__ && !__DragonFly__) "↑/↓ k/j move ←/→ col" @@ -708,14 +722,14 @@ static void renderFrame(FFGenConfigUI* ui, FFstrbuf* out) { " Space toggle f/F all/invert K/J reorder b/B break/sep d/D del"); if (ui->confirmingOverwrite) { rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); - rowAppendRaw(&row, "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_LIGHT_YELLOW "m"); + rowAppendRaw(&row, "\e[" FF_COLOR_MODE_BOLD FF_COLOR_FG_YELLOW "m"); rowAppendVisual(&row, " File exists. Overwrite? (y/N)"); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); } finishRow(&row, out, ++rowCount == ui->rows); rowInit(&row, cols); - rowAppendRaw(&row, "\e[" FF_COLOR_FG_LIGHT_BLACK "m"); + rowAppendRaw(&row, "\e[" FF_COLOR_MODE_DIM_ "m"); rowAppendVisual(&row, " l/L logo o minimal/full s/Enter save q/Esc quit g/G top/bottom"); rowAppendRaw(&row, FASTFETCH_TEXT_MODIFIER_RESET); finishRow(&row, out, ++rowCount == ui->rows); diff --git a/src/common/textModifier.h b/src/common/textModifier.h index 1ac8e9ddb..cebc9b77d 100644 --- a/src/common/textModifier.h +++ b/src/common/textModifier.h @@ -1,5 +1,6 @@ #pragma once #define FASTFETCH_TEXT_MODIFIER_BOLT "\e[1m" +#define FASTFETCH_TEXT_MODIFIER_SOFT "\e[2m" #define FASTFETCH_TEXT_MODIFIER_ERROR "\e[1;31m" #define FASTFETCH_TEXT_MODIFIER_RESET "\e[m"