aspectresize patch

This commit is contained in:
Sravan Balaji
2020-11-23 20:48:45 -05:00
parent 586865823b
commit 1dc6430ff6
5 changed files with 91 additions and 1 deletions

View File

@@ -57,5 +57,6 @@ Most patches can be found on the suckless website: [https://dwm.suckless.org/pat
* [actualfullscreen](https://dwm.suckless.org/patches/actualfullscreen/) - Actually toggle fullscreen for a window, instead of toggling the status bar and the monocle layout
* [alwaysfullscreen](https://dwm.suckless.org/patches/alwaysfullscreen/) - Do not allow the focus to drift from the active fullscreen client when using focusstack()
* [anybar](https://github.com/mihirlad55/dwm-anybar) (Polybar Tray Fix Version) - enables dwm to manage external status bars such as lemonbar and polybar
* [anybar](https://github.com/mihirlad55/dwm-anybar) (Polybar Tray Fix Version) - Enables dwm to manage external status bars such as lemonbar and polybar
* [aspectresize](https://dwm.suckless.org/patches/aspectresize/) - Allows you to resize a window while maintaining aspect ratio
* [fixborders](https://dwm.suckless.org/patches/alpha/) - Make borders opaque

View File

@@ -76,6 +76,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]} },

6
dwm.1
View File

@@ -125,6 +125,12 @@ Toggle fullscreen (actualfullscreen patch).
.B Mod1\-Tab
Toggles to the previously selected tags.
.TP
.B Mod1\-Shift\-j
Increase window size while maintaining aspect ratio.
.TP
.B Mod1\-Shift\-k
Decrease window size while maintaining aspect ratio.
.TP
.B Mod1\-Shift\-[1..n]
Apply nth tag to focused window.
.TP

25
dwm.c
View File

@@ -148,6 +148,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);
@@ -410,6 +411,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)
{

View File

@@ -0,0 +1,56 @@
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)
{