dwm-mark-6.1.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
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 +0… | |
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 wind… | |
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 … | |
15 { MODKEY, XK_h, setmfact, {.f … | |
16 { MODKEY, XK_l, setmfact, {.f … | |
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 … | |
21 @@ -82,6 +83,9 @@ | |
22 { MODKEY, XK_period, focusmon, {.i … | |
23 { MODKEY|ShiftMask, XK_comma, tagmon, {.i … | |
24 { MODKEY|ShiftMask, XK_period, tagmon, {.i … | |
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-… | |
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, CurrentT… | |
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 chang… | |
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-… | |
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->… | |
227 + else | |
228 + XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border… | |
229 if (setfocus) { | |
230 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentT… | |
231 XDeleteProperty(dpy, root, netatom[NetActiveWindow]); |