slstatus-battery-notify-20250801-da6ca32.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       slstatus-battery-notify-20250801-da6ca32.diff (3950B)
       ---
            1 From da6ca327f75c661f1a48b23e27e77c4df1081f0d Mon Sep 17 00:00:00 2001
            2 From: elbachir-one <bachiralfa@gmail.com>
            3 Date: Fri, 1 Aug 2025 12:19:30 +0100
            4 Subject: [PATCH] Fix: change battery_notify to return const char * for
            5  compatibility
            6 
            7 ---
            8  components/battery.c | 47 ++++++++++++++++++++++++++++++++++++++++++++
            9  config.def.h         | 11 +++++++++++
           10  slstatus.h           |  1 +
           11  3 files changed, 59 insertions(+)
           12 
           13 diff --git a/components/battery.c b/components/battery.c
           14 index 1c753f9..432f714 100644
           15 --- a/components/battery.c
           16 +++ b/components/battery.c
           17 @@ -1,6 +1,7 @@
           18  /* See LICENSE file for copyright and license details. */
           19  #include <stdio.h>
           20  #include <string.h>
           21 +#include <stdlib.h>
           22  
           23  #include "../slstatus.h"
           24  #include "../util.h"
           25 @@ -20,6 +21,13 @@
           26          #define POWER_SUPPLY_CURRENT  "/sys/class/power_supply/%s/current_now"
           27          #define POWER_SUPPLY_POWER    "/sys/class/power_supply/%s/power_now"
           28  
           29 +        const char notify_cmd[] = "notify-send";
           30 +        const char battery_str[] = "Battery";
           31 +        int last_notified_level = 0;
           32 +
           33 +        extern const int notifiable_levels[];
           34 +        extern const size_t notifiable_levels_count;
           35 +
           36          static const char *
           37          pick(const char *bat, const char *f1, const char *f2, char *path,
           38               size_t length)
           39 @@ -49,6 +57,45 @@
           40                  return bprintf("%d", cap_perc);
           41          }
           42  
           43 +const char *battery_notify(const char *bat)
           44 +{
           45 +        int cap_perc;
           46 +        char state[12];
           47 +        char path[PATH_MAX];
           48 +
           49 +        if (esnprintf(path, sizeof(path), POWER_SUPPLY_CAPACITY, bat) < 0 || pscanf(path, "%d", &cap_perc) != 1)
           50 +                return NULL;
           51 +
           52 +        if (esnprintf(path, sizeof(path), POWER_SUPPLY_STATUS, bat) < 0 || pscanf(path, "%12[a-zA-Z ]", &state) != 1)
           53 +                return NULL;
           54 +
           55 +        if (strcmp("Charging", state) == 0) {
           56 +                last_notified_level = 0;
           57 +                return NULL;
           58 +        }
           59 +
           60 +        if (strcmp("Discharging", state) != 0)
           61 +                return NULL;
           62 +
           63 +        char cmd[28];
           64 +
           65 +        for (size_t i = 0; i < notifiable_levels_count; i++) {
           66 +                if (notifiable_levels[i] != cap_perc)
           67 +                        continue;
           68 +
           69 +                if (notifiable_levels[i] != last_notified_level) {
           70 +                        last_notified_level = notifiable_levels[i];
           71 +
           72 +                        snprintf(cmd, sizeof(cmd), "%s %s %d%%", notify_cmd, battery_str, cap_perc);
           73 +                        system(cmd);
           74 +
           75 +                        break;
           76 +                }
           77 +        }
           78 +
           79 +        return NULL;
           80 +}
           81 +
           82          const char *
           83          battery_state(const char *bat)
           84          {
           85 diff --git a/config.def.h b/config.def.h
           86 index 100093e..d7e77d2 100644
           87 --- a/config.def.h
           88 +++ b/config.def.h
           89 @@ -9,11 +9,21 @@ static const char unknown_str[] = "n/a";
           90  /* maximum output string length */
           91  #define MAXLEN 2048
           92  
           93 +/* battery levels to notify - add any levels you want to receive notification for (in percent) */
           94 +const int notifiable_levels[] = {
           95 +    20,
           96 +    10,
           97 +    5,
           98 +};
           99 +const size_t notifiable_levels_count = sizeof(notifiable_levels) / sizeof(notifiable_levels[0]);
          100 +
          101  /*
          102   * function            description                     argument (example)
          103   *
          104   * battery_perc        battery percentage              battery name (BAT0)
          105   *                                                     NULL on OpenBSD/FreeBSD
          106 + * battery_notify      linux battery notifications     battery name (BAT0)
          107 + *                                                     OpenBSD/FreeBSD not supported
          108   * battery_remaining   battery remaining HH:MM         battery name (BAT0)
          109   *                                                     NULL on OpenBSD/FreeBSD
          110   * battery_state       battery charging state          battery name (BAT0)
          111 @@ -67,4 +77,5 @@ static const char unknown_str[] = "n/a";
          112  static const struct arg args[] = {
          113          /* function format          argument */
          114          { datetime, "%s",           "%F %T" },
          115 +        { battery_notify, "",       "BAT0" }, /* There is nothing to print its just a notifications*/
          116  };
          117 diff --git a/slstatus.h b/slstatus.h
          118 index 394281c..061d80a 100644
          119 --- a/slstatus.h
          120 +++ b/slstatus.h
          121 @@ -2,6 +2,7 @@
          122  
          123  /* battery */
          124  const char *battery_perc(const char *);
          125 +const char *battery_notify(const char *);
          126  const char *battery_remaining(const char *);
          127  const char *battery_state(const char *);
          128  
          129 -- 
          130 2.50.1
          131