From fd1feec244c3d4db7bdb0cd566337b022b3905c7 Mon Sep 17 00:00:00 2001
From: oga
Date: Thu, 14 May 2009 16:24:04 +0000
Subject: Add a new command (currently no default keybindings for it),
 grouponly[1-9].

This works like the group select binding, but hides all other groups.

So, the people who've been complaining that they don't get "virtual
desktops" in cwm may want to try this out in cwmrc (from memory, untested):

---

#cwmrc

# add new windows to the current group
set sticky

# automatically sticky windows. xclock for now.
# to make more windows sticky use group_toggle to unset their group
autogroup 0 xclock

# make the group selection keys hide other groups, emulate virtual desktops
bind CM-1 grouponly1
bind CM-2 grouponly2
bind CM-3 grouponly3
bind CM-4 grouponly4
bind CM-5 grouponly5
bind CM-6 grouponly6
bind CM-7 grouponly7
bind CM-8 grouponly8
bind CM-9 grouponly9

---

mostly by sthen, tweaks from me.

ok todd@, "if it works i'm ok with it" okan@, ok sthen@
---
 calmwm.h |  4 +++-
 conf.c   | 11 ++++++++++-
 cwmrc.5  |  8 ++++++--
 group.c  | 19 ++++++++++++++++++-
 kbfunc.c |  8 +++++++-
 5 files changed, 44 insertions(+), 6 deletions(-)

diff --git a/calmwm.h b/calmwm.h
index f512ebc..3ea85c8 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -15,7 +15,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $Id: calmwm.h,v 1.84 2009/04/15 14:01:45 okan Exp $
+ * $Id: calmwm.h,v 1.85 2009/05/14 16:24:04 oga Exp $
  */
 
 #ifndef _CALMWM_H_
@@ -438,6 +438,8 @@ void			 kbfunc_cmdexec(struct client_ctx *, union arg *);
 void			 kbfunc_client_label(struct client_ctx *, union arg *);
 void			 kbfunc_client_delete(struct client_ctx *, union arg *);
 void			 kbfunc_client_group(struct client_ctx *, union arg *);
+void			 kbfunc_client_grouponly(struct client_ctx *,
+			     union arg *);
 void			 kbfunc_client_cyclegroup(struct client_ctx *,
 			     union arg *);
 void			 kbfunc_client_nogroup(struct client_ctx *,
diff --git a/conf.c b/conf.c
index ac4097f..dd4b597 100644
--- a/conf.c
+++ b/conf.c
@@ -15,7 +15,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $Id: conf.c,v 1.58 2009/05/04 19:13:33 okan Exp $
+ * $Id: conf.c,v 1.59 2009/05/14 16:24:04 oga Exp $
  */
 
 #include "headers.h"
@@ -272,6 +272,15 @@ struct {
 	{ "group7", kbfunc_client_group, 0, {.i = 7} },
 	{ "group8", kbfunc_client_group, 0, {.i = 8} },
 	{ "group9", kbfunc_client_group, 0, {.i = 9} },
+	{ "grouponly1", kbfunc_client_grouponly, 0, {.i = 1} },
+	{ "grouponly2", kbfunc_client_grouponly, 0, {.i = 2} },
+	{ "grouponly3", kbfunc_client_grouponly, 0, {.i = 3} },
+	{ "grouponly4", kbfunc_client_grouponly, 0, {.i = 4} },
+	{ "grouponly5", kbfunc_client_grouponly, 0, {.i = 5} },
+	{ "grouponly6", kbfunc_client_grouponly, 0, {.i = 6} },
+	{ "grouponly7", kbfunc_client_grouponly, 0, {.i = 7} },
+	{ "grouponly8", kbfunc_client_grouponly, 0, {.i = 8} },
+	{ "grouponly9", kbfunc_client_grouponly, 0, {.i = 9} },
 	{ "nogroup", kbfunc_client_nogroup, 0, {0} },
 	{ "cyclegroup", kbfunc_client_cyclegroup, 0, {.i = CWM_CYCLEGROUP} },
 	{ "rcyclegroup", kbfunc_client_cyclegroup, 0, {.i = CWM_RCYCLEGROUP} },
diff --git a/cwmrc.5 b/cwmrc.5
index 7b822a9..e6d3388 100644
--- a/cwmrc.5
+++ b/cwmrc.5
@@ -1,4 +1,4 @@
-.\"	$OpenBSD: cwmrc.5,v 1.22 2009/05/04 22:01:35 okan Exp $
+.\"	$OpenBSD: cwmrc.5,v 1.23 2009/05/14 16:24:04 oga Exp $
 .\"
 .\" Copyright (c) 2004,2005 Marius Aamodt Eriksen <marius@monkey.org>
 .\"
@@ -14,7 +14,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: May 4 2009 $
+.Dd $Mdocdate: May 14 2009 $
 .Dt CWMRC 5
 .Os
 .Sh NAME
@@ -242,6 +242,10 @@ Launch
 menu.
 .It group[n]
 Select group n, where n is 1-9.
+.It grouponly[n]
+Like
+.Ar group[n]
+but also hides the other groups.
 .It nogroup
 Select all groups.
 .It grouptoggle
diff --git a/group.c b/group.c
index ffe6b5f..fb7b7b7 100644
--- a/group.c
+++ b/group.c
@@ -16,7 +16,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $Id: group.c,v 1.23 2009/01/27 00:42:53 oga Exp $
+ * $Id: group.c,v 1.24 2009/05/14 16:24:04 oga Exp $
  */
 
 #include "headers.h"
@@ -213,6 +213,23 @@ group_hidetoggle(int idx)
 	}
 }
 
+void
+group_only(int idx)
+{
+	int	 i;
+
+	if (idx < 0 || idx >= CALMWM_NGROUPS)
+		err(1, "group_only: index out of range (%d)", idx);
+
+	for (i = 0; i < CALMWM_NGROUPS; i++) {
+		if (i == idx) {
+			_group_show(&Groups[i]);
+		} else {
+			_group_hide(&Groups[i]);
+		}
+	}
+}
+
 /*
  * Cycle through active groups.  If none exist, then just stay put.
  */
diff --git a/kbfunc.c b/kbfunc.c
index 48eea82..04ee7f4 100644
--- a/kbfunc.c
+++ b/kbfunc.c
@@ -15,7 +15,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $Id: kbfunc.c,v 1.36 2009/02/07 21:07:00 martynas Exp $
+ * $Id: kbfunc.c,v 1.37 2009/05/14 16:24:04 oga Exp $
  */
 
 #include <paths.h>
@@ -438,6 +438,12 @@ kbfunc_client_group(struct client_ctx *cc, union arg *arg)
 	group_hidetoggle(KBTOGROUP(arg->i));
 }
 
+void
+kbfunc_client_grouponly(struct client_ctx *cc, union arg *arg)
+{
+	group_only(KBTOGROUP(arg->i));
+}
+
 void
 kbfunc_client_cyclegroup(struct client_ctx *cc, union arg *arg)
 {
-- 
cgit v1.2.3-2-gb3c3