feat: new metaws options
This commit is contained in:
parent
b08fc7c079
commit
8fe685e02e
2 changed files with 50 additions and 17 deletions
26
config.h
26
config.h
|
@ -34,7 +34,7 @@ static const unsigned int alphas[][3] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* tagging */
|
/* tagging */
|
||||||
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "", "" };
|
||||||
static const char *metaworkspaces[] = { "1", "2", "3", "4" };
|
static const char *metaworkspaces[] = { "1", "2", "3", "4" };
|
||||||
|
|
||||||
static const Rule rules[] = {
|
static const Rule rules[] = {
|
||||||
|
@ -71,12 +71,13 @@ static const Layout layouts[] = {
|
||||||
/* key definitions */
|
/* key definitions */
|
||||||
#define MODKEY Mod4Mask
|
#define MODKEY Mod4Mask
|
||||||
#define TAGKEYS(KEY,TAG) \
|
#define TAGKEYS(KEY,TAG) \
|
||||||
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
|
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
|
||||||
{ MODKEY|ShiftMask, KEY, tagview, {.ui = 1 << TAG} }, \
|
{ MODKEY|ShiftMask, KEY, tagview, {.ui = 1 << TAG} }, \
|
||||||
{ MODKEY|ControlMask, KEY, tag, {.ui = 1 << TAG} }, \
|
{ MODKEY|ControlMask, KEY, tag, {.ui = 1 << TAG} }, \
|
||||||
{ MODKEY|Mod1Mask, KEY, toggletag, {.ui = 1 << TAG} }, \
|
{ MODKEY|Mod1Mask, KEY, toggletag, {.ui = 1 << TAG} }, \
|
||||||
{ MODKEY|ControlMask|ShiftMask, KEY, toggleview, {.ui = 1 << TAG} }, \
|
{ MODKEY|ControlMask|ShiftMask, KEY, toggleview, {.ui = 1 << TAG} }, \
|
||||||
{ MODKEY|Mod1Mask|ControlMask, KEY, tagmetaws, {.i = TAG} },
|
{ MODKEY|Mod1Mask|ControlMask, KEY, tagmetaws, {.i = TAG} }, \
|
||||||
|
{ MODKEY|Mod1Mask|ShiftMask|ControlMask, KEY, tagviewmetaws, {.i = TAG} },
|
||||||
|
|
||||||
#define SHCMD(...) { .v = (const char*[]){ __VA_ARGS__, NULL } }
|
#define SHCMD(...) { .v = (const char*[]){ __VA_ARGS__, NULL } }
|
||||||
|
|
||||||
|
@ -116,11 +117,14 @@ static const Key keys[] = {
|
||||||
{ MODKEY|ControlMask, XK_p, invertdir, {0} },
|
{ MODKEY|ControlMask, XK_p, invertdir, {0} },
|
||||||
|
|
||||||
// metaws
|
// metaws
|
||||||
{ MODKEY, XK_Tab, traversemetaws, {.i = +1} },
|
{ MODKEY|Mod1Mask, XK_i, traversemetaws, {.i = +1} },
|
||||||
{ MODKEY|ShiftMask, XK_Tab, traversemetaws, {.i = -1} },
|
{ MODKEY|Mod1Mask, XK_u, traversemetaws, {.i = -1} },
|
||||||
{ MODKEY|Mod1Mask, XK_i, movemetaws, {.i = +1} },
|
|
||||||
{ MODKEY|Mod1Mask, XK_u, movemetaws, {.i = -1} },
|
|
||||||
{ MODKEY|Mod1Mask, XK_m, tagmetaws, {.i = -1} },
|
{ MODKEY|Mod1Mask, XK_m, tagmetaws, {.i = -1} },
|
||||||
|
{ MODKEY|ControlMask|Mod1Mask, XK_i, moveviewmetaws, {.i = +1} },
|
||||||
|
{ MODKEY|ControlMask|Mod1Mask, XK_u, moveviewmetaws, {.i = -1} },
|
||||||
|
|
||||||
|
{ MODKEY|ShiftMask|ControlMask|Mod1Mask, XK_i, movemetaws, {.i = +1} },
|
||||||
|
{ MODKEY|ShiftMask|ControlMask|Mod1Mask, XK_u, movemetaws, {.i = -1} },
|
||||||
|
|
||||||
// apps
|
// apps
|
||||||
{ MODKEY, XK_w, spawn, SHCMD("firefox") },
|
{ MODKEY, XK_w, spawn, SHCMD("firefox") },
|
||||||
|
|
41
dwm.c
41
dwm.c
|
@ -94,6 +94,7 @@ typedef struct Client Client;
|
||||||
struct Client {
|
struct Client {
|
||||||
char name[256];
|
char name[256];
|
||||||
float mina, maxa;
|
float mina, maxa;
|
||||||
|
int mwpin;
|
||||||
float cfact;
|
float cfact;
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
int oldx, oldy, oldw, oldh;
|
int oldx, oldy, oldw, oldh;
|
||||||
|
@ -206,6 +207,7 @@ static void monocle(Monitor *m);
|
||||||
static void motionnotify(XEvent *e);
|
static void motionnotify(XEvent *e);
|
||||||
static void movemouse(const Arg *arg);
|
static void movemouse(const Arg *arg);
|
||||||
static void movemetaws(const Arg *arg);
|
static void movemetaws(const Arg *arg);
|
||||||
|
static void moveviewmetaws(const Arg *arg);
|
||||||
static Client *nexttiled(Client *c);
|
static Client *nexttiled(Client *c);
|
||||||
static void pop(Client *c);
|
static void pop(Client *c);
|
||||||
static void propertynotify(XEvent *e);
|
static void propertynotify(XEvent *e);
|
||||||
|
@ -234,6 +236,7 @@ static int solitary(Client *c);
|
||||||
static void spawn(const Arg *arg);
|
static void spawn(const Arg *arg);
|
||||||
static void tag(const Arg *arg);
|
static void tag(const Arg *arg);
|
||||||
static void tagmetaws(const Arg *arg);
|
static void tagmetaws(const Arg *arg);
|
||||||
|
static void tagviewmetaws(const Arg *arg);
|
||||||
static void tagview(const Arg *arg);
|
static void tagview(const Arg *arg);
|
||||||
static void tagmon(const Arg *arg);
|
static void tagmon(const Arg *arg);
|
||||||
static void togglebar(const Arg *arg);
|
static void togglebar(const Arg *arg);
|
||||||
|
@ -1319,6 +1322,14 @@ movemetaws(const Arg *arg)
|
||||||
tagmetaws(&a);
|
tagmetaws(&a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
moveviewmetaws(const Arg *arg)
|
||||||
|
{
|
||||||
|
const Arg a = {.i = (metaws + arg->i + LENGTH(metaworkspaces)) % LENGTH(metaworkspaces)};
|
||||||
|
tagmetaws(&a);
|
||||||
|
viewmetaws(&a);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
movemouse(const Arg *arg)
|
movemouse(const Arg *arg)
|
||||||
{
|
{
|
||||||
|
@ -1605,7 +1616,7 @@ scan(void)
|
||||||
void
|
void
|
||||||
sendmon(Client *c, Monitor *m)
|
sendmon(Client *c, Monitor *m)
|
||||||
{
|
{
|
||||||
if (c->mon == m)
|
if (c->mon == m || c->mwpin)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
unfocus(c, 1);
|
unfocus(c, 1);
|
||||||
|
@ -1914,8 +1925,13 @@ spawn(const Arg *arg)
|
||||||
void
|
void
|
||||||
tag(const Arg *arg)
|
tag(const Arg *arg)
|
||||||
{
|
{
|
||||||
if (selmon->sel && arg->ui & TAGMASK) {
|
int i;
|
||||||
selmon->sel->tags[metaws] = arg->ui & TAGMASK;
|
Client *c = selmon->sel;
|
||||||
|
if (c && arg->ui & TAGMASK) {
|
||||||
|
if (!c->mwpin)
|
||||||
|
c->tags[metaws] = arg->ui & TAGMASK;
|
||||||
|
else for(i = 0; i < LENGTH(metaworkspaces); ++i)
|
||||||
|
c->tags[i] = arg->ui & TAGMASK;
|
||||||
focus(NULL);
|
focus(NULL);
|
||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
@ -1930,10 +1946,13 @@ tagmetaws(const Arg *arg)
|
||||||
if (!selmon->sel || arg->i >= (int)LENGTH(metaworkspaces))
|
if (!selmon->sel || arg->i >= (int)LENGTH(metaworkspaces))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (arg->i == -1)
|
if (arg->i == -1) {
|
||||||
|
selmon->sel->mwpin = 1;
|
||||||
for (i = 0; i < LENGTH(metaworkspaces); ++i)
|
for (i = 0; i < LENGTH(metaworkspaces); ++i)
|
||||||
selmon->sel->tags[i] = selmon->sel->tags[metaws];
|
selmon->sel->tags[i] = selmon->sel->tags[metaws];
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
|
selmon->sel->mwpin = 0;
|
||||||
ot = selmon->sel->tags[metaws];
|
ot = selmon->sel->tags[metaws];
|
||||||
for (i = 0; i < LENGTH(metaworkspaces); ++i)
|
for (i = 0; i < LENGTH(metaworkspaces); ++i)
|
||||||
selmon->sel->tags[i] = 0;
|
selmon->sel->tags[i] = 0;
|
||||||
|
@ -1944,6 +1963,13 @@ tagmetaws(const Arg *arg)
|
||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tagviewmetaws(const Arg *arg)
|
||||||
|
{
|
||||||
|
tagmetaws(arg);
|
||||||
|
viewmetaws(arg);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
tagmon(const Arg *arg)
|
tagmon(const Arg *arg)
|
||||||
{
|
{
|
||||||
|
@ -2007,13 +2033,16 @@ togglefullscr(const Arg *arg)
|
||||||
void
|
void
|
||||||
toggletag(const Arg *arg)
|
toggletag(const Arg *arg)
|
||||||
{
|
{
|
||||||
unsigned int newtags;
|
unsigned int newtags, i;
|
||||||
|
|
||||||
if (!selmon->sel)
|
if (!selmon->sel)
|
||||||
return;
|
return;
|
||||||
newtags = selmon->sel->tags[metaws] ^ (arg->ui & TAGMASK);
|
newtags = selmon->sel->tags[metaws] ^ (arg->ui & TAGMASK);
|
||||||
if (newtags) {
|
if (newtags) {
|
||||||
selmon->sel->tags[metaws] = newtags;
|
if (!selmon->sel->mwpin)
|
||||||
|
selmon->sel->tags[metaws] = newtags;
|
||||||
|
else for(i = 0; i < LENGTH(metaworkspaces); ++i)
|
||||||
|
selmon->sel->tags[i] = newtags;
|
||||||
focus(NULL);
|
focus(NULL);
|
||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue