From bfe74b8437a03fe8bdd631c4549f7ef6e71ae400 Mon Sep 17 00:00:00 2001 From: berce <75228263+bercedev@users.noreply.github.com> Date: Fri, 23 Oct 2026 10:28:06 +0300 Subject: [PATCH] Logo: treat a "$" ending a line or the logo as a plain dollar (#2667) Fixes #2666 --- src/logo/logo.c | 7 +++++-- tests/logo.c | 10 ++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/logo/logo.c b/src/logo/logo.c index 9a580e48b..d6642ca45 100644 --- a/src/logo/logo.c +++ b/src/logo/logo.c @@ -143,10 +143,13 @@ static void logoLineCacheBuild(FFLogoLineCacheState* cache, const char* data, bo if (doColorReplacement && *data == '$') { ++data; - if (*data == '$' || *data == '\0') { + // `$$` is an escaped dollar; a `$` ending a line or the logo is a plain one + if (*data == '$' || *data == '\0' || *data == '\n' || *data == '\r') { ffStrbufAppendC(&line, '$'); ++lineWidth; - ++data; + if (*data == '$') { + ++data; + } continue; } diff --git a/tests/logo.c b/tests/logo.c index d100cd7df..e9a7901eb 100644 --- a/tests/logo.c +++ b/tests/logo.c @@ -1,5 +1,6 @@ #include "logo/logo.h" #include "common/textModifier.h" +#include "fastfetch.h" #include #include @@ -55,6 +56,15 @@ int main(void) { VERIFY(strcmp(ffLogoPositionToString(FF_LOGO_POSITION_TOP), "top") == 0); VERIFY(strcmp(ffLogoPositionToString(FF_LOGO_POSITION_RIGHT), "right") == 0); + // A `$` ending a line or the logo is a plain dollar: it keeps the line break and the terminator. + instance.config.display.pipe = true; + ffLogoPrintChars("ab$\ncd", true); + VERIFY(instance.state.logoHeight == 1 && instance.state.logoWidth == 3); + ffLogoPrintChars("ab$", true); + VERIFY(instance.state.logoHeight == 0 && instance.state.logoWidth == 3); + ffLogoPrintChars("a$1b$$c", true); + VERIFY(instance.state.logoWidth == 4); + puts("\033[32mAll tests passed!" FASTFETCH_TEXT_MODIFIER_RESET); return 0; }