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
+1
View File
@@ -50,6 +50,7 @@ set(SRCS
src/modules/icons.c
src/modules/font.c
src/modules/terminal.c
src/modules/terminalfont.c
src/modules/cpu.c
src/modules/gpu.c
src/modules/memory.c
+16
View File
@@ -12,6 +12,8 @@ void ffInitState(FFstate* state)
state->passwd = getpwuid(getuid());
uname(&state->utsname);
sysinfo(&state->sysinfo);
state->terminal.value = NULL;
state->terminal.error = NULL;
}
void ffDefaultConfig(FFconfig* config)
@@ -131,6 +133,20 @@ void ffPrintGtkPretty(const char* gtk2, const char* gtk3, const char* gtk4)
}
}
void ffParseFont(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 ffPrintError(FFinstance* instance, const char* key, const char* message)
{
if(!instance->config.showErrors)
+3 -1
View File
@@ -8,7 +8,7 @@
#include <sys/stat.h>
#include <fcntl.h>
#define FASTFETCH_DEFAULT_STRUCTURE "Title:Seperator:OS:Host:Kernel:Uptime:Packages:Shell:Resolution:DE:WM:Theme:Icons:Font:Terminal:CPU:GPU:Memory:Disk:Battery:Locale:Break:Colors"
#define FASTFETCH_DEFAULT_STRUCTURE "Title:Seperator:OS:Host:Kernel:Uptime:Packages:Shell:Resolution:DE:WM:Theme:Icons:Font:Terminal:TerminalFont:CPU:GPU:Memory:Disk:Battery:Locale:Break:Colors"
#define FASTFETCH_DEFAULT_CONFIG \
"## Fastfetch configuration\n" \
@@ -204,6 +204,8 @@ static void parseStructureCommand(FFinstance* instance, FFdata* data, const char
ffPrintFont(instance);
else if(strcasecmp(line, "terminal") == 0)
ffPrintTerminal(instance);
else if(strcasecmp(line, "terminalfont") == 0)
ffPrintTerminalFont(instance);
else if(strcasecmp(line, "cpu") == 0)
ffPrintCPU(instance);
else if(strcasecmp(line, "gpu") == 0)
+13
View File
@@ -66,12 +66,20 @@ typedef struct FFconfig
} FFconfig;
typedef struct FFvalue
{
char* value;
char* error;
} FFvalue;
typedef struct FFstate
{
uint8_t current_row;
struct passwd* passwd;
struct utsname utsname;
struct sysinfo sysinfo;
FFvalue terminal;
} FFstate;
typedef struct FFinstance
@@ -88,6 +96,7 @@ void ffPrintLogoAndKey(FFinstance* instance, const char* key);
void ffGetFileContent(const char* fileName, char* buffer, uint32_t bufferSize);
void ffParsePropFile(const char* file, const char* regex, char* buffer);
void ffParsePropFileHome(FFinstance* instance, const char* relativeFile, const char* regex, char* buffer);
void ffParseFont(char* font, char* buffer);
void ffPrintGtkPretty(const char* gtk2, const char* gtk3, const char* gtk4);
void ffPrintError(FFinstance* instance, const char* key, const char* message);
void ffTrimTrailingWhitespace(char* buffer);
@@ -105,6 +114,9 @@ void ffPrintLogos(bool color);
#endif
//Module functions
void ffPopulateTerminal(FFinstance* instance);
void ffPrintCustom(FFinstance* instance, const char* key, const char* value);
void ffPrintBreak(FFinstance* instance);
void ffPrintTitle(FFinstance* instance);
@@ -122,6 +134,7 @@ void ffPrintTheme(FFinstance* instance);
void ffPrintIcons(FFinstance* instance);
void ffPrintFont(FFinstance* instance);
void ffPrintTerminal(FFinstance* instance);
void ffPrintTerminalFont(FFinstance* instance);
void ffPrintCPU(FFinstance* instance);
void ffPrintGPU(FFinstance* instance);
void ffPrintMemory(FFinstance* instance);
+1
View File
@@ -28,6 +28,7 @@ int main(int argc, char** argv)
ffPrintIcons(&instance);
ffPrintFont(&instance);
ffPrintTerminal(&instance);
ffPrintTerminalFont(&instance);
ffPrintCPU(&instance);
ffPrintGPU(&instance);
ffPrintMemory(&instance);
+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);
}
}