dwm-movekeyboard-6.4.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-movekeyboard-6.4.diff (3693B)
       ---
            1 From daf4eab44e319d78cffecf4133f8309c826fe6b9 Mon Sep 17 00:00:00 2001
            2 From: mrmine <mrmine1@proton.me>
            3 Date: Sun, 11 Dec 2022 23:31:46 +0100
            4 Subject: [PATCH] This Patch adds the ability to move floating windows on the x
            5  and y axis with the keyboard, instead of only the mouse. This is achieved by
            6  adding the two functions "movekeyboard-x" and "movekeyboard-y".
            7 
            8 ---
            9  config.def.h |  4 +++
           10  dwm.c        | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++
           11  2 files changed, 92 insertions(+)
           12 
           13 diff --git a/config.def.h b/config.def.h
           14 index 9efa774..a1ca89c 100644
           15 --- a/config.def.h
           16 +++ b/config.def.h
           17 @@ -85,6 +85,10 @@ static const Key keys[] = {
           18          { MODKEY,                       XK_period, focusmon,       {.i = +1 } },
           19          { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
           20          { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
           21 +        { MODKEY|ControlMask,                  XK_l,        movekeyboard_x,         {.i = 20}},
           22 +        { MODKEY|ControlMask,                  XK_h,        movekeyboard_x,         {.i = -20}},
           23 +        { MODKEY|ControlMask,                  XK_j,        movekeyboard_y,         {.i = 20}},
           24 +        { MODKEY|ControlMask,                  XK_k,        movekeyboard_y,         {.i = -20}},
           25          TAGKEYS(                        XK_1,                      0)
           26          TAGKEYS(                        XK_2,                      1)
           27          TAGKEYS(                        XK_3,                      2)
           28 diff --git a/dwm.c b/dwm.c
           29 index 03baf42..e8a9f28 100644
           30 --- a/dwm.c
           31 +++ b/dwm.c
           32 @@ -184,6 +184,8 @@ static void maprequest(XEvent *e);
           33  static void monocle(Monitor *m);
           34  static void motionnotify(XEvent *e);
           35  static void movemouse(const Arg *arg);
           36 +static void movekeyboard_x(const Arg *arg);
           37 +static void movekeyboard_y(const Arg *arg);
           38  static Client *nexttiled(Client *c);
           39  static void pop(Client *c);
           40  static void propertynotify(XEvent *e);
           41 @@ -1203,6 +1205,92 @@ movemouse(const Arg *arg)
           42          }
           43  }
           44  
           45 +void
           46 +movekeyboard_x(const Arg *arg){
           47 +        int ocx, ocy, nx, ny;
           48 +        Client *c;
           49 +        Monitor *m;
           50 +
           51 +        if (!(c = selmon->sel))
           52 +                return;
           53 +
           54 +        if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
           55 +                return;
           56 +
           57 +        restack(selmon);
           58 +
           59 +        ocx = c->x;
           60 +        ocy = c->y;
           61 +
           62 +        nx = ocx + arg->i;
           63 +        ny = ocy;
           64 +
           65 +        if (abs(selmon->wx - nx) < snap)
           66 +                nx = selmon->wx;
           67 +        else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
           68 +                nx = selmon->wx + selmon->ww - WIDTH(c);
           69 +
           70 +        if (abs(selmon->wy - ny) < snap)
           71 +                ny = selmon->wy;
           72 +        else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
           73 +                ny = selmon->wy + selmon->wh - HEIGHT(c);
           74 +
           75 +        if (!c->isfloating)
           76 +                togglefloating(NULL);
           77 +
           78 +        if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
           79 +                resize(c, nx, ny, c->w, c->h, 1);
           80 +
           81 +        if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
           82 +                sendmon(c, m);
           83 +                selmon = m;
           84 +                focus(NULL);
           85 +        }
           86 +}
           87 +
           88 +void
           89 +movekeyboard_y(const Arg *arg){
           90 +        int ocx, ocy, nx, ny;
           91 +        Client *c;
           92 +        Monitor *m;
           93 +
           94 +        if (!(c = selmon->sel))
           95 +                return;
           96 +
           97 +        if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
           98 +                return;
           99 +
          100 +        restack(selmon);
          101 +
          102 +        ocx = c->x;
          103 +        ocy = c->y;
          104 +
          105 +        nx = ocx;
          106 +        ny = ocy + arg->i;
          107 +
          108 +        if (abs(selmon->wx - nx) < snap)
          109 +                nx = selmon->wx;
          110 +        else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
          111 +                nx = selmon->wx + selmon->ww - WIDTH(c);
          112 +
          113 +        if (abs(selmon->wy - ny) < snap)
          114 +                ny = selmon->wy;
          115 +        else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
          116 +                ny = selmon->wy + selmon->wh - HEIGHT(c);
          117 +
          118 +        if (!c->isfloating)
          119 +                togglefloating(NULL);
          120 +
          121 +        if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
          122 +                resize(c, nx, ny, c->w, c->h, 1);
          123 +
          124 +        if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
          125 +                sendmon(c, m);
          126 +                selmon = m;
          127 +                focus(NULL);
          128 +        }
          129 +}
          130 +
          131  Client *
          132  nexttiled(Client *c)
          133  {
          134 -- 
          135 2.38.1
          136