-
Notifications
You must be signed in to change notification settings - Fork 30
/
dwm-pertag-monitorrules-6.3.diff
139 lines (131 loc) · 3.97 KB
/
dwm-pertag-monitorrules-6.3.diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
From 6e1ddf01ff4167b8bdc4fcdd1d6beadcf15eb1b8 Mon Sep 17 00:00:00 2001
From: Bakkeby <bakkeby@gmail.com>
Date: Fri, 28 Jun 2024 18:13:16 +0200
Subject: [PATCH 2/2] Monitor rules patch on top of pertag
This patch allows the user to define layout, mfact, nmaster, showbar,
and topbar settings on a per monitor basis. An example use case could
be to have a layout with a horizontal split for a secondary vertical
monitor.
https://github.com/bakkeby/patches/wiki/monitorrules
---
config.def.h | 6 +++++
dwm.c | 67 +++++++++++++++++++++++++++++++++++++++++-----------
2 files changed, 59 insertions(+), 14 deletions(-)
diff --git a/config.def.h b/config.def.h
index a2ac963..cf8c7d1 100644
--- a/config.def.h
+++ b/config.def.h
@@ -44,6 +44,12 @@ static const Layout layouts[] = {
{ "[M]", monocle },
};
+static const MonitorRule monrules[] = {
+ /* monitor tag layout mfact nmaster showbar topbar */
+ { 1, -1, 2, -1, -1, -1, -1 }, // use a different layout for the second monitor
+ { -1, -1, 0, -1, -1, -1, -1 }, // default
+};
+
/* key definitions */
#define MODKEY Mod1Mask
#define TAGKEYS(KEY,TAG) \
diff --git a/dwm.c b/dwm.c
index b8ae4a5..d167d42 100644
--- a/dwm.c
+++ b/dwm.c
@@ -143,6 +143,16 @@ typedef struct {
int monitor;
} Rule;
+typedef struct {
+ int monitor;
+ int tag;
+ int layout;
+ float mfact;
+ int nmaster;
+ int showbar;
+ int topbar;
+} MonitorRule;
+
/* function declarations */
static void applyrules(Client *c);
static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
@@ -646,31 +656,46 @@ configurerequest(XEvent *e)
Monitor *
createmon(void)
{
- Monitor *m;
- int i;
-
+ Monitor *m, *mon;
+ int i, mi, j, layout;
+ const MonitorRule *mr;
m = ecalloc(1, sizeof(Monitor));
m->tagset[0] = m->tagset[1] = 1;
m->mfact = mfact;
m->nmaster = nmaster;
m->showbar = showbar;
m->topbar = topbar;
- m->lt[0] = &layouts[0];
- m->lt[1] = &layouts[1 % LENGTH(layouts)];
- strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
+
+ for (mi = 0, mon = mons; mon; mon = mon->next, mi++);
+ for (j = 0; j < LENGTH(monrules); j++) {
+ mr = &monrules[j];
+ if ((mr->monitor == -1 || mr->monitor == mi)
+ && (mr->tag <= 0 || (m->tagset[0] & (1 << (mr->tag - 1))))
+ ) {
+ layout = MAX(mr->layout, 0);
+ layout = MIN(layout, LENGTH(layouts) - 1);
+ m->lt[0] = &layouts[layout];
+ m->lt[1] = &layouts[1 % LENGTH(layouts)];
+ strncpy(m->ltsymbol, layouts[layout].symbol, sizeof m->ltsymbol);
+
+ if (mr->mfact > -1)
+ m->mfact = mr->mfact;
+ if (mr->nmaster > -1)
+ m->nmaster = mr->nmaster;
+ if (mr->showbar > -1)
+ m->showbar = mr->showbar;
+ if (mr->topbar > -1)
+ m->topbar = mr->topbar;
+ break;
+ }
+ }
+
if (!(m->pertag = (Pertag *)calloc(1, sizeof(Pertag))))
die("fatal: could not malloc() %u bytes\n", sizeof(Pertag));
m->pertag->curtag = m->pertag->prevtag = 1;
- for (i = 0; i <= LENGTH(tags); i++) {
- /* init nmaster */
- m->pertag->nmasters[i] = m->nmaster;
-
- /* init mfacts */
- m->pertag->mfacts[i] = m->mfact;
+ for (i = 0; i <= LENGTH(tags); i++) {
/* init layouts */
- m->pertag->ltidxs[i][0] = m->lt[0];
- m->pertag->ltidxs[i][1] = m->lt[1];
m->pertag->sellts[i] = m->sellt;
/* init showbar */
@@ -679,6 +704,20 @@ createmon(void)
#if ZOOMSWAP_PATCH
m->pertag->prevzooms[i] = NULL;
#endif // ZOOMSWAP_PATCH
+
+ for (j = 0; j < LENGTH(monrules); j++) {
+ mr = &monrules[j];
+ if ((mr->monitor == -1 || mr->monitor == mi) && (mr->tag == -1 || mr->tag == i)) {
+ layout = MAX(mr->layout, 0);
+ layout = MIN(layout, LENGTH(layouts) - 1);
+ m->pertag->ltidxs[i][0] = &layouts[layout];
+ m->pertag->ltidxs[i][1] = m->lt[0];
+ m->pertag->nmasters[i] = (mr->nmaster > -1 ? mr->nmaster : m->nmaster);
+ m->pertag->mfacts[i] = (mr->mfact > -1 ? mr->mfact : m->mfact);
+ m->pertag->showbars[i] = (mr->showbar > -1 ? mr->showbar : m->showbar);
+ break;
+ }
+ }
}
return m;
}
--
2.45.2