From 6fcc90d4e85627249ae25fe12e3ad4b2e29a9ab6 Mon Sep 17 00:00:00 2001 From: rinri Date: Sun, 8 Nov 2020 14:11:41 +0000 Subject: [PATCH] dunno --- README.md | 1 + config.def.h | 6 +- config.def.h.orig | 8 +- config.h | 6 +- drw.o | Bin 0 -> 10600 bytes dwm | Bin 0 -> 77984 bytes dwm-centeredmaster-6.1.diff | 142 ++++++++++ dwm-swallow-20200807-b2de9b0.diff | 412 ------------------------------ dwm.c | 105 ++++++++ dwm.c.orig | 235 ++++++++++++++++- dwm.c.rej | 45 +--- dwm.o | Bin 0 -> 69184 bytes patches.txt | 2 + util.o | Bin 0 -> 2264 bytes 14 files changed, 505 insertions(+), 457 deletions(-) create mode 100644 drw.o create mode 100755 dwm create mode 100644 dwm-centeredmaster-6.1.diff delete mode 100644 dwm-swallow-20200807-b2de9b0.diff create mode 100644 dwm.o create mode 100644 util.o diff --git a/README.md b/README.md index c0e93f7..9bce6d4 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ This my own patched and configured dwm build with following pathes: - alwaysontop - cool-autostart - center +- centeredmaster - fullgaps - swallow diff --git a/config.def.h b/config.def.h index 6c16d2f..cf8f7be 100644 --- a/config.def.h +++ b/config.def.h @@ -28,7 +28,7 @@ static const char *const autostart[] = { }; /* tagging */ -static const char *tags[] = { "", "", "", "", "", "", "" }; +static const char *tags[] = { "", "", "", "", "", "", "", "", "" }; static const Rule rules[] = { /* xprop(1): @@ -55,6 +55,8 @@ static const Layout layouts[] = { { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, + { "|M|", centeredmaster }, + { ">M>", centeredfloatingmaster }, }; /* key definitions */ @@ -111,6 +113,8 @@ static Key keys[] = { { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_u, setlayout, {.v = &layouts[3]} }, + { MODKEY, XK_o, setlayout, {.v = &layouts[4]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, diff --git a/config.def.h.orig b/config.def.h.orig index b53bf6a..d3e16e8 100644 --- a/config.def.h.orig +++ b/config.def.h.orig @@ -4,6 +4,7 @@ static const unsigned int borderpx = 2; /* border pixel of windows */ static const unsigned int gappx = 15; static const unsigned int snap = 32; /* snap pixel */ +static const int swallowfloating = 0; /* 1 means swallow floating windows by default */ static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ static const char *fonts[] = { "monospace:size=13", "fontawesome:size=15"}; @@ -27,7 +28,7 @@ static const char *const autostart[] = { }; /* tagging */ -static const char *tags[] = { "", "", "", "", "", "", "" }; +static const char *tags[] = { "", "", "", "", "", "", "", "", "" }; static const Rule rules[] = { /* xprop(1): @@ -37,6 +38,11 @@ static const Rule rules[] = { /* class instance title tags mask iscentered isfloating monitor */ { "Gimp", NULL, NULL, 0, 0, 1, -1 }, { "Firefox", NULL, NULL, 1 << 8, 0, 0, -1 }, + /* class instance title tags mask iscentered isfloating isterminal noswallow monitor */ + { "Gimp", NULL, NULL, 0,0, 1, 0, 0, -1 }, + { "Firefox", NULL, NULL, 1 << 8,0, 0, 0, -1, -1 }, + { "St", NULL, NULL, 0,0, 0, 1, 0, -1 }, + { NULL, NULL, "Event Tester", 0,0, 0, 0, 1, -1 }, /* xev */ }; /* layout(s) */ diff --git a/config.h b/config.h index 6c16d2f..cf8f7be 100644 --- a/config.h +++ b/config.h @@ -28,7 +28,7 @@ static const char *const autostart[] = { }; /* tagging */ -static const char *tags[] = { "", "", "", "", "", "", "" }; +static const char *tags[] = { "", "", "", "", "", "", "", "", "" }; static const Rule rules[] = { /* xprop(1): @@ -55,6 +55,8 @@ static const Layout layouts[] = { { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, + { "|M|", centeredmaster }, + { ">M>", centeredfloatingmaster }, }; /* key definitions */ @@ -111,6 +113,8 @@ static Key keys[] = { { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_u, setlayout, {.v = &layouts[3]} }, + { MODKEY, XK_o, setlayout, {.v = &layouts[4]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, diff --git a/drw.o b/drw.o new file mode 100644 index 0000000000000000000000000000000000000000..2b2a07fed2ab490087f88d41239c7fc2bb9805d2 GIT binary patch literal 10600 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 Fe*m!DWat0@ literal 0 HcmV?d00001 diff --git a/dwm b/dwm new file mode 100755 index 0000000000000000000000000000000000000000..02a5e844e40086cf73941823f6af474d4aed50ba GIT binary patch literal 77984 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 PZ-$eUb5-*%U)1~`7tW15 literal 0 HcmV?d00001 diff --git a/dwm-centeredmaster-6.1.diff b/dwm-centeredmaster-6.1.diff new file mode 100644 index 0000000..6926892 --- /dev/null +++ b/dwm-centeredmaster-6.1.diff @@ -0,0 +1,142 @@ +diff --git a/config.def.h b/config.def.h +index 7054c06..527b214 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -39,6 +39,8 @@ static const Layout layouts[] = { + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, ++ { "|M|", centeredmaster }, ++ { ">M>", centeredfloatingmaster }, + }; + + /* key definitions */ +@@ -74,6 +76,8 @@ static Key keys[] = { + { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, + { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, + { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, ++ { MODKEY, XK_u, setlayout, {.v = &layouts[3]} }, ++ { MODKEY, XK_o, setlayout, {.v = &layouts[4]} }, + { MODKEY, XK_space, setlayout, {0} }, + { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, + { MODKEY, XK_0, view, {.ui = ~0 } }, +diff --git a/dwm.c b/dwm.c +index 0362114..1e81412 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -233,6 +233,8 @@ static int xerror(Display *dpy, XErrorEvent *ee); + static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); ++static void centeredmaster(Monitor *m); ++static void centeredfloatingmaster(Monitor *m); + + /* variables */ + static const char broken[] = "broken"; +@@ -2139,3 +2141,106 @@ main(int argc, char *argv[]) + XCloseDisplay(dpy); + return EXIT_SUCCESS; + } ++ ++void ++centeredmaster(Monitor *m) ++{ ++ unsigned int i, n, h, mw, mx, my, oty, ety, tw; ++ Client *c; ++ ++ /* count number of clients in the selected monitor */ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ if (n == 0) ++ return; ++ ++ /* initialize areas */ ++ mw = m->ww; ++ mx = 0; ++ my = 0; ++ tw = mw; ++ ++ if (n > m->nmaster) { ++ /* go mfact box in the center if more than nmaster clients */ ++ mw = m->nmaster ? m->ww * m->mfact : 0; ++ tw = m->ww - mw; ++ ++ if (n - m->nmaster > 1) { ++ /* only one client */ ++ mx = (m->ww - mw) / 2; ++ tw = (m->ww - mw) / 2; ++ } ++ } ++ ++ oty = 0; ++ ety = 0; ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if (i < m->nmaster) { ++ /* nmaster clients are stacked vertically, in the center ++ * of the screen */ ++ h = (m->wh - my) / (MIN(n, m->nmaster) - i); ++ resize(c, m->wx + mx, m->wy + my, mw - (2*c->bw), ++ h - (2*c->bw), 0); ++ my += HEIGHT(c); ++ } else { ++ /* stack clients are stacked vertically */ ++ if ((i - m->nmaster) % 2 ) { ++ h = (m->wh - ety) / ( (1 + n - i) / 2); ++ resize(c, m->wx, m->wy + ety, tw - (2*c->bw), ++ h - (2*c->bw), 0); ++ ety += HEIGHT(c); ++ } else { ++ h = (m->wh - oty) / ((1 + n - i) / 2); ++ resize(c, m->wx + mx + mw, m->wy + oty, ++ tw - (2*c->bw), h - (2*c->bw), 0); ++ oty += HEIGHT(c); ++ } ++ } ++} ++ ++void ++centeredfloatingmaster(Monitor *m) ++{ ++ unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx; ++ Client *c; ++ ++ /* count number of clients in the selected monitor */ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ if (n == 0) ++ return; ++ ++ /* initialize nmaster area */ ++ if (n > m->nmaster) { ++ /* go mfact box in the center if more than nmaster clients */ ++ if (m->ww > m->wh) { ++ mw = m->nmaster ? m->ww * m->mfact : 0; ++ mh = m->nmaster ? m->wh * 0.9 : 0; ++ } else { ++ mh = m->nmaster ? m->wh * m->mfact : 0; ++ mw = m->nmaster ? m->ww * 0.9 : 0; ++ } ++ mx = mxo = (m->ww - mw) / 2; ++ my = myo = (m->wh - mh) / 2; ++ } else { ++ /* go fullscreen if all clients are in the master area */ ++ mh = m->wh; ++ mw = m->ww; ++ mx = mxo = 0; ++ my = myo = 0; ++ } ++ ++ for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if (i < m->nmaster) { ++ /* nmaster clients are stacked horizontally, in the center ++ * of the screen */ ++ w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i); ++ resize(c, m->wx + mx, m->wy + my, w - (2*c->bw), ++ mh - (2*c->bw), 0); ++ mx += WIDTH(c); ++ } else { ++ /* stack clients are stacked horizontally */ ++ w = (m->ww - tx) / (n - i); ++ resize(c, m->wx + tx, m->wy, w - (2*c->bw), ++ m->wh - (2*c->bw), 0); ++ tx += WIDTH(c); ++ } ++} diff --git a/dwm-swallow-20200807-b2de9b0.diff b/dwm-swallow-20200807-b2de9b0.diff deleted file mode 100644 index b3dbf46..0000000 --- a/dwm-swallow-20200807-b2de9b0.diff +++ /dev/null @@ -1,412 +0,0 @@ -From b2de9b0fd7988241db516a8f032f26cb9cf32be1 Mon Sep 17 00:00:00 2001 -From: Ben -Date: Fri, 7 Aug 2020 20:14:29 -0400 -Subject: [PATCH] added openbsd support for swallowing - ---- - config.def.h | 9 +- - config.mk | 3 +- - dwm.c | 235 +++++++++++++++++++++++++++++++++++++++++++++++++-- - 3 files changed, 237 insertions(+), 10 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 1c0b587..fe51476 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -3,6 +3,7 @@ - /* appearance */ - static const unsigned int borderpx = 1; /* border pixel of windows */ - static const unsigned int snap = 32; /* snap pixel */ -+static const int swallowfloating = 0; /* 1 means swallow floating windows by default */ - 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" }; -@@ -26,9 +27,11 @@ static const Rule rules[] = { - * WM_CLASS(STRING) = instance, class - * WM_NAME(STRING) = title - */ -- /* class instance title tags mask isfloating monitor */ -- { "Gimp", NULL, NULL, 0, 1, -1 }, -- { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, -+ /* class instance title tags mask isfloating isterminal noswallow monitor */ -+ { "Gimp", NULL, NULL, 0, 1, 0, 0, -1 }, -+ { "Firefox", NULL, NULL, 1 << 8, 0, 0, -1, -1 }, -+ { "St", NULL, NULL, 0, 0, 1, 0, -1 }, -+ { NULL, NULL, "Event Tester", 0, 0, 0, 1, -1 }, /* xev */ - }; - - /* layout(s) */ -diff --git a/config.mk b/config.mk -index 7084c33..ff9e508 100644 ---- a/config.mk -+++ b/config.mk -@@ -19,10 +19,11 @@ FREETYPELIBS = -lfontconfig -lXft - FREETYPEINC = /usr/include/freetype2 - # OpenBSD (uncomment) - #FREETYPEINC = ${X11INC}/freetype2 -+#KVMLIB = -lkvm - - # includes and libs - INCS = -I${X11INC} -I${FREETYPEINC} --LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -+LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lX11-xcb -lxcb -lxcb-res ${KVMLIB} - - # flags - CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=200809L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} -diff --git a/dwm.c b/dwm.c -index 9fd0286..e9f08f7 100644 ---- a/dwm.c -+++ b/dwm.c -@@ -40,6 +40,12 @@ - #include - #endif /* XINERAMA */ - #include -+#include -+#include -+#ifdef __OpenBSD__ -+#include -+#include -+#endif /* __OpenBSD */ - - #include "drw.h" - #include "util.h" -@@ -92,9 +98,11 @@ struct Client { - int basew, baseh, incw, inch, maxw, maxh, minw, minh; - int bw, oldbw; - unsigned int tags; -- int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; -+ int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, isterminal, noswallow; -+ pid_t pid; - Client *next; - Client *snext; -+ Client *swallowing; - Monitor *mon; - Window win; - }; -@@ -138,6 +146,8 @@ typedef struct { - const char *title; - unsigned int tags; - int isfloating; -+ int isterminal; -+ int noswallow; - int monitor; - } Rule; - -@@ -235,6 +245,12 @@ static int xerrordummy(Display *dpy, XErrorEvent *ee); - static int xerrorstart(Display *dpy, XErrorEvent *ee); - static void zoom(const Arg *arg); - -+static pid_t getparentprocess(pid_t p); -+static int isdescprocess(pid_t p, pid_t c); -+static Client *swallowingclient(Window w); -+static Client *termforwin(const Client *c); -+static pid_t winpid(Window w); -+ - /* variables */ - static const char broken[] = "broken"; - static char stext[256]; -@@ -269,6 +285,8 @@ static Drw *drw; - static Monitor *mons, *selmon; - static Window root, wmcheckwin; - -+static xcb_connection_t *xcon; -+ - /* configuration, allows nested code to access above variables */ - #include "config.h" - -@@ -298,6 +316,8 @@ applyrules(Client *c) - && (!r->class || strstr(class, r->class)) - && (!r->instance || strstr(instance, r->instance))) - { -+ c->isterminal = r->isterminal; -+ c->noswallow = r->noswallow; - c->isfloating = r->isfloating; - c->tags |= r->tags; - for (m = mons; m && m->num != r->monitor; m = m->next); -@@ -414,6 +434,53 @@ attachstack(Client *c) - c->mon->stack = c; - } - -+void -+swallow(Client *p, Client *c) -+{ -+ -+ if (c->noswallow || c->isterminal) -+ return; -+ if (c->noswallow && !swallowfloating && c->isfloating) -+ return; -+ -+ detach(c); -+ detachstack(c); -+ -+ setclientstate(c, WithdrawnState); -+ XUnmapWindow(dpy, p->win); -+ -+ p->swallowing = c; -+ c->mon = p->mon; -+ -+ Window w = p->win; -+ p->win = c->win; -+ c->win = w; -+ updatetitle(p); -+ XMoveResizeWindow(dpy, p->win, p->x, p->y, p->w, p->h); -+ arrange(p->mon); -+ configure(p); -+ updateclientlist(); -+} -+ -+void -+unswallow(Client *c) -+{ -+ c->win = c->swallowing->win; -+ -+ free(c->swallowing); -+ c->swallowing = NULL; -+ -+ /* unfullscreen the client */ -+ setfullscreen(c, 0); -+ updatetitle(c); -+ arrange(c->mon); -+ XMapWindow(dpy, c->win); -+ XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); -+ setclientstate(c, NormalState); -+ focus(NULL); -+ arrange(c->mon); -+} -+ - void - buttonpress(XEvent *e) - { -@@ -653,6 +720,9 @@ destroynotify(XEvent *e) - - if ((c = wintoclient(ev->window))) - unmanage(c, 1); -+ -+ else if ((c = swallowingclient(ev->window))) -+ unmanage(c->swallowing, 1); - } - - void -@@ -1018,12 +1088,13 @@ killclient(const Arg *arg) - void - manage(Window w, XWindowAttributes *wa) - { -- Client *c, *t = NULL; -+ Client *c, *t = NULL, *term = NULL; - Window trans = None; - XWindowChanges wc; - - c = ecalloc(1, sizeof(Client)); - c->win = w; -+ c->pid = winpid(w); - /* geometry */ - c->x = c->oldx = wa->x; - c->y = c->oldy = wa->y; -@@ -1038,6 +1109,7 @@ manage(Window w, XWindowAttributes *wa) - } else { - c->mon = selmon; - applyrules(c); -+ term = termforwin(c); - } - - if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw) -@@ -1074,6 +1146,8 @@ manage(Window w, XWindowAttributes *wa) - c->mon->sel = c; - arrange(c->mon); - XMapWindow(dpy, c->win); -+ if (term) -+ swallow(term, c); - focus(NULL); - } - -@@ -1768,6 +1842,20 @@ unmanage(Client *c, int destroyed) - Monitor *m = c->mon; - XWindowChanges wc; - -+ if (c->swallowing) { -+ unswallow(c); -+ return; -+ } -+ -+ Client *s = swallowingclient(c->win); -+ if (s) { -+ free(s->swallowing); -+ s->swallowing = NULL; -+ arrange(m); -+ focus(NULL); -+ return; -+ } -+ - detach(c); - detachstack(c); - if (!destroyed) { -@@ -1782,9 +1870,12 @@ unmanage(Client *c, int destroyed) - XUngrabServer(dpy); - } - free(c); -- focus(NULL); -- updateclientlist(); -- arrange(m); -+ -+ if (!s) { -+ arrange(m); -+ focus(NULL); -+ updateclientlist(); -+ } - } - - void -@@ -2047,6 +2138,136 @@ view(const Arg *arg) - arrange(selmon); - } - -+pid_t -+winpid(Window w) -+{ -+ -+ pid_t result = 0; -+ -+ #ifdef __linux__ -+ xcb_res_client_id_spec_t spec = {0}; -+ spec.client = w; -+ spec.mask = XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID; -+ -+ xcb_generic_error_t *e = NULL; -+ xcb_res_query_client_ids_cookie_t c = xcb_res_query_client_ids(xcon, 1, &spec); -+ xcb_res_query_client_ids_reply_t *r = xcb_res_query_client_ids_reply(xcon, c, &e); -+ -+ if (!r) -+ return (pid_t)0; -+ -+ xcb_res_client_id_value_iterator_t i = xcb_res_query_client_ids_ids_iterator(r); -+ for (; i.rem; xcb_res_client_id_value_next(&i)) { -+ spec = i.data->spec; -+ if (spec.mask & XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID) { -+ uint32_t *t = xcb_res_client_id_value_value(i.data); -+ result = *t; -+ break; -+ } -+ } -+ -+ free(r); -+ -+ if (result == (pid_t)-1) -+ result = 0; -+ -+ #endif /* __linux__ */ -+ -+ #ifdef __OpenBSD__ -+ Atom type; -+ int format; -+ unsigned long len, bytes; -+ unsigned char *prop; -+ pid_t ret; -+ -+ if (XGetWindowProperty(dpy, w, XInternAtom(dpy, "_NET_WM_PID", 1), 0, 1, False, AnyPropertyType, &type, &format, &len, &bytes, &prop) != Success || !prop) -+ return 0; -+ -+ ret = *(pid_t*)prop; -+ XFree(prop); -+ result = ret; -+ -+ #endif /* __OpenBSD__ */ -+ return result; -+} -+ -+pid_t -+getparentprocess(pid_t p) -+{ -+ unsigned int v = 0; -+ -+#ifdef __linux__ -+ FILE *f; -+ char buf[256]; -+ snprintf(buf, sizeof(buf) - 1, "/proc/%u/stat", (unsigned)p); -+ -+ if (!(f = fopen(buf, "r"))) -+ return 0; -+ -+ fscanf(f, "%*u %*s %*c %u", &v); -+ fclose(f); -+#endif /* __linux__*/ -+ -+#ifdef __OpenBSD__ -+ int n; -+ kvm_t *kd; -+ struct kinfo_proc *kp; -+ -+ kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, NULL); -+ if (!kd) -+ return 0; -+ -+ kp = kvm_getprocs(kd, KERN_PROC_PID, p, sizeof(*kp), &n); -+ v = kp->p_ppid; -+#endif /* __OpenBSD__ */ -+ -+ return (pid_t)v; -+} -+ -+int -+isdescprocess(pid_t p, pid_t c) -+{ -+ while (p != c && c != 0) -+ c = getparentprocess(c); -+ -+ return (int)c; -+} -+ -+Client * -+termforwin(const Client *w) -+{ -+ Client *c; -+ Monitor *m; -+ -+ if (!w->pid || w->isterminal) -+ return NULL; -+ -+ for (m = mons; m; m = m->next) { -+ for (c = m->clients; c; c = c->next) { -+ if (c->isterminal && !c->swallowing && c->pid && isdescprocess(c->pid, w->pid)) -+ return c; -+ } -+ } -+ -+ return NULL; -+} -+ -+Client * -+swallowingclient(Window w) -+{ -+ Client *c; -+ Monitor *m; -+ -+ for (m = mons; m; m = m->next) { -+ for (c = m->clients; c; c = c->next) { -+ if (c->swallowing && c->swallowing->win == w) -+ return c; -+ } -+ } -+ -+ return NULL; -+} -+ - Client * - wintoclient(Window w) - { -@@ -2138,10 +2359,12 @@ main(int argc, char *argv[]) - fputs("warning: no locale support\n", stderr); - if (!(dpy = XOpenDisplay(NULL))) - die("dwm: cannot open display"); -+ if (!(xcon = XGetXCBConnection(dpy))) -+ die("dwm: cannot get xcb connection\n"); - checkotherwm(); - setup(); - #ifdef __OpenBSD__ -- if (pledge("stdio rpath proc exec", NULL) == -1) -+ if (pledge("stdio rpath proc exec ps", NULL) == -1) - die("pledge"); - #endif /* __OpenBSD__ */ - scan(); --- -2.26.2 - diff --git a/dwm.c b/dwm.c index aa9c6c9..a1f36c3 100644 --- a/dwm.c +++ b/dwm.c @@ -247,6 +247,8 @@ static int xerror(Display *dpy, XErrorEvent *ee); static int xerrordummy(Display *dpy, XErrorEvent *ee); static int xerrorstart(Display *dpy, XErrorEvent *ee); static void zoom(const Arg *arg); +static void centeredmaster(Monitor *m); +static void centeredfloatingmaster(Monitor *m); static void autostart_exec(void); static pid_t getparentprocess(pid_t p); @@ -2489,3 +2491,106 @@ main(int argc, char *argv[]) XCloseDisplay(dpy); return EXIT_SUCCESS; } + +void +centeredmaster(Monitor *m) +{ + unsigned int i, n, h, mw, mx, my, oty, ety, tw; + Client *c; + + /* count number of clients in the selected monitor */ + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if (n == 0) + return; + + /* initialize areas */ + mw = m->ww; + mx = 0; + my = 0; + tw = mw; + + if (n > m->nmaster) { + /* go mfact box in the center if more than nmaster clients */ + mw = m->nmaster ? m->ww * m->mfact : 0; + tw = m->ww - mw; + + if (n - m->nmaster > 1) { + /* only one client */ + mx = (m->ww - mw) / 2; + tw = (m->ww - mw) / 2; + } + } + + oty = 0; + ety = 0; + for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + /* nmaster clients are stacked vertically, in the center + * of the screen */ + h = (m->wh - my) / (MIN(n, m->nmaster) - i); + resize(c, m->wx + mx, m->wy + my, mw - (2*c->bw), + h - (2*c->bw), 0); + my += HEIGHT(c); + } else { + /* stack clients are stacked vertically */ + if ((i - m->nmaster) % 2 ) { + h = (m->wh - ety) / ( (1 + n - i) / 2); + resize(c, m->wx, m->wy + ety, tw - (2*c->bw), + h - (2*c->bw), 0); + ety += HEIGHT(c); + } else { + h = (m->wh - oty) / ((1 + n - i) / 2); + resize(c, m->wx + mx + mw, m->wy + oty, + tw - (2*c->bw), h - (2*c->bw), 0); + oty += HEIGHT(c); + } + } +} + +void +centeredfloatingmaster(Monitor *m) +{ + unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx; + Client *c; + + /* count number of clients in the selected monitor */ + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if (n == 0) + return; + + /* initialize nmaster area */ + if (n > m->nmaster) { + /* go mfact box in the center if more than nmaster clients */ + if (m->ww > m->wh) { + mw = m->nmaster ? m->ww * m->mfact : 0; + mh = m->nmaster ? m->wh * 0.9 : 0; + } else { + mh = m->nmaster ? m->wh * m->mfact : 0; + mw = m->nmaster ? m->ww * 0.9 : 0; + } + mx = mxo = (m->ww - mw) / 2; + my = myo = (m->wh - mh) / 2; + } else { + /* go fullscreen if all clients are in the master area */ + mh = m->wh; + mw = m->ww; + mx = mxo = 0; + my = myo = 0; + } + + for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + /* nmaster clients are stacked horizontally, in the center + * of the screen */ + w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i); + resize(c, m->wx + mx, m->wy + my, w - (2*c->bw), + mh - (2*c->bw), 0); + mx += WIDTH(c); + } else { + /* stack clients are stacked horizontally */ + w = (m->ww - tx) / (n - i); + resize(c, m->wx + tx, m->wy, w - (2*c->bw), + m->wh - (2*c->bw), 0); + tx += WIDTH(c); + } +} diff --git a/dwm.c.orig b/dwm.c.orig index 78e3aa4..aa9c6c9 100644 --- a/dwm.c.orig +++ b/dwm.c.orig @@ -40,6 +40,12 @@ #include #endif /* XINERAMA */ #include +#include +#include +#ifdef __OpenBSD__ +#include +#include +#endif /* __OpenBSD */ #include "drw.h" #include "util.h" @@ -92,9 +98,11 @@ struct Client { int basew, baseh, incw, inch, maxw, maxh, minw, minh; int bw, oldbw; unsigned int tags; - int isfixed, iscentered, isfloating, isalwaysontop, isurgent, neverfocus, oldstate, isfullscreen; + int isfixed, iscentered, isfloating, isalwaysontop, isurgent, neverfocus, oldstate, isfullscreen, isterminal, noswallow; + pid_t pid; Client *next; Client *snext; + Client *swallowing; Monitor *mon; Window win; }; @@ -140,6 +148,8 @@ typedef struct { unsigned int tags; int iscentered; int isfloating; + int isterminal; + int noswallow; int monitor; } Rule; @@ -239,6 +249,12 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee); static void zoom(const Arg *arg); static void autostart_exec(void); +static pid_t getparentprocess(pid_t p); +static int isdescprocess(pid_t p, pid_t c); +static Client *swallowingclient(Window w); +static Client *termforwin(const Client *c); +static pid_t winpid(Window w); + /* variables */ static const char broken[] = "broken"; static char stext[256]; @@ -273,6 +289,8 @@ static Drw *drw; static Monitor *mons, *selmon; static Window root, wmcheckwin; +static xcb_connection_t *xcon; + /* configuration, allows nested code to access above variables */ #include "config.h" @@ -331,6 +349,8 @@ applyrules(Client *c) && (!r->class || strstr(class, r->class)) && (!r->instance || strstr(instance, r->instance))) { + c->isterminal = r->isterminal; + c->noswallow = r->noswallow; c->iscentered = r->iscentered; c->isfloating = r->isfloating; c->tags |= r->tags; @@ -448,6 +468,53 @@ attachstack(Client *c) c->mon->stack = c; } +void +swallow(Client *p, Client *c) +{ + + if (c->noswallow || c->isterminal) + return; + if (c->noswallow && !swallowfloating && c->isfloating) + return; + + detach(c); + detachstack(c); + + setclientstate(c, WithdrawnState); + XUnmapWindow(dpy, p->win); + + p->swallowing = c; + c->mon = p->mon; + + Window w = p->win; + p->win = c->win; + c->win = w; + updatetitle(p); + XMoveResizeWindow(dpy, p->win, p->x, p->y, p->w, p->h); + arrange(p->mon); + configure(p); + updateclientlist(); +} + +void +unswallow(Client *c) +{ + c->win = c->swallowing->win; + + free(c->swallowing); + c->swallowing = NULL; + + /* unfullscreen the client */ + setfullscreen(c, 0); + updatetitle(c); + arrange(c->mon); + XMapWindow(dpy, c->win); + XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); + setclientstate(c, NormalState); + focus(NULL); + arrange(c->mon); +} + void buttonpress(XEvent *e) { @@ -688,6 +755,9 @@ destroynotify(XEvent *e) if ((c = wintoclient(ev->window))) unmanage(c, 1); + + else if ((c = swallowingclient(ev->window))) + unmanage(c->swallowing, 1); } void @@ -1056,12 +1126,13 @@ killclient(const Arg *arg) void manage(Window w, XWindowAttributes *wa) { - Client *c, *t = NULL; + Client *c, *t = NULL, *term = NULL; Window trans = None; XWindowChanges wc; c = ecalloc(1, sizeof(Client)); c->win = w; + c->pid = winpid(w); /* geometry */ c->x = c->oldx = wa->x; c->y = c->oldy = wa->y; @@ -1076,6 +1147,7 @@ manage(Window w, XWindowAttributes *wa) } else { c->mon = selmon; applyrules(c); + term = termforwin(c); } if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw) @@ -1116,6 +1188,8 @@ manage(Window w, XWindowAttributes *wa) c->mon->sel = c; arrange(c->mon); XMapWindow(dpy, c->win); + if (term) + swallow(term, c); focus(NULL); } @@ -1881,6 +1955,20 @@ unmanage(Client *c, int destroyed) Monitor *m = c->mon; XWindowChanges wc; + if (c->swallowing) { + unswallow(c); + return; + } + + Client *s = swallowingclient(c->win); + if (s) { + free(s->swallowing); + s->swallowing = NULL; + arrange(m); + focus(NULL); + return; + } + detach(c); detachstack(c); if (!destroyed) { @@ -1895,9 +1983,12 @@ unmanage(Client *c, int destroyed) XUngrabServer(dpy); } free(c); - focus(NULL); - updateclientlist(); - arrange(m); + + if (!s) { + arrange(m); + focus(NULL); + updateclientlist(); + } } void @@ -2162,6 +2253,136 @@ view(const Arg *arg) arrange(selmon); } +pid_t +winpid(Window w) +{ + + pid_t result = 0; + + #ifdef __linux__ + xcb_res_client_id_spec_t spec = {0}; + spec.client = w; + spec.mask = XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID; + + xcb_generic_error_t *e = NULL; + xcb_res_query_client_ids_cookie_t c = xcb_res_query_client_ids(xcon, 1, &spec); + xcb_res_query_client_ids_reply_t *r = xcb_res_query_client_ids_reply(xcon, c, &e); + + if (!r) + return (pid_t)0; + + xcb_res_client_id_value_iterator_t i = xcb_res_query_client_ids_ids_iterator(r); + for (; i.rem; xcb_res_client_id_value_next(&i)) { + spec = i.data->spec; + if (spec.mask & XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID) { + uint32_t *t = xcb_res_client_id_value_value(i.data); + result = *t; + break; + } + } + + free(r); + + if (result == (pid_t)-1) + result = 0; + + #endif /* __linux__ */ + + #ifdef __OpenBSD__ + Atom type; + int format; + unsigned long len, bytes; + unsigned char *prop; + pid_t ret; + + if (XGetWindowProperty(dpy, w, XInternAtom(dpy, "_NET_WM_PID", 1), 0, 1, False, AnyPropertyType, &type, &format, &len, &bytes, &prop) != Success || !prop) + return 0; + + ret = *(pid_t*)prop; + XFree(prop); + result = ret; + + #endif /* __OpenBSD__ */ + return result; +} + +pid_t +getparentprocess(pid_t p) +{ + unsigned int v = 0; + +#ifdef __linux__ + FILE *f; + char buf[256]; + snprintf(buf, sizeof(buf) - 1, "/proc/%u/stat", (unsigned)p); + + if (!(f = fopen(buf, "r"))) + return 0; + + fscanf(f, "%*u %*s %*c %u", &v); + fclose(f); +#endif /* __linux__*/ + +#ifdef __OpenBSD__ + int n; + kvm_t *kd; + struct kinfo_proc *kp; + + kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, NULL); + if (!kd) + return 0; + + kp = kvm_getprocs(kd, KERN_PROC_PID, p, sizeof(*kp), &n); + v = kp->p_ppid; +#endif /* __OpenBSD__ */ + + return (pid_t)v; +} + +int +isdescprocess(pid_t p, pid_t c) +{ + while (p != c && c != 0) + c = getparentprocess(c); + + return (int)c; +} + +Client * +termforwin(const Client *w) +{ + Client *c; + Monitor *m; + + if (!w->pid || w->isterminal) + return NULL; + + for (m = mons; m; m = m->next) { + for (c = m->clients; c; c = c->next) { + if (c->isterminal && !c->swallowing && c->pid && isdescprocess(c->pid, w->pid)) + return c; + } + } + + return NULL; +} + +Client * +swallowingclient(Window w) +{ + Client *c; + Monitor *m; + + for (m = mons; m; m = m->next) { + for (c = m->clients; c; c = c->next) { + if (c->swallowing && c->swallowing->win == w) + return c; + } + } + + return NULL; +} + Client * wintoclient(Window w) { @@ -2253,11 +2474,13 @@ main(int argc, char *argv[]) fputs("warning: no locale support\n", stderr); if (!(dpy = XOpenDisplay(NULL))) die("dwm: cannot open display"); + if (!(xcon = XGetXCBConnection(dpy))) + die("dwm: cannot get xcb connection\n"); checkotherwm(); autostart_exec(); setup(); #ifdef __OpenBSD__ - if (pledge("stdio rpath proc exec", NULL) == -1) + if (pledge("stdio rpath proc exec ps", NULL) == -1) die("pledge"); #endif /* __OpenBSD__ */ scan(); diff --git a/dwm.c.rej b/dwm.c.rej index d62f293..3f8579a 100644 --- a/dwm.c.rej +++ b/dwm.c.rej @@ -1,38 +1,11 @@ --- dwm.c +++ dwm.c -@@ -98,9 +104,11 @@ struct Client { - int basew, baseh, incw, inch, maxw, maxh, minw, minh; - int bw, oldbw; - unsigned int tags; -- int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; -+ int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, isterminal, noswallow; -+ pid_t pid; - Client *next; - Client *snext; -+ Client *swallowing; - Monitor *mon; - Window win; - }; -@@ -314,6 +332,8 @@ applyrules(Client *c) - && (!r->class || strstr(class, r->class)) - && (!r->instance || strstr(instance, r->instance))) - { -+ c->isterminal = r->isterminal; -+ c->noswallow = r->noswallow; - c->isfloating = r->isfloating; - c->tags |= r->tags; - for (m = mons; m && m->num != r->monitor; m = m->next); -@@ -2355,10 +2576,12 @@ main(int argc, char *argv[]) - fputs("warning: no locale support\n", stderr); - if (!(dpy = XOpenDisplay(NULL))) - die("dwm: cannot open display"); -+ if (!(xcon = XGetXCBConnection(dpy))) -+ die("dwm: cannot get xcb connection\n"); - checkotherwm(); - setup(); - #ifdef __OpenBSD__ -- if (pledge("stdio rpath proc exec", NULL) == -1) -+ if (pledge("stdio rpath proc exec ps", NULL) == -1) - die("pledge"); - #endif /* __OpenBSD__ */ - scan(); +@@ -233,6 +233,8 @@ static int xerror(Display *dpy, XErrorEvent *ee); + static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); ++static void centeredmaster(Monitor *m); ++static void centeredfloatingmaster(Monitor *m); + + /* variables */ + static const char broken[] = "broken"; diff --git a/dwm.o b/dwm.o new file mode 100644 index 0000000000000000000000000000000000000000..f75cc6a254981cab6c5d206c9175c66e1880e522 GIT binary patch literal 69184 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 A)&Kwi literal 0 HcmV?d00001 diff --git a/patches.txt b/patches.txt index 82d9817..8fe81a0 100644 --- a/patches.txt +++ b/patches.txt @@ -2,4 +2,6 @@ activetagindicator alwaysontop cool-autostart center +centeredmaster fullgaps +swallow diff --git a/util.o b/util.o new file mode 100644 index 0000000000000000000000000000000000000000..4607dbd27ccff1daf63334f1a4c614aad4f343e1 GIT binary patch literal 2264 zcmbVNJxo(k6h5UW6-!%z0fR$_r=bbHv?NASl@uuO)ED_RB7?QGuc5Jjd3`l#OvH#o z(==glaByI7F>x@_(S$|^S4SsdG{FG}6AdQyocHd9o9FAoA-CVT-}%nH=iNUZPpFe^ zE*Eff!3Z4oI1BLN*r6XY-57L%7v`1fzVhV94pK_hkcO4&f)rD#s-&pZxHO}px47Og zqW(}^y6X?AQpq2BF0G;5A9^WmnD|QCH1Un}*2MQx!^98L7sRwuYd<@Hj)DUYL>fx% z3U;vfO{uR-do0kW)EA_HQjbgF&v7Z>K^n0)%)-I%=)l?~P-+**GX|CFHWlnK14<3O zwMXt|w9>N`#JI^unkMXaZgp~Mi`K?uXRX9%jfz*Pn-!VF(x+51mn){C08``R(cr+; zjhmrhBrFffR15Ud51Q-Y9Jp2ku6}QaX9EZAL+*?j0r*2W>I*z=yXMzEW)!7a|n@&-;;|>G3@z2TJIFggOK{ynGzzrQj@6dI_|211ot8tDWCNr-Kv0JF$ zTr1>GVGA&g2(+$FyxfAn*n%Hv!N*(h*IV#2$W#5iZgW48n{A2@ zl#R5e>yVgIr^iOs#PsCk{KP_HVRTHLNWlF}NzWFH465{;R)9>YVx*vi2}K>W)vN)U zbv&Vh^O3b-JBjUY)3Vn@qS21iT66v#k!W`PM~gP~KJ>Z%tHApOep}#aU$}l(;6?o} zfu}v@`h9`#5%>-|_-Irooh`2SGM>JRZZqeD=#!D28n?^L;XL0jkjoG9MsgX^&@Eiy zp04GRvZ1XSAg7Z?66ED_8Dzak9g;`n2*{~oKCcx}QYadljIYD_vXM;PLmg#nD~XJr z%xk=iBV!OV>67g@D25zaH(L*@XKA@l*pH3YDuzw8-|UI-uzXrea{0}s`$l#S8}arR zWzIG)Y02#LAaXS3QS&2g%ppY4`24(H9^>