all repos — dwm @ a9e145fe6d8af4848e6706131ac41e99003cd997

my dwm build

changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
Anselm R Garbe anselm@garbe.us
Thu, 02 Jul 2009 20:37:26 +0100
commit

a9e145fe6d8af4848e6706131ac41e99003cd997

parent

5dd92c765570caa6d96ab125aa655e30cf82eb20

3 files changed, 49 insertions(+), 31 deletions(-)

jump to
M config.def.hconfig.def.h

@@ -71,10 +71,10 @@ { MODKEY, XK_space, setlayout, {0} },

{ MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY, XK_0, view, {.ui = ~0 } }, { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, - { MODKEY, XK_w, focusmon, {.ui = 0 } }, - { MODKEY, XK_e, focusmon, {.ui = 1 } }, - { MODKEY|ShiftMask, XK_w, tagmon, {.ui = 0 } }, - { MODKEY|ShiftMask, XK_e, tagmon, {.ui = 1 } }, + { MODKEY, XK_comma, focusmon, {.i = -1 } }, + { MODKEY, XK_period, focusmon, {.i = +1 } }, + { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, + { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, TAGKEYS( XK_1, 0) TAGKEYS( XK_2, 1) TAGKEYS( XK_3, 2)
M dwm.1dwm.1

@@ -19,14 +19,14 @@ .P

Windows are grouped by tags. Each window can be tagged with one or multiple tags. Selecting certain tags displays all windows with these tags. .P -dwm contains a small status bar which displays all available tags, the layout, +Each screen contains a small status bar which displays all available tags, the layout, the title of the focused window, and the text read from the root window name -property. A floating window is indicated with an empty square and a maximised -floating window is indicated with a filled square before the windows title. -The selected tags are indicated with a different color. The tags of the focused -window are indicated with a filled square in the top left corner. The tags -which are applied to one or more windows are indicated with an empty square in -the top left corner. +property, if the screen is focused. A floating window is indicated with an +empty square and a maximised floating window is indicated with a filled square +before the windows title. The selected tags are indicated with a different +color. The tags of the focused window are indicated with a filled square in the +top left corner. The tags which are applied to one or more windows are +indicated with an empty square in the top left corner. .P dwm draws a small border around windows to indicate the focus state. .SH OPTIONS

@@ -56,6 +56,18 @@ .TP

.B Mod1\-Shift\-Return Start .BR xterm. +.TP +.B Mod1\-, +Focus previous screen, if any. +.TP +.B Mod1\-. +Focus next screen, if any. +.TP +.B Mod1\-Shift\-, +Send focused window to previous screen, if any. +.TP +.B Mod1\-Shift\-, +Send focused window to next screen, if any. .TP .B Mod1\-b Toggles bar on and off.
M dwm.cdwm.c

@@ -11,9 +11,9 @@ * whenever a new event has been fetched. This allows event dispatching

* in O(1) time. * * Each child of the root window is called a client, except windows which have - * set the override_redirect flag. Clients are organized in a global - * linked client list, the focus history is remembered through a global - * stack list. Each client contains a bit array to indicate the tags of a + * set the override_redirect flag. Clients are organized in a linked client + * list on each monitor, the focus history is remembered through a stack list + * on each monitor. Each client contains a bit array to indicate the tags of a * client. * * Keys and tagging rules are organized as arrays and defined in config.h.

@@ -164,6 +164,7 @@ static void destroynotify(XEvent *e);

static void detach(Client *c); static void detachstack(Client *c); static void die(const char *errstr, ...); +static Monitor *dirtomon(int dir); static void drawbar(Monitor *m); static void drawbars(void); static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]);

@@ -180,7 +181,6 @@ static long getstate(Window w);

static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); static void grabbuttons(Client *c, Bool focused); static void grabkeys(void); -static Monitor *idxtomon(unsigned int n); static void initfont(const char *fontstr); static Bool isprotodel(Client *c); static void keypress(XEvent *e);

@@ -621,6 +621,22 @@ va_end(ap);

exit(EXIT_FAILURE); } +Monitor * +dirtomon(int dir) { + Monitor *m = NULL; + + if(dir > 0) + if(!(m = selmon->next)) + m = mons; + else { + if(selmon == mons) + for(m = mons; m->next; m = m->next); + else + for(m = mons; m->next != selmon; m = m->next); + } + return m; +} + void drawbar(Monitor *m) { int x;

@@ -797,10 +813,11 @@ }

void focusmon(const Arg *arg) { - Monitor *m; + Monitor *m = NULL; - if(!(m = idxtomon(arg->ui)) || m == selmon) + if(!mons->next) return; + m = dirtomon(arg->i); unfocus(selmon->sel); selmon = m; focus(NULL);

@@ -932,15 +949,6 @@ XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,

True, GrabModeAsync, GrabModeAsync); } } -} - -Monitor * -idxtomon(unsigned int n) { - unsigned int i; - Monitor *m; - - for(m = mons, i = 0; m && i != n; m = m->next, i++); - return m; } void

@@ -1512,11 +1520,9 @@ }

void tagmon(const Arg *arg) { - Monitor *m; - - if(!selmon->sel || !(m = idxtomon(arg->ui))) - return; - sendmon(selmon->sel, m); + if(!selmon->sel || !mons->next) + return + sendmon(selmon->sel, dirtomon(arg->i)); } int