Home
       New component: cat - slstatus - suckless status monitor. mirror from suckless.org
  HTML git clone git://git.drkhsh.at/slstatus.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 57c6e7340d16b14d61f9e3361ca4940f53dfcafa
   DIR parent 4bd78c94ba90d67a268c092231b85037c94a339a
  HTML Author: drkhsh <me@drkhsh.at>
       Date:   Wed, 23 Nov 2022 23:59:51 +0100
       
       New component: cat
       
       Generically reads an arbitrary file natively.
       
       Saves a few layers of execution in comparison to using `run_command`
       with an argument like `cat ./file`.
       
       Diffstat:
         M Makefile                            |       1 +
         M README                              |       1 +
         A components/cat.c                    |      32 +++++++++++++++++++++++++++++++
         M config.def.h                        |       1 +
         M slstatus.h                          |       3 +++
       
       5 files changed, 38 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/Makefile b/Makefile
       @@ -7,6 +7,7 @@ include config.mk
        REQ = util
        COM =\
                components/battery\
       +        components/cat\
                components/cpu\
                components/datetime\
                components/disk\
   DIR diff --git a/README b/README
       @@ -7,6 +7,7 @@ slstatus is a suckless status monitor for window managers that use WM_NAME
        Features
        --------
        - Battery percentage/state/time left
       +- Cat (read file)
        - CPU usage
        - CPU frequency
        - Custom shell commands
   DIR diff --git a/components/cat.c b/components/cat.c
       @@ -0,0 +1,32 @@
       +/* See LICENSE file for copyright and license details. */
       +#include <stdio.h>
       +#include <string.h>
       +
       +#include "../slstatus.h"
       +#include "../util.h"
       +
       +const char *
       +cat(const char *path)
       +{
       +        char *f;
       +        FILE *fp;
       +
       +        if (!(fp = fopen(path, "r"))) {
       +                warn("fopen '%s':", path);
       +                return NULL;
       +        }
       +
       +        f = fgets(buf, sizeof(buf) - 1, fp);
       +        if (fclose(fp) < 0) {
       +                warn("fclose '%s':", path);
       +                return NULL;
       +        }
       +        if (!f)
       +                return NULL;
       +
       +        if ((f = strrchr(buf, '\n')))
       +                f[0] = '\0';
       +
       +        return buf[0] ? buf : NULL;
       +}
       +
   DIR diff --git a/config.def.h b/config.def.h
       @@ -18,6 +18,7 @@ static const char unknown_str[] = "n/a";
         *                                                     NULL on OpenBSD/FreeBSD
         * battery_remaining   battery remaining HH:MM         battery name (BAT0)
         *                                                     NULL on OpenBSD/FreeBSD
       + * cat                 read arbitrary file             path
         * cpu_perc            cpu usage in percent            NULL
         * cpu_freq            cpu frequency in MHz            NULL
         * datetime            date and time                   format string (%F %T)
   DIR diff --git a/slstatus.h b/slstatus.h
       @@ -5,6 +5,9 @@ const char *battery_perc(const char *);
        const char *battery_state(const char *);
        const char *battery_remaining(const char *);
        
       +/* cat */
       +const char *cat(const char *path);
       +
        /* cpu */
        const char *cpu_freq(const char *unused);
        const char *cpu_perc(const char *unused);