From eb7803269e63acabfacbfd95c32e8ca44963f8d6 Mon Sep 17 00:00:00 2001 From: sthen Date: Sun, 17 May 2009 17:04:59 +0000 Subject: [PATCH] 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@ --- calmwm.h | 3 +++ conf.c | 18 ++++++++++++++++++ cwmrc.5 | 10 +++++++++- group.c | 11 ++++++++++- kbfunc.c | 6 ++++++ 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 @@ -466,6 +466,12 @@ kbfunc_client_grouptoggle(struct client_ctx *cc, union arg *arg) group_sticky_toggle_enter(cc); } +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) {