sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 00693afde2ad8e7c3de10909d6fc783fd1e19f8a
parent f04687cc79f065e9ebed46714bbb90071619aaf6
Author: klassiker <suckless@lupia.eu>
Date:   Tue, 14 Jul 2020 15:44:16 +0200

[dwm][patch] status2d + extrabar, add dwm-status2d-extrabar-6.2.diff and include it in index.md

Diffstat:
Adwm.suckless.org/patches/status2d/dwm-status2d-extrabar-6.2.diff | 338+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdwm.suckless.org/patches/status2d/index.md | 3+++
2 files changed, 341 insertions(+), 0 deletions(-)

diff --git a/dwm.suckless.org/patches/status2d/dwm-status2d-extrabar-6.2.diff b/dwm.suckless.org/patches/status2d/dwm-status2d-extrabar-6.2.diff @@ -0,0 +1,338 @@ +From e741941428f60f2d8c8d1125c965dec4cfc2d1ba Mon Sep 17 00:00:00 2001 +From: klassiker <suckless@lupia.eu> +Date: Tue, 14 Jul 2020 15:23:06 +0200 +Subject: [PATCH] status2d patched with the extrabar patch for dwm 6.2 + +--- + config.def.h | 2 +- + dwm.c | 188 +++++++++++++++++++++++++++++++++++++++++++++------ + 2 files changed, 169 insertions(+), 21 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 1c0b587..8ce3e96 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -5,6 +5,7 @@ static const unsigned int borderpx = 1; /* border pixel of windows */ + static const unsigned int snap = 32; /* snap pixel */ + static const int showbar = 1; /* 0 means no bar */ + static const int topbar = 1; /* 0 means bottom bar */ ++static const char statussep = ';'; /* separator between status bars */ + static const char *fonts[] = { "monospace:size=10" }; + static const char dmenufont[] = "monospace:size=10"; + static const char col_gray1[] = "#222222"; +@@ -112,4 +113,3 @@ static Button buttons[] = { + { ClkTagBar, MODKEY, Button1, tag, {0} }, + { ClkTagBar, MODKEY, Button3, toggletag, {0} }, + }; +- +diff --git a/dwm.c b/dwm.c +index 4465af1..f3c97c4 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -117,6 +117,7 @@ struct Monitor { + int nmaster; + int num; + int by; /* bar geometry */ ++ int eby; /* extra bar geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ + unsigned int seltags; +@@ -129,6 +130,7 @@ struct Monitor { + Client *stack; + Monitor *next; + Window barwin; ++ Window extrabarwin; + const Layout *lt[2]; + }; + +@@ -163,6 +165,7 @@ static void detachstack(Client *c); + static Monitor *dirtomon(int dir); + static void drawbar(Monitor *m); + static void drawbars(void); ++static int drawstatusbar(Monitor *m, int bh, int extra, char* text); + static void enternotify(XEvent *e); + static void expose(XEvent *e); + static void focus(Client *c); +@@ -236,7 +239,8 @@ static void zoom(const Arg *arg); + + /* variables */ + static const char broken[] = "broken"; +-static char stext[256]; ++static char stext[1024]; ++static char estext[1024]; + static int screen; + static int sw, sh; /* X display screen geometry width, height */ + static int bh, blw = 0; /* bar geometry */ +@@ -484,7 +488,7 @@ cleanup(void) + cleanupmon(mons); + for (i = 0; i < CurLast; i++) + drw_cur_free(drw, cursor[i]); +- for (i = 0; i < LENGTH(colors); i++) ++ for (i = 0; i < LENGTH(colors) + 1; i++) + free(scheme[i]); + XDestroyWindow(dpy, wmcheckwin); + drw_free(drw); +@@ -505,7 +509,9 @@ cleanupmon(Monitor *mon) + m->next = mon->next; + } + XUnmapWindow(dpy, mon->barwin); ++ XUnmapWindow(dpy, mon->extrabarwin); + XDestroyWindow(dpy, mon->barwin); ++ XDestroyWindow(dpy, mon->extrabarwin); + free(mon); + } + +@@ -568,6 +574,7 @@ configurenotify(XEvent *e) + if (c->isfullscreen) + resizeclient(c, m->mx, m->my, m->mw, m->mh); + XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); ++ XMoveResizeWindow(dpy, m->extrabarwin, m->wx, m->eby, m->ww, bh); + } + focus(NULL); + arrange(NULL); +@@ -692,6 +699,119 @@ dirtomon(int dir) + return m; + } + ++int ++drawstatusbar(Monitor *m, int bh, int extra, char* stext) { ++ int ret, i, w, x, len; ++ short isCode = 0; ++ char *text; ++ char *p; ++ ++ len = strlen(stext) + 1 ; ++ if (!(text = (char*) malloc(sizeof(char)*len))) ++ die("malloc"); ++ p = text; ++ memcpy(text, stext, len); ++ ++ /* compute width of the status text */ ++ w = 0; ++ i = -1; ++ while (text[++i]) { ++ if (text[i] == '^') { ++ if (!isCode) { ++ isCode = 1; ++ text[i] = '\0'; ++ w += TEXTW(text) - lrpad; ++ text[i] = '^'; ++ if (text[++i] == 'f') ++ w += atoi(text + ++i); ++ } else { ++ isCode = 0; ++ text = text + i + 1; ++ i = -1; ++ } ++ } ++ } ++ if (!isCode) ++ w += TEXTW(text) - lrpad; ++ else ++ isCode = 0; ++ text = p; ++ ++ if (extra) { ++ w = m->ww; ++ ret = x = 1; ++ } else { ++ w += 2; /* 1px padding on both sides */ ++ ret = x = m->ww - w; ++ } ++ ++ drw_setscheme(drw, scheme[LENGTH(colors)]); ++ drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; ++ drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; ++ drw_rect(drw, x, 0, w, bh, 1, 1); ++ x++; ++ ++ /* process status text */ ++ i = -1; ++ while (text[++i]) { ++ if (text[i] == '^' && !isCode) { ++ isCode = 1; ++ ++ text[i] = '\0'; ++ w = TEXTW(text) - lrpad; ++ drw_text(drw, x, 0, w, bh, 0, text, 0); ++ ++ x += w; ++ ++ /* process code */ ++ while (text[++i] != '^') { ++ if (text[i] == 'c') { ++ char buf[8]; ++ memcpy(buf, (char*)text+i+1, 7); ++ buf[7] = '\0'; ++ drw_clr_create(drw, &drw->scheme[ColFg], buf); ++ i += 7; ++ } else if (text[i] == 'b') { ++ char buf[8]; ++ memcpy(buf, (char*)text+i+1, 7); ++ buf[7] = '\0'; ++ drw_clr_create(drw, &drw->scheme[ColBg], buf); ++ i += 7; ++ } else if (text[i] == 'd') { ++ drw->scheme[ColFg] = scheme[SchemeNorm][ColFg]; ++ drw->scheme[ColBg] = scheme[SchemeNorm][ColBg]; ++ } else if (text[i] == 'r') { ++ int rx = atoi(text + ++i); ++ while (text[++i] != ','); ++ int ry = atoi(text + ++i); ++ while (text[++i] != ','); ++ int rw = atoi(text + ++i); ++ while (text[++i] != ','); ++ int rh = atoi(text + ++i); ++ ++ drw_rect(drw, rx + x, ry, rw, rh, 1, 0); ++ } else if (text[i] == 'f') { ++ x += atoi(text + ++i); ++ } ++ } ++ ++ text = text + i + 1; ++ i=-1; ++ isCode = 0; ++ } ++ } ++ ++ if (!isCode) { ++ w = TEXTW(text) - lrpad; ++ drw_text(drw, x, 0, w, bh, 0, text, 0); ++ } ++ ++ drw_setscheme(drw, scheme[SchemeNorm]); ++ free(p); ++ ++ return ret; ++} ++ + void + drawbar(Monitor *m) + { +@@ -703,9 +823,7 @@ drawbar(Monitor *m) + + /* 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); ++ sw = m->ww - drawstatusbar(m, bh, 0, stext); + } + + for (c = m->clients; c; c = c->next) { +@@ -740,6 +858,11 @@ drawbar(Monitor *m) + } + } + drw_map(drw, m->barwin, 0, 0, m->ww, bh); ++ ++ if (m == selmon) { /* extra status is only drawn on selected monitor */ ++ sw = drawstatusbar(m, bh, 1, estext); ++ drw_map(drw, m->extrabarwin, 0, 0, m->ww, bh); ++ } + } + + void +@@ -1567,7 +1690,8 @@ setup(void) + cursor[CurResize] = drw_cur_create(drw, XC_sizing); + cursor[CurMove] = drw_cur_create(drw, XC_fleur); + /* init appearance */ +- scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); ++ scheme = ecalloc(LENGTH(colors) + 1, sizeof(Clr *)); ++ scheme[LENGTH(colors)] = drw_scm_create(drw, colors[0], 3); + for (i = 0; i < LENGTH(colors); i++) + scheme[i] = drw_scm_create(drw, colors[i], 3); + /* init bars */ +@@ -1702,6 +1826,7 @@ togglebar(const Arg *arg) + selmon->showbar = !selmon->showbar; + updatebarpos(selmon); + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); ++ XMoveResizeWindow(dpy, selmon->extrabarwin, selmon->wx, selmon->eby, selmon->ww, bh); + arrange(selmon); + } + +@@ -1809,14 +1934,22 @@ updatebars(void) + }; + 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); ++ if (!m->barwin) { ++ 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); ++ } ++ if (!m->extrabarwin) { ++ m->extrabarwin = XCreateWindow(dpy, root, m->wx, m->eby, m->ww, bh, 0, DefaultDepth(dpy, screen), ++ CopyFromParent, DefaultVisual(dpy, screen), ++ CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); ++ XDefineCursor(dpy, m->extrabarwin, cursor[CurNormal]->cursor); ++ XMapRaised(dpy, m->extrabarwin); ++ XSetClassHint(dpy, m->extrabarwin, &ch); ++ } + } + } + +@@ -1825,12 +1958,15 @@ updatebarpos(Monitor *m) + { + m->wy = m->my; + m->wh = m->mh; ++ m->wh -= bh * m->showbar * 2; ++ m->wy = m->showbar ? m->wy + bh : m->wy; + if (m->showbar) { +- m->wh -= bh; +- m->by = m->topbar ? m->wy : m->wy + m->wh; +- m->wy = m->topbar ? m->wy + bh : m->wy; +- } else ++ m->by = m->topbar ? m->wy - bh : m->wy + m->wh; ++ m->eby = m->topbar ? m->wy + m->wh : m->wy - bh; ++ } else { + m->by = -bh; ++ m->eby = -bh; ++ } + } + + void +@@ -1987,8 +2123,20 @@ updatesizehints(Client *c) + void + updatestatus(void) + { +- if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) ++ char text[2048]; ++ if (!gettextprop(root, XA_WM_NAME, text, sizeof(text))) { + strcpy(stext, "dwm-"VERSION); ++ estext[0] = '\0'; ++ } else { ++ char *e = strchr(text, statussep); ++ if (e) { ++ *e = '\0'; e++; ++ strncpy(estext, e, sizeof(estext) - 1); ++ } else { ++ estext[0] = '\0'; ++ } ++ strncpy(stext, text, sizeof(stext) - 1); ++ } + drawbar(selmon); + } + +@@ -2067,7 +2215,7 @@ wintomon(Window w) + if (w == root && getrootptr(&x, &y)) + return recttomon(x, y, 1, 1); + for (m = mons; m; m = m->next) +- if (w == m->barwin) ++ if (w == m->barwin || w == m->extrabarwin) + return m; + if ((c = wintoclient(w))) + return c->mon; +-- +2.27.0 + diff --git a/dwm.suckless.org/patches/status2d/index.md b/dwm.suckless.org/patches/status2d/index.md @@ -14,6 +14,9 @@ Download * [dwm-status2d-6.2.diff](dwm-status2d-6.2.diff) * [dwm-status2d-20200508-60bb3df.diff](dwm-status2d-20200508-60bb3df.diff) +Use this patch if you want to include the extrabar patch + +* [dwm-status2d-extrabar-6.2.diff](dwm-status2d-extrabar-6.2.diff) Usage -----