Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-autoswitch-20240921-c282f865.diff - sites - public wiki contents of suckles…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-autoswitch-20240921-c282f865.diff (5015B)
---
1 From c282f86559f3c7858e34888c1fa0204c22ede89c Mon Sep 17 00:00:00 2001
2 From: elbachir-one <[email protected]>
3 Date: Sat, 21 Sep 2024 22:59:53 +0100
4 Subject: [PATCH] Allowing manual switch of monocle mode.
5
6 ---
7 config.def.h | 7 ++---
8 dwm.c | 72 +++++++++++++++++++++++++++++++++++++++-------------
9 2 files changed, 59 insertions(+), 20 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index 9efa774..32fafc9 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -5,6 +5,7 @@ static const unsigned int borderpx = 1; /* borde…
16 static const unsigned int snap = 32; /* snap pixel */
17 static const int showbar = 1; /* 0 means no bar */
18 static const int topbar = 1; /* 0 means bottom bar */
19 +static const int monoclemode = 4; /* automatically switch…
20 static const char *fonts[] = { "monospace:size=10" };
21 static const char dmenufont[] = "monospace:size=10";
22 static const char col_gray1[] = "#222222";
23 @@ -40,8 +41,8 @@ static const int lockfullscreen = 1; /* 1 will force f…
24 static const Layout layouts[] = {
25 /* symbol arrange function */
26 { "[]=", tile }, /* first entry is default */
27 - { "><>", NULL }, /* no layout function means floating b…
28 { "[M]", monocle },
29 + { "><>", NULL }, /* no layout function means floating b…
30 };
31
32 /* key definitions */
33 @@ -75,8 +76,8 @@ static const Key keys[] = {
34 { MODKEY, XK_Tab, view, {0} …
35 { MODKEY|ShiftMask, XK_c, killclient, {0} …
36 { MODKEY, XK_t, setlayout, {.v …
37 - { MODKEY, XK_f, setlayout, {.v …
38 - { MODKEY, XK_m, setlayout, {.v …
39 + { MODKEY, XK_m, setlayout, {.v …
40 + { MODKEY, XK_f, setlayout, {.v …
41 { MODKEY, XK_space, setlayout, {0} …
42 { MODKEY|ShiftMask, XK_space, togglefloating, {0} …
43 { MODKEY, XK_0, view, {.ui…
44 diff --git a/dwm.c b/dwm.c
45 index 67c6b2b..9561896 100644
46 --- a/dwm.c
47 +++ b/dwm.c
48 @@ -130,6 +130,7 @@ struct Monitor {
49 Monitor *next;
50 Window barwin;
51 const Layout *lt[2];
52 + int manualswitch;
53 };
54
55 typedef struct {
56 @@ -227,6 +228,7 @@ static void updatetitle(Client *c);
57 static void updatewindowtype(Client *c);
58 static void updatewmhints(Client *c);
59 static void view(const Arg *arg);
60 +static int visibleclientcount(Monitor *m);
61 static Client *wintoclient(Window w);
62 static Monitor *wintomon(Window w);
63 static int xerror(Display *dpy, XErrorEvent *ee);
64 @@ -382,15 +384,31 @@ applysizehints(Client *c, int *x, int *y, int *w, …
65 void
66 arrange(Monitor *m)
67 {
68 - if (m)
69 - showhide(m->stack);
70 - else for (m = mons; m; m = m->next)
71 + if (!m)
72 + for (m = mons; m; m = m->next)
73 + showhide(m->stack);
74 + else
75 showhide(m->stack);
76 - if (m) {
77 - arrangemon(m);
78 - restack(m);
79 - } else for (m = mons; m; m = m->next)
80 - arrangemon(m);
81 +
82 + for (Monitor *mon = (m ? m : mons); mon; mon = (m ? NULL : mon-…
83 + unsigned int n = visibleclientcount(mon);
84 +
85 + if (!mon->manualswitch) {
86 + if (n >= monoclemode && mon->lt[mon->sellt]->ar…
87 + setlayout(&(Arg) {.v = &layouts[1]});
88 + } else if (n < monoclemode && mon->lt[mon->sell…
89 + setlayout(&(Arg) {.v = &layouts[0]});
90 + }
91 + }
92 +
93 + if (mon->manualswitch && (n < monoclemode || n >= monoc…
94 + mon->manualswitch = 0;
95 + }
96 +
97 + arrangemon(mon);
98 + if (!m)
99 + restack(mon);
100 + }
101 }
102
103 void
104 @@ -1510,15 +1528,22 @@ setfullscreen(Client *c, int fullscreen)
105 void
106 setlayout(const Arg *arg)
107 {
108 - if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
109 - selmon->sellt ^= 1;
110 - if (arg && arg->v)
111 - selmon->lt[selmon->sellt] = (Layout *)arg->v;
112 - strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, si…
113 - if (selmon->sel)
114 - arrange(selmon);
115 - else
116 - drawbar(selmon);
117 + if (!arg || !arg->v)
118 + return;
119 +
120 + Layout *newlayout = (Layout *)arg->v;
121 + if (newlayout != selmon->lt[selmon->sellt]) {
122 + selmon->lt[selmon->sellt] = newlayout;
123 + strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->sy…
124 + selmon->ltsymbol[sizeof(selmon->ltsymbol) - 1] = '\0';
125 +
126 + selmon->manualswitch = 1;
127 +
128 + if (selmon->sel)
129 + arrange(selmon);
130 + else
131 + drawbar(selmon);
132 + }
133 }
134
135 /* arg > 1.0 will set mfact absolutely */
136 @@ -2062,6 +2087,19 @@ view(const Arg *arg)
137 arrange(selmon);
138 }
139
140 +int
141 +visibleclientcount(Monitor *m)
142 +{
143 + unsigned int count = 0;
144 + Client *c;
145 + for (c = m->clients; c; c = c->next) {
146 + if (ISVISIBLE(c)) {
147 + count++;
148 + }
149 + }
150 + return count;
151 +}
152 +
153 Client *
154 wintoclient(Window w)
155 {
156 --
157 2.46.0
158
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.