dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 10bc0ce912eb99fec49d954c80d92e04429ed0ee
parent e8792d95a12c85f9e660e192cd2c6260a01a3c5e
Author: Anselm R. Garbe <garbeam@gmail.com>
Date:   Thu, 16 Aug 2007 17:55:55 +0200

made tag/view/toggle{tag,view} work on pointer to tags-array, there was the need to define Key key[] not static to do this. split focusclient into focusnext/prev, fixed config.*.h's
Diffstat:
Mconfig.arg.h | 78+++++++++++++++++++++++++++++++++++++++---------------------------------------
Mconfig.default.h | 78+++++++++++++++++++++++++++++++++++++++---------------------------------------
Mdwm.h | 3++-
Mevent.c | 20++++++++------------
Mlayout.c | 34+++++++++++++++++++++-------------
Mtag.c | 26++++++++++++++++++--------
6 files changed, 127 insertions(+), 112 deletions(-)
diff --git a/config.arg.h b/config.arg.h
@@ -37,7 +37,7 @@ static Layout layout[] = { \
 /* key definitions */
 #define MODKEY            Mod1Mask
 #define KEYS \
-static Key key[] = { \
+Key key[] = { \
     /* modifier            key        function    argument */ \
     { MODKEY,            XK_p,        spawn, \
         "exe=`dmenu_path | dmenu -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"'" \
@@ -46,8 +46,8 @@ static Key key[] = { \
         "exec urxvtcd -tr -bg '#111' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" }, \
     { MODKEY,            XK_space,    setlayout,    NULL }, \
     { MODKEY,            XK_b,        togglebar,    NULL }, \
-    { MODKEY,            XK_j,        focusclient,    "1" }, \
-    { MODKEY,            XK_k,        focusclient,    "-1" }, \
+    { MODKEY,            XK_j,        focusnext,    NULL }, \
+    { MODKEY,            XK_k,        focusprev,    NULL }, \
     { MODKEY,            XK_h,        addtomwfact,    "-0.05" }, \
     { MODKEY,            XK_l,        addtomwfact,    "0.05" }, \
     { MODKEY,            XK_m,        togglemax,    NULL }, \
@@ -55,42 +55,42 @@ static Key key[] = { \
     { MODKEY|ShiftMask,        XK_space,    togglefloating,    NULL }, \
     { MODKEY|ShiftMask,        XK_c,        killclient,    NULL }, \
     { MODKEY,            XK_0,        view,        NULL }, \
-    { MODKEY,            XK_1,        view,        "0" }, \
-    { MODKEY,            XK_2,        view,        "1" }, \
-    { MODKEY,            XK_3,        view,        "2" }, \
-    { MODKEY,            XK_4,        view,        "3" }, \
-    { MODKEY,            XK_5,        view,        "4" }, \
-    { MODKEY,            XK_6,        view,        "5" }, \
-    { MODKEY,            XK_7,        view,        "6" }, \
-    { MODKEY,            XK_8,        view,        "7" }, \
-    { MODKEY,            XK_9,        view,        "8" }, \
-    { MODKEY|ControlMask,        XK_1,        toggleview,    "0" }, \
-    { MODKEY|ControlMask,        XK_2,        toggleview,    "1" }, \
-    { MODKEY|ControlMask,        XK_3,        toggleview,    "2" }, \
-    { MODKEY|ControlMask,        XK_4,        toggleview,    "3" }, \
-    { MODKEY|ControlMask,        XK_5,        toggleview,    "4" }, \
-    { MODKEY|ControlMask,        XK_6,        toggleview,    "5" }, \
-    { MODKEY|ControlMask,        XK_7,        toggleview,    "6" }, \
-    { MODKEY|ControlMask,        XK_8,        toggleview,    "7" }, \
-    { MODKEY|ControlMask,        XK_9,        toggleview,    "8" }, \
+    { MODKEY,            XK_1,        view,        tags[0] }, \
+    { MODKEY,            XK_2,        view,        tags[1] }, \
+    { MODKEY,            XK_3,        view,        tags[2] }, \
+    { MODKEY,            XK_4,        view,        tags[3] }, \
+    { MODKEY,            XK_5,        view,        tags[4] }, \
+    { MODKEY,            XK_6,        view,        tags[5] }, \
+    { MODKEY,            XK_7,        view,        tags[6] }, \
+    { MODKEY,            XK_8,        view,        tags[7] }, \
+    { MODKEY,            XK_9,        view,        tags[8] }, \
+    { MODKEY|ControlMask,        XK_1,        toggleview,    tags[0] }, \
+    { MODKEY|ControlMask,        XK_2,        toggleview,    tags[1] }, \
+    { MODKEY|ControlMask,        XK_3,        toggleview,    tags[2] }, \
+    { MODKEY|ControlMask,        XK_4,        toggleview,    tags[3] }, \
+    { MODKEY|ControlMask,        XK_5,        toggleview,    tags[4] }, \
+    { MODKEY|ControlMask,        XK_6,        toggleview,    tags[5] }, \
+    { MODKEY|ControlMask,        XK_7,        toggleview,    tags[6] }, \
+    { MODKEY|ControlMask,        XK_8,        toggleview,    tags[7] }, \
+    { MODKEY|ControlMask,        XK_9,        toggleview,    tags[8] }, \
     { MODKEY|ShiftMask,        XK_0,        tag,        NULL }, \
-    { MODKEY|ShiftMask,        XK_1,        tag,        "0" }, \
-    { MODKEY|ShiftMask,        XK_2,        tag,        "1" }, \
-    { MODKEY|ShiftMask,        XK_3,        tag,        "2" }, \
-    { MODKEY|ShiftMask,        XK_4,        tag,        "3" }, \
-    { MODKEY|ShiftMask,        XK_5,        tag,        "4" }, \
-    { MODKEY|ShiftMask,        XK_6,        tag,        "5" }, \
-    { MODKEY|ShiftMask,        XK_7,        tag,        "6" }, \
-    { MODKEY|ShiftMask,        XK_8,        tag,        "7" }, \
-    { MODKEY|ShiftMask,        XK_9,        tag,        "8" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_1,        toggletag,    "0" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_2,        toggletag,    "1" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_3,        toggletag,    "2" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_4,        toggletag,    "3" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_5,        toggletag,    "4" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_6,        toggletag,    "5" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_7,        toggletag,    "6" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_8,        toggletag,    "7" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_9,        toggletag,    "8" }, \
+    { MODKEY|ShiftMask,        XK_1,        tag,        tags[0] }, \
+    { MODKEY|ShiftMask,        XK_2,        tag,        tags[1] }, \
+    { MODKEY|ShiftMask,        XK_3,        tag,        tags[2] }, \
+    { MODKEY|ShiftMask,        XK_4,        tag,        tags[3] }, \
+    { MODKEY|ShiftMask,        XK_5,        tag,        tags[4] }, \
+    { MODKEY|ShiftMask,        XK_6,        tag,        tags[5] }, \
+    { MODKEY|ShiftMask,        XK_7,        tag,        tags[6] }, \
+    { MODKEY|ShiftMask,        XK_8,        tag,        tags[7] }, \
+    { MODKEY|ShiftMask,        XK_9,        tag,        tags[8] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_1,        toggletag,    tags[0] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_2,        toggletag,    tags[1] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_3,        toggletag,    tags[2] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_4,        toggletag,    tags[3] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_5,        toggletag,    tags[4] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_6,        toggletag,    tags[5] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_7,        toggletag,    tags[6] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_8,        toggletag,    tags[7] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_9,        toggletag,    tags[8] }, \
     { MODKEY|ShiftMask,        XK_q,        quit,        NULL }, \
 };
diff --git a/config.default.h b/config.default.h
@@ -38,14 +38,14 @@ static Layout layout[] = { \
 /* key definitions */
 #define MODKEY            Mod1Mask
 #define KEYS \
-static Key key[] = { \
+Key key[] = { \
     /* modifier            key        function    argument */ \
     { MODKEY|ShiftMask,        XK_Return,    spawn,        "exec xterm" }, \
     { MODKEY,            XK_p,        spawn,         "exe=`dmenu_path | dmenu` && exec $exe" }, \
     { MODKEY,            XK_space,    setlayout,    NULL }, \
     { MODKEY,            XK_b,        togglebar,    NULL }, \
-    { MODKEY,            XK_j,        focusclient,    "1" }, \
-    { MODKEY,            XK_k,        focusclient,    "-1" }, \
+    { MODKEY,            XK_j,        focusnext,    NULL }, \
+    { MODKEY,            XK_k,        focusprev,    NULL }, \
     { MODKEY,            XK_h,        addtomwfact,    "-0.05" }, \
     { MODKEY,            XK_l,        addtomwfact,    "0.05" }, \
     { MODKEY,            XK_m,        togglemax,    NULL }, \
@@ -53,42 +53,42 @@ static Key key[] = { \
     { MODKEY|ShiftMask,        XK_space,    togglefloating,    NULL }, \
     { MODKEY|ShiftMask,        XK_c,        killclient,    NULL }, \
     { MODKEY,            XK_0,        view,        NULL }, \
-    { MODKEY,            XK_1,        view,        "0" }, \
-    { MODKEY,            XK_2,        view,        "1" }, \
-    { MODKEY,            XK_3,        view,        "2" }, \
-    { MODKEY,            XK_4,        view,        "3" }, \
-    { MODKEY,            XK_5,        view,        "4" }, \
-    { MODKEY,            XK_6,        view,        "5" }, \
-    { MODKEY,            XK_7,        view,        "6" }, \
-    { MODKEY,            XK_8,        view,        "7" }, \
-    { MODKEY,            XK_9,        view,        "8" }, \
-    { MODKEY|ControlMask,        XK_1,        toggleview,    "0" }, \
-    { MODKEY|ControlMask,        XK_2,        toggleview,    "1" }, \
-    { MODKEY|ControlMask,        XK_3,        toggleview,    "2" }, \
-    { MODKEY|ControlMask,        XK_4,        toggleview,    "3" }, \
-    { MODKEY|ControlMask,        XK_5,        toggleview,    "4" }, \
-    { MODKEY|ControlMask,        XK_6,        toggleview,    "5" }, \
-    { MODKEY|ControlMask,        XK_7,        toggleview,    "6" }, \
-    { MODKEY|ControlMask,        XK_8,        toggleview,    "7" }, \
-    { MODKEY|ControlMask,        XK_9,        toggleview,    "8" }, \
+    { MODKEY,            XK_1,        view,        tags[0] }, \
+    { MODKEY,            XK_2,        view,        tags[1] }, \
+    { MODKEY,            XK_3,        view,        tags[2] }, \
+    { MODKEY,            XK_4,        view,        tags[3] }, \
+    { MODKEY,            XK_5,        view,        tags[4] }, \
+    { MODKEY,            XK_6,        view,        tags[5] }, \
+    { MODKEY,            XK_7,        view,        tags[6] }, \
+    { MODKEY,            XK_8,        view,        tags[7] }, \
+    { MODKEY,            XK_9,        view,        tags[8] }, \
+    { MODKEY|ControlMask,        XK_1,        toggleview,    tags[0] }, \
+    { MODKEY|ControlMask,        XK_2,        toggleview,    tags[1] }, \
+    { MODKEY|ControlMask,        XK_3,        toggleview,    tags[2] }, \
+    { MODKEY|ControlMask,        XK_4,        toggleview,    tags[3] }, \
+    { MODKEY|ControlMask,        XK_5,        toggleview,    tags[4] }, \
+    { MODKEY|ControlMask,        XK_6,        toggleview,    tags[5] }, \
+    { MODKEY|ControlMask,        XK_7,        toggleview,    tags[6] }, \
+    { MODKEY|ControlMask,        XK_8,        toggleview,    tags[7] }, \
+    { MODKEY|ControlMask,        XK_9,        toggleview,    tags[8] }, \
     { MODKEY|ShiftMask,        XK_0,        tag,        NULL }, \
-    { MODKEY|ShiftMask,        XK_1,        tag,        "0" }, \
-    { MODKEY|ShiftMask,        XK_2,        tag,        "1" }, \
-    { MODKEY|ShiftMask,        XK_3,        tag,        "2" }, \
-    { MODKEY|ShiftMask,        XK_4,        tag,        "3" }, \
-    { MODKEY|ShiftMask,        XK_5,        tag,        "4" }, \
-    { MODKEY|ShiftMask,        XK_6,        tag,        "5" }, \
-    { MODKEY|ShiftMask,        XK_7,        tag,        "6" }, \
-    { MODKEY|ShiftMask,        XK_8,        tag,        "7" }, \
-    { MODKEY|ShiftMask,        XK_9,        tag,        "8" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_1,        toggletag,    "0" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_2,        toggletag,    "1" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_3,        toggletag,    "2" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_4,        toggletag,    "3" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_5,        toggletag,    "4" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_6,        toggletag,    "5" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_7,        toggletag,    "6" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_8,        toggletag,    "7" }, \
-    { MODKEY|ControlMask|ShiftMask,    XK_9,        toggletag,    "8" }, \
+    { MODKEY|ShiftMask,        XK_1,        tag,        tags[0] }, \
+    { MODKEY|ShiftMask,        XK_2,        tag,        tags[1] }, \
+    { MODKEY|ShiftMask,        XK_3,        tag,        tags[2] }, \
+    { MODKEY|ShiftMask,        XK_4,        tag,        tags[3] }, \
+    { MODKEY|ShiftMask,        XK_5,        tag,        tags[4] }, \
+    { MODKEY|ShiftMask,        XK_6,        tag,        tags[5] }, \
+    { MODKEY|ShiftMask,        XK_7,        tag,        tags[6] }, \
+    { MODKEY|ShiftMask,        XK_8,        tag,        tags[7] }, \
+    { MODKEY|ShiftMask,        XK_9,        tag,        tags[8] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_1,        toggletag,    tags[0] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_2,        toggletag,    tags[1] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_3,        toggletag,    tags[2] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_4,        toggletag,    tags[3] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_5,        toggletag,    tags[4] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_6,        toggletag,    tags[5] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_7,        toggletag,    tags[6] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_8,        toggletag,    tags[7] }, \
+    { MODKEY|ControlMask|ShiftMask,    XK_9,        toggletag,    tags[8] }, \
     { MODKEY|ShiftMask,        XK_q,        quit,        NULL }, \
 };
diff --git a/dwm.h b/dwm.h
@@ -114,7 +114,8 @@ void grabkeys(void);			/* grab all keys defined in config.h */
 
 /* layout.c */
 void arrange(void);            /* arranges all windows depending on the layout in use */
-void focusclient(const char *arg);    /* focuses next(1)/previous(-1) visible client */
+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 layout */
 Bool isfloating(void);            /* returns True if floating layout is enabled */
 Bool isarrange(void (*func)());        /* returns True if func is the layout function in use */
diff --git a/event.c b/event.c
@@ -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>
@@ -15,8 +14,6 @@ typedef struct {
     const char *arg;
 } Key;
 
-KEYS
-
 #define CLEANMASK(mask)        (mask & ~(numlockmask | LockMask))
 #define MOUSEMASK        (BUTTONMASK | PointerMotionMask)
 
@@ -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;
             }
@@ -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;
@@ -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
@@ -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
@@ -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
@@ -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);
@@ -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)
@@ -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)
@@ -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();