dwm-multimon-2-unified_view-6.4.patch - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-multimon-2-unified_view-6.4.patch (6582B)
---
1 From 96ebf3ddfad143aec93a7d2aa212389121ccae41 Mon Sep 17 00:00:00 2001
2 From: "Gary B. Genett" <me@garybgenett.net>
3 Date: Sun, 19 Feb 2023 08:57:30 -0800
4 Subject: added n*view wrappers, for unified multi-monitor
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 config.def.h | 5 +++++
15 dwm.c | 26 ++++++++++++++++++++++++++
16 2 files changed, 31 insertions(+)
17
18
19 --------------2.37.4
20 Content-Type: text/x-patch; name="0002-added-n-view-wrappers-for-unified-multi-monitor.patch"
21 Content-Transfer-Encoding: 8bit
22 Content-Disposition: attachment; filename="0002-added-n-view-wrappers-for-unified-multi-monitor.patch"
23
24 diff --git a/config.def.h b/config.def.h
25 index 9d549ce8628e1a7769ee2a3d5c0a4c6d56ce6931..c59d27597a62ddf884baacded2830a318db1b45c 100644
26 --- a/config.def.h
27 +++ b/config.def.h
28 @@ -38,24 +38,27 @@ static const int resizehints = 1; /* 1 means respect size hints in tiled resi
29 static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
30
31 static const Layout layouts[] = {
32 /* symbol arrange function */
33 { "[]=", tile }, /* first entry is default */
34 { "><>", NULL }, /* no layout function means floating behavior */
35 { "[M]", monocle },
36 };
37
38 /* key definitions */
39 +#define WINKEY Mod4Mask
40 #define MODKEY Mod1Mask
41 #define TAGKEYS(KEY,TAG) \
42 { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
43 { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
44 + { MODKEY|WINKEY, KEY, nview, {.ui = 1 << TAG} }, \
45 + { MODKEY|WINKEY|ControlMask, KEY, ntoggleview, {.ui = 1 << TAG} }, \
46 { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
47 { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
48
49 /* helper for spawning shell commands in the pre dwm-5.0 fashion */
50 #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
51
52 /* commands */
53 static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
54 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
55 static const char *termcmd[] = { "st", NULL };
56 @@ -105,14 +108,16 @@ static const Button buttons[] = {
57 { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
58 { ClkMonNum, 0, Button1, focusmon, {.i = +1} },
59 { ClkMonNum, 0, Button3, focusmon, {.i = -1} },
60 { ClkWinTitle, 0, Button2, zoom, {0} },
61 { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
62 { ClkClientWin, MODKEY, Button1, movemouse, {0} },
63 { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
64 { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
65 { ClkTagBar, 0, Button1, view, {0} },
66 { ClkTagBar, 0, Button3, toggleview, {0} },
67 + { ClkTagBar, MODKEY|WINKEY, Button1, nview, {0} },
68 + { ClkTagBar, MODKEY|WINKEY, Button3, ntoggleview, {0} },
69 { ClkTagBar, MODKEY, Button1, tag, {0} },
70 { ClkTagBar, MODKEY, Button3, toggletag, {0} },
71 };
72
73 diff --git a/dwm.c b/dwm.c
74 index bc5160a7d46ab07da82f0595abb7700debb2b891..2cf8d78c22c64ff26eda6195b6bd503f213a4d5f 100644
75 --- a/dwm.c
76 +++ b/dwm.c
77 @@ -206,34 +206,36 @@ static void setmfact(const Arg *arg);
78 static void setup(void);
79 static void seturgent(Client *c, int urg);
80 static void showhide(Client *c);
81 static void spawn(const Arg *arg);
82 static void tag(const Arg *arg);
83 static void tagmon(const Arg *arg);
84 static void tile(Monitor *m);
85 static void togglebar(const Arg *arg);
86 static void togglefloating(const Arg *arg);
87 static void toggletag(const Arg *arg);
88 +static void ntoggleview(const Arg *arg);
89 static void toggleview(const Arg *arg);
90 static void unfocus(Client *c, int setfocus);
91 static void unmanage(Client *c, int destroyed);
92 static void unmapnotify(XEvent *e);
93 static void updatebarpos(Monitor *m);
94 static void updatebars(void);
95 static void updateclientlist(void);
96 static int updategeom(void);
97 static void updatenumlockmask(void);
98 static void updatesizehints(Client *c);
99 static void updatestatus(void);
100 static void updatetitle(Client *c);
101 static void updatewindowtype(Client *c);
102 static void updatewmhints(Client *c);
103 +static void nview(const Arg *arg);
104 static void view(const Arg *arg);
105 static Client *wintoclient(Window w);
106 static Monitor *wintomon(Window w);
107 static int xerror(Display *dpy, XErrorEvent *ee);
108 static int xerrordummy(Display *dpy, XErrorEvent *ee);
109 static int xerrorstart(Display *dpy, XErrorEvent *ee);
110 static void zoom(const Arg *arg);
111
112 /* variables */
113 static const char broken[] = "broken";
114 @@ -1743,20 +1745,32 @@ toggletag(const Arg *arg)
115 if (!selmon->sel)
116 return;
117 newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
118 if (newtags) {
119 selmon->sel->tags = newtags;
120 focus(NULL);
121 arrange(selmon);
122 }
123 }
124
125 +void
126 +ntoggleview(const Arg *arg)
127 +{
128 + const Arg n = {.i = +1};
129 + const int mon = selmon->num;
130 + do {
131 + focusmon(&n);
132 + toggleview(arg);
133 + }
134 + while (selmon->num != mon);
135 +}
136 +
137 void
138 toggleview(const Arg *arg)
139 {
140 unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
141
142 if (newtagset) {
143 selmon->tagset[selmon->seltags] = newtagset;
144 focus(NULL);
145 arrange(selmon);
146 }
147 @@ -2045,20 +2059,32 @@ updatewmhints(Client *c)
148 } else
149 c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0;
150 if (wmh->flags & InputHint)
151 c->neverfocus = !wmh->input;
152 else
153 c->neverfocus = 0;
154 XFree(wmh);
155 }
156 }
157
158 +void
159 +nview(const Arg *arg)
160 +{
161 + const Arg n = {.i = +1};
162 + const int mon = selmon->num;
163 + do {
164 + focusmon(&n);
165 + view(arg);
166 + }
167 + while (selmon->num != mon);
168 +}
169 +
170 void
171 view(const Arg *arg)
172 {
173 if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
174 return;
175 selmon->seltags ^= 1; /* toggle sel tagset */
176 if (arg->ui & TAGMASK)
177 selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
178 focus(NULL);
179 arrange(selmon);
180
181 --------------2.37.4--
182
183