This diff adds a new command, hmaximize, that maximizes the current window horizontally. I find it useful when lines displayed by commands are longer than my xterm; this way I can quickly maximize horizontally and get the whole picture without lines wrapping.
Comments? Index: calmwm.h =================================================================== RCS file: /cvs/OpenBSD/xenocara/app/cwm/calmwm.h,v retrieving revision 1.2 retrieving revision 1.2.14.4 diff -u -p -r1.2 -r1.2.14.4 --- calmwm.h 27 Jun 2009 08:20:23 -0000 1.2 +++ calmwm.h 20 Aug 2009 11:23:39 -0000 1.2.14.4 @@ -96,6 +96,8 @@ TAILQ_HEAD(screen_ctx_q, screen_ctx); #define CLIENT_MAXIMIZED 0x08 #define CLIENT_DOVMAXIMIZE 0x10 #define CLIENT_VMAXIMIZED 0x20 +#define CLIENT_DOHMAXIMIZE 0x40 +#define CLIENT_HMAXIMIZED 0x80 #define CLIENT_HIGHLIGHT_GROUP 1 #define CLIENT_HIGHLIGHT_UNGROUP 2 @@ -347,6 +349,7 @@ void client_ptrsave(struct client_ctx void client_draw_border(struct client_ctx *); void client_maximize(struct client_ctx *); void client_vertmaximize(struct client_ctx *); +void client_horizmaximize(struct client_ctx *); void client_map(struct client_ctx *); void client_mtf(struct client_ctx *); struct client_ctx *client_cycle(int); @@ -434,6 +437,8 @@ void kbfunc_client_movetogroup(struct void kbfunc_client_maximize(struct client_ctx *, union arg *); void kbfunc_client_vmaximize(struct client_ctx *, + union arg *); +void kbfunc_client_hmaximize(struct client_ctx *, union arg *); void kbfunc_reload(struct client_ctx *, union arg *); void kbfunc_quit_wm(struct client_ctx *, union arg *); Index: client.c =================================================================== RCS file: /cvs/OpenBSD/xenocara/app/cwm/client.c,v retrieving revision 1.2 retrieving revision 1.2.12.5 diff -u -p -r1.2 -r1.2.12.5 --- client.c 27 Jun 2009 08:20:23 -0000 1.2 +++ client.c 20 Aug 2009 11:33:48 -0000 1.2.12.5 @@ -300,10 +300,43 @@ calc: } void +client_horizmaximize(struct client_ctx *cc) +{ + struct screen_ctx *sc = CCTOSC(cc); + int x_org = 0, xmax = sc->xmax; + + if (cc->flags & CLIENT_HMAXIMIZED) { + cc->geom = cc->savegeom; + } else { + if (!(cc->flags & CLIENT_MAXIMIZED)) + cc->savegeom = cc->geom; + if (HasXinerama) { + XineramaScreenInfo *xine; + xine = screen_find_xinerama(CCTOSC(cc), + cc->geom.x + cc->geom.width / 2, + cc->geom.y + cc->geom.height / 2); + if (xine == NULL) + goto calc; + x_org = xine->x_org; + xmax = xine->width; + } +calc: + cc->geom.x = x_org + Conf.gap_left; + cc->geom.width = xmax - (cc->bwidth * 2) - (Conf.gap_left + + Conf.gap_right); + cc->flags |= CLIENT_DOHMAXIMIZE; + } + + client_resize(cc); +} + +void client_resize(struct client_ctx *cc) { - if (cc->flags & (CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED)) - cc->flags &= ~(CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED); + if (cc->flags & (CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED + | CLIENT_HMAXIMIZED)) + cc->flags &= ~(CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED + | CLIENT_HMAXIMIZED); if (cc->flags & CLIENT_DOMAXIMIZE) { cc->flags &= ~CLIENT_DOMAXIMIZE; @@ -311,6 +344,9 @@ client_resize(struct client_ctx *cc) } else if (cc->flags & CLIENT_DOVMAXIMIZE) { cc->flags &= ~CLIENT_DOVMAXIMIZE; cc->flags |= CLIENT_VMAXIMIZED; + } else if (cc->flags & CLIENT_DOHMAXIMIZE) { + cc->flags &= ~CLIENT_DOHMAXIMIZE; + cc->flags |= CLIENT_HMAXIMIZED; } XMoveResizeWindow(X_Dpy, cc->win, cc->geom.x, Index: conf.c =================================================================== RCS file: /cvs/OpenBSD/xenocara/app/cwm/conf.c,v retrieving revision 1.2 retrieving revision 1.2.14.1 diff -u -p -r1.2 -r1.2.14.1 --- conf.c 27 Jun 2009 08:20:23 -0000 1.2 +++ conf.c 20 Aug 2009 11:18:02 -0000 1.2.14.1 @@ -338,6 +338,7 @@ static struct { { "grouptoggle", kbfunc_client_grouptoggle, KBFLAG_NEEDCLIENT, {0}}, { "maximize", kbfunc_client_maximize, KBFLAG_NEEDCLIENT, {0} }, { "vmaximize", kbfunc_client_vmaximize, KBFLAG_NEEDCLIENT, {0} }, + { "hmaximize", kbfunc_client_hmaximize, KBFLAG_NEEDCLIENT, {0} }, { "reload", kbfunc_reload, 0, {0} }, { "quit", kbfunc_quit_wm, 0, {0} }, { "exec", kbfunc_exec, 0, {.i = CWM_EXEC_PROGRAM} }, Index: cwmrc.5 =================================================================== RCS file: /cvs/OpenBSD/xenocara/app/cwm/cwmrc.5,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.1.8.1 diff -u -p -r1.1.1.1 -r1.1.1.1.8.1 --- cwmrc.5 24 Jun 2009 12:35:33 -0000 1.1.1.1 +++ cwmrc.5 20 Aug 2009 11:45:14 -0000 1.1.1.1.8.1 @@ -292,6 +292,8 @@ Label current window. Maximize current window full-screen. .It vmaximize Maximize current window vertically. +.It hmaximize +Maximize current window horizontally. .It moveup Move window .Ar moveamount Index: kbfunc.c =================================================================== RCS file: /cvs/OpenBSD/xenocara/app/cwm/kbfunc.c,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.1.4.1 diff -u -p -r1.1.1.1 -r1.1.1.1.4.1 --- kbfunc.c 24 Jun 2009 12:35:33 -0000 1.1.1.1 +++ kbfunc.c 20 Aug 2009 11:18:02 -0000 1.1.1.1.4.1 @@ -482,6 +482,12 @@ kbfunc_client_vmaximize(struct client_ct } void +kbfunc_client_hmaximize(struct client_ctx *cc, union arg *arg) +{ + client_horizmaximize(cc); +} + +void kbfunc_quit_wm(struct client_ctx *cc, union arg *arg) { _xev_quit = 1;