Re: [dwm] patch to store layouts per tagset

From: Donald Chai <donald.chai_AT_gmail.com>
Date: Tue, 8 Jul 2008 18:42:25 -0700

> - shows all windownames in the statusbar (this is nice for the
> maximized layout, as you wouldnt see there are multiple windows on
> that tag otherweise). that stuff is a little bit messy, id like to
> see suggestions how to make that better. it uses a defined maximum
> length for the title, and if the length of all windownames gets too
> long, the title will not be drawn.

IMHO, it looks like most of the messiness is due to the 1px
separators: the code is much cleaner without them. The version below
omits them, and divides the available space if the length of all
windownames gets too long.

If you really like the 1px separators, maybe you should draw a big
box before anything else, and add
        dc.x++
wherever you want one?

void
drawbar(void) {
         int i, x;
         Client *c;

         dc.x = 0;
         for(i = 0; i < LENGTH(tags); i++) {
                 dc.w = TEXTW(tags[i]);
                 if(tagset[seltags] & 1 << i)
                         drawtext(tags[i], dc.norm, True);
                 else if(isurgent(i))
                         drawtext(tags[i], dc.sel, False);
                 else
                         continue;
                 dc.x += dc.w;
         }
         if(blw > 0) {
                 dc.w = blw;
                 drawtext(lt[sellt]->symbol, dc.norm, issaved());
                 x = dc.x + dc.w;
         }
         else
                 x = dc.x;
         dc.w = TEXTW(stext);
         dc.x = ww - dc.w;
         if(dc.x < x) {
                 dc.x = x;
                 dc.w = ww - x;
         }
         drawtext(stext, dc.norm, False);

         if((dc.w = dc.x - x) > bh) {
                 int nvis = 0;
                 int cw = 0;
                 int w;

                 dc.w = dc.x - x;
                 dc.x = x;
                 drawtext(NULL, dc.norm, False);
                 w = dc.w;

                 /* get the number of visible clients */
                 for(c = clients; c; c = c->next) {
                         if(ISVISIBLE(c)) {
                                 nvis++;
                                 cw += TEXTW(c->name);
                         }
                 }
                 for(c = clients; c; c = c->next) {
                         if(!ISVISIBLE(c))
                                 continue;
                         dc.w = (cw > w) ? (w / nvis) : TEXTW(c->name);
                         drawtext(c->name, dc.norm, sel == c);
                         dc.x += dc.w;
                 }
         }
         XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, ww, bh, 0, 0);
         XSync(dpy, False);
}
Received on Wed Jul 09 2008 - 03:41:26 UTC

This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 15:53:45 UTC