sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | 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