dwm-transfer-6.2.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
dwm-transfer-6.2.diff (2691B)
---
1 From 57500f9154a3aa99f38f98d552915b8570b7cfdf Mon Sep 17 00:00:00 2001
2 From: Miles Alan <m@milesalan.com>
3 Date: Sat, 25 Jan 2020 22:47:38 -0600
4 Subject: [PATCH] Add transfer function which transfers tiled client between
5 the stack & master. Adjusts the nmaster variable accordingly (e.g. if moving
6 to master, nmaster++ and if moving to stack nmaster--).
7
8 Default keybinding added to config.def.h is Mod+x
9 ---
10 config.def.h | 1 +
11 dwm.c | 34 ++++++++++++++++++++++++++++++++++
12 2 files changed, 35 insertions(+)
13
14 diff --git a/config.def.h b/config.def.h
15 index 1c0b587..67ec8ae 100644
16 --- a/config.def.h
17 +++ b/config.def.h
18 @@ -70,6 +70,7 @@ static Key keys[] = {
19 { MODKEY, XK_d, incnmaster, {.i = -1 } },
20 { MODKEY, XK_h, setmfact, {.f = -0.05} },
21 { MODKEY, XK_l, setmfact, {.f = +0.05} },
22 + { MODKEY, XK_x, transfer, {0} },
23 { MODKEY, XK_Return, zoom, {0} },
24 { MODKEY, XK_Tab, view, {0} },
25 { MODKEY|ShiftMask, XK_c, killclient, {0} },
26 diff --git a/dwm.c b/dwm.c
27 index 4465af1..ada794b 100644
28 --- a/dwm.c
29 +++ b/dwm.c
30 @@ -213,6 +213,7 @@ static void togglebar(const Arg *arg);
31 static void togglefloating(const Arg *arg);
32 static void toggletag(const Arg *arg);
33 static void toggleview(const Arg *arg);
34 +static void transfer(const Arg *arg);
35 static void unfocus(Client *c, int setfocus);
36 static void unmanage(Client *c, int destroyed);
37 static void unmapnotify(XEvent *e);
38 @@ -2147,3 +2148,36 @@ main(int argc, char *argv[])
39 XCloseDisplay(dpy);
40 return EXIT_SUCCESS;
41 }
42 +
43 +void
44 +transfer(const Arg *arg) {
45 + Client *c, *mtail = selmon->clients, *stail = NULL, *insertafter;
46 + int transfertostack = 0, i, nmasterclients;
47 +
48 + for (i = 0, c = selmon->clients; c; c = c->next) {
49 + if (!ISVISIBLE(c) || c->isfloating) continue;
50 + if (selmon->sel == c) { transfertostack = i < selmon->nmaster && selmon->nmaster != 0; }
51 + if (i < selmon->nmaster) { nmasterclients++; mtail = c; }
52 + stail = c;
53 + i++;
54 + }
55 + if (!selmon->sel || selmon->sel->isfloating || i == 0) {
56 + return;
57 + } else if (transfertostack) {
58 + selmon->nmaster = MIN(i, selmon->nmaster) - 1;
59 + insertafter = stail;
60 + } else {
61 + selmon->nmaster = selmon->nmaster + 1;
62 + insertafter = mtail;
63 + }
64 + if (insertafter != selmon->sel) {
65 + detach(selmon->sel);
66 + if (selmon->nmaster == 1 && !transfertostack) {
67 + attach(selmon->sel); // Head prepend case
68 + } else {
69 + selmon->sel->next = insertafter->next;
70 + insertafter->next = selmon->sel;
71 + }
72 + }
73 + arrange(selmon);
74 +}
75 --
76 2.23.1
77