aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client.c8
-rw-r--r--draw.c2
-rw-r--r--dwm.18
-rw-r--r--dwm.h3
-rw-r--r--event.c4
-rw-r--r--tag.c27
6 files changed, 42 insertions, 10 deletions
diff --git a/client.c b/client.c
index 69189de..166e979 100644
--- a/client.c
+++ b/client.c
@@ -66,8 +66,8 @@ focusnext(Arg *arg)
if(!sel)
return;
- if(!(c = getnext(sel->next)))
- c = getnext(clients);
+ if(!(c = getnext(sel->next, tsel)))
+ c = getnext(clients, tsel);
if(c) {
higher(c);
c->revert = sel;
@@ -410,8 +410,8 @@ zoom(Arg *arg)
if(!sel)
return;
- if(sel == getnext(clients) && sel->next) {
- if((c = getnext(sel->next)))
+ if(sel == getnext(clients, tsel) && sel->next) {
+ if((c = getnext(sel->next, tsel)))
sel = c;
}
diff --git a/draw.c b/draw.c
index b8cfffd..de4bdb0 100644
--- a/draw.c
+++ b/draw.c
@@ -97,7 +97,7 @@ drawall()
{
Client *c;
- for(c = clients; c; c = getnext(c->next))
+ for(c = clients; c; c = getnext(c->next, tsel))
drawtitle(c);
drawstatus();
}
diff --git a/dwm.1 b/dwm.1
index e1379ba..96fa760 100644
--- a/dwm.1
+++ b/dwm.1
@@ -93,6 +93,14 @@ Append
tag to current
.B window
.TP
+.B Control-Shift-[0..n]
+Replace current
+.B window
+of
+.B nth
+tag with current tag.
+.B window
+.TP
.B Control-Button1
Zooms the clicked
.B window
diff --git a/dwm.h b/dwm.h
index de88527..0d37e99 100644
--- a/dwm.h
+++ b/dwm.h
@@ -145,7 +145,8 @@ extern int xerror(Display *dsply, XErrorEvent *ee);
extern void appendtag(Arg *arg);
extern void dofloat(Arg *arg);
extern void dotile(Arg *arg);
-extern Client *getnext(Client *c);
+extern Client *getnext(Client *c, unsigned int t);
+extern void heretag(Arg *arg);
extern void replacetag(Arg *arg);
extern void settags(Client *c);
extern void view(Arg *arg);
diff --git a/event.c b/event.c
index 0fce36b..4b8c07b 100644
--- a/event.c
+++ b/event.c
@@ -35,6 +35,10 @@ Key key[] = {
{ Mod1Mask, XK_m, maximize, { 0 } },
{ Mod1Mask, XK_space, dotile, { 0 } },
{ Mod1Mask, XK_Return, zoom, { 0 } },
+ { ControlMask|ShiftMask,XK_0, heretag, { .i = Tscratch } },
+ { ControlMask|ShiftMask,XK_1, heretag, { .i = Tdev } },
+ { ControlMask|ShiftMask,XK_2, heretag, { .i = Twww } },
+ { ControlMask|ShiftMask,XK_3, heretag, { .i = Twork } },
{ Mod1Mask|ShiftMask, XK_0, replacetag, { .i = Tscratch } },
{ Mod1Mask|ShiftMask, XK_1, replacetag, { .i = Tdev } },
{ Mod1Mask|ShiftMask, XK_2, replacetag, { .i = Twww } },
diff --git a/tag.c b/tag.c
index 5da5711..3837fbd 100644
--- a/tag.c
+++ b/tag.c
@@ -49,7 +49,7 @@ dofloat(Arg *arg)
ban(c);
}
if(sel && !sel->tags[tsel]) {
- if((sel = getnext(clients))) {
+ if((sel = getnext(clients, tsel))) {
higher(sel);
focus(sel);
}
@@ -106,7 +106,7 @@ dotile(Arg *arg)
ban(c);
}
if(!sel || (sel && !sel->tags[tsel])) {
- if((sel = getnext(clients))) {
+ if((sel = getnext(clients, tsel))) {
higher(sel);
focus(sel);
}
@@ -115,13 +115,32 @@ dotile(Arg *arg)
}
Client *
-getnext(Client *c)
+getnext(Client *c, unsigned int t)
{
- for(; c && !c->tags[tsel]; c = c->next);
+ for(; c && !c->tags[t]; c = c->next);
return c;
}
void
+heretag(Arg *arg)
+{
+ int i;
+ Client *c;
+
+ if(arg->i == tsel)
+ return;
+
+ if(!(c = getnext(clients, arg->i)))
+ return;
+
+ for(i = 0; i < TLast; i++)
+ c->tags[i] = NULL;
+ c->tags[tsel] = tags[tsel];
+ arrange(NULL);
+ focus(c);
+}
+
+void
replacetag(Arg *arg)
{
int i;