New component: cat
authordrkhsh <me@drkhsh.at>
Wed, 23 Nov 2022 22:59:51 +0000 (23:59 +0100)
committerdrkhsh <me@drkhsh.at>
Wed, 23 Nov 2022 23:01:52 +0000 (00:01 +0100)
Generically reads an arbitrary file natively.

Saves a few layers of execution in comparison to using `run_command`
with an argument like `cat ./file`.

Makefile
README
components/cat.c [new file with mode: 0644]
config.def.h
slstatus.h

index 3be46cc64046cdd774e6948fb05995d8dc4f30ce..7834257b49698722be016c8f5bc0cdf87d0cf105 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,6 +7,7 @@ include config.mk
 REQ = util
 COM =\
        components/battery\
+       components/cat\
        components/cpu\
        components/datetime\
        components/disk\
diff --git a/README b/README
index 4da075642cf152acc9514950dee73c0daaaa7792..b3fa7aec34fe0ac3da9b378de6e817cbdb70241b 100644 (file)
--- 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
diff --git a/components/cat.c b/components/cat.c
new file mode 100644 (file)
index 0000000..07944cc
--- /dev/null
@@ -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;
+}
+
index 5f6c11449bd455a3518fbf463d03b24f62841bfc..90b57a14e196ec2e6697e35389e1c7169cc5c61b 100644 (file)
@@ -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)
index f3b4979cc9ae66638890e6b85cf2fe0f4a9d85ec..f062e737d97ec38f60e54dc27d8f52e579d8fffa 100644 (file)
@@ -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);