tmade tag/view/toggle{tag,view} work on pointer to tags-array, there was the ne… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 10bc0ce912eb99fec49d954c80d92e04429ed0ee | |
parent e8792d95a12c85f9e660e192cd2c6260a01a3c5e | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Thu, 16 Aug 2007 17:55:55 +0200 | |
made tag/view/toggle{tag,view} work on pointer to tags-array, there was the nee… | |
Diffstat: | |
M config.arg.h | 78 ++++++++++++++++-------------… | |
M config.default.h | 78 ++++++++++++++++-------------… | |
M dwm.h | 3 ++- | |
M event.c | 20 ++++++++------------ | |
M layout.c | 34 +++++++++++++++++++----------… | |
M tag.c | 26 ++++++++++++++++++-------- | |
6 files changed, 127 insertions(+), 112 deletions(-) | |
--- | |
diff --git a/config.arg.h b/config.arg.h | |
t@@ -37,7 +37,7 @@ static Layout layout[] = { \ | |
/* key definitions */ | |
#define MODKEY Mod1Mask | |
#define KEYS \ | |
-static Key key[] = { \ | |
+Key key[] = { \ | |
/* modifier key function … | |
{ MODKEY, XK_p, spawn, \ | |
"exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf … | |
t@@ -46,8 +46,8 @@ static Key key[] = { \ | |
"exec urxvtcd -tr -bg '#111' -fg '#eee' -cr '#eee' +sb -fn '"F… | |
{ MODKEY, XK_space, setlayout, NU… | |
{ MODKEY, XK_b, togglebar, … | |
- { MODKEY, XK_j, focusclient, … | |
- { MODKEY, XK_k, focusclient, … | |
+ { MODKEY, XK_j, focusnext, … | |
+ { MODKEY, XK_k, focusprev, … | |
{ MODKEY, XK_h, addtomwfact, … | |
{ MODKEY, XK_l, addtomwfact, … | |
{ MODKEY, XK_m, togglemax, … | |
t@@ -55,42 +55,42 @@ static Key key[] = { \ | |
{ MODKEY|ShiftMask, XK_space, togglefloating, … | |
{ MODKEY|ShiftMask, XK_c, killclient, … | |
{ MODKEY, XK_0, view, … | |
- { MODKEY, XK_1, view, … | |
- { MODKEY, XK_2, view, … | |
- { MODKEY, XK_3, view, … | |
- { MODKEY, XK_4, view, … | |
- { MODKEY, XK_5, view, … | |
- { MODKEY, XK_6, view, … | |
- { MODKEY, XK_7, view, … | |
- { MODKEY, XK_8, view, … | |
- { MODKEY, XK_9, view, … | |
- { MODKEY|ControlMask, XK_1, toggleview, … | |
- { MODKEY|ControlMask, XK_2, toggleview, … | |
- { MODKEY|ControlMask, XK_3, toggleview, … | |
- { MODKEY|ControlMask, XK_4, toggleview, … | |
- { MODKEY|ControlMask, XK_5, toggleview, … | |
- { MODKEY|ControlMask, XK_6, toggleview, … | |
- { MODKEY|ControlMask, XK_7, toggleview, … | |
- { MODKEY|ControlMask, XK_8, toggleview, … | |
- { MODKEY|ControlMask, XK_9, toggleview, … | |
+ { MODKEY, XK_1, view, … | |
+ { MODKEY, XK_2, view, … | |
+ { MODKEY, XK_3, view, … | |
+ { MODKEY, XK_4, view, … | |
+ { MODKEY, XK_5, view, … | |
+ { MODKEY, XK_6, view, … | |
+ { MODKEY, XK_7, view, … | |
+ { MODKEY, XK_8, view, … | |
+ { MODKEY, XK_9, view, … | |
+ { MODKEY|ControlMask, XK_1, toggleview, … | |
+ { MODKEY|ControlMask, XK_2, toggleview, … | |
+ { MODKEY|ControlMask, XK_3, toggleview, … | |
+ { MODKEY|ControlMask, XK_4, toggleview, … | |
+ { MODKEY|ControlMask, XK_5, toggleview, … | |
+ { MODKEY|ControlMask, XK_6, toggleview, … | |
+ { MODKEY|ControlMask, XK_7, toggleview, … | |
+ { MODKEY|ControlMask, XK_8, toggleview, … | |
+ { MODKEY|ControlMask, XK_9, toggleview, … | |
{ MODKEY|ShiftMask, XK_0, tag, … | |
- { MODKEY|ShiftMask, XK_1, tag, … | |
- { MODKEY|ShiftMask, XK_2, tag, … | |
- { MODKEY|ShiftMask, XK_3, tag, … | |
- { MODKEY|ShiftMask, XK_4, tag, … | |
- { MODKEY|ShiftMask, XK_5, tag, … | |
- { MODKEY|ShiftMask, XK_6, tag, … | |
- { MODKEY|ShiftMask, XK_7, tag, … | |
- { MODKEY|ShiftMask, XK_8, tag, … | |
- { MODKEY|ShiftMask, XK_9, tag, … | |
- { MODKEY|ControlMask|ShiftMask, XK_1, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_2, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_3, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_4, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_5, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_6, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_7, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_8, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_9, toggletag,… | |
+ { MODKEY|ShiftMask, XK_1, tag, … | |
+ { MODKEY|ShiftMask, XK_2, tag, … | |
+ { MODKEY|ShiftMask, XK_3, tag, … | |
+ { MODKEY|ShiftMask, XK_4, tag, … | |
+ { MODKEY|ShiftMask, XK_5, tag, … | |
+ { MODKEY|ShiftMask, XK_6, tag, … | |
+ { MODKEY|ShiftMask, XK_7, tag, … | |
+ { MODKEY|ShiftMask, XK_8, tag, … | |
+ { MODKEY|ShiftMask, XK_9, tag, … | |
+ { MODKEY|ControlMask|ShiftMask, XK_1, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_2, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_3, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_4, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_5, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_6, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_7, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_8, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_9, toggletag,… | |
{ MODKEY|ShiftMask, XK_q, quit, … | |
}; | |
diff --git a/config.default.h b/config.default.h | |
t@@ -38,14 +38,14 @@ static Layout layout[] = { \ | |
/* key definitions */ | |
#define MODKEY Mod1Mask | |
#define KEYS \ | |
-static Key key[] = { \ | |
+Key key[] = { \ | |
/* modifier key function … | |
{ MODKEY|ShiftMask, XK_Return, spawn, … | |
{ MODKEY, XK_p, spawn, … | |
{ MODKEY, XK_space, setlayout, NU… | |
{ MODKEY, XK_b, togglebar, … | |
- { MODKEY, XK_j, focusclient, … | |
- { MODKEY, XK_k, focusclient, … | |
+ { MODKEY, XK_j, focusnext, … | |
+ { MODKEY, XK_k, focusprev, … | |
{ MODKEY, XK_h, addtomwfact, … | |
{ MODKEY, XK_l, addtomwfact, … | |
{ MODKEY, XK_m, togglemax, … | |
t@@ -53,42 +53,42 @@ static Key key[] = { \ | |
{ MODKEY|ShiftMask, XK_space, togglefloating, … | |
{ MODKEY|ShiftMask, XK_c, killclient, … | |
{ MODKEY, XK_0, view, … | |
- { MODKEY, XK_1, view, … | |
- { MODKEY, XK_2, view, … | |
- { MODKEY, XK_3, view, … | |
- { MODKEY, XK_4, view, … | |
- { MODKEY, XK_5, view, … | |
- { MODKEY, XK_6, view, … | |
- { MODKEY, XK_7, view, … | |
- { MODKEY, XK_8, view, … | |
- { MODKEY, XK_9, view, … | |
- { MODKEY|ControlMask, XK_1, toggleview, … | |
- { MODKEY|ControlMask, XK_2, toggleview, … | |
- { MODKEY|ControlMask, XK_3, toggleview, … | |
- { MODKEY|ControlMask, XK_4, toggleview, … | |
- { MODKEY|ControlMask, XK_5, toggleview, … | |
- { MODKEY|ControlMask, XK_6, toggleview, … | |
- { MODKEY|ControlMask, XK_7, toggleview, … | |
- { MODKEY|ControlMask, XK_8, toggleview, … | |
- { MODKEY|ControlMask, XK_9, toggleview, … | |
+ { MODKEY, XK_1, view, … | |
+ { MODKEY, XK_2, view, … | |
+ { MODKEY, XK_3, view, … | |
+ { MODKEY, XK_4, view, … | |
+ { MODKEY, XK_5, view, … | |
+ { MODKEY, XK_6, view, … | |
+ { MODKEY, XK_7, view, … | |
+ { MODKEY, XK_8, view, … | |
+ { MODKEY, XK_9, view, … | |
+ { MODKEY|ControlMask, XK_1, toggleview, … | |
+ { MODKEY|ControlMask, XK_2, toggleview, … | |
+ { MODKEY|ControlMask, XK_3, toggleview, … | |
+ { MODKEY|ControlMask, XK_4, toggleview, … | |
+ { MODKEY|ControlMask, XK_5, toggleview, … | |
+ { MODKEY|ControlMask, XK_6, toggleview, … | |
+ { MODKEY|ControlMask, XK_7, toggleview, … | |
+ { MODKEY|ControlMask, XK_8, toggleview, … | |
+ { MODKEY|ControlMask, XK_9, toggleview, … | |
{ MODKEY|ShiftMask, XK_0, tag, … | |
- { MODKEY|ShiftMask, XK_1, tag, … | |
- { MODKEY|ShiftMask, XK_2, tag, … | |
- { MODKEY|ShiftMask, XK_3, tag, … | |
- { MODKEY|ShiftMask, XK_4, tag, … | |
- { MODKEY|ShiftMask, XK_5, tag, … | |
- { MODKEY|ShiftMask, XK_6, tag, … | |
- { MODKEY|ShiftMask, XK_7, tag, … | |
- { MODKEY|ShiftMask, XK_8, tag, … | |
- { MODKEY|ShiftMask, XK_9, tag, … | |
- { MODKEY|ControlMask|ShiftMask, XK_1, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_2, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_3, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_4, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_5, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_6, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_7, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_8, toggletag,… | |
- { MODKEY|ControlMask|ShiftMask, XK_9, toggletag,… | |
+ { MODKEY|ShiftMask, XK_1, tag, … | |
+ { MODKEY|ShiftMask, XK_2, tag, … | |
+ { MODKEY|ShiftMask, XK_3, tag, … | |
+ { MODKEY|ShiftMask, XK_4, tag, … | |
+ { MODKEY|ShiftMask, XK_5, tag, … | |
+ { MODKEY|ShiftMask, XK_6, tag, … | |
+ { MODKEY|ShiftMask, XK_7, tag, … | |
+ { MODKEY|ShiftMask, XK_8, tag, … | |
+ { MODKEY|ShiftMask, XK_9, tag, … | |
+ { MODKEY|ControlMask|ShiftMask, XK_1, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_2, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_3, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_4, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_5, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_6, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_7, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_8, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_9, toggletag,… | |
{ MODKEY|ShiftMask, XK_q, quit, … | |
}; | |
diff --git a/dwm.h b/dwm.h | |
t@@ -114,7 +114,8 @@ void grabkeys(void); /* grab all ke… | |
/* layout.c */ | |
void arrange(void); /* arranges all windows depending o… | |
-void focusclient(const char *arg); /* focuses next(1)/previous(-1) visi… | |
+void focusnext(const char *arg); /* focuses next visible client */ | |
+void focusprev(const char *arg); /* focuses prev visible client */ | |
const char *getsymbol(void); /* returns symbol of enabled layou… | |
Bool isfloating(void); /* returns True if floating layo… | |
Bool isarrange(void (*func)()); /* returns True if func is the … | |
diff --git a/event.c b/event.c | |
t@@ -1,6 +1,5 @@ | |
/* See LICENSE file for copyright and license details. */ | |
#include "dwm.h" | |
-#include <stdio.h> | |
#include <stdlib.h> | |
#include <X11/keysym.h> | |
#include <X11/Xatom.h> | |
t@@ -15,8 +14,6 @@ typedef struct { | |
const char *arg; | |
} Key; | |
-KEYS | |
- | |
#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) | |
#define MOUSEMASK (BUTTONMASK | PointerMotionMask) | |
t@@ -112,29 +109,26 @@ resizemouse(Client *c) { | |
static void | |
buttonpress(XEvent *e) { | |
- static char buf[32]; | |
unsigned int i, x; | |
Client *c; | |
XButtonPressedEvent *ev = &e->xbutton; | |
- buf[0] = 0; | |
if(barwin == ev->window) { | |
x = 0; | |
for(i = 0; i < ntags; i++) { | |
x += textw(tags[i]); | |
if(ev->x < x) { | |
- snprintf(buf, sizeof buf, "%d", i); | |
if(ev->button == Button1) { | |
if(ev->state & MODKEY) | |
- tag(buf); | |
+ tag(tags[i]); | |
else | |
- view(buf); | |
+ view(tags[i]); | |
} | |
else if(ev->button == Button3) { | |
if(ev->state & MODKEY) | |
- toggletag(buf); | |
+ toggletag(tags[i]); | |
else | |
- toggleview(buf); | |
+ toggleview(tags[i]); | |
} | |
return; | |
} | |
t@@ -257,7 +251,8 @@ expose(XEvent *e) { | |
static void | |
keypress(XEvent *e) { | |
- static unsigned int len = sizeof key / sizeof key[0]; | |
+ KEYS | |
+ unsigned int len = sizeof key / sizeof key[0]; | |
unsigned int i; | |
KeySym keysym; | |
XKeyEvent *ev = &e->xkey; | |
t@@ -362,7 +357,8 @@ void (*handler[LASTEvent]) (XEvent *) = { | |
void | |
grabkeys(void) { | |
- static unsigned int len = sizeof key / sizeof key[0]; | |
+ KEYS | |
+ unsigned int len = sizeof key / sizeof key[0]; | |
unsigned int i; | |
KeyCode code; | |
diff --git a/layout.c b/layout.c | |
t@@ -42,22 +42,30 @@ arrange(void) { | |
} | |
void | |
-focusclient(const char *arg) { | |
+focusnext(const char *arg) { | |
Client *c; | |
- | |
- if(!sel || !arg) | |
+ | |
+ if(!sel) | |
return; | |
- if(atoi(arg) < 0) { | |
- for(c = sel->prev; c && !isvisible(c); c = c->prev); | |
- if(!c) { | |
- for(c = clients; c && c->next; c = c->next); | |
- for(; c && !isvisible(c); c = c->prev); | |
- } | |
+ for(c = sel->next; c && !isvisible(c); c = c->next); | |
+ if(!c) | |
+ for(c = clients; c && !isvisible(c); c = c->next); | |
+ if(c) { | |
+ focus(c); | |
+ restack(); | |
} | |
- else { | |
- for(c = sel->next; c && !isvisible(c); c = c->next); | |
- if(!c) | |
- for(c = clients; c && !isvisible(c); c = c->next); | |
+} | |
+ | |
+void | |
+focusprev(const char *arg) { | |
+ Client *c; | |
+ | |
+ if(!sel) | |
+ return; | |
+ for(c = sel->prev; c && !isvisible(c); c = c->prev); | |
+ if(!c) { | |
+ for(c = clients; c && c->next; c = c->next); | |
+ for(; c && !isvisible(c); c = c->prev); | |
} | |
if(c) { | |
focus(c); | |
diff --git a/tag.c b/tag.c | |
t@@ -40,6 +40,16 @@ persistconfig(Client *c) { | |
PropModeReplace, (unsigned char *)prop, i); | |
} | |
+static unsigned int | |
+idxoftag(const char *tag) { | |
+ unsigned int i; | |
+ | |
+ for(i = 0; i < ntags; i++) | |
+ if(tags[i] == tag) | |
+ return i; | |
+ return 0; | |
+} | |
+ | |
/* extern */ | |
void | |
t@@ -135,13 +145,13 @@ settags(Client *c, Client *trans) { | |
void | |
tag(const char *arg) { | |
- int i; | |
+ unsigned int i; | |
if(!sel) | |
return; | |
for(i = 0; i < ntags; i++) | |
sel->tags[i] = arg == NULL; | |
- i = arg ? atoi(arg) : 0; | |
+ i = idxoftag(arg); | |
if(i >= 0 && i < ntags) | |
sel->tags[i] = True; | |
persistconfig(sel); | |
t@@ -162,11 +172,11 @@ togglefloating(const char *arg) { | |
void | |
toggletag(const char *arg) { | |
- int i, j; | |
+ unsigned int i, j; | |
if(!sel) | |
return; | |
- i = arg ? atoi(arg) : 0; | |
+ i = idxoftag(arg); | |
sel->tags[i] = !sel->tags[i]; | |
for(j = 0; j < ntags && !sel->tags[j]; j++); | |
if(j == ntags) | |
t@@ -177,9 +187,9 @@ toggletag(const char *arg) { | |
void | |
toggleview(const char *arg) { | |
- int i, j; | |
+ unsigned int i, j; | |
- i = arg ? atoi(arg) : 0; | |
+ i = idxoftag(arg); | |
seltag[i] = !seltag[i]; | |
for(j = 0; j < ntags && !seltag[j]; j++); | |
if(j == ntags) | |
t@@ -189,11 +199,11 @@ toggleview(const char *arg) { | |
void | |
view(const char *arg) { | |
- int i; | |
+ unsigned int i; | |
for(i = 0; i < ntags; i++) | |
seltag[i] = arg == NULL; | |
- i = arg ? atoi(arg) : 0; | |
+ i = idxoftag(arg); | |
if(i >= 0 && i < ntags) | |
seltag[i] = True; | |
arrange(); |