dwm-multimon-3-reset_view-6.4.patch - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-multimon-3-reset_view-6.4.patch (7758B)
       ---
            1 From a69526cdfa0f3c15ac60e290cbd1282cd02a59c5 Mon Sep 17 00:00:00 2001
            2 From: "Gary B. Genett" <me@garybgenett.net>
            3 Date: Sun, 19 Feb 2023 08:58:02 -0800
            4 Subject: added reset_view function
            5 MIME-Version: 1.0
            6 Content-Type: multipart/mixed; boundary="------------2.37.4"
            7 
            8 This is a multi-part message in MIME format.
            9 --------------2.37.4
           10 Content-Type: text/plain; charset=UTF-8; format=fixed
           11 Content-Transfer-Encoding: 8bit
           12 
           13 ---
           14  config.def.h |  9 +++++++++
           15  dwm.c        | 30 ++++++++++++++++++++++++++++++
           16  2 files changed, 39 insertions(+)
           17 
           18 
           19 --------------2.37.4
           20 Content-Type: text/x-patch; name="0003-added-reset_view-function.patch"
           21 Content-Transfer-Encoding: 8bit
           22 Content-Disposition: attachment; filename="0003-added-reset_view-function.patch"
           23 
           24 diff --git a/config.def.h b/config.def.h
           25 index c59d27597a62ddf884baacded2830a318db1b45c..a664c793845c4c7c0ebe8ac69c96885c76193819 100644
           26 --- a/config.def.h
           27 +++ b/config.def.h
           28 @@ -27,23 +27,31 @@ static const Rule rules[] = {
           29           *        WM_NAME(STRING) = title
           30           */
           31          /* class      instance    title       tags mask     isfloating   monitor */
           32          { "Gimp",     NULL,       NULL,       0,            1,           -1 },
           33          { "Firefox",  NULL,       NULL,       1 << 8,       0,           -1 },
           34  };
           35  
           36  /* layout(s) */
           37  static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
           38  static const int nmaster     = 1;    /* number of clients in master area */
           39 +static const int nviews      = 3;    /* mask of tags highlighted by default (tags 1-4) */
           40  static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
           41  static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
           42  
           43 +static const float facts[1];    //static const float facts[]     = {     0,     0.5 }; // = mfact   // 50%
           44 +static const int masters[1];    //static const int masters[]     = {     0,      -1 }; // = nmaster // vertical stacking (for rotated monitor)
           45 +static const int views[1];      //static const int views[]       = {     0,      ~0 }; // = nviews  // all tags
           46 +/* invert tags after nviews */  /* array dimentions can both be as big as needed */  // final highlighted tags
           47 +static const int toggles[1][1]; //static const int toggles[2][2] = { {0,8}, {~0,~0} }; // 2-4+9     // all (leave as views above)
           48 +static const int toggles[1][1] = {{~0}};
           49 +
           50  static const Layout layouts[] = {
           51          /* symbol     arrange function */
           52          { "[]=",      tile },    /* first entry is default */
           53          { "><>",      NULL },    /* no layout function means floating behavior */
           54          { "[M]",      monocle },
           55  };
           56  
           57  /* key definitions */
           58  #define WINKEY Mod4Mask
           59  #define MODKEY Mod1Mask
           60 @@ -90,30 +97,32 @@ static const Key keys[] = {
           61          { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
           62          TAGKEYS(                        XK_1,                      0)
           63          TAGKEYS(                        XK_2,                      1)
           64          TAGKEYS(                        XK_3,                      2)
           65          TAGKEYS(                        XK_4,                      3)
           66          TAGKEYS(                        XK_5,                      4)
           67          TAGKEYS(                        XK_6,                      5)
           68          TAGKEYS(                        XK_7,                      6)
           69          TAGKEYS(                        XK_8,                      7)
           70          TAGKEYS(                        XK_9,                      8)
           71 +        { MODKEY,                       XK_grave,  reset_view,     {0} },
           72          { MODKEY|ShiftMask,             XK_q,      quit,           {0} },
           73  };
           74  
           75  /* button definitions */
           76  /* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
           77  static const Button buttons[] = {
           78          /* click                event mask      button          function        argument */
           79          { ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
           80          { ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
           81          { ClkMonNum,            0,              Button1,        focusmon,       {.i = +1} },
           82 +        { ClkMonNum,            0,              Button2,        reset_view,     {0} },
           83          { ClkMonNum,            0,              Button3,        focusmon,       {.i = -1} },
           84          { ClkWinTitle,          0,              Button2,        zoom,           {0} },
           85          { ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
           86          { ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
           87          { ClkClientWin,         MODKEY,         Button2,        togglefloating, {0} },
           88          { ClkClientWin,         MODKEY,         Button3,        resizemouse,    {0} },
           89          { ClkTagBar,            0,              Button1,        view,           {0} },
           90          { ClkTagBar,            0,              Button3,        toggleview,     {0} },
           91          { ClkTagBar,            MODKEY|WINKEY,  Button1,        nview,          {0} },
           92          { ClkTagBar,            MODKEY|WINKEY,  Button3,        ntoggleview,    {0} },
           93 diff --git a/dwm.c b/dwm.c
           94 index 2cf8d78c22c64ff26eda6195b6bd503f213a4d5f..93da0f4565d7a17ef96a1b167cfcb2c9f0ac6ad3 100644
           95 --- a/dwm.c
           96 +++ b/dwm.c
           97 @@ -229,20 +229,21 @@ static void updatetitle(Client *c);
           98  static void updatewindowtype(Client *c);
           99  static void updatewmhints(Client *c);
          100  static void nview(const Arg *arg);
          101  static void view(const Arg *arg);
          102  static Client *wintoclient(Window w);
          103  static Monitor *wintomon(Window w);
          104  static int xerror(Display *dpy, XErrorEvent *ee);
          105  static int xerrordummy(Display *dpy, XErrorEvent *ee);
          106  static int xerrorstart(Display *dpy, XErrorEvent *ee);
          107  static void zoom(const Arg *arg);
          108 +static void reset_view(const Arg *arg);
          109  
          110  /* variables */
          111  static const char broken[] = "broken";
          112  static char stext[256];
          113  static int screen;
          114  static int sw, sh;           /* X display screen geometry width, height */
          115  static int bh;               /* bar height */
          116  static int lrpad;            /* sum of left and right padding for text */
          117  static int (*xerrorxlib)(Display *, XErrorEvent *);
          118  static unsigned int numlockmask = 0;
          119 @@ -2161,33 +2162,62 @@ zoom(const Arg *arg)
          120  {
          121          Client *c = selmon->sel;
          122  
          123          if (!selmon->lt[selmon->sellt]->arrange || !c || c->isfloating)
          124                  return;
          125          if (c == nexttiled(selmon->clients) && !(c = nexttiled(c->next)))
          126                  return;
          127          pop(c);
          128  }
          129  
          130 +void
          131 +reset_view(const Arg *arg) {
          132 +        const int mon = selmon->num;
          133 +        Arg n = {.i = +1};        // focusmon(next monitor)
          134 +        Arg m = {.f = 0};        // mfact -> facts[]
          135 +        Arg i = {.i = 0};        // nmaster -> masters[]
          136 +        Arg v = {.ui = 0};        // nviews -> views[]
          137 +        Arg t = {.ui = 0};        // toggles[] -> toggleview()
          138 +        unsigned int x;
          139 +        do {
          140 +                focusmon(&n);
          141 +                m.f = (facts[selmon->num] ? facts[selmon->num] : mfact) +1;
          142 +                i.i = (masters[selmon->num] ? masters[selmon->num] : nmaster) - selmon->nmaster;
          143 +                v.ui = (views[selmon->num] == ~0 ? ~0 : ((1 << (views[selmon->num] ? (views[selmon->num] +1) : (nviews +1))) -1));
          144 +                setmfact(&m);
          145 +                incnmaster(&i);
          146 +                view(&v);
          147 +                for (x = 0; x < LENGTH(toggles[selmon->num]); x++) {
          148 +                        if ((toggles[selmon->num][x] || toggles[selmon->num][x] == 0) && toggles[selmon->num][x] != ~0) {
          149 +                                t.ui = (1 << toggles[selmon->num][x]);
          150 +                                toggleview(&t);
          151 +                        };
          152 +                }
          153 +        }
          154 +        while (selmon->num != mon);
          155 +}
          156 +
          157  int
          158  main(int argc, char *argv[])
          159  {
          160          if (argc == 2 && !strcmp("-v", argv[1]))
          161                  die("dwm-"VERSION);
          162          else if (argc != 1)
          163                  die("usage: dwm [-v]");
          164          if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
          165                  fputs("warning: no locale support\n", stderr);
          166          if (!(dpy = XOpenDisplay(NULL)))
          167                  die("dwm: cannot open display");
          168          checkotherwm();
          169          setup();
          170  #ifdef __OpenBSD__
          171          if (pledge("stdio rpath proc exec", NULL) == -1)
          172                  die("pledge");
          173  #endif /* __OpenBSD__ */
          174          scan();
          175 +        const Arg r = {0};
          176 +        reset_view(&r);
          177          run();
          178          cleanup();
          179          XCloseDisplay(dpy);
          180          return EXIT_SUCCESS;
          181  }
          182 
          183 --------------2.37.4--
          184 
          185