From 85b0be5213b7ae7c5fd403f100c2db9efe58012e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Bohner=20=28xzvf=29?= Date: Tue, 12 Jul 2022 14:38:06 +0200 Subject: [PATCH 1/5] Add best effort terminal font detection for alacritty. Alacritty's config files are technically YML files, so simply looking for a prop value "family:" may break some of the time, but is in fact better than what neofetch does and much easier to implement then writing a YML parser :) --- src/modules/terminalfont.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/modules/terminalfont.c b/src/modules/terminalfont.c index bba8910a9..0ff31f99e 100644 --- a/src/modules/terminalfont.c +++ b/src/modules/terminalfont.c @@ -53,7 +53,6 @@ static void printTerminalFontFromConfigFile(FFinstance* instance, const char* co FFstrbuf fontName; ffStrbufInit(&fontName); ffParsePropFileConfig(instance, configFile, start, &fontName); - if(fontName.length == 0) ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont, "Couldn't find terminal font in \"$XDG_CONFIG_HOME/%s\"", configFile); else @@ -179,6 +178,26 @@ static void printXCFETerminal(FFinstance* instance) } } +static void printAlacritty(FFinstance* instance) { + FFstrbuf fontName; + ffStrbufInit(&fontName); + // alacritty parses config files in this order + ffParsePropFileConfig(instance, "alacritty/alacritty.yml", "family:", &fontName); + if(fontName.length == 0) + ffParsePropFileConfig(instance, "alacritty.yml", "family:", &fontName); + if(fontName.length == 0) + ffParsePropFileConfig(instance, ".alacritty.yml", "family:", &fontName); + if(fontName.length == 0) + ffStrbufAppendS(&fontName, "alacritty"); //by default alacritty uses it's own font called alacritty + + FFfont font; + ffFontInitPango(&font, fontName.chars); + printTerminalFont(instance, fontName.chars, &font); + ffFontDestroy(&font); + + ffStrbufDestroy(&fontName); +} + static void printTTY(FFinstance* instance) { FFstrbuf fontName; @@ -227,6 +246,8 @@ void ffPrintTerminalFont(FFinstance* instance) printTerminalFontFromGSettings(instance, "/org/gnome/terminal/legacy/profiles:/:", "org.gnome.Terminal.ProfilesList", "org.gnome.Terminal.Legacy.Profile"); else if(ffStrbufStartsWithIgnCaseS(&result->terminalExe, "/dev/tty")) printTTY(instance); + else if(ffStrbufIgnCaseCompS(&result->terminalProcessName, "alacritty") == 0) + printAlacritty(instance); else ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont, "Unknown terminal: %s", result->terminalProcessName.chars); } From c95ad74ea2a7d85a51e86344dbea187d53c81daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Bohner=20=28xzvf=29?= Date: Tue, 12 Jul 2022 16:31:19 +0200 Subject: [PATCH 2/5] Refactor to use ffFontInitCopy and detect font size printAlacritty now usese ffFontInitCopy instead of ffFontInitPango and also detects font size. --- src/modules/terminalfont.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/modules/terminalfont.c b/src/modules/terminalfont.c index 0ff31f99e..dbe55f8c3 100644 --- a/src/modules/terminalfont.c +++ b/src/modules/terminalfont.c @@ -180,22 +180,36 @@ static void printXCFETerminal(FFinstance* instance) static void printAlacritty(FFinstance* instance) { FFstrbuf fontName; + FFstrbuf fontSize; ffStrbufInit(&fontName); + ffStrbufInit(&fontSize); + + FFpropquery fontQuery[] = { + {"family:", &fontName}, + {"size:", &fontSize}, + }; + // alacritty parses config files in this order - ffParsePropFileConfig(instance, "alacritty/alacritty.yml", "family:", &fontName); - if(fontName.length == 0) - ffParsePropFileConfig(instance, "alacritty.yml", "family:", &fontName); - if(fontName.length == 0) - ffParsePropFileConfig(instance, ".alacritty.yml", "family:", &fontName); - if(fontName.length == 0) - ffStrbufAppendS(&fontName, "alacritty"); //by default alacritty uses it's own font called alacritty + ffParsePropFileConfigValues(instance, "alacritty/alacritty.yml", 2, fontQuery); + if(fontName.length == 0 || fontSize.length == 0) + ffParsePropFileConfigValues(instance, "alacritty.yml", 2, fontQuery); + if(fontName.length == 0 || fontSize.length == 0) + ffParsePropFileConfigValues(instance, ".alacritty.yml", 2, fontQuery); + if(fontName.length == 0 || fontSize.length == 0) + { + //by default alacritty uses it's own font called alacritty at size 11 + ffStrbufAppendS(&fontName, "alacritty"); + ffStrbufAppendS(&fontSize, "11"); + } FFfont font; - ffFontInitPango(&font, fontName.chars); + ffFontInitCopy(&font, fontName.chars); + ffStrbufInitCopy(&font.size, &fontSize); printTerminalFont(instance, fontName.chars, &font); ffFontDestroy(&font); ffStrbufDestroy(&fontName); + ffStrbufDestroy(&fontSize); } static void printTTY(FFinstance* instance) From e9d9b942faf4c6f7aca96de15478d98d80be6f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Bohner=20=28xzvf=29?= Date: Tue, 12 Jul 2022 16:34:35 +0200 Subject: [PATCH 3/5] Cleanup diff --- src/modules/terminalfont.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/terminalfont.c b/src/modules/terminalfont.c index dbe55f8c3..c34d364c0 100644 --- a/src/modules/terminalfont.c +++ b/src/modules/terminalfont.c @@ -53,6 +53,7 @@ static void printTerminalFontFromConfigFile(FFinstance* instance, const char* co FFstrbuf fontName; ffStrbufInit(&fontName); ffParsePropFileConfig(instance, configFile, start, &fontName); + if(fontName.length == 0) ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont, "Couldn't find terminal font in \"$XDG_CONFIG_HOME/%s\"", configFile); else From b95e83e9e5c88d970175da6d6fcfcaf005f04f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Bohner=20=28xzvf=29?= Date: Tue, 12 Jul 2022 16:41:20 +0200 Subject: [PATCH 4/5] Use ffStrbufAppend instead of ffStrbugInitCopy --- src/modules/terminalfont.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/terminalfont.c b/src/modules/terminalfont.c index c34d364c0..49f8b7f5c 100644 --- a/src/modules/terminalfont.c +++ b/src/modules/terminalfont.c @@ -205,7 +205,7 @@ static void printAlacritty(FFinstance* instance) { FFfont font; ffFontInitCopy(&font, fontName.chars); - ffStrbufInitCopy(&font.size, &fontSize); + ffStrbufAppend(&font.size, &fontSize); printTerminalFont(instance, fontName.chars, &font); ffFontDestroy(&font); From 67ac7eef59015367429b28ceb16945704afac280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Bohner=20=28xzvf=29?= Date: Tue, 12 Jul 2022 16:43:21 +0200 Subject: [PATCH 5/5] buxfix: missing fontSize/fontName would overwrite the other --- src/modules/terminalfont.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/modules/terminalfont.c b/src/modules/terminalfont.c index 49f8b7f5c..e72fa7c98 100644 --- a/src/modules/terminalfont.c +++ b/src/modules/terminalfont.c @@ -196,12 +196,14 @@ static void printAlacritty(FFinstance* instance) { ffParsePropFileConfigValues(instance, "alacritty.yml", 2, fontQuery); if(fontName.length == 0 || fontSize.length == 0) ffParsePropFileConfigValues(instance, ".alacritty.yml", 2, fontQuery); - if(fontName.length == 0 || fontSize.length == 0) - { - //by default alacritty uses it's own font called alacritty at size 11 + + //by default alacritty uses it's own font called alacritty + if(fontName.length == 0) ffStrbufAppendS(&fontName, "alacritty"); + + // the default font size is 11 + if(fontSize.length == 0) ffStrbufAppendS(&fontSize, "11"); - } FFfont font; ffFontInitCopy(&font, fontName.chars);