summaryrefslogtreecommitdiff
path: root/patches
diff options
context:
space:
mode:
Diffstat (limited to 'patches')
-rw-r--r--patches/dwm-bar-height-6.2.diff25
-rw-r--r--patches/dwm-barpadding-6.2.diff110
-rw-r--r--patches/dwm-centeredwindowname-20200723-f035e1e.diff30
-rw-r--r--patches/dwm-fakefullscreen-20210714-138b405.diff120
-rw-r--r--patches/dwm-fixborders-6.2.diff27
-rw-r--r--patches/dwm-fullgaps-6.4.diff94
-rw-r--r--patches/dwm-r1615-selfrestart.diff101
-rw-r--r--patches/dwm-statuspadding-6.3.diff62
-rw-r--r--patches/dwm-swallow-6.3.diff412
9 files changed, 0 insertions, 981 deletions
diff --git a/patches/dwm-bar-height-6.2.diff b/patches/dwm-bar-height-6.2.diff
deleted file mode 100644
index a576111..0000000
--- a/patches/dwm-bar-height-6.2.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-diff --git a/config.def.h b/config.def.h
-index 1c0b587..9814500 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 int user_bh = 0; /* 0 means that dwm will calculate bar height, >= 1 means dwm will user_bh as bar height */
- static const char *fonts[] = { "monospace:size=10" };
- static const char dmenufont[] = "monospace:size=10";
- static const char col_gray1[] = "#222222";
-diff --git a/dwm.c b/dwm.c
-index 4465af1..2c27cb3 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -1545,7 +1545,7 @@ setup(void)
- if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
- die("no fonts could be loaded.");
- lrpad = drw->fonts->h;
-- bh = drw->fonts->h + 2;
-+ bh = user_bh ? user_bh : drw->fonts->h + 2;
- updategeom();
- /* init atoms */
- utf8string = XInternAtom(dpy, "UTF8_STRING", False);
diff --git a/patches/dwm-barpadding-6.2.diff b/patches/dwm-barpadding-6.2.diff
deleted file mode 100644
index 4c26e46..0000000
--- a/patches/dwm-barpadding-6.2.diff
+++ /dev/null
@@ -1,110 +0,0 @@
-Common subdirectories: dwm/.git and dwm-new/.git
-diff -up dwm/config.def.h dwm-new/config.def.h
---- dwm/config.def.h 2019-12-10 17:24:37.944708263 +1300
-+++ dwm-new/config.def.h 2019-12-10 17:44:38.447670711 +1300
-@@ -5,6 +5,8 @@ static const unsigned int borderpx = 1;
- 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 int vertpad = 10; /* vertical padding of bar */
-+static const int sidepad = 10; /* horizontal padding of bar */
- static const char *fonts[] = { "monospace:size=10" };
- static const char dmenufont[] = "monospace:size=10";
- static const char col_gray1[] = "#222222";
-diff -up dwm/dwm.c dwm-new/dwm.c
---- dwm/dwm.c 2019-12-10 17:24:37.945708263 +1300
-+++ dwm-new/dwm.c 2019-12-10 17:41:46.192676099 +1300
-@@ -241,6 +241,8 @@ static int screen;
- static int sw, sh; /* X display screen geometry width, height */
- static int bh, blw = 0; /* bar geometry */
- static int lrpad; /* sum of left and right padding for text */
-+static int vp; /* vertical padding for bar */
-+static int sp; /* side padding for bar */
- static int (*xerrorxlib)(Display *, XErrorEvent *);
- static unsigned int numlockmask = 0;
- static void (*handler[LASTEvent]) (XEvent *) = {
-@@ -567,7 +569,7 @@ configurenotify(XEvent *e)
- for (c = m->clients; c; c = c->next)
- 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->barwin, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh);
- }
- focus(NULL);
- arrange(NULL);
-@@ -705,7 +707,7 @@ drawbar(Monitor *m)
- 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);
-+ drw_text(drw, m->ww - sw - 2 * sp, 0, sw, bh, 0, stext, 0);
- }
-
- for (c = m->clients; c; c = c->next) {
-@@ -731,12 +733,12 @@ drawbar(Monitor *m)
- 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);
-+ drw_text(drw, x, 0, w - 2 * sp, 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);
-+ drw_rect(drw, x, 0, w - 2 * sp, bh, 1, 1);
- }
- }
- drw_map(drw, m->barwin, 0, 0, m->ww, bh);
-@@ -1547,6 +1549,9 @@ setup(void)
- lrpad = drw->fonts->h;
- bh = drw->fonts->h + 2;
- updategeom();
-+ sp = sidepad;
-+ vp = (topbar == 1) ? vertpad : - vertpad;
-+
- /* init atoms */
- utf8string = XInternAtom(dpy, "UTF8_STRING", False);
- wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
-@@ -1573,6 +1578,7 @@ setup(void)
- /* init bars */
- updatebars();
- updatestatus();
-+ updatebarpos(selmon);
- /* supporting window for NetWMCheck */
- wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0);
- XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32,
-@@ -1701,7 +1707,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->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2 * sp, bh);
- arrange(selmon);
- }
-
-@@ -1811,7 +1817,7 @@ updatebars(void)
- 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),
-+ m->barwin = XCreateWindow(dpy, root, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh, 0, DefaultDepth(dpy, screen),
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
- XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
-@@ -1826,11 +1832,11 @@ updatebarpos(Monitor *m)
- m->wy = m->my;
- m->wh = m->mh;
- 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;
-+ m->wh = m->wh - vertpad - bh;
-+ m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad;
-+ m->wy = m->topbar ? m->wy + bh + vp : m->wy;
- } else
-- m->by = -bh;
-+ m->by = -bh - vp;
- }
-
- void
diff --git a/patches/dwm-centeredwindowname-20200723-f035e1e.diff b/patches/dwm-centeredwindowname-20200723-f035e1e.diff
deleted file mode 100644
index 67ae4d3..0000000
--- a/patches/dwm-centeredwindowname-20200723-f035e1e.diff
+++ /dev/null
@@ -1,30 +0,0 @@
-From f035e1e5abb19df5dced9c592ca986deac460435 Mon Sep 17 00:00:00 2001
-From: bastila <20937049+silentfault@users.noreply.github.com>
-Date: Thu, 23 Jul 2020 02:45:12 +0300
-Subject: [PATCH] Fix overflow when window name is bigger than window width
-
----
- dwm.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/dwm.c b/dwm.c
-index 9fd0286..42cb8dd 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -731,8 +731,12 @@ drawbar(Monitor *m)
-
- if ((w = m->ww - tw - x) > bh) {
- if (m->sel) {
-+ /* fix overflow when window name is bigger than window width */
-+ int mid = (m->ww - (int)TEXTW(m->sel->name)) / 2 - x;
-+ /* make sure name will not overlap on tags even when it is very long */
-+ mid = mid >= lrpad / 2 ? mid : lrpad / 2;
- drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
-- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
-+ drw_text(drw, x, 0, w, bh, mid, m->sel->name, 0);
- if (m->sel->isfloating)
- drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
- } else {
---
-2.27.0
-
diff --git a/patches/dwm-fakefullscreen-20210714-138b405.diff b/patches/dwm-fakefullscreen-20210714-138b405.diff
deleted file mode 100644
index 88ca9f8..0000000
--- a/patches/dwm-fakefullscreen-20210714-138b405.diff
+++ /dev/null
@@ -1,120 +0,0 @@
-From 33c7811ca7280be7890851f5a83fa8d1a3313374 Mon Sep 17 00:00:00 2001
-From: Sebastian LaVine <mail@smlavine.com>
-Date: Wed, 14 Jul 2021 11:22:34 -0400
-Subject: [PATCH] Set new lockfullscreen variable to 0
-
-This more properly fixes the problem introduced by 67d76bd than the
-previous patch revision does.
----
- config.def.h | 2 +-
- dwm.c | 28 ++--------------------------
- 2 files changed, 3 insertions(+), 27 deletions(-)
-
-diff --git a/config.def.h b/config.def.h
-index a2ac963..1b46cb4 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -35,7 +35,7 @@ static const Rule rules[] = {
- static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
- static const int nmaster = 1; /* number of clients in master area */
- static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
--static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
-+static const int lockfullscreen = 0; /* 1 will force focus on the fullscreen window */
-
- static const Layout layouts[] = {
- /* symbol arrange function */
-diff --git a/dwm.c b/dwm.c
-index 5e4d494..968e256 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -522,7 +522,7 @@ clientmessage(XEvent *e)
- if (cme->data.l[1] == netatom[NetWMFullscreen]
- || cme->data.l[2] == netatom[NetWMFullscreen])
- setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */
-- || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
-+ || cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */));
- } else if (cme->message_type == netatom[NetActiveWindow]) {
- if (c != selmon->sel && !c->isurgent)
- seturgent(c, 1);
-@@ -552,7 +552,6 @@ void
- configurenotify(XEvent *e)
- {
- Monitor *m;
-- Client *c;
- XConfigureEvent *ev = &e->xconfigure;
- int dirty;
-
-@@ -565,9 +564,6 @@ configurenotify(XEvent *e)
- drw_resize(drw, sw, bh);
- updatebars();
- for (m = mons; m; m = m->next) {
-- for (c = m->clients; c; c = c->next)
-- if (c->isfullscreen)
-- resizeclient(c, m->mx, m->my, m->mw, m->mh);
- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
- }
- focus(NULL);
-@@ -1144,8 +1140,6 @@ movemouse(const Arg *arg)
-
- if (!(c = selmon->sel))
- return;
-- if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
-- return;
- restack(selmon);
- ocx = c->x;
- ocy = c->y;
-@@ -1299,8 +1293,6 @@ resizemouse(const Arg *arg)
-
- if (!(c = selmon->sel))
- return;
-- if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */
-- return;
- restack(selmon);
- ocx = c->x;
- ocy = c->y;
-@@ -1477,24 +1469,10 @@ setfullscreen(Client *c, int fullscreen)
- XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
- PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
- c->isfullscreen = 1;
-- c->oldstate = c->isfloating;
-- c->oldbw = c->bw;
-- c->bw = 0;
-- c->isfloating = 1;
-- resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
-- XRaiseWindow(dpy, c->win);
- } else if (!fullscreen && c->isfullscreen){
- XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
- PropModeReplace, (unsigned char*)0, 0);
- c->isfullscreen = 0;
-- c->isfloating = c->oldstate;
-- c->bw = c->oldbw;
-- c->x = c->oldx;
-- c->y = c->oldy;
-- c->w = c->oldw;
-- c->h = c->oldh;
-- resizeclient(c, c->x, c->y, c->w, c->h);
-- arrange(c->mon);
- }
- }
-
-@@ -1619,7 +1597,7 @@ showhide(Client *c)
- if (ISVISIBLE(c)) {
- /* show clients top down */
- XMoveWindow(dpy, c->win, c->x, c->y);
-- if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen)
-+ if (!c->mon->lt[c->mon->sellt]->arrange || c->isfloating)
- resize(c, c->x, c->y, c->w, c->h, 0);
- showhide(c->snext);
- } else {
-@@ -1713,8 +1691,6 @@ togglefloating(const Arg *arg)
- {
- if (!selmon->sel)
- return;
-- if (selmon->sel->isfullscreen) /* no support for fullscreen windows */
-- return;
- selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
- if (selmon->sel->isfloating)
- resize(selmon->sel, selmon->sel->x, selmon->sel->y,
---
-2.32.0
-
diff --git a/patches/dwm-fixborders-6.2.diff b/patches/dwm-fixborders-6.2.diff
deleted file mode 100644
index 0a17b9e..0000000
--- a/patches/dwm-fixborders-6.2.diff
+++ /dev/null
@@ -1,27 +0,0 @@
-From 1529909466206016f2101457bbf37c67195714c8 Mon Sep 17 00:00:00 2001
-From: Jakub Leszczak <szatan@gecc.xyz>
-Date: Fri, 22 Nov 2019 10:46:53 +0800
-Subject: [PATCH] Fix transparent borders
-
-When terminal has transparency then its borders also become transparent.
-Fix it by removing transparency from any pixels drawn.
----
- drw.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drw.c b/drw.c
-index 8fd1ca4..490a592 100644
---- a/drw.c
-+++ b/drw.c
-@@ -202,6 +202,8 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
- DefaultColormap(drw->dpy, drw->screen),
- clrname, dest))
- die("error, cannot allocate color '%s'", clrname);
-+
-+ dest->pixel |= 0xff << 24;
- }
-
- /* Wrapper to create color schemes. The caller has to call free(3) on the
---
-2.26.2
-
diff --git a/patches/dwm-fullgaps-6.4.diff b/patches/dwm-fullgaps-6.4.diff
deleted file mode 100644
index dc52139..0000000
--- a/patches/dwm-fullgaps-6.4.diff
+++ /dev/null
@@ -1,94 +0,0 @@
-diff -up a/config.def.h b/config.def.h
---- a/config.def.h
-+++ b/config.def.h
-@@ -2,6 +2,7 @@
-
- /* appearance */
- static const unsigned int borderpx = 1; /* border pixel of windows */
-+static const unsigned int gappx = 5; /* gaps between 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 */
-@@ -85,6 +86,9 @@ static const Key keys[] = {
- { MODKEY, XK_period, focusmon, {.i = +1 } },
- { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
- { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
-+ { MODKEY, XK_minus, setgaps, {.i = -1 } },
-+ { MODKEY, XK_equal, setgaps, {.i = +1 } },
-+ { MODKEY|ShiftMask, XK_equal, setgaps, {.i = 0 } },
- TAGKEYS( XK_1, 0)
- TAGKEYS( XK_2, 1)
- TAGKEYS( XK_3, 2)
-diff -up a/dwm.c b/dwm.c
---- a/dwm.c 2023-04-30
-+++ b/dwm.c 2023-04-30
-@@ -119,6 +119,7 @@ struct Monitor {
- int by; /* bar geometry */
- int mx, my, mw, mh; /* screen size */
- int wx, wy, ww, wh; /* window area */
-+ int gappx; /* gaps between windows */
- unsigned int seltags;
- unsigned int sellt;
- unsigned int tagset[2];
-@@ -200,6 +201,7 @@ static void sendmon(Client *c, Monitor *
- static void setclientstate(Client *c, long state);
- static void setfocus(Client *c);
- static void setfullscreen(Client *c, int fullscreen);
-+static void setgaps(const Arg *arg);
- static void setlayout(const Arg *arg);
- static void setmfact(const Arg *arg);
- static void setup(void);
-@@ -641,6 +643,7 @@ createmon(void)
- m->nmaster = nmaster;
- m->showbar = showbar;
- m->topbar = topbar;
-+ m->gappx = gappx;
- m->lt[0] = &layouts[0];
- m->lt[1] = &layouts[1 % LENGTH(layouts)];
- strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
-@@ -1508,6 +1511,16 @@ setfullscreen(Client *c, int fullscreen)
- }
-
- void
-+setgaps(const Arg *arg)
-+{
-+ if ((arg->i == 0) || (selmon->gappx + arg->i < 0))
-+ selmon->gappx = 0;
-+ else
-+ selmon->gappx += arg->i;
-+ arrange(selmon);
-+}
-+
-+void
- setlayout(const Arg *arg)
- {
- if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
-@@ -1697,18 +1710,18 @@ tile(Monitor *m)
- if (n > m->nmaster)
- mw = m->nmaster ? m->ww * m->mfact : 0;
- else
-- mw = m->ww;
-- for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
-- if (i < m->nmaster) {
-- h = (m->wh - my) / (MIN(n, m->nmaster) - i);
-- resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
-- if (my + HEIGHT(c) < m->wh)
-- my += HEIGHT(c);
-+ mw = m->ww - m->gappx;
-+ for (i = 0, my = ty = m->gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
-+ if (i < m->nmaster) {
-+ h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gappx;
-+ resize(c, m->wx + m->gappx, m->wy + my, mw - (2*c->bw) - m->gappx, h - (2*c->bw), 0);
-+ if (my + HEIGHT(c) + m->gappx < m->wh)
-+ my += HEIGHT(c) + m->gappx;
- } else {
-- h = (m->wh - ty) / (n - i);
-- resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
-- if (ty + HEIGHT(c) < m->wh)
-- ty += HEIGHT(c);
-+ h = (m->wh - ty) / (n - i) - m->gappx;
-+ resize(c, m->wx + mw + m->gappx, m->wy + ty, m->ww - mw - (2*c->bw) - 2*m->gappx, h - (2*c->bw), 0);
-+ if (ty + HEIGHT(c) + m->gappx < m->wh)
-+ ty += HEIGHT(c) + m->gappx;
- }
- }
diff --git a/patches/dwm-r1615-selfrestart.diff b/patches/dwm-r1615-selfrestart.diff
deleted file mode 100644
index 5d019b2..0000000
--- a/patches/dwm-r1615-selfrestart.diff
+++ /dev/null
@@ -1,101 +0,0 @@
-# HG changeset patch
-# User Barbu Paul - Gheorghe <barbu.paul.gheorghe@gmail.com>
-# Date 1354650884 -7200
-# Node ID 6c472a21a5887c5295a331c48c4da188ec2c8413
-# Parent aaab44133a6830c9a00263731d098c01cc1d6fb5
-selfrestart now magically locates the current dwm (no need to hardcode a path)
-
-diff -r aaab44133a68 -r 6c472a21a588 config.def.h
---- a/config.def.h Tue Dec 04 21:54:44 2012 +0200
-+++ b/config.def.h Tue Dec 04 21:54:44 2012 +0200
-@@ -54,6 +54,8 @@
- static const char *termcmd[] = { "urxvtc", NULL };
- static const char *filemancmd[] = { "thunar", NULL };
-
-+#include "selfrestart.c"
-+
- static Key keys[] = {
- /* modifier key function argument */
- { MODKEY, XK_r, spawn, {.v = dmenucmd } },
-@@ -89,6 +91,7 @@
- TAGKEYS( XK_7, 6)
- TAGKEYS( XK_8, 7)
- TAGKEYS( XK_9, 8)
-+ { MODKEY|ShiftMask, XK_r, self_restart, {0} },
- { MODKEY|ShiftMask, XK_q, quit, {0} },
- };
-
-@@ -108,4 +111,3 @@
- { ClkTagBar, MODKEY, Button1, tag, {0} },
- { ClkTagBar, MODKEY, Button3, toggletag, {0} },
- };
--
-diff -r aaab44133a68 -r 6c472a21a588 selfrestart.c
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/selfrestart.c Tue Dec 04 21:54:44 2012 +0200
-@@ -0,0 +1,65 @@
-+#include <unistd.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+/**
-+ * Magically finds the current's executable path
-+ *
-+ * I'm doing the do{}while(); trick because Linux (what I'm running) is not
-+ * POSIX compilant and so lstat() cannot be trusted on /proc entries
-+ *
-+ * @return char* the path of the current executable
-+ */
-+char *get_dwm_path(){
-+ struct stat s;
-+ int r, length, rate = 42;
-+ char *path = NULL;
-+
-+ if(lstat("/proc/self/exe", &s) == -1){
-+ perror("lstat:");
-+ return NULL;
-+ }
-+
-+ length = s.st_size + 1 - rate;
-+
-+ do{
-+ length+=rate;
-+
-+ free(path);
-+ path = malloc(sizeof(char) * length);
-+
-+ if(path == NULL){
-+ perror("malloc:");
-+ return NULL;
-+ }
-+
-+ r = readlink("/proc/self/exe", path, length);
-+
-+ if(r == -1){
-+ perror("readlink:");
-+ return NULL;
-+ }
-+ }while(r >= length);
-+
-+ path[r] = '\0';
-+
-+ return path;
-+}
-+
-+/**
-+ * self-restart
-+ *
-+ * Initially inspired by: Yu-Jie Lin
-+ * https://sites.google.com/site/yjlnotes/notes/dwm
-+ */
-+void self_restart(const Arg *arg) {
-+ char *const argv[] = {get_dwm_path(), NULL};
-+
-+ if(argv[0] == NULL){
-+ return;
-+ }
-+
-+ execv(argv[0], argv);
-+}
diff --git a/patches/dwm-statuspadding-6.3.diff b/patches/dwm-statuspadding-6.3.diff
deleted file mode 100644
index fa6780f..0000000
--- a/patches/dwm-statuspadding-6.3.diff
+++ /dev/null
@@ -1,62 +0,0 @@
-From d6dd69c26f4272f87672ae54f69dc0d48650d34b Mon Sep 17 00:00:00 2001
-From: taep96 <64481039+taep96@users.noreply.github.com>
-Date: Mon, 7 Feb 2022 19:09:45 +0100
-Subject: [PATCH] Fixed | Replaces magic numbers in statusbar with configurable
- variables.
-
-horizpadbar for horizontal statusbar padding
-vertpadbar for vertical statusbar padding
-
-StatusText now has both left and right padding,
-as well as the vertical padding that all of the statusbar shares.
-
-Other than the addition of left padding to StatusText, appearance
-of the statusbar is identical to pre-patch when using the defaults
-in config.def.h
----
- config.def.h | 2 ++
- dwm.c | 8 ++++----
- 2 files changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/config.def.h b/config.def.h
-index a2ac963..6cb845c 100644
---- a/config.def.h
-+++ b/config.def.h
-@@ -5,6 +5,8 @@ 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 int horizpadbar = 2; /* horizontal padding for statusbar */
-+static const int vertpadbar = 0; /* vertical padding for statusbar */
- static const char *fonts[] = { "monospace:size=10" };
- static const char dmenufont[] = "monospace:size=10";
- static const char col_gray1[] = "#222222";
-diff --git a/dwm.c b/dwm.c
-index a96f33c..a1b8c95 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -708,8 +708,8 @@ 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]);
-- tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
-- drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
-+ tw = TEXTW(stext);
-+ drw_text(drw, m->ww - tw, 0, tw, bh, lrpad / 2, stext, 0);
- }
-
- for (c = m->clients; c; c = c->next) {
-@@ -1548,8 +1548,8 @@ setup(void)
- drw = drw_create(dpy, screen, root, sw, sh);
- if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
- die("no fonts could be loaded.");
-- lrpad = drw->fonts->h;
-- bh = drw->fonts->h + 2;
-+ lrpad = drw->fonts->h + horizpadbar;
-+ bh = drw->fonts->h + vertpadbar;
- updategeom();
- /* init atoms */
- utf8string = XInternAtom(dpy, "UTF8_STRING", False);
---
-2.35.1
-
diff --git a/patches/dwm-swallow-6.3.diff b/patches/dwm-swallow-6.3.diff
deleted file mode 100644
index 47586a0..0000000
--- a/patches/dwm-swallow-6.3.diff
+++ /dev/null
@@ -1,412 +0,0 @@
-From 0cf9a007511f7dfd7dd94171b172562ebac9b6d5 Mon Sep 17 00:00:00 2001
-From: Tom Schwindl <schwindl@posteo.de>
-Date: Sat, 10 Sep 2022 12:51:09 +0200
-Subject: [PATCH] 6.3 swallow patch
-
----
- 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 061ad662f82a..0b2b8ffd30d5 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 81c493ef4aff..52d1ebf30bec 100644
---- a/config.mk
-+++ b/config.mk
-@@ -20,10 +20,11 @@ FREETYPEINC = /usr/include/freetype2
- # OpenBSD (uncomment)
- #FREETYPEINC = ${X11INC}/freetype2
- #MANPREFIX = ${PREFIX}/man
-+#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 e5efb6a22806..e68294b6b679 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -40,6 +40,12 @@
- #include <X11/extensions/Xinerama.h>
- #endif /* XINERAMA */
- #include <X11/Xft/Xft.h>
-+#include <X11/Xlib-xcb.h>
-+#include <xcb/res.h>
-+#ifdef __OpenBSD__
-+#include <sys/sysctl.h>
-+#include <kvm.h>
-+#endif /* __OpenBSD */
-
- #include "drw.h"
- #include "util.h"
-@@ -92,9 +98,11 @@ struct Client {
- int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid;
- 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);
-@@ -416,6 +436,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)
- {
-@@ -656,6 +723,9 @@ destroynotify(XEvent *e)
-
- if ((c = wintoclient(ev->window)))
- unmanage(c, 1);
-+
-+ else if ((c = swallowingclient(ev->window)))
-+ unmanage(c->swallowing, 1);
- }
-
- void
-@@ -1022,12 +1092,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;
-@@ -1042,6 +1113,7 @@ manage(Window w, XWindowAttributes *wa)
- } else {
- c->mon = selmon;
- applyrules(c);
-+ term = termforwin(c);
- }
-
- if (c->x + WIDTH(c) > c->mon->wx + c->mon->ww)
-@@ -1076,6 +1148,8 @@ manage(Window w, XWindowAttributes *wa)
- c->mon->sel = c;
- arrange(c->mon);
- XMapWindow(dpy, c->win);
-+ if (term)
-+ swallow(term, c);
- focus(NULL);
- }
-
-@@ -1763,6 +1837,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) {
-@@ -1778,9 +1866,12 @@ unmanage(Client *c, int destroyed)
- XUngrabServer(dpy);
- }
- free(c);
-- focus(NULL);
-- updateclientlist();
-- arrange(m);
-+
-+ if (!s) {
-+ arrange(m);
-+ focus(NULL);
-+ updateclientlist();
-+ }
- }
-
- void
-@@ -2044,6 +2135,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", 0), 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)
- {
-@@ -2133,10 +2354,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.37.2
-