From 2c599b59241a5278523633baaeef97ffee33deb0 Mon Sep 17 00:00:00 2001 From: Linus Dierheimer Date: Sat, 26 Jun 2021 16:48:15 +0200 Subject: [PATCH] prettier cursor output --- src/modules/cursor.c | 23 ++++++++++++++++++----- src/util/FFstrbuf.c | 34 ++++++++++++++++++++++++++++++++++ src/util/FFstrbuf.h | 4 ++++ 3 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/modules/cursor.c b/src/modules/cursor.c index 4dad69074..cb7ec72f4 100644 --- a/src/modules/cursor.c +++ b/src/modules/cursor.c @@ -3,9 +3,16 @@ #define FF_CURSOR_MODULE_NAME "Cursor" #define FF_CURSOR_NUM_FORMAT_ARGS 2 -static void printCursor(FFinstance* instance, const FFstrbuf* cursorTheme, const FFstrbuf* cursorSize) +static void printCursor(FFinstance* instance, FFstrbuf* cursorTheme, const FFstrbuf* cursorSize) { ffPrintLogoAndKey(instance, FF_CURSOR_MODULE_NAME, 0, &instance->config.cursorKey); + + ffStrbufRemoveIgnCaseEndS(cursorTheme, "cursors"); + ffStrbufRemoveIgnCaseEndS(cursorTheme, "cursor"); + ffStrbufTrimRight(cursorTheme, '_'); + if(cursorTheme->length == 0) + ffStrbufAppendS(cursorTheme, "default"); + ffStrbufWriteTo(cursorTheme, stdout); if(cursorSize != NULL && cursorSize->length > 0) @@ -34,7 +41,13 @@ static void printCursorGTK(FFinstance* instance) return; } - printCursor(instance, >k->cursor, >k->cursorSize); + //gtk->cursor is const, so we don't want to modify it + FFstrbuf theme; + ffStrbufInitCopy(&theme, >k->cursor); + + printCursor(instance, &theme, >k->cursorSize); + + ffStrbufDestroy(&theme); } static void printCursorPlasma(FFinstance* instance) @@ -162,9 +175,6 @@ static bool printCursorFromEnv(FFinstance* instance) void ffPrintCursor(FFinstance* instance) { - if(printCursorFromEnv(instance)) - return; - const FFWMDEResult* wmde = ffDetectWMDE(instance); if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, "KDE Plasma") == 0) @@ -185,6 +195,9 @@ void ffPrintCursor(FFinstance* instance) return; } + if(printCursorFromEnv(instance)) + return; + //User config if(printCursorFromXDG(instance, true)) return; diff --git a/src/util/FFstrbuf.c b/src/util/FFstrbuf.c index fbcdcead3..f0f510b9a 100644 --- a/src/util/FFstrbuf.c +++ b/src/util/FFstrbuf.c @@ -569,6 +569,40 @@ bool ffStrbufEndsWithS(const FFstrbuf* strbuf, const char* end) return true; } +static bool testEndsWithIgnCaseS(const FFstrbuf* strbuf, const char* end, uint32_t* endLength) +{ + *endLength = strlen(end); + + if(*endLength > strbuf->length) + return false; + + for(uint32_t i = 0; i < *endLength; ++i) + { + if(tolower(strbuf->chars[strbuf->length - *endLength + i]) != tolower(end[i])) + return false; + } + + return true; +} + +bool ffStrbufEndsWithIgnCaseS(const FFstrbuf* strbuf, const char* end) +{ + uint32_t dummy; + return testEndsWithIgnCaseS(strbuf, end, &dummy); +} + +bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end) +{ + uint32_t endLength; + if(testEndsWithIgnCaseS(strbuf, end, &endLength)) + { + ffStrbufSubstrBefore(strbuf, strbuf->length - endLength); + return true; + } + + return false; +} + void ffStrbufRecalculateLength(FFstrbuf* strbuf) { for(strbuf->length = 0; strbuf->chars[strbuf->length] != '\0'; ++strbuf->length); diff --git a/src/util/FFstrbuf.h b/src/util/FFstrbuf.h index 78f2c3452..c1464bc00 100644 --- a/src/util/FFstrbuf.h +++ b/src/util/FFstrbuf.h @@ -96,6 +96,10 @@ bool ffStrbufStartsWithIgnCaseNS(const FFstrbuf* strbuf, uint32_t length, const bool ffStrbufEndsWithS(const FFstrbuf* strbuf, const char* end); +bool ffStrbufEndsWithIgnCaseS(const FFstrbuf* strbuf, const char* end); + +bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end); + void ffStrbufRecalculateLength(FFstrbuf* strbuf); void ffStrbufDestroy(FFstrbuf* strbuf);