summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2020-09-26 12:42:56 +0200
committerbakkeby <[email protected]>2020-09-26 12:42:56 +0200
commit76292ba325278a38bf8a486b118468a7c6e151c2 (patch)
treec9c833dba217ec1350d1104074290bd04455c84d
parentd906aa7a24071750bc0c6bb94ef3b6c8f38db115 (diff)
downloaddwm-flexipatch-76292ba325278a38bf8a486b118468a7c6e151c2.tar.gz
dwm-flexipatch-76292ba325278a38bf8a486b118468a7c6e151c2.zip
scratchpads: enhancing scratchpad by allowing arbitrary clients to be added to (and removed from) each scratchpad area
-rw-r--r--config.def.h10
-rw-r--r--patch/scratchpad.c75
-rw-r--r--patch/scratchpad.h2
3 files changed, 55 insertions, 32 deletions
diff --git a/config.def.h b/config.def.h
index 454f0cb..839ac26 100644
--- a/config.def.h
+++ b/config.def.h
@@ -305,13 +305,9 @@ static const char *const autostart[] = {
#if SCRATCHPADS_PATCH
const char *spcmd1[] = {"st", "-n", "spterm", "-g", "120x34", NULL };
-const char *spcmd2[] = {"st", "-n", "spfm", "-g", "144x41", "-e", "ranger", NULL };
-const char *spcmd3[] = {"keepassxc", NULL };
static Sp scratchpads[] = {
/* name cmd */
{"spterm", spcmd1},
- {"spranger", spcmd2},
- {"keepassxc", spcmd3},
};
#endif // SCRATCHPADS_PATCH
@@ -395,8 +391,6 @@ static const Rule rules[] = {
RULE(.class = "Firefox", .tags = 1 << 7)
#if SCRATCHPADS_PATCH
RULE(.instance = "spterm", .tags = SPTAG(0), .isfloating = 1)
- RULE(.instance = "spfm", .tags = SPTAG(1), .isfloating = 1)
- RULE(.instance = "keepassxc", .tags = SPTAG(2))
#endif // SCRATCHPADS_PATCH
};
@@ -903,8 +897,8 @@ static Key keys[] = {
#endif // NO_MOD_BUTTONS_PATCH
#if SCRATCHPADS_PATCH
{ MODKEY, XK_grave, togglescratch, {.ui = 0 } },
- { MODKEY|ControlMask, XK_grave, togglescratch, {.ui = 1 } },
- { MODKEY|ShiftMask, XK_grave, togglescratch, {.ui = 2 } },
+ { MODKEY|ControlMask, XK_grave, setscratch, {.ui = 0 } },
+ { MODKEY|ShiftMask, XK_grave, removescratch, {.ui = 0 } },
#endif // SCRATCHPADS_PATCH
#if UNFLOATVISIBLE_PATCH
{ MODKEY|Mod4Mask, XK_space, unfloatvisible, {0} },
diff --git a/patch/scratchpad.c b/patch/scratchpad.c
index 5813b6f..2034d0d 100644
--- a/patch/scratchpad.c
+++ b/patch/scratchpad.c
@@ -1,45 +1,72 @@
void
+removescratch(const Arg *arg)
+{
+ Client *c = selmon->sel;
+ if (!c)
+ return;
+ unsigned int scratchtag = SPTAG(arg->ui);
+ c->tags = c->mon->tagset[c->mon->seltags] ^ scratchtag;
+ arrange(c->mon);
+}
+
+void
+setscratch(const Arg *arg)
+{
+ Client *c = selmon->sel;
+ if (!c)
+ return;
+ unsigned int scratchtag = SPTAG(arg->ui);
+ c->tags = scratchtag;
+ arrange(c->mon);
+}
+
+void
togglescratch(const Arg *arg)
{
- Client *c = NULL;
+ Client *c = NULL, *next = NULL, *found = NULL;
Monitor *mon;
- unsigned int found = 0;
unsigned int scratchtag = SPTAG(arg->ui);
- unsigned int newtagset;
+ unsigned int newtagset = 0;
int nh = 0, nw = 0;
Arg sparg = {.v = scratchpads[arg->ui].cmd};
- for (mon = mons; mon && !found; mon = mon->next)
- for (c = mon->clients; c && !(found = c->tags & scratchtag); c = c->next);
+ for (mon = mons; mon; mon = mon->next) {
+ for (c = mon->clients; c; c = next) {
+ next = c->next;
+ if (!(c->tags & scratchtag))
+ continue;
- if (found) {
+ found = c;
- if (HIDDEN(c)) {
- XMapWindow(dpy, c->win);
- setclientstate(c, NormalState);
- newtagset = 0;
- } else
- newtagset = selmon->tagset[selmon->seltags] ^ scratchtag;
+ if (HIDDEN(c)) {
+ XMapWindow(dpy, c->win);
+ setclientstate(c, NormalState);
+ newtagset = 0;
+ } else
+ newtagset = selmon->tagset[selmon->seltags] ^ scratchtag;
- if (c->mon != selmon) {
- if (c->mon->tagset[c->mon->seltags] & SPTAGMASK)
- c->mon->tagset[c->mon->seltags] ^= scratchtag;
- if (c->w > selmon->ww)
- nw = selmon->ww - c->bw * 2;
- if (c->h > selmon->wh)
- nh = selmon->wh - c->bw * 2;
- if (nw > 0 || nh > 0)
- resizeclient(c, c->x, c->y, nw ? nw : c->w, nh ? nh : c->h);
- sendmon(c, selmon);
+ if (c->mon != selmon) {
+ if (c->mon->tagset[c->mon->seltags] & SPTAGMASK)
+ c->mon->tagset[c->mon->seltags] ^= scratchtag;
+ if (c->w > selmon->ww)
+ nw = selmon->ww - c->bw * 2;
+ if (c->h > selmon->wh)
+ nh = selmon->wh - c->bw * 2;
+ if (nw > 0 || nh > 0)
+ resizeclient(c, c->x, c->y, nw ? nw : c->w, nh ? nh : c->h);
+ sendmon(c, selmon);
+ }
}
+ }
+ if (found) {
if (newtagset) {
selmon->tagset[selmon->seltags] = newtagset;
focus(NULL);
arrange(selmon);
}
- if (ISVISIBLE(c)) {
- focus(c);
+ if (ISVISIBLE(found)) {
+ focus(found);
restack(selmon);
}
} else {
diff --git a/patch/scratchpad.h b/patch/scratchpad.h
index 3142cdf..42e592b 100644
--- a/patch/scratchpad.h
+++ b/patch/scratchpad.h
@@ -3,4 +3,6 @@ typedef struct {
const void *cmd;
} Sp;
+static void removescratch(const Arg *arg);
+static void setscratch(const Arg *arg);
static void togglescratch(const Arg *arg); \ No newline at end of file