dwm-swapfocus-20160731-56a31dc.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-swapfocus-20160731-56a31dc.diff (1791B)
       ---
            1 Author: Jan Christoph Ebersbach <jceb@e-jc.de>
            2 URL: http://dwm.suckless.org/patches/swapfocus
            3 This patch makes it possible to switch focus with one single shortcut (alt-s)
            4 instead of having to think if you should use alt-j or alt-k for reaching the
            5 last used window.
            6 
            7 Index: dwm/dwm.c
            8 ===================================================================
            9 --- dwm/dwm.c.orig
           10 +++ dwm/dwm.c
           11 @@ -207,6 +207,7 @@ static void setup(void);
           12  static void showhide(Client *c);
           13  static void sigchld(int unused);
           14  static void spawn(const Arg *arg);
           15 +static void swapfocus();
           16  static void tag(const Arg *arg);
           17  static void tagmon(const Arg *arg);
           18  static void tile(Monitor *);
           19 @@ -236,6 +237,7 @@ static int xerrorstart(Display *dpy, XEr
           20  static void zoom(const Arg *arg);
           21  
           22  /* variables */
           23 +static Client *prevclient = NULL;
           24  static const char broken[] = "broken";
           25  static char stext[256];
           26  static int screen;
           27 @@ -1645,6 +1647,17 @@ spawn(const Arg *arg)
           28  }
           29  
           30  void
           31 +swapfocus()
           32 +{
           33 +        Client *c;
           34 +        for(c = selmon->clients; c && c != prevclient; c = c->next) ;
           35 +        if(c == prevclient) {
           36 +                focus(prevclient);
           37 +                restack(prevclient->mon);
           38 +        }
           39 +}
           40 +
           41 +void
           42  tag(const Arg *arg)
           43  {
           44          if (selmon->sel && arg->ui & TAGMASK) {
           45 @@ -1743,6 +1756,7 @@ unfocus(Client *c, int setfocus)
           46  {
           47          if (!c)
           48                  return;
           49 +        prevclient = c;
           50          grabbuttons(c, 0);
           51          XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
           52          if (setfocus) {
           53 @@ -2109,12 +2123,13 @@ void
           54  zoom(const Arg *arg)
           55  {
           56          Client *c = selmon->sel;
           57 +        prevclient = nexttiled(selmon->clients);
           58  
           59          if (!selmon->lt[selmon->sellt]->arrange
           60          || (selmon->sel && selmon->sel->isfloating))
           61                  return;
           62          if (c == nexttiled(selmon->clients))
           63 -                if (!c || !(c = nexttiled(c->next)))
           64 +                if (!c || !(c = prevclient = nexttiled(c->next)))
           65                          return;
           66          pop(c);
           67  }