Introduction
Introduction Statistics Contact Development Disclaimer Help
slstatus-dyn_battery-20250414-f68f492.diff - sites - public wiki contents of su…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
slstatus-dyn_battery-20250414-f68f492.diff (4376B)
---
1 From b96a72c277a72c77feaf94fac679f3ea87f78ea6 Mon Sep 17 00:00:00 2001
2 From: Madison Lynch <[email protected]>
3 Date: Mon, 14 Apr 2025 21:04:23 -0700
4 Subject: [PATCH] Created dyn-battery patch, for displaying status of mul…
5 batteries
6
7 ---
8 Makefile | 1 +
9 components/dyn_battery.c | 77 ++++++++++++++++++++++++++++++++++++++++
10 config.def.h | 4 +++
11 slstatus.h | 3 ++
12 4 files changed, 85 insertions(+)
13 create mode 100644 components/dyn_battery.c
14
15 diff --git a/Makefile b/Makefile
16 index 7a18274..d1b24dd 100644
17 --- a/Makefile
18 +++ b/Makefile
19 @@ -11,6 +11,7 @@ COM =\
20 components/cpu\
21 components/datetime\
22 components/disk\
23 + components/dyn_battery\
24 components/entropy\
25 components/hostname\
26 components/ip\
27 diff --git a/components/dyn_battery.c b/components/dyn_battery.c
28 new file mode 100644
29 index 0000000..2e58351
30 --- /dev/null
31 +++ b/components/dyn_battery.c
32 @@ -0,0 +1,77 @@
33 +/* Written by Madison Lynch <[email protected]> */
34 +/* Only Linux is supported */
35 +#include <stdio.h>
36 +#include <stdlib.h>
37 +#include <string.h>
38 +#include <dirent.h>
39 +
40 +#include "../slstatus.h"
41 +
42 +#define BAT_PREFIX "BAT"
43 +#define BAT_DIR "/sys/class/power_supply"
44 +
45 +/**
46 +* Counts number of batteries detected by system.
47 +*
48 +* @return unsigned integer denoting the number of detected batteries.
49 +* @author Madison Lynch
50 +*/
51 +static unsigned int
52 +battery_count(void) {
53 + DIR *dir = opendir(BAT_DIR);
54 + unsigned int bat_c = 0;
55 +
56 + struct dirent *entry;
57 + while((entry = readdir(dir)))
58 + if(strlen(entry->d_name) > 3)
59 + if(strncmp(entry->d_name, BAT_PREFIX, 3) == 0)
60 + bat_c++;
61 +
62 + (void) closedir(dir);
63 + return bat_c;
64 +}
65 +
66 +/**
67 +* Displays the status and capacity of a dynamic amount of batteries (i.…
68 +* laptop may have secondary external battery).
69 +*
70 +* @param fmt format string to use for each battery display. ordered ke…
71 +* %u: battery number || %s: battery state || %s battery cap…
72 +* @return string containing the status and capacities of all detected b…
73 +* @author Madison Lynch
74 +*/
75 +const char *
76 +dyn_battery(const char *fmt) {
77 + const size_t fmt_s = strlen(fmt);
78 + const unsigned int bat_c = battery_count();
79 +
80 + // Extra byte in calloc() for null byte
81 + char *output = (char *)calloc(fmt_s * bat_c + 1, sizeof(char));
82 + unsigned int displacement = 0; // For appending battery displays
83 + for(unsigned int i=0; i<bat_c; i++) {
84 + char bat[7]; // "BAT" = 3 + <=3 digit number + null byte
85 + sprintf(bat, "BAT%u", i);
86 +
87 + // Add battery display to final string to be returned
88 + sprintf(
89 + output + displacement,
90 + fmt,
91 + i,
92 + battery_state(bat),
93 + battery_perc(bat)
94 + );
95 + displacement = strlen(output);
96 +
97 + // Add space between battery displays
98 + *(output + displacement) = ' ';
99 + displacement++;
100 + }
101 +
102 + // Remove extra space after last battery display
103 + output[--displacement] = 0x00;
104 +
105 + return output;
106 +}
107 +
108 +#undef BAT_DIR
109 +#undef BAT_PREFIX
110 diff --git a/config.def.h b/config.def.h
111 index d805331..967d63d 100644
112 --- a/config.def.h
113 +++ b/config.def.h
114 @@ -26,6 +26,10 @@ static const char unknown_str[] = "n/a";
115 * disk_perc disk usage in percent mountpoint path …
116 * disk_total total disk space in GB mountpoint path …
117 * disk_used used disk space in GB mountpoint path …
118 + * dyn_battery displays the name, state and format string (%…
119 + * capacity of all detected %s). order is im…
120 + * batteries and matches desc…
121 + * (Linux only)
122 * entropy available entropy NULL
123 * gid GID of current user NULL
124 * hostname hostname NULL
125 diff --git a/slstatus.h b/slstatus.h
126 index 8ef5874..44a4b61 100644
127 --- a/slstatus.h
128 +++ b/slstatus.h
129 @@ -21,6 +21,9 @@ const char *disk_perc(const char *path);
130 const char *disk_total(const char *path);
131 const char *disk_used(const char *path);
132
133 +/* dyn_battery */
134 +const char *dyn_battery(const char *fmt);
135 +
136 /* entropy */
137 const char *entropy(const char *unused);
138
139 --
140 2.49.0
141
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.