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