Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-cyclewindows-20240624-56f64312.diff - sites - public wiki contents of suckl…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-cyclewindows-20240624-56f64312.diff (3270B)
---
1 From 56f643120f082c9fd609f25e3ad9db6eb435fb89 Mon Sep 17 00:00:00 2001
2 From: elbachir-one <[email protected]>
3 Date: Mon, 24 Jun 2024 22:15:50 +0100
4 Subject: [PATCH] Inspired by a Reddit post from u/PawarShubham3007
5 shubham-cpp on github, this patch aiming to make dwm focus on windows
6 of the same program.
7
8 ---
9 config.def.h | 4 +++-
10 dwm.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++
11 2 files changed, 58 insertions(+), 1 deletion(-)
12
13 diff --git a/config.def.h b/config.def.h
14 index 9efa774..fd0dda6 100644
15 --- a/config.def.h
16 +++ b/config.def.h
17 @@ -85,6 +85,8 @@ static const Key keys[] = {
18 { MODKEY, XK_period, focusmon, {.i …
19 { MODKEY|ShiftMask, XK_comma, tagmon, {.i …
20 { MODKEY|ShiftMask, XK_period, tagmon, {.i …
21 + { MODKEY, XK_n, focussame, {.i = +1 …
22 + { MODKEY|ShiftMask, XK_n, focussame, {.i = -1 …
23 TAGKEYS( XK_1, 0)
24 TAGKEYS( XK_2, 1)
25 TAGKEYS( XK_3, 2)
26 diff --git a/dwm.c b/dwm.c
27 index 67c6b2b..c657315 100644
28 --- a/dwm.c
29 +++ b/dwm.c
30 @@ -233,6 +233,8 @@ static int xerror(Display *dpy, XErrorEvent *ee);
31 static int xerrordummy(Display *dpy, XErrorEvent *ee);
32 static int xerrorstart(Display *dpy, XErrorEvent *ee);
33 static void zoom(const Arg *arg);
34 +static void focussame(const Arg *arg);
35 +static Window lastfocusedwin = None;
36
37 /* variables */
38 static const char broken[] = "broken";
39 @@ -786,6 +788,59 @@ expose(XEvent *e)
40 drawbar(m);
41 }
42
43 +void
44 +focussame(const Arg *arg) {
45 + Client *c;
46 + XClassHint ch = { NULL, NULL };
47 + char *class_name = NULL;
48 + int direction = arg->i;
49 +
50 + if (!selmon->sel)
51 + return;
52 +
53 + if (!XGetClassHint(dpy, selmon->sel->win, &ch))
54 + return;
55 + class_name = ch.res_class;
56 +
57 + Client *clients[32];
58 + int num_clients = 0;
59 + for (c = selmon->clients; c && num_clients < 32; c = c->next) {
60 + if (c->tags & selmon->tagset[selmon->seltags] && XGetClassHint(…
61 + if (strcmp(class_name, ch.res_class) == 0)
62 + clients[num_clients++] = c;
63 + XFree(ch.res_class);
64 + XFree(ch.res_name);
65 + }
66 + }
67 +
68 + Client *target_client = NULL;
69 + if (direction == +1) {
70 + for (int i = 0; i < num_clients; ++i) {
71 + if (clients[i]->win == lastfocusedwin) {
72 + target_client = clients[(i + 1) % num_clients];
73 + break;
74 + }
75 + }
76 + if (!target_client)
77 + target_client = clients[0];
78 + } else if (direction == -1) {
79 + for (int i = 0; i < num_clients; ++i) {
80 + if (clients[i]->win == lastfocusedwin) {
81 + target_client = clients[(i - 1 + num_clients) % num_cli…
82 + break;
83 + }
84 + }
85 + if (!target_client)
86 + target_client = clients[num_clients - 1];
87 + }
88 +
89 + if (target_client) {
90 + focus(target_client);
91 + restack(selmon);
92 + lastfocusedwin = target_client->win;
93 + }
94 +}
95 +
96 void
97 focus(Client *c)
98 {
99 --
100 2.45.2
101
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.