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