diff --git a/config.def.h b/config.def.h index 1c0b587..2fcc30d 100644 --- a/config.def.h +++ b/config.def.h @@ -72,6 +72,8 @@ static Key keys[] = { { MODKEY, XK_l, setmfact, {.f = +0.05} }, { MODKEY, XK_Return, zoom, {0} }, { MODKEY, XK_Tab, view, {0} }, + { MODKEY|ShiftMask, XK_j, aspectresize, {.i = +24} }, + { MODKEY|ShiftMask, XK_k, aspectresize, {.i = -24} }, { MODKEY|ShiftMask, XK_c, killclient, {0} }, { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, diff --git a/dwm.c b/dwm.c index 9fd0286..6a02119 100644 --- a/dwm.c +++ b/dwm.c @@ -146,6 +146,7 @@ static void applyrules(Client *c); static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact); static void arrange(Monitor *m); static void arrangemon(Monitor *m); +static void aspectresize(const Arg *arg); static void attach(Client *c); static void attachstack(Client *c); static void buttonpress(XEvent *e); @@ -400,6 +401,30 @@ arrangemon(Monitor *m) m->lt[m->sellt]->arrange(m); } +void +aspectresize(const Arg *arg) { + /* only floating windows can be moved */ + Client *c; + c = selmon->sel; + float ratio; + int w, h,nw, nh; + + if (!c || !arg) + return; + if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) + return; + + ratio = (float)c->w / (float)c->h; + h = arg->i; + w = (int)(ratio * h); + + nw = c->w + w; + nh = c->h + h; + + XRaiseWindow(dpy, c->win); + resize(c, c->x, c->y, nw, nh, True); +} + void attach(Client *c) {