Fastfetch: add new option --temperature-unit

This commit is contained in:
李通洲
2023-07-27 15:58:49 +08:00
parent c9741d1662
commit af2c6a832e
11 changed files with 81 additions and 10 deletions
+6
View File
@@ -314,6 +314,12 @@
"enum": ["B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"],
"default": "YB"
},
"temperatureUnit": {
"type": "string",
"title": "Set the unit of the temperature",
"enum": ["CELSIUS", "C", "FAHRENHEIT", "F", "KELVIN", "K"],
"default": "C"
},
"percentType": {
"type": "number",
"title": "Set the percentage output type. 1 for percentage number, 2 for bar, 3 for both, 6 for bar only, 9 for colored number",
+1
View File
@@ -63,6 +63,7 @@ static void defaultConfig(void)
instance.config.binaryPrefixType = FF_BINARY_PREFIX_TYPE_IEC;
instance.config.sizeNdigits = 2;
instance.config.sizeMaxPrefix = UINT8_MAX;
instance.config.temperatureUnit = FF_TEMPERATURE_UNIT_CELSIUS;
instance.config.multithreading = true;
instance.config.stat = false;
instance.config.noBuffer = false;
+15
View File
@@ -409,6 +409,21 @@ const char* ffParseDisplayJsonConfig(void)
if (error) return error;
config->sizeMaxPrefix = (uint8_t) value;
}
else if (ffStrEqualsIgnCase(key, "temperatureUnit"))
{
int value;
const char* error = ffJsonConfigParseEnum(val, &value, (FFKeyValuePair[]) {
{ "CELSIUS", FF_TEMPERATURE_UNIT_CELSIUS },
{ "C", FF_TEMPERATURE_UNIT_CELSIUS },
{ "FAHRENHEIT", FF_TEMPERATURE_UNIT_FAHRENHEIT },
{ "F", FF_TEMPERATURE_UNIT_FAHRENHEIT },
{ "KELVIN", FF_TEMPERATURE_UNIT_KELVIN },
{ "K", FF_TEMPERATURE_UNIT_KELVIN },
{},
});
if (error) return error;
config->temperatureUnit = (FFTemperatureUnit) value;
}
else if (ffStrEqualsIgnCase(key, "percentType"))
config->percentType = (uint32_t) yyjson_get_uint(val);
else if (ffStrEqualsIgnCase(key, "noBuffer"))
+16
View File
@@ -96,6 +96,22 @@ void ffParseSize(uint64_t bytes, FFstrbuf* result)
}
}
void ffParseTemperature(double celsius, FFstrbuf* buffer)
{
switch (instance.config.temperatureUnit)
{
case FF_TEMPERATURE_UNIT_CELSIUS:
ffStrbufAppendF(buffer, "%.1f°C", celsius);
break;
case FF_TEMPERATURE_UNIT_FAHRENHEIT:
ffStrbufAppendF(buffer, "%.1f°F", celsius * 1.8 + 32);
break;
case FF_TEMPERATURE_UNIT_KELVIN:
ffStrbufAppendF(buffer, "%.1f K", celsius + 273.15);
break;
}
}
void ffParseGTK(FFstrbuf* buffer, const FFstrbuf* gtk2, const FFstrbuf* gtk3, const FFstrbuf* gtk4)
{
if(gtk2->length > 0 && gtk3->length > 0 && gtk4->length > 0)
+1
View File
@@ -23,5 +23,6 @@ void ffVersionToPretty(const FFVersion* version, FFstrbuf* pretty);
int8_t ffVersionCompare(const FFVersion* version1, const FFVersion* version2);
void ffParseSize(uint64_t bytes, FFstrbuf* result);
void ffParseTemperature(double celsius, FFstrbuf* buffer);
#endif
+1
View File
@@ -69,6 +69,7 @@ Display options:
--no-buffer <?value>: Set if the stdout application buffer should be disabled. Default is false
--size-ndigits <value>: Set the number of digits to keep after the decimal point when formatting sizes
--size-max-prefix <value>: Set the largest binary prefix to use when formatting sizes. Default is YB
--temperature-unit <value>: Set the unit of the temperature. Must be one of C, F and K. Default is C
General module options:
--<module>-format <format>: Set the format string to use for each specific module.
+12
View File
@@ -935,6 +935,18 @@ static void parseOption(FFdata* data, const char* key, const char* value)
{}
});
}
else if(ffStrEqualsIgnCase(key, "--temperature-unit"))
{
instance.config.temperatureUnit = (FFTemperatureUnit) ffOptionParseEnum(key, value, (FFKeyValuePair[]) {
{ "CELSIUS", FF_TEMPERATURE_UNIT_CELSIUS },
{ "C", FF_TEMPERATURE_UNIT_CELSIUS },
{ "FAHRENHEIT", FF_TEMPERATURE_UNIT_FAHRENHEIT },
{ "F", FF_TEMPERATURE_UNIT_FAHRENHEIT },
{ "KELVIN", FF_TEMPERATURE_UNIT_KELVIN },
{ "K", FF_TEMPERATURE_UNIT_KELVIN },
{},
});
}
else if(ffStrEqualsIgnCase(key, "--percent-type"))
instance.config.percentType = ffOptionParseUInt32(key, value);
else if(ffStrEqualsIgnCase(key, "--no-buffer"))
+8
View File
@@ -24,6 +24,13 @@ typedef enum FFBinaryPrefixType
FF_BINARY_PREFIX_TYPE_JEDEC, // 1024 Bytes = 1 kB, 1024 K = 1 MB, ...
} FFBinaryPrefixType;
typedef enum FFTemperatureUnit
{
FF_TEMPERATURE_UNIT_CELSIUS,
FF_TEMPERATURE_UNIT_FAHRENHEIT,
FF_TEMPERATURE_UNIT_KELVIN,
} FFTemperatureUnit;
typedef struct FFconfig
{
FFLogoOptions logo;
@@ -43,6 +50,7 @@ typedef struct FFconfig
FFBinaryPrefixType binaryPrefixType;
uint8_t sizeNdigits;
uint8_t sizeMaxPrefix;
FFTemperatureUnit temperatureUnit;
bool pipe; //disables logo and all escape sequences
bool multithreading;
bool stat;
+2 -1
View File
@@ -1,6 +1,7 @@
#include "common/printing.h"
#include "common/jsonconfig.h"
#include "common/bar.h"
#include "common/parsing.h"
#include "detection/battery/battery.h"
#include "modules/battery/battery.h"
#include "util/stringUtils.h"
@@ -54,7 +55,7 @@ static void printBattery(FFBatteryOptions* options, BatteryResult* result, uint8
if(str.length > 0)
ffStrbufAppendS(&str, " - ");
ffStrbufAppendF(&str, "%.1f°C", result->temperature);
ffParseTemperature(result->temperature, &str);
}
ffStrbufPutTo(&str, stdout);
+14 -8
View File
@@ -1,5 +1,6 @@
#include "common/printing.h"
#include "common/jsonconfig.h"
#include "common/parsing.h"
#include "detection/cpu/cpu.h"
#include "modules/cpu/cpu.h"
#include "util/stringUtils.h"
@@ -31,26 +32,31 @@ void ffPrintCPU(FFCPUOptions* options)
{
ffPrintLogoAndKey(FF_CPU_MODULE_NAME, 0, &options->moduleArgs.key, &options->moduleArgs.keyColor);
FF_STRBUF_AUTO_DESTROY str = ffStrbufCreate();
if(cpu.name.length > 0)
ffStrbufWriteTo(&cpu.name, stdout);
ffStrbufAppend(&str, &cpu.name);
else if(cpu.vendor.length > 0)
{
ffStrbufWriteTo(&cpu.vendor, stdout);
fputs(" CPU", stdout);
ffStrbufAppend(&str, &cpu.vendor);
ffStrbufAppendS(&str, " CPU");
}
else
fputs("CPU", stdout);
ffStrbufAppendS(&str, "Unknown");
if(cpu.coresOnline > 1)
printf(" (%u)", cpu.coresOnline);
ffStrbufAppendF(&str, " (%u)", cpu.coresOnline);
if(cpu.frequencyMax > 0.0)
printf(" @ %.9g GHz", cpu.frequencyMax);
ffStrbufAppendF(&str, " @ %.9g GHz", cpu.frequencyMax);
if(cpu.temperature == cpu.temperature) //FF_CPU_TEMP_UNSET
printf(" - %.1f°C", cpu.temperature);
{
ffStrbufAppendS(&str, " - ");
ffParseTemperature(cpu.temperature, &str);
}
putchar('\n');
ffStrbufPutTo(&str, stdout);
}
else
{
+5 -1
View File
@@ -2,6 +2,7 @@
#include "common/parsing.h"
#include "common/printing.h"
#include "common/jsonconfig.h"
#include "common/parsing.h"
#include "detection/host/host.h"
#include "detection/gpu/gpu.h"
#include "modules/gpu/gpu.h"
@@ -39,7 +40,10 @@ static void printGPUResult(FFGPUOptions* options, uint8_t index, const FFGPUResu
ffStrbufAppendF(&output, " (%d)", gpu->coreCount);
if(gpu->temperature == gpu->temperature) //FF_GPU_TEMP_UNSET
ffStrbufAppendF(&output, " - %.1f°C", gpu->temperature);
{
ffStrbufAppendS(&output, " - ");
ffParseTemperature(gpu->temperature, &output);
}
if(gpu->dedicated.total != FF_GPU_VMEM_SIZE_UNSET && gpu->dedicated.total != 0)
{