From 719a5c999daa6cf31ea3b654bdd6aea1367137f3 Mon Sep 17 00:00:00 2001 From: DarN Date: Sun, 9 May 2021 13:40:17 +0200 Subject: [PATCH] Added system font recognition for xfce-terminal --- src/modules/terminalfont.c | 67 +++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/src/modules/terminalfont.c b/src/modules/terminalfont.c index 33f28bb11..91d377521 100644 --- a/src/modules/terminalfont.c +++ b/src/modules/terminalfont.c @@ -43,6 +43,71 @@ static void printTerminalFontFromConfigFile(FFinstance* instance, const char* co printTerminalFont(instance, font); } +static void printXCFETerminal(FFinstance* instance) +{ + FFstrbuf fontName; + ffStrbufInitA(&fontName, 256); + + ffParsePropFileConfig(instance, "xfce4/terminal/terminalrc", "FontUseSystem=%[^\n]", fontName.chars); + + if(fontName.chars[0] == '\0') + { + printTerminalFontFromConfigFile(instance, "xfce4/terminal/terminalrc", "FontName=%[^\n]"); + ffStrbufDestroy(&fontName); + return; + } + + FFstrbuf absolutePath; + ffStrbufInitA(&absolutePath, 64); + ffStrbufAppendS(&absolutePath, instance->state.passwd->pw_dir); + ffStrbufAppendC(&absolutePath, '/'); + ffStrbufAppendS(&absolutePath, ".config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml"); + + char* line = NULL; + size_t len = 0; + + FILE* file = fopen(absolutePath.chars, "r"); + if(file == NULL) + { + ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't open \"%s\"", absolutePath.chars); + ffStrbufDestroy(&absolutePath); + ffStrbufDestroy(&fontName); + + return; + } + + FFstrbuf matchText; + ffStrbufInitAS(&matchText, 64, "\n] + break; + } + ffStrbufSetC(&fontName, '\0'); + } + + if(line != NULL) + free(line); + + fclose(file); + + if(fontName.chars[0] != '\0') + printTerminalFont(instance, fontName.chars); + else + ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"MonospaceFontName=%%[^\\n]\" in \"xsettings.xml\""); + + ffStrbufDestroy(&matchText); + ffStrbufDestroy(&absolutePath); + ffStrbufDestroy(&fontName); +} + static void printKonsole(FFinstance* instance) { char profile[128]; @@ -142,7 +207,7 @@ void ffPrintTerminalFont(FFinstance* instance) if(ffStrbufIgnCaseCompS(&result->exeName, "konsole") == 0) printKonsole(instance); else if(ffStrbufIgnCaseCompS(&result->exeName, "xfce4-terminal") == 0) - printTerminalFontFromConfigFile(instance, "xfce4/terminal/terminalrc", "FontName=%[^\n]"); + printXCFETerminal(instance); else if(ffStrbufIgnCaseCompS(&result->exeName, "lxterminal") == 0) printTerminalFontFromConfigFile(instance, "lxterminal/lxterminal.conf", "fontname=%[^\n]"); else if(ffStrbufIgnCaseCompS(&result->exeName, "tilix") == 0)