this patch hides the tab bar if only one tab is open - tabbed - my small fork of tabbed
 (HTM) git clone https://git.drkhsh.at/tabbed.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2e9bee310c401357164d8f75b878ff902d69a412
 (DIR) parent 82374bcf6d35f6b05412382b8e51e1202ce4379b
 (HTM) Author: drkhsh <me@drkhsh.at>
       Date:   Sun, 20 Jul 2025 03:15:47 +0200
       
       this patch hides the tab bar if only one tab is open
       
       Diffstat:
         M tabbed.c                            |      17 +++++++++++++----
       
       1 file changed, 13 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/tabbed.c b/tabbed.c
       @@ -152,7 +152,7 @@ static void (*handler[LASTEvent]) (const XEvent *) = {
                [MapRequest] = maprequest,
                [PropertyNotify] = propertynotify,
        };
       -static int bh, obh, wx, wy, ww, wh;
       +static int bh, obh, wx, wy, ww, wh, vbh;
        static unsigned int numlockmask;
        static Bool running = True, nextfocus, doinitspawn = True,
                    fillagain = False, closelastclient = False,
       @@ -324,7 +324,7 @@ void
        drawbar(void)
        {
                XftColor *col;
       -        int c, cc, fc, width;
       +        int c, cc, fc, width, nbh, i;
                char *name = NULL;
        
                if (nclients == 0) {
       @@ -332,12 +332,21 @@ drawbar(void)
                        dc.w = ww;
                        XFetchName(dpy, win, &name);
                        drawtext(name ? name : "", dc.norm);
       -                XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, ww, bh, 0, 0);
       +                XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, ww, vbh, 0, 0);
                        XSync(dpy, False);
        
                        return;
                }
        
       +        nbh = nclients > 1 ? vbh : 0;
       +        if (bh != nbh) {
       +                bh = nbh;
       +                for (i = 0; i < nclients; i++)
       +                        XMoveResizeWindow(dpy, clients[i]->win, 0, bh, ww, wh - bh);
       +                }
       +        if (bh == 0)
       +                return;
       +
                width = ww;
                cc = ww / tabwidth;
                if (nclients > cc)
       @@ -1003,7 +1012,7 @@ setup(void)
                screen = DefaultScreen(dpy);
                root = RootWindow(dpy, screen);
                initfont(font);
       -        bh = dc.h = dc.font.height + 2;
       +        vbh = dc.h = dc.font.height + 2;
        
                /* init atoms */
                wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);