diff options
| author | Aidan <torrinfail@gmail.com> | 2019-03-24 16:31:05 -0600 | 
|---|---|---|
| committer | Aidan <torrinfail@gmail.com> | 2019-03-24 16:31:05 -0600 | 
| commit | c97d6d119e83e1fc776fadb185f9d5b2e2fd5b14 (patch) | |
| tree | e51a0a588d11f3357f04b6d6f485c6750650f2e0 | |
| parent | Initial commit (diff) | |
| download | dwmblocks-c97d6d119e83e1fc776fadb185f9d5b2e2fd5b14.tar.gz dwmblocks-c97d6d119e83e1fc776fadb185f9d5b2e2fd5b14.tar.bz2 dwmblocks-c97d6d119e83e1fc776fadb185f9d5b2e2fd5b14.tar.xz dwmblocks-c97d6d119e83e1fc776fadb185f9d5b2e2fd5b14.tar.zst dwmblocks-c97d6d119e83e1fc776fadb185f9d5b2e2fd5b14.zip | |
Added code files, and Makefile.
Diffstat (limited to '')
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 8 | ||||
| -rw-r--r-- | blocks.h | 6 | ||||
| -rw-r--r-- | dwmblocks.c | 151 | 
4 files changed, 166 insertions, 0 deletions
| @@ -35,6 +35,7 @@  *.i*86  *.x86_64  *.hex +dwmblocks  # Debug files  *.dSYM/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6720c7f --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +output: dwmblocks.o blocks.o +	gcc dwmblocks.o blocks.o -o dwmblocks +dwmblocks.o: dwmblocks.c +	gcc -c dwmblocks.c  +blocks.o: blocks.h +	gcc -c blocks.h  +clean: +	rm *.o dwmblocks diff --git a/blocks.h b/blocks.h new file mode 100644 index 0000000..cad68c3 --- /dev/null +++ b/blocks.h @@ -0,0 +1,6 @@ +static const Block blocks[] = { +	{"/home/aidan/bin/statusbar/volume", 0, 10}, +	{"/home/aidan/bin/statusbar/brightness", 0, 11}, +	{"/home/aidan/bin/statusbar/battery", 5, 0}, +	{"/home/aidan/bin/statusbar/clock", 5, 0}, +}; diff --git a/dwmblocks.c b/dwmblocks.c new file mode 100644 index 0000000..62908da --- /dev/null +++ b/dwmblocks.c @@ -0,0 +1,151 @@ +#include<stdlib.h> +#include<stdio.h> +#include<string.h> +#include<unistd.h> +#include<signal.h> +//#include<X11/Xutil.h> +#include<X11/Xlib.h> +//#include <X11/Xatom.h> +#define LENGTH(X)               (sizeof(X) / sizeof (X[0])) +typedef struct { +	char* command; +	unsigned int interval; +	unsigned int signal; +} Block; +void sighandler(int num); + +#include "blocks.h" + +static Display *dpy; +static int screen; +static Window root; +static char statusbar[LENGTH(blocks)][50] = {0}; +static char setrootcmd[256]; +static char *statuscat; +static const char *volupcmd[]  = { "volup", NULL }; +static const char *voldowncmd[]  = { "voldown", NULL }; +static const char *volmutecmd[]  = { "volmute", NULL }; +static int statusContinue = 1,volmuted = 0; + +void replace(char *str, char old, char new) +{ +	int N = strlen(str); +	for(int i = 0; i < N; i++) +		if(str[i] == old) +			str[i] = new; +} + + +void getcmd(char *cmd, char *output) +{ +	FILE *cmdf = popen(cmd,"r"); +	if (!cmdf) +		return; +	int N = strlen(output); +	char c; +	int i = 0; +	while((c = fgetc(cmdf)) != EOF) +		output[i++] = c; +	output[i++] = '\0'; +	pclose(cmdf); +} + +void getcmds(int time) +{ +	const Block* current; +	for(int i = 0; i < LENGTH(blocks); i++) +	{	 +		current = blocks + i; +		if ((current->interval != 0 && time % current->interval == 0) || time == -1) +			getcmd(current->command,statusbar[i]); +	} +} + +void getsigcmds(int signal) +{ +	const Block *current; +	for (int i = 0; i < LENGTH(blocks); i++) +	{ +		current = blocks + i; +		if (current->signal == signal) +			getcmd(current->command,statusbar[i]); +	} +} + +void setupsignals() +{ +	for(int i = 0; i < LENGTH(blocks); i++) +	{	   +		if (blocks[i].signal > 0) +			signal(SIGRTMIN+blocks[i].signal, sighandler); +	} + +} + +void getstatus(char *str) +{ +	int j = 0;//15; +	for(int i = 0; i < 5; j+=strlen(statusbar[i++])) +	{	 +		strcpy(str + j, statusbar[i]); +	} +	//for (;j < LENGTH(str);j++) +	str[j] = '\0'; + +} + +void setroot() +{ +	Display *d = XOpenDisplay(NULL); +	if (d) { +		dpy = d; +	} +	screen = DefaultScreen(dpy); +	root = RootWindow(dpy, screen); +	getstatus(setrootcmd); +	replace(setrootcmd,'\n',' '); +	replace(setrootcmd,EOF,' '); +	//printf("%s\n",setrootcmd); +	XStoreName(dpy, root, setrootcmd); +	XCloseDisplay(dpy); +} + + +void *statusloop() +{ +	setupsignals(); +	int i = 0; +	getcmds(-1); +	while(statusContinue) +	{ +		getcmds(i); +		setroot(); +		sleep(1.0); +		i++; +	} +} + +void statusinit() +{ +	statusloop(); +} + + +void sighandler(int signum) +{ +	getsigcmds(signum-SIGRTMIN); +	setroot(); +} + +void termhandler(int signum) +{ +	statusContinue = 0; +	exit(0); +} + +int main() +{ +	signal(SIGTERM, termhandler); +	signal(SIGINT, termhandler); +	statusinit(); +} | 
