sites

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

commit cfad6d556a470421b040ab44622c26e10b14ca7d
parent 26bac1afdbbf17077c97d60a2995bf2e3546dc52
Author: Kajetan Puchalski <kajetan.puchalski@tuta.io>
Date:   Mon,  5 Oct 2020 19:28:35 +0100

[dwm][patch][mark] Updated to work with 6.2

Diffstat:
Adwm.suckless.org/patches/mark/dwm-mark-new-6.2.diff | 248+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdwm.suckless.org/patches/mark/index.md | 16++++++----------
2 files changed, 254 insertions(+), 10 deletions(-)

diff --git a/dwm.suckless.org/patches/mark/dwm-mark-new-6.2.diff b/dwm.suckless.org/patches/mark/dwm-mark-new-6.2.diff @@ -0,0 +1,248 @@ +From 753860d3435e2968358f2bf8daf70bf625fe75fe Mon Sep 17 00:00:00 2001 +From: Kajetan Puchalski <kajetan.puchalski@tuta.io> +Date: Mon, 5 Oct 2020 11:04:31 +0100 +Subject: [PATCH] Updated Mark patch to work with 6.2 + +--- + config.h | 14 +++++-- + drw.h | 2 +- + dwm.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- + 3 files changed, 118 insertions(+), 9 deletions(-) + +diff --git a/config.h b/config.h +index 3858d75..a416c97 100644 +--- a/config.h ++++ b/config.h +@@ -12,10 +12,13 @@ static const char col_gray2[] = "#444444"; + static const char col_gray3[] = "#bbbbbb"; + static const char col_gray4[] = "#eeeeee"; + static const char col_cyan[] = "#005577"; +-static const char *colors[][3] = { +- /* fg bg border */ +- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, +- [SchemeSel] = { col_gray4, col_cyan, col_cyan }, ++static const char normmarkcolor[] = "#775500"; /*border color for marked client*/ ++static const char selmarkcolor[] = "#775577"; /*border color for marked client on focus*/ ++ ++static const char *colors[][4] = { ++ /* fg bg border mark */ ++ [SchemeNorm] = { col_gray3, col_gray1, col_gray2, normmarkcolor }, ++ [SchemeSel] = { col_gray4, col_cyan, col_cyan, selmarkcolor }, + }; + + /* tagging */ +@@ -94,6 +97,9 @@ static Key keys[] = { + TAGKEYS( XK_8, 7) + TAGKEYS( XK_9, 8) + { MODKEY|ShiftMask, XK_q, quit, {0} }, ++ { MODKEY, XK_semicolon, togglemark, {0} }, ++ { MODKEY, XK_o, swapfocus, {0} }, ++ { MODKEY, XK_u, swapclient, {0} }, + }; + + /* button definitions */ +diff --git a/drw.h b/drw.h +index 4bcd5ad..97aae99 100644 +--- a/drw.h ++++ b/drw.h +@@ -12,7 +12,7 @@ typedef struct Fnt { + struct Fnt *next; + } Fnt; + +-enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */ ++enum { ColFg, ColBg, ColBorder, ColMark }; /* Clr scheme index */ + typedef XftColor Clr; + + typedef struct { +diff --git a/dwm.c b/dwm.c +index 664c527..195b8eb 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -201,17 +201,21 @@ static void setclientstate(Client *c, long state); + static void setfocus(Client *c); + static void setfullscreen(Client *c, int fullscreen); + static void setlayout(const Arg *arg); ++static void setmark(Client *c); + static void setmfact(const Arg *arg); + static void setup(void); + static void seturgent(Client *c, int urg); + static void showhide(Client *c); + static void sigchld(int unused); + static void spawn(const Arg *arg); ++static void swapclient(const Arg *arg); ++static void swapfocus(const Arg *arg); + static void tag(const Arg *arg); + static void tagmon(const Arg *arg); + static void tile(Monitor *); + static void togglebar(const Arg *arg); + static void togglefloating(const Arg *arg); ++static void togglemark(const Arg *arg); + static void toggletag(const Arg *arg); + static void toggleview(const Arg *arg); + static void unfocus(Client *c, int setfocus); +@@ -268,6 +272,7 @@ static Display *dpy; + static Drw *drw; + static Monitor *mons, *selmon; + static Window root, wmcheckwin; ++static Client *mark; + + /* configuration, allows nested code to access above variables */ + #include "config.h" +@@ -796,7 +801,10 @@ focus(Client *c) + detachstack(c); + attachstack(c); + grabbuttons(c, 1); +- XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); ++ if (c == mark) ++ XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColMark].pixel); ++ else ++ XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); + setfocus(c); + } else { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); +@@ -1052,7 +1060,10 @@ manage(Window w, XWindowAttributes *wa) + + wc.border_width = c->bw; + XConfigureWindow(dpy, w, CWBorderWidth, &wc); +- XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); ++ if (c == mark) ++ XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColMark].pixel); ++ else ++ XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel); + configure(c); /* propagates border_width, if size doesn't change */ + updatewindowtype(c); + updatesizehints(c); +@@ -1512,6 +1523,23 @@ setlayout(const Arg *arg) + drawbar(selmon); + } + ++void ++setmark(Client *c) ++{ ++ if (c == mark) ++ return; ++ if (mark) { ++ XSetWindowBorder(dpy, mark->win, scheme[mark == selmon->sel ++ ? SchemeSel : SchemeNorm][ColBorder].pixel); ++ mark = 0; ++ } ++ if (c) { ++ XSetWindowBorder(dpy, c->win, scheme[c == selmon->sel ++ ? SchemeSel : SchemeNorm][ColMark].pixel); ++ mark = c; ++ } ++} ++ + /* arg > 1.0 will set mfact absolutely */ + void + setmfact(const Arg *arg) +@@ -1570,7 +1598,7 @@ setup(void) + /* init appearance */ + scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); + for (i = 0; i < LENGTH(colors); i++) +- scheme[i] = drw_scm_create(drw, colors[i], 3); ++ scheme[i] = drw_scm_create(drw, colors[i], 4); + /* init bars */ + updatebars(); + updatestatus(); +@@ -1653,6 +1681,75 @@ spawn(const Arg *arg) + } + } + ++void ++swapclient(const Arg *arg) ++{ ++ Client *s, *m, t; ++ ++ if (!mark || !selmon->sel || mark == selmon->sel ++ || !selmon->lt[selmon->sellt]->arrange) ++ return; ++ s = selmon->sel; ++ m = mark; ++ t = *s; ++ strcpy(s->name, m->name); ++ s->win = m->win; ++ s->x = m->x; ++ s->y = m->y; ++ s->w = m->w; ++ s->h = m->h; ++ ++ m->win = t.win; ++ strcpy(m->name, t.name); ++ m->x = t.x; ++ m->y = t.y; ++ m->w = t.w; ++ m->h = t.h; ++ ++ selmon->sel = m; ++ mark = s; ++ focus(s); ++ setmark(m); ++ ++ arrange(s->mon); ++ if (s->mon != m->mon) { ++ arrange(m->mon); ++ } ++} ++ ++void ++swapfocus(const Arg *arg) ++{ ++ Client *t; ++ ++ if (!selmon->sel || !mark || selmon->sel == mark) ++ return; ++ t = selmon->sel; ++ if (mark->mon != selmon) { ++ unfocus(selmon->sel, 0); ++ selmon = mark->mon; ++ } ++ if (ISVISIBLE(mark)) { ++ focus(mark); ++ restack(selmon); ++ } else { ++ selmon->seltags ^= 1; ++ selmon->tagset[selmon->seltags] = mark->tags; ++ focus(mark); ++ arrange(selmon); ++ } ++ setmark(t); ++} ++ ++void ++togglemark(const Arg *arg) ++{ ++ if (!selmon->sel) ++ return; ++ setmark(selmon->sel == mark ? 0 : selmon->sel); ++} ++ ++ + void + tag(const Arg *arg) + { +@@ -1755,7 +1852,10 @@ unfocus(Client *c, int setfocus) + if (!c) + return; + grabbuttons(c, 0); +- XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); ++ if (c == mark) ++ XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColMark].pixel); ++ else ++ XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel); + if (setfocus) { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + XDeleteProperty(dpy, root, netatom[NetActiveWindow]); +@@ -1768,6 +1868,9 @@ unmanage(Client *c, int destroyed) + Monitor *m = c->mon; + XWindowChanges wc; + ++ if (c == mark) ++ setmark(0); ++ + detach(c); + detachstack(c); + if (!destroyed) { +-- +2.28.0 + diff --git a/dwm.suckless.org/patches/mark/index.md b/dwm.suckless.org/patches/mark/index.md @@ -34,18 +34,14 @@ Some ideas for combinations of key mappings: Download -------- -this patch has been revised, it's recommended to use dwm-6.1-mark-new.diff old -behaviours of the patch(dwm-mark-6.1.diff): +This patch has now been updated to 6.2. +The recommended version is dwm-6.2-mark-new.diff. (updated on 2020-10-05) -1. crashes when using mark features while the marked client has been killed. -2. swapclient clears the mark. -3. swapclient falls back to zoom() if the mark is not set. -4. swapfocus does not activate tags for the marked client -5. swapfocus does not focus monitors correctly - -* [dwm-mark-new-6.1.diff](dwm-mark-new-6.1.diff) -* [dwm-mark-6.1.diff](dwm-mark-6.1.diff) +* [dwm-mark-new-6.2.diff](dwm-mark-new-6.2.diff) +* [dwm-mark-new-6.1.diff](dwm-mark-new-6.1.diff) +* [dwm-mark-6.1.diff](dwm-mark-6.1.diff) Author ------ * phi <crispyfrog@163.com> +* mrkajetanp <kajetan.puchalski@tuta.io> (6.2 update)