This feature sounds very useful to me.

* Julien Steinhauser <j...@ldd.fr> le [22-11-2017 21:27:34 +0100]:
> A long time ago sent Dimitris Papastamos a patch to misc which
> let one send X clients to corners.[0]
> 
> I think it is useful so thank you Dimitris!
> With some minor editing it still builds on current.
> 
> I have no use of window-move-{up,down,right,left}{,-big} but X client
> corner warping is done on a regular basis.
> 
> At the time it did not receive the attention it (IMO) deserves.
> Maybe was it because "feature" was written on the first line? ;)
> I know featuritis is considered a disease around here and
> I'm happy it is but here is an updated version anyway.
> 
> This version lacks the keybindings from the initial patch,
> it also lacks for now a change in the man pages.
> I use it with the following in ~/.cwmrc:
> 
> bind-key 4S-Left                      window-movebottomleft
> bind-key 4S-Right                     window-movebottomright
> bind-key 4S-XF86Back          window-movetopleft
> bind-key 4S-XF86Forward               window-movetopright
> 
> I know these are not standards keys found on every keyboard,
> but Thinkpads are not exotic beasts in this land so it might
> be an helpful start to some of you and every declinaison of h j k l
> was already in use in the default config.
> 
> OK?
> 
> [0] https://marc.info/?l=openbsd-misc&m=140344759017419&w=2
> 
> Index: calmwm.h
> ===================================================================
> RCS file: /cvs/xenocara/app/cwm/calmwm.h,v
> retrieving revision 1.341
> diff -u -p -r1.341 calmwm.h
> --- calmwm.h  14 Jul 2017 17:23:38 -0000      1.341
> +++ calmwm.h  22 Nov 2017 19:21:47 -0000
> @@ -54,6 +54,10 @@
>  #define CWM_DOWN             0x0002
>  #define CWM_LEFT             0x0004
>  #define CWM_RIGHT            0x0008
> +#define CWM_TOP_LEFT        0x0100
> +#define CWM_BOTTOM_LEFT     0x0200
> +#define CWM_TOP_RIGHT                0x0400
> +#define CWM_BOTTOM_RIGHT     0x0800
>  #define CWM_BIGAMOUNT                0x0010
>  #define DIRECTIONMASK        (CWM_UP | CWM_DOWN | CWM_LEFT | CWM_RIGHT)
>  
> @@ -476,6 +480,7 @@ void                       
> kbfunc_client_toggle_hmaximize(v
>  void                  kbfunc_client_toggle_vmaximize(void *, struct cargs *);
>  void                          kbfunc_client_htile(void *, struct cargs *);
>  void                          kbfunc_client_vtile(void *, struct cargs *);
> +void                  kbfunc_client_move_edge(void *, struct cargs *);
>  void                  kbfunc_client_cycle(void *, struct cargs *);
>  void                  kbfunc_client_toggle_group(void *, struct cargs *);
>  void                  kbfunc_client_movetogroup(void *, struct cargs *);
> Index: conf.c
> ===================================================================
> RCS file: /cvs/xenocara/app/cwm/conf.c,v
> retrieving revision 1.233
> diff -u -p -r1.233 conf.c
> --- conf.c    14 Jul 2017 17:23:38 -0000      1.233
> +++ conf.c    22 Nov 2017 19:21:48 -0000
> @@ -67,6 +67,14 @@ static const struct {
>       { "window-delete", kbfunc_client_delete, CWM_CONTEXT_CC, 0 },
>       { "window-htile", kbfunc_client_htile, CWM_CONTEXT_CC, 0 },
>       { "window-vtile", kbfunc_client_vtile, CWM_CONTEXT_CC, 0 },
> +     { "window-movetopleft", kbfunc_client_move_edge, CWM_CONTEXT_CC,
> +         (CWM_TOP_LEFT) },
> +     { "window-movebottomleft", kbfunc_client_move_edge, CWM_CONTEXT_CC,
> +         (CWM_BOTTOM_LEFT) },
> +     { "window-movetopright", kbfunc_client_move_edge, CWM_CONTEXT_CC,
> +         (CWM_TOP_RIGHT) },
> +     { "window-movebottomright", kbfunc_client_move_edge, CWM_CONTEXT_CC,
> +         (CWM_BOTTOM_RIGHT) },
>       { "window-stick", kbfunc_client_toggle_sticky, CWM_CONTEXT_CC, 0 },
>       { "window-fullscreen", kbfunc_client_toggle_fullscreen, CWM_CONTEXT_CC, 
> 0 },
>       { "window-maximize", kbfunc_client_toggle_maximize, CWM_CONTEXT_CC, 0 },
> @@ -666,6 +674,51 @@ conf_grab_mouse(Window win)
>                           BUTTONMASK, GrabModeAsync, GrabModeSync,
>                           None, None);
>               }
> +     }
> +}
> +
> +void
> +kbfunc_client_move_edge(void *ctx, struct cargs *cargs)
> +{
> +     struct client_ctx       *cc = ctx;
> +     struct screen_ctx       *sc = cc->sc;
> +     struct geom             xine;
> +     int                      flags;
> +
> +     /*
> +      * pick screen that the middle of the window is on.
> +      * that's probably more fair than if just the origin of
> +      * a window is poking over a boundary
> +      */
> +     xine = screen_area(sc,
> +         cc->geom.x + cc->geom.w / 2,
> +         cc->geom.y + cc->geom.h / 2, CWM_GAP);
> +
> +     flags = cargs->flag;
> +
> +     switch (flags) {
> +     case CWM_TOP_LEFT:
> +              cc->geom.x = xine.x;
> +              cc->geom.y = xine.y;
> +              client_move(cc);
> +              break;
> +     case CWM_BOTTOM_LEFT:
> +              cc->geom.x = xine.x;
> +              cc->geom.y = xine.y + xine.h - cc->geom.h - cc->bwidth * 2;
> +              client_move(cc);
> +              break;
> +     case CWM_TOP_RIGHT:
> +              cc->geom.x = xine.x + xine.w - cc->geom.w - cc->bwidth * 2;
> +              cc->geom.y = xine.y;
> +              client_move(cc);
> +              break;
> +     case CWM_BOTTOM_RIGHT:
> +              cc->geom.x = xine.x + xine.w - cc->geom.w - cc->bwidth * 2;
> +              cc->geom.y = xine.y + xine.h - cc->geom.h - cc->bwidth * 2;
> +              client_move(cc);
> +              break;
> +     default:
> +              warnx("invalid flags passed to kbfunc_client_move_edge");
>       }
>  }
>  

-- 
thuban

Attachment: signature.asc
Description: PGP signature

Reply via email to