sites

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

dwm-dualstatus-20251003-89e0350.diff (5172B)


      1 From 89e03501c62b7533d7c4399e2b65feaaf8ccf1b0 Mon Sep 17 00:00:00 2001
      2 From: elbachir-one <bachiralfa@gmail.com>
      3 Date: Fri, 3 Oct 2025 10:39:34 +0100
      4 Subject: [PATCH] Fixed patch — no more errors when applying it
      5 
      6 ---
      7  config.def.h |  2 ++
      8  dwm.c        | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++-
      9  2 files changed, 55 insertions(+), 1 deletion(-)
     10 
     11 diff --git a/config.def.h b/config.def.h
     12 index 3836510..d1bf68c 100644
     13 --- a/config.def.h
     14 +++ b/config.def.h
     15 @@ -5,6 +5,7 @@ static const unsigned int borderpx  = 1;        /* border pixel of windows */
     16  static const unsigned int snap      = 32;       /* snap pixel */
     17  static const int showbar            = 1;        /* 0 means no bar */
     18  static const int topbar             = 1;        /* 0 means bottom bar */
     19 +static const int extrabar           = 1;        /* 0 means no extra bar */
     20  static const char *fonts[]          = { "monospace:size=10" };
     21  static const char dmenufont[]       = "monospace:size=10";
     22  static const char col_gray1[]       = "#222222";
     23 @@ -66,6 +67,7 @@ static const Key keys[] = {
     24  	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
     25  	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = termcmd } },
     26  	{ MODKEY,                       XK_b,      togglebar,      {0} },
     27 +	{ MODKEY,                       XK_b,      toggleextrabar, {0} },
     28  	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
     29  	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
     30  	{ MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
     31 diff --git a/dwm.c b/dwm.c
     32 index 4f345ee..52149ad 100644
     33 --- a/dwm.c
     34 +++ b/dwm.c
     35 @@ -140,6 +140,13 @@ typedef struct {
     36  	int monitor;
     37  } Rule;
     38  
     39 +typedef struct {
     40 +	int y;
     41 +	int show;
     42 +	Window win;
     43 +	char text[256];
     44 +} Bar;
     45 +
     46  /* function declarations */
     47  static void applyrules(Client *c);
     48  static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
     49 @@ -209,6 +216,7 @@ static void tag(const Arg *arg);
     50  static void tagmon(const Arg *arg);
     51  static void tile(Monitor *m);
     52  static void togglebar(const Arg *arg);
     53 +static void toggleextrabar(const Arg *arg);
     54  static void togglefloating(const Arg *arg);
     55  static void toggletag(const Arg *arg);
     56  static void toggleview(const Arg *arg);
     57 @@ -266,6 +274,7 @@ static Display *dpy;
     58  static Drw *drw;
     59  static Monitor *mons, *selmon;
     60  static Window root, wmcheckwin;
     61 +static Bar eb;
     62  
     63  /* configuration, allows nested code to access above variables */
     64  #include "config.h"
     65 @@ -481,6 +490,8 @@ cleanup(void)
     66  		while (m->stack)
     67  			unmanage(m->stack, 0);
     68  	XUngrabKey(dpy, AnyKey, AnyModifier, root);
     69 +	XUnmapWindow(dpy, eb.win);
     70 +	XDestroyWindow(dpy, eb.win);
     71  	while (mons)
     72  		cleanupmon(mons);
     73  	for (i = 0; i < CurLast; i++)
     74 @@ -570,6 +581,7 @@ configurenotify(XEvent *e)
     75  					if (c->isfullscreen)
     76  						resizeclient(c, m->mx, m->my, m->mw, m->mh);
     77  				XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
     78 +				XMoveResizeWindow(dpy, eb.win, mons->wx, eb.y, mons->ww, bh);
     79  			}
     80  			focus(NULL);
     81  			arrange(NULL);
     82 @@ -745,6 +757,9 @@ drawbar(Monitor *m)
     83  		}
     84  	}
     85  	drw_map(drw, m->barwin, 0, 0, m->ww, bh);
     86 +	drw_setscheme(drw, scheme[SchemeNorm]);
     87 +	drw_text(drw, 0, 0, mons->ww, bh, 0, eb.text, 0);
     88 +	drw_map(drw, eb.win, 0, 0, mons->ww, bh);
     89  }
     90  
     91  void
     92 @@ -1558,6 +1573,7 @@ setup(void)
     93  	sh = DisplayHeight(dpy, screen);
     94  	root = RootWindow(dpy, screen);
     95  	drw = drw_create(dpy, screen, root, sw, sh);
     96 +	eb.show = extrabar;
     97  	if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
     98  		die("no fonts could be loaded.");
     99  	lrpad = drw->fonts->h;
    100 @@ -1720,6 +1736,17 @@ togglebar(const Arg *arg)
    101  	arrange(selmon);
    102  }
    103  
    104 +void
    105 +toggleextrabar(const Arg *arg)
    106 +{
    107 +	if(selmon == mons) {
    108 +		eb.show = !eb.show;
    109 +		updatebarpos(selmon);
    110 +		XMoveResizeWindow(dpy, eb.win, selmon->wx, eb.y, selmon->ww, bh);
    111 +		arrange(selmon);
    112 +	}
    113 +}
    114 +
    115  void
    116  togglefloating(const Arg *arg)
    117  {
    118 @@ -1834,6 +1861,13 @@ updatebars(void)
    119  		XMapRaised(dpy, m->barwin);
    120  		XSetClassHint(dpy, m->barwin, &ch);
    121  	}
    122 +	if (!eb.win) {
    123 +		eb.win = XCreateWindow(dpy, root, mons->wx, eb.y, mons->ww, bh, 0, DefaultDepth(dpy, screen),
    124 +			   CopyFromParent, DefaultVisual(dpy, screen),
    125 +			   CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
    126 +		XDefineCursor(dpy, eb.win, cursor[CurNormal]->cursor);
    127 +		XMapRaised(dpy, eb.win);
    128 +	}
    129  }
    130  
    131  void
    132 @@ -1847,6 +1881,13 @@ updatebarpos(Monitor *m)
    133  		m->wy = m->topbar ? m->wy + bh : m->wy;
    134  	} else
    135  		m->by = -bh;
    136 +
    137 +	if (m == mons && eb.show) {
    138 +		m->wh -= bh;
    139 +		eb.y = topbar ? m->wy + m->wh : m->wy;
    140 +		m->wy = m->topbar ? m->wy : m->wy + bh;
    141 +	} else
    142 +		eb.y = -bh;
    143  }
    144  
    145  void
    146 @@ -2004,8 +2045,19 @@ updatesizehints(Client *c)
    147  void
    148  updatestatus(void)
    149  {
    150 -	if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
    151 +	char text[512];
    152 +	if (!gettextprop(root, XA_WM_NAME, text, sizeof(text))) { 
    153  		strcpy(stext, "dwm-"VERSION);
    154 +		eb.text[0] = '\0';
    155 +	} else {
    156 +		char *e = strchr(text, ';');
    157 +		if (e) {
    158 +			*e = '\0'; e++;
    159 +			strncpy(eb.text, e, sizeof(eb.text)-1);
    160 +		} else
    161 +			eb.text[0] = '\0';
    162 +		strncpy(stext, text, sizeof(stext)-1);
    163 +	}
    164  	drawbar(selmon);
    165  }
    166  
    167 -- 
    168 2.50.1
    169