index.md - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       index.md (3732B)
       ---
            1 moveresize
            2 ==========
            3 
            4 Description
            5 -----------
            6 This changes allows you to move and resize dwm's clients using keyboard
            7 bindings.
            8 
            9 Usage
           10 -----
           11 1. Put the following `moveresize()` function somewhere in your `dwm.c`,
           12   **after** the line which includes the config.h file:
           13 
           14         static void
           15         moveresize(const Arg *arg)
           16         {
           17                 XEvent ev;
           18                 Monitor *m = selmon;
           19 
           20                 if(!(m->sel && arg && arg->v && m->sel->isfloating))
           21                         return;
           22 
           23                 resize(m->sel, m->sel->x + ((int *)arg->v)[0],
           24                         m->sel->y + ((int *)arg->v)[1],
           25                         m->sel->w + ((int *)arg->v)[2],
           26                         m->sel->h + ((int *)arg->v)[3],
           27                         True);
           28 
           29                 while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
           30         }
           31 
           32 2. Add a moveresize() function definition in dwm.c below the line:
           33         static void movemouse(const Arg *arg);
           34 
           35         static void moveresize(const Arg *arg);
           36 
           37 3. Insert the bindings into the keys list. Here is an example which uses the
           38    arrow keys to move (mod+arrow) or resize (mod+shift+arrow) the selected
           39    client:
           40 
           41         { MODKEY,                                        XK_Down,        moveresize,                {.v = (int []){ 0, 25, 0, 0 }}},
           42         { MODKEY,                                        XK_Up,                moveresize,                {.v = (int []){ 0, -25, 0, 0 }}},
           43         { MODKEY,                                        XK_Right,        moveresize,                {.v = (int []){ 25, 0, 0, 0 }}},
           44         { MODKEY,                                        XK_Left,        moveresize,                {.v = (int []){ -25, 0, 0, 0 }}},
           45         { MODKEY|ShiftMask,                        XK_Down,        moveresize,                {.v = (int []){ 0, 0, 0, 25 }}},
           46         { MODKEY|ShiftMask,                        XK_Up,                moveresize,                {.v = (int []){ 0, 0, 0, -25 }}},
           47         { MODKEY|ShiftMask,                        XK_Right,        moveresize,                {.v = (int []){ 0, 0, 25, 0 }}},
           48         { MODKEY|ShiftMask,                        XK_Left,        moveresize,                {.v = (int []){ 0, 0, -25, 0 }}},
           49 
           50 In latest version you can also add the following bindings to move client to the edge of screen (mod+ctrl+arrow) or resize client to edge of screen (mod+shift+ctrl+arrow). Pressing resize to edge of screen towards the same direction a second time, will resize client back to original size.
           51 
           52         { MODKEY|ControlMask,           XK_Up,     moveresizeedge, {.v = "t"} },
           53         { MODKEY|ControlMask,           XK_Down,   moveresizeedge, {.v = "b"} },
           54         { MODKEY|ControlMask,           XK_Left,   moveresizeedge, {.v = "l"} },
           55         { MODKEY|ControlMask,           XK_Right,  moveresizeedge, {.v = "r"} },
           56         { MODKEY|ControlMask|ShiftMask, XK_Up,     moveresizeedge, {.v = "T"} },
           57         { MODKEY|ControlMask|ShiftMask, XK_Down,   moveresizeedge, {.v = "B"} },
           58         { MODKEY|ControlMask|ShiftMask, XK_Left,   moveresizeedge, {.v = "L"} },
           59         { MODKEY|ControlMask|ShiftMask, XK_Right,  moveresizeedge, {.v = "R"} },
           60 
           61 If you want to automatically toggle the client floating when move/resize,
           62 then replace the second if statement in the moveresize function with this code:
           63 
           64         if (!(m->sel && arg && arg->v))
           65                 return;
           66         if (m->lt[m->sellt]->arrange && !m->sel->isfloating)
           67                 togglefloating(NULL);
           68 
           69 Multi-head
           70 ----------
           71 From dwm 6.0 onward there's the following patch which is aware of the screen
           72 sizes in a multi monitor setup. A second patch allows you to maximize windows.
           73 
           74 
           75 Changelog
           76 ---------
           77 20201206:
           78 * moversizeedge: taking into account `topbar`
           79 * moversizeedge: correctly moves/resizes client on 2nd monitor
           80 
           81 Download
           82 --------
           83 * [dwm-moveresize-20221210-7ac106c.diff](dwm-moveresize-20221210-7ac106c.diff)
           84 * [dwm-moveresize-20201206-cce77d8.diff](dwm-moveresize-20201206-cce77d8.diff)
           85 * [dwm-moveresize-20200609-46c8838.diff](dwm-moveresize-20200609-46c8838.diff)
           86 * [dwm-moveresize-6.2.diff](dwm-moveresize-6.2.diff)
           87 * [dwm-moveresize-20160731-56a31dc.diff](dwm-moveresize-20160731-56a31dc.diff)
           88 * [dwm-moveresize-6.1.diff](dwm-moveresize-6.1.diff) (2095b) (20140209)
           89 * [dwm-moveresize-6.0.diff](dwm-moveresize-6.0.diff) (2025b) (20120406)
           90 
           91 Authors
           92 -------
           93 * Georgios Oxinos - <oxinosg@gmail.com>
           94 * Claudio M. Alessi - <smoppy@gmail.com>
           95 * Jan Christoph Ebersbach - <jceb@e-jc.de>
           96 * howoz - <howoz@airmail.cc>