mirror of
https://github.com/eRgo35/dots.git
synced 2025-12-16 15:36:11 +01:00
more patches
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
/* appearance */
|
/* appearance */
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
|
static const unsigned int gappx = 6; /* gaps between windows */
|
||||||
static const unsigned int snap = 32; /* snap pixel */
|
static const unsigned int snap = 32; /* snap pixel */
|
||||||
static const int showbar = 1; /* 0 means no bar */
|
static const int showbar = 1; /* 0 means no bar */
|
||||||
static const int topbar = 1; /* 0 means bottom bar */
|
static const int topbar = 1; /* 0 means bottom bar */
|
||||||
@@ -37,11 +38,13 @@ static const int nmaster = 1; /* number of clients in master area */
|
|||||||
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
|
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
|
||||||
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
|
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
|
||||||
|
|
||||||
|
#include "layouts.c"
|
||||||
static const Layout layouts[] = {
|
static const Layout layouts[] = {
|
||||||
/* symbol arrange function */
|
/* symbol arrange function */
|
||||||
{ "[]=", tile }, /* first entry is default */
|
{ "[]=", tile }, /* first entry is default */
|
||||||
{ "><>", NULL }, /* no layout function means floating behavior */
|
{ "><>", NULL }, /* no layout function means floating behavior */
|
||||||
{ "[M]", monocle },
|
{ "[M]", monocle },
|
||||||
|
{ "HHH", grid },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* key definitions */
|
/* key definitions */
|
||||||
@@ -80,6 +83,8 @@ static const Key keys[] = {
|
|||||||
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
||||||
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
||||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
||||||
|
{ MODKEY, XK_g, setlayout, {.v = &layouts[3]} },
|
||||||
|
{ MODKEY|ShiftMask, XK_f, fullscreen, {0} },
|
||||||
{ MODKEY, XK_space, setlayout, {0} },
|
{ MODKEY, XK_space, setlayout, {0} },
|
||||||
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||||
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
/* appearance */
|
/* appearance */
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
|
static const unsigned int gappx = 6; /* gaps between windows */
|
||||||
static const unsigned int snap = 32; /* snap pixel */
|
static const unsigned int snap = 32; /* snap pixel */
|
||||||
static const int showbar = 1; /* 0 means no bar */
|
static const int showbar = 1; /* 0 means no bar */
|
||||||
static const int topbar = 1; /* 0 means bottom bar */
|
static const int topbar = 1; /* 0 means bottom bar */
|
||||||
@@ -45,7 +46,7 @@ static const Layout layouts[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* key definitions */
|
/* key definitions */
|
||||||
#define MODKEY Mod1Mask
|
#define MODKEY Mod4Mask
|
||||||
#define TAGKEYS(KEY,TAG) \
|
#define TAGKEYS(KEY,TAG) \
|
||||||
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
|
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
|
||||||
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
|
{ MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
|
||||||
@@ -58,12 +59,15 @@ static const Layout layouts[] = {
|
|||||||
/* commands */
|
/* commands */
|
||||||
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
|
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
|
||||||
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
|
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
|
||||||
static const char *termcmd[] = { "st", NULL };
|
static const char *termcmd[] = { "alacritty", NULL };
|
||||||
|
static const char scratchpadname[] = "scratchpad";
|
||||||
|
static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL };
|
||||||
|
|
||||||
static const Key keys[] = {
|
static const Key keys[] = {
|
||||||
/* modifier key function argument */
|
/* modifier key function argument */
|
||||||
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
||||||
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
||||||
|
{ MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } },
|
||||||
{ MODKEY, XK_b, togglebar, {0} },
|
{ MODKEY, XK_b, togglebar, {0} },
|
||||||
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
||||||
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
||||||
@@ -77,6 +81,7 @@ static const Key keys[] = {
|
|||||||
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
||||||
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
||||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
||||||
|
{ MODKEY|ShiftMask, XK_f, fullscreen, {0} },
|
||||||
{ MODKEY, XK_space, setlayout, {0} },
|
{ MODKEY, XK_space, setlayout, {0} },
|
||||||
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||||
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
||||||
|
|||||||
@@ -1,17 +1,10 @@
|
|||||||
--- config.def.h 2019-06-06 21:23:27.006661784 +0200
|
--- config.def.h
|
||||||
+++ config.def.h 2019-06-20 15:05:59.083102462 +0200
|
+++ config.def.h
|
||||||
@@ -58,11 +58,14 @@ static const Layout layouts[] = {
|
@@ -78,6 +80,7 @@ static Key keys[] = {
|
||||||
static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
|
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
||||||
static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
|
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
||||||
static const char *termcmd[] = { "st", NULL };
|
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
||||||
+static const char scratchpadname[] = "scratchpad";
|
+ { MODKEY, XK_g, setlayout, {.v = &layouts[3]} },
|
||||||
+static const char *scratchpadcmd[] = { "st", "-t", scratchpadname, "-g", "120x34", NULL };
|
{ MODKEY, XK_space, setlayout, {0} },
|
||||||
|
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
||||||
static Key keys[] = {
|
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
||||||
/* modifier key function argument */
|
|
||||||
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
|
||||||
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
|
||||||
+ { MODKEY, XK_grave, togglescratch, {.v = scratchpadcmd } },
|
|
||||||
{ MODKEY, XK_b, togglebar, {0} },
|
|
||||||
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
|
||||||
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
|
||||||
|
|||||||
@@ -53,8 +53,8 @@
|
|||||||
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
|
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
|
||||||
#define LENGTH(X) (sizeof X / sizeof X[0])
|
#define LENGTH(X) (sizeof X / sizeof X[0])
|
||||||
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
|
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
|
||||||
#define WIDTH(X) ((X)->w + 2 * (X)->bw)
|
#define WIDTH(X) ((X)->w + 2 * (X)->bw + gappx)
|
||||||
#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
|
#define HEIGHT(X) ((X)->h + 2 * (X)->bw + gappx)
|
||||||
#define TAGMASK ((1 << LENGTH(tags)) - 1)
|
#define TAGMASK ((1 << LENGTH(tags)) - 1)
|
||||||
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
|
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
|
||||||
|
|
||||||
@@ -94,6 +94,7 @@ struct Client {
|
|||||||
int bw, oldbw;
|
int bw, oldbw;
|
||||||
unsigned int tags;
|
unsigned int tags;
|
||||||
int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
|
int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
|
||||||
|
int issteam;
|
||||||
Client *next;
|
Client *next;
|
||||||
Client *snext;
|
Client *snext;
|
||||||
Monitor *mon;
|
Monitor *mon;
|
||||||
@@ -202,6 +203,7 @@ static void sendmon(Client *c, Monitor *m);
|
|||||||
static void setclientstate(Client *c, long state);
|
static void setclientstate(Client *c, long state);
|
||||||
static void setfocus(Client *c);
|
static void setfocus(Client *c);
|
||||||
static void setfullscreen(Client *c, int fullscreen);
|
static void setfullscreen(Client *c, int fullscreen);
|
||||||
|
static void fullscreen(const Arg *arg);
|
||||||
static void setlayout(const Arg *arg);
|
static void setlayout(const Arg *arg);
|
||||||
static void setmfact(const Arg *arg);
|
static void setmfact(const Arg *arg);
|
||||||
static void setup(void);
|
static void setup(void);
|
||||||
@@ -301,6 +303,9 @@ applyrules(Client *c)
|
|||||||
class = ch.res_class ? ch.res_class : broken;
|
class = ch.res_class ? ch.res_class : broken;
|
||||||
instance = ch.res_name ? ch.res_name : broken;
|
instance = ch.res_name ? ch.res_name : broken;
|
||||||
|
|
||||||
|
if (strstr(class, "Steam") || strstr(class, "steam_app_"))
|
||||||
|
c->issteam = 1;
|
||||||
|
|
||||||
for (i = 0; i < LENGTH(rules); i++) {
|
for (i = 0; i < LENGTH(rules); i++) {
|
||||||
r = &rules[i];
|
r = &rules[i];
|
||||||
if((!r->title || !regexec(®excache[i][2], c->name, 0, NULL, 0)) &&
|
if((!r->title || !regexec(®excache[i][2], c->name, 0, NULL, 0)) &&
|
||||||
@@ -631,13 +636,15 @@ configurerequest(XEvent *e)
|
|||||||
c->bw = ev->border_width;
|
c->bw = ev->border_width;
|
||||||
else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
|
else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
|
||||||
m = c->mon;
|
m = c->mon;
|
||||||
if (ev->value_mask & CWX) {
|
if (!c->issteam) {
|
||||||
c->oldx = c->x;
|
if (ev->value_mask & CWX) {
|
||||||
c->x = m->mx + ev->x;
|
c->oldx = c->x;
|
||||||
}
|
c->x = m->mx + ev->x;
|
||||||
if (ev->value_mask & CWY) {
|
}
|
||||||
c->oldy = c->y;
|
if (ev->value_mask & CWY) {
|
||||||
c->y = m->my + ev->y;
|
c->oldy = c->y;
|
||||||
|
c->y = m->my + ev->y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ev->value_mask & CWWidth) {
|
if (ev->value_mask & CWWidth) {
|
||||||
c->oldw = c->w;
|
c->oldw = c->w;
|
||||||
@@ -1335,12 +1342,36 @@ void
|
|||||||
resizeclient(Client *c, int x, int y, int w, int h)
|
resizeclient(Client *c, int x, int y, int w, int h)
|
||||||
{
|
{
|
||||||
XWindowChanges wc;
|
XWindowChanges wc;
|
||||||
|
unsigned int n;
|
||||||
|
unsigned int gapoffset;
|
||||||
|
unsigned int gapincr;
|
||||||
|
Client *nbc;
|
||||||
|
|
||||||
c->oldx = c->x; c->x = wc.x = x;
|
|
||||||
c->oldy = c->y; c->y = wc.y = y;
|
|
||||||
c->oldw = c->w; c->w = wc.width = w;
|
|
||||||
c->oldh = c->h; c->h = wc.height = h;
|
|
||||||
wc.border_width = c->bw;
|
wc.border_width = c->bw;
|
||||||
|
|
||||||
|
/* Get number of clients for the client's monitor */
|
||||||
|
for (n = 0, nbc = nexttiled(c->mon->clients); nbc; nbc = nexttiled(nbc->next), n++);
|
||||||
|
|
||||||
|
/* Do nothing if layout is floating */
|
||||||
|
if (c->isfloating || c->mon->lt[c->mon->sellt]->arrange == NULL) {
|
||||||
|
gapincr = gapoffset = 0;
|
||||||
|
} else {
|
||||||
|
/* Remove border and gap if layout is monocle or only one client */
|
||||||
|
if (c->mon->lt[c->mon->sellt]->arrange == monocle || n == 1) {
|
||||||
|
gapoffset = 0;
|
||||||
|
gapincr = -2 * borderpx;
|
||||||
|
wc.border_width = 0;
|
||||||
|
} else {
|
||||||
|
gapoffset = gappx;
|
||||||
|
gapincr = 2 * gappx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c->oldx = c->x; c->x = wc.x = x + gapoffset;
|
||||||
|
c->oldy = c->y; c->y = wc.y = y + gapoffset;
|
||||||
|
c->oldw = c->w; c->w = wc.width = w - gapincr;
|
||||||
|
c->oldh = c->h; c->h = wc.height = h - gapincr;
|
||||||
|
|
||||||
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
|
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
|
||||||
configure(c);
|
configure(c);
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
@@ -1556,6 +1587,19 @@ setfullscreen(Client *c, int fullscreen)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Layout *last_layout;
|
||||||
|
void
|
||||||
|
fullscreen(const Arg *arg)
|
||||||
|
{
|
||||||
|
if (selmon->showbar) {
|
||||||
|
for(last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++);
|
||||||
|
setlayout(&((Arg) { .v = &layouts[2] }));
|
||||||
|
} else {
|
||||||
|
setlayout(&((Arg) { .v = last_layout }));
|
||||||
|
}
|
||||||
|
togglebar(arg);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
setlayout(const Arg *arg)
|
setlayout(const Arg *arg)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ struct Client {
|
|||||||
int bw, oldbw;
|
int bw, oldbw;
|
||||||
unsigned int tags;
|
unsigned int tags;
|
||||||
int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
|
int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
|
||||||
|
int issteam;
|
||||||
Client *next;
|
Client *next;
|
||||||
Client *snext;
|
Client *snext;
|
||||||
Monitor *mon;
|
Monitor *mon;
|
||||||
@@ -202,6 +203,7 @@ static void sendmon(Client *c, Monitor *m);
|
|||||||
static void setclientstate(Client *c, long state);
|
static void setclientstate(Client *c, long state);
|
||||||
static void setfocus(Client *c);
|
static void setfocus(Client *c);
|
||||||
static void setfullscreen(Client *c, int fullscreen);
|
static void setfullscreen(Client *c, int fullscreen);
|
||||||
|
static void fullscreen(const Arg *arg);
|
||||||
static void setlayout(const Arg *arg);
|
static void setlayout(const Arg *arg);
|
||||||
static void setmfact(const Arg *arg);
|
static void setmfact(const Arg *arg);
|
||||||
static void setup(void);
|
static void setup(void);
|
||||||
@@ -215,6 +217,7 @@ static void tagmon(const Arg *arg);
|
|||||||
static void tile(Monitor *m);
|
static void tile(Monitor *m);
|
||||||
static void togglebar(const Arg *arg);
|
static void togglebar(const Arg *arg);
|
||||||
static void togglefloating(const Arg *arg);
|
static void togglefloating(const Arg *arg);
|
||||||
|
static void togglescratch(const Arg *arg);
|
||||||
static void toggletag(const Arg *arg);
|
static void toggletag(const Arg *arg);
|
||||||
static void toggleview(const Arg *arg);
|
static void toggleview(const Arg *arg);
|
||||||
static void unfocus(Client *c, int setfocus);
|
static void unfocus(Client *c, int setfocus);
|
||||||
@@ -276,6 +279,8 @@ static Window root, wmcheckwin;
|
|||||||
/* configuration, allows nested code to access above variables */
|
/* configuration, allows nested code to access above variables */
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
static unsigned int scratchtag = 1 << LENGTH(tags);
|
||||||
|
|
||||||
/* compile-time check if all tags fit into an unsigned int bit array. */
|
/* compile-time check if all tags fit into an unsigned int bit array. */
|
||||||
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
|
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
|
||||||
|
|
||||||
@@ -298,6 +303,9 @@ applyrules(Client *c)
|
|||||||
class = ch.res_class ? ch.res_class : broken;
|
class = ch.res_class ? ch.res_class : broken;
|
||||||
instance = ch.res_name ? ch.res_name : broken;
|
instance = ch.res_name ? ch.res_name : broken;
|
||||||
|
|
||||||
|
if (strstr(class, "Steam") || strstr(class, "steam_app_"))
|
||||||
|
c->issteam = 1;
|
||||||
|
|
||||||
for (i = 0; i < LENGTH(rules); i++) {
|
for (i = 0; i < LENGTH(rules); i++) {
|
||||||
r = &rules[i];
|
r = &rules[i];
|
||||||
if((!r->title || !regexec(®excache[i][2], c->name, 0, NULL, 0)) &&
|
if((!r->title || !regexec(®excache[i][2], c->name, 0, NULL, 0)) &&
|
||||||
@@ -628,13 +636,15 @@ configurerequest(XEvent *e)
|
|||||||
c->bw = ev->border_width;
|
c->bw = ev->border_width;
|
||||||
else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
|
else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
|
||||||
m = c->mon;
|
m = c->mon;
|
||||||
if (ev->value_mask & CWX) {
|
if (!c->issteam) {
|
||||||
c->oldx = c->x;
|
if (ev->value_mask & CWX) {
|
||||||
c->x = m->mx + ev->x;
|
c->oldx = c->x;
|
||||||
}
|
c->x = m->mx + ev->x;
|
||||||
if (ev->value_mask & CWY) {
|
}
|
||||||
c->oldy = c->y;
|
if (ev->value_mask & CWY) {
|
||||||
c->y = m->my + ev->y;
|
c->oldy = c->y;
|
||||||
|
c->y = m->my + ev->y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ev->value_mask & CWWidth) {
|
if (ev->value_mask & CWWidth) {
|
||||||
c->oldw = c->w;
|
c->oldw = c->w;
|
||||||
@@ -1098,6 +1108,14 @@ manage(Window w, XWindowAttributes *wa)
|
|||||||
c->y = MAX(c->y, c->mon->wy);
|
c->y = MAX(c->y, c->mon->wy);
|
||||||
c->bw = borderpx;
|
c->bw = borderpx;
|
||||||
|
|
||||||
|
selmon->tagset[selmon->seltags] &= ~scratchtag;
|
||||||
|
if (!strcmp(c->name, scratchpadname)) {
|
||||||
|
c->mon->tagset[c->mon->seltags] |= c->tags = scratchtag;
|
||||||
|
c->isfloating = True;
|
||||||
|
c->x = c->mon->wx + (c->mon->ww / 2 - WIDTH(c) / 2);
|
||||||
|
c->y = c->mon->wy + (c->mon->wh / 2 - HEIGHT(c) / 2);
|
||||||
|
}
|
||||||
|
|
||||||
wc.border_width = c->bw;
|
wc.border_width = c->bw;
|
||||||
XConfigureWindow(dpy, w, CWBorderWidth, &wc);
|
XConfigureWindow(dpy, w, CWBorderWidth, &wc);
|
||||||
XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
|
XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
|
||||||
@@ -1545,6 +1563,19 @@ setfullscreen(Client *c, int fullscreen)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Layout *last_layout;
|
||||||
|
void
|
||||||
|
fullscreen(const Arg *arg)
|
||||||
|
{
|
||||||
|
if (selmon->showbar) {
|
||||||
|
for(last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++);
|
||||||
|
setlayout(&((Arg) { .v = &layouts[2] }));
|
||||||
|
} else {
|
||||||
|
setlayout(&((Arg) { .v = last_layout }));
|
||||||
|
}
|
||||||
|
togglebar(arg);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
setlayout(const Arg *arg)
|
setlayout(const Arg *arg)
|
||||||
{
|
{
|
||||||
@@ -1704,6 +1735,7 @@ spawn(const Arg *arg)
|
|||||||
{
|
{
|
||||||
if (arg->v == dmenucmd)
|
if (arg->v == dmenucmd)
|
||||||
dmenumon[0] = '0' + selmon->num;
|
dmenumon[0] = '0' + selmon->num;
|
||||||
|
selmon->tagset[selmon->seltags] &= ~scratchtag;
|
||||||
if (fork() == 0) {
|
if (fork() == 0) {
|
||||||
if (dpy)
|
if (dpy)
|
||||||
close(ConnectionNumber(dpy));
|
close(ConnectionNumber(dpy));
|
||||||
@@ -1782,6 +1814,28 @@ togglefloating(const Arg *arg)
|
|||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
togglescratch(const Arg *arg)
|
||||||
|
{
|
||||||
|
Client *c;
|
||||||
|
unsigned int found = 0;
|
||||||
|
|
||||||
|
for (c = selmon->clients; c && !(found = c->tags & scratchtag); c = c->next);
|
||||||
|
if (found) {
|
||||||
|
unsigned int newtagset = selmon->tagset[selmon->seltags] ^ scratchtag;
|
||||||
|
if (newtagset) {
|
||||||
|
selmon->tagset[selmon->seltags] = newtagset;
|
||||||
|
focus(NULL);
|
||||||
|
arrange(selmon);
|
||||||
|
}
|
||||||
|
if (ISVISIBLE(c)) {
|
||||||
|
focus(c);
|
||||||
|
restack(selmon);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
spawn(arg);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
toggletag(const Arg *arg)
|
toggletag(const Arg *arg)
|
||||||
{
|
{
|
||||||
|
|||||||
27
dwm/.dwm/layouts.c
Normal file
27
dwm/.dwm/layouts.c
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
void
|
||||||
|
grid(Monitor *m) {
|
||||||
|
unsigned int i, n, cx, cy, cw, ch, aw, ah, cols, rows;
|
||||||
|
Client *c;
|
||||||
|
|
||||||
|
for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next))
|
||||||
|
n++;
|
||||||
|
|
||||||
|
/* grid dimensions */
|
||||||
|
for(rows = 0; rows <= n/2; rows++)
|
||||||
|
if(rows*rows >= n)
|
||||||
|
break;
|
||||||
|
cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows;
|
||||||
|
|
||||||
|
/* window geoms (cell height/width) */
|
||||||
|
ch = m->wh / (rows ? rows : 1);
|
||||||
|
cw = m->ww / (cols ? cols : 1);
|
||||||
|
for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
|
||||||
|
cx = m->wx + (i / rows) * cw;
|
||||||
|
cy = m->wy + (i % rows) * ch;
|
||||||
|
/* adjust height/width of last row/column's windows */
|
||||||
|
ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0;
|
||||||
|
aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0;
|
||||||
|
resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
From 54719285bd1a984e2efce6e8a8eab184fec11abf Mon Sep 17 00:00:00 2001
|
|
||||||
From: Sermak <sermak@jarvis.com>
|
|
||||||
Date: Mon, 8 Jul 2019 01:06:44 +0200
|
|
||||||
Subject: [PATCH] Simulate toggleable fullscreen mode
|
|
||||||
|
|
||||||
---
|
|
||||||
config.def.h | 1 +
|
|
||||||
dwm.c | 14 ++++++++++++++
|
|
||||||
2 files changed, 15 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/config.def.h b/config.def.h
|
|
||||||
index 1c0b587..f774cc5 100644
|
|
||||||
--- a/config.def.h
|
|
||||||
+++ b/config.def.h
|
|
||||||
@@ -76,6 +76,7 @@ static Key keys[] = {
|
|
||||||
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
|
||||||
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
|
||||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
|
||||||
+ { MODKEY|ShiftMask, XK_f, fullscreen, {0} },
|
|
||||||
{ MODKEY, XK_space, setlayout, {0} },
|
|
||||||
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
|
||||||
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
|
||||||
diff --git a/dwm.c b/dwm.c
|
|
||||||
index 4465af1..04b1e06 100644
|
|
||||||
--- a/dwm.c
|
|
||||||
+++ b/dwm.c
|
|
||||||
@@ -199,6 +199,7 @@ static void sendmon(Client *c, Monitor *m);
|
|
||||||
static void setclientstate(Client *c, long state);
|
|
||||||
static void setfocus(Client *c);
|
|
||||||
static void setfullscreen(Client *c, int fullscreen);
|
|
||||||
+static void fullscreen(const Arg *arg);
|
|
||||||
static void setlayout(const Arg *arg);
|
|
||||||
static void setmfact(const Arg *arg);
|
|
||||||
static void setup(void);
|
|
||||||
@@ -1497,6 +1498,19 @@ setfullscreen(Client *c, int fullscreen)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+Layout *last_layout;
|
|
||||||
+void
|
|
||||||
+fullscreen(const Arg *arg)
|
|
||||||
+{
|
|
||||||
+ if (selmon->showbar) {
|
|
||||||
+ for(last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++);
|
|
||||||
+ setlayout(&((Arg) { .v = &layouts[2] }));
|
|
||||||
+ } else {
|
|
||||||
+ setlayout(&((Arg) { .v = last_layout }));
|
|
||||||
+ }
|
|
||||||
+ togglebar(arg);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void
|
|
||||||
setlayout(const Arg *arg)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.22.0
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
From b04bb473cf9818277d33a591f7fe2dfae96afaaf Mon Sep 17 00:00:00 2001
|
|
||||||
From: Joshua Haase <hahj87@gmail.com>
|
|
||||||
Date: Mon, 15 Aug 2016 17:06:18 -0500
|
|
||||||
Subject: [PATCH] Apply modified gridmode patch.
|
|
||||||
|
|
||||||
---
|
|
||||||
config.def.h | 3 +++
|
|
||||||
layouts.c | 27 +++++++++++++++++++++++++++
|
|
||||||
2 files changed, 30 insertions(+)
|
|
||||||
create mode 100644 layouts.c
|
|
||||||
|
|
||||||
diff --git a/config.def.h b/config.def.h
|
|
||||||
index a9ac303..30b7c4a 100644
|
|
||||||
--- a/config.def.h
|
|
||||||
+++ b/config.def.h
|
|
||||||
@@ -36,11 +36,13 @@ static const float mfact = 0.55; /* factor of master area size [0.05..0.95]
|
|
||||||
static const int nmaster = 1; /* number of clients in master area */
|
|
||||||
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
|
|
||||||
|
|
||||||
+#include "layouts.c"
|
|
||||||
static const Layout layouts[] = {
|
|
||||||
/* symbol arrange function */
|
|
||||||
{ "[]=", tile }, /* first entry is default */
|
|
||||||
{ "><>", NULL }, /* no layout function means floating behavior */
|
|
||||||
{ "[M]", monocle },
|
|
||||||
+ { "HHH", grid },
|
|
||||||
};
|
|
||||||
|
|
||||||
/* key definitions */
|
|
||||||
@@ -76,6 +78,7 @@ static Key keys[] = {
|
|
||||||
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
|
|
||||||
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
|
|
||||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
|
||||||
+ { MODKEY, XK_g, setlayout, {.v = &layouts[3]} },
|
|
||||||
{ MODKEY, XK_space, setlayout, {0} },
|
|
||||||
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
|
|
||||||
{ MODKEY, XK_0, view, {.ui = ~0 } },
|
|
||||||
diff --git a/layouts.c b/layouts.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..d26acf3
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/layouts.c
|
|
||||||
@@ -0,0 +1,27 @@
|
|
||||||
+void
|
|
||||||
+grid(Monitor *m) {
|
|
||||||
+ unsigned int i, n, cx, cy, cw, ch, aw, ah, cols, rows;
|
|
||||||
+ Client *c;
|
|
||||||
+
|
|
||||||
+ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next))
|
|
||||||
+ n++;
|
|
||||||
+
|
|
||||||
+ /* grid dimensions */
|
|
||||||
+ for(rows = 0; rows <= n/2; rows++)
|
|
||||||
+ if(rows*rows >= n)
|
|
||||||
+ break;
|
|
||||||
+ cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows;
|
|
||||||
+
|
|
||||||
+ /* window geoms (cell height/width) */
|
|
||||||
+ ch = m->wh / (rows ? rows : 1);
|
|
||||||
+ cw = m->ww / (cols ? cols : 1);
|
|
||||||
+ for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
|
|
||||||
+ cx = m->wx + (i / rows) * cw;
|
|
||||||
+ cy = m->wy + (i % rows) * ch;
|
|
||||||
+ /* adjust height/width of last row/column's windows */
|
|
||||||
+ ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0;
|
|
||||||
+ aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0;
|
|
||||||
+ resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False);
|
|
||||||
+ i++;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
--
|
|
||||||
2.14.1
|
|
||||||
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
diff --git a/dwm.c b/dwm.c
|
|
||||||
index 4465af1..c4aa3de 100644
|
|
||||||
--- a/dwm.c
|
|
||||||
+++ b/dwm.c
|
|
||||||
@@ -416,7 +416,7 @@ attachstack(Client *c)
|
|
||||||
void
|
|
||||||
buttonpress(XEvent *e)
|
|
||||||
{
|
|
||||||
- unsigned int i, x, click;
|
|
||||||
+ unsigned int i, x, click, occ = 0;
|
|
||||||
Arg arg = {0};
|
|
||||||
Client *c;
|
|
||||||
Monitor *m;
|
|
||||||
@@ -431,9 +431,14 @@ buttonpress(XEvent *e)
|
|
||||||
}
|
|
||||||
if (ev->window == selmon->barwin) {
|
|
||||||
i = x = 0;
|
|
||||||
- do
|
|
||||||
+ for (c = m->clients; c; c = c->next)
|
|
||||||
+ occ |= c->tags == 255 ? 0 : c->tags;
|
|
||||||
+ do {
|
|
||||||
+ /* do not reserve space for vacant tags */
|
|
||||||
+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
|
|
||||||
+ continue;
|
|
||||||
x += TEXTW(tags[i]);
|
|
||||||
- while (ev->x >= x && ++i < LENGTH(tags));
|
|
||||||
+ } while (ev->x >= x && ++i < LENGTH(tags));
|
|
||||||
if (i < LENGTH(tags)) {
|
|
||||||
click = ClkTagBar;
|
|
||||||
arg.ui = 1 << i;
|
|
||||||
@@ -709,19 +714,19 @@ drawbar(Monitor *m)
|
|
||||||
}
|
|
||||||
|
|
||||||
for (c = m->clients; c; c = c->next) {
|
|
||||||
- occ |= c->tags;
|
|
||||||
+ occ |= c->tags == 255 ? 0 : c->tags;
|
|
||||||
if (c->isurgent)
|
|
||||||
urg |= c->tags;
|
|
||||||
}
|
|
||||||
x = 0;
|
|
||||||
for (i = 0; i < LENGTH(tags); i++) {
|
|
||||||
+ /* do not draw vacant tags */
|
|
||||||
+ if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
w = TEXTW(tags[i]);
|
|
||||||
drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
|
|
||||||
drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
|
|
||||||
- if (occ & 1 << i)
|
|
||||||
- drw_rect(drw, x + boxs, boxs, boxw, boxw,
|
|
||||||
- m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
|
|
||||||
- urg & 1 << i);
|
|
||||||
x += w;
|
|
||||||
}
|
|
||||||
w = blw = TEXTW(m->ltsymbol);
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
From 2550931c66e10e667ce56a6761cbadd12b331c52 Mon Sep 17 00:00:00 2001
|
|
||||||
From: bakkeby <bakkeby@gmail.com>
|
|
||||||
Date: Mon, 10 Aug 2020 16:45:00 +0200
|
|
||||||
Subject: [PATCH] Steam patch
|
|
||||||
|
|
||||||
Steam, and steam windows (games), trigger a ConfigureNotify request every time the window
|
|
||||||
gets focus. More so, the configure event passed along from Steam tends to have the wrong
|
|
||||||
x and y coordinates which can make the window, if floating, jump around the screen.
|
|
||||||
|
|
||||||
This patch works around this age-old issue by ignoring the x and y co-ordinates for
|
|
||||||
ConfigureNotify requests relating to Steam windows.
|
|
||||||
---
|
|
||||||
dwm.c | 20 +++++++++++++-------
|
|
||||||
1 file changed, 13 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/dwm.c b/dwm.c
|
|
||||||
index 4465af1..598d36d 100644
|
|
||||||
--- a/dwm.c
|
|
||||||
+++ b/dwm.c
|
|
||||||
@@ -93,6 +93,7 @@ struct Client {
|
|
||||||
int bw, oldbw;
|
|
||||||
unsigned int tags;
|
|
||||||
int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
|
|
||||||
+ int issteam;
|
|
||||||
Client *next;
|
|
||||||
Client *snext;
|
|
||||||
Monitor *mon;
|
|
||||||
@@ -291,6 +292,9 @@ applyrules(Client *c)
|
|
||||||
class = ch.res_class ? ch.res_class : broken;
|
|
||||||
instance = ch.res_name ? ch.res_name : broken;
|
|
||||||
|
|
||||||
+ if (strstr(class, "Steam") || strstr(class, "steam_app_"))
|
|
||||||
+ c->issteam = 1;
|
|
||||||
+
|
|
||||||
for (i = 0; i < LENGTH(rules); i++) {
|
|
||||||
r = &rules[i];
|
|
||||||
if ((!r->title || strstr(c->name, r->title))
|
|
||||||
@@ -588,13 +592,15 @@ configurerequest(XEvent *e)
|
|
||||||
c->bw = ev->border_width;
|
|
||||||
else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
|
|
||||||
m = c->mon;
|
|
||||||
- if (ev->value_mask & CWX) {
|
|
||||||
- c->oldx = c->x;
|
|
||||||
- c->x = m->mx + ev->x;
|
|
||||||
- }
|
|
||||||
- if (ev->value_mask & CWY) {
|
|
||||||
- c->oldy = c->y;
|
|
||||||
- c->y = m->my + ev->y;
|
|
||||||
+ if (!c->issteam) {
|
|
||||||
+ if (ev->value_mask & CWX) {
|
|
||||||
+ c->oldx = c->x;
|
|
||||||
+ c->x = m->mx + ev->x;
|
|
||||||
+ }
|
|
||||||
+ if (ev->value_mask & CWY) {
|
|
||||||
+ c->oldy = c->y;
|
|
||||||
+ c->y = m->my + ev->y;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
if (ev->value_mask & CWWidth) {
|
|
||||||
c->oldw = c->w;
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
From bb3259fd727ae751abb33364e91d73ab1bcda4da Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mateus Auler <mateusauler@protonmail.com>
|
|
||||||
Date: Sun, 19 Jul 2020 18:03:58 -0300
|
|
||||||
Subject: [PATCH] Fixed issue where when moving a client to a different
|
|
||||||
monitor, it would incorrectly check the client's previous monitor instead of
|
|
||||||
its current one to determine if the gaps and border should be drawn.
|
|
||||||
|
|
||||||
---
|
|
||||||
config.def.h | 1 +
|
|
||||||
dwm.c | 36 ++++++++++++++++++++++++++++++------
|
|
||||||
2 files changed, 31 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/config.def.h b/config.def.h
|
|
||||||
index 1c0b587..b11471d 100644
|
|
||||||
--- a/config.def.h
|
|
||||||
+++ b/config.def.h
|
|
||||||
@@ -2,6 +2,7 @@
|
|
||||||
|
|
||||||
/* appearance */
|
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
|
||||||
+static const unsigned int gappx = 6; /* gaps between windows */
|
|
||||||
static const unsigned int snap = 32; /* snap pixel */
|
|
||||||
static const int showbar = 1; /* 0 means no bar */
|
|
||||||
static const int topbar = 1; /* 0 means bottom bar */
|
|
||||||
diff --git a/dwm.c b/dwm.c
|
|
||||||
index 9fd0286..79703b3 100644
|
|
||||||
--- a/dwm.c
|
|
||||||
+++ b/dwm.c
|
|
||||||
@@ -52,8 +52,8 @@
|
|
||||||
#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
|
|
||||||
#define LENGTH(X) (sizeof X / sizeof X[0])
|
|
||||||
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
|
|
||||||
-#define WIDTH(X) ((X)->w + 2 * (X)->bw)
|
|
||||||
-#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
|
|
||||||
+#define WIDTH(X) ((X)->w + 2 * (X)->bw + gappx)
|
|
||||||
+#define HEIGHT(X) ((X)->h + 2 * (X)->bw + gappx)
|
|
||||||
#define TAGMASK ((1 << LENGTH(tags)) - 1)
|
|
||||||
#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
|
|
||||||
|
|
||||||
@@ -1277,12 +1277,36 @@ void
|
|
||||||
resizeclient(Client *c, int x, int y, int w, int h)
|
|
||||||
{
|
|
||||||
XWindowChanges wc;
|
|
||||||
+ unsigned int n;
|
|
||||||
+ unsigned int gapoffset;
|
|
||||||
+ unsigned int gapincr;
|
|
||||||
+ Client *nbc;
|
|
||||||
|
|
||||||
- c->oldx = c->x; c->x = wc.x = x;
|
|
||||||
- c->oldy = c->y; c->y = wc.y = y;
|
|
||||||
- c->oldw = c->w; c->w = wc.width = w;
|
|
||||||
- c->oldh = c->h; c->h = wc.height = h;
|
|
||||||
wc.border_width = c->bw;
|
|
||||||
+
|
|
||||||
+ /* Get number of clients for the client's monitor */
|
|
||||||
+ for (n = 0, nbc = nexttiled(c->mon->clients); nbc; nbc = nexttiled(nbc->next), n++);
|
|
||||||
+
|
|
||||||
+ /* Do nothing if layout is floating */
|
|
||||||
+ if (c->isfloating || c->mon->lt[c->mon->sellt]->arrange == NULL) {
|
|
||||||
+ gapincr = gapoffset = 0;
|
|
||||||
+ } else {
|
|
||||||
+ /* Remove border and gap if layout is monocle or only one client */
|
|
||||||
+ if (c->mon->lt[c->mon->sellt]->arrange == monocle || n == 1) {
|
|
||||||
+ gapoffset = 0;
|
|
||||||
+ gapincr = -2 * borderpx;
|
|
||||||
+ wc.border_width = 0;
|
|
||||||
+ } else {
|
|
||||||
+ gapoffset = gappx;
|
|
||||||
+ gapincr = 2 * gappx;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ c->oldx = c->x; c->x = wc.x = x + gapoffset;
|
|
||||||
+ c->oldy = c->y; c->y = wc.y = y + gapoffset;
|
|
||||||
+ c->oldw = c->w; c->w = wc.width = w - gapincr;
|
|
||||||
+ c->oldh = c->h; c->h = wc.height = h - gapincr;
|
|
||||||
+
|
|
||||||
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
|
|
||||||
configure(c);
|
|
||||||
XSync(dpy, False);
|
|
||||||
--
|
|
||||||
2.27.0
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user