summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--calmwm.h3
-rw-r--r--conf.c18
-rw-r--r--cwmrc.510
-rw-r--r--group.c11
-rw-r--r--kbfunc.c6
5 files changed, 46 insertions, 2 deletions
diff --git a/calmwm.h b/calmwm.h
index d5c77b6..e102763 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -446,6 +446,8 @@ void			 kbfunc_client_nogroup(struct client_ctx *,
 			     union arg *);
 void			 kbfunc_client_grouptoggle(struct client_ctx *,
 			     union arg *);
+void			 kbfunc_client_movetogroup(struct client_ctx *,
+			     union arg *);
 void			 kbfunc_client_maximize(struct client_ctx *,
 			     union arg *);
 void			 kbfunc_client_vmaximize(struct client_ctx *,
@@ -488,6 +490,7 @@ void			 group_alltoggle(void);
 void			 group_sticky_toggle_enter(struct client_ctx *);
 void			 group_sticky_toggle_exit(struct client_ctx *);
 void			 group_autogroup(struct client_ctx *);
+void			 group_movetogroup(struct client_ctx *, int);
 
 void			 font_init(struct screen_ctx *);
 int			 font_width(const char *, int);
diff --git a/conf.c b/conf.c
index 0ae7e68..7dba8b1 100644
--- a/conf.c
+++ b/conf.c
@@ -281,6 +281,24 @@ struct {
 	{ "grouponly7", kbfunc_client_grouponly, 0, {.i = 7} },
 	{ "grouponly8", kbfunc_client_grouponly, 0, {.i = 8} },
 	{ "grouponly9", kbfunc_client_grouponly, 0, {.i = 9} },
+	{ "movetogroup1", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.i = 1} },
+	{ "movetogroup2", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.i = 2} },
+	{ "movetogroup3", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.i = 3} },
+	{ "movetogroup4", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.i = 4} },
+	{ "movetogroup5", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.i = 5} },
+	{ "movetogroup6", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.i = 6} },
+	{ "movetogroup7", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.i = 7} },
+	{ "movetogroup8", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.i = 8} },
+	{ "movetogroup9", kbfunc_client_movetogroup, KBFLAG_NEEDCLIENT,
+	    {.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 c0740b5..64b88ec 100644
--- a/cwmrc.5
+++ b/cwmrc.5
@@ -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
@@ -208,6 +208,12 @@ ignore xclock
 bind CM-r	label
 bind CS-Return	"xterm -e top"
 bind 4-o	unmap
+bind M-1	grouponly1
+bind M-2	grouponly2
+bind M-3	grouponly3
+bind MS-1	movetogroup1
+bind MS-2	movetogroup2
+bind MS-3	movetogroup3
 
 # Mousebindings
 mousebind M-2	window_lower
@@ -250,6 +256,8 @@ but also hides the other groups.
 Select all groups.
 .It grouptoggle
 Toggle group membership of current window.
+.It movetogroup[n]
+Hide current window from display and move to group n, where n is 1-9.
 .It cyclegroup
 Forward cycle through groups.
 .It rcyclegroup
diff --git a/group.c b/group.c
index 73f742d..0601760 100644
--- a/group.c
+++ b/group.c
@@ -143,7 +143,16 @@ group_init(void)
 		TAILQ_INSERT_TAIL(&Groupq, &Groups[i], entry);
 	}
 
-	Group_active = &Groups[0];
+}
+
+void
+group_movetogroup(struct client_ctx *cc, int idx)
+{
+	if (idx < 0 || idx >= CALMWM_NGROUPS)
+		err(1, "group_movetogroup: index out of range (%d)", idx);
+
+	client_hide(cc);
+	_group_add(&Groups[idx], cc);
 }
 
 /*
diff --git a/kbfunc.c b/kbfunc.c
index e05a3b5..d7814ab 100644
--- a/kbfunc.c
+++ b/kbfunc.c
@@ -467,6 +467,12 @@ kbfunc_client_grouptoggle(struct client_ctx *cc, union arg *arg)
 }
 
 void
+kbfunc_client_movetogroup(struct client_ctx *cc, union arg *arg)
+{
+	group_movetogroup(cc, KBTOGROUP(arg->i));
+}
+
+void
 kbfunc_client_maximize(struct client_ctx *cc, union arg *arg)
 {
 	client_maximize(cc);