sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit ddc7f93ec2f3981cb54c8645b28eaf445da446ee
parent c59324f0c46135fde03915046d4c42a299285e60
Author: willrabbermann <willrabbermann@gmail.com>
Date:   Thu, 20 Apr 2023 11:16:32 -0500

add slstatus-alsa-master-20230420-84a2f11.diff

Diffstat:
Atools.suckless.org/slstatus/patches/alsa-master/index.md | 18++++++++++++++++++
Atools.suckless.org/slstatus/patches/alsa-master/slstatus-alsa-master-20230420-84a2f11.diff | 106+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 124 insertions(+), 0 deletions(-)

diff --git a/tools.suckless.org/slstatus/patches/alsa-master/index.md b/tools.suckless.org/slstatus/patches/alsa-master/index.md @@ -0,0 +1,18 @@ +alsa-master +=========== + +Description +----------- +This patch adds a function to find the audio state (in percentage or as MUTE) +of the Master ALSA device using a pipe stream to the command-line mixer for +ALSA, amixer. It is simple and does not add additional compilation flags or +require use of a /dev/mixer file. The output string will include the % char +if the Master interface is on. + +Download +-------- +* [slstatus-alsa-master-20230420-84a2f11.diff](slstatus-alsa-master-20230420-84a2f11.diff) + +Authors +------- +* William Rabbermann <willrabbermann@gmail.com> diff --git a/tools.suckless.org/slstatus/patches/alsa-master/slstatus-alsa-master-20230420-84a2f11.diff b/tools.suckless.org/slstatus/patches/alsa-master/slstatus-alsa-master-20230420-84a2f11.diff @@ -0,0 +1,106 @@ +diff --git a/Makefile b/Makefile +index 2f93b87..41d5e9a 100644 +--- a/Makefile ++++ b/Makefile +@@ -6,6 +6,7 @@ include config.mk + + REQ = util + COM =\ ++ components/alsa_master_vol\ + components/battery\ + components/cpu\ + components/datetime\ +diff --git a/components/alsa_master_vol.c b/components/alsa_master_vol.c +new file mode 100644 +index 0000000..acc283b +--- /dev/null ++++ b/components/alsa_master_vol.c +@@ -0,0 +1,64 @@ ++/* Created by William Rabbermann */ ++#include <stdio.h> ++#include <stdbool.h> ++#include <string.h> ++#include "../util.h" ++ ++#define TMP_BUF_SIZE 14 ++#define VOL_BUF_SIZE 5 ++ ++const char * ++alsa_master_vol(void) ++{ ++ bool MASTER_IS_MUTED = true; ++ char tmp_buf[TMP_BUF_SIZE]; ++ short b; ++ unsigned short i = 0; ++ ++ FILE *fp = popen("amixer get Master | tail -c13", "r"); ++ char ch; ++ while ((ch = fgetc(fp)) != EOF && i < TMP_BUF_SIZE) ++ tmp_buf[i++] = ch; ++ tmp_buf[i] = '\0'; ++ pclose(fp); ++ ++ b = i - 1; ++ while (b >= 0) ++ { ++ if ('[' == tmp_buf[b]) ++ { ++ if (tmp_buf[b+1] == 'o' && tmp_buf[b+2] == 'n') ++ MASTER_IS_MUTED = false; ++ b -= 3; ++ break; ++ } ++ b--; ++ } ++ ++ if (MASTER_IS_MUTED) return bprintf("MUTE"); ++ else ++ { ++ char vol_buf[VOL_BUF_SIZE]; ++ while (b >= 0) ++ { ++ if ('[' == tmp_buf[b]) ++ break; ++ b--; ++ } ++ ++ i = 0; ++ while (i < VOL_BUF_SIZE) ++ { ++ b++; ++ if (']' == tmp_buf[b]) ++ { ++ vol_buf[i] = '\0'; ++ break; ++ } ++ else ++ vol_buf[i++] = tmp_buf[b]; ++ } ++ ++ return bprintf("%s", vol_buf); ++ } ++} +diff --git a/config.def.h b/config.def.h +index 93a875a..6074441 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -58,6 +58,7 @@ static const char unknown_str[] = "n/a"; + * uid UID of current user NULL + * uptime system uptime NULL + * username username of current user NULL ++ * alsa_master_vol ALSA Master device volume NULL + * vol_perc OSS/ALSA volume in percent mixer file (/dev/mixer) + * NULL on OpenBSD + * wifi_perc WiFi signal in percent interface name (wlan0) +diff --git a/slstatus.h b/slstatus.h +index b0f2564..415afc1 100644 +--- a/slstatus.h ++++ b/slstatus.h +@@ -78,6 +78,7 @@ const char *uid(void); + + /* volume */ + const char *vol_perc(const char *card); ++const char *alsa_master_vol(void); + + /* wifi */ + const char *wifi_perc(const char *interface);