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 |