commit d37d04ef324c788258a5c16a1593ab2d77bcfc68
parent 2292f86d7fb861a22aa5f076a82453ab6927e54b
Author: Dylan Araps <dylan.araps@gmail.com>
Date: Sun, 24 Nov 2019 14:24:28 +0000
Merge branch 'master' of github.com:dylanaraps/sowm
Diffstat:
2 files changed, 135 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
@@ -17,7 +17,7 @@ An itsy bitsy floating window manager (*220~ sloc / 24kb compiled!*).
- All windows die on exit.
- No window borders.
- [No ICCCM](https://web.archive.org/web/20190617214524/https://raw.githubusercontent.com/kfish/xsel/1a1c5edf0dc129055f7764c666da2dd468df6016/rant.txt).
-- No EMWH.
+- No EWMH.
- etc etc etc
diff --git a/patches/sowm-almost-tags-1.0.diff b/patches/sowm-almost-tags-1.0.diff
@@ -0,0 +1,134 @@
+diff -up a/config.def.h b/config.def.h
+--- a/config.def.h 2019-10-28 23:55:17.000000000 +0200
++++ b/config.def.h 2019-11-09 22:30:45.057057111 +0200
+@@ -32,16 +32,29 @@ static struct key keys[] = {
+
+ {MOD, XK_1, ws_go, {.i = 1}},
+ {MOD|ShiftMask, XK_1, win_to_ws, {.i = 1}},
++ {MOD|ControlMask,XK_1,ws_toggle, {.i = 1}},
++
+ {MOD, XK_2, ws_go, {.i = 2}},
+ {MOD|ShiftMask, XK_2, win_to_ws, {.i = 2}},
++ {MOD|ControlMask,XK_2,ws_toggle, {.i = 2}},
++
+ {MOD, XK_3, ws_go, {.i = 3}},
+ {MOD|ShiftMask, XK_3, win_to_ws, {.i = 3}},
++ {MOD|ControlMask,XK_3,ws_toggle, {.i = 3}},
++
+ {MOD, XK_4, ws_go, {.i = 4}},
+ {MOD|ShiftMask, XK_4, win_to_ws, {.i = 4}},
++ {MOD|ControlMask,XK_4,ws_toggle, {.i = 4}},
++
+ {MOD, XK_5, ws_go, {.i = 5}},
+ {MOD|ShiftMask, XK_5, win_to_ws, {.i = 5}},
++ {MOD|ControlMask,XK_5,ws_toggle, {.i = 5}},
++
+ {MOD, XK_6, ws_go, {.i = 6}},
+ {MOD|ShiftMask, XK_6, win_to_ws, {.i = 6}},
++ {MOD|ControlMask,XK_6,ws_toggle, {.i = 6}},
++
++ {MOD, XK_0, ws_toggle_all, {.i = 0}},
+ };
+
+ #endif
+Only in b/: config.h
+Common subdirectories: a/patches and b/patches
+Only in b/: sowm
+diff -up a/sowm.c b/sowm.c
+--- a/sowm.c 2019-10-28 23:55:17.000000000 +0200
++++ b/sowm.c 2019-11-09 22:34:10.660379162 +0200
+@@ -45,11 +45,14 @@ static void win_kill();
+ static void win_next();
+ static void win_to_ws(const Arg arg);
+ static void ws_go(const Arg arg);
++static void ws_toggle(const Arg arg);
++static void ws_toggle_all(const Arg arg);
+ static int xerror() { return 0;}
+
+ static client *list = {0}, *ws_list[10] = {0}, *cur;
+ static int ws = 1, sw, sh, wx, wy;
+ static unsigned int ww, wh;
++static int is_ws_enabled[10] = {0}; /* +1 the amount of ws */
+
+ static Display *d;
+ static XButtonEvent mouse;
+@@ -212,24 +215,69 @@ void win_next() {
+ }
+
+ void ws_go(const Arg arg) {
+- int tmp = ws;
+-
+- if (arg.i == ws) return;
++ int i;
+
+ ws_save(ws);
+- ws_sel(arg.i);
+
+- for win XMapWindow(d, c->w);
+-
+- ws_sel(tmp);
+-
+- for win XUnmapWindow(d, c->w);
++ for (i = 1; i <= 9; i++) {
++ if (i != arg.i) {
++ ws_sel(i);
++ if (list) for win XUnmapWindow(d, c->w);
++ is_ws_enabled[i] = 0;
++ }
++ }
+
+ ws_sel(arg.i);
+
++ if (list) for win XMapWindow(d, c->w);
+ if (list) win_focus(list); else cur = 0;
+ }
+
++void
++ws_toggle(const Arg arg)
++{
++ int i, tmp = -1;
++
++ if (arg.i == ws) {
++ for (i = 1; i <= 9; i++) {
++ if (is_ws_enabled[i] && i != ws) {
++ tmp = i;
++ break;
++ }
++ }
++
++ if (tmp > 0)
++ ws_sel(tmp);
++ else
++ return;
++ }
++
++ tmp = ws;
++
++ ws_sel(arg.i);
++ if (is_ws_enabled[arg.i]) {
++ is_ws_enabled[arg.i] = 0;
++ if (list) for win XUnmapWindow(d, c->w);
++ } else {
++ is_ws_enabled[arg.i] = 1;
++ if (list) for win XMapWindow(d, c->w);
++ }
++ ws_sel(tmp);
++}
++
++void
++ws_toggle_all(const Arg arg)
++{
++ int i, tmp = ws;
++ for (i = 1; i <= 6; i++) {
++ ws_sel(i);
++ if (list) for win XMapWindow(d, c->w);
++ is_ws_enabled[i] = 1;
++ }
++ ws_sel(tmp);
++}
++
++
+ void configure_request(XEvent *e) {
+ XConfigureRequestEvent *ev = &e->xconfigurerequest;
+
+Only in b/: sowm.o