mirror of
https://github.com/aristocratos/btop.git
synced 2024-05-29 08:41:19 +12:00
Added battery info in Cpu::draw()
This commit is contained in:
parent
07c468a8b7
commit
cffa303270
10
CHANGELOG.md
10
CHANGELOG.md
|
@ -1,9 +1,3 @@
|
||||||
## v0.9.0
|
## v1.0.0
|
||||||
|
|
||||||
* Test release
|
* First release for Linux
|
||||||
* Testing...
|
|
||||||
|
|
||||||
## v0.8.0
|
|
||||||
|
|
||||||
* Filler
|
|
||||||
* Testing...
|
|
||||||
|
|
11
Makefile
11
Makefile
|
@ -19,6 +19,10 @@ ifeq ($(ARCH),x86_64)
|
||||||
override ADDFLAGS += -fcf-protection
|
override ADDFLAGS += -fcf-protection
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(STATIC),true)
|
||||||
|
override ADDFLAGS += -static -static-libgcc -static-libstdc++
|
||||||
|
endif
|
||||||
|
|
||||||
#? Make sure PLATFORM Darwin is OSX and not Darwin
|
#? Make sure PLATFORM Darwin is OSX and not Darwin
|
||||||
ifeq ($(PLATFORM),Darwin)
|
ifeq ($(PLATFORM),Darwin)
|
||||||
ifeq ($(shell sw_vers >/dev/null 2>&1; echo $$?),0)
|
ifeq ($(shell sw_vers >/dev/null 2>&1; echo $$?),0)
|
||||||
|
@ -74,7 +78,7 @@ OBJEXT := o
|
||||||
override REQFLAGS := -std=c++20
|
override REQFLAGS := -std=c++20
|
||||||
WARNFLAGS := -Wall -Wextra -pedantic
|
WARNFLAGS := -Wall -Wextra -pedantic
|
||||||
OPTFLAGS ?= -O2 -ftree-loop-vectorize -flto=$(THREADS)
|
OPTFLAGS ?= -O2 -ftree-loop-vectorize -flto=$(THREADS)
|
||||||
LDCXXFLAGS := -pthread -D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector -fstack-clash-protection -static $(ADDFLAGS)
|
LDCXXFLAGS := -pthread -D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector -fstack-clash-protection $(ADDFLAGS)
|
||||||
override CXXFLAGS += $(REQFLAGS) $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS)
|
override CXXFLAGS += $(REQFLAGS) $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS)
|
||||||
override LDFLAGS += $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS)
|
override LDFLAGS += $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS)
|
||||||
INC := -I$(INCDIR) -I$(SRCDIR)
|
INC := -I$(INCDIR) -I$(SRCDIR)
|
||||||
|
@ -106,14 +110,15 @@ pre:
|
||||||
@printf "\n\033[1;92mBuilding btop++ \033[93m(\033[97mv$(BTOP_VERSION)\033[93m)\033[0m\n"
|
@printf "\n\033[1;92mBuilding btop++ \033[93m(\033[97mv$(BTOP_VERSION)\033[93m)\033[0m\n"
|
||||||
|
|
||||||
help:
|
help:
|
||||||
|
@printf " $(BANNER)\n"
|
||||||
@printf "\033[1;97mbtop++ makefile\033[0m\n"
|
@printf "\033[1;97mbtop++ makefile\033[0m\n"
|
||||||
@printf "usage: make [argument]\n\n"
|
@printf "usage: make [argument]\n\n"
|
||||||
@printf "arguments:\n"
|
@printf "arguments:\n"
|
||||||
@printf " all Compile btop (default argument)\n"
|
@printf " all Compile btop (default argument)\n"
|
||||||
@printf " clean Remove built objects\n"
|
@printf " clean Remove built objects\n"
|
||||||
@printf " distclean Remove built objects and binaries\n"
|
@printf " distclean Remove built objects and binaries\n"
|
||||||
@printf " install Install btop++ to \$$PREFIX\n"
|
@printf " install Install btop++ to \$$PREFIX ($(PREFIX))\n"
|
||||||
@printf " setuid Set installed binary owner/group to \$$SU_USER/\$$SU_OWNER and set SUID bit\n"
|
@printf " setuid Set installed binary owner/group to \$$SU_USER/\$$SU_GROUP ($(SU_USER)/$(SU_GROUP)) and set SUID bit\n"
|
||||||
@printf " uninstall Uninstall btop++ from \$$PREFIX\n"
|
@printf " uninstall Uninstall btop++ from \$$PREFIX\n"
|
||||||
|
|
||||||
#? Make the Directories
|
#? Make the Directories
|
||||||
|
|
26
README.md
26
README.md
|
@ -157,7 +157,7 @@ Also needs a UTF8 locale and a font that covers:
|
||||||
|
|
||||||
3. **(Optional) Set suid bit to make btop always run as root (or other user)**
|
3. **(Optional) Set suid bit to make btop always run as root (or other user)**
|
||||||
|
|
||||||
No need for `sudo` to enable signal sending to any process and to prevent /proc read permissions problems on some systems.
|
Enables signal sending to any process without starting with `sudo` and can prevent /proc read permissions problems on some systems.
|
||||||
|
|
||||||
* **Run setuid.sh or:**
|
* **Run setuid.sh or:**
|
||||||
|
|
||||||
|
@ -175,11 +175,19 @@ Also needs a UTF8 locale and a font that covers:
|
||||||
sudo make uninstall
|
sudo make uninstall
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* **Show help**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make help
|
||||||
|
```
|
||||||
|
|
||||||
## Compilation
|
## Compilation
|
||||||
|
|
||||||
Needs GCC 10 or higher, (GCC 11 or above strongly recommended for better CPU efficiency in the compiled binary).
|
Needs GCC 10 or higher, (GCC 11 or above strongly recommended for better CPU efficiency in the compiled binary).
|
||||||
|
|
||||||
The makefile also needs GNU coreutils and sed (should already be installed on any modern distribution).
|
Only 64-bit for now.
|
||||||
|
|
||||||
|
The makefile also needs GNU coreutils and `sed` (should already be installed on any modern distribution).
|
||||||
|
|
||||||
1. **Install dependencies (example for Ubuntu 21.04 Hirsute)**
|
1. **Install dependencies (example for Ubuntu 21.04 Hirsute)**
|
||||||
|
|
||||||
|
@ -197,7 +205,11 @@ Also needs a UTF8 locale and a font that covers:
|
||||||
|
|
||||||
3. **Compile**
|
3. **Compile**
|
||||||
|
|
||||||
Notice! Manually set $ARCH if cross-compiling
|
Append `STATIC=true` to `make` command for static compilation.
|
||||||
|
|
||||||
|
Notice! Manually set `$ARCH` variable if cross-compiling
|
||||||
|
|
||||||
|
Use `$ADDFLAGS` variable for appending flags to both compiler and linker.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
make
|
make
|
||||||
|
@ -239,6 +251,12 @@ Also needs a UTF8 locale and a font that covers:
|
||||||
make distclean
|
make distclean
|
||||||
```
|
```
|
||||||
|
|
||||||
|
* **Show help**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make help
|
||||||
|
```
|
||||||
|
|
||||||
## Configurability
|
## Configurability
|
||||||
|
|
||||||
All options changeable from within UI.
|
All options changeable from within UI.
|
||||||
|
@ -442,7 +460,7 @@ optional arguments:
|
||||||
-lc, --low-color disable truecolor, converts 24-bit colors to 256-color
|
-lc, --low-color disable truecolor, converts 24-bit colors to 256-color
|
||||||
-t, --tty_on force (ON) tty mode, max 16 colors and tty friendly graph symbols
|
-t, --tty_on force (ON) tty mode, max 16 colors and tty friendly graph symbols
|
||||||
+t, --tty_off force (OFF) tty mode
|
+t, --tty_off force (OFF) tty mode
|
||||||
--utf-foce force start even if no UTF-8 locale was detected
|
--utf-foce force start even if no UTF-8 locale was detected
|
||||||
--debug start in DEBUG mode: shows microsecond timer for information collect
|
--debug start in DEBUG mode: shows microsecond timer for information collect
|
||||||
and screen draw functions and sets loglevel to DEBUG
|
and screen draw functions and sets loglevel to DEBUG
|
||||||
```
|
```
|
||||||
|
|
|
@ -91,14 +91,14 @@ void argumentParser(const int& argc, char **argv) {
|
||||||
for(int i = 1; i < argc; i++) {
|
for(int i = 1; i < argc; i++) {
|
||||||
const string argument = argv[i];
|
const string argument = argv[i];
|
||||||
if (is_in(argument, "-h", "--help")) {
|
if (is_in(argument, "-h", "--help")) {
|
||||||
cout << "usage: btop [-h] [-v] [-/+t] [--debug]\n\n"
|
cout << "usage: btop [-h] [-v] [-/+t] [--utf-foce] [--debug]\n\n"
|
||||||
<< "optional arguments:\n"
|
<< "optional arguments:\n"
|
||||||
<< " -h, --help show this help message and exit\n"
|
<< " -h, --help show this help message and exit\n"
|
||||||
<< " -v, --version show version info and exit\n"
|
<< " -v, --version show version info and exit\n"
|
||||||
<< " -lc, --low-color disable truecolor, converts 24-bit colors to 256-color\n"
|
<< " -lc, --low-color disable truecolor, converts 24-bit colors to 256-color\n"
|
||||||
<< " -t, --tty_on force (ON) tty mode, max 16 colors and tty friendly graph symbols\n"
|
<< " -t, --tty_on force (ON) tty mode, max 16 colors and tty friendly graph symbols\n"
|
||||||
<< " +t, --tty_off force (OFF) tty mode\n"
|
<< " +t, --tty_off force (OFF) tty mode\n"
|
||||||
<< " --utf-foce force start even if no UTF-8 locale was detected\n"
|
<< " --utf-foce force start even if no UTF-8 locale was detected\n"
|
||||||
<< " --debug start in DEBUG mode: shows microsecond timer for information collect\n"
|
<< " --debug start in DEBUG mode: shows microsecond timer for information collect\n"
|
||||||
<< " and screen draw functions and sets loglevel to DEBUG\n"
|
<< " and screen draw functions and sets loglevel to DEBUG\n"
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
|
@ -309,7 +309,7 @@ namespace Draw {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clock_str = uresize(clock_str, std::max(0, width - 56));
|
clock_str = uresize(clock_str, std::max(10, width - 66 - (Term::width >= 100 and Config::getB("show_battery") and Cpu::has_battery ? 22 : 0)));
|
||||||
out.clear();
|
out.clear();
|
||||||
|
|
||||||
if (clock_str.size() != clock_len) {
|
if (clock_str.size() != clock_len) {
|
||||||
|
@ -472,6 +472,21 @@ namespace Cpu {
|
||||||
vector<Draw::Graph> core_graphs;
|
vector<Draw::Graph> core_graphs;
|
||||||
vector<Draw::Graph> temp_graphs;
|
vector<Draw::Graph> temp_graphs;
|
||||||
|
|
||||||
|
unsigned long fastrand(void) {
|
||||||
|
static unsigned long x=123456789, y=362436069, z=521288629;
|
||||||
|
unsigned long t;
|
||||||
|
x ^= x << 16;
|
||||||
|
x ^= x >> 5;
|
||||||
|
x ^= x << 1;
|
||||||
|
|
||||||
|
t = x;
|
||||||
|
x = y;
|
||||||
|
y = z;
|
||||||
|
z = t ^ x ^ y;
|
||||||
|
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
string draw(const cpu_info& cpu, const bool force_redraw, const bool data_same) {
|
string draw(const cpu_info& cpu, const bool force_redraw, const bool data_same) {
|
||||||
if (Runner::stopping) return "";
|
if (Runner::stopping) return "";
|
||||||
if (force_redraw) redraw = true;
|
if (force_redraw) redraw = true;
|
||||||
|
@ -485,18 +500,20 @@ namespace Cpu {
|
||||||
auto& graph_symbol = (tty_mode ? "tty" : Config::getS("graph_symbol_cpu"));
|
auto& graph_symbol = (tty_mode ? "tty" : Config::getS("graph_symbol_cpu"));
|
||||||
auto& graph_bg = Symbols::graph_symbols.at((graph_symbol == "default" ? Config::getS("graph_symbol") + "_up" : graph_symbol + "_up")).at(6);
|
auto& graph_bg = Symbols::graph_symbols.at((graph_symbol == "default" ? Config::getS("graph_symbol") + "_up" : graph_symbol + "_up")).at(6);
|
||||||
auto& temp_scale = Config::getS("temp_scale");
|
auto& temp_scale = Config::getS("temp_scale");
|
||||||
|
auto& cpu_bottom = Config::getB("cpu_bottom");
|
||||||
|
const string& title_left = Theme::c("cpu_box") + (cpu_bottom ? Symbols::title_left_down : Symbols::title_left);
|
||||||
|
const string& title_right = Theme::c("cpu_box") + (cpu_bottom ? Symbols::title_right_down : Symbols::title_right);
|
||||||
|
static int bat_pos = 0, bat_len = 0;
|
||||||
string out;
|
string out;
|
||||||
out.reserve(width * height);
|
out.reserve(width * height);
|
||||||
|
|
||||||
//* Redraw elements not needed to be updated every cycle
|
//* Redraw elements not needed to be updated every cycle
|
||||||
if (redraw) {
|
if (redraw) {
|
||||||
auto& cpu_bottom = Config::getB("cpu_bottom");
|
|
||||||
mid_line = (not single_graph and graph_up_field != graph_lo_field);
|
mid_line = (not single_graph and graph_up_field != graph_lo_field);
|
||||||
graph_up_height = (single_graph ? height - 2 : ceil((double)(height - 2) / 2) - (mid_line and height % 2 != 0 ? 1 : 0));
|
graph_up_height = (single_graph ? height - 2 : ceil((double)(height - 2) / 2) - (mid_line and height % 2 != 0 ? 1 : 0));
|
||||||
const int graph_low_height = height - 2 - graph_up_height - (mid_line ? 1 : 0);
|
const int graph_low_height = height - 2 - graph_up_height - (mid_line ? 1 : 0);
|
||||||
const int button_y = cpu_bottom ? y + height - 1 : y;
|
const int button_y = cpu_bottom ? y + height - 1 : y;
|
||||||
out += box;
|
out += box;
|
||||||
const string title_left = Theme::c("cpu_box") + (cpu_bottom ? Symbols::title_left_down : Symbols::title_left);
|
|
||||||
const string title_right = Theme::c("cpu_box") + (cpu_bottom ? Symbols::title_right_down : Symbols::title_right);
|
|
||||||
|
|
||||||
//? Buttons on title
|
//? Buttons on title
|
||||||
out += Mv::to(button_y, x + 10) + title_left + Theme::c("hi_fg") + Fx::b + 'm' + Theme::c("title") + "enu" + Fx::ub + title_right;
|
out += Mv::to(button_y, x + 10) + title_left + Theme::c("hi_fg") + Fx::b + 'm' + Theme::c("title") + "enu" + Fx::ub + title_right;
|
||||||
|
@ -549,14 +566,31 @@ namespace Cpu {
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto& [percent, seconds, status] = current_bat;
|
const auto& [percent, seconds, status] = current_bat;
|
||||||
|
|
||||||
if (redraw or percent != old_percent or seconds != old_seconds or status != old_status) {
|
if (redraw or percent != old_percent or seconds != old_seconds or status != old_status) {
|
||||||
old_percent = percent;
|
old_percent = percent;
|
||||||
old_seconds = seconds;
|
old_seconds = seconds;
|
||||||
old_status = status;
|
old_status = status;
|
||||||
const string bat_time = (seconds > 0 ? to_string(seconds / 3600) + ':' + to_string((seconds % 3600) / 60) : "");
|
const string str_time = (seconds > 0 ? sec_to_dhms(seconds, true, true) : "");
|
||||||
|
const string str_percent = to_string(percent) + '%';
|
||||||
const auto& bat_symbol = bat_symbols.at((bat_symbols.contains(status) ? status : "unknown"));
|
const auto& bat_symbol = bat_symbols.at((bat_symbols.contains(status) ? status : "unknown"));
|
||||||
|
const int current_len = (Term::width >= 100 ? 11 : 0) + str_time.size() + str_percent.size() + to_string(Config::getI("update_ms")).size();
|
||||||
|
const int current_pos = Term::width - current_len - 17;
|
||||||
|
|
||||||
|
if ((bat_pos != current_pos or bat_len != current_len) and bat_pos > 0 and not redraw)
|
||||||
|
out += Mv::to(y, bat_pos) + Fx::ub + Theme::c("cpu_box") + Symbols::h_line * (bat_len + 4);
|
||||||
|
bat_pos = current_pos;
|
||||||
|
bat_len = current_len;
|
||||||
|
|
||||||
|
out += Mv::to(y, bat_pos) + title_left + Theme::c("title") + Fx::b + "BAT" + bat_symbol + ' ' + str_percent
|
||||||
|
+ (Term::width >= 100 ? Fx::ub + ' ' + bat_meter(percent) + Fx::b : "")
|
||||||
|
+ (not str_time.empty() ? ' ' + Theme::c("title") + str_time : "") + Fx::ub + title_right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (bat_pos > 0) {
|
||||||
|
out += Mv::to(y, bat_pos) + Fx::ub + Theme::c("cpu_box") + Symbols::h_line * (bat_len + 4);
|
||||||
|
bat_pos = bat_len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
//? Cpu graphs
|
//? Cpu graphs
|
||||||
|
|
|
@ -257,14 +257,14 @@ namespace Tools {
|
||||||
return (newstr.empty()) ? str : newstr + (string)oldstr;
|
return (newstr.empty()) ? str : newstr + (string)oldstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
string sec_to_dhms(size_t seconds) {
|
string sec_to_dhms(size_t seconds, bool no_days, bool no_seconds) {
|
||||||
size_t days = seconds / 86400; seconds %= 86400;
|
size_t days = seconds / 86400; seconds %= 86400;
|
||||||
size_t hours = seconds / 3600; seconds %= 3600;
|
size_t hours = seconds / 3600; seconds %= 3600;
|
||||||
size_t minutes = seconds / 60; seconds %= 60;
|
size_t minutes = seconds / 60; seconds %= 60;
|
||||||
string out = (days > 0 ? to_string(days) + "d " : "")
|
string out = (not no_days and days > 0 ? to_string(days) + "d " : "")
|
||||||
+ (hours < 10 ? "0" : "") + to_string(hours) + ":"
|
+ (hours < 10 ? "0" : "") + to_string(hours) + ':'
|
||||||
+ (minutes < 10 ? "0" : "") + to_string(minutes) + ":"
|
+ (minutes < 10 ? "0" : "") + to_string(minutes)
|
||||||
+ (seconds < 10 ? "0" : "") + to_string(seconds);
|
+ (not no_seconds ? ':' + (seconds < 10 ? "0" : "") + to_string(seconds) : "");
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -252,7 +252,7 @@ namespace Tools {
|
||||||
string trans(const string& str);
|
string trans(const string& str);
|
||||||
|
|
||||||
//* Convert seconds to format "<days>d <hours>:<minutes>:<seconds>" and return string
|
//* Convert seconds to format "<days>d <hours>:<minutes>:<seconds>" and return string
|
||||||
string sec_to_dhms(size_t seconds);
|
string sec_to_dhms(size_t seconds, bool no_days=false, bool no_seconds=false);
|
||||||
|
|
||||||
//* Scales up in steps of 1024 to highest positive value unit and returns string with unit suffixed
|
//* Scales up in steps of 1024 to highest positive value unit and returns string with unit suffixed
|
||||||
//* bit=True or defaults to bytes
|
//* bit=True or defaults to bytes
|
||||||
|
|
Loading…
Reference in a new issue