Hello tech@,
The attached patch adds a last-group command for cwm. Admittedly,
last-group probably makes sense only in sticky group mode; all it does
is switching to the last group.
I've been happily using this since last summer, I'm quite confident it's
not 100% broken.
I haven't added a default keybinding, so to test you have to add
something like this to your .cwmrc
bind-key 4-Tab group-last
Cheers!
Omar Polo
Index: calmwm.h
===================================================================
RCS file: /home/cvs/xenocara/app/cwm/calmwm.h,v
retrieving revision 1.375
diff -u -p -r1.375 calmwm.h
--- calmwm.h 16 Apr 2020 13:32:35 -0000 1.375
+++ calmwm.h 26 Aug 2020 12:18:50 -0000
@@ -214,6 +214,7 @@ struct screen_ctx {
struct region_q regionq;
struct group_q groupq;
struct group_ctx *group_active;
+ int last_group;
Colormap colormap;
Visual *visual;
struct {
@@ -501,6 +502,7 @@ void
kbfunc_client_toggle_group(void
void kbfunc_client_movetogroup(void *, struct cargs *);
void kbfunc_group_toggle(void *, struct cargs *);
void kbfunc_group_only(void *, struct cargs *);
+void kbfunc_group_last(void *, struct cargs *);
void kbfunc_group_close(void *, struct cargs *);
void kbfunc_group_cycle(void *, struct cargs *);
void kbfunc_group_toggle_all(void *, struct cargs *);
Index: conf.c
===================================================================
RCS file: /home/cvs/xenocara/app/cwm/conf.c,v
retrieving revision 1.252
diff -u -p -r1.252 conf.c
--- conf.c 16 Apr 2020 13:32:35 -0000 1.252
+++ conf.c 26 Aug 2020 12:29:53 -0000
@@ -139,6 +139,7 @@ static const struct {
{ FUNC_SC(group-cycle, group_cycle, (CWM_CYCLE_FORWARD)) },
{ FUNC_SC(group-rcycle, group_cycle, (CWM_CYCLE_REVERSE)) },
+ { FUNC_SC(group-last, group_last, 0) },
{ FUNC_SC(group-toggle-all, group_toggle_all, 0) },
{ FUNC_SC(group-toggle-1, group_toggle, 1) },
{ FUNC_SC(group-toggle-2, group_toggle, 2) },
Index: cwmrc.5
===================================================================
RCS file: /home/cvs/xenocara/app/cwm/cwmrc.5,v
retrieving revision 1.76
diff -u -p -r1.76 cwmrc.5
--- cwmrc.5 16 Apr 2020 13:32:35 -0000 1.76
+++ cwmrc.5 26 Aug 2020 18:12:24 -0000
@@ -273,6 +273,8 @@ menu.
Toggle visibility of group n, where n is 1-9.
.It group-only-[n]
Show only group n, where n is 1-9, hiding other groups.
+.It group-last
+Show only the last selected group
.It group-close-[n]
Close all windows in group n, where n is 1-9.
.It group-toggle-all
Index: group.c
===================================================================
RCS file: /home/cvs/xenocara/app/cwm/group.c,v
retrieving revision 1.137
diff -u -p -r1.137 group.c
--- group.c 27 Feb 2020 14:56:39 -0000 1.137
+++ group.c 30 Aug 2020 17:01:11 -0000
@@ -215,6 +215,9 @@ group_only(struct screen_ctx *sc, int id
{
struct group_ctx *gc;
+ if (sc->group_active->num != idx)
+ sc->last_group = sc->group_active->num;
+
TAILQ_FOREACH(gc, &sc->groupq, entry) {
if (gc->num == idx)
group_show(gc);
Index: kbfunc.c
===================================================================
RCS file: /home/cvs/xenocara/app/cwm/kbfunc.c,v
retrieving revision 1.170
diff -u -p -r1.170 kbfunc.c
--- kbfunc.c 20 Mar 2020 18:50:08 -0000 1.170
+++ kbfunc.c 28 Aug 2020 06:45:50 -0000
@@ -479,6 +479,14 @@ kbfunc_group_only(void *ctx, struct carg
}
void
+kbfunc_group_last(void *ctx, struct cargs *cargs)
+{
+ struct screen_ctx *sc = ctx;
+
+ group_only(ctx, sc->last_group);
+}
+
+void
kbfunc_group_toggle(void *ctx, struct cargs *cargs)
{
group_toggle(ctx, cargs->flag);
Index: screen.c
===================================================================
RCS file: /home/cvs/xenocara/app/cwm/screen.c,v
retrieving revision 1.97
diff -u -p -r1.97 screen.c
--- screen.c 24 Mar 2020 14:47:29 -0000 1.97
+++ screen.c 30 Aug 2020 16:58:24 -0000
@@ -53,6 +53,7 @@ screen_init(int which)
sc->visual = DefaultVisual(X_Dpy, sc->which);
sc->cycling = 0;
sc->hideall = 0;
+ sc->last_group = 1;
conf_screen(sc);