about summary refs log tree commit diff
diff options
context:
space:
mode:
authorsthen <sthen>2009-05-17 17:04:59 +0000
committersthen <sthen>2009-05-17 17:04:59 +0000
commiteb7803269e63acabfacbfd95c32e8ca44963f8d6 (patch)
tree55fadfbf23e09dff507c0b7d3b9ea9011856c3a4
parent6df7cba24ed6c628a3640e8ce4d249d1ad91451b (diff)
downloadcwm-eb7803269e63acabfacbfd95c32e8ca44963f8d6.tar.gz
cwm-eb7803269e63acabfacbfd95c32e8ca44963f8d6.tar.xz
cwm-eb7803269e63acabfacbfd95c32e8ca44963f8d6.zip
add a "movetogroup" function, which hides the current window from
display and moves it to another group. useful with the recently added
"grouponly" function, giving the ability to use groups as simple
virtual desktops (similar to e.g. xmonad, dwm and scrotwm).

this doesn't have default keyboard bindings; cwmrc(5) now shows how
you could use these functions (use M-1...9 for grouponly1...9 and
MS-1...9 for movetogroup1...9 to emulate the default dwm bindings).

ok oga@
-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);