slstatus-alsa-master-20250324-f68f492.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
slstatus-alsa-master-20250324-f68f492.diff (2467B)
---
1 diff --git a/Makefile b/Makefile
2 index 2f93b87..41d5e9a 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -6,6 +6,7 @@ include config.mk
6
7 REQ = util
8 COM =\
9 + components/alsa_master_vol\
10 components/battery\
11 components/cpu\
12 components/datetime\
13 diff --git a/components/alsa_master_vol.c b/components/alsa_master_vol.c
14 new file mode 100644
15 index 0000000..acc283b
16 --- /dev/null
17 +++ b/components/alsa_master_vol.c
18 @@ -0,0 +1,64 @@
19 +/* Created by William Rabbermann */
20 +#include <stdio.h>
21 +#include <stdbool.h>
22 +#include <string.h>
23 +#include "../util.h"
24 +
25 +#define TMP_BUF_SIZE 14
26 +#define VOL_BUF_SIZE 5
27 +
28 +const char *
29 +alsa_master_vol(const char *unused)
30 +{
31 + bool MASTER_IS_MUTED = true;
32 + char tmp_buf[TMP_BUF_SIZE];
33 + short b;
34 + unsigned short i = 0;
35 +
36 + FILE *fp = popen("amixer get Master | tail -c13", "r");
37 + char ch;
38 + while ((ch = fgetc(fp)) != EOF && i < TMP_BUF_SIZE)
39 + tmp_buf[i++] = ch;
40 + tmp_buf[i] = '\0';
41 + pclose(fp);
42 +
43 + b = i - 1;
44 + while (b >= 0)
45 + {
46 + if ('[' == tmp_buf[b])
47 + {
48 + if (tmp_buf[b+1] == 'o' && tmp_buf[b+2] == 'n')
49 + MASTER_IS_MUTED = false;
50 + b -= 3;
51 + break;
52 + }
53 + b--;
54 + }
55 +
56 + if (MASTER_IS_MUTED) return bprintf("MUTE");
57 + else
58 + {
59 + char vol_buf[VOL_BUF_SIZE];
60 + while (b >= 0)
61 + {
62 + if ('[' == tmp_buf[b])
63 + break;
64 + b--;
65 + }
66 +
67 + i = 0;
68 + while (i < VOL_BUF_SIZE)
69 + {
70 + b++;
71 + if (']' == tmp_buf[b])
72 + {
73 + vol_buf[i] = '\0';
74 + break;
75 + }
76 + else
77 + vol_buf[i++] = tmp_buf[b];
78 + }
79 +
80 + return bprintf("%s", vol_buf);
81 + }
82 +}
83 diff --git a/config.def.h b/config.def.h
84 index 93a875a..6074441 100644
85 --- a/config.def.h
86 +++ b/config.def.h
87 @@ -58,6 +58,7 @@ static const char unknown_str[] = "n/a";
88 * uid UID of current user NULL
89 * uptime system uptime NULL
90 * username username of current user NULL
91 + * alsa_master_vol ALSA Master device volume NULL
92 * vol_perc OSS/ALSA volume in percent mixer file (/dev/mixer)
93 * NULL on OpenBSD
94 * wifi_perc WiFi signal in percent interface name (wlan0)
95 diff --git a/slstatus.h b/slstatus.h
96 index b0f2564..415afc1 100644
97 --- a/slstatus.h
98 +++ b/slstatus.h
99 @@ -78,6 +78,7 @@ const char *uid(void);
100
101 /* volume */
102 const char *vol_perc(const char *card);
103 +const char *alsa_master_vol(const char *unused);
104
105 /* wifi */
106 const char *wifi_perc(const char *interface);