Skip to content

Commit

Permalink
changed focusmon/tagmon to work on prev/next instead (-1/+1), changed…
Browse files Browse the repository at this point in the history
… shortcuts to Mod1-, Mod1-. and Mod1-Shift-, Mod1-Shift-.
  • Loading branch information
garbeam committed Jul 2, 2009
1 parent b75cbf9 commit 42a57fb
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 31 deletions.
8 changes: 4 additions & 4 deletions config.def.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
26 changes: 19 additions & 7 deletions dwm.1
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
46 changes: 26 additions & 20 deletions dwm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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]);
Expand All @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 42a57fb

Please sign in to comment.