On 10/25/24 08:11AM, Raymond Cole wrote:
> May someone check them out and share opinions?
>
I like this
if [ "$butt" -eq 1 ]; then
I did my bar a similar way, except each widget is a script responsible for its
own formatting, like:
mpc status -f '%artist% ~ %title%' | if read -r song && read -r state rest; then
case "$state" in
'[playing]') echo "$song ►";;
*) echo "$song ◼";;
esac
else
echo "◼"
fi; mpc idle >/dev/null
And then the main bar program loops each script. Only problem is when
I fuck myself & create 900000 processes for no reason then my bar stops
working.
I did a shorter version of fifolog(conccat) without line-delimiting a
little while back - see below.
Jeremy
---
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/select.h>
int
main(int argc, char **argv)
{
int i, j, n, w, eof;
fd_set rs;
char buf[BUFSIZ];
for (i = 1; i < argc; i++) {
// close any "accidently" open file descriptors
close((i+2)+(argc-1));
if ((n = open(argv[i], O_RDONLY)) == -1) {
fprintf(stderr, "pselect: %s\n", strerror(errno));
return 1;
}
}
for (eof = 0; !eof;) {
FD_ZERO(&rs);
for (i = 3; i < argc+2; i++) {
FD_SET(i+(argc-1), &rs);
}
if ((n = select(i+argc, &rs, NULL, NULL, NULL)) == -1) {
fprintf(stderr, "pselect: %s\n", strerror(errno));
return 1;
}
for (i = 3; i < argc+2; i++) {
if (!FD_ISSET(i+(argc-1), &rs)) {
continue;
}
if ((n = read(i+(argc-1), &buf[0], sizeof(buf))) == -1)
{
fprintf(stderr, "failed reading from fd %d:
%s\n", i+(argc-1), strerror(errno));
return 1;
} else if (n == 0) {
eof = 1;
}
for (j = 0; j < n; j += w) {
if ((w = write(i, &buf[j], n-j)) == -1 || w ==
0) {
fprintf(stderr, "failed: %s\n",
strerror(errno));
return -1;
}
}
}
}
}