change dwm backend to somebar

This commit is contained in:
Raphael Robatsch 2021-10-28 17:27:05 +02:00
parent 96cbb453e5
commit d432a2a0fe
5 changed files with 52 additions and 57 deletions

2
.gitignore vendored
View file

@ -38,7 +38,7 @@ blocks.h
*.i*86 *.i*86
*.x86_64 *.x86_64
*.hex *.hex
dwmblocks someblocks
# Debug files # Debug files
*.dSYM/ *.dSYM/

View file

@ -1,6 +1,7 @@
ISC License (ISC) ISC License (ISC)
Copyright 2020 torrinfail Copyright 2020 torrinfail
Copyright 2021 Raphael Robatsch
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

View file

@ -1,17 +1,16 @@
PREFIX ?= /usr/local PREFIX ?= /usr/local
CC ?= cc CC ?= cc
LDFLAGS = -lX11
output: dwmblocks.c blocks.def.h blocks.h output: someblocks.c blocks.def.h blocks.h
${CC} dwmblocks.c $(LDFLAGS) -o dwmblocks ${CC} someblocks.c $(LDFLAGS) -o someblocks
blocks.h: blocks.h:
cp blocks.def.h $@ cp blocks.def.h $@
clean: clean:
rm -f *.o *.gch dwmblocks rm -f *.o *.gch someblocks
install: output install: output
mkdir -p $(DESTDIR)$(PREFIX)/bin mkdir -p $(DESTDIR)$(PREFIX)/bin
install -m 0755 dwmblocks $(DESTDIR)$(PREFIX)/bin/dwmblocks install -m 0755 someblocks $(DESTDIR)$(PREFIX)/bin/someblocks
uninstall: uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/dwmblocks rm -f $(DESTDIR)$(PREFIX)/bin/someblocks

View file

