dwm-multimon-2-unified_view-6.1.patch - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-multimon-2-unified_view-6.1.patch (6558B)
       ---
            1 From 2521a74714bb7c4b8787f30584f1565cc582928b Mon Sep 17 00:00:00 2001
            2 From: "Gary B. Genett" <me@garybgenett.net>
            3 Date: Mon, 24 Mar 2014 13:57:47 -0700
            4 Subject: added n*view wrappers, for unified multi-monitor
            5 MIME-Version: 1.0
            6 Content-Type: multipart/mixed; boundary="------------1.8.3.2"
            7 
            8 This is a multi-part message in MIME format.
            9 --------------1.8.3.2
           10 Content-Type: text/plain; charset=UTF-8; format=fixed
           11 Content-Transfer-Encoding: 8bit
           12 
           13 ---
           14  config.def.h |  5 +++++
           15  dwm.c        | 24 ++++++++++++++++++++++++
           16  2 files changed, 29 insertions(+)
           17 
           18 
           19 --------------1.8.3.2
           20 Content-Type: text/x-patch; name="0002-added-n-view-wrappers-for-unified-multi-monitor.patch"
           21 Content-Transfer-Encoding: 8bit
           22 Content-Disposition: attachment; filename="0002-added-n-view-wrappers-for-unified-multi-monitor.patch"
           23 
           24 diff --git a/config.def.h b/config.def.h
           25 index af6bcfae52a8d1783158ae4f38f35b88025c04e1..d3b6a4b7bbf244a9d824d99340e5fc6d9ecb8a56 100644
           26 --- a/config.def.h
           27 +++ b/config.def.h
           28 @@ -32,24 +32,27 @@ static const int nmaster      = 1;    /* number of clients in master area */
           29  static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
           30  
           31  static const Layout layouts[] = {
           32          /* symbol     arrange function */
           33          { "[]=",      tile },    /* first entry is default */
           34          { "><>",      NULL },    /* no layout function means floating behavior */
           35          { "[M]",      monocle },
           36  };
           37  
           38  /* key definitions */
           39 +#define WINKEY Mod4Mask
           40  #define MODKEY Mod1Mask
           41  #define TAGKEYS(KEY,TAG) \
           42          { MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
           43          { MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
           44 +        { MODKEY|WINKEY,                KEY,      nview,          {.ui = 1 << TAG} }, \
           45 +        { MODKEY|WINKEY|ControlMask,    KEY,      ntoggleview,    {.ui = 1 << TAG} }, \
           46          { MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
           47          { MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },
           48  
           49  /* helper for spawning shell commands in the pre dwm-5.0 fashion */
           50  #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
           51  
           52  /* commands */
           53  static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
           54  static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", font, "-nb", normbgcolor, "-nf", normfgcolor, "-sb", selbgcolor, "-sf", selfgcolor, NULL };
           55  static const char *termcmd[]  = { "st", NULL };
           56 @@ -99,14 +102,16 @@ static Button buttons[] = {
           57          { ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
           58          { ClkMonNum,            0,              Button1,        focusmon,       {.i = +1} },
           59          { ClkMonNum,            0,              Button3,        focusmon,       {.i = -1} },
           60          { ClkWinTitle,          0,              Button2,        zoom,           {0} },
           61          { ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
           62          { ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
           63          { ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
           64          { ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
           65          { ClkTagBar,            0,              Button1,        view,           {0} },
           66          { ClkTagBar,            0,              Button3,        toggleview,     {0} },
           67 +        { ClkTagBar,            MODKEY|WINKEY,  Button1,        nview,          {0} },
           68 +        { ClkTagBar,            MODKEY|WINKEY,  Button3,        ntoggleview,    {0} },
           69          { ClkTagBar,            MODKEY,         Button1,        tag,            {0} },
           70          { ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
           71  };
           72  
           73 diff --git a/dwm.c b/dwm.c
           74 index 209dedc1417a29fb44c3ba5b6fa62f1b75b6a09f..f6e9588d78a01e3263de54e94bd1559434a802c2 100644
           75 --- a/dwm.c
           76 +++ b/dwm.c
           77 @@ -204,34 +204,36 @@ static void setmfact(const Arg *arg);
           78  static void setup(void);
           79  static void showhide(Client *c);
           80  static void sigchld(int unused);
           81  static void spawn(const Arg *arg);
           82  static void tag(const Arg *arg);
           83  static void tagmon(const Arg *arg);
           84  static void tile(Monitor *);
           85  static void togglebar(const Arg *arg);
           86  static void togglefloating(const Arg *arg);
           87  static void toggletag(const Arg *arg);
           88 +static void ntoggleview(const Arg *arg);
           89  static void toggleview(const Arg *arg);
           90  static void unfocus(Client *c, Bool setfocus);
           91  static void unmanage(Client *c, Bool destroyed);
           92  static void unmapnotify(XEvent *e);
           93  static Bool updategeom(void);
           94  static void updatebarpos(Monitor *m);
           95  static void updatebars(void);
           96  static void updateclientlist(void);
           97  static void updatenumlockmask(void);
           98  static void updatesizehints(Client *c);
           99  static void updatestatus(void);
          100  static void updatewindowtype(Client *c);
          101  static void updatetitle(Client *c);
          102  static void updatewmhints(Client *c);
          103 +static void nview(const Arg *arg);
          104  static void view(const Arg *arg);
          105  static Client *wintoclient(Window w);
          106  static Monitor *wintomon(Window w);
          107  static int xerror(Display *dpy, XErrorEvent *ee);
          108  static int xerrordummy(Display *dpy, XErrorEvent *ee);
          109  static int xerrorstart(Display *dpy, XErrorEvent *ee);
          110  static void zoom(const Arg *arg);
          111  
          112  /* variables */
          113  static const char broken[] = "broken";
          114 @@ -1663,20 +1665,31 @@ toggletag(const Arg *arg) {
          115                  return;
          116          newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
          117          if(newtags) {
          118                  selmon->sel->tags = newtags;
          119                  focus(NULL);
          120                  arrange(selmon);
          121          }
          122  }
          123  
          124  void
          125 +ntoggleview(const Arg *arg) {
          126 +        const Arg n = {.i = +1};
          127 +        const int mon = selmon->num;
          128 +        do {
          129 +                focusmon(&n);
          130 +                toggleview(arg);
          131 +        }
          132 +        while (selmon->num != mon);
          133 +}
          134 +
          135 +void
          136  toggleview(const Arg *arg) {
          137          unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
          138  
          139          if(newtagset) {
          140                  selmon->tagset[selmon->seltags] = newtagset;
          141                  focus(NULL);
          142                  arrange(selmon);
          143          }
          144  }
          145  
          146 @@ -1961,20 +1974,31 @@ updatewmhints(Client *c) {
          147                          c->isurgent = (wmh->flags & XUrgencyHint) ? True : False;
          148                  if(wmh->flags & InputHint)
          149                          c->neverfocus = !wmh->input;
          150                  else
          151                          c->neverfocus = False;
          152                  XFree(wmh);
          153          }
          154  }
          155  
          156  void
          157 +nview(const Arg *arg) {
          158 +        const Arg n = {.i = +1};
          159 +        const int mon = selmon->num;
          160 +        do {
          161 +                focusmon(&n);
          162 +                view(arg);
          163 +        }
          164 +        while (selmon->num != mon);
          165 +}
          166 +
          167 +void
          168  view(const Arg *arg) {
          169          if((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
          170                  return;
          171          selmon->seltags ^= 1; /* toggle sel tagset */
          172          if(arg->ui & TAGMASK)
          173                  selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
          174          focus(NULL);
          175          arrange(selmon);
          176  }
          177  
          178 
          179 --------------1.8.3.2--
          180 
          181