| slstatus-battery-notify-20240127-a56a0a5.diff - sites - public wiki contents of… | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| slstatus-battery-notify-20240127-a56a0a5.diff (3781B) | |
| --- | |
| 1 From a56a0a5f8314caa21b2e3ce9be8537134ac67bfe Mon Sep 17 00:00:00 2001 | |
| 2 From: keroles <[email protected]> | |
| 3 Date: Sat, 27 Jan 2024 22:36:01 +0200 | |
| 4 Subject: [PATCH] add stdlib and some comments for battery notify patch: | |
| 5 | |
| 6 --- | |
| 7 components/battery.c | 50 ++++++++++++++++++++++++++++++++++++++++++++ | |
| 8 config.def.h | 11 ++++++++++ | |
| 9 slstatus.h | 1 + | |
| 10 3 files changed, 62 insertions(+) | |
| 11 | |
| 12 diff --git a/components/battery.c b/components/battery.c | |
| 13 index 1c753f9..f97db41 100644 | |
| 14 --- a/components/battery.c | |
| 15 +++ b/components/battery.c | |
| 16 @@ -1,6 +1,7 @@ | |
| 17 /* See LICENSE file for copyright and license details. */ | |
| 18 #include <stdio.h> | |
| 19 #include <string.h> | |
| 20 +#include <stdlib.h> | |
| 21 | |
| 22 #include "../slstatus.h" | |
| 23 #include "../util.h" | |
| 24 @@ -20,6 +21,12 @@ | |
| 25 #define POWER_SUPPLY_CURRENT "/sys/class/power_supply/%s/curre… | |
| 26 #define POWER_SUPPLY_POWER "/sys/class/power_supply/%s/power… | |
| 27 | |
| 28 + const char notify_cmd[] = "notify-send"; | |
| 29 + const char battery_str[] = "Battery"; | |
| 30 + int last_notified_level = 0; | |
| 31 + | |
| 32 + extern const int notifiable_levels[]; | |
| 33 + | |
| 34 static const char * | |
| 35 pick(const char *bat, const char *f1, const char *f2, char *pat… | |
| 36 size_t length) | |
| 37 @@ -49,6 +56,49 @@ | |
| 38 return bprintf("%d", cap_perc); | |
| 39 } | |
| 40 | |
| 41 + void battery_notify(const char *bat) | |
| 42 +{ | |
| 43 + int cap_perc; | |
| 44 + char state[12]; | |
| 45 + char path[PATH_MAX]; | |
| 46 + | |
| 47 + if (esnprintf(path, sizeof(path), POWER_SUPPLY_CAPACITY, bat) <… | |
| 48 + return; | |
| 49 + | |
| 50 + if (esnprintf(path, sizeof(path), POWER_SUPPLY_STATUS, bat) < 0… | |
| 51 + return; | |
| 52 + | |
| 53 + if (strcmp("Charging", state) == 0) | |
| 54 + { | |
| 55 + last_notified_level = 0; | |
| 56 + | |
| 57 + return; | |
| 58 + } | |
| 59 + | |
| 60 + if (strcmp("Discharging", state) != 0) | |
| 61 + return; | |
| 62 + | |
| 63 + size_t i; | |
| 64 + const int size = sizeof(*notifiable_levels); | |
| 65 + char cmd[28]; | |
| 66 + | |
| 67 + for (i = 0; i < size; i++) | |
| 68 + { | |
| 69 + if (notifiable_levels[i] != cap_perc) | |
| 70 + continue; | |
| 71 + | |
| 72 + if (notifiable_levels[i] != last_notified_level) | |
| 73 + { | |
| 74 + last_notified_level = notifiable_levels[i]; | |
| 75 + | |
| 76 + snprintf(cmd, 100, "%s %s %d%%", notify_cmd, ba… | |
| 77 + system(cmd); | |
| 78 + | |
| 79 + break; | |
| 80 + } | |
| 81 + } | |
| 82 +} | |
| 83 + | |
| 84 const char * | |
| 85 battery_state(const char *bat) | |
| 86 { | |
| 87 diff --git a/config.def.h b/config.def.h | |
| 88 index d805331..35d5aa0 100644 | |
| 89 --- a/config.def.h | |
| 90 +++ b/config.def.h | |
| 91 @@ -9,11 +9,20 @@ static const char unknown_str[] = "n/a"; | |
| 92 /* maximum output string length */ | |
| 93 #define MAXLEN 2048 | |
| 94 | |
| 95 +/* battery levels to notify - add any levels you want to receive notifi… | |
| 96 +const int notifiable_levels[] = { | |
| 97 + 20, | |
| 98 + 10, | |
| 99 + 5, | |
| 100 +}; | |
| 101 + | |
| 102 /* | |
| 103 * function description argument (exampl… | |
| 104 * | |
| 105 * battery_perc battery percentage battery name (BA… | |
| 106 * NULL on OpenBSD/… | |
| 107 + * battery_notify linux battery notifications battery name (BA… | |
| 108 + * OpenBSD/FreeBSD … | |
| 109 * battery_remaining battery remaining HH:MM battery name (BA… | |
| 110 * NULL on OpenBSD/… | |
| 111 * battery_state battery charging state battery name (BA… | |
| 112 @@ -66,4 +75,6 @@ static const char unknown_str[] = "n/a"; | |
| 113 static const struct arg args[] = { | |
| 114 /* function format argument */ | |
| 115 { datetime, "%s", "%F %T" }, | |
| 116 + { battery_notify, "", "BAT0"}, /* There is nothing to pri… | |
| 117 + | |
| 118 }; | |
| 119 diff --git a/slstatus.h b/slstatus.h | |
| 120 index 8ef5874..bb80b23 100644 | |
| 121 --- a/slstatus.h | |
| 122 +++ b/slstatus.h | |
| 123 @@ -2,6 +2,7 @@ | |
| 124 | |
| 125 /* battery */ | |
| 126 const char *battery_perc(const char *); | |
| 127 +void battery_notify(const char *); | |
| 128 const char *battery_remaining(const char *); | |
| 129 const char *battery_state(const char *); | |
| 130 | |
| 131 -- | |
| 132 2.43.0 | |
| 133 |