Unset mode when clearing regions - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 8de8ae3923b3b91b034077c8c35acba629588233
 (DIR) parent ec3268961d1dc4072f6caa6f97db5436da2ff411
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Thu,  7 Aug 2014 10:11:38 +0200
       
       Unset mode when clearing regions
       
       tclearregion() was clearing regions using spaces and the current
       attributes of the terminal. It was correct with all the modes excepct
       underline, because they didn't affect the space character, but in
       the case of underline it was a problem. A easy way of seeing this
       problem is writing this in the last line of the terminal:
       
               tput smul ; echo first; tput rmul; echo second; echo third
       
       Fist was underlined, and second and third were not underlined, but
       the spaces at the right of second was underlined becuause in the
       previous scrool underline mode was set.
       
       Diffstat:
         M st.c                                |       8 ++++++--
       
       1 file changed, 6 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -1553,6 +1553,7 @@ tsetchar(char *c, Glyph *attr, int x, int y) {
        void
        tclearregion(int x1, int y1, int x2, int y2) {
                int x, y, temp;
       +        Glyph *gp;
        
                if(x1 > x2)
                        temp = x1, x1 = x2, x2 = temp;
       @@ -1567,10 +1568,13 @@ tclearregion(int x1, int y1, int x2, int y2) {
                for(y = y1; y <= y2; y++) {
                        term.dirty[y] = 1;
                        for(x = x1; x <= x2; x++) {
       +                        gp = &term.line[y][x];
                                if(selected(x, y))
                                        selclear(NULL);
       -                        term.line[y][x] = term.c.attr;
       -                        memcpy(term.line[y][x].c, " ", 2);
       +                        gp->fg = term.c.attr.fg;
       +                        gp->bg = term.c.attr.bg;
       +                        gp->mode = 0;
       +                        memcpy(gp->c, " ", 2);
                        }
                }
        }