about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--dwm.h1
-rw-r--r--event.c4
-rw-r--r--tag.c18
3 files changed, 23 insertions, 0 deletions
diff --git a/dwm.h b/dwm.h
index 999f027..d54fdc0 100644
--- a/dwm.h
+++ b/dwm.h
@@ -144,6 +144,7 @@ void tag(const char *arg);		/* tags sel with arg's index */
 void toggletag(const char *arg);	/* toggles sel tags with arg's index */
 void toggleview(const char *arg);	/* toggles the tag with arg's index (in)visible */
 void view(const char *arg);		/* views the tag with arg's index */
+void shiftview(const char *arg);        /* views next(1)/previous(-1) tag */
 
 /* util.c */
 void *emallocz(unsigned int size);	/* allocates zero-initialized memory, exits on error */
diff --git a/event.c b/event.c
index 3f06ea7..ac96df1 100644
--- a/event.c
+++ b/event.c
@@ -135,6 +135,10 @@ buttonpress(XEvent *e) {
 					else
 						toggleview(buf);
 				}
+				else if(ev->button == Button4)
+					shiftview("-1");
+				else if(ev->button == Button5)
+					shiftview("1");
 				return;
 			}
 		}
diff --git a/tag.c b/tag.c
index c44954b..19c63b1 100644
--- a/tag.c
+++ b/tag.c
@@ -99,6 +99,24 @@ settags(Client *c, Client *trans) {
 			c->tags[i] = seltag[i];
 }
 
+void 
+shiftview(const char *arg) {
+	int i, j;
+
+	for(i = 0; !seltag[i]; i++);
+	for(j = i + 1; j < ntags && !seltag[j]; j++);
+	if(j < ntags)
+		return; /* more then one tag selected */
+	seltag[i] = False;
+	i += arg ? atoi(arg) : 0;
+	if(i < 0)
+		i = ntags - 1;
+	else if(i >= ntags)
+		i = 0;
+	seltag[i] = True;
+	lt->arrange();
+}
+
 void
 tag(const char *arg) {
 	int i;