From 100ce5844db2d7c58b05da6ec2a7c6eaabaad045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 2 Jun 2023 16:28:58 +0800 Subject: [PATCH] TerminalFont: support JSON config --- CMakeLists.txt | 2 +- src/common/init.c | 4 +- src/fastfetch.c | 6 +- src/fastfetch.h | 3 +- src/flashfetch.c | 2 +- src/modules/jsonconfig/jsonconfig.c | 1 + src/modules/modules.h | 1 + src/modules/options.h | 1 + src/modules/terminalfont.c | 32 ----------- src/modules/terminalfont/option.h | 11 ++++ src/modules/terminalfont/terminalfont.c | 75 +++++++++++++++++++++++++ src/modules/terminalfont/terminalfont.h | 15 +++++ 12 files changed, 112 insertions(+), 41 deletions(-) delete mode 100644 src/modules/terminalfont.c create mode 100644 src/modules/terminalfont/option.h create mode 100644 src/modules/terminalfont/terminalfont.c create mode 100644 src/modules/terminalfont/terminalfont.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0faf474aa..db2b4a4d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -302,7 +302,7 @@ set(LIBFASTFETCH_SRC src/modules/swap/swap.c src/modules/media.c src/modules/terminal/terminal.c - src/modules/terminalfont.c + src/modules/terminalfont/terminalfont.c src/modules/theme.c src/modules/title/title.c src/modules/uptime/uptime.c diff --git a/src/common/init.c b/src/common/init.c index 916e95de8..ae90b2406 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -80,7 +80,7 @@ static void defaultConfig(FFinstance* instance) ffInitFontOptions(&instance->config.font); ffInitCursorOptions(&instance->config.cursor); ffInitTerminalOptions(&instance->config.terminal); - initModuleArg(&instance->config.terminalFont); + ffInitTerminalFontOptions(&instance->config.terminalFont); ffInitCPUOptions(&instance->config.cpu); ffInitCPUUsageOptions(&instance->config.cpuUsage); ffInitGPUOptions(&instance->config.gpu); @@ -299,7 +299,7 @@ static void destroyConfig(FFinstance* instance) ffDestroyFontOptions(&instance->config.font); ffDestroyCursorOptions(&instance->config.cursor); ffDestroyTerminalOptions(&instance->config.terminal); - destroyModuleArg(&instance->config.terminalFont); + ffDestroyTerminalFontOptions(&instance->config.terminalFont); ffDestroyCPUOptions(&instance->config.cpu); ffDestroyCPUUsageOptions(&instance->config.cpuUsage); ffDestroyGPUOptions(&instance->config.gpu); diff --git a/src/fastfetch.c b/src/fastfetch.c index f0eda06af..4596d3fac 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -998,7 +998,7 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con else if(ffParseFontCommandOptions(&instance->config.font, key, value)) {} else if(ffParseCursorCommandOptions(&instance->config.cursor, key, value)) {} else if(ffParseTerminalCommandOptions(&instance->config.terminal, key, value)) {} - else if(optionParseModuleArgs(key, value, "terminal-font", &instance->config.terminalFont)) {} + else if(ffParseTerminalFontCommandOptions(&instance->config.terminalFont, key, value)) {} else if(ffParseCPUCommandOptions(&instance->config.cpu, key, value)) {} else if(ffParseCPUUsageCommandOptions(&instance->config.cpuUsage, key, value)) {} else if(ffParseGPUCommandOptions(&instance->config.gpu, key, value)) {} @@ -1210,8 +1210,8 @@ static void parseStructureCommand(FFinstance* instance, const char* line) ffPrintCursor(instance, &instance->config.cursor); else if(strcasecmp(line, FF_TERMINAL_MODULE_NAME) == 0) ffPrintTerminal(instance, &instance->config.terminal); - else if(strcasecmp(line, "terminalfont") == 0) - ffPrintTerminalFont(instance); + else if(strcasecmp(line, FF_TERMINALFONT_MODULE_NAME) == 0) + ffPrintTerminalFont(instance, &instance->config.terminalFont); else if(strcasecmp(line, FF_CPU_MODULE_NAME) == 0) ffPrintCPU(instance, &instance->config.cpu); else if(strcasecmp(line, FF_CPUUSAGE_MODULE_NAME) == 0) diff --git a/src/fastfetch.h b/src/fastfetch.h index fa226c008..694dbce09 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -80,7 +80,7 @@ typedef struct FFconfig FFFontOptions font; FFCursorOptions cursor; FFTerminalOptions terminal; - FFModuleArgs terminalFont; + FFTerminalFontOptions terminalFont; FFCPUOptions cpu; FFCPUUsageOptions cpuUsage; FFCustomOptions custom; @@ -203,7 +203,6 @@ void ffPrintWM(FFinstance* instance); void ffPrintTheme(FFinstance* instance); void ffPrintIcons(FFinstance* instance); void ffPrintWallpaper(FFinstance* instance); -void ffPrintTerminalFont(FFinstance* instance); void ffPrintPowerAdapter(FFinstance* instance); void ffPrintPlayer(FFinstance* instance); void ffPrintMedia(FFinstance* instance); diff --git a/src/flashfetch.c b/src/flashfetch.c index 94a16fa54..aa27f20e7 100644 --- a/src/flashfetch.c +++ b/src/flashfetch.c @@ -42,7 +42,7 @@ int main(int argc, char** argv) ffPrintFont(&instance, &instance.config.font); ffPrintCursor(&instance, &instance.config.cursor); ffPrintTerminal(&instance, &instance.config.terminal); - ffPrintTerminalFont(&instance); + ffPrintTerminalFont(&instance, &instance.config.terminalFont); ffPrintCPU(&instance, &instance.config.cpu); ffPrintGPU(&instance, &instance.config.gpu); ffPrintMemory(&instance, &instance.config.memory); diff --git a/src/modules/jsonconfig/jsonconfig.c b/src/modules/jsonconfig/jsonconfig.c index d9aaf2a85..336bc606a 100644 --- a/src/modules/jsonconfig/jsonconfig.c +++ b/src/modules/jsonconfig/jsonconfig.c @@ -118,6 +118,7 @@ static bool parseModuleJsonObject(FFinstance* instance, const char* type, json_o case 'T': { return tryModule(instance, type, module, FF_TERMINAL_MODULE_NAME, ffParseTerminalJsonObject) || + tryModule(instance, type, module, FF_TERMINALFONT_MODULE_NAME, ffParseTerminalFontJsonObject) || tryModule(instance, type, module, FF_TITLE_MODULE_NAME, ffParseTitleJsonObject) || false; } diff --git a/src/modules/modules.h b/src/modules/modules.h index 090d45fcd..b1f06153d 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -32,6 +32,7 @@ #include "modules/sound/sound.h" #include "modules/swap/swap.h" #include "modules/terminal/terminal.h" +#include "modules/terminalfont/terminalfont.h" #include "modules/title/title.h" #include "modules/jsonconfig/jsonconfig.h" #include "modules/uptime/uptime.h" diff --git a/src/modules/options.h b/src/modules/options.h index 6a9690343..99c69dd4b 100644 --- a/src/modules/options.h +++ b/src/modules/options.h @@ -30,6 +30,7 @@ #include "modules/sound/option.h" #include "modules/swap/option.h" #include "modules/terminal/option.h" +#include "modules/terminalfont/option.h" #include "modules/title/option.h" #include "modules/uptime/option.h" #include "modules/wifi/option.h" diff --git a/src/modules/terminalfont.c b/src/modules/terminalfont.c deleted file mode 100644 index 1809c4f39..000000000 --- a/src/modules/terminalfont.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "fastfetch.h" -#include "common/printing.h" -#include "detection/terminalfont/terminalfont.h" - -#define FF_TERMFONT_MODULE_NAME "Terminal Font" -#define FF_TERMFONT_NUM_FORMAT_ARGS 4 - -void ffPrintTerminalFont(FFinstance* instance) -{ - const FFTerminalFontResult* terminalFont = ffDetectTerminalFont(instance); - - if(terminalFont->error.length > 0) - { - ffPrintError(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont, "%s", terminalFont->error.chars); - return; - } - - if(instance->config.terminalFont.outputFormat.length == 0) - { - ffPrintLogoAndKey(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont.key); - ffStrbufPutTo(&terminalFont->font.pretty, stdout); - } - else - { - ffPrintFormat(instance, FF_TERMFONT_MODULE_NAME, 0, &instance->config.terminalFont, FF_TERMFONT_NUM_FORMAT_ARGS, (FFformatarg[]){ - {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.pretty}, - {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.name}, - {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.size}, - {FF_FORMAT_ARG_TYPE_LIST, &terminalFont->font.styles} - }); - } -} diff --git a/src/modules/terminalfont/option.h b/src/modules/terminalfont/option.h new file mode 100644 index 000000000..ba62efbb5 --- /dev/null +++ b/src/modules/terminalfont/option.h @@ -0,0 +1,11 @@ +#pragma once + +// This file will be included in "fastfetch.h", do NOT put unnecessary things here + +#include "common/option.h" + +typedef struct FFTerminalFontOptions +{ + const char* moduleName; + FFModuleArgs moduleArgs; +} FFTerminalFontOptions; diff --git a/src/modules/terminalfont/terminalfont.c b/src/modules/terminalfont/terminalfont.c new file mode 100644 index 000000000..afeb46919 --- /dev/null +++ b/src/modules/terminalfont/terminalfont.c @@ -0,0 +1,75 @@ +#include "fastfetch.h" +#include "common/printing.h" +#include "detection/terminalfont/terminalfont.h" +#include "modules/terminalfont/terminalfont.h" + +#define FF_TERMINALFONT_DISPLAY_NAME "Terminal Font" +#define FF_TERMINALFONT_NUM_FORMAT_ARGS 4 + +void ffPrintTerminalFont(FFinstance* instance, FFTerminalFontOptions* options) +{ + const FFTerminalFontResult* terminalFont = ffDetectTerminalFont(instance); + + if(terminalFont->error.length > 0) + { + ffPrintError(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs, "%s", terminalFont->error.chars); + return; + } + + if(options->moduleArgs.outputFormat.length == 0) + { + ffPrintLogoAndKey(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs.key); + ffStrbufPutTo(&terminalFont->font.pretty, stdout); + } + else + { + ffPrintFormat(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs, FF_TERMINALFONT_NUM_FORMAT_ARGS, (FFformatarg[]){ + {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.pretty}, + {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.name}, + {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.size}, + {FF_FORMAT_ARG_TYPE_LIST, &terminalFont->font.styles} + }); + } +} + +void ffInitTerminalFontOptions(FFTerminalFontOptions* options) +{ + options->moduleName = FF_TERMINALFONT_MODULE_NAME; + ffOptionInitModuleArg(&options->moduleArgs); +} + +bool ffParseTerminalFontCommandOptions(FFTerminalFontOptions* options, const char* key, const char* value) +{ + const char* subKey = ffOptionTestPrefix(key, FF_TERMINALFONT_MODULE_NAME); + if (!subKey) return false; + if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs)) + return true; + + return false; +} + +void ffDestroyTerminalFontOptions(FFTerminalFontOptions* options) +{ + ffOptionDestroyModuleArg(&options->moduleArgs); +} + +#ifdef FF_HAVE_JSONC +void ffParseTerminalFontJsonObject(FFinstance* instance, json_object* module) +{ + FFTerminalFontOptions __attribute__((__cleanup__(ffDestroyTerminalFontOptions))) options; + ffInitTerminalFontOptions(&options); + + if (module) + { + json_object_object_foreach(module, key, val) + { + if (ffJsonConfigParseModuleArgs(key, val, &options.moduleArgs)) + continue; + + ffPrintError(instance, FF_TERMINALFONT_MODULE_NAME, 0, &options.moduleArgs, "Unknown JSON key %s", key); + } + } + + ffPrintTerminalFont(instance, &options); +} +#endif diff --git a/src/modules/terminalfont/terminalfont.h b/src/modules/terminalfont/terminalfont.h new file mode 100644 index 000000000..336732917 --- /dev/null +++ b/src/modules/terminalfont/terminalfont.h @@ -0,0 +1,15 @@ +#pragma once + +#include "fastfetch.h" + +#define FF_TERMINALFONT_MODULE_NAME "TerminalFont" + +void ffPrintTerminalFont(FFinstance* instance, FFTerminalFontOptions* options); +void ffInitTerminalFontOptions(FFTerminalFontOptions* options); +bool ffParseTerminalFontCommandOptions(FFTerminalFontOptions* options, const char* key, const char* value); +void ffDestroyTerminalFontOptions(FFTerminalFontOptions* options); + +#ifdef FF_HAVE_JSONC +#include "common/jsonconfig.h" +void ffParseTerminalFontJsonObject(FFinstance* instance, json_object* module); +#endif