sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dwm-windowfollow-6.3.diff (5187B)


      1 diff '--color=auto' -up dwm-6.3/config.def.h windowfollow-impl-6-3/config.def.h
      2 --- dwm-6.3/config.def.h	2022-01-07 11:42:18.000000000 +0000
      3 +++ windowfollow-impl-6-3/config.def.h	2022-10-02 18:32:22.244267491 +0100
      4 @@ -31,6 +31,11 @@ static const Rule rules[] = {
      5  	{ "Firefox",  NULL,       NULL,       1 << 8,       0,           -1 },
      6  };
      7  
      8 +/* window following */
      9 +#define WFACTIVE '>'
     10 +#define WFINACTIVE 'v'
     11 +#define WFDEFAULT WFINACTIVE
     12 +
     13  /* layout(s) */
     14  static const float mfact     = 0.55; /* factor of master area size [0.05..0.95] */
     15  static const int nmaster     = 1;    /* number of clients in master area */
     16 @@ -65,6 +70,7 @@ static Key keys[] = {
     17  	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
     18  	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
     19  	{ MODKEY,                       XK_b,      togglebar,      {0} },
     20 +	{ MODKEY,                       XK_n,      togglefollow,   {0} },
     21  	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
     22  	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
     23  	{ MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
     24 @@ -103,6 +109,7 @@ static Button buttons[] = {
     25  	/* click                event mask      button          function        argument */
     26  	{ ClkLtSymbol,          0,              Button1,        setlayout,      {0} },
     27  	{ ClkLtSymbol,          0,              Button3,        setlayout,      {.v = &layouts[2]} },
     28 +	{ ClkFollowSymbol,      0,              Button1,        togglefollow,   {0} },
     29  	{ ClkWinTitle,          0,              Button2,        zoom,           {0} },
     30  	{ ClkStatusText,        0,              Button2,        spawn,          {.v = termcmd } },
     31  	{ ClkClientWin,         MODKEY,         Button1,        movemouse,      {0} },
     32 diff '--color=auto' -up dwm-6.3/dwm.1 windowfollow-impl-6-3/dwm.1
     33 --- dwm-6.3/dwm.1	2022-01-07 11:42:18.000000000 +0000
     34 +++ windowfollow-impl-6-3/dwm.1	2022-10-02 18:32:22.244267491 +0100
     35 @@ -44,7 +44,8 @@ command.
     36  .TP
     37  .B Button1
     38  click on a tag label to display all windows with that tag, click on the layout
     39 -label toggles between tiled and floating layout.
     40 +label toggles between tiled and floating layout, click on the window follow
     41 +icon toggles it on and off.
     42  .TP
     43  .B Button3
     44  click on a tag label adds/removes all windows with that tag to/from the view.
     45 @@ -80,6 +81,9 @@ Send focused window to next screen, if a
     46  .B Mod1\-b
     47  Toggles bar on and off.
     48  .TP
     49 +.B Mod1\-n
     50 +Toggles window following on and off.
     51 +.TP
     52  .B Mod1\-t
     53  Sets tiled layout.
     54  .TP
     55 diff '--color=auto' -up dwm-6.3/dwm.c windowfollow-impl-6-3/dwm.c
     56 --- dwm-6.3/dwm.c	2022-01-07 11:42:18.000000000 +0000
     57 +++ windowfollow-impl-6-3/dwm.c	2022-10-02 18:32:22.244267491 +0100
     58 @@ -65,7 +65,7 @@ enum { NetSupported, NetWMName, NetWMSta
     59         NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
     60  enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
     61  enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
     62 -       ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
     63 +       ClkClientWin, ClkRootWin, ClkFollowSymbol, ClkLast }; /* clicks */
     64  
     65  typedef union {
     66  	int i;
     67 @@ -113,6 +113,7 @@ typedef struct {
     68  
     69  struct Monitor {
     70  	char ltsymbol[16];
     71 +	char wfsymbol[2];
     72  	float mfact;
     73  	int nmaster;
     74  	int num;
     75 @@ -212,6 +213,7 @@ static void tagmon(const Arg *arg);
     76  static void tile(Monitor *);
     77  static void togglebar(const Arg *arg);
     78  static void togglefloating(const Arg *arg);
     79 +static void togglefollow(const Arg *arg);
     80  static void toggletag(const Arg *arg);
     81  static void toggleview(const Arg *arg);
     82  static void unfocus(Client *c, int setfocus);
     83 @@ -440,6 +442,8 @@ buttonpress(XEvent *e)
     84  			arg.ui = 1 << i;
     85  		} else if (ev->x < x + blw)
     86  			click = ClkLtSymbol;
     87 +		else if (ev->x < x + blw + TEXTW(selmon->wfsymbol))
     88 +			click = ClkFollowSymbol;
     89  		else if (ev->x > selmon->ww - (int)TEXTW(stext))
     90  			click = ClkStatusText;
     91  		else
     92 @@ -642,6 +646,8 @@ createmon(void)
     93  	m->lt[0] = &layouts[0];
     94  	m->lt[1] = &layouts[1 % LENGTH(layouts)];
     95  	strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
     96 +	m->wfsymbol[0] = WFDEFAULT;
     97 +	m->wfsymbol[1] = '\0';
     98  	return m;
     99  }
    100  
    101 @@ -732,6 +738,9 @@ drawbar(Monitor *m)
    102  	drw_setscheme(drw, scheme[SchemeNorm]);
    103  	x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
    104  
    105 +	w = TEXTW(m->wfsymbol);
    106 +	x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->wfsymbol, 0);
    107 +
    108  	if ((w = m->ww - tw - x) > bh) {
    109  		if (m->sel) {
    110  			drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
    111 @@ -1664,6 +1673,8 @@ tag(const Arg *arg)
    112  		focus(NULL);
    113  		arrange(selmon);
    114  	}
    115 +	if (selmon->wfsymbol[0] == WFACTIVE)
    116 +		view(arg);
    117  }
    118  
    119  void
    120 @@ -1672,6 +1683,8 @@ tagmon(const Arg *arg)
    121  	if (!selmon->sel || !mons->next)
    122  		return;
    123  	sendmon(selmon->sel, dirtomon(arg->i));
    124 +	if (selmon->wfsymbol[0] == WFACTIVE)
    125 +		focusmon(arg);
    126  }
    127  
    128  void
    129 @@ -1712,6 +1725,13 @@ togglebar(const Arg *arg)
    130  }
    131  
    132  void
    133 +togglefollow(const Arg *arg)
    134 +{
    135 +	selmon->wfsymbol[0] = (selmon->wfsymbol[0] == WFACTIVE) ? WFINACTIVE : WFACTIVE;
    136 +	drawbars();
    137 +}
    138 +
    139 +void
    140  togglefloating(const Arg *arg)
    141  {
    142  	if (!selmon->sel)