diff --color -r -u dwm-6.2/config.def.h dwm_patched/config.def.h --- dwm-6.2/config.def.h 2019-02-02 13:55:28.000000000 +0100 +++ dwm_patched/config.def.h 2020-07-30 17:23:53.470898016 +0200 @@ -3,6 +3,9 @@ /* appearance */ static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int snap = 32; /* snap pixel */ +static const char *tagfifo = "/tmp/dwm_tags"; /*fifo of bar information */ +static const int barheight = 25; /*height of bar*/ +static const char *sepchar = ":"; static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ static const char *fonts[] = { "monospace:size=10" }; Only in dwm_patched: drw.o diff --color -r -u dwm-6.2/dwm.c dwm_patched/dwm.c --- dwm-6.2/dwm.c 2019-02-02 13:55:28.000000000 +0100 +++ dwm_patched/dwm.c 2020-07-30 17:27:29.083891791 +0200 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -387,8 +388,11 @@ if (m) { arrangemon(m); restack(m); - } else for (m = mons; m; m = m->next) + } else for (m = mons; m; m = m->next){ arrangemon(m); + } + + } void @@ -695,51 +699,55 @@ void drawbar(Monitor *m) { - int x, w, sw = 0; - int boxs = drw->fonts->h / 9; - int boxw = drw->fonts->h / 6 + 2; unsigned int i, occ = 0, urg = 0; + int fd; Client *c; + char str[1000]=""; - /* draw status first so it can be overdrawn by tags later */ - if (m == selmon) { /* status is only drawn on selected monitor */ - drw_setscheme(drw, scheme[SchemeNorm]); - sw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ - drw_text(drw, m->ww - sw, 0, sw, bh, 0, stext, 0); - } + + mkfifo(tagfifo, 0666); + fd = open(tagfifo,O_WRONLY); for (c = m->clients; c; c = c->next) { occ |= c->tags; if (c->isurgent) urg |= c->tags; } - x = 0; for (i = 0; i < LENGTH(tags); i++) { - w = TEXTW(tags[i]); - drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); - if (occ & 1 << i) - drw_rect(drw, x + boxs, boxs, boxw, boxw, - m == selmon && selmon->sel && selmon->sel->tags & 1 << i, - urg & 1 << i); - x += w; - } - w = blw = TEXTW(m->ltsymbol); - drw_setscheme(drw, scheme[SchemeNorm]); - x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); - - if ((w = m->ww - sw - x) > bh) { - if (m->sel) { - drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); - if (m->sel->isfloating) - drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); - } else { - drw_setscheme(drw, scheme[SchemeNorm]); - drw_rect(drw, x, 0, w, bh, 1, 1); + strcat(str,sepchar); + + // Occupied and focused + if ( occ & 1 << i && m->tagset[m->seltags] & 1 << i ) { + /*fprintf(fd,"%%C %s %%f",tags[i]);*/ + strcat(str,"%O "); + strcat(str,tags[i]); + strcat(str," %f"); + //not occupied but still focused + } else if ( !( occ & 1 << i )&& m->tagset[m->seltags] & 1 << i ) { + strcat(str,"%E "); + strcat(str,tags[i]); + strcat(str," %f"); + } else if ( occ & 1 << i && !( m->tagset[m->seltags] & 1 << i ) ) { + //occupied but not focused + strcat(str,"%o "); + strcat(str,tags[i]); + strcat(str," %f"); + } else { + //not occupied not focused + strcat(str,"%e "); + strcat(str,tags[i]); + strcat(str," %f"); } - } - drw_map(drw, m->barwin, 0, 0, m->ww, bh); + } + strcat(str,sepchar); + strcat(str,m->ltsymbol); + if(m->sel){ + strcat(str,sepchar); + strcat(str,m->sel->name); + } + strcat(str,"\n"); + write(fd,&str,strlen(str)+1); + close(fd); } void @@ -1351,7 +1359,7 @@ XEvent ev; XWindowChanges wc; - drawbar(m); + /*drawbar(m);*/ if (!m->sel) return; if (m->sel->isfloating || !m->lt[m->sellt]->arrange) @@ -1545,7 +1553,7 @@ if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) die("no fonts could be loaded."); lrpad = drw->fonts->h; - bh = drw->fonts->h + 2; + bh = barheight; updategeom(); /* init atoms */ utf8string = XInternAtom(dpy, "UTF8_STRING", False); @@ -1802,18 +1810,10 @@ updatebars(void) { Monitor *m; - XSetWindowAttributes wa = { - .override_redirect = True, - .background_pixmap = ParentRelative, - .event_mask = ButtonPressMask|ExposureMask - }; XClassHint ch = {"dwm", "dwm"}; for (m = mons; m; m = m->next) { if (m->barwin) continue; - m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen), - CopyFromParent, DefaultVisual(dpy, screen), - CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); XMapRaised(dpy, m->barwin); XSetClassHint(dpy, m->barwin, &ch);