From 1e6bf18c65a9083b30b7da339d2636eda4939c4a Mon Sep 17 00:00:00 2001 From: nobounce Date: Tue, 3 Oct 2023 13:54:28 +0200 Subject: [PATCH] Add flag to set the refresh rate from command line --- src/btop.cpp | 22 +++++++++++++++++++++- src/btop_config.cpp | 4 ++-- src/btop_config.hpp | 2 ++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/btop.cpp b/src/btop.cpp index 6c7eb99..9ad5012 100644 --- a/src/btop.cpp +++ b/src/btop.cpp @@ -16,6 +16,7 @@ indent = tab tab-size = 4 */ +#include #include #include #include @@ -51,6 +52,7 @@ tab-size = 4 #include "btop_theme.hpp" #include "btop_draw.hpp" #include "btop_menu.hpp" +#include "fmt/core.h" using std::atomic; using std::cout; @@ -109,6 +111,7 @@ namespace Global { bool arg_tty{}; // defaults to false bool arg_low_color{}; // defaults to false int arg_preset = -1; + int arg_update = 0; } //* A simple argument parser @@ -117,7 +120,7 @@ void argumentParser(const int argc, char **argv) { const string argument = argv[i]; if (is_in(argument, "-h", "--help")) { fmt::println( - "usage: btop [-h] [-v] [-/+t] [-p ] [--utf-force] [--debug]\n\n" + "usage: btop [-h] [-v] [-/+t] [-p ] [-u ] [--utf-force] [--debug]\n\n" "optional arguments:\n" " -h, --help show this help message and exit\n" " -v, --version show version info and exit\n" @@ -125,6 +128,7 @@ void argumentParser(const int argc, char **argv) { " -t, --tty_on force (ON) tty mode, max 16 colors and tty friendly graph symbols\n" " +t, --tty_off force (OFF) tty mode\n" " -p, --preset start with preset, integer value between 0-9\n" + " -u, --update set the program update rate in milliseconds\n" " --utf-force force start even if no UTF-8 locale was detected\n" " --debug start in DEBUG mode: shows microsecond timer for information collect\n" " and screen draw functions and sets loglevel to DEBUG" @@ -159,6 +163,19 @@ void argumentParser(const int argc, char **argv) { exit(1); } } + else if (is_in(argument, "-u", "--update")) { + if (++i >= argc) { + fmt::println("ERROR: Update option needs an argument"); + exit(1); + } + const std::string value = argv[i]; + if (isint(value)) { + Global::arg_update = std::clamp(std::stoi(value), 100, Config::ONE_DAY_MILLIS); + } else { + fmt::println("ERROR: Invalid update rate"); + exit(1); + } + } else if (argument == "--utf-force") Global::utf_force = true; else if (argument == "--debug") @@ -1054,6 +1071,9 @@ int main(int argc, char **argv) { //? ------------------------------------------------ MAIN LOOP ---------------------------------------------------- + if (Global::arg_update != 0) { + Config::set("update_ms", Global::arg_update); + } uint64_t update_ms = Config::getI("update_ms"); auto future_time = time_ms(); diff --git a/src/btop_config.cpp b/src/btop_config.cpp index 535d8c8..b8a5f67 100644 --- a/src/btop_config.cpp +++ b/src/btop_config.cpp @@ -488,8 +488,8 @@ namespace Config { if (name == "update_ms" and i_value < 100) validError = "Config value update_ms set too low (<100)."; - else if (name == "update_ms" and i_value > 86400000) - validError = "Config value update_ms set too high (>86400000)."; + else if (name == "update_ms" and i_value > ONE_DAY_MILLIS) + validError = fmt::format("Config value update_ms set too high (>{}).", ONE_DAY_MILLIS); else return true; diff --git a/src/btop_config.hpp b/src/btop_config.hpp index 8d1d579..3651566 100644 --- a/src/btop_config.hpp +++ b/src/btop_config.hpp @@ -58,6 +58,8 @@ namespace Config { extern vector available_batteries; extern int current_preset; + constexpr int ONE_DAY_MILLIS = 1000 * 60 * 60 * 24; + [[nodiscard]] std::optional get_config_dir() noexcept; //* Check if string only contains space separated valid names for boxes