Compare commits

...

13 Commits

Author SHA1 Message Date
jacob.eva d915aaf7ed
Added scripts 2023-03-08 13:43:33 +00:00
Raphael Robatsch e7214b60fa add manpage 2022-04-20 22:22:07 +02:00
Leonardo Hernández Hernández d072368de0 allow user to set path of the fifo 2022-04-19 08:49:11 +02:00
Leonardo Hernández Hernández ed1e85d804 use dprintf() instead of write() calls 2022-04-19 08:42:34 +02:00
Raphael Robatsch c6d81febf6 replace mailing list 2021-11-15 19:36:59 +01:00
Raphael Robatsch bf9cbfbf2b style: spaces -> tabs 2021-10-29 20:39:29 +02:00
Raphael Robatsch 968842909e update readme 2021-10-28 17:27:05 +02:00
Raphael Robatsch d432a2a0fe change dwm backend to somebar 2021-10-28 17:27:05 +02:00
torrinfail 96cbb453e5
Merge pull request #40 from IGeraGera/IGeraGera-patch-1
Updated the patch in README.md for commit b6b0be4
2020-12-27 13:43:03 -07:00
torrinfail 0e22e81b1e
Merge pull request #39 from Strahinja/master
Add the call to pclose() when the output from the block command is empty
2020-12-24 16:53:26 -07:00
IGeraGera 5583a44cd3
Updated README with new patch 2020-12-22 14:44:10 +02:00
IGeraGera 9319e12a45
Update README.md
Updated the existing patch. I tried to respect the current formating
2020-12-20 01:07:07 +02:00
Страхиња Радић 4c392c32ed Added the call to pclose() when the output from the command is empty 2020-11-18 12:09:15 +01:00
8 changed files with 104 additions and 58 deletions

2
.gitignore vendored
View File

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

View File

@ -1,6 +1,7 @@
ISC License (ISC)
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.

View File

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

View File

@ -1,15 +1,19 @@
# dwmblocks
Modular status bar for dwm written in c.
# someblocks
Modular status bar for [somebar](https://git.sr.ht/~raphi/somebar) written in c.
This is a fork of [dwmblocks](https://github.com/torrinfail/dwmblocks), modified
to connect to somebar instead of dwm.
The mailing list for this project is
[~raphi/public-inbox@lists.sr.ht](mailto:~raphi/public-inbox@lists.sr.ht).
# usage
To use dwmblocks 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.
To use someblocks first run 'make' and then install it with 'sudo make install'.
After that you can put someblocks in your startup script to have it start with dwl/somebar.
# modifying blocks
The statusbar is made from text output from commandline programs.
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.
This is so you can edit your status bar commands and they will not get overwritten in a future update.
# 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.
<br>
<a href=https://gist.github.com/toniz4/41d168719e22bf7bc4ecff09d424b7d2>dwmblocks-statuscmd-20200717-941f415.diff</a>

10
blocks-battery Normal file
View File

@ -0,0 +1,10 @@
#!/bin/bash
percentage=$(upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep percentage: | cut -c 26-)
state=$(upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep state: | cut -c 26- | grep -E '^discharging$')
if [ -z $state ]
then
echo $percentage+
else
echo $percentage
fi

2
blocks-mail Normal file
View File

@ -0,0 +1,2 @@
unread="$(find "${XDG_DATA_HOME:-$HOME/.local/share}"/mail/*/INBOX/new/ -type f | wc -l 2>/dev/null)"
echo $unread

22
someblocks.1 Normal file
View File

@ -0,0 +1,22 @@
.TH someblocks 1 someblocks\-1.0
.SH NAME
someblocks \- Modular status bar for somebar
.SH SYNOPSIS
.B someblocks
.RB [ \-d
.IR delimiter ]
.RB [ \-s
.IR path ]
.RB [ \-p ]
.SH DESCRIPTION
Modular status bar for somebar written in c.
.SH OPTIONS
.TP
.B \-d
Sets the delimiter between blocks
.TP
.B \-s
Sets the path to the somebar control FIFO. The default value is
$XDG_RUNTIME_DIR/somebar-0
.SH BUGS
Send bug reports to ~raphi/public-inbox@lists.sr.ht

View File

@ -1,11 +1,11 @@
#define _POSIX_C_SOURCE 200809L
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<signal.h>
#ifndef NO_X
#include<X11/Xlib.h>
#endif
#ifdef __OpenBSD__
#define SIGPLUS SIGUSR1+1
#define SIGMINUS SIGUSR1-1
@ -36,17 +36,8 @@ int getstatus(char *str, char *last);
void statusloop();
void termhandler();
void pstdout();
#ifndef NO_X
void setroot();
static void (*writestatus) () = setroot;
static int setupX();
static Display *dpy;
static int screen;
static Window root;
#else
static void (*writestatus) () = pstdout;
#endif
void psomebar();
static void (*writestatus) () = psomebar;
#include "blocks.h"
@ -54,6 +45,8 @@ static char statusbar[LENGTH(blocks)][CMDLENGTH] = {0};
static char statusstr[2][STATUSLENGTH];
static int statusContinue = 1;
static int returnStatus = 0;
static char somebarPath[128];
static int somebarFd = -1;
//opens process *cmd and stores output in *output
void getcmd(const Block *block, char *output)
@ -65,8 +58,11 @@ void getcmd(const Block *block, char *output)
int i = strlen(block->icon);
fgets(output+i, CMDLENGTH-i-delimLen, cmdf);
i = strlen(output);
if (i == 0)//return if block and command output are both empty
if (i == 0) {
//return if block and command output are both empty
pclose(cmdf);
return;
}
if (delim[0] != '\0') {
//only chop off newline if one is present at the end
i = output[i-1] == '\n' ? i-1 : i;
@ -122,28 +118,6 @@ int getstatus(char *str, char *last)
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()
{
if (!getstatus(statusstr[0], statusstr[1]))//Only write out if text has changed.
@ -153,6 +127,26 @@ 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;
}
}
dprintf(somebarFd, "status %s\n", statusstr[0]);
}
void statusloop()
{
setupsignals();
@ -186,6 +180,12 @@ void termhandler()
statusContinue = 0;
}
void sigpipehandler()
{
close(somebarFd);
somebarFd = -1;
}
int main(int argc, char** argv)
{
for (int i = 0; i < argc; i++) {//Handle command line arguments
@ -193,18 +193,20 @@ int main(int argc, char** argv)
strncpy(delim, argv[++i], delimLen);
else if (!strcmp("-p",argv[i]))
writestatus = pstdout;
else if (!strcmp("-s",argv[i]))
strcpy(somebarPath, argv[++i]);
}
#ifndef NO_X
if (!setupX())
return 1;
#endif
if (!strlen(somebarPath)) {
strcpy(somebarPath, getenv("XDG_RUNTIME_DIR"));
strcat(somebarPath, "/somebar-0");
}
delimLen = MIN(delimLen, strlen(delim));
delim[delimLen++] = '\0';
signal(SIGTERM, termhandler);
signal(SIGINT, termhandler);
signal(SIGPIPE, sigpipehandler);
statusloop();
#ifndef NO_X
XCloseDisplay(dpy);
#endif
return 0;
}