masterstacker: minor refactoring

master
bakkeby 6 months ago
parent 3062901c87
commit d439a88d19

@ -1,14 +1,14 @@
From 5254b2ecca39fb866fed50308acd4dc21d2b2d83 Mon Sep 17 00:00:00 2001
From b21bc2db75d2dce254a6740fcca276eb7d815553 Mon Sep 17 00:00:00 2001
From: Bakkeby <bakkeby@gmail.com>
Date: Mon, 12 Jun 2023 11:48:51 +0200
Subject: [PATCH] Master stacker patch
---
config.def.h | 16 +++-
config.def.h | 16 ++-
dwm.c | 4 +
stacker.c | 259 +++++++++++++++++++++++++++++++++++++++++++++++++++
stacker.h | 34 +++++++
4 files changed, 311 insertions(+), 2 deletions(-)
stacker.c | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++
stacker.h | 35 +++++++
4 files changed, 322 insertions(+), 2 deletions(-)
create mode 100644 stacker.c
create mode 100644 stacker.h
@ -85,10 +85,10 @@ index e5efb6a..90e6ead 100644
for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext);
diff --git a/stacker.c b/stacker.c
new file mode 100644
index 0000000..3547cc0
index 0000000..9019345
--- /dev/null
+++ b/stacker.c
@@ -0,0 +1,259 @@
@@ -0,0 +1,269 @@
+void
+attachabove(Client *c, Client *target)
+{
@ -181,6 +181,28 @@ index 0000000..3547cc0
+}
+
+Client *
+inctiled(Client *c, int n)
+{
+ Client *f;
+
+ if (!c)
+ return NULL;
+
+ if (n > 0) {
+ f = nexttiled(c->next);
+ if (!f) {
+ f = nexttiled(c->mon->clients);
+ }
+ } else {
+ f = prevtiled(c);
+ if (!f) {
+ f = lasttiled(c->mon->clients);
+ }
+ }
+ return f;
+}
+
+Client *
+prevtiled(Client *c)
+{
+ Client *p, *r;
@ -240,7 +262,10 @@ index 0000000..3547cc0
+ if (!m->clients)
+ return;
+
+ stackposclient(arg, &c);
+ c = stackposclient(arg);
+
+ if (!c)
+ return;
+
+ if (c == m->sel) {
+ if (arg->i != PREVSEL) {
@ -267,7 +292,10 @@ index 0000000..3547cc0
+ return;
+ }
+
+ stackposclient(arg, &c);
+ c = stackposclient(arg);
+
+ if (!c)
+ return;
+
+ if (c == sel)
+ return;
@ -287,7 +315,10 @@ index 0000000..3547cc0
+ if (!m->clients)
+ return;
+
+ stackposclient(arg, &c);
+ c = stackposclient(arg);
+
+ if (!c)
+ return;
+
+ if (c == sel)
+ return;
@ -302,58 +333,37 @@ index 0000000..3547cc0
+ arrange(m);
+}
+
+void
+stackposclient(const Arg *arg, Client **f)
+Client *
+stackposclient(const Arg *arg)
+{
+ Monitor *m = selmon;
+
+ if (!m->clients)
+ return;
+ return NULL;
+
+ if (ISINC(arg)) {
+ if (GETINC(arg) > 0) {
+ *f = nexttiled(m->sel->next);
+ if (!*f) {
+ *f = nexttiled(m->clients);
+ }
+ } else {
+ *f = prevtiled(m->sel);
+ if (!*f) {
+ *f = lasttiled(m->clients);
+ }
+ }
+ return;
+ }
+ if (ISINC(arg))
+ return inctiled(m->sel, GETINC(arg));
+
+ if (ISMASTER(arg)) {
+ *f = nthmaster(m->clients, GETMASTER(arg), 1);
+ return;
+ }
+ if (ISMASTER(arg))
+ return nthmaster(m->clients, GETMASTER(arg), 1);
+
+ if (ISSTACK(arg)) {
+ *f = nthstack(m->clients, GETSTACK(arg), 1);
+ return;
+ }
+ if (ISSTACK(arg))
+ return nthstack(m->clients, GETSTACK(arg), 1);
+
+ if (ISLAST(arg)) {
+ *f = lasttiled(m->clients);
+ return;
+ }
+ if (ISLAST(arg))
+ return lasttiled(m->clients);
+
+ if (ISPREVSEL(arg)) {
+ *f = prevsel();
+ return;
+ }
+ if (ISPREVSEL(arg))
+ return prevsel();
+
+ *f = nthtiled(m->clients, arg->i, 1);
+ return;
+ return nthtiled(m->clients, arg->i, 1);
+}
diff --git a/stacker.h b/stacker.h
new file mode 100644
index 0000000..cb97261
index 0000000..0099db0
--- /dev/null
+++ b/stacker.h
@@ -0,0 +1,34 @@
@@ -0,0 +1,35 @@
+#define INC(X) ((X) + 2000)
+#define MASTER(X) ((X) + 4000)
+#define STACK(X) ((X) + 5000)
@ -380,6 +390,7 @@ index 0000000..cb97261
+static Client *nthmaster(Client *c, int n, int reduce);
+static Client *nthstack(Client *c, int n, int reduce);
+static Client *nthtiled(Client *c, int n, int reduce);
+static Client *inctiled(Client *c, int n);
+static Client *prevtiled(Client *c);
+static Client *prevsel(void);
+static void swap(Client *a, Client *b);
@ -387,7 +398,7 @@ index 0000000..cb97261
+static void stackfocus(const Arg *arg);
+static void stackpush(const Arg *arg);
+static void stackswap(const Arg *arg);
+static void stackposclient(const Arg *arg, Client **f);
+static Client *stackposclient(const Arg *arg);
--
2.19.1

Loading…
Cancel
Save