| dwm-multimon-2-unified_view-6.4.patch - sites - public wiki contents of suckles… | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| 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" <[email protected]> | |
| 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… | |
| 21 Content-Transfer-Encoding: 8bit | |
| 22 Content-Disposition: attachment; filename="0002-added-n-view-wrappers-fo… | |
| 23 | |
| 24 diff --git a/config.def.h b/config.def.h | |
| 25 index 9d549ce8628e1a7769ee2a3d5c0a4c6d56ce6931..c59d27597a62ddf884baacde… | |
| 26 --- a/config.def.h | |
| 27 +++ b/config.def.h | |
| 28 @@ -38,24 +38,27 @@ static const int resizehints = 1; /* 1 means resp… | |
| 29 static const int lockfullscreen = 1; /* 1 will force focus on the fulls… | |
| 30 | |
| 31 static const Layout layouts[] = { | |
| 32 /* symbol arrange function */ | |
| 33 { "[]=", tile }, /* first entry is default */ | |
| 34 { "><>", NULL }, /* no layout function means floating b… | |
| 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 … | |
| 43 { MODKEY|ControlMask, KEY, toggleview, {.ui … | |
| 44 + { MODKEY|WINKEY, KEY, nview, {.ui … | |
| 45 + { MODKEY|WINKEY|ControlMask, KEY, ntoggleview, {.ui … | |
| 46 { MODKEY|ShiftMask, KEY, tag, {.ui … | |
| 47 { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui … | |
| 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… | |
| 54 static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", d… | |
| 55 static const char *termcmd[] = { "st", NULL }; | |
| 56 @@ -105,14 +108,16 @@ static const Button buttons[] = { | |
| 57 { ClkLtSymbol, 0, Button3, setlayo… | |
| 58 { ClkMonNum, 0, Button1, focusmo… | |
| 59 { ClkMonNum, 0, Button3, focusmo… | |
| 60 { ClkWinTitle, 0, Button2, zoom, … | |
| 61 { ClkStatusText, 0, Button2, spawn, … | |
| 62 { ClkClientWin, MODKEY, Button1, movemou… | |
| 63 { ClkClientWin, MODKEY, Button2, togglef… | |
| 64 { ClkClientWin, MODKEY, Button3, resizem… | |
| 65 { ClkTagBar, 0, Button1, view, … | |
| 66 { ClkTagBar, 0, Button3, togglev… | |
| 67 + { ClkTagBar, MODKEY|WINKEY, Button1, nview, … | |
| 68 + { ClkTagBar, MODKEY|WINKEY, Button3, ntoggle… | |
| 69 { ClkTagBar, MODKEY, Button1, tag, … | |
| 70 { ClkTagBar, MODKEY, Button3, togglet… | |
| 71 }; | |
| 72 | |
| 73 diff --git a/dwm.c b/dwm.c | |
| 74 index bc5160a7d46ab07da82f0595abb7700debb2b891..2cf8d78c22c64ff26eda6195… | |
| 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… | |
| 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 :… | |
| 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 |