1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
diff -up a/config.def.h b/config.def.h
--- a/config.def.h 2014-06-23 18:04:29.536917000 +0200
+++ b/config.def.h 2014-06-24 08:15:51.857173332 +0200
@@ -74,6 +74,10 @@ static Key keys[] = {
{ MODKEY, XK_period, focusmon, {.i = +1 } },
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
+ { MODKEY, XK_Left, viewtoleft, {0} },
+ { MODKEY, XK_Right, viewtoright, {0} },
+ { MODKEY|ShiftMask, XK_Left, tagtoleft, {0} },
+ { MODKEY|ShiftMask, XK_Right, tagtoright, {0} },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
TAGKEYS( XK_3, 2)
diff -up a/dwm.1 b/dwm.1
--- a/dwm.1 2014-06-23 18:04:29.532917821 +0200
+++ b/dwm.1 2014-06-23 21:52:54.095867809 +0200
@@ -71,6 +71,18 @@ Send focused window to previous screen,
.B Mod1\-Shift\-.
Send focused window to next screen, if any.
.TP
+.B Mod1\-Right
+Focus tag on the right, if any.
+.TP
+.B Mod1\-Left
+Focus tag on the left, if any.
+.TP
+.B Mod1\-Shift\-Right
+Send focused window to tag on the right, if any.
+.TP
+.B Mod1\-Shift\-Left
+Send focused window to tag on the left, if any.
+.TP
.B Mod1\-b
Toggles bar on and off.
.TP
diff -up a/dwm.c b/dwm.c
--- a/dwm.c 2014-06-23 18:04:29.532917821 +0200
+++ b/dwm.c 2014-06-24 08:17:40.921714154 +0200
@@ -226,6 +226,8 @@ static void sigchld(int unused);
static void spawn(const Arg *arg);
static void tag(const Arg *arg);
static void tagmon(const Arg *arg);
+static void tagtoleft(const Arg *arg);
+static void tagtoright(const Arg *arg);
static void tile(Monitor *);
static void togglebar(const Arg *arg);
static void togglefloating(const Arg *arg);
@@ -245,6 +247,8 @@ static void updatewindowtype(Client *c);
static void updatewindowtype(Client *c);
static void updatewmhints(Client *c);
static void view(const Arg *arg);
+static void viewtoleft(const Arg *arg);
+static void viewtoright(const Arg *arg);
static Client *wintoclient(Window w);
static Monitor *wintomon(Window w);
static int xerror(Display *dpy, XErrorEvent *ee);
@@ -1690,6 +1694,28 @@ tagmon(const Arg *arg) {
sendmon(selmon->sel, dirtomon(arg->i));
}
+void
+tagtoleft(const Arg *arg) {
+ if(selmon->sel != NULL
+ && __builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1
+ && selmon->tagset[selmon->seltags] > 1) {
+ selmon->sel->tags >>= 1;
+ focus(NULL);
+ arrange(selmon);
+ }
+}
+
+void
+tagtoright(const Arg *arg) {
+ if(selmon->sel != NULL
+ && __builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1
+ && selmon->tagset[selmon->seltags] & (TAGMASK >> 1)) {
+ selmon->sel->tags <<= 1;
+ focus(NULL);
+ arrange(selmon);
+ }
+}
+
void
tile(Monitor *m)
{
@@ -2052,6 +2078,28 @@ view(const Arg *arg) {
arrange(selmon);
}
+void
+viewtoleft(const Arg *arg) {
+ if(__builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1
+ && selmon->tagset[selmon->seltags] > 1) {
+ selmon->seltags ^= 1; /* toggle sel tagset */
+ selmon->tagset[selmon->seltags] = selmon->tagset[selmon->seltags ^ 1] >> 1;
+ focus(NULL);
+ arrange(selmon);
+ }
+}
+
+void
+viewtoright(const Arg *arg) {
+ if(__builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1
+ && selmon->tagset[selmon->seltags] & (TAGMASK >> 1)) {
+ selmon->seltags ^= 1; /* toggle sel tagset */
+ selmon->tagset[selmon->seltags] = selmon->tagset[selmon->seltags ^ 1] << 1;
+ focus(NULL);
+ arrange(selmon);
+ }
+}
+
Client *
wintoclient(Window w)
{
|