URI: 
       Correcting the lastsel handling in tabbed. It should be more predictable now. - tabbed - tab interface for application supporting Xembed
  HTML git clone git://git.suckless.org/tabbed
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit ffa2dbeb645a3a3d6883d569107b1efd49472035
   DIR parent 5e1c53ad3cecdfcb773e606a65ae853a524d8136
  HTML Author: Christoph Lohmann <20h@r-36.net>
       Date:   Tue, 27 Nov 2012 20:25:56 +0100
       
       Correcting the lastsel handling in tabbed. It should be more predictable now.
       Diffstat:
         M tabbed.1                            |       2 +-
         M tabbed.c                            |      40 +++++++++++++++++--------------
       
       2 files changed, 23 insertions(+), 19 deletions(-)
       ---
   DIR diff --git a/tabbed.1 b/tabbed.1
       @@ -65,7 +65,7 @@ move selected tab one to the left
        move selected tab one to the right
        .TP
        .B Ctrl\-Tab
       -toggle between tabs
       +toggle between the selected and last selected tab
        .TP
        .B Ctrl\-q
        close tab
   DIR diff --git a/tabbed.c b/tabbed.c
       @@ -437,8 +437,8 @@ focus(int c) {
        
                if(sel != c)
                        lastsel = sel;
       -
                sel = c;
       +
                drawbar();
        }
        
       @@ -682,9 +682,6 @@ manage(Window w) {
                        XSync(dpy, False);
                        focus((nextfocus)? 0 : ((sel < 0)? 0 : sel));
                        nextfocus = foreground;
       -
       -                if(lastsel < 0)
       -                        lastsel = 0;
                }
        }
        
       @@ -919,45 +916,52 @@ textnw(const char *text, unsigned int len) {
        
        void
        unmanage(int c) {
       -        int pc;
       -
       -        if(c < 0 || c >= nclients)
       +        if(c < 0 || c >= nclients) {
       +                drawbar();
                        return;
       +        }
        
                if(!nclients) {
                        return;
                } else if(c == 0) {
                        /* First client. */
       -                pc = 0;
                        nclients--;
                        free(clients[0]);
                        memmove(&clients[0], &clients[1], sizeof(Client *) * nclients);
                } else if(c == nclients - 1) {
                        /* Last client. */
                        nclients--;
       -                pc = nclients - 1;
                        free(clients[c]);
                        clients = erealloc(clients, sizeof(Client *) * nclients);
                } else {
                        /* Somewhere inbetween. */
       -                pc = c + 1;
                        free(clients[c]);
                        memmove(&clients[c], &clients[c+1],
                                        sizeof(Client *) * (nclients - (c + 1)));
                        nclients--;
                }
        
       -        if(c == lastsel)
       -                lastsel = 0;
       -        if(c == sel) {
       -                sel = pc;
       -                focus(lastsel);
       +        if(c == lastsel) {
       +                lastsel = -1;
       +        } else if(lastsel > c) {
       +                lastsel--;
                }
        
       -        if(nclients == 0) {
       -                if(fillagain)
       -                        spawn(NULL);
       +        if(sel > c && c > 0) {
       +                sel--;
       +                lastsel = -1;
                }
       +        if(c == nclients && nclients > 0)
       +                sel = nclients - 1;
       +
       +        if(lastsel > -1) {
       +                focus(lastsel);
       +        } else {
       +                focus(sel);
       +        }
       +
       +        if(nclients == 0 && fillagain)
       +                spawn(NULL);
        
                drawbar();
                XSync(dpy, False);