From 5e9f850fe15b41ff458f20a840b76ab8f6bf975d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 5 Jul 2023 15:47:47 +0800 Subject: [PATCH] Title: fix typo `fdqn` -> `fqdn`; support standard module args --- doc/json_schema.json | 9 +++++++ src/modules/separator/separator.c | 2 +- src/modules/title/option.h | 3 ++- src/modules/title/title.c | 44 +++++++++++++++++++++---------- 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/doc/json_schema.json b/doc/json_schema.json index cfb5e3fe0..6b03607df 100644 --- a/doc/json_schema.json +++ b/doc/json_schema.json @@ -965,6 +965,15 @@ "type": "boolean", "title": "Set if the title should use fully qualified domain name", "default": false + }, + "key": { + "$ref": "#/$defs/key" + }, + "keyColor": { + "$ref": "#/$defs/keyColor" + }, + "format": { + "$ref": "#/$defs/format" } }, "additionalProperties": false diff --git a/src/modules/separator/separator.c b/src/modules/separator/separator.c index 7a28f7bbe..79b53d27b 100644 --- a/src/modules/separator/separator.c +++ b/src/modules/separator/separator.c @@ -9,7 +9,7 @@ void ffPrintSeparator(FFSeparatorOptions* options) if (titleLength == 0) { // Title was not printed, should we support this case? - titleLength = instance.state.platform.userName.length + 1 + (instance.config.title.fdqn ? + titleLength = instance.state.platform.userName.length + 1 + (instance.config.title.fqdn ? instance.state.platform.domainName.length : instance.state.platform.hostName.length ); diff --git a/src/modules/title/option.h b/src/modules/title/option.h index 1faa59ea4..ac3902e09 100644 --- a/src/modules/title/option.h +++ b/src/modules/title/option.h @@ -7,6 +7,7 @@ typedef struct FFTitleOptions { const char* moduleName; + FFModuleArgs moduleArgs; - bool fdqn; + bool fqdn; } FFTitleOptions; diff --git a/src/modules/title/title.c b/src/modules/title/title.c index 6faacaf67..b5ffa9349 100644 --- a/src/modules/title/title.c +++ b/src/modules/title/title.c @@ -4,6 +4,8 @@ #include "util/textModifier.h" #include "util/stringUtils.h" +#define FF_TITLE_NUM_FORMAT_ARGS 2 + static inline void printTitlePart(const FFstrbuf* content) { if(!instance.config.pipe) @@ -20,34 +22,45 @@ static inline void printTitlePart(const FFstrbuf* content) void ffPrintTitle(FFTitleOptions* options) { - ffLogoPrintLine(); - - printTitlePart(&instance.state.platform.userName); - putchar('@'); - FFstrbuf* host = options->fdqn ? + FFstrbuf* host = options->fqdn ? &instance.state.platform.domainName : &instance.state.platform.hostName; - printTitlePart(host); + if (options->moduleArgs.outputFormat.length == 0) + { + ffPrintLogoAndKey(options->moduleArgs.key.length == 0 ? NULL : FF_TITLE_MODULE_NAME, 0, &options->moduleArgs.key, &options->moduleArgs.keyColor); + printTitlePart(&instance.state.platform.userName); + putchar('@'); + printTitlePart(host); + putchar('\n'); + } + else + { + ffPrintFormat(FF_TITLE_MODULE_NAME, 0, &options->moduleArgs, FF_TITLE_NUM_FORMAT_ARGS, (FFformatarg[]){ + {FF_FORMAT_ARG_TYPE_STRBUF, &instance.state.platform.userName}, + {FF_FORMAT_ARG_TYPE_STRBUF, host}, + }); + } instance.state.titleLength = instance.state.platform.userName.length + host->length + 1; - - putchar('\n'); } void ffInitTitleOptions(FFTitleOptions* options) { options->moduleName = FF_TITLE_MODULE_NAME; - options->fdqn = false; + ffOptionInitModuleArg(&options->moduleArgs); + options->fqdn = false; } bool ffParseTitleCommandOptions(FFTitleOptions* options, const char* key, const char* value) { const char* subKey = ffOptionTestPrefix(key, FF_TITLE_MODULE_NAME); if (!subKey) return false; + if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs)) + return true; - if (ffStrEqualsIgnCase(subKey, "fdqn")) + if (ffStrEqualsIgnCase(subKey, "fqdn")) { - options->fdqn = ffOptionParseBoolean(value); + options->fqdn = ffOptionParseBoolean(value); return true; } @@ -56,7 +69,7 @@ bool ffParseTitleCommandOptions(FFTitleOptions* options, const char* key, const void ffDestroyTitleOptions(FFTitleOptions* options) { - FF_UNUSED(options); + ffOptionDestroyModuleArg(&options->moduleArgs); } void ffParseTitleJsonObject(yyjson_val* module) @@ -74,9 +87,12 @@ void ffParseTitleJsonObject(yyjson_val* module) if(ffStrEqualsIgnCase(key, "type")) continue; - if (ffStrEqualsIgnCase(key, "fdqn")) + if (ffJsonConfigParseModuleArgs(key, val, &options.moduleArgs)) + continue; + + if (ffStrEqualsIgnCase(key, "fqdn")) { - options.fdqn = yyjson_get_bool(val); + options.fqdn = yyjson_get_bool(val); continue; }