tchanged focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcut… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a9e145fe6d8af4848e6706131ac41e99003cd997 | |
parent 5dd92c765570caa6d96ab125aa655e30cf82eb20 | |
Author: Anselm R Garbe <[email protected]> | |
Date: Thu, 2 Jul 2009 20:37:26 +0100 | |
changed focusmon/tagmon to work on prev/next instead (-1/+1), changed shortcuts… | |
Diffstat: | |
M config.def.h | 8 ++++---- | |
M dwm.1 | 26 +++++++++++++++++++------- | |
M dwm.c | 46 +++++++++++++++++------------… | |
3 files changed, 49 insertions(+), 31 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -71,10 +71,10 @@ static Key keys[] = { | |
{ 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) | |
diff --git a/dwm.1 b/dwm.1 | |
t@@ -19,14 +19,14 @@ layout applied. | |
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… | |
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 | |
t@@ -57,6 +57,18 @@ click on a tag label adds/removes that tag to/from the focu… | |
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. | |
.TP | |
diff --git a/dwm.c b/dwm.c | |
t@@ -11,9 +11,9 @@ | |
* 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. | |
t@@ -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… | |
t@@ -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); | |
t@@ -621,6 +621,22 @@ die(const char *errstr, ...) { | |
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; | |
t@@ -797,10 +813,11 @@ focusin(XEvent *e) { /* there are some broken focus acqu… | |
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); | |
t@@ -934,15 +951,6 @@ grabkeys(void) { | |
} | |
} | |
-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 | |
initfont(const char *fontstr) { | |
char *def, **missing; | |
t@@ -1512,11 +1520,9 @@ tag(const Arg *arg) { | |
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 |