diff --git a/dwm-6.5-tavo.diff b/dwm-6.5-tavo.diff index 62849b7..029d5eb 100644 --- a/dwm-6.5-tavo.diff +++ b/dwm-6.5-tavo.diff @@ -8,10 +8,11 @@ dwm-movestack-20211115-a786211.diff dwm-fullgaps-6.4.diff dwm-attachbottom-6.3.diff dwm-alwayscenter-20200625-f04cac6.diff +dwm-windowmap-20221026.diff --- diff '--color=auto' -Nu a/config.def.h b/config.def.h --- a/config.def.h 2024-03-19 05:24:52.000000000 -0600 -+++ b/config.def.h 2024-04-28 21:58:33.535704620 -0600 ++++ b/config.def.h 2024-05-02 21:39:10.483748489 -0600 @@ -2,7 +2,9 @@ /* appearance */ @@ -74,18 +75,18 @@ diff '--color=auto' -Nu a/config.def.h b/config.def.h { ClkClientWin, MODKEY, Button2, togglefloating, {0} }, diff '--color=auto' -Nu a/config.h b/config.h --- a/config.h 1969-12-31 18:00:00.000000000 -0600 -+++ b/config.h 2024-04-28 22:01:48.845590861 -0600 -@@ -0,0 +1,172 @@ ++++ b/config.h 2024-05-02 21:39:10.483748489 -0600 +@@ -0,0 +1,170 @@ +/* See LICENSE file for copyright and license details. */ +#include + +/* appearance */ +static const unsigned int borderpx = 2; /* border pixel of windows */ -+static const unsigned int gappx = 5; /* gaps between windows */ ++static const unsigned int gappx = 15; /* gaps between windows */ +static const unsigned int snap = 5; /* 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 int topbar = 0; /* 0 means bottom bar */ +static const char *fonts[] = { "JetBrainsMono:bold:size=10" }; +static const char dmenufont[] = "JetBrainsMono:bold:size=10"; +static const char col_gray1[] = "#222222"; @@ -94,16 +95,14 @@ diff '--color=auto' -Nu a/config.h b/config.h +static const char col_gray4[] = "#eeeeee"; +static const char col_cyan[] = "#005577"; +/* custom colors */ -+static const char col_light[] = "#689d6a"; ++static const char col_light[] = "#fabd2f"; +static const char col_dark[] = "#1d2021"; -+static const char col_main_light[] = "#fabd2f"; -+static const char col_main_dark[] = "#1d2021"; -+static const char col_main_contr[] = "#012b27"; ++static const char col_black[] = "#000000"; +static const char *colors[][3] = { +/* --------------- */ + /* fg bg border */ -+ [SchemeNorm] = { col_light, col_main_contr, col_main_dark }, -+ [SchemeSel] = { col_dark, col_main_light, col_main_light }, ++ [SchemeNorm] = { col_dark, col_black, col_dark }, ++ [SchemeSel] = { col_dark, col_light, col_light }, +}; + +/* tagging */ @@ -114,14 +113,14 @@ diff '--color=auto' -Nu a/config.h b/config.h + * WM_CLASS(STRING) = instance, class + * WM_NAME(STRING) = title + */ -+ /* class instance title tags mask isfloating isterminal noswallow monitor */ ++ /* class instance title tags mask isfloating isterminal noswallow monitor */ + { "st", NULL, NULL, 0, 0, 1, 0, -1 }, + { "Display-im6.q16", NULL, NULL, 0, 1, 1, 0, -1 }, + { NULL, NULL, "Event Tester", 0, 0, 0, 1, -1 }, /* xev */ +}; + +/* layout(s) */ -+static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ ++static const float mfact = 0.50; /* 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 */ @@ -250,7 +249,7 @@ diff '--color=auto' -Nu a/config.h b/config.h + diff '--color=auto' -Nu a/config.mk b/config.mk --- a/config.mk 2024-03-19 05:24:52.000000000 -0600 -+++ b/config.mk 2024-04-28 21:58:33.535704620 -0600 ++++ b/config.mk 2024-05-02 21:39:10.483748489 -0600 @@ -20,10 +20,11 @@ # OpenBSD (uncomment) #FREETYPEINC = ${X11INC}/freetype2 @@ -266,7 +265,7 @@ diff '--color=auto' -Nu a/config.mk b/config.mk CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} diff '--color=auto' -Nu a/dwm.c b/dwm.c --- a/dwm.c 2024-03-19 05:24:52.000000000 -0600 -+++ b/dwm.c 2024-04-28 21:58:33.535704620 -0600 ++++ b/dwm.c 2024-05-02 21:39:10.487748219 -0600 @@ -40,6 +40,12 @@ #include #endif /* XINERAMA */ @@ -375,15 +374,18 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c static void toggletag(const Arg *arg); static void toggleview(const Arg *arg); static void unfocus(Client *c, int setfocus); -@@ -227,6 +244,7 @@ +@@ -227,6 +244,10 @@ static void updatewindowtype(Client *c); static void updatewmhints(Client *c); static void view(const Arg *arg); +static void warp(const Client *c); ++static void window_set_state(Display *dpy, Window win, long state); ++static void window_map(Display *dpy, Client *c, int deiconify); ++static void window_unmap(Display *dpy, Window win, Window root, int iconify); static Client *wintoclient(Window w); static Monitor *wintomon(Window w); static int xerror(Display *dpy, XErrorEvent *ee); -@@ -234,6 +252,12 @@ +@@ -234,6 +255,12 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee); static void zoom(const Arg *arg); @@ -396,7 +398,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c /* variables */ static const char broken[] = "broken"; static char stext[256]; -@@ -268,9 +292,20 @@ +@@ -268,9 +295,20 @@ static Monitor *mons, *selmon; static Window root, wmcheckwin; @@ -417,7 +419,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c /* compile-time check if all tags fit into an unsigned int bit array. */ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; -@@ -297,6 +332,8 @@ +@@ -297,6 +335,8 @@ && (!r->class || strstr(class, r->class)) && (!r->instance || strstr(instance, r->instance))) { @@ -426,7 +428,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c c->isfloating = r->isfloating; c->tags |= r->tags; for (m = mons; m && m->num != r->monitor; m = m->next); -@@ -409,6 +446,15 @@ +@@ -409,6 +449,15 @@ } void @@ -442,7 +444,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c attachstack(Client *c) { c->snext = c->mon->stack; -@@ -416,6 +462,53 @@ +@@ -416,6 +465,53 @@ } void @@ -496,7 +498,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c buttonpress(XEvent *e) { unsigned int i, x, click; -@@ -441,10 +534,8 @@ +@@ -441,10 +537,8 @@ arg.ui = 1 << i; } else if (ev->x < x + TEXTW(selmon->ltsymbol)) click = ClkLtSymbol; @@ -508,7 +510,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c } else if ((c = wintoclient(ev->window))) { focus(c); restack(selmon); -@@ -525,6 +616,10 @@ +@@ -525,6 +619,10 @@ || 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))); @@ -519,7 +521,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c } else if (cme->message_type == netatom[NetActiveWindow]) { if (c != selmon->sel && !c->isurgent) seturgent(c, 1); -@@ -634,6 +729,7 @@ +@@ -634,6 +732,7 @@ createmon(void) { Monitor *m; @@ -527,7 +529,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c m = ecalloc(1, sizeof(Monitor)); m->tagset[0] = m->tagset[1] = 1; -@@ -641,9 +737,24 @@ +@@ -641,9 +740,24 @@ m->nmaster = nmaster; m->showbar = showbar; m->topbar = topbar; @@ -552,7 +554,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c return m; } -@@ -655,6 +766,9 @@ +@@ -655,6 +769,9 @@ if ((c = wintoclient(ev->window))) unmanage(c, 1); @@ -562,7 +564,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c } void -@@ -735,15 +849,8 @@ +@@ -735,15 +852,8 @@ x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); if ((w = m->ww - tw - x) > bh) { @@ -578,7 +580,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c } drw_map(drw, m->barwin, 0, 0, m->ww, bh); } -@@ -833,6 +940,7 @@ +@@ -833,6 +943,7 @@ unfocus(selmon->sel, 0); selmon = m; focus(NULL); @@ -586,7 +588,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c } void -@@ -980,7 +1088,7 @@ +@@ -980,7 +1091,7 @@ void incnmaster(const Arg *arg) { @@ -595,7 +597,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c arrange(selmon); } -@@ -1031,12 +1139,13 @@ +@@ -1031,12 +1142,13 @@ void manage(Window w, XWindowAttributes *wa) { @@ -610,7 +612,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c /* geometry */ c->x = c->oldx = wa->x; c->y = c->oldy = wa->y; -@@ -1051,6 +1160,7 @@ +@@ -1051,6 +1163,7 @@ } else { c->mon = selmon; applyrules(c); @@ -618,7 +620,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c } if (c->x + WIDTH(c) > c->mon->wx + c->mon->ww) -@@ -1068,13 +1178,15 @@ +@@ -1068,13 +1181,15 @@ updatewindowtype(c); updatesizehints(c); updatewmhints(c); @@ -635,7 +637,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c attachstack(c); XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, (unsigned char *) &(c->win), 1); -@@ -1085,6 +1197,8 @@ +@@ -1085,6 +1200,8 @@ c->mon->sel = c; arrange(c->mon); XMapWindow(dpy, c->win); @@ -644,7 +646,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c focus(NULL); } -@@ -1245,11 +1359,8 @@ +@@ -1245,11 +1362,8 @@ drawbars(); break; } @@ -657,7 +659,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c if (ev->atom == netatom[NetWMWindowType]) updatewindowtype(c); } -@@ -1375,6 +1486,8 @@ +@@ -1375,6 +1489,8 @@ wc.sibling = c->win; } } @@ -666,7 +668,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c XSync(dpy, False); while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } -@@ -1427,7 +1540,7 @@ +@@ -1427,7 +1543,7 @@ detachstack(c); c->mon = m; c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ @@ -675,7 +677,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c attachstack(c); focus(NULL); arrange(NULL); -@@ -1508,12 +1621,39 @@ +@@ -1508,12 +1624,39 @@ } void @@ -717,7 +719,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); if (selmon->sel) arrange(selmon); -@@ -1532,7 +1672,7 @@ +@@ -1532,7 +1675,7 @@ f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; if (f < 0.05 || f > 0.95) return; @@ -726,7 +728,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c arrange(selmon); } -@@ -1576,6 +1716,7 @@ +@@ -1576,6 +1719,7 @@ netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); @@ -734,7 +736,24 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); -@@ -1697,25 +1838,25 @@ +@@ -1633,14 +1777,12 @@ + return; + 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) +- resize(c, c->x, c->y, c->w, c->h, 0); ++ window_map(dpy, c, 1); + showhide(c->snext); + } else { + /* hide clients bottom up */ + showhide(c->snext); +- XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y); ++ window_unmap(dpy, c->win, root, 1); + } + } + +@@ -1697,25 +1839,25 @@ if (n > m->nmaster) mw = m->nmaster ? m->ww * m->mfact : 0; else @@ -772,7 +791,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c updatebarpos(selmon); XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); arrange(selmon); -@@ -1736,6 +1877,15 @@ +@@ -1736,6 +1878,15 @@ } void @@ -788,7 +807,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c toggletag(const Arg *arg) { unsigned int newtags; -@@ -1754,9 +1904,33 @@ +@@ -1754,9 +1905,33 @@ toggleview(const Arg *arg) { unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); @@ -822,7 +841,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c focus(NULL); arrange(selmon); } -@@ -1781,6 +1955,20 @@ +@@ -1781,6 +1956,20 @@ Monitor *m = c->mon; XWindowChanges wc; @@ -843,7 +862,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c detach(c); detachstack(c); if (!destroyed) { -@@ -1796,9 +1984,12 @@ +@@ -1796,9 +1985,12 @@ XUngrabServer(dpy); } free(c); @@ -859,7 +878,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c } void -@@ -1916,6 +2107,7 @@ +@@ -1916,6 +2108,7 @@ detachstack(c); c->mon = mons; attach(c); @@ -867,7 +886,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c attachstack(c); } if (m == selmon) -@@ -2025,10 +2217,13 @@ +@@ -2025,10 +2218,13 @@ Atom state = getatomprop(c, netatom[NetWMState]); Atom wtype = getatomprop(c, netatom[NetWMWindowType]); @@ -885,8 +904,55 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c } void -@@ -2053,15 +2248,193 @@ +@@ -2051,17 +2247,240 @@ + } + void ++window_set_state(Display *dpy, Window win, long state) ++{ ++ long data[] = { state, None }; ++ ++ XChangeProperty(dpy, win, wmatom[WMState], wmatom[WMState], 32, ++ PropModeReplace, (unsigned char*)data, 2); ++} ++ ++void ++window_map(Display *dpy, Client *c, int deiconify) ++{ ++ Window win = c->win; ++ ++ if (deiconify) ++ window_set_state(dpy, win, NormalState); ++ ++ XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); ++ XSetInputFocus(dpy, win, RevertToPointerRoot, CurrentTime); ++ XMapWindow(dpy, win); ++} ++ ++void ++window_unmap(Display *dpy, Window win, Window root, int iconify) ++{ ++ static XWindowAttributes ca, ra; ++ ++ XGrabServer(dpy); ++ XGetWindowAttributes(dpy, root, &ra); ++ XGetWindowAttributes(dpy, win, &ca); ++ ++ /* Prevent UnmapNotify events */ ++ XSelectInput(dpy, root, ra.your_event_mask & ~SubstructureNotifyMask); ++ XSelectInput(dpy, win, ca.your_event_mask & ~StructureNotifyMask); ++ ++ XUnmapWindow(dpy, win); ++ ++ if (iconify) ++ window_set_state(dpy, win, IconicState); ++ ++ XSelectInput(dpy, root, ra.your_event_mask); ++ XSelectInput(dpy, win, ca.your_event_mask); ++ XUngrabServer(dpy); ++} ++ ++void view(const Arg *arg) { + int i; @@ -1080,7 +1146,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c Client * wintoclient(Window w) { -@@ -2151,10 +2524,12 @@ +@@ -2151,10 +2570,12 @@ fputs("warning: no locale support\n", stderr); if (!(dpy = XOpenDisplay(NULL))) die("dwm: cannot open display"); @@ -1094,14 +1160,14 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c die("pledge"); #endif /* __OpenBSD__ */ scan(); -@@ -2163,3 +2538,4 @@ +@@ -2163,3 +2584,4 @@ XCloseDisplay(dpy); return EXIT_SUCCESS; } + diff '--color=auto' -Nu a/movestack.c b/movestack.c --- a/movestack.c 1969-12-31 18:00:00.000000000 -0600 -+++ b/movestack.c 2024-04-28 21:58:33.535704620 -0600 ++++ b/movestack.c 2024-05-02 21:39:10.487748219 -0600 @@ -0,0 +1,48 @@ +void +movestack(const Arg *arg) {