mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-29 16:26:39 +01:00
terminal font
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user