dwm-multimon-6-swap_focus-6.4.patch - sites - public wiki contents of suckless.… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dwm-multimon-6-swap_focus-6.4.patch (6495B) | |
--- | |
1 From de73c72af0250f56f9ac30a5c3f4520da250282a Mon Sep 17 00:00:00 2001 | |
2 From: "Gary B. Genett" <[email protected]> | |
3 Date: Sun, 19 Feb 2023 09:40:00 -0800 | |
4 Subject: patches/swapfocus: dwm-swapfocus-20160731-56a31dc.diff | |
5 MIME-Version: 1.0 | |
6 Content-Type: multipart/mixed; boundary="------------2.37.4" | |
7 | |
8 This is a multi-part message in MIME format. | |
9 --------------2.37.4 | |
10 Content-Type: text/plain; charset=UTF-8; format=fixed | |
11 Content-Transfer-Encoding: 8bit | |
12 | |
13 | |
14 modified from sites: 38b351cf3689ff3fa4845d35ce9894fd9253dbb8 | |
15 --- | |
16 config.def.h | 1 + | |
17 dwm.c | 19 ++++++++++++++++++- | |
18 2 files changed, 19 insertions(+), 1 deletion(-) | |
19 | |
20 | |
21 --------------2.37.4 | |
22 Content-Type: text/x-patch; name="0006-patches-swapfocus-dwm-swapfocus-2… | |
23 Content-Transfer-Encoding: 8bit | |
24 Content-Disposition: attachment; filename="0006-patches-swapfocus-dwm-sw… | |
25 | |
26 diff --git a/config.def.h b/config.def.h | |
27 index fd00f7080db9271912d0e4352434739d3c08e1b3..9a1118791c3a2f875b58bf39… | |
28 --- a/config.def.h | |
29 +++ b/config.def.h | |
30 @@ -79,20 +79,21 @@ static const Key keys[] = { | |
31 { MODKEY, XK_j, focusstack, {.i … | |
32 { MODKEY, XK_k, focusstack, {.i … | |
33 { MODKEY|ShiftMask, XK_j, pushdown, {0} … | |
34 { MODKEY|ShiftMask, XK_k, pushup, {0} … | |
35 { MODKEY, XK_i, incnmaster, {.i … | |
36 { MODKEY, XK_d, incnmaster, {.i … | |
37 { MODKEY, XK_h, setmfact, {.f … | |
38 { MODKEY, XK_l, setmfact, {.f … | |
39 { MODKEY, XK_Return, zoom, {0} … | |
40 { MODKEY, XK_Tab, view, {0} … | |
41 + { MODKEY|ShiftMask, XK_Tab, swapfocus, {0} … | |
42 { MODKEY|ShiftMask, XK_c, killclient, {0} … | |
43 { MODKEY, XK_t, setlayout, {.v … | |
44 { MODKEY, XK_f, setlayout, {.v … | |
45 { MODKEY, XK_m, setlayout, {.v … | |
46 { MODKEY, XK_space, setlayout, {0} … | |
47 { MODKEY|ShiftMask, XK_space, togglefloating, {0} … | |
48 { MODKEY, XK_0, view, {.ui… | |
49 { MODKEY|ShiftMask, XK_0, tag, {.ui… | |
50 { MODKEY, XK_comma, focusmon, {.i … | |
51 { MODKEY, XK_period, focusmon, {.i … | |
52 diff --git a/dwm.c b/dwm.c | |
53 index 5aa229611a27b8aa943308314b494c10e2364137..ac52b8c25991a073db15b55f… | |
54 --- a/dwm.c | |
55 +++ b/dwm.c | |
56 @@ -203,20 +203,21 @@ static int sendevent(Client *c, Atom proto); | |
57 static void sendmon(Client *c, Monitor *m); | |
58 static void setclientstate(Client *c, long state); | |
59 static void setfocus(Client *c); | |
60 static void setfullscreen(Client *c, int fullscreen); | |
61 static void setlayout(const Arg *arg); | |
62 static void setmfact(const Arg *arg); | |
63 static void setup(void); | |
64 static void seturgent(Client *c, int urg); | |
65 static void showhide(Client *c); | |
66 static void spawn(const Arg *arg); | |
67 +static void swapfocus(const Arg *arg); | |
68 static void tag(const Arg *arg); | |
69 static void tagmon(const Arg *arg); | |
70 static void tile(Monitor *m); | |
71 static void togglebar(const Arg *arg); | |
72 static void togglefloating(const Arg *arg); | |
73 static void toggletag(const Arg *arg); | |
74 static void ntoggleview(const Arg *arg); | |
75 static void toggleview(const Arg *arg); | |
76 static void unfocus(Client *c, int setfocus); | |
77 static void unmanage(Client *c, int destroyed); | |
78 @@ -235,20 +236,21 @@ static void nview(const Arg *arg); | |
79 static void view(const Arg *arg); | |
80 static Client *wintoclient(Window w); | |
81 static Monitor *wintomon(Window w); | |
82 static int xerror(Display *dpy, XErrorEvent *ee); | |
83 static int xerrordummy(Display *dpy, XErrorEvent *ee); | |
84 static int xerrorstart(Display *dpy, XErrorEvent *ee); | |
85 static void zoom(const Arg *arg); | |
86 static void reset_view(const Arg *arg); | |
87 | |
88 /* variables */ | |
89 +static Client *prevclient = NULL; | |
90 static const char broken[] = "broken"; | |
91 static char stext[256]; | |
92 static int screen; | |
93 static int sw, sh; /* X display screen geometry width, height… | |
94 static int bh; /* bar height */ | |
95 static int lrpad; /* sum of left and right padding for text … | |
96 static int (*xerrorxlib)(Display *, XErrorEvent *); | |
97 static unsigned int numlockmask = 0; | |
98 static void (*handler[LASTEvent]) (XEvent *) = { | |
99 [ButtonPress] = buttonpress, | |
100 @@ -1721,20 +1723,32 @@ spawn(const Arg *arg) | |
101 dmenumon[0] = '0' + selmon->num; | |
102 if (fork() == 0) { | |
103 if (dpy) | |
104 close(ConnectionNumber(dpy)); | |
105 setsid(); | |
106 execvp(((char **)arg->v)[0], (char **)arg->v); | |
107 die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]); | |
108 } | |
109 } | |
110 | |
111 +void | |
112 +swapfocus(const Arg *arg) | |
113 +{ | |
114 + Client *c; | |
115 + | |
116 + for(c = selmon->clients; c && c != prevclient; c = c->next) ; | |
117 + if(c == prevclient) { | |
118 + focus(prevclient); | |
119 + restack(prevclient->mon); | |
120 + } | |
121 +} | |
122 + | |
123 void | |
124 tag(const Arg *arg) | |
125 { | |
126 if (selmon->sel && arg->ui & TAGMASK) { | |
127 selmon->sel->tags = arg->ui & TAGMASK; | |
128 focus(NULL); | |
129 arrange(selmon); | |
130 } | |
131 } | |
132 | |
133 @@ -1834,20 +1848,21 @@ toggleview(const Arg *arg) | |
134 focus(NULL); | |
135 arrange(selmon); | |
136 } | |
137 } | |
138 | |
139 void | |
140 unfocus(Client *c, int setfocus) | |
141 { | |
142 if (!c) | |
143 return; | |
144 + prevclient = c; | |
145 grabbuttons(c, 0); | |
146 XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pix… | |
147 if (setfocus) { | |
148 XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentT… | |
149 XDeleteProperty(dpy, root, netatom[NetActiveWindow]); | |
150 } | |
151 } | |
152 | |
153 void | |
154 unmanage(Client *c, int destroyed) | |
155 @@ -2213,25 +2228,27 @@ int | |
156 xerrorstart(Display *dpy, XErrorEvent *ee) | |
157 { | |
158 die("dwm: another window manager is already running"); | |
159 return -1; | |
160 } | |
161 | |
162 void | |
163 zoom(const Arg *arg) | |
164 { | |
165 Client *c = selmon->sel; | |
166 + prevclient = nexttiled(selmon->clients); | |
167 | |
168 if (!selmon->lt[selmon->sellt]->arrange || !c || c->isfloating) | |
169 return; | |
170 if (c == nexttiled(selmon->clients) && !(c = nexttiled(c->next)… | |
171 - return; | |
172 + if (!c || !(c = prevclient = nexttiled(c->next))) | |
173 + return; | |
174 pop(c); | |
175 } | |
176 | |
177 void | |
178 reset_view(const Arg *arg) { | |
179 const int mon = selmon->num; | |
180 Arg n = {.i = +1}; // focusmon(next monitor) | |
181 Arg m = {.f = 0}; // mfact -> facts[] | |
182 Arg i = {.i = 0}; // nmaster -> masters[] | |
183 Arg v = {.ui = 0}; // nviews -> views[] | |
184 | |
185 --------------2.37.4-- | |
186 | |
187 |