sites

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

dwm-windowfollow-20221002-69d5652.diff (5394B)


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