Compare commits
No commits in common. "88316278946f21b7708f533e0bc12c0db71c310b" and "06868285d31e026119568ffeb17a5b43c4891ad0" have entirely different histories.
8831627894
...
06868285d3
|
@ -2,4 +2,3 @@ drw.o
|
||||||
dwm.o
|
dwm.o
|
||||||
dwm
|
dwm
|
||||||
util.o
|
util.o
|
||||||
dwmc
|
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -38,7 +38,7 @@ dist: clean
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
mkdir -p ${DESTDIR}${PREFIX}/bin
|
mkdir -p ${DESTDIR}${PREFIX}/bin
|
||||||
cp -f dwm dwmc ${DESTDIR}${PREFIX}/bin
|
cp -f dwm ${DESTDIR}${PREFIX}/bin
|
||||||
chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
|
chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
|
||||||
mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
||||||
sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
|
sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
|
||||||
|
|
5
README
5
README
|
@ -54,10 +54,5 @@ Customisations
|
||||||
|
|
||||||
* Custom configuration of config.h
|
* Custom configuration of config.h
|
||||||
* windows with title of 'WM_FORCE_FLOATING' are set to floating automatically.
|
* windows with title of 'WM_FORCE_FLOATING' are set to floating automatically.
|
||||||
* When moving window to a different tag, focus follows the destination tag.
|
|
||||||
* Merged patch: https://dwm.suckless.org/patches/bottomstack/dwm-bottomstack-6.1.diff
|
* Merged patch: https://dwm.suckless.org/patches/bottomstack/dwm-bottomstack-6.1.diff
|
||||||
* Merged patch: https://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.2.diff
|
* Merged patch: https://dwm.suckless.org/patches/hide_vacant_tags/dwm-hide_vacant_tags-6.2.diff
|
||||||
* Merged patch: https://dwm.suckless.org/patches/warp/dwm-warp-git-20160626-7af4d43.diff
|
|
||||||
* Merged patch: https://dwm.suckless.org/patches/dwmc/dwm-dwmc-6.2.diff
|
|
||||||
* Merged patch: https: //dwm.suckless.org/patches/cfacts/dwm-cfacts-6.2.diff
|
|
||||||
* Merged patch: https://dwm.suckless.org/patches/fibonacci/dwm-fibonacci-5.8.2.diff
|
|
||||||
|
|
76
config.def.h
76
config.def.h
|
@ -36,7 +36,6 @@ 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 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 */
|
||||||
|
|
||||||
#include "fibonacci.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 */
|
||||||
|
@ -44,8 +43,6 @@ static const Layout layouts[] = {
|
||||||
{ "[M]", monocle },
|
{ "[M]", monocle },
|
||||||
{ "TTT", bstack },
|
{ "TTT", bstack },
|
||||||
{ "===", bstackhoriz },
|
{ "===", bstackhoriz },
|
||||||
{ "[@]", spiral },
|
|
||||||
{ "[\\]", dwindle },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* key definitions */
|
/* key definitions */
|
||||||
|
@ -75,9 +72,6 @@ static Key keys[] = {
|
||||||
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
||||||
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
||||||
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
||||||
{ MODKEY|ShiftMask, XK_h, setcfact, {.f = +0.25} },
|
|
||||||
{ MODKEY|ShiftMask, XK_l, setcfact, {.f = -0.25} },
|
|
||||||
{ MODKEY|ShiftMask, XK_o, setcfact, {.f = 0.00} },
|
|
||||||
{ MODKEY, XK_Return, zoom, {0} },
|
{ MODKEY, XK_Return, zoom, {0} },
|
||||||
{ MODKEY, XK_Tab, view, {0} },
|
{ MODKEY, XK_Tab, view, {0} },
|
||||||
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
|
{ MODKEY|ShiftMask, XK_c, killclient, {0} },
|
||||||
|
@ -123,73 +117,3 @@ static Button buttons[] = {
|
||||||
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
|
||||||
setlayoutex(const Arg *arg)
|
|
||||||
{
|
|
||||||
setlayout(&((Arg) { .v = &layouts[arg->i] }));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
viewex(const Arg *arg)
|
|
||||||
{
|
|
||||||
view(&((Arg) { .ui = 1 << arg->ui }));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
viewall(const Arg *arg)
|
|
||||||
{
|
|
||||||
view(&((Arg){.ui = ~0}));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
toggleviewex(const Arg *arg)
|
|
||||||
{
|
|
||||||
toggleview(&((Arg) { .ui = 1 << arg->ui }));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
tagex(const Arg *arg)
|
|
||||||
{
|
|
||||||
tag(&((Arg) { .ui = 1 << arg->ui }));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
toggletagex(const Arg *arg)
|
|
||||||
{
|
|
||||||
toggletag(&((Arg) { .ui = 1 << arg->ui }));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
tagall(const Arg *arg)
|
|
||||||
{
|
|
||||||
tag(&((Arg){.ui = ~0}));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* signal definitions */
|
|
||||||
/* signum must be greater than 0 */
|
|
||||||
/* trigger signals using `xsetroot -name "fsignal:<signame> [<type> <value>]"` */
|
|
||||||
static Signal signals[] = {
|
|
||||||
/* signum function */
|
|
||||||
{ "focusstack", focusstack },
|
|
||||||
{ "setmfact", setmfact },
|
|
||||||
{ "togglebar", togglebar },
|
|
||||||
{ "incnmaster", incnmaster },
|
|
||||||
{ "togglefloating", togglefloating },
|
|
||||||
{ "focusmon", focusmon },
|
|
||||||
{ "tagmon", tagmon },
|
|
||||||
{ "zoom", zoom },
|
|
||||||
{ "view", view },
|
|
||||||
{ "viewall", viewall },
|
|
||||||
{ "viewex", viewex },
|
|
||||||
{ "toggleview", view },
|
|
||||||
{ "toggleviewex", toggleviewex },
|
|
||||||
{ "tag", tag },
|
|
||||||
{ "tagall", tagall },
|
|
||||||
{ "tagex", tagex },
|
|
||||||
{ "toggletag", tag },
|
|
||||||
{ "toggletagex", toggletagex },
|
|
||||||
{ "killclient", killclient },
|
|
||||||
{ "quit", quit },
|
|
||||||
{ "setlayout", setlayout },
|
|
||||||
{ "setlayoutex", setlayoutex },
|
|
||||||
};
|
|
||||||
|
|
14
config.h
14
config.h
|
@ -41,7 +41,6 @@ static const float mfact = 0.50; /* factor of master area size [0.05..0.95]
|
||||||
static const int nmaster = 1; /* number of clients in master area */
|
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 */
|
||||||
|
|
||||||
#include "fibonacci.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 */
|
||||||
|
@ -49,7 +48,6 @@ static const Layout layouts[] = {
|
||||||
{ "[M]", monocle },
|
{ "[M]", monocle },
|
||||||
{ "TTT", bstack },
|
{ "TTT", bstack },
|
||||||
{ "===", bstackhoriz },
|
{ "===", bstackhoriz },
|
||||||
{ "[@]", dwindle },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* key definitions */
|
/* key definitions */
|
||||||
|
@ -78,9 +76,6 @@ static Key keys[] = {
|
||||||
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
|
{ MODKEY, XK_i, incnmaster, {.i = +1 } },
|
||||||
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
{ MODKEY, XK_d, incnmaster, {.i = -1 } },
|
||||||
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
{ MODKEY, XK_h, setmfact, {.f = -0.05} },
|
||||||
{ MODKEY|ShiftMask, XK_h, setcfact, {.f = +0.25} },
|
|
||||||
{ MODKEY|ShiftMask, XK_l, setcfact, {.f = -0.25} },
|
|
||||||
{ MODKEY|ShiftMask, XK_o, setcfact, {.f = 0.00} },
|
|
||||||
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
{ MODKEY, XK_l, setmfact, {.f = +0.05} },
|
||||||
{ MODKEY, XK_Return, zoom, {0} },
|
{ MODKEY, XK_Return, zoom, {0} },
|
||||||
{ MODKEY, XK_Tab, view, {0} },
|
{ MODKEY, XK_Tab, view, {0} },
|
||||||
|
@ -90,7 +85,6 @@ static Key keys[] = {
|
||||||
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
|
||||||
{ MODKEY, XK_v, setlayout, {.v = &layouts[3]} },
|
{ MODKEY, XK_v, setlayout, {.v = &layouts[3]} },
|
||||||
{ MODKEY|ShiftMask, XK_v, setlayout, {.v = &layouts[4]} },
|
{ MODKEY|ShiftMask, XK_v, setlayout, {.v = &layouts[4]} },
|
||||||
{ MODKEY|ShiftMask, XK_f, setlayout, {.v = &layouts[5]} },
|
|
||||||
{ 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 } },
|
||||||
|
@ -128,11 +122,3 @@ static Button buttons[] = {
|
||||||
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
{ ClkTagBar, MODKEY, Button3, toggletag, {0} },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* signal definitions */
|
|
||||||
/* signum must be greater than 0 */
|
|
||||||
/* trigger signals using `xsetroot -name "fsignal:<signame> [<type> <value>]"` */
|
|
||||||
static Signal signals[] = {
|
|
||||||
/* signum function */
|
|
||||||
{ "focusstack", focusstack },
|
|
||||||
{ "focusmon", focusmon },
|
|
||||||
};
|
|
||||||
|
|
110
dwm.c
110
dwm.c
|
@ -87,7 +87,6 @@ typedef struct Client Client;
|
||||||
struct Client {
|
struct Client {
|
||||||
char name[256];
|
char name[256];
|
||||||
float mina, maxa;
|
float mina, maxa;
|
||||||
float cfact;
|
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
int oldx, oldy, oldw, oldh;
|
int oldx, oldy, oldw, oldh;
|
||||||
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
||||||
|
@ -107,11 +106,6 @@ typedef struct {
|
||||||
const Arg arg;
|
const Arg arg;
|
||||||
} Key;
|
} Key;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char * sig;
|
|
||||||
void (*func)(const Arg *);
|
|
||||||
} Signal;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *symbol;
|
const char *symbol;
|
||||||
void (*arrange)(Monitor *);
|
void (*arrange)(Monitor *);
|
||||||
|
@ -154,7 +148,6 @@ static void arrange(Monitor *m);
|
||||||
static void arrangemon(Monitor *m);
|
static void arrangemon(Monitor *m);
|
||||||
static void attach(Client *c);
|
static void attach(Client *c);
|
||||||
static void attachstack(Client *c);
|
static void attachstack(Client *c);
|
||||||
static int fake_signal(void);
|
|
||||||
static void buttonpress(XEvent *e);
|
static void buttonpress(XEvent *e);
|
||||||
static void checkotherwm(void);
|
static void checkotherwm(void);
|
||||||
static void cleanup(void);
|
static void cleanup(void);
|
||||||
|
@ -207,7 +200,6 @@ 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 setlayout(const Arg *arg);
|
static void setlayout(const Arg *arg);
|
||||||
static void setcfact(const Arg *arg);
|
|
||||||
static void setmfact(const Arg *arg);
|
static void setmfact(const Arg *arg);
|
||||||
static void setup(void);
|
static void setup(void);
|
||||||
static void seturgent(Client *c, int urg);
|
static void seturgent(Client *c, int urg);
|
||||||
|
@ -235,7 +227,6 @@ static void updatetitle(Client *c);
|
||||||
static void updatewindowtype(Client *c);
|
static void updatewindowtype(Client *c);
|
||||||
static void updatewmhints(Client *c);
|
static void updatewmhints(Client *c);
|
||||||
static void view(const Arg *arg);
|
static void view(const Arg *arg);
|
||||||
static void warp(const Client *c);
|
|
||||||
static Client *wintoclient(Window w);
|
static Client *wintoclient(Window w);
|
||||||
static Monitor *wintomon(Window w);
|
static Monitor *wintomon(Window w);
|
||||||
static int xerror(Display *dpy, XErrorEvent *ee);
|
static int xerror(Display *dpy, XErrorEvent *ee);
|
||||||
|
@ -843,7 +834,6 @@ focusmon(const Arg *arg)
|
||||||
unfocus(selmon->sel, 0);
|
unfocus(selmon->sel, 0);
|
||||||
selmon = m;
|
selmon = m;
|
||||||
focus(NULL);
|
focus(NULL);
|
||||||
warp(selmon->sel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1015,49 +1005,6 @@ keypress(XEvent *e)
|
||||||
keys[i].func(&(keys[i].arg));
|
keys[i].func(&(keys[i].arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
fake_signal(void)
|
|
||||||
{
|
|
||||||
char fsignal[256];
|
|
||||||
char indicator[9] = "fsignal:";
|
|
||||||
char str_sig[50];
|
|
||||||
char param[16];
|
|
||||||
int i, len_str_sig, n, paramn;
|
|
||||||
size_t len_fsignal, len_indicator = strlen(indicator);
|
|
||||||
Arg arg;
|
|
||||||
|
|
||||||
// Get root name property
|
|
||||||
if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) {
|
|
||||||
len_fsignal = strlen(fsignal);
|
|
||||||
|
|
||||||
// Check if this is indeed a fake signal
|
|
||||||
if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) {
|
|
||||||
paramn = sscanf(fsignal+len_indicator, "%s%n%s%n", str_sig, &len_str_sig, param, &n);
|
|
||||||
|
|
||||||
if (paramn == 1) arg = (Arg) {0};
|
|
||||||
else if (paramn > 2) return 1;
|
|
||||||
else if (strncmp(param, "i", n - len_str_sig) == 0)
|
|
||||||
sscanf(fsignal + len_indicator + n, "%i", &(arg.i));
|
|
||||||
else if (strncmp(param, "ui", n - len_str_sig) == 0)
|
|
||||||
sscanf(fsignal + len_indicator + n, "%u", &(arg.ui));
|
|
||||||
else if (strncmp(param, "f", n - len_str_sig) == 0)
|
|
||||||
sscanf(fsignal + len_indicator + n, "%f", &(arg.f));
|
|
||||||
else return 1;
|
|
||||||
|
|
||||||
// Check if a signal was found, and if so handle it
|
|
||||||
for (i = 0; i < LENGTH(signals); i++)
|
|
||||||
if (strncmp(str_sig, signals[i].sig, len_str_sig) == 0 && signals[i].func)
|
|
||||||
signals[i].func(&(arg));
|
|
||||||
|
|
||||||
// A fake signal was sent
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// No fake signal was sent, so proceed with update
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
killclient(const Arg *arg)
|
killclient(const Arg *arg)
|
||||||
{
|
{
|
||||||
|
@ -1089,7 +1036,6 @@ manage(Window w, XWindowAttributes *wa)
|
||||||
c->w = c->oldw = wa->width;
|
c->w = c->oldw = wa->width;
|
||||||
c->h = c->oldh = wa->height;
|
c->h = c->oldh = wa->height;
|
||||||
c->oldbw = wa->border_width;
|
c->oldbw = wa->border_width;
|
||||||
c->cfact = 1.0;
|
|
||||||
|
|
||||||
updatetitle(c);
|
updatetitle(c);
|
||||||
if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
|
if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
|
||||||
|
@ -1277,8 +1223,7 @@ propertynotify(XEvent *e)
|
||||||
XPropertyEvent *ev = &e->xproperty;
|
XPropertyEvent *ev = &e->xproperty;
|
||||||
|
|
||||||
if ((ev->window == root) && (ev->atom == XA_WM_NAME))
|
if ((ev->window == root) && (ev->atom == XA_WM_NAME))
|
||||||
if (!fake_signal())
|
updatestatus();
|
||||||
updatestatus();
|
|
||||||
else if (ev->state == PropertyDelete)
|
else if (ev->state == PropertyDelete)
|
||||||
return; /* ignore */
|
return; /* ignore */
|
||||||
else if ((c = wintoclient(ev->window))) {
|
else if ((c = wintoclient(ev->window))) {
|
||||||
|
@ -1429,8 +1374,6 @@ restack(Monitor *m)
|
||||||
}
|
}
|
||||||
XSync(dpy, False);
|
XSync(dpy, False);
|
||||||
while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
|
while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
|
||||||
if (m == selmon && (m->tagset[m->seltags] & m->sel->tags) && selmon->lt[selmon->sellt] != &layouts[2])
|
|
||||||
warp(m->sel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1575,23 +1518,6 @@ setlayout(const Arg *arg)
|
||||||
drawbar(selmon);
|
drawbar(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setcfact(const Arg *arg) {
|
|
||||||
float f;
|
|
||||||
Client *c;
|
|
||||||
|
|
||||||
c = selmon->sel;
|
|
||||||
|
|
||||||
if(!arg || !c || !selmon->lt[selmon->sellt]->arrange)
|
|
||||||
return;
|
|
||||||
f = arg->f + c->cfact;
|
|
||||||
if(arg->f == 0.0)
|
|
||||||
f = 1.0;
|
|
||||||
else if(f < 0.25 || f > 4.0)
|
|
||||||
return;
|
|
||||||
c->cfact = f;
|
|
||||||
arrange(selmon);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* arg > 1.0 will set mfact absolutely */
|
/* arg > 1.0 will set mfact absolutely */
|
||||||
void
|
void
|
||||||
setmfact(const Arg *arg)
|
setmfact(const Arg *arg)
|
||||||
|
@ -1756,15 +1682,9 @@ void
|
||||||
tile(Monitor *m)
|
tile(Monitor *m)
|
||||||
{
|
{
|
||||||
unsigned int i, n, h, mw, my, ty;
|
unsigned int i, n, h, mw, my, ty;
|
||||||
float mfacts = 0, sfacts = 0;
|
|
||||||
Client *c;
|
Client *c;
|
||||||
|
|
||||||
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) {
|
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
||||||
if (n < m->nmaster)
|
|
||||||
mfacts += c->cfact;
|
|
||||||
else
|
|
||||||
sfacts += c->cfact;
|
|
||||||
}
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1774,15 +1694,13 @@ tile(Monitor *m)
|
||||||
mw = m->ww;
|
mw = m->ww;
|
||||||
for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
|
for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
|
||||||
if (i < m->nmaster) {
|
if (i < m->nmaster) {
|
||||||
h = (m->wh - my) * (c->cfact / mfacts);
|
h = (m->wh - my) / (MIN(n, m->nmaster) - i);
|
||||||
resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
|
resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
|
||||||
my += HEIGHT(c);
|
my += HEIGHT(c);
|
||||||
mfacts -= c->cfact;
|
|
||||||
} else {
|
} else {
|
||||||
h = (m->wh - ty) / (n - i);
|
h = (m->wh - ty) / (n - i);
|
||||||
resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
|
resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
|
||||||
ty += HEIGHT(c);
|
ty += HEIGHT(c);
|
||||||
sfacts -= c->cfact;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2134,28 +2052,6 @@ view(const Arg *arg)
|
||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
warp(const Client *c)
|
|
||||||
{
|
|
||||||
int x, y;
|
|
||||||
|
|
||||||
if (!c) {
|
|
||||||
XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx + selmon->ww/2, selmon->wy + selmon->wh/2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!getrootptr(&x, &y) ||
|
|
||||||
(x > c->x - c->bw &&
|
|
||||||
y > c->y - c->bw &&
|
|
||||||
x < c->x + c->w + c->bw*2 &&
|
|
||||||
y < c->y + c->h + c->bw*2) ||
|
|
||||||
(y > c->mon->by && y < c->mon->by + bh) ||
|
|
||||||
(c->mon->topbar && !y))
|
|
||||||
return;
|
|
||||||
|
|
||||||
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
Client *
|
Client *
|
||||||
wintoclient(Window w)
|
wintoclient(Window w)
|
||||||
{
|
{
|
||||||
|
|
66
fibonacci.c
66
fibonacci.c
|
@ -1,66 +0,0 @@
|
||||||
void
|
|
||||||
fibonacci(Monitor *mon, int s) {
|
|
||||||
unsigned int i, n, nx, ny, nw, nh;
|
|
||||||
Client *c;
|
|
||||||
|
|
||||||
for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++);
|
|
||||||
if(n == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
nx = mon->wx;
|
|
||||||
ny = 0;
|
|
||||||
nw = mon->ww;
|
|
||||||
nh = mon->wh;
|
|
||||||
|
|
||||||
for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) {
|
|
||||||
if((i % 2 && nh / 2 > 2 * c->bw)
|
|
||||||
|| (!(i % 2) && nw / 2 > 2 * c->bw)) {
|
|
||||||
if(i < n - 1) {
|
|
||||||
if(i % 2)
|
|
||||||
nh /= 2;
|
|
||||||
else
|
|
||||||
nw /= 2;
|
|
||||||
if((i % 4) == 2 && !s)
|
|
||||||
nx += nw;
|
|
||||||
else if((i % 4) == 3 && !s)
|
|
||||||
ny += nh;
|
|
||||||
}
|
|
||||||
if((i % 4) == 0) {
|
|
||||||
if(s)
|
|
||||||
ny += nh;
|
|
||||||
else
|
|
||||||
ny -= nh;
|
|
||||||
}
|
|
||||||
else if((i % 4) == 1)
|
|
||||||
nx += nw;
|
|
||||||
else if((i % 4) == 2)
|
|
||||||
ny += nh;
|
|
||||||
else if((i % 4) == 3) {
|
|
||||||
if(s)
|
|
||||||
nx += nw;
|
|
||||||
else
|
|
||||||
nx -= nw;
|
|
||||||
}
|
|
||||||
if(i == 0)
|
|
||||||
{
|
|
||||||
if(n != 1)
|
|
||||||
nw = mon->ww * mon->mfact;
|
|
||||||
ny = mon->wy;
|
|
||||||
}
|
|
||||||
else if(i == 1)
|
|
||||||
nw = mon->ww - nw;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
dwindle(Monitor *mon) {
|
|
||||||
fibonacci(mon, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
spiral(Monitor *mon) {
|
|
||||||
fibonacci(mon, 0);
|
|
||||||
}
|
|
Loading…
Reference in New Issue