mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-11-09 06:30:10 +01:00
a bit better parsing of fonts
This commit is contained in:
+47
-62
@@ -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, >k2Name, >k2Size);
|
||||
FF_STRBUF_CREATE(gtk2Pretty);
|
||||
ffGetFontPretty(>k2Pretty, >k2Name, gtk2Size);
|
||||
FFfont gtk2;
|
||||
ffFontInitPango(>k2, gtk2Raw->chars);
|
||||
|
||||
FF_STRBUF_CREATE(gtk3Name);
|
||||
double gtk3Size;
|
||||
ffGetFont(gtk3->chars, >k3Name, >k3Size);
|
||||
FF_STRBUF_CREATE(gtk3Pretty);
|
||||
ffGetFontPretty(>k3Pretty, >k3Name, gtk3Size);
|
||||
FFfont gtk3;
|
||||
ffFontInitPango(>k3, gtk3Raw->chars);
|
||||
|
||||
FF_STRBUF_CREATE(gtk4Name);
|
||||
double gtk4Size;
|
||||
ffGetFont(gtk4->chars, >k4Name, >k4Size);
|
||||
FF_STRBUF_CREATE(gtk4Pretty);
|
||||
ffGetFontPretty(>k4Pretty, >k4Name, gtk4Size);
|
||||
FFfont gtk4;
|
||||
ffFontInitPango(>k4, gtk4Raw->chars);
|
||||
|
||||
FF_STRBUF_CREATE(gtkPretty);
|
||||
ffGetGtkPretty(>kPretty, >k2Pretty, >k3Pretty, >k4Pretty);
|
||||
FFstrbuf gtk;
|
||||
ffStrbufInit(>k);
|
||||
ffGetGtkPretty(>k, >k2.pretty, >k3.pretty, >k4.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(>kPretty, stdout);
|
||||
ffStrbufPutTo(>k, 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, >k2Name},
|
||||
{FF_FORMAT_ARG_TYPE_DOUBLE, >k2Size},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k2Pretty},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, gtk3},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k3Name},
|
||||
{FF_FORMAT_ARG_TYPE_DOUBLE, >k3Size},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k3Pretty},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, gtk4},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k4Name},
|
||||
{FF_FORMAT_ARG_TYPE_DOUBLE, >k4Size},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k4Pretty},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >kPretty}
|
||||
{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, >k2.name},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k2.size},
|
||||
{FF_FORMAT_ARG_TYPE_LIST, >k2.styles},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k2.pretty},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, gtk3Raw},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k3.name},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k3.size},
|
||||
{FF_FORMAT_ARG_TYPE_LIST, >k3.styles},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k3.pretty},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, gtk4Raw},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k4.name},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k4.size},
|
||||
{FF_FORMAT_ARG_TYPE_LIST, >k4.styles},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k4.pretty},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, >k}
|
||||
});
|
||||
}
|
||||
|
||||
ffStrbufDestroy(&plasmaName);
|
||||
ffStrbufDestroy(&plasmaPretty);
|
||||
|
||||
ffStrbufDestroy(>k2Name);
|
||||
ffStrbufDestroy(>k2Pretty);
|
||||
|
||||
ffStrbufDestroy(>k3Name);
|
||||
ffStrbufDestroy(>k3Pretty);
|
||||
|
||||
ffStrbufDestroy(>k4Name);
|
||||
ffStrbufDestroy(>k4Pretty);
|
||||
|
||||
ffStrbufDestroy(>kPretty);
|
||||
ffFontDestroy(&plasma);
|
||||
ffFontDestroy(>k2);
|
||||
ffFontDestroy(>k3);
|
||||
ffFontDestroy(>k4);
|
||||
ffStrbufDestroy(>k);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user