feat: new metaws options

This commit is contained in:
Arthur Khachaturov 2024-08-01 18:39:11 +03:00
parent b08fc7c079
commit 8fe685e02e
No known key found for this signature in database
GPG key ID: CAC2B7EB6DF45D55
2 changed files with 50 additions and 17 deletions

View file

@ -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
View file

@ -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);
} }