diff options
| author | Josh Rahm <rahm@google.com> | 2021-11-02 20:15:32 -0600 |
|---|---|---|
| committer | Josh Rahm <joshuarahm@gmail.com> | 2022-10-09 12:19:45 -0600 |
| commit | b08e88ef0c569cd000cae836f3c86801a661f8cb (patch) | |
| tree | 35513423208a35a7f45048954f005f91fd94885a /xmobar | |
| parent | cf47b5282be2a62da2aba1a88c8f9599a333b961 (diff) | |
| download | rde-b08e88ef0c569cd000cae836f3c86801a661f8cb.tar.gz rde-b08e88ef0c569cd000cae836f3c86801a661f8cb.tar.bz2 rde-b08e88ef0c569cd000cae836f3c86801a661f8cb.zip | |
More XMobar sexiness.
Revamped the install script to make it easier to handle the install
process.
Diffstat (limited to 'xmobar')
| -rw-r--r-- | xmobar/extras/battery/battery.c | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/xmobar/extras/battery/battery.c b/xmobar/extras/battery/battery.c index 8e5e58e..791bc69 100644 --- a/xmobar/extras/battery/battery.c +++ b/xmobar/extras/battery/battery.c @@ -13,7 +13,7 @@ char* icons[] = { "", "", "", - "", + "", "", "", "", @@ -162,14 +162,22 @@ uint32_t percentage_to_color(int percentage) return hsv_to_rgb(h, s, v); } -void get_time_left(char* buf, size_t sz, llong_t energy, llong_t power) +void get_time_left( + char* buf, + size_t sz, + llong_t energy, + llong_t power) { + if (power == 0) { + buf[0] = 0; + return; + } llong_t minutes_left = energy * 60 / power; llong_t hours = minutes_left / 60; llong_t minutes = minutes_left % 60; - snprintf(buf, sz - 1, "%2lluh%2llum", hours, minutes); + snprintf(buf, sz - 1, "%lluh%2llum", hours, minutes); buf[sz - 1] = 0; } @@ -177,9 +185,12 @@ int main(int argc, char** argv) { char* icon; char timeleft[128]; + char watts[128]; + char percent[128]; llong_t capacity; llong_t energy_now; + llong_t energy_full; llong_t ac_online; llong_t power; @@ -206,18 +217,37 @@ int main(int argc, char** argv) ac_online = !! ac_online; int percentage = (int) capacity; - if (percentage >= 100) { + if (percentage >= 98) { icon = icons[10 + ac_online]; } else { int quintile = percentage / 20; icon = icons[quintile + (5 * ac_online) ]; } - get_time_left(timeleft, sizeof(timeleft), energy_now, power); + if (ac_online) { + if ((energy_full = get_energy_full()) < 0) { + fprintf(stderr, "Unable to get current energy."); + goto fail; + } + get_time_left(timeleft, sizeof(timeleft), energy_full - energy_now, power); + } else { + get_time_left(timeleft, sizeof(timeleft), energy_now, power); + } + + watts[0] = 0; + percent[0] = 0; + if (power) { + double dpower = power / 1000000.0; + snprintf(watts, sizeof(watts), "%2.1fW ", dpower); + } + + if (percentage < 99 || ! ac_online) { + snprintf(percent, sizeof(percent), "%2d%% ", percentage); + } - double dpower = power / 1000000.0; uint32_t color = percentage_to_color(percentage); - printf("<fc=#%06x>%s </fc><fc=#8888ff>%d%% %2.1fW %s</fc>", color, icon, percentage, dpower, timeleft); + printf("<fc=#%06x>%s </fc><fn=3><fc=#a0a0a0>%s%s%s</fc></fn>", + color, icon, percent, watts, timeleft); return 0; fail: |