dwm-mark-6.1.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-mark-6.1.diff (7161B)
---
1 diff -Naur dwm-6.1/config.def.h dwm-6.1-patched/config.def.h
2 --- dwm-6.1/config.def.h 2015-11-09 06:39:37.000000000 +0800
3 +++ dwm-6.1-patched/config.def.h 2016-02-17 16:46:11.137603047 +0800
4 @@ -11,6 +11,8 @@
5 static const char selbordercolor[] = "#005577";
6 static const char selbgcolor[] = "#005577";
7 static const char selfgcolor[] = "#eeeeee";
8 +static const char normmarkcolor[] = "#775500";
9 +static const char selmarkcolor[] = "#775577";
10 static const unsigned int borderpx = 1; /* border pixel of windows */
11 static const unsigned int snap = 32; /* snap pixel */
12 static const int showbar = 1; /* 0 means no bar */
13 @@ -68,7 +70,6 @@
14 { MODKEY, XK_d, incnmaster, {.i = -1 } },
15 { MODKEY, XK_h, setmfact, {.f = -0.05} },
16 { MODKEY, XK_l, setmfact, {.f = +0.05} },
17 - { MODKEY, XK_Return, zoom, {0} },
18 { MODKEY, XK_Tab, view, {0} },
19 { MODKEY|ShiftMask, XK_c, killclient, {0} },
20 { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
21 @@ -82,6 +83,9 @@
22 { MODKEY, XK_period, focusmon, {.i = +1 } },
23 { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
24 { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
25 + { MODKEY, XK_Return, swapclient, {0} },
26 + { MODKEY, XK_o, swapfocus, {0} },
27 + { MODKEY, XK_semicolon, togglemark, {0} },
28 TAGKEYS( XK_1, 0)
29 TAGKEYS( XK_2, 1)
30 TAGKEYS( XK_3, 2)
31 diff -Naur dwm-6.1/drw.h dwm-6.1-patched/drw.h
32 --- dwm-6.1/drw.h 2015-11-09 06:39:37.000000000 +0800
33 +++ dwm-6.1-patched/drw.h 2016-02-17 16:18:47.424219808 +0800
34 @@ -23,6 +23,7 @@
35 Clr *fg;
36 Clr *bg;
37 Clr *border;
38 + Clr *mark;
39 } ClrScheme;
40
41 typedef struct {
42 diff -Naur dwm-6.1/dwm.c dwm-6.1-patched/dwm.c
43 --- dwm-6.1/dwm.c 2015-11-09 06:39:37.000000000 +0800
44 +++ dwm-6.1-patched/dwm.c 2016-02-17 16:41:55.737595294 +0800
45 @@ -201,16 +201,20 @@
46 static void setfocus(Client *c);
47 static void setfullscreen(Client *c, int fullscreen);
48 static void setlayout(const Arg *arg);
49 +static void stemark(const Arg *arg);
50 static void setmfact(const Arg *arg);
51 static void setup(void);
52 static void showhide(Client *c);
53 static void sigchld(int unused);
54 static void spawn(const Arg *arg);
55 +static void swapclient(const Arg *arg);
56 +static void swapfocus(const Arg *arg);
57 static void tag(const Arg *arg);
58 static void tagmon(const Arg *arg);
59 static void tile(Monitor *);
60 static void togglebar(const Arg *arg);
61 static void togglefloating(const Arg *arg);
62 +static void togglemark(const Arg *arg);
63 static void toggletag(const Arg *arg);
64 static void toggleview(const Arg *arg);
65 static void unfocus(Client *c, int setfocus);
66 @@ -266,6 +270,7 @@
67 static Drw *drw;
68 static Monitor *mons, *selmon;
69 static Window root;
70 +static Client *mark;
71
72 /* configuration, allows nested code to access above variables */
73 #include "config.h"
74 @@ -482,6 +487,7 @@
75 for (i = 0; i < CurLast; i++)
76 drw_cur_free(drw, cursor[i]);
77 for (i = 0; i < SchemeLast; i++) {
78 + drw_clr_free(scheme[i].mark);
79 drw_clr_free(scheme[i].border);
80 drw_clr_free(scheme[i].bg);
81 drw_clr_free(scheme[i].fg);
82 @@ -807,7 +813,12 @@
83 detachstack(c);
84 attachstack(c);
85 grabbuttons(c, 1);
86 - XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->pix);
87 + if (c == mark)
88 + XSetWindowBorder(dpy, c->win,
89 + scheme[SchemeSel].mark->pix);
90 + else
91 + XSetWindowBorder(dpy, c->win,
92 + scheme[SchemeSel].border->pix);
93 setfocus(c);
94 } else {
95 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
96 @@ -1018,6 +1029,8 @@
97 {
98 if (!selmon->sel)
99 return;
100 + if (mark == selmon->sel)
101 + setmark(0);
102 if (!sendevent(selmon->sel, wmatom[WMDelete])) {
103 XGrabServer(dpy);
104 XSetErrorHandler(xerrordummy);
105 @@ -1065,7 +1078,10 @@
106
107 wc.border_width = c->bw;
108 XConfigureWindow(dpy, w, CWBorderWidth, &wc);
109 - XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
110 + if (c == mark)
111 + XSetWindowBorder(dpy, w, scheme[SchemeNorm].mark->pix);
112 + else
113 + XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
114 configure(c); /* propagates border_width, if size doesn't change */
115 updatewindowtype(c);
116 updatesizehints(c);
117 @@ -1528,6 +1544,23 @@
118 drawbar(selmon);
119 }
120
121 +void
122 +setmark(Client *c)
123 +{
124 + if (c == mark)
125 + return;
126 + if (mark) {
127 + XSetWindowBorder(dpy, mark->win, scheme[mark == selmon->sel
128 + ? SchemeSel : SchemeNorm].border->pix);
129 + mark = 0;
130 + }
131 + if (c) {
132 + XSetWindowBorder(dpy, c->win, scheme[c == selmon->sel
133 + ? SchemeSel : SchemeNorm].mark->pix);
134 + mark = c;
135 + }
136 +}
137 +
138 /* arg > 1.0 will set mfact absolutly */
139 void
140 setmfact(const Arg *arg)
141 @@ -1580,9 +1613,11 @@
142 cursor[CurResize] = drw_cur_create(drw, XC_sizing);
143 cursor[CurMove] = drw_cur_create(drw, XC_fleur);
144 /* init appearance */
145 + scheme[SchemeNorm].mark = drw_clr_create(drw, normmarkcolor);
146 scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
147 scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
148 scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
149 + scheme[SchemeSel].mark = drw_clr_create(drw, selmarkcolor);
150 scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
151 scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
152 scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
153 @@ -1646,6 +1681,50 @@
154 }
155
156 void
157 +swapclient(const Arg *arg)
158 +{
159 + Client *s, *m, t;
160 +
161 + if (!mark) {
162 + zoom(0);
163 + return;
164 + }
165 + s = selmon->sel;
166 + m = mark;
167 + if (!s || m == s || !selmon->lt[selmon->sellt]->arrange)
168 + return;
169 + t = *s;
170 + strcpy(s->name, m->name);
171 + strcpy(m->name, t.name);
172 + s->win = m->win;
173 + m->win = t.win;
174 + XMoveResizeWindow(dpy, s->win, s->x + 2 * sw, s->y, s->w, s->h);
175 + arrange(s->mon);
176 + XMapWindow(dpy, s->win);
177 + XMoveResizeWindow(dpy, m->win, m->x + 2 * sw, m->y, m->w, m->h);
178 + arrange(m->mon);
179 + XMapWindow(dpy, m->win);
180 +
181 + selmon->sel = m;
182 + mark = s;
183 + focus(s);
184 + setmark(m);
185 +}
186 +
187 +void
188 +swapfocus(const Arg *arg)
189 +{
190 + Client *t;
191 +
192 + if (!selmon->sel || !mark || selmon->sel == mark) {
193 + return;
194 + }
195 + t = mark;
196 + setmark(selmon->sel);
197 + focus(t);
198 +}
199 +
200 +void
201 tag(const Arg *arg)
202 {
203 if (selmon->sel && arg->ui & TAGMASK) {
204 @@ -1713,6 +1792,15 @@
205 }
206
207 void
208 +togglemark(const Arg *arg)
209 +{
210 + if (!selmon->sel) {
211 + return;
212 + }
213 + setmark(selmon->sel == mark ? 0 : selmon->sel);
214 +}
215 +
216 +void
217 toggletag(const Arg *arg)
218 {
219 unsigned int newtags;
220 @@ -1745,7 +1833,10 @@
221 if (!c)
222 return;
223 grabbuttons(c, 0);
224 - XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
225 + if (c == mark)
226 + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].mark->pix);
227 + else
228 + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
229 if (setfocus) {
230 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
231 XDeleteProperty(dpy, root, netatom[NetActiveWindow]);