@ -1,15 +1,16 @@
# dwmblocks # someblocks
Modular status bar for dwm written in c. Modular status bar for [somebar](https://gitlab.com/raphaelr/somebar) written in c.
This is a fork of [dwmblocks](https://github.com/torrinfail/dwmblocks), modified
to connect to somebar instead of dwm.
# usage # usage
To use dwmblocks first run 'make' and then install it with 'sudo make install'. To use someblocks first run 'make' and then install it with 'sudo make install'.
After that you can put dwmblocks in your xinitrc or other startup script to have it start with dwm. After that you can put someblocks in your startup script to have it start with dwl/somebar.
# modifying blocks # modifying blocks
The statusbar is made from text output from commandline programs. The statusbar is made from text output from commandline programs.
Blocks are added and removed by editing the blocks.h header file. Blocks are added and removed by editing the blocks.h header file.
By default the blocks.h header file is created the first time you run make which copies the default config from blocks.def.h. By default the blocks.h header file is created the first time you run make which copies the default config from blocks.def.h.
This is so you can edit your status bar commands and they will not get overwritten in a future update. This is so you can edit your status bar commands and they will not get overwritten in a future update.
# patches # patches
Here are some patches to dwmblocks that add features that I either don't want to merge in, or that require a dwm patch to work. Here are some patches to someblocks that add features that I either don't want to merge in, or that require a dwl/somebar patch to work.
I do not maintain these but I will take pull requests to update them. I do not maintain these but I will take pull requests to update them.
<br>
<a href=https://gist.github.com/IGeraGera/e4a5583b91b3eec2e81fdceb44dea717>dwmblocks-statuscmd-b6b0be4.diff</a>

View file

@ -2,10 +2,9 @@
#include<stdio.h> #include<stdio.h>
#include<string.h> #include<string.h>
#include<unistd.h> #include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<signal.h> #include<signal.h>
#ifndef NO_X
#include<X11/Xlib.h>
#endif
#ifdef __OpenBSD__ #ifdef __OpenBSD__
#define SIGPLUS SIGUSR1+1 #define SIGPLUS SIGUSR1+1
#define SIGMINUS SIGUSR1-1 #define SIGMINUS SIGUSR1-1
@ -36,17 +35,8 @@ int getstatus(char *str, char *last);
void statusloop(); void statusloop();
void termhandler(); void termhandler();
void pstdout(); void pstdout();
#ifndef NO_X void psomebar();
void setroot(); static void (*writestatus) () = psomebar;
static void (*writestatus) () = setroot;
static int setupX();
static Display *dpy;
static int screen;
static Window root;
#else
static void (*writestatus) () = pstdout;
#endif
#include "blocks.h" #include "blocks.h"
@ -54,6 +44,8 @@ static char statusbar[LENGTH(blocks)][CMDLENGTH] = {0};
static char statusstr[2][STATUSLENGTH]; static char statusstr[2][STATUSLENGTH];
static int statusContinue = 1; static int statusContinue = 1;
static int returnStatus = 0; static int returnStatus = 0;
static char somebarPath[128];
static int somebarFd = -1;
//opens process *cmd and stores output in *output //opens process *cmd and stores output in *output
void getcmd(const Block *block, char *output) void getcmd(const Block *block, char *output)
@ -125,28 +117,6 @@ int getstatus(char *str, char *last)
return strcmp(str, last);//0 if they are the same return strcmp(str, last);//0 if they are the same
} }
#ifndef NO_X
void setroot()
{
if (!getstatus(statusstr[0], statusstr[1]))//Only set root if text has changed.
return;
XStoreName(dpy, root, statusstr[0]);
XFlush(dpy);
}
int setupX()
{
dpy = XOpenDisplay(NULL);
if (!dpy) {
fprintf(stderr, "dwmblocks: Failed to open display\n");
return 0;
}
screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen);
return 1;
}
#endif
void pstdout() void pstdout()
{ {
if (!getstatus(statusstr[0], statusstr[1]))//Only write out if text has changed. if (!getstatus(statusstr[0], statusstr[1]))//Only write out if text has changed.
@ -156,6 +126,28 @@ void pstdout()
} }
void psomebar()
{
if (!getstatus(statusstr[0], statusstr[1]))//Only write out if text has changed.
return;
if (somebarFd < 0) {
somebarFd = open(somebarPath, O_WRONLY|O_CLOEXEC);
if (somebarFd < 0 && errno == ENOENT) {
// assume somebar is not ready yet
sleep(1);
somebarFd = open(somebarPath, O_WRONLY|O_CLOEXEC);
}
if (somebarFd < 0) {
perror("open");
return;
}
}
write(somebarFd, "status ", 7);
write(somebarFd, statusstr[0], strlen(statusstr[0]));
write(somebarFd, "\n", 1);
}
void statusloop() void statusloop()
{ {
setupsignals(); setupsignals();
@ -189,6 +181,12 @@ void termhandler()
statusContinue = 0; statusContinue = 0;
} }
void sigpipehandler()
{
close(somebarFd);
somebarFd = -1;
}
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
for (int i = 0; i < argc; i++) {//Handle command line arguments for (int i = 0; i < argc; i++) {//Handle command line arguments
@ -197,17 +195,13 @@ int main(int argc, char** argv)
else if (!strcmp("-p",argv[i])) else if (!strcmp("-p",argv[i]))
writestatus = pstdout; writestatus = pstdout;
} }
#ifndef NO_X strcpy(somebarPath, getenv("XDG_RUNTIME_DIR"));
if (!setupX()) strcat(somebarPath, "/somebar-0");
return 1;
#endif
delimLen = MIN(delimLen, strlen(delim)); delimLen = MIN(delimLen, strlen(delim));
delim[delimLen++] = '\0'; delim[delimLen++] = '\0';
signal(SIGTERM, termhandler); signal(SIGTERM, termhandler);
signal(SIGINT, termhandler); signal(SIGINT, termhandler);
signal(SIGPIPE, sigpipehandler);
statusloop(); statusloop();
#ifndef NO_X
XCloseDisplay(dpy);
#endif
return 0; return 0;
} }