dwm/patch/nametag.c
2022-08-12 13:47:25 +02:00

62 lines
1.5 KiB
C

void
nametag(const Arg *arg)
{
char *p, name[MAX_TAGLEN];
FILE *f;
int i, group;
int tagindex;
Monitor *m = selmon;
#if BAR_ALTTAGSDECORATION_PATCH
Client *c;
int occ = 0;
for (c = m->clients; c; c = c->next)
occ |= c->tags == 255 ? 0 : c->tags;
#endif // BAR_ALTTAGSDECORATION_PATCH
errno = 0; // popen(3p) says on failure it "may" set errno
if (!(f = popen(NAMETAG_COMMAND, "r"))) {
fprintf(stderr, "dwm: popen command failed%s%s\n", errno ? ": " : "", errno ? strerror(errno) : "");
return;
}
if (!(p = fgets(name, MAX_TAGLEN, f)) && (i = errno) && ferror(f))
fprintf(stderr, "dwm: fgets failed: %s\n", strerror(i));
pclose(f);
if (!p)
return;
if ((p = strchr(name, '\n')))
*p = '\0';
for (i = 0; i < NUMTAGS; i++) {
if (m->tagset[m->seltags] & (1 << i)) {
tagindex = i + NUMTAGS * m->num;
if (tagindex >= LENGTH(tagicons[DEFAULT_TAGS]))
tagindex = tagindex % LENGTH(tagicons[DEFAULT_TAGS]);
#if BAR_ALTTAGSDECORATION_PATCH
if (occ & 1 << i)
group = ALT_TAGS_DECORATION;
else
#endif // BAR_ALTTAGSDECORATION_PATCH
#if BAR_ALTERNATIVE_TAGS_PATCH
if (m->alttag)
group = ALTERNATIVE_TAGS;
else
#endif // BAR_ALTERNATIVE_TAGS_PATCH
group = DEFAULT_TAGS;
#if NAMETAG_PREPEND_PATCH
if (snprintf(tagicons[group][i], MAX_TAGLEN, NAMETAG_FORMAT, i+1, name) < 0)
fprintf(stderr, "nametag: if statement to avoid -Wformat-truncation= warnings\n");
#else
snprintf(tagicons[group][i], MAX_TAGLEN, NAMETAG_FORMAT, name);
#endif // NAMETAG_PREPEND_PATCH
}
}
drawbars();
}