terminal font

This commit is contained in:
Linus Dierheimer
2021-03-11 17:21:18 +01:00
parent abd797a0bf
commit 33be85c4bc
8 changed files with 149 additions and 31 deletions
+4 -18
View File
@@ -1,19 +1,5 @@
#include "fastfetch.h"
static void parseFont(char* font, char* buffer)
{
char name[64];
char size[32];
int scanned = sscanf(font, "%[^,], %[^,]", name, size);
if(scanned == 0)
strcpy(buffer, font);
else if(scanned == 1)
strcpy(buffer, name);
else
sprintf(buffer, "%s (%spt)", name, size);
}
void ffPrintFont(FFinstance* instance)
{
char plasma[256];
@@ -26,7 +12,7 @@ void ffPrintFont(FFinstance* instance)
if(gtk2[0] == '\0')
gtk2Pretty[0] = '\0';
else
parseFont(gtk2, gtk2Pretty);
ffParseFont(gtk2, gtk2Pretty);
char gtk3[256];
ffParsePropFileHome(instance, ".config/gtk-3.0/settings.ini", "gtk-font-name=%[^\n]", gtk3);
@@ -35,7 +21,7 @@ void ffPrintFont(FFinstance* instance)
if(gtk3[0] == '\0')
gtk3Pretty[0] = '\0';
else
parseFont(gtk3, gtk3Pretty);
ffParseFont(gtk3, gtk3Pretty);
char gtk4[256];
ffParsePropFileHome(instance, ".config/gtk-4.0/settings.ini", "gtk-font-name=%[^\n]", gtk4);
@@ -44,7 +30,7 @@ void ffPrintFont(FFinstance* instance)
if(gtk4Pretty[0] == '\0')
gtk4Pretty[0] = '\0';
else
parseFont(gtk4, gtk4Pretty);
ffParseFont(gtk4, gtk4Pretty);
ffPrintLogoAndKey(instance, "Font");
@@ -55,7 +41,7 @@ void ffPrintFont(FFinstance* instance)
else
{
char plasmaPretty[256];
parseFont(plasma, plasmaPretty);
ffParseFont(plasma, plasmaPretty);
printf("%s [Plasma], ", plasmaPretty);
}
+44 -12
View File
@@ -1,6 +1,6 @@
#include "fastfetch.h"
static void printTerminalName(FFinstance* instance, const char* pid)
static void getTerminalName(FFinstance* instance, const char* pid, char* terminal, char* error)
{
char file[256];
sprintf(file, "/proc/%s/stat", pid);
@@ -8,9 +8,7 @@ static void printTerminalName(FFinstance* instance, const char* pid)
FILE* stat = fopen(file, "r");
if(stat == NULL)
{
char error[300];
sprintf(error, "fopen(\"%s\", \"r\") == NULL", file);
ffPrintError(instance, "Terminal", error);
return;
}
@@ -18,7 +16,7 @@ static void printTerminalName(FFinstance* instance, const char* pid)
char ppid[256];
if(fscanf(stat, "%*s (%[^)])%*s%s", name, ppid) != 2)
{
ffPrintError(instance, "Terminal", "fscanf(stat, \"%*s (%[^)])%*s%s\", name, ppid) != 2");
strcpy(error, "fscanf(stat, \"%*s (%[^)])%*s%s\", name, ppid) != 2");
return;
}
@@ -35,28 +33,62 @@ static void printTerminalName(FFinstance* instance, const char* pid)
strcasecmp(name, "doas") == 0 ||
strcasecmp(name, "strace") == 0 )
{
printTerminalName(instance, ppid);
getTerminalName(instance, ppid, terminal, error);
return;
}
ffPrintLogoAndKey(instance, "Terminal");
if(
strcasecmp(name, "systemd") == 0 ||
strcasecmp(name, "init") == 0 ||
strcasecmp(name, "login") == 0 ||
strcasecmp(name, "0") == 0 ||
strcasecmp(ppid, "0") == 0 )
{
puts("TTY");
strcpy(terminal, "TTY");
}
else
{
puts(name);
strcpy(terminal, name);
}
}
void ffPopulateTerminal(FFinstance* instance)
{
if(instance->state.terminal.value != NULL || instance->state.terminal.error != NULL)
return;
static char terminal[256];
static char error[256];
terminal[0] = '\0';
error[0] = '\0';
char ppid[256];
sprintf(ppid, "%i", getppid());
getTerminalName(instance, ppid, terminal, error);
if(terminal[0] != '\0')
instance->state.terminal.value = terminal;
if(error[0] != '\0')
instance->state.terminal.error = error;
}
void ffPrintTerminal(FFinstance* instance)
{
char ppid[256];
sprintf(ppid, "%i", getppid());
printTerminalName(instance, ppid);
ffPopulateTerminal(instance);
if(instance->state.terminal.value != NULL)
{
ffPrintLogoAndKey(instance, "Terminal");
puts(instance->state.terminal.value);
}
else if(instance->state.terminal.error != NULL)
{
ffPrintError(instance, "Terminal", instance->state.terminal.error);
}
else
{
ffPrintError(instance, "Terminal", "ffPopulateTerminal failed");
}
}
+67
View File
@@ -0,0 +1,67 @@
#include "fastfetch.h"
static void printKonsole(FFinstance* instance)
{
char profile[128];
ffParsePropFileHome(instance, ".config/konsolerc", "DefaultProfile=%[^\n]", profile);
if(profile[0] == '\0')
{
ffPrintError(instance, "Terminal Font", "Couldn't find \"DefaultProfile=%[^\n]\" in \".config/konsolerc\"");
return;
}
char profilePath[256];
sprintf(profilePath, ".local/share/konsole/%s", profile);
char font[128];
ffParsePropFileHome(instance, profilePath, "Font=%[^\n]", font);
if(font[0] == '\0')
{
char error[256];
sprintf(error, "Terminal Font", "Couldn't find \"Font=%[^\n]\" in \"%s\"", profilePath);
ffPrintError(instance, "Terminal Font", error);
}
char fontPretty[128];
ffParseFont(font, fontPretty);
ffPrintLogoAndKey(instance, "Terminal Font");
puts(fontPretty);
}
static void printTTY(FFinstance* instance)
{
char font[128];
ffParsePropFile("/etc/vconsole.conf", "Font=%[^\n]", font);
if(font[0] == '\0')
strcpy(font, "hardware-supplied VGA font");
ffPrintLogoAndKey(instance, "Terminal Font");
puts(font);
}
void ffPrintTerminalFont(FFinstance* instance)
{
ffPopulateTerminal(instance);
if(instance->state.terminal.error != NULL)
{
ffPrintError(instance, "Terminal Font", "Terminal Font needs successfull terminal detection");
}
else if(instance->state.terminal.value == NULL)
{
ffPrintError(instance, "Terminal Font", "ffPopulateTerminal failed");
}
if(strcasecmp(instance->state.terminal.value, "konsole") == 0)
printKonsole(instance);
else if(strcasecmp(instance->state.terminal.value, "TTY") == 0)
printTTY(instance);
else
{
char error[256];
sprintf(error, "Unknown terminal: %s", instance->state.terminal.value);
ffPrintError(instance, "Terminal Font", error);
}
}