a bit better parsing of fonts

This commit is contained in:
Linus Dierheimer
2021-05-23 19:40:34 +02:00
parent 14932466f7
commit bd3c236480
11 changed files with 424 additions and 157 deletions
+47 -62
View File
@@ -1,95 +1,80 @@
#include "fastfetch.h"
#define FF_FONT_MODULE_NAME "Font"
#define FF_FONT_NUM_FORMAT_ARGS 17
#define FF_FONT_NUM_FORMAT_ARGS 21
void ffPrintFont(FFinstance* instance)
{
const FFstrbuf* plasma = &ffDetectPlasma(instance)->font;
const FFstrbuf* gtk2 = &ffDetectGTK2(instance)->font;
const FFstrbuf* gtk3 = &ffDetectGTK3(instance)->font;
const FFstrbuf* gtk4 = &ffDetectGTK4(instance)->font;
const FFstrbuf* plasmaRaw = &ffDetectPlasma(instance)->font;
const FFstrbuf* gtk2Raw = &ffDetectGTK2(instance)->font;
const FFstrbuf* gtk3Raw = &ffDetectGTK3(instance)->font;
const FFstrbuf* gtk4Raw = &ffDetectGTK4(instance)->font;
if(plasma->length == 0 && gtk2->length == 0 && gtk3->length == 0 && gtk4->length == 0)
if(plasmaRaw->length == 0 && gtk2Raw->length == 0 && gtk3Raw->length == 0 && gtk4Raw->length == 0)
{
ffPrintError(instance, FF_FONT_MODULE_NAME, 0, &instance->config.fontKey, &instance->config.fontFormat, FF_FONT_NUM_FORMAT_ARGS, "No fonts found");
return;
}
FF_STRBUF_CREATE(plasmaName);
double plasmaSize;
ffGetFont(plasma->chars, &plasmaName, &plasmaSize);
FF_STRBUF_CREATE(plasmaPretty);
ffGetFontPretty(&plasmaPretty, &plasmaName, plasmaSize);
FFfont plasma;
ffFontInitQt(&plasma, plasmaRaw->chars);
FF_STRBUF_CREATE(gtk2Name);
double gtk2Size;
ffGetFont(gtk2->chars, &gtk2Name, &gtk2Size);
FF_STRBUF_CREATE(gtk2Pretty);
ffGetFontPretty(&gtk2Pretty, &gtk2Name, gtk2Size);
FFfont gtk2;
ffFontInitPango(&gtk2, gtk2Raw->chars);
FF_STRBUF_CREATE(gtk3Name);
double gtk3Size;
ffGetFont(gtk3->chars, &gtk3Name, &gtk3Size);
FF_STRBUF_CREATE(gtk3Pretty);
ffGetFontPretty(&gtk3Pretty, &gtk3Name, gtk3Size);
FFfont gtk3;
ffFontInitPango(&gtk3, gtk3Raw->chars);
FF_STRBUF_CREATE(gtk4Name);
double gtk4Size;
ffGetFont(gtk4->chars, &gtk4Name, &gtk4Size);
FF_STRBUF_CREATE(gtk4Pretty);
ffGetFontPretty(&gtk4Pretty, &gtk4Name, gtk4Size);
FFfont gtk4;
ffFontInitPango(&gtk4, gtk4Raw->chars);
FF_STRBUF_CREATE(gtkPretty);
ffGetGtkPretty(&gtkPretty, &gtk2Pretty, &gtk3Pretty, &gtk4Pretty);
FFstrbuf gtk;
ffStrbufInit(&gtk);
ffGetGtkPretty(&gtk, &gtk2.pretty, &gtk3.pretty, &gtk4.pretty);
if(instance->config.fontFormat.length == 0)
{
ffPrintLogoAndKey(instance, FF_FONT_MODULE_NAME, 0, &instance->config.fontKey);
if(plasma->length > 0)
if(plasma.pretty.length > 0)
{
ffStrbufWriteTo(&plasmaPretty, stdout);
ffStrbufWriteTo(&plasma.pretty, stdout);
fputs(" [Plasma]", stdout);
if(gtkPretty.length > 0)
if(gtk.length > 0)
fputs(", ", stdout);
}
ffStrbufPutTo(&gtkPretty, stdout);
ffStrbufPutTo(&gtk, stdout);
}
else
{
ffPrintFormatString(instance, FF_FONT_MODULE_NAME, 0, &instance->config.fontKey, &instance->config.fontFormat, NULL, FF_FONT_NUM_FORMAT_ARGS, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_STRBUF, plasma},
{FF_FORMAT_ARG_TYPE_STRBUF, &plasmaName},
{FF_FORMAT_ARG_TYPE_DOUBLE, &plasmaSize},
{FF_FORMAT_ARG_TYPE_STRBUF, &plasmaPretty},
{FF_FORMAT_ARG_TYPE_STRBUF, gtk2},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk2Name},
{FF_FORMAT_ARG_TYPE_DOUBLE, &gtk2Size},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk2Pretty},
{FF_FORMAT_ARG_TYPE_STRBUF, gtk3},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk3Name},
{FF_FORMAT_ARG_TYPE_DOUBLE, &gtk3Size},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk3Pretty},
{FF_FORMAT_ARG_TYPE_STRBUF, gtk4},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk4Name},
{FF_FORMAT_ARG_TYPE_DOUBLE, &gtk4Size},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk4Pretty},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtkPretty}
{FF_FORMAT_ARG_TYPE_STRBUF, plasmaRaw},
{FF_FORMAT_ARG_TYPE_STRBUF, &plasma.name},
{FF_FORMAT_ARG_TYPE_STRBUF, &plasma.size},
{FF_FORMAT_ARG_TYPE_LIST, &plasma.styles},
{FF_FORMAT_ARG_TYPE_STRBUF, &plasma.pretty},
{FF_FORMAT_ARG_TYPE_STRBUF, gtk2Raw},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk2.name},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk2.size},
{FF_FORMAT_ARG_TYPE_LIST, &gtk2.styles},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk2.pretty},
{FF_FORMAT_ARG_TYPE_STRBUF, gtk3Raw},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk3.name},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk3.size},
{FF_FORMAT_ARG_TYPE_LIST, &gtk3.styles},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk3.pretty},
{FF_FORMAT_ARG_TYPE_STRBUF, gtk4Raw},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk4.name},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk4.size},
{FF_FORMAT_ARG_TYPE_LIST, &gtk4.styles},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk4.pretty},
{FF_FORMAT_ARG_TYPE_STRBUF, &gtk}
});
}
ffStrbufDestroy(&plasmaName);
ffStrbufDestroy(&plasmaPretty);
ffStrbufDestroy(&gtk2Name);
ffStrbufDestroy(&gtk2Pretty);
ffStrbufDestroy(&gtk3Name);
ffStrbufDestroy(&gtk3Pretty);
ffStrbufDestroy(&gtk4Name);
ffStrbufDestroy(&gtk4Pretty);
ffStrbufDestroy(&gtkPretty);
ffFontDestroy(&plasma);
ffFontDestroy(&gtk2);
ffFontDestroy(&gtk3);
ffFontDestroy(&gtk4);
ffStrbufDestroy(&gtk);
}
+3 -2
View File
@@ -51,8 +51,9 @@ static void getTerminalName(FFinstance* instance, const char* pid, FFTerminalRes
strcasecmp(name, "sudo") == 0 ||
strcasecmp(name, "su") == 0 ||
strcasecmp(name, "doas") == 0 ||
strcasecmp(name, "strace") == 0 )
{
strcasecmp(name, "strace") == 0 ||
strcasecmp(name, "gdb") == 0
) {
getTerminalName(instance, ppid, result);
return;
}
+58 -37
View File
@@ -1,33 +1,31 @@
#include "fastfetch.h"
#define FF_TERMFONT_MODULE_NAME "Terminal Font"
#define FF_TERMFONT_NUM_FORMAT_ARGS 4
#define FF_TERMFONT_NUM_FORMAT_ARGS 5
static void printTerminalFont(FFinstance* instance, const char* font)
static void printTerminalFont(FFinstance* instance, const char* raw, FFfont* font)
{
FF_STRBUF_CREATE(name);
double size;
ffGetFont(font, &name, &size);
FF_STRBUF_CREATE(pretty);
ffGetFontPretty(&pretty, &name, size);
if(font->pretty.length == 0)
{
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Terminal font is an empty value");
return;
}
if(instance->config.termFontFormat.length == 0)
{
ffPrintLogoAndKey(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey);
ffStrbufPutTo(&pretty, stdout);
ffStrbufPutTo(&font->pretty, stdout);
}
else
{
ffPrintFormatString(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, NULL, FF_TERMFONT_NUM_FORMAT_ARGS, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_STRING, font},
{FF_FORMAT_ARG_TYPE_STRBUF, &name},
{FF_FORMAT_ARG_TYPE_DOUBLE, &size},
{FF_FORMAT_ARG_TYPE_STRBUF, &pretty}
{FF_FORMAT_ARG_TYPE_STRING, raw},
{FF_FORMAT_ARG_TYPE_STRBUF, &font->name},
{FF_FORMAT_ARG_TYPE_STRBUF, &font->size},
{FF_FORMAT_ARG_TYPE_LIST, &font->styles},
{FF_FORMAT_ARG_TYPE_STRBUF, &font->pretty}
});
}
ffStrbufDestroy(&name);
ffStrbufDestroy(&pretty);
}
static const char* getSystemMonospaceFont(FFinstance* instance)
@@ -52,16 +50,21 @@ static const char* getSystemMonospaceFont(FFinstance* instance)
static void printTerminalFontFromConfigFile(FFinstance* instance, const char* configFile, const char* start)
{
FFstrbuf font;
ffStrbufInit(&font);
ffParsePropFileConfig(instance, configFile, start, &font);
FFstrbuf fontName;
ffStrbufInit(&fontName);
ffParsePropFileConfig(instance, configFile, start, &fontName);
if(font.length == 0)
if(fontName.length == 0)
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find terminal font in \"$XDG_CONFIG_HOME/%s\"", configFile);
else
printTerminalFont(instance, font.chars);
{
FFfont font;
ffFontInitPango(&font, fontName.chars);
printTerminalFont(instance, fontName.chars, &font);
ffFontDestroy(&font);
}
ffStrbufDestroy(&font);
ffStrbufDestroy(&fontName);
}
static void printTerminalFontFromGSettings(FFinstance* instance, char* profilePath, char* profileList, char* profile)
@@ -99,7 +102,10 @@ static void printTerminalFontFromGSettings(FFinstance* instance, char* profilePa
if(fontName == NULL)
return;
printTerminalFont(instance, fontName);
FFfont font;
ffFontInitPango(&font, fontName);
printTerminalFont(instance, fontName, &font);
ffFontDestroy(&font);
}
static void printKonsole(FFinstance* instance)
@@ -120,16 +126,21 @@ static void printKonsole(FFinstance* instance)
ffStrbufAppendS(&profilePath, ".local/share/konsole/");
ffStrbufAppend(&profilePath, &profile);
FFstrbuf font;
ffStrbufInit(&font);
ffParsePropFileHome(instance, profilePath.chars, "Font =", &font);
FFstrbuf fontName;
ffStrbufInit(&fontName);
ffParsePropFileHome(instance, profilePath.chars, "Font =", &fontName);
if(font.length == 0)
if(fontName.length == 0)
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"Font=%%[^\\n]\" in \"%s\"", profilePath.chars);
else
printTerminalFont(instance, font.chars);
{
FFfont font;
ffFontInitQt(&font, fontName.chars);
printTerminalFont(instance, fontName.chars, &font);
ffFontDestroy(&font);
}
ffStrbufDestroy(&font);
ffStrbufDestroy(&fontName);
ffStrbufDestroy(&profilePath);
ffStrbufDestroy(&profile);
}
@@ -160,28 +171,38 @@ static void printXCFETerminal(FFinstance* instance)
if(fontName == NULL)
ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.termFontKey, &instance->config.termFontFormat, FF_TERMFONT_NUM_FORMAT_ARGS, "Couldn't find \"xsettings::/Gtk/MonospaceFontName\" in XFConf");
else
printTerminalFont(instance, fontName);
{
FFfont font;
ffFontInitPango(&font, fontName);
printTerminalFont(instance, fontName, &font);
ffFontDestroy(&font);
}
}
static void printTTY(FFinstance* instance)
{
FFstrbuf font;
ffStrbufInit(&font);
FFstrbuf fontName;
ffStrbufInit(&fontName);
ffParsePropFile("/etc/vconsole.conf", "Font =", &font);
ffParsePropFile("/etc/vconsole.conf", "Font =", &fontName);
if(font.length == 0)
if(fontName.length == 0)
{
ffStrbufAppendS(&font, "VGA default kernel font ");
ffProcessAppendStdOut(&font, (char* const[]){
ffStrbufAppendS(&fontName, "VGA default kernel font ");
ffProcessAppendStdOut(&fontName, (char* const[]){
"showconsolefont",
"--info",
NULL
});
}
printTerminalFont(instance, font.chars);
ffStrbufDestroy(&font);
ffStrbufTrimRight(&fontName, ' ');
FFfont font;
ffFontInitCopy(&font, fontName.chars);
printTerminalFont(instance, fontName.chars, &font);
ffFontDestroy(&font);
ffStrbufDestroy(&fontName);
}
void ffPrintTerminalFont(FFinstance* instance)