Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-mark-new-6.2.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-mark-new-6.2.diff (6906B)
---
1 From 753860d3435e2968358f2bf8daf70bf625fe75fe Mon Sep 17 00:00:00 2001
2 From: Kajetan Puchalski <[email protected]>
3 Date: Mon, 5 Oct 2020 11:04:31 +0100
4 Subject: [PATCH] Updated Mark patch to work with 6.2
5
6 ---
7 config.def.h | 14 +++++--
8 drw.h | 2 +-
9 dwm.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
10 3 files changed, 118 insertions(+), 9 deletions(-)
11
12 diff --git a/config.def.h b/config.def.h
13 index 3858d75..a416c97 100644
14 --- a/config.def.h
15 +++ b/config.def.h
16 @@ -12,10 +12,13 @@ static const char col_gray2[] = "#444444";
17 static const char col_gray3[] = "#bbbbbb";
18 static const char col_gray4[] = "#eeeeee";
19 static const char col_cyan[] = "#005577";
20 -static const char *colors[][3] = {
21 - /* fg bg border */
22 - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
23 - [SchemeSel] = { col_gray4, col_cyan, col_cyan },
24 +static const char normmarkcolor[] = "#775500"; /*border color …
25 +static const char selmarkcolor[] = "#775577"; /*border color …
26 +
27 +static const char *colors[][4] = {
28 + /* fg bg border mark */
29 + [SchemeNorm] = { col_gray3, col_gray1, col_gray2, normmarkcolor…
30 + [SchemeSel] = { col_gray4, col_cyan, col_cyan, selmarkcolor …
31 };
32
33 /* tagging */
34 @@ -94,6 +97,9 @@ static Key keys[] = {
35 TAGKEYS( XK_8, 7)
36 TAGKEYS( XK_9, 8)
37 { MODKEY|ShiftMask, XK_q, quit, {0} …
38 + { MODKEY, XK_semicolon, togglemark, {0} },
39 + { MODKEY, XK_o, swapfocus, {0} },
40 + { MODKEY, XK_u, swapclient, {0} },
41 };
42
43 /* button definitions */
44 diff --git a/drw.h b/drw.h
45 index 4bcd5ad..97aae99 100644
46 --- a/drw.h
47 +++ b/drw.h
48 @@ -12,7 +12,7 @@ typedef struct Fnt {
49 struct Fnt *next;
50 } Fnt;
51
52 -enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */
53 +enum { ColFg, ColBg, ColBorder, ColMark }; /* Clr scheme index */
54 typedef XftColor Clr;
55
56 typedef struct {
57 diff --git a/dwm.c b/dwm.c
58 index 664c527..195b8eb 100644
59 --- a/dwm.c
60 +++ b/dwm.c
61 @@ -201,17 +201,21 @@ static void setclientstate(Client *c, long state);
62 static void setfocus(Client *c);
63 static void setfullscreen(Client *c, int fullscreen);
64 static void setlayout(const Arg *arg);
65 +static void setmark(Client *c);
66 static void setmfact(const Arg *arg);
67 static void setup(void);
68 static void seturgent(Client *c, int urg);
69 static void showhide(Client *c);
70 static void sigchld(int unused);
71 static void spawn(const Arg *arg);
72 +static void swapclient(const Arg *arg);
73 +static void swapfocus(const Arg *arg);
74 static void tag(const Arg *arg);
75 static void tagmon(const Arg *arg);
76 static void tile(Monitor *);
77 static void togglebar(const Arg *arg);
78 static void togglefloating(const Arg *arg);
79 +static void togglemark(const Arg *arg);
80 static void toggletag(const Arg *arg);
81 static void toggleview(const Arg *arg);
82 static void unfocus(Client *c, int setfocus);
83 @@ -268,6 +272,7 @@ static Display *dpy;
84 static Drw *drw;
85 static Monitor *mons, *selmon;
86 static Window root, wmcheckwin;
87 +static Client *mark;
88
89 /* configuration, allows nested code to access above variables */
90 #include "config.h"
91 @@ -796,7 +801,10 @@ focus(Client *c)
92 detachstack(c);
93 attachstack(c);
94 grabbuttons(c, 1);
95 - XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBord…
96 + if (c == mark)
97 + XSetWindowBorder(dpy, c->win, scheme[SchemeSel]…
98 + else
99 + XSetWindowBorder(dpy, c->win, scheme[SchemeSel]…
100 setfocus(c);
101 } else {
102 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentT…
103 @@ -1052,7 +1060,10 @@ manage(Window w, XWindowAttributes *wa)
104
105 wc.border_width = c->bw;
106 XConfigureWindow(dpy, w, CWBorderWidth, &wc);
107 - XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
108 + if (c == mark)
109 + XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColMark].pi…
110 + else
111 + XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].…
112 configure(c); /* propagates border_width, if size doesn't chang…
113 updatewindowtype(c);
114 updatesizehints(c);
115 @@ -1512,6 +1523,23 @@ setlayout(const Arg *arg)
116 drawbar(selmon);
117 }
118
119 +void
120 +setmark(Client *c)
121 +{
122 + if (c == mark)
123 + return;
124 + if (mark) {
125 + XSetWindowBorder(dpy, mark->win, scheme[mark == selmon-…
126 + ? SchemeSel : SchemeNorm][ColBorder].pi…
127 + mark = 0;
128 + }
129 + if (c) {
130 + XSetWindowBorder(dpy, c->win, scheme[c == selmon->sel
131 + ? SchemeSel : SchemeNorm][ColMark].pixe…
132 + mark = c;
133 + }
134 +}
135 +
136 /* arg > 1.0 will set mfact absolutely */
137 void
138 setmfact(const Arg *arg)
139 @@ -1570,7 +1598,7 @@ setup(void)
140 /* init appearance */
141 scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
142 for (i = 0; i < LENGTH(colors); i++)
143 - scheme[i] = drw_scm_create(drw, colors[i], 3);
144 + scheme[i] = drw_scm_create(drw, colors[i], 4);
145 /* init bars */
146 updatebars();
147 updatestatus();
148 @@ -1653,6 +1681,75 @@ spawn(const Arg *arg)
149 }
150 }
151
152 +void
153 +swapclient(const Arg *arg)
154 +{
155 + Client *s, *m, t;
156 +
157 + if (!mark || !selmon->sel || mark == selmon->sel
158 + || !selmon->lt[selmon->sellt]->arrange)
159 + return;
160 + s = selmon->sel;
161 + m = mark;
162 + t = *s;
163 + strcpy(s->name, m->name);
164 + s->win = m->win;
165 + s->x = m->x;
166 + s->y = m->y;
167 + s->w = m->w;
168 + s->h = m->h;
169 +
170 + m->win = t.win;
171 + strcpy(m->name, t.name);
172 + m->x = t.x;
173 + m->y = t.y;
174 + m->w = t.w;
175 + m->h = t.h;
176 +
177 + selmon->sel = m;
178 + mark = s;
179 + focus(s);
180 + setmark(m);
181 +
182 + arrange(s->mon);
183 + if (s->mon != m->mon) {
184 + arrange(m->mon);
185 + }
186 +}
187 +
188 +void
189 +swapfocus(const Arg *arg)
190 +{
191 + Client *t;
192 +
193 + if (!selmon->sel || !mark || selmon->sel == mark)
194 + return;
195 + t = selmon->sel;
196 + if (mark->mon != selmon) {
197 + unfocus(selmon->sel, 0);
198 + selmon = mark->mon;
199 + }
200 + if (ISVISIBLE(mark)) {
201 + focus(mark);
202 + restack(selmon);
203 + } else {
204 + selmon->seltags ^= 1;
205 + selmon->tagset[selmon->seltags] = mark->tags;
206 + focus(mark);
207 + arrange(selmon);
208 + }
209 + setmark(t);
210 +}
211 +
212 +void
213 +togglemark(const Arg *arg)
214 +{
215 + if (!selmon->sel)
216 + return;
217 + setmark(selmon->sel == mark ? 0 : selmon->sel);
218 +}
219 +
220 +
221 void
222 tag(const Arg *arg)
223 {
224 @@ -1755,7 +1852,10 @@ unfocus(Client *c, int setfocus)
225 if (!c)
226 return;
227 grabbuttons(c, 0);
228 - XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pix…
229 + if (c == mark)
230 + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColMar…
231 + else
232 + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBor…
233 if (setfocus) {
234 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentT…
235 XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
236 @@ -1768,6 +1868,9 @@ unmanage(Client *c, int destroyed)
237 Monitor *m = c->mon;
238 XWindowChanges wc;
239
240 + if (c == mark)
241 + setmark(0);
242 +
243 detach(c);
244 detachstack(c);
245 if (!destroyed) {
246 --
247 2.28.0
248
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.