Applying the tab expansion patch from koga. - st - Simple Terminal
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit b56a0da283bd09d5084f472353c1a0b1b084613e
 (DIR) parent 71b09ec4f172da9a89be2add54b5b94da8af3bea
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sun, 28 Oct 2012 13:35:00 +0100
       
       Applying the tab expansion patch from koga.
       
       Diffstat:
         st.c                                |      22 +++++++++++++---------
       
       1 file changed, 13 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -663,9 +663,9 @@ bpress(XEvent *e) {
        
        void
        selcopy(void) {
       -        char *str, *ptr;
       +        char *str, *ptr, *p;
                int x, y, bufsize, is_selected = 0, size;
       -        Glyph *gp;
       +        Glyph *gp, *last;
        
                if(sel.bx == -1) {
                        str = NULL;
       @@ -675,15 +675,19 @@ selcopy(void) {
        
                        /* append every set & selected glyph to the selection */
                        for(y = 0; y < term.row; y++) {
       -                        for(x = 0; x < term.col; x++) {
       -                                gp = &term.line[y][x];
       +                        gp = &term.line[y][0];
       +                        last = gp + term.col;
        
       -                                if(!(is_selected = selected(x, y))
       -                                                || !(gp->state & GLYPH_SET)) {
       +                        while(--last >= gp && !(last->state & GLYPH_SET))
       +                                /* nothing */;
       +
       +                        for(x = 0; gp <= last; x++, ++gp) {
       +                                if(!(is_selected = selected(x, y)))
                                                continue;
       -                                }
       -                                size = utf8size(gp->c);
       -                                memcpy(ptr, gp->c, size);
       +
       +                                p = (gp->state & GLYPH_SET) ? gp->c : " ";
       +                                size = utf8size(p);
       +                                memcpy(ptr, p, size);
                                        ptr += size;
                                }
                                /* \n at the end of every selected line except for the last one */