void
reorganizetags(const Arg *arg)
{
   Client *c;
   unsigned int occ, unocc, i;
   unsigned int tagdest[NUMTAGS];

   occ = 0;
   for (c = selmon->clients; c; c = c->next)
       occ |= (1 << (ffs(c->tags)-1));
   unocc = 0;
   for (i = 0; i < NUMTAGS; ++i) {
       while (unocc < i && (occ & (1 << unocc)))
           unocc++;
       if (occ & (1 << i)) {
           tagdest[i] = unocc;
           occ &= ~(1 << i);
           occ |= 1 << unocc;
       }
   }

   for (c = selmon->clients; c; c = c->next)
       c->tags = 1 << tagdest[ffs(c->tags)-1];
   if (selmon->sel)
       selmon->tagset[selmon->seltags] = selmon->sel->tags;
   arrange(selmon);
}