Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdd TTY backend - spoon - dwm status utility (2f30 fork)
git clone git://src.adamsgaard.dk/spoon
Log
Files
Refs
LICENSE
---
commit a4bf7bc838fe7c71237f8de392148f8fe6328d39
parent 2f7dab475bd35e18fb96a63c7f061a5050bfad1d
Author: sin <[email protected]>
Date: Thu, 15 Mar 2018 11:06:45 +0000
Add TTY backend
This makes spoon more usable in general. There is some added overhead
in this approach because the external program will have to fork + exec
spoon but at least a single invocation will gather statistics from all
modules.
It can now be used easily in the tmux status bar.
Diffstat:
M Makefile | 2 +-
A arg.h | 65 +++++++++++++++++++++++++++++…
M spoon.c | 53 +++++++++++++++++++++++++++++…
3 files changed, 116 insertions(+), 4 deletions(-)
---
diff --git a/Makefile b/Makefile
t@@ -5,7 +5,7 @@ SRC = spoon.c batt.c wifi.c cpu.c count.c temp.c date.c load.c…
OBJ = spoon.o batt.o wifi.o cpu.o count.o temp.o date.o load.o file.o key.o\
netspeed.o strlcpy.o strlcat.o stub.o brightness.o
BIN = spoon
-DISTFILES = $(SRC) types.h util.h config.def.h Makefile LICENSE configure
+DISTFILES = $(SRC) arg.h types.h util.h config.def.h Makefile LICENSE configure
include config.mk
diff --git a/arg.h b/arg.h
t@@ -0,0 +1,65 @@
+/*
+ * Copy me if you can.
+ * by 20h
+ */
+
+#ifndef ARG_H__
+#define ARG_H__
+
+extern char *argv0;
+
+/* use main(int argc, char *argv[]) */
+#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\
+ argv[0] && argv[0][0] == '-'\
+ && argv[0][1];\
+ argc--, argv++) {\
+ char argc_;\
+ char **argv_;\
+ int brk_;\
+ if (argv[0][1] == '-' && argv[0][2] == '\0') {\
+ argv++;\
+ argc--;\
+ break;\
+ }\
+ for (brk_ = 0, argv[0]++, argv_ = argv;\
+ argv[0][0] && !brk_;\
+ argv[0]++) {\
+ if (argv_ != argv)\
+ break;\
+ argc_ = argv[0][0];\
+ switch (argc_)
+
+/* Handles obsolete -NUM syntax */
+#define ARGNUM case '0':\
+ case '1':\
+ case '2':\
+ case '3':\
+ case '4':\
+ case '5':\
+ case '6':\
+ case '7':\
+ case '8':\
+ case '9'
+
+#define ARGEND }\
+ }
+
+#define ARGC() argc_
+
+#define ARGNUMF() (brk_ = 1, estrtonum(argv[0], 0, INT_MAX))
+
+#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\
+ ((x), abort(), (char *)0) :\
+ (brk_ = 1, (argv[0][1] != '\0')?\
+ (&argv[0][1]) :\
+ (argc--, argv++, argv[0])))
+
+#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\
+ (char *)0 :\
+ (brk_ = 1, (argv[0][1] != '\0')?\
+ (&argv[0][1]) :\
+ (argc--, argv++, argv[0])))
+
+#define LNGARG() &argv[0][0]
+
+#endif
diff --git a/spoon.c b/spoon.c
t@@ -1,11 +1,13 @@
#include <err.h>
#include <limits.h>
#include <stdio.h>
+#include <stdlib.h>
#include <unistd.h>
#include <X11/keysym.h>
#include <X11/Xlib.h>
+#include "arg.h"
#include "util.h"
int battread(void *, char *, size_t);
t@@ -33,6 +35,10 @@ struct ent {
#include "types.h"
#include "config.h"
+char *argv0;
+int single;
+int tty;
+
int
dummyread(void *arg, char *buf, size_t len)
{
t@@ -59,7 +65,7 @@ entcat(char *line, size_t len)
}
void
-loop(void)
+xloop(void)
{
char line[LINE_MAX];
Display *dpy;
t@@ -71,13 +77,54 @@ loop(void)
entcat(line, sizeof(line));
XStoreName(dpy, DefaultRootWindow(dpy), line);
XSync(dpy, False);
+ if (single)
+ break;
sleep(delay);
}
}
+void
+ttyloop(void)
+{
+ char line[LINE_MAX];
+
+ for (;;) {
+ entcat(line, sizeof(line));
+ puts(line);
+ if (single)
+ break;
+ sleep(delay);
+ }
+}
+
+void
+usage(void)
+{
+ fprintf(stderr, "%s: [-st]\n", argv0);
+ fprintf(stderr, " -s One shot mode\n");
+ fprintf(stderr, " -t Use TTY backend\n");
+ exit(1);
+}
+
int
-main(void)
+main(int argc, char *argv[])
{
- loop();
+ char *end;
+
+ ARGBEGIN {
+ case 's':
+ single = 1;
+ break;
+ case 't':
+ tty = 1;
+ break;
+ default:
+ usage();
+ } ARGEND
+
+ if (tty)
+ ttyloop();
+ else
+ xloop();
return 0;
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.