diff options
| -rw-r--r-- | config.def.h | 8 | ||||
| -rw-r--r-- | dwm.1 | 26 | ||||
| -rw-r--r-- | dwm.c | 46 | 
3 files changed, 49 insertions, 31 deletions
| diff --git a/config.def.h b/config.def.h index 34615b2..a729dcd 100644 --- a/config.def.h +++ b/config.def.h @@ -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) @@ -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 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 @@ -57,6 +57,18 @@ click on a tag label adds/removes that tag to/from the focused window.  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 @@ -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. @@ -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 @@ 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; @@ -797,10 +813,11 @@ focusin(XEvent *e) { /* there are some broken focus acquiring clients */  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); @@ -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; @@ -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 | 
