dwm-mark-6.1.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-mark-6.1.diff (7161B)
       ---
            1 diff -Naur dwm-6.1/config.def.h dwm-6.1-patched/config.def.h
            2 --- dwm-6.1/config.def.h        2015-11-09 06:39:37.000000000 +0800
            3 +++ dwm-6.1-patched/config.def.h        2016-02-17 16:46:11.137603047 +0800
            4 @@ -11,6 +11,8 @@
            5  static const char selbordercolor[]  = "#005577";
            6  static const char selbgcolor[]      = "#005577";
            7  static const char selfgcolor[]      = "#eeeeee";
            8 +static const char normmarkcolor[]   = "#775500";
            9 +static const char selmarkcolor[]    = "#775577";
           10  static const unsigned int borderpx  = 1;        /* border pixel of windows */
           11  static const unsigned int snap      = 32;       /* snap pixel */
           12  static const int showbar            = 1;        /* 0 means no bar */
           13 @@ -68,7 +70,6 @@
           14          { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
           15          { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
           16          { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
           17 -        { MODKEY,                       XK_Return, zoom,           {0} },
           18          { MODKEY,                       XK_Tab,    view,           {0} },
           19          { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
           20          { MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
           21 @@ -82,6 +83,9 @@
           22          { MODKEY,                       XK_period, focusmon,       {.i = +1 } },
           23          { MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
           24          { MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
           25 +        { MODKEY,                       XK_Return, swapclient,     {0} },
           26 +        { MODKEY,                       XK_o,      swapfocus,      {0} },
           27 +        { MODKEY,                       XK_semicolon, togglemark,  {0} }, 
           28          TAGKEYS(                        XK_1,                      0)
           29          TAGKEYS(                        XK_2,                      1)
           30          TAGKEYS(                        XK_3,                      2)
           31 diff -Naur dwm-6.1/drw.h dwm-6.1-patched/drw.h
           32 --- dwm-6.1/drw.h        2015-11-09 06:39:37.000000000 +0800
           33 +++ dwm-6.1-patched/drw.h        2016-02-17 16:18:47.424219808 +0800
           34 @@ -23,6 +23,7 @@
           35          Clr *fg;
           36          Clr *bg;
           37          Clr *border;
           38 +        Clr *mark;
           39  } ClrScheme;
           40  
           41  typedef struct {
           42 diff -Naur dwm-6.1/dwm.c dwm-6.1-patched/dwm.c
           43 --- dwm-6.1/dwm.c        2015-11-09 06:39:37.000000000 +0800
           44 +++ dwm-6.1-patched/dwm.c        2016-02-17 16:41:55.737595294 +0800
           45 @@ -201,16 +201,20 @@
           46  static void setfocus(Client *c);
           47  static void setfullscreen(Client *c, int fullscreen);
           48  static void setlayout(const Arg *arg);
           49 +static void stemark(const Arg *arg);
           50  static void setmfact(const Arg *arg);
           51  static void setup(void);
           52  static void showhide(Client *c);
           53  static void sigchld(int unused);
           54  static void spawn(const Arg *arg);
           55 +static void swapclient(const Arg *arg);
           56 +static void swapfocus(const Arg *arg);
           57  static void tag(const Arg *arg);
           58  static void tagmon(const Arg *arg);
           59  static void tile(Monitor *);
           60  static void togglebar(const Arg *arg);
           61  static void togglefloating(const Arg *arg);
           62 +static void togglemark(const Arg *arg);
           63  static void toggletag(const Arg *arg);
           64  static void toggleview(const Arg *arg);
           65  static void unfocus(Client *c, int setfocus);
           66 @@ -266,6 +270,7 @@
           67  static Drw *drw;
           68  static Monitor *mons, *selmon;
           69  static Window root;
           70 +static Client *mark;
           71  
           72  /* configuration, allows nested code to access above variables */
           73  #include "config.h"
           74 @@ -482,6 +487,7 @@
           75          for (i = 0; i < CurLast; i++)
           76                  drw_cur_free(drw, cursor[i]);
           77          for (i = 0; i < SchemeLast; i++) {
           78 +                drw_clr_free(scheme[i].mark);
           79                  drw_clr_free(scheme[i].border);
           80                  drw_clr_free(scheme[i].bg);
           81                  drw_clr_free(scheme[i].fg);
           82 @@ -807,7 +813,12 @@
           83                  detachstack(c);
           84                  attachstack(c);
           85                  grabbuttons(c, 1);
           86 -                XSetWindowBorder(dpy, c->win, scheme[SchemeSel].border->pix);
           87 +                if (c == mark)
           88 +                        XSetWindowBorder(dpy, c->win,
           89 +                                        scheme[SchemeSel].mark->pix);
           90 +                else 
           91 +                        XSetWindowBorder(dpy, c->win,
           92 +                                        scheme[SchemeSel].border->pix);
           93                  setfocus(c);
           94          } else {
           95                  XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
           96 @@ -1018,6 +1029,8 @@
           97  {
           98          if (!selmon->sel)
           99                  return;
          100 +        if (mark == selmon->sel)
          101 +                setmark(0);
          102          if (!sendevent(selmon->sel, wmatom[WMDelete])) {
          103                  XGrabServer(dpy);
          104                  XSetErrorHandler(xerrordummy);
          105 @@ -1065,7 +1078,10 @@
          106  
          107          wc.border_width = c->bw;
          108          XConfigureWindow(dpy, w, CWBorderWidth, &wc);
          109 -        XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
          110 +        if (c == mark)
          111 +                XSetWindowBorder(dpy, w, scheme[SchemeNorm].mark->pix);
          112 +        else
          113 +                XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->pix);
          114          configure(c); /* propagates border_width, if size doesn't change */
          115          updatewindowtype(c);
          116          updatesizehints(c);
          117 @@ -1528,6 +1544,23 @@
          118                  drawbar(selmon);
          119  }
          120  
          121 +void
          122 +setmark(Client *c)
          123 +{
          124 +        if (c == mark)
          125 +                return;
          126 +        if (mark) {
          127 +                XSetWindowBorder(dpy, mark->win, scheme[mark == selmon->sel
          128 +                                ? SchemeSel : SchemeNorm].border->pix);
          129 +                mark = 0;
          130 +        }
          131 +        if (c) {
          132 +                XSetWindowBorder(dpy, c->win, scheme[c == selmon->sel 
          133 +                                ? SchemeSel : SchemeNorm].mark->pix);
          134 +                mark = c;
          135 +        }
          136 +}
          137 +
          138  /* arg > 1.0 will set mfact absolutly */
          139  void
          140  setmfact(const Arg *arg)
          141 @@ -1580,9 +1613,11 @@
          142          cursor[CurResize] = drw_cur_create(drw, XC_sizing);
          143          cursor[CurMove] = drw_cur_create(drw, XC_fleur);
          144          /* init appearance */
          145 +        scheme[SchemeNorm].mark = drw_clr_create(drw, normmarkcolor);
          146          scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor);
          147          scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor);
          148          scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor);
          149 +        scheme[SchemeSel].mark = drw_clr_create(drw, selmarkcolor);
          150          scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor);
          151          scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor);
          152          scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor);
          153 @@ -1646,6 +1681,50 @@
          154  }
          155  
          156  void
          157 +swapclient(const Arg *arg)
          158 +{
          159 +        Client *s, *m, t;
          160 +
          161 +        if (!mark) {
          162 +                zoom(0);
          163 +                return;
          164 +        }
          165 +        s = selmon->sel;
          166 +        m = mark;
          167 +        if (!s || m == s || !selmon->lt[selmon->sellt]->arrange)
          168 +                return;
          169 +        t = *s;
          170 +        strcpy(s->name, m->name);
          171 +        strcpy(m->name, t.name);
          172 +        s->win = m->win;
          173 +        m->win = t.win;
          174 +        XMoveResizeWindow(dpy, s->win, s->x + 2 * sw, s->y, s->w, s->h);
          175 +        arrange(s->mon);
          176 +        XMapWindow(dpy, s->win);
          177 +        XMoveResizeWindow(dpy, m->win, m->x + 2 * sw, m->y, m->w, m->h);
          178 +        arrange(m->mon);
          179 +        XMapWindow(dpy, m->win);
          180 +
          181 +        selmon->sel = m;
          182 +        mark = s;
          183 +        focus(s);
          184 +        setmark(m);
          185 +}
          186 +
          187 +void
          188 +swapfocus(const Arg *arg)
          189 +{
          190 +        Client *t;
          191 +
          192 +        if (!selmon->sel || !mark || selmon->sel == mark) {
          193 +                return;
          194 +        }
          195 +        t = mark;
          196 +        setmark(selmon->sel);
          197 +        focus(t);
          198 +}
          199 +
          200 +void
          201  tag(const Arg *arg)
          202  {
          203          if (selmon->sel && arg->ui & TAGMASK) {
          204 @@ -1713,6 +1792,15 @@
          205  }
          206  
          207  void
          208 +togglemark(const Arg *arg)
          209 +{
          210 +        if (!selmon->sel) {
          211 +                return;
          212 +        }
          213 +        setmark(selmon->sel == mark ? 0 : selmon->sel);
          214 +}
          215 +
          216 +void
          217  toggletag(const Arg *arg)
          218  {
          219          unsigned int newtags;
          220 @@ -1745,7 +1833,10 @@
          221          if (!c)
          222                  return;
          223          grabbuttons(c, 0);
          224 -        XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
          225 +        if (c == mark)
          226 +                XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].mark->pix);
          227 +        else
          228 +                XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->pix);
          229          if (setfocus) {
          230                  XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
          231                  XDeleteProperty(dpy, root, netatom[NetActiveWindow]);