added movekeyboard patch
This commit is contained in:
parent
ba6d06e968
commit
d4b464619f
|
@ -89,6 +89,10 @@ static const Key keys[] = {
|
|||
{ MODKEY, XK_period, focusmon, {.i = +1 } },
|
||||
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
|
||||
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
|
||||
{ MODKEY|ControlMask, XK_l, movekeyboard_x, {.i = 20}},
|
||||
{ MODKEY|ControlMask, XK_h, movekeyboard_x, {.i = -20}},
|
||||
{ MODKEY|ControlMask, XK_j, movekeyboard_y, {.i = 20}},
|
||||
{ MODKEY|ControlMask, XK_k, movekeyboard_y, {.i = -20}},
|
||||
{ MODKEY, XK_Right, viewnext, {0} },
|
||||
{ MODKEY, XK_Left, viewprev, {0} },
|
||||
{ MODKEY|ShiftMask, XK_Right, tagtonext, {0} },
|
||||
|
|
88
dwm.c
88
dwm.c
|
@ -182,6 +182,8 @@ static void mappingnotify(XEvent *e);
|
|||
static void maprequest(XEvent *e);
|
||||
static void monocle(Monitor *m);
|
||||
static void movemouse(const Arg *arg);
|
||||
static void movekeyboard_x(const Arg *arg);
|
||||
static void movekeyboard_y(const Arg *arg);
|
||||
static unsigned int nexttag(void);
|
||||
static Client *nexttiled(Client *c);
|
||||
static void pop(Client *c);
|
||||
|
@ -1197,6 +1199,92 @@ nexttag(void)
|
|||
return seltag;
|
||||
}
|
||||
|
||||
void
|
||||
movekeyboard_x(const Arg *arg){
|
||||
int ocx, ocy, nx, ny;
|
||||
Client *c;
|
||||
Monitor *m;
|
||||
|
||||
if (!(c = selmon->sel))
|
||||
return;
|
||||
|
||||
if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
|
||||
return;
|
||||
|
||||
restack(selmon);
|
||||
|
||||
ocx = c->x;
|
||||
ocy = c->y;
|
||||
|
||||
nx = ocx + arg->i;
|
||||
ny = ocy;
|
||||
|
||||
if (abs(selmon->wx - nx) < snap)
|
||||
nx = selmon->wx;
|
||||
else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
|
||||
nx = selmon->wx + selmon->ww - WIDTH(c);
|
||||
|
||||
if (abs(selmon->wy - ny) < snap)
|
||||
ny = selmon->wy;
|
||||
else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
|
||||
ny = selmon->wy + selmon->wh - HEIGHT(c);
|
||||
|
||||
if (!c->isfloating)
|
||||
togglefloating(NULL);
|
||||
|
||||
if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
|
||||
resize(c, nx, ny, c->w, c->h, 1);
|
||||
|
||||
if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
|
||||
sendmon(c, m);
|
||||
selmon = m;
|
||||
focus(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
movekeyboard_y(const Arg *arg){
|
||||
int ocx, ocy, nx, ny;
|
||||
Client *c;
|
||||
Monitor *m;
|
||||
|
||||
if (!(c = selmon->sel))
|
||||
return;
|
||||
|
||||
if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
|
||||
return;
|
||||
|
||||
restack(selmon);
|
||||
|
||||
ocx = c->x;
|
||||
ocy = c->y;
|
||||
|
||||
nx = ocx;
|
||||
ny = ocy + arg->i;
|
||||
|
||||
if (abs(selmon->wx - nx) < snap)
|
||||
nx = selmon->wx;
|
||||
else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
|
||||
nx = selmon->wx + selmon->ww - WIDTH(c);
|
||||
|
||||
if (abs(selmon->wy - ny) < snap)
|
||||
ny = selmon->wy;
|
||||
else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
|
||||
ny = selmon->wy + selmon->wh - HEIGHT(c);
|
||||
|
||||
if (!c->isfloating)
|
||||
togglefloating(NULL);
|
||||
|
||||
if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
|
||||
resize(c, nx, ny, c->w, c->h, 1);
|
||||
|
||||
if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
|
||||
sendmon(c, m);
|
||||
selmon = m;
|
||||
focus(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
Client *
|
||||
nexttiled(Client *c)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue