dwm-rotatestack-20161021-ab9571b.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-rotatestack-20161021-ab9571b.diff (2549B)
       ---
            1 diff --git a/config.def.h b/config.def.h
            2 index fd77a07..09737d7 100644
            3 --- a/config.def.h
            4 +++ b/config.def.h
            5 @@ -64,6 +64,8 @@ static Key keys[] = {
            6          { MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
            7          { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
            8          { MODKEY,                       XK_b,      togglebar,      {0} },
            9 +        { MODKEY|ShiftMask,             XK_j,      rotatestack,    {.i = +1 } },
           10 +        { MODKEY|ShiftMask,             XK_k,      rotatestack,    {.i = -1 } },
           11          { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
           12          { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
           13          { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
           14 diff --git a/dwm.c b/dwm.c
           15 index 421bf27..1ec8b10 100644
           16 --- a/dwm.c
           17 +++ b/dwm.c
           18 @@ -165,6 +165,8 @@ static void detachstack(Client *c);
           19  static Monitor *dirtomon(int dir);
           20  static void drawbar(Monitor *m);
           21  static void drawbars(void);
           22 +static void enqueue(Client *c);
           23 +static void enqueuestack(Client *c);
           24  static void enternotify(XEvent *e);
           25  static void expose(XEvent *e);
           26  static void focus(Client *c);
           27 @@ -194,6 +196,7 @@ static void resize(Client *c, int x, int y, int w, int h, int interact);
           28  static void resizeclient(Client *c, int x, int y, int w, int h);
           29  static void resizemouse(const Arg *arg);
           30  static void restack(Monitor *m);
           31 +static void rotatestack(const Arg *arg);
           32  static void run(void);
           33  static void scan(void);
           34  static int sendevent(Client *c, Atom proto);
           35 @@ -765,6 +768,28 @@ drawbars(void)
           36  }
           37  
           38  void
           39 +enqueue(Client *c)
           40 +{
           41 +        Client *l;
           42 +        for (l = c->mon->clients; l && l->next; l = l->next);
           43 +        if (l) {
           44 +                l->next = c;
           45 +                c->next = NULL;
           46 +        }
           47 +}
           48 +
           49 +void
           50 +enqueuestack(Client *c)
           51 +{
           52 +        Client *l;
           53 +        for (l = c->mon->stack; l && l->snext; l = l->snext);
           54 +        if (l) {
           55 +                l->snext = c;
           56 +                c->snext = NULL;
           57 +        }
           58 +}
           59 +
           60 +void
           61  enternotify(XEvent *e)
           62  {
           63          Client *c;
           64 @@ -1390,6 +1415,38 @@ restack(Monitor *m)
           65  }
           66  
           67  void
           68 +rotatestack(const Arg *arg)
           69 +{
           70 +        Client *c = NULL, *f;
           71 +
           72 +        if (!selmon->sel)
           73 +                return;
           74 +        f = selmon->sel;
           75 +        if (arg->i > 0) {
           76 +                for (c = nexttiled(selmon->clients); c && nexttiled(c->next); c = nexttiled(c->next));
           77 +                if (c){
           78 +                        detach(c);
           79 +                        attach(c);
           80 +                        detachstack(c);
           81 +                        attachstack(c);
           82 +                }
           83 +        } else {
           84 +                if ((c = nexttiled(selmon->clients))){
           85 +                        detach(c);
           86 +                        enqueue(c);
           87 +                        detachstack(c);
           88 +                        enqueuestack(c);
           89 +                }
           90 +        }
           91 +        if (c){
           92 +                arrange(selmon);
           93 +                //unfocus(f, 1);
           94 +                focus(f);
           95 +                restack(selmon);
           96 +        }
           97 +}
           98 +
           99 +void
          100  run(void)
          101  {
          102          XEvent ev;