mirror of https://github.com/bakkeby/patches
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.2 KiB
Diff
72 lines
2.2 KiB
Diff
4 years ago
|
From 6611bb29f0623c6cc7e0517701df6e3bd50662b9 Mon Sep 17 00:00:00 2001
|
||
|
From: bakkeby <bakkeby@gmail.com>
|
||
|
Date: Sun, 3 May 2020 15:55:08 +0200
|
||
|
Subject: [PATCH] This variant of the shiftview patch adds left and right
|
||
|
circular shift through tags, but skips tags where there are no clients.
|
||
|
|
||
|
---
|
||
|
config.def.h | 2 ++
|
||
|
dwm.c | 26 ++++++++++++++++++++++++++
|
||
|
2 files changed, 28 insertions(+)
|
||
|
|
||
|
diff --git a/config.def.h b/config.def.h
|
||
|
index 1c0b587..ad3a5fd 100644
|
||
|
--- a/config.def.h
|
||
|
+++ b/config.def.h
|
||
|
@@ -72,6 +72,8 @@ static Key keys[] = {
|
||
|
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
||
|
{ MODKEY, XK_Return, zoom, {0} },
|
||
|
{ MODKEY, XK_Tab, view, {0} },
|
||
|
+ { MODKEY|ShiftMask, XK_Tab, shiftviewclients, { .i = +1 } },
|
||
|
+ { MODKEY|ShiftMask, XK_backslash, shiftviewclients, { .i = -1 } },
|
||
|
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
|
||
|
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
||
|
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
||
|
diff --git a/dwm.c b/dwm.c
|
||
|
index 4465af1..68ff8f7 100644
|
||
|
--- a/dwm.c
|
||
|
+++ b/dwm.c
|
||
|
@@ -203,6 +203,7 @@ static void setlayout(const Arg *arg);
|
||
|
static void setmfact(const Arg *arg);
|
||
|
static void setup(void);
|
||
|
static void seturgent(Client *c, int urg);
|
||
|
+static void shiftviewclients(const Arg *arg);
|
||
|
static void showhide(Client *c);
|
||
|
static void sigchld(int unused);
|
||
|
static void spawn(const Arg *arg);
|
||
|
@@ -1610,6 +1611,31 @@ seturgent(Client *c, int urg)
|
||
|
XFree(wmh);
|
||
|
}
|
||
|
|
||
|
+void
|
||
|
+shiftviewclients(const Arg *arg)
|
||
|
+{
|
||
|
+ Arg shifted;
|
||
|
+ Client *c;
|
||
|
+ unsigned int tagmask = 0;
|
||
|
+
|
||
|
+ for (c = selmon->clients; c; c = c->next)
|
||
|
+ tagmask = tagmask | c->tags;
|
||
|
+
|
||
|
+ shifted.ui = selmon->tagset[selmon->seltags];
|
||
|
+ if (arg->i > 0) // left circular shift
|
||
|
+ do {
|
||
|
+ shifted.ui = (shifted.ui << arg->i)
|
||
|
+ | (shifted.ui >> (LENGTH(tags) - arg->i));
|
||
|
+ } while (tagmask && !(shifted.ui & tagmask));
|
||
|
+ else // right circular shift
|
||
|
+ do {
|
||
|
+ shifted.ui = (shifted.ui >> (- arg->i)
|
||
|
+ | shifted.ui << (LENGTH(tags) + arg->i));
|
||
|
+ } while (tagmask && !(shifted.ui & tagmask));
|
||
|
+
|
||
|
+ view(&shifted);
|
||
|
+}
|
||
|
+
|
||
|
void
|
||
|
showhide(Client *c)
|
||
|
{
|
||
|
--
|
||
|
2.17.1
|
||
|
|