diff -Nurb dwm-5.8.2/config.def.h dwm-5.8.2_cwlin/config.def.h --- dwm-5.8.2/config.def.h 2010-06-04 06:39:15.000000000 -0400 +++ dwm-5.8.2_cwlin/config.def.h 2011-07-03 22:13:43.000000000 -0400 @@ -81,6 +81,11 @@ TAGKEYS( XK_8, 7) TAGKEYS( XK_9, 8) { MODKEY|ShiftMask, XK_q, quit, {0} }, + { MODKEY|ControlMask, XK_y, fastmove, {.i = 0} }, // left up + { MODKEY|ControlMask, XK_u, fastmove, {.i = 1} }, // right up + { MODKEY|ControlMask, XK_b, fastmove, {.i = 2} }, // left down + { MODKEY|ControlMask, XK_n, fastmove, {.i = 3} }, // right down + { MODKEY|ControlMask, XK_c, fastmove, {.i = 4} }, // center }; /* button definitions */ diff -Nurb dwm-5.8.2/dwm.c dwm-5.8.2_cwlin/dwm.c --- dwm-5.8.2/dwm.c 2010-06-04 06:39:15.000000000 -0400 +++ dwm-5.8.2_cwlin/dwm.c 2011-07-03 22:15:56.000000000 -0400 @@ -242,6 +242,7 @@ static int xerrordummy(Display *dpy, XErrorEvent *ee); static int xerrorstart(Display *dpy, XErrorEvent *ee); static void zoom(const Arg *arg); +static void fastmove (const Arg *arg); /* variables */ static const char broken[] = "broken"; @@ -2045,6 +2046,48 @@ arrange(c->mon); } +void +fastmove (const Arg *arg) +{ + XEvent ev; + Monitor *m = selmon; + int x = 0, y = 0; + + if (!(m->sel && arg)) + return; + + if (m->showbar) + y += 15; // bar size + + switch (arg->i) + { + case 1: // right up + x = sw - m->sel->w - 8; + break; + case 2: // left down + y += sh - m->sel->h - 27; + break; + case 3: // right down + x = sw - m->sel->w - 8; + y += sh - m->sel->h - 27; + break; + case 4: // center + x = (sw - m->sel->w) / 2; + y = (sh - m->sel->h) / 2; + break; + case 0: // left up + default: + break; + } + + resize (m->sel, + x, y, // x, y + m->sel->w, m->sel->h, // width, height + True); + + while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + int main(int argc, char *argv[]) { if(argc == 2 && !strcmp("-v", argv[1]))