slstatus-icons-1.0.patch - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
slstatus-icons-1.0.patch (4055B)
---
1 From 9c5d98385f0400f2d423334fd40e321b6ac79528 Mon Sep 17 00:00:00 2001
2 From: sewn <sewn@disroot.org>
3 Date: Sat, 8 Feb 2025 16:46:25 +0300
4 Subject: [PATCH] implement icons for volume and battery
5
6 ---
7 components/battery.c | 19 +++++++++++++++++++
8 components/volume.c | 17 +++++++++++++++++
9 config.def.h | 4 ++++
10 slstatus.h | 2 ++
11 4 files changed, 42 insertions(+)
12
13 diff --git a/components/battery.c b/components/battery.c
14 index 1c753f9..7bfd874 100644
15 --- a/components/battery.c
16 +++ b/components/battery.c
17 @@ -1,10 +1,29 @@
18 /* See LICENSE file for copyright and license details. */
19 #include <stdio.h>
20 +#include <stdlib.h>
21 #include <string.h>
22
23 #include "../slstatus.h"
24 #include "../util.h"
25
26 +const char *
27 +battery_icon(const char *bat)
28 +{
29 + unsigned long ul_perc;
30 + const char *perc, *state;
31 + static const char *icons[][11] = {
32 + { "", "", "", "", "", "", "", "", "", "", "" },
33 + { "", "", "", "", "", "", "", "", "", "", "" },
34 + };
35 +
36 + if (!(perc = battery_perc(bat)) || !(state = battery_state(bat)))
37 + return NULL;
38 +
39 + ul_perc = strtoul(perc, NULL, 10);
40 +
41 + return bprintf("%s %d", icons[state[0] == '+'][ul_perc / 10], ul_perc);
42 +}
43 +
44 #if defined(__linux__)
45 /*
46 * https://www.kernel.org/doc/html/latest/power/power_supply_class.html
47 diff --git a/components/volume.c b/components/volume.c
48 index 6cec556..5c597b4 100644
49 --- a/components/volume.c
50 +++ b/components/volume.c
51 @@ -1,6 +1,7 @@
52 /* See LICENSE file for copyright and license details. */
53 #include <fcntl.h>
54 #include <stdio.h>
55 +#include <stdlib.h>
56 #include <string.h>
57 #include <sys/ioctl.h>
58 #include <unistd.h>
59 @@ -8,6 +9,22 @@
60 #include "../slstatus.h"
61 #include "../util.h"
62
63 +const char *
64 +vol_icon(const char *arg)
65 +{
66 + char *p;
67 + const char *perc;
68 + static const char *icons[] = { "", "", "" };
69 + unsigned long ul_perc;
70 +
71 + if (!(perc = vol_perc(arg)))
72 + return NULL;
73 + p = strrchr(perc, ' ');
74 + ul_perc = strtoul(p ? p + 1 : perc, NULL, 10);
75 +
76 + return bprintf("%s %d", p ? "" : icons[ul_perc / 34], ul_perc);
77 +}
78 +
79 #if defined(__OpenBSD__) | defined(__FreeBSD__)
80 #include <poll.h>
81 #include <sndio.h>
82 diff --git a/config.def.h b/config.def.h
83 index d805331..98dc3a0 100644
84 --- a/config.def.h
85 +++ b/config.def.h
86 @@ -12,6 +12,8 @@ static const char unknown_str[] = "n/a";
87 /*
88 * function description argument (example)
89 *
90 + * battery_icon battery_perc with an icon battery name (BAT0)
91 + * NULL on OpenBSD/FreeBSD
92 * battery_perc battery percentage battery name (BAT0)
93 * NULL on OpenBSD/FreeBSD
94 * battery_remaining battery remaining HH:MM battery name (BAT0)
95 @@ -58,6 +60,8 @@ static const char unknown_str[] = "n/a";
96 * uid UID of current user NULL
97 * uptime system uptime NULL
98 * username username of current user NULL
99 + * vol_icon vol_perc with an icon mixer file (/dev/mixer)
100 + * NULL on OpenBSD/FreeBSD
101 * vol_perc OSS/ALSA volume in percent mixer file (/dev/mixer)
102 * NULL on OpenBSD/FreeBSD
103 * wifi_essid WiFi ESSID interface name (wlan0)
104 diff --git a/slstatus.h b/slstatus.h
105 index 8ef5874..b60c573 100644
106 --- a/slstatus.h
107 +++ b/slstatus.h
108 @@ -4,6 +4,7 @@
109 const char *battery_perc(const char *);
110 const char *battery_remaining(const char *);
111 const char *battery_state(const char *);
112 +const char *battery_icon(const char *);
113
114 /* cat */
115 const char *cat(const char *path);
116 @@ -77,6 +78,7 @@ const char *uid(const char *unused);
117 const char *username(const char *unused);
118
119 /* volume */
120 +const char *vol_icon(const char *card);
121 const char *vol_perc(const char *card);
122
123 /* wifi */
124 --
125 2.48.1
126