diff --git a/src/btop.cpp b/src/btop.cpp index 9ad5012..736854f 100644 --- a/src/btop.cpp +++ b/src/btop.cpp @@ -96,9 +96,9 @@ namespace Global { string exit_error_msg; atomic thread_exception (false); - bool debuginit{}; // defaults to false - bool debug{}; // defaults to false - bool utf_force{}; // defaults to false + bool debuginit{}; + bool debug{}; + bool utf_force{}; uint64_t start_time; @@ -107,9 +107,10 @@ namespace Global { atomic should_quit (false); atomic should_sleep (false); atomic _runner_started (false); + atomic init_conf (false); - bool arg_tty{}; // defaults to false - bool arg_low_color{}; // defaults to false + bool arg_tty{}; + bool arg_low_color{}; int arg_preset = -1; int arg_update = 0; } @@ -418,7 +419,7 @@ namespace Runner { string output; string empty_bg; - bool pause_output{}; // defaults to false + bool pause_output{}; sigset_t mask; pthread_t runner_id; pthread_mutex_t mtx; @@ -894,10 +895,10 @@ int main(int argc, char **argv) { } //? Config init - { vector load_warnings; + { + atomic_lock lck(Global::init_conf); + vector load_warnings; Config::load(Config::conf_file, load_warnings); - - if (Config::current_boxes.empty()) Config::check_boxes(Config::getS("shown_boxes")); Config::set("lowcolor", (Global::arg_low_color ? true : not Config::getB("truecolor"))); if (Global::debug) { @@ -918,7 +919,7 @@ int main(int argc, char **argv) { } else { string found; - bool set_failure{}; // defaults to false + bool set_failure{}; for (const auto loc_env : array{"LANG", "LC_ALL"}) { if (std::getenv(loc_env) != nullptr and str_to_upper(s_replace((string)std::getenv(loc_env), "-", "")).ends_with("UTF8")) { found = std::getenv(loc_env); @@ -1018,6 +1019,11 @@ int main(int argc, char **argv) { clean_quit(1); } + if (not Config::check_boxes(Config::getS("shown_boxes"))) { + Config::check_boxes("cpu mem net proc"); + Config::set("shown_boxes", "cpu mem net proc"s); + } + //? Update list of available themes and generate the selected theme Theme::updateThemes(); Theme::setTheme(); diff --git a/src/btop_config.cpp b/src/btop_config.cpp index b8a5f67..18e60ae 100644 --- a/src/btop_config.cpp +++ b/src/btop_config.cpp @@ -507,7 +507,7 @@ namespace Config { else if (name.starts_with("graph_symbol_") and (value != "default" and not v_contains(valid_graph_symbols, value))) validError = fmt::format("Invalid graph symbol identifier for {}: {}", name, value); - else if (name == "shown_boxes" and not value.empty() and not check_boxes(value)) + else if (name == "shown_boxes" and not Global::init_conf and not value.empty() and not check_boxes(value)) validError = "Invalid box name(s) in shown_boxes!"; #ifdef GPU_SUPPORT @@ -619,8 +619,7 @@ namespace Config { if (not v_contains(valid_boxes, box)) return false; #ifdef GPU_SUPPORT if (box.starts_with("gpu")) { - size_t gpu_num = stoi(box.substr(3)); - if (gpu_num == 0) gpu_num = 5; + size_t gpu_num = stoi(box.substr(3)) + 1; if (std::cmp_greater(gpu_num, Gpu::gpu_names.size())) return false; } #endif diff --git a/src/btop_draw.cpp b/src/btop_draw.cpp index eecec45..acab14c 100644 --- a/src/btop_draw.cpp +++ b/src/btop_draw.cpp @@ -307,8 +307,8 @@ namespace Draw { {"/uptime", ""} }; - static time_t c_time{}; // defaults to 0 - static size_t clock_len{}; // defaults to 0 + static time_t c_time{}; + static size_t clock_len{}; static string clock_str; if (auto n_time = time(nullptr); not force and n_time == c_time) diff --git a/src/btop_draw.hpp b/src/btop_draw.hpp index b049a57..205fa85 100644 --- a/src/btop_draw.hpp +++ b/src/btop_draw.hpp @@ -65,8 +65,8 @@ namespace Draw { //* An editable text field class TextEdit { - size_t pos{}; // defaults to 0 - size_t upos{}; // defaults to 0 + size_t pos{}; + size_t upos{}; bool numeric; public: string text; diff --git a/src/btop_menu.cpp b/src/btop_menu.cpp index bc97dc2..fb119aa 100644 --- a/src/btop_menu.cpp +++ b/src/btop_menu.cpp @@ -49,8 +49,8 @@ namespace Menu { bool redraw{true}; int currentMenu = -1; msgBox messageBox; - int signalToSend{}; // defaults to 0 - int signalKillRet{}; // defaults to 0 + int signalToSend{}; + int signalKillRet{}; const array P_Signals = { "0", @@ -868,8 +868,8 @@ namespace Menu { int signalChoose(const string& key) { auto s_pid = (Config::getB("show_detailed") and Config::getI("selected_pid") == 0 ? Config::getI("detailed_pid") : Config::getI("selected_pid")); - static int x{}; // defaults to 0 - static int y{}; // defaults to 0 + static int x{}; + static int y{}; static int selected_signal = -1; if (bg.empty()) selected_signal = -1; @@ -1070,8 +1070,8 @@ namespace Menu { int mainMenu(const string& key) { enum MenuItems { Options, Help, Quit }; - static int y{}; // defaults to 0 - static int selected{}; // defaults to 0 + static int y{}; + static int selected{}; static vector colors_selected; static vector colors_normal; auto tty_mode = Config::getB("tty_mode"); @@ -1149,18 +1149,18 @@ namespace Menu { int optionsMenu(const string& key) { enum Predispositions { isBool, isInt, isString, is2D, isBrowseable, isEditable}; - static int y{}; // defaults to 0 - static int x{}; // defaults to 0 - static int height{}; // defaults to 0 - static int page{}; // defaults to 0 - static int pages{}; // defaults to 0 - static int selected{}; // defaults to 0 - static int select_max{}; // defaults to 0 - static int item_height{}; // defaults to 0 - static int selected_cat{}; // defaults to 0 - static int max_items{}; // defaults to 0 - static int last_sel{}; // defaults to 0 - static bool editing{}; // defaults to false + static int y{}; + static int x{}; + static int height{}; + static int page{}; + static int pages{}; + static int selected{}; + static int select_max{}; + static int item_height{}; + static int selected_cat{}; + static int max_items{}; + static int last_sel{}; + static bool editing{}; static Draw::TextEdit editor; static string warnings; static bitset<8> selPred; @@ -1196,9 +1196,9 @@ namespace Menu { Theme::updateThemes(); } int retval = Changed; - bool recollect{}; // defaults to false - bool screen_redraw{}; // defaults to false - bool theme_refresh{}; // defaults to false + bool recollect{}; + bool screen_redraw{}; + bool theme_refresh{}; //? Draw background if needed else process input if (redraw) { @@ -1500,11 +1500,11 @@ namespace Menu { } int helpMenu(const string& key) { - static int y{}; // defaults to 0 - static int x{}; // defaults to 0 - static int height{}; // defaults to 0 - static int page{}; // defaults to 0 - static int pages{}; // defaults to 0 + static int y{}; + static int x{}; + static int height{}; + static int page{}; + static int pages{}; if (bg.empty()) page = 0; int retval = Changed; diff --git a/src/btop_menu.hpp b/src/btop_menu.hpp index 74b30d1..63974e4 100644 --- a/src/btop_menu.hpp +++ b/src/btop_menu.hpp @@ -46,12 +46,12 @@ namespace Menu { //? Strings in content vector is not checked for box width overflow class msgBox { string box_contents, button_left, button_right; - int height{}; // defaults to 0 - int width{}; // defaults to 0 - int boxtype{}; // defaults to 0 - int selected{}; // defaults to 0 - int x{}; // defaults to 0 - int y{}; // defaults to 0 + int height{}; + int width{}; + int boxtype{}; + int selected{}; + int x{}; + int y{}; public: enum BoxTypes { OK, YES_NO, NO_YES }; enum msgReturn { diff --git a/src/btop_shared.hpp b/src/btop_shared.hpp index ebd1073..69566c6 100644 --- a/src/btop_shared.hpp +++ b/src/btop_shared.hpp @@ -54,6 +54,7 @@ namespace Global { extern string overlay; extern string clock; extern uid_t real_uid, set_uid; + extern atomic init_conf; } namespace Runner { @@ -228,11 +229,11 @@ namespace Mem { string name; string fstype{}; // defaults to "" std::filesystem::path stat{}; // defaults to "" - int64_t total{}; // defaults to 0 - int64_t used{}; // defaults to 0 - int64_t free{}; // defaults to 0 - int used_percent{}; // defaults to 0 - int free_percent{}; // defaults to 0 + int64_t total{}; + int64_t used{}; + int64_t free{}; + int used_percent{}; + int free_percent{}; array old_io = {0, 0, 0}; deque io_read = {}; @@ -272,12 +273,12 @@ namespace Net { extern std::unordered_map graph_max; struct net_stat { - uint64_t speed{}; // defaults to 0 - uint64_t top{}; // defaults to 0 - uint64_t total{}; // defaults to 0 - uint64_t last{}; // defaults to 0 - uint64_t offset{}; // defaults to 0 - uint64_t rollover{}; // defaults to 0 + uint64_t speed{}; + uint64_t top{}; + uint64_t total{}; + uint64_t last{}; + uint64_t offset{}; + uint64_t rollover{}; }; struct net_info { @@ -285,7 +286,7 @@ namespace Net { std::unordered_map stat = { {"download", {}}, {"upload", {}} }; string ipv4{}; // defaults to "" string ipv6{}; // defaults to "" - bool connected{}; // defaults to false + bool connected{}; }; extern std::unordered_map current_net; @@ -337,32 +338,32 @@ namespace Proc { //* Container for process information struct proc_info { - size_t pid{}; // defaults to 0 + size_t pid{}; string name{}; // defaults to "" string cmd{}; // defaults to "" string short_cmd{}; // defaults to "" - size_t threads{}; // defaults to 0 - int name_offset{}; // defaults to 0 + size_t threads{}; + int name_offset{}; string user{}; // defaults to "" - uint64_t mem{}; // defaults to 0 + uint64_t mem{}; double cpu_p{}; // defaults to = 0.0 double cpu_c{}; // defaults to = 0.0 char state = '0'; - int64_t p_nice{}; // defaults to 0 - uint64_t ppid{}; // defaults to 0 - uint64_t cpu_s{}; // defaults to 0 - uint64_t cpu_t{}; // defaults to 0 + int64_t p_nice{}; + uint64_t ppid{}; + uint64_t cpu_s{}; + uint64_t cpu_t{}; string prefix{}; // defaults to "" - size_t depth{}; // defaults to 0 - size_t tree_index{}; // defaults to 0 - bool collapsed{}; // defaults to false - bool filtered{}; // defaults to false + size_t depth{}; + size_t tree_index{}; + bool collapsed{}; + bool filtered{}; }; //* Container for process info box struct detail_container { - size_t last_pid{}; // defaults to 0 - bool skip_smaps{}; // defaults to false + size_t last_pid{}; + bool skip_smaps{}; proc_info entry; string elapsed, parent, status, io_read, io_write, memory; long long first_mem = -1; diff --git a/src/btop_tools.cpp b/src/btop_tools.cpp index 47c53bc..8a85ed4 100644 --- a/src/btop_tools.cpp +++ b/src/btop_tools.cpp @@ -54,9 +54,9 @@ namespace rng = std::ranges; //* Collection of escape codes and functions for terminal manipulation namespace Term { - atomic initialized{}; // defaults to false - atomic width{}; // defaults to 0 - atomic height{}; // defaults to 0 + atomic initialized{}; + atomic width{}; + atomic height{}; string current_tty; namespace { diff --git a/src/btop_tools.hpp b/src/btop_tools.hpp index bda89f2..705a5eb 100644 --- a/src/btop_tools.hpp +++ b/src/btop_tools.hpp @@ -406,7 +406,7 @@ namespace Tools { //* Sets atomic to true on construct, sets to false on destruct class atomic_lock { atomic& atom; - bool not_true{}; // defaults to false + bool not_true{}; public: atomic_lock(atomic& atom, bool wait = false); ~atomic_lock(); diff --git a/src/linux/btop_collect.cpp b/src/linux/btop_collect.cpp index 677c3fe..0c1ab66 100644 --- a/src/linux/btop_collect.cpp +++ b/src/linux/btop_collect.cpp @@ -77,8 +77,8 @@ namespace Cpu { vector available_sensors = {"Auto"}; cpu_info current_cpu; fs::path freq_path = "/sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq"; - bool got_sensors{}; // defaults to false - bool cpu_temp_only{}; // defaults to false + bool got_sensors{}; + bool cpu_temp_only{}; //* Populate found_sensors map bool get_sensors(); @@ -92,9 +92,9 @@ namespace Cpu { struct Sensor { fs::path path; string label; - int64_t temp{}; // defaults to 0 - int64_t high{}; // defaults to 0 - int64_t crit{}; // defaults to 0 + int64_t temp{}; + int64_t high{}; + int64_t crit{}; }; std::unordered_map found_sensors; @@ -542,14 +542,14 @@ namespace Cpu { } string get_cpuHz() { - static int failed{}; // defaults to 0 + static int failed{}; if (failed > 4) return ""s; string cpuhz; try { - double hz{}; // defaults to 0.0 + double hz{}; //? Try to get freq from /sys/devices/system/cpu/cpufreq/policy first (faster) if (not freq_path.empty()) { hz = stod(readfile(freq_path, "0.0")) / 1000; @@ -605,9 +605,9 @@ namespace Cpu { //? Try to get core mapping from /proc/cpuinfo ifstream cpuinfo(Shared::procPath / "cpuinfo"); if (cpuinfo.good()) { - int cpu{}; // defaults to 0 - int core{}; // defaults to 0 - int n{}; // defaults to 0 + int cpu{}; + int core{}; + int n{}; for (string instr; cpuinfo >> instr;) { if (instr == "processor") { cpuinfo.ignore(SSmax, ':'); @@ -1508,10 +1508,10 @@ namespace Gpu { #endif namespace Mem { - bool has_swap{}; // defaults to false + bool has_swap{}; vector fstab; fs::file_time_type fstab_time; - int disk_ios{}; // defaults to 0 + int disk_ios{}; vector last_found; //?* Find the filepath to the specified ZFS object's stat file @@ -1999,10 +1999,10 @@ namespace Mem { int64_t bytes_read; int64_t bytes_write; int64_t io_ticks; - int64_t bytes_read_total{}; // defaults to 0 - int64_t bytes_write_total{}; // defaults to 0 - int64_t io_ticks_total{}; // defaults to 0 - int64_t objects_read{}; // defaults to 0 + int64_t bytes_read_total{}; + int64_t bytes_write_total{}; + int64_t io_ticks_total{}; + int64_t objects_read{}; // looking through all files that start with 'objset' for (const auto& file: fs::directory_iterator(disk.stat)) { @@ -2078,11 +2078,11 @@ namespace Net { net_info empty_net = {}; vector interfaces; string selected_iface; - int errors{}; // defaults to 0 + int errors{}; std::unordered_map graph_max = { {"download", {}}, {"upload", {}} }; std::unordered_map> max_count = { {"download", {}}, {"upload", {}} }; bool rescale{true}; - uint64_t timestamp{}; // defaults to 0 + uint64_t timestamp{}; //* RAII wrapper for getifaddrs class getifaddr_wrapper { @@ -2171,7 +2171,7 @@ namespace Net { auto& saved_stat = net.at(iface).stat.at(dir); auto& bandwidth = net.at(iface).bandwidth.at(dir); - uint64_t val{}; // defaults to 0 + uint64_t val{}; try { val = (uint64_t)stoull(readfile(sys_file, "0")); } catch (const std::invalid_argument&) {} catch (const std::out_of_range&) {} @@ -2291,15 +2291,15 @@ namespace Proc { std::unordered_map uid_user; string current_sort; string current_filter; - bool current_rev{}; // defaults to false + bool current_rev{}; fs::file_time_type passwd_time; uint64_t cputimes; int collapse = -1, expand = -1; - uint64_t old_cputimes{}; // defaults to 0 - atomic numpids{}; // defaults to 0 - int filter_found{}; // defaults to 0 + uint64_t old_cputimes{}; + atomic numpids{}; + int filter_found{}; detail_container detailed; constexpr size_t KTHREADD = 2; @@ -2431,7 +2431,7 @@ namespace Proc { const int cmult = (per_core) ? Shared::coreCount : 1; bool got_detailed = false; - static size_t proc_clear_count{}; // defaults to 0 + static size_t proc_clear_count{}; //* Use pids from last update if only changing filter, sorting or tree options if (no_update and not current_procs.empty()) { @@ -2506,7 +2506,7 @@ namespace Proc { //? Check if pid already exists in current_procs auto find_old = rng::find(current_procs, pid, &proc_info::pid); - bool no_cache{}; // defaults to false + bool no_cache{}; if (find_old == current_procs.end()) { current_procs.push_back({pid}); find_old = current_procs.end() - 1